From 02440a5d6343c6d2383f98b7e76c51d5615bfb8a Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Fri, 27 Sep 2024 12:54:02 +0000 Subject: [PATCH] Built from commit 'a7b7b10' --- .nojekyll | 0 404.html | 13 + assets/css/styles.8460b425.css | 1 + ...cling-8cbf643933baa1262460838cc4b483ae.png | Bin 0 -> 44134 bytes ...pling-1618c246583304921e59eced813219f2.png | Bin 0 -> 237031 bytes ..._line-98e32f3b0d5332a371ec4bb2dbc66da8.png | Bin 0 -> 43526 bytes ...chart-74501f10294f5dd339dba1a305bbe3f6.png | Bin 0 -> 31408 bytes ...oking-e0ac6b7a8379c76a8f29199d7aa9086c.png | Bin 0 -> 45513 bytes ...ssure-c971bb4cd1ee2f4d1cd9827d6231364c.png | Bin 0 -> 157773 bytes ...rview-26f2e87a69f9a685f123b818e6bed313.png | Bin 0 -> 38869 bytes ...ation-9c9342f8d3a926d760096a17ccb76556.svg | 4330 ++ ...chart-ba6f49b5df22923cfcbe4d5d2aa4525b.png | Bin 0 -> 43536 bytes ..._plot-d4eee4126032e046bf374ef66ceb9946.png | Bin 0 -> 16617 bytes ..._plot-527cac79a8c53527147492b170308459.png | Bin 0 -> 14318 bytes ...essor-3493b127c832898d93b5231594efa8d3.png | Bin 0 -> 69926 bytes ...chart-28c5f110972461aba840e82b0962c3d2.png | Bin 0 -> 66545 bytes ...reams-415751902a6078520845f70740eaa1af.png | Bin 0 -> 59154 bytes ...t_eff-136e9a9dd1af0700084ddf17be0d4453.PNG | Bin 0 -> 12910 bytes ..._head-ec0fc7f624752c8c95bd7c3f828090a3.PNG | Bin 0 -> 14284 bytes ...arity-3e43516a1e0246a2e125d4980006b137.png | Bin 0 -> 19396 bytes ...y_pfd-ad59578d69ea3d3267f646b9d8141822.jpg | Bin 0 -> 1261426 bytes ...oking-dc5aedeb280843ea22445ce83731b8dc.png | Bin 0 -> 46036 bytes ...ample-5b8c9832693a18b6500cf408c0b4873b.png | Bin 0 -> 150701 bytes assets/js/00bdc23f.66d5f21c.js | 1 + assets/js/03dfed1e.567e449b.js | 1 + assets/js/0425b884.72278814.js | 1 + assets/js/058ad5bf.0c0d810d.js | 1 + assets/js/06543a48.5310234a.js | 1 + assets/js/0673f3d8.5a6cdc86.js | 1 + assets/js/0745e7f0.1a08a580.js | 1 + assets/js/09bd96eb.86e1b386.js | 1 + assets/js/0a776dcb.a4df551c.js | 1 + assets/js/0c22fffd.91e5cbc7.js | 1 + assets/js/0fd76486.3776b2de.js | 1 + assets/js/0ffabbb0.fdb8e7bc.js | 1 + assets/js/1169.f5af047e.js | 1 + assets/js/1176.ef72ee50.js | 1 + assets/js/1245.fc77c46b.js | 1 + assets/js/130.def7e228.js | 18473 ++++++ assets/js/1303.2eab4989.js | 2 + assets/js/1303.2eab4989.js.LICENSE.txt | 9 + assets/js/1331.2f91c32d.js | 1 + assets/js/138e0e15.7676a675.js | 1 + assets/js/1398.a24173c3.js | 1 + assets/js/147b5d1b.11846856.js | 1 + assets/js/14eb3368.450e3902.js | 1 + assets/js/151edf84.14cd53fe.js | 1 + assets/js/155359f6.f5f625c3.js | 1 + assets/js/16059610.c4c04ce2.js | 1 + assets/js/162.ff070cda.js | 20438 ++++++ assets/js/163041ea.6d64c70e.js | 1 + assets/js/17896441.41832d39.js | 2 + assets/js/17896441.41832d39.js.LICENSE.txt | 9 + assets/js/18b0ec42.2ac73a22.js | 1 + assets/js/1946.4b9f4a0c.js | 1 + assets/js/1a4e3797.df845592.js | 1 + assets/js/1c663d3d.d38f16f7.js | 1 + assets/js/1d55f518.ed9ff422.js | 1 + assets/js/1df93b7f.7976f793.js | 1 + assets/js/1eb7400c.99dbd36c.js | 1 + assets/js/1f60d0d4.22494f28.js | 1 + assets/js/1f7805b6.29cce52e.js | 1 + assets/js/20703393.b1647309.js | 1 + assets/js/2121587b.6744d348.js | 1 + assets/js/2130.c5e4f4c2.js | 1 + assets/js/218ce29d.b7d66088.js | 1 + assets/js/2237.308b3350.js | 1 + assets/js/2376.cc3e3d09.js | 1 + assets/js/2453.6f423daf.js | 1 + assets/js/2548.46d5757e.js | 1 + assets/js/277de022.18fd3489.js | 1 + assets/js/27b97f54.4c21a317.js | 1 + assets/js/281e4beb.dea8f301.js | 1 + assets/js/282c1cc9.73879b24.js | 1 + assets/js/2843.22300328.js | 1 + assets/js/2924e06f.4213d1b7.js | 1 + assets/js/2925.f06f0a4f.js | 1 + assets/js/2983.93d6a43d.js | 1 + assets/js/2b2be347.21292636.js | 1 + assets/js/2b47973a.9071322a.js | 1 + assets/js/2b572af2.2a5b2378.js | 1 + assets/js/2ce3b5da.a3a2dcc3.js | 1 + assets/js/2cedaf2f.7266b378.js | 1 + assets/js/2f04f592.50d46dcd.js | 1 + assets/js/2fdfb4de.51347ac3.js | 1 + assets/js/303.39e1a2ee.js | 51571 ++++++++++++++++ assets/js/3068.021ebcf1.js | 1 + assets/js/32311569.ecdf1b16.js | 1 + assets/js/331.af64ff0c.js | 10814 ++++ assets/js/33498b04.3c79c15f.js | 1 + assets/js/3390a8e0.280e220b.js | 1 + assets/js/33fb585a.0eed8140.js | 1 + assets/js/3409ab5c.07103752.js | 1 + assets/js/3451a9ae.a366cef9.js | 1 + assets/js/34864e1f.78d111db.js | 1 + assets/js/3626.55925cb3.js | 1 + assets/js/3706.3ef4ee36.js | 1 + assets/js/3720c009.784ce305.js | 1 + assets/js/376.dedd6ca6.js | 1242 + assets/js/386ea0a5.a59c5988.js | 1 + assets/js/38d592cf.4449eff9.js | 1 + assets/js/3ac409ea.3e145ceb.js | 1 + assets/js/3be812e9.2ce31a7e.js | 1 + assets/js/3d5bbd33.c1ee4223.js | 1 + assets/js/3e38e310.5f46b2fe.js | 1 + assets/js/40912a5c.b11b4ca5.js | 1 + assets/js/40d6382c.cdc08712.js | 1 + assets/js/4162.389f54aa.js | 1 + assets/js/420.011125cd.js | 1323 + assets/js/426.9063c910.js | 10825 ++++ assets/js/428320b6.9fdfe9cc.js | 1 + assets/js/42b1e060.c0b5850f.js | 1 + assets/js/4358a0b2.1cc97b8a.js | 1 + assets/js/43a1031a.0a2d738e.js | 1 + assets/js/43a26e71.dd67e435.js | 1 + assets/js/4424673c.34b787c0.js | 1 + assets/js/453.2de45f11.js | 26805 ++++++++ assets/js/45c974ba.0b665fc2.js | 1 + assets/js/465c5577.777fdbe2.js | 1 + assets/js/46613219.210a2a47.js | 1 + assets/js/4741.8ba96072.js | 1 + assets/js/478.66e42700.js | 1227 + assets/js/47daf389.a34e589e.js | 1 + assets/js/489.5e628191.js | 2 + assets/js/489.5e628191.js.LICENSE.txt | 1 + assets/js/4943.7797e509.js | 1 + assets/js/496ed8d5.0530b3d2.js | 1 + assets/js/498bfcff.79dc88fb.js | 1 + assets/js/4aa4fc36.e9e47236.js | 1 + assets/js/4b5a01f9.6ef3d6d0.js | 1 + assets/js/4b80f681.637f9c92.js | 1 + assets/js/4d8633af.c131feaf.js | 1 + assets/js/4ee97ba8.9f4c6982.js | 1 + assets/js/5394.ec8f3b81.js | 1 + assets/js/56baec0c.15385c7f.js | 1 + assets/js/5741.3f175718.js | 1 + assets/js/5785ef4b.5a8eff10.js | 1 + assets/js/5920dbec.865006f6.js | 1 + assets/js/5b24544a.354ee6cb.js | 1 + assets/js/5bfc86d7.32a3926b.js | 1 + assets/js/5c08a402.656b6c7e.js | 1 + assets/js/5c8ec56d.16d6c1af.js | 1 + assets/js/5da39e49.02bbf67e.js | 1 + assets/js/5e10e9e1.8733fcd6.js | 1 + assets/js/5e95c892.084f3624.js | 1 + assets/js/5f3f5785.ffeee995.js | 1 + assets/js/60c8c0f3.1229e49d.js | 1 + assets/js/6268ac32.86d2733f.js | 1 + assets/js/62f9a98c.23d094ad.js | 1 + assets/js/63091997.747d23e4.js | 1 + assets/js/635.d2f8f161.js | 26180 ++++++++ assets/js/637c67a5.6b2b1de4.js | 1 + assets/js/63ecd22d.0a5816d7.js | 1 + assets/js/63f63b83.bc4fafbb.js | 1 + assets/js/6406f263.f9be9ff7.js | 1 + assets/js/6420.392ca7fe.js | 1 + assets/js/64d2b91f.dbbe6108.js | 1 + assets/js/66286265.39cf8098.js | 1 + assets/js/6711f262.25b663bb.js | 1 + assets/js/6788.423d194b.js | 1 + assets/js/68.af96128d.js | 26093 ++++++++ assets/js/6803.b770662f.js | 1 + assets/js/682b2100.74c56514.js | 1 + assets/js/689.a3a2233a.js | 3478 ++ assets/js/69fd9be6.cbada077.js | 1 + assets/js/6a04e9fa.56795369.js | 1 + assets/js/6a216250.bfc7f6f2.js | 1 + assets/js/6adcc868.4aa146e1.js | 1 + assets/js/6b1cdc5e.23acb505.js | 1 + assets/js/6b8f95a4.fd5cf9c9.js | 1 + assets/js/6bf1c518.a41f29cd.js | 1 + assets/js/6bf367cb.6058d350.js | 1 + assets/js/6eb500eb.c1ddc254.js | 1 + assets/js/6f2c9828.e0006080.js | 1 + assets/js/706.03fb65f6.js | 10065 +++ assets/js/70bbd824.a5ac8cee.js | 1 + assets/js/721cfe60.f1ac0539.js | 1 + assets/js/741.253699a9.js | 23923 +++++++ assets/js/741de8b7.b0766c91.js | 1 + assets/js/7426.1418c0c2.js | 1 + assets/js/7557b935.3331a08c.js | 1 + assets/js/75df07ec.a7ff5f37.js | 1 + assets/js/78771141.542d28f0.js | 1 + assets/js/788.e94a45f6.js | 1410 + assets/js/7b02141e.324a3fad.js | 1 + assets/js/7be299fb.e0a783e4.js | 1 + assets/js/7d3b81bb.c327fe31.js | 1 + assets/js/7d9552c0.fff8bb86.js | 1 + assets/js/7db788f5.cdf881d0.js | 1 + assets/js/7e6991bb.03ac52ca.js | 1 + assets/js/7eb3a421.4f947033.js | 1 + assets/js/803.8e7831e5.js | 742 + assets/js/8055.420163ab.js | 1 + assets/js/810.88aff555.js | 28500 +++++++++ assets/js/81dd00c5.bdfc871f.js | 1 + assets/js/8337.18b868de.js | 1 + assets/js/83ed74d7.558311cb.js | 1 + assets/js/841adc37.26b5c8c8.js | 1 + assets/js/843.d7e56aae.js | 540 + assets/js/8478.b172b069.js | 1 + assets/js/85cb5dc7.4db0a746.js | 1 + assets/js/8635.edad2cdd.js | 1 + assets/js/869.3cca42c0.js | 2105 + assets/js/8810.3128d514.js | 1 + assets/js/8859d7a9.7d814690.js | 1 + assets/js/8869.9de439a5.js | 1 + assets/js/8961bfac.95578cae.js | 1 + assets/js/8a4fc9f1.6a8ce834.js | 1 + assets/js/8abfe720.417e7671.js | 1 + assets/js/8bcf6c84.bdd49444.js | 1 + assets/js/8d2ce0de.05db6a6e.js | 1 + assets/js/902.630236d2.js | 10323 ++++ assets/js/908e0101.9f66b67f.js | 1 + assets/js/925.f8ccfbd9.js | 14571 +++++ assets/js/943.e1f9edb9.js | 1820 + assets/js/946.bcce335e.js | 2605 + assets/js/95bf0c8c.21e11369.js | 1 + assets/js/96533a10.b3a8cad4.js | 1 + assets/js/9680e89f.4f53056e.js | 1 + assets/js/9689.5859b53d.js | 1 + assets/js/9a118db7.e0e710f7.js | 1 + assets/js/9a7150ac.cceeda90.js | 1 + assets/js/9ac5a6f1.75350006.js | 1 + assets/js/9caa4dca.f5d5fbe0.js | 1 + assets/js/9d1a436a.f3298440.js | 1 + assets/js/9d87d0ad.73800669.js | 1 + assets/js/9e136365.0ca05f05.js | 1 + assets/js/9e91bf8d.3f92c5f9.js | 1 + assets/js/9f62981a.5e92dfad.js | 1 + assets/js/9fe770c0.123911d0.js | 1 + assets/js/a1e1f72e.a12161b6.js | 1 + assets/js/a2e97e20.bf98d1ec.js | 1 + assets/js/a359a99b.b9879044.js | 1 + assets/js/a592ae15.2b39f39d.js | 1 + assets/js/a5dcc804.396480f9.js | 1 + assets/js/a7456010.6958eccd.js | 1 + assets/js/a7bd4aaa.ac02ed0d.js | 1 + assets/js/a89a20bc.e0dbdb35.js | 1 + assets/js/a94703ab.77575623.js | 1 + assets/js/aae5f4ca.bb5e530c.js | 1 + assets/js/aba21aa0.c774b9b6.js | 1 + assets/js/ad129716.3e146e2e.js | 1 + assets/js/aedaac15.264095c6.js | 1 + assets/js/af105519.56e01e4d.js | 1 + assets/js/b2f67940.3e18db76.js | 1 + assets/js/b9581e7f.d87aa9cc.js | 1 + assets/js/bb45b332.933ee4bf.js | 1 + assets/js/bdf25f4c.7ae1f63d.js | 1 + assets/js/bf562633.eb1d4d4e.js | 1 + assets/js/bfdf430b.21810c64.js | 1 + assets/js/bffc9314.71323be9.js | 1 + assets/js/c127897d.80dabf97.js | 1 + assets/js/c1f3bf99.6a3b4b8d.js | 1 + assets/js/c240171b.ba77aa57.js | 1 + assets/js/c3d1f0cd.c85bd257.js | 1 + assets/js/c90bf1e8.4616fd83.js | 1 + assets/js/cbac54c5.746e1d32.js | 1 + assets/js/cbf35f3a.89e1e3fa.js | 1 + assets/js/cda37ba5.0a01ec17.js | 1 + assets/js/ce0c4b55.d9f7da32.js | 1 + assets/js/d20656b7.4d9e502c.js | 1 + assets/js/d2279440.c199f0c6.js | 1 + assets/js/d3d733e5.c16c0a33.js | 1 + assets/js/d5cd246e.5d533a23.js | 1 + assets/js/d708d793.49998533.js | 1 + assets/js/d857f50e.ac4e457f.js | 1 + assets/js/d8846ffb.084e4a37.js | 1 + assets/js/d8c9bd2d.6105424d.js | 1 + assets/js/d90d1a18.bd7b0cd9.js | 1 + assets/js/d9a6ba4c.f573b5d9.js | 1 + assets/js/dcab5fea.bd7ad1bd.js | 1 + assets/js/de3649f0.2d88cccf.js | 1 + assets/js/df203c0f.f449b894.js | 1 + assets/js/dfbab2f3.a1dd7dec.js | 1 + assets/js/e1df8231.261795dc.js | 1 + assets/js/e2712b99.282d782f.js | 1 + assets/js/e5622214.ad407cb7.js | 1 + assets/js/e64a1018.1f5145d5.js | 1 + assets/js/e8ebc025.a7473e7b.js | 1 + assets/js/e9e63826.0a978166.js | 1 + assets/js/ea18955c.e08b7ef2.js | 1 + assets/js/eab951c7.d3aa6a07.js | 1 + assets/js/eb609ab0.9bd53ea8.js | 1 + assets/js/eb949326.e491ee79.js | 1 + assets/js/ebdd570f.12240552.js | 1 + assets/js/ed5b25aa.7bc95883.js | 1 + assets/js/ed6dee8b.168a500a.js | 1 + assets/js/edb3a98b.a789225f.js | 1 + assets/js/eee46244.5cdfbdd9.js | 1 + assets/js/f054b415.ddae0d3b.js | 1 + assets/js/f256795b.08d49ac5.js | 1 + assets/js/f469c95f.d43928c8.js | 1 + assets/js/f4c60d9f.0b33cb43.js | 1 + assets/js/f52ed7e3.e35d875f.js | 1 + assets/js/f577f5c2.c5621f96.js | 1 + assets/js/f92867ed.7e67b420.js | 1 + assets/js/fa0b6059.2f627b0c.js | 1 + assets/js/fa17a3e5.56765911.js | 1 + assets/js/fa3d98bd.76d300f3.js | 1 + assets/js/fb7e7841.6bd54bb0.js | 1 + assets/js/fba8a418.751544b2.js | 1 + assets/js/fcc523f6.067010b7.js | 1 + assets/js/fe44757f.0c0de2c3.js | 1 + assets/js/fedb6237.5b3f7f78.js | 1 + assets/js/main.ddbe8469.js | 2 + assets/js/main.ddbe8469.js.LICENSE.txt | 126 + assets/js/runtime~main.a8700afe.js | 1 + docs/about/getting_started/api/index.html | 14 + docs/about/getting_started/api/libecalc.html | 238 + .../getting_started/api/libecalc/common.html | 278 + .../api/libecalc/common/chart_type.html | 397 + .../api/libecalc/common/component_info.html | 238 + .../component_info/component_level.html | 431 + .../common/component_info/compressor.html | 363 + .../api/libecalc/common/component_type.html | 574 + .../api/libecalc/common/consumer_type.html | 448 + .../api/libecalc/common/consumption_type.html | 363 + .../api/libecalc/common/datetime.html | 237 + .../api/libecalc/common/datetime/utils.html | 461 + .../api/libecalc/common/decorators.html | 238 + .../libecalc/common/decorators/capturer.html | 602 + .../common/decorators/feature_flags.html | 607 + .../common/discriminator_fallback.html | 314 + .../libecalc/common/energy_model_type.html | 525 + .../libecalc/common/energy_usage_type.html | 363 + .../api/libecalc/common/errors.html | 237 + .../libecalc/common/errors/exceptions.html | 1484 + .../common/fixed_speed_pressure_control.html | 414 + .../libecalc/common/fluid_stream_type.html | 363 + .../api/libecalc/common/graph.html | 813 + .../api/libecalc/common/list.html | 238 + .../api/libecalc/common/list/adjustment.html | 292 + .../api/libecalc/common/list/list_utils.html | 626 + .../api/libecalc/common/logger.html | 273 + .../api/libecalc/common/math.html | 238 + .../api/libecalc/common/math/math_utils.html | 409 + .../api/libecalc/common/math/numbers.html | 598 + .../api/libecalc/common/priorities.html | 278 + .../libecalc/common/priority_optimizer.html | 642 + .../api/libecalc/common/run_info.html | 429 + .../libecalc/common/serializable_chart.html | 1346 + .../libecalc/common/stream_conditions.html | 924 + .../api/libecalc/common/string.html | 237 + .../libecalc/common/string/string_utils.html | 398 + .../libecalc/common/tabular_time_series.html | 612 + .../api/libecalc/common/temporal_model.html | 503 + .../api/libecalc/common/time_utils.html | 1484 + .../api/libecalc/common/units.html | 1502 + .../api/libecalc/common/variables.html | 994 + .../api/libecalc/common/version.html | 708 + .../getting_started/api/libecalc/domain.html | 238 + .../libecalc/domain/stream_conditions.html | 953 + .../api/libecalc/domain/tabular.html | 238 + .../libecalc/domain/tabular/exceptions.html | 458 + .../api/libecalc/domain/tabular/tabular.html | 567 + .../getting_started/api/libecalc/dto.html | 305 + .../api/libecalc/dto/base.html | 397 + .../api/libecalc/dto/component_graph.html | 554 + .../api/libecalc/dto/components.html | 5360 ++ .../api/libecalc/dto/core_specs.html | 240 + .../api/libecalc/dto/core_specs/base.html | 237 + .../core_specs/base/operational_settings.html | 392 + .../libecalc/dto/core_specs/compressor.html | 237 + .../compressor/operational_settings.html | 491 + .../api/libecalc/dto/core_specs/pump.html | 237 + .../core_specs/pump/operational_settings.html | 491 + .../api/libecalc/dto/core_specs/system.html | 233 + .../api/libecalc/dto/emission.html | 462 + .../api/libecalc/dto/fuel_type.html | 512 + .../api/libecalc/dto/models.html | 377 + .../api/libecalc/dto/models/base.html | 606 + .../api/libecalc/dto/models/chart.html | 631 + .../api/libecalc/dto/models/compressor.html | 299 + .../libecalc/dto/models/compressor/base.html | 764 + .../libecalc/dto/models/compressor/chart.html | 277 + .../libecalc/dto/models/compressor/fluid.html | 1282 + .../dto/models/compressor/sampled.html | 614 + .../libecalc/dto/models/compressor/stage.html | 856 + .../libecalc/dto/models/compressor/train.html | 1793 + .../libecalc/dto/models/consumer_system.html | 1833 + .../api/libecalc/dto/models/direct.html | 529 + .../libecalc/dto/models/generator_set.html | 537 + .../api/libecalc/dto/models/pump.html | 719 + .../api/libecalc/dto/models/sampled.html | 404 + .../api/libecalc/dto/models/tabulated.html | 840 + .../api/libecalc/dto/models/turbine.html | 495 + .../api/libecalc/dto/node_info.html | 454 + .../api/libecalc/dto/result_options.html | 440 + .../api/libecalc/dto/types.html | 1636 + .../api/libecalc/dto/utils.html | 237 + .../api/libecalc/dto/utils/validators.html | 482 + .../api/libecalc/examples.html | 244 + .../api/libecalc/examples/advanced.html | 304 + .../api/libecalc/examples/simple.html | 357 + .../api/libecalc/expression.html | 243 + .../api/libecalc/expression/expression.html | 975 + .../expression/expression_evaluator.html | 1696 + .../api/libecalc/infrastructure.html | 238 + .../api/libecalc/infrastructure/file_io.html | 2583 + .../libecalc/infrastructure/file_utils.html | 773 + .../getting_started/api/libecalc/version.html | 285 + .../cli/cli_reference/index.html | 102 + docs/about/getting_started/cli/faq/index.html | 43 + docs/about/getting_started/cli/index.html | 37 + docs/about/getting_started/index.html | 35 + docs/about/getting_started/library/index.html | 17 + docs/about/getting_started/yaml/index.html | 17 + docs/about/index.html | 25 + docs/about/migration_guides/index.html | 13 + .../migration_guides/v7_to_v8/index.html | 109 + .../migration_guides/v8-1_to_v8-2/index.html | 62 + .../migration_guides/v8-2_to_v8-3/index.html | 14 + .../migration_guides/v8-3_to_v8-4/index.html | 14 + .../migration_guides/v8-5_to_v8-6/index.html | 17 + .../migration_guides/v8-6_to_v8-7/index.html | 14 + .../v8.12_to_v8.13/index.html | 41 + .../v8.13_to_v8.14/index.html | 29 + .../v8.15_to_v8.16/index.html | 27 + .../v8.22_to_v8.23/index.html | 26 + .../migration_guides/v8.7_to_v8.8/index.html | 35 + .../migration_guides/v8_to_v81/index.html | 64 + docs/about/miscellaneous/index.html | 43 + .../advanced_invalid_timesteps/index.html | 144 + .../modelling/course_material/index.html | 19 + .../simple_invalid_timesteps/index.html | 130 + .../modelling/examples/advanced/index.html | 145 + .../modelling/examples/drogon/index.html | 73 + docs/about/modelling/examples/index.html | 20 + .../modelling/examples/simple/index.html | 130 + docs/about/modelling/index.html | 17 + .../generator_modelling/index.html | 29 + .../setup/facility_inputs/index.html | 43 + .../facility_inputs/pump_modelling/index.html | 19 + .../pump_modelling/pump_charts/index.html | 67 + .../sampled_compressor_model/index.html | 67 + .../setup/facility_inputs/tabular/index.html | 37 + .../expressions/index.html | 50 + .../setup/file_format_and_syntax/index.html | 55 + .../modelling/setup/fuel_types/index.html | 24 + docs/about/modelling/setup/index.html | 17 + .../compressor/index.html | 22 + .../compressor_system/index.html | 25 + .../index.html | 22 + .../index.html | 22 + .../installations/direct_consumers/index.html | 25 + .../generator_sets_in_calculations/index.html | 63 + .../modelling/setup/installations/index.html | 62 + .../pump_models_in_calculations/index.html | 37 + .../tabular_models_in_calculations/index.html | 25 + .../compressor_charts/index.html | 96 + .../compressor_models_types/index.html | 20 + .../index.html | 44 + .../index.html | 34 + .../index.html | 34 + .../index.html | 80 + .../fixed_speed_pressure_control/index.html | 103 + .../models/compressor_modelling/index.html | 36 + .../setup/models/fluid_model/index.html | 79 + docs/about/modelling/setup/models/index.html | 28 + .../setup/models/turbine_modeling/index.html | 38 + .../modelling/setup/time_series/index.html | 42 + .../modelling/setup/variables/index.html | 30 + .../theory/compressor_modelling/index.html | 55 + docs/about/modelling/theory/index.html | 13 + .../theory/pump_modelling/index.html | 21 + .../workflow/generic_workflow/index.html | 56 + docs/about/modelling/workflow/index.html | 13 + docs/about/references/ADJUSTMENT/index.html | 35 + docs/about/references/CABLE_LOSS/index.html | 24 + .../references/CALCULATE_MAX_RATE/index.html | 32 + docs/about/references/CATEGORY/index.html | 37 + docs/about/references/CHART_TYPE/index.html | 27 + docs/about/references/COMPOSITION/index.html | 38 + .../references/COMPRESSOR_CHART/index.html | 24 + .../references/COMPRESSOR_MODEL/index.html | 22 + .../references/COMPRESSOR_SYSTEM/index.html | 31 + .../references/COMPRESSOR_TRAIN/index.html | 18 + .../COMPRESSOR_TRAIN_MODEL/index.html | 26 + docs/about/references/CONDITION/index.html | 32 + docs/about/references/CONDITIONS/index.html | 22 + docs/about/references/CONSTANT/index.html | 28 + docs/about/references/CONSUMERS/index.html | 25 + .../CONSUMPTION_RATE_TYPE/index.html | 42 + .../references/CONTROL_MARGIN/index.html | 54 + .../references/CONTROL_MARGIN_UNIT/index.html | 27 + docs/about/references/CROSSOVER/index.html | 24 + docs/about/references/CURVE/index.html | 20 + docs/about/references/CURVES/index.html | 20 + docs/about/references/DESIGN_HEAD/index.html | 21 + docs/about/references/DESIGN_RATE/index.html | 21 + .../references/DIRECT_EMITTERS/index.html | 30 + .../references/DISCHARGE_PRESSURE/index.html | 26 + .../DOWNSTREAM_PRESSURE_CONTROL/index.html | 25 + docs/about/references/EFFICIENCY/index.html | 29 + .../references/ELECTRICITY2FUEL/index.html | 36 + docs/about/references/EMISSION/index.html | 30 + docs/about/references/EMISSIONS/index.html | 52 + .../about/references/EMISSION_NAME/index.html | 30 + .../about/references/EMISSION_RATE/index.html | 27 + .../about/references/EMITTER_MODEL/index.html | 32 + docs/about/references/END/index.html | 28 + .../references/ENERGYFUNCTION/index.html | 30 + .../references/ENERGY_USAGE_MODEL/index.html | 38 + docs/about/references/EOS_MODEL/index.html | 28 + docs/about/references/EXPRESSION/index.html | 25 + .../about/references/EXTRAPOLATION/index.html | 27 + .../references/FACILITY_INPUTS/index.html | 34 + docs/about/references/FACTOR/index.html | 39 + docs/about/references/FILE/index.html | 22 + .../about/references/FLUID_DENSITY/index.html | 24 + docs/about/references/FLUID_MODEL/index.html | 19 + .../references/FLUID_MODEL_TYPE/index.html | 21 + docs/about/references/FUEL/index.html | 29 + .../about/references/FUELCONSUMERS/index.html | 26 + docs/about/references/FUELRATE/index.html | 28 + docs/about/references/FUEL_TYPES/index.html | 21 + docs/about/references/GAS_TYPE/index.html | 29 + .../about/references/GENERATORSETS/index.html | 24 + docs/about/references/HCEXPORT/index.html | 36 + docs/about/references/HEAD/index.html | 30 + docs/about/references/HEAD_MARGIN/index.html | 29 + .../INFLUENCE_TIME_VECTOR/index.html | 23 + .../references/INLET_TEMPERATURE/index.html | 23 + .../about/references/INSTALLATIONS/index.html | 19 + .../references/INTERPOLATION_TYPE/index.html | 47 + .../INTERSTAGE_CONTROL_PRESSURE/index.html | 37 + docs/about/references/LOAD/index.html | 24 + .../references/LOWER_HEATING_VALUE/index.html | 21 + .../MAXIMUM_DISCHARGE_PRESSURE/index.html | 27 + .../about/references/MAXIMUM_POWER/index.html | 21 + .../index.html | 26 + .../MAX_USAGE_FROM_SHORE/index.html | 22 + docs/about/references/MODELS/index.html | 35 + docs/about/references/NAME/index.html | 25 + .../OPERATIONAL_SETTINGS/index.html | 83 + .../POLYTROPIC_EFFICIENCY/index.html | 22 + .../references/POWERLOSSFACTOR/index.html | 28 + .../POWER_ADJUSTMENT_CONSTANT/index.html | 21 + .../references/PRESSURE_CONTROL/index.html | 34 + .../PRESSURE_DROP_AHEAD_OF_STAGE/index.html | 25 + docs/about/references/PUMPS/index.html | 25 + docs/about/references/RATE/index.html | 42 + .../references/RATE_FRACTIONS/index.html | 21 + .../references/RATE_PER_STREAM/index.html | 24 + docs/about/references/REGULARITY/index.html | 60 + docs/about/references/STAGES/index.html | 53 + docs/about/references/START/index.html | 32 + docs/about/references/STREAM/index.html | 24 + docs/about/references/STREAMS/index.html | 27 + .../references/SUCTION_PRESSURE/index.html | 27 + docs/about/references/TIME_SERIES/index.html | 32 + .../references/TOTAL_SYSTEM_RATE/index.html | 25 + .../TURBINE_EFFICIENCIES/index.html | 20 + .../about/references/TURBINE_LOADS/index.html | 20 + .../about/references/TURBINE_MODEL/index.html | 20 + docs/about/references/TYPE/index.html | 58 + docs/about/references/UNIT/index.html | 27 + docs/about/references/UNITS/index.html | 26 + .../UPSTREAM_PRESSURE_CONTROL/index.html | 25 + docs/about/references/VARIABLES/index.html | 18 + .../references/VENTING_EMITTERS/index.html | 53 + docs/about/references/VOLUME/index.html | 24 + .../about/references/cli_reference/index.html | 106 + docs/about/references/include/index.html | 37 + docs/about/references/index.html | 18 + docs/category/documentation/index.html | 13 + docs/category/guides/index.html | 13 + docs/changelog/index.html | 941 + docs/changelog/latest/index.html | 47 + docs/changelog/separator/index.html | 13 + docs/changelog/v7-0-release/index.html | 65 + docs/changelog/v7-1-release/index.html | 63 + docs/changelog/v7-2-release/index.html | 59 + docs/changelog/v7-3-release/index.html | 33 + docs/changelog/v7-4-release/index.html | 64 + docs/changelog/v7-5-release/index.html | 66 + docs/changelog/v7-6-release/index.html | 18 + docs/changelog/v8.0-release/index.html | 62 + docs/changelog/v8.1-release/index.html | 32 + docs/changelog/v8.10-release/index.html | 21 + docs/changelog/v8.11-release/index.html | 19 + docs/changelog/v8.12-release/index.html | 22 + docs/changelog/v8.13-release/index.html | 36 + docs/changelog/v8.14-release/index.html | 17 + docs/changelog/v8.15-release/index.html | 23 + docs/changelog/v8.16-release/index.html | 38 + docs/changelog/v8.17-release/index.html | 17 + docs/changelog/v8.18-release/index.html | 32 + docs/changelog/v8.19-release/index.html | 23 + docs/changelog/v8.2-release/index.html | 28 + docs/changelog/v8.20-release/index.html | 17 + docs/changelog/v8.21-release/index.html | 23 + docs/changelog/v8.3-release/index.html | 29 + docs/changelog/v8.4-release/index.html | 29 + docs/changelog/v8.5-release/index.html | 28 + docs/changelog/v8.6-release/index.html | 28 + docs/changelog/v8.7-release/index.html | 29 + docs/changelog/v8.8-release/index.html | 21 + .../documentation/index.html | 44 + .../documentation-guide/markdown/index.html | 21 + docs/contribute/get_started/index.html | 92 + .../guides/conventional_commits/index.html | 24 + docs/contribute/guides/git/index.html | 135 + docs/tags/e-calc/index.html | 13 + docs/tags/index.html | 13 + docs/tags/release/index.html | 13 + img/docs/asgb/asgb_lpp3_pd.png | Bin 0 -> 8296 bytes ...sgb_lpp3_predef_fuel_result_comparison.png | Bin 0 -> 150658 bytes img/docs/asgb/asgb_lpp3_predef_stage1.png | Bin 0 -> 19860 bytes .../asgb/asgb_lpp3_predef_stage1_2031.png | Bin 0 -> 19734 bytes img/docs/asgb/asgb_lpp3_predef_stage2.png | Bin 0 -> 18719 bytes .../asgb/asgb_lpp3_predef_stage2_2031.png | Bin 0 -> 16372 bytes img/docs/asgb/asgb_lpp3_ps.png | Bin 0 -> 9080 bytes img/docs/asgb/asgb_lpp3_sketch.png | Bin 0 -> 62437 bytes .../asgb_lpp3_sys26_capacity_and_rate.png | Bin 0 -> 11469 bytes .../asgb_lpp3_sys26_maxcapacity_at_pd200.png | Bin 0 -> 7903 bytes .../asgb_lpp3_sys26_maxcapacity_at_pd250.png | Bin 0 -> 6555 bytes ...gb_lpp3_sys26_maxcapacity_at_pdsurface.png | Bin 0 -> 25407 bytes .../asgb_lpp3_sys26_stage1_at_ps31pd250.png | Bin 0 -> 40153 bytes .../asgb_lpp3_sys26_stage2_at_ps31pd250.png | Bin 0 -> 50587 bytes .../asgb_lpp3_sys27_capacity_and_rate.png | Bin 0 -> 13313 bytes .../asgb_lpp3_sys27_crossover_and_mode.png | Bin 0 -> 12063 bytes img/docs/asgb/asgb_lpp3_sys27_gasrate.png | Bin 0 -> 12245 bytes .../asgb/asgb_lpp3_sys27_rate_and_mode.png | Bin 0 -> 16959 bytes img/docs/asgb/asgb_lpp3_timeline.png | Bin 0 -> 12064 bytes img/docs/asgb/asgb_lpp3_unisim_stage1.png | Bin 0 -> 40526 bytes .../asgb/asgb_lpp3_unisim_stage1_filtered.png | Bin 0 -> 28371 bytes img/docs/asgb/asgb_lpp3_unisim_stage2.png | Bin 0 -> 46287 bytes .../asgb/asgb_lpp3_unisim_stage2_filtered.png | Bin 0 -> 40488 bytes img/docs/asgb/asgb_sys27a_unisim_model.png | Bin 0 -> 11965 bytes .../asgb_sys27a_unisim_model_filtered.png | Bin 0 -> 7718 bytes .../asgb/ecalc_generic_chart_normalized.png | Bin 0 -> 21903 bytes .../asgb/ecalc_generic_chart_original.png | Bin 0 -> 26035 bytes img/docs/changed_rate_resampling.png | Bin 0 -> 237031 bytes img/docs/interpolation_plot.png | Bin 0 -> 16617 bytes img/docusaurus.png | Bin 0 -> 5142 bytes img/favicon.svg | 3 + img/logo.svg | 16 + img/undraw_docusaurus_mountain.svg | 171 + img/undraw_docusaurus_react.svg | 170 + img/undraw_docusaurus_tree.svg | 40 + index.html | 13 + search-index.json | 1 + search/index.html | 13 + sitemap.xml | 1 + versions/index.html | 13 + 646 files changed, 367682 insertions(+) create mode 100644 .nojekyll create mode 100644 404.html create mode 100644 assets/css/styles.8460b425.css create mode 100644 assets/images/asv_recycling-8cbf643933baa1262460838cc4b483ae.png create mode 100644 assets/images/changed_rate_resampling-1618c246583304921e59eced813219f2.png create mode 100644 assets/images/compressor_chart_surge_control_margin_line-98e32f3b0d5332a371ec4bb2dbc66da8.png create mode 100644 assets/images/control_mechanisms_variable_speed_compressor_chart-74501f10294f5dd339dba1a305bbe3f6.png create mode 100644 assets/images/downstream_choking-e0ac6b7a8379c76a8f29199d7aa9086c.png create mode 100644 assets/images/ecalc_compressor_train_common_shaft_with_turbine_additional_pressure-c971bb4cd1ee2f4d1cd9827d6231364c.png create mode 100644 assets/images/ecalc_general_consumer_overview-26f2e87a69f9a685f123b818e6bed313.png create mode 100644 assets/images/ecalc_illustration-9c9342f8d3a926d760096a17ccb76556.svg create mode 100644 assets/images/generic_unified_compressor_chart-ba6f49b5df22923cfcbe4d5d2aa4525b.png create mode 100644 assets/images/interpolation_plot-d4eee4126032e046bf374ef66ceb9946.png create mode 100644 assets/images/make_recirculation_pressure_control_plot-527cac79a8c53527147492b170308459.png create mode 100644 assets/images/process_compressor-3493b127c832898d93b5231594efa8d3.png create mode 100644 assets/images/process_compressor_chart-28c5f110972461aba840e82b0962c3d2.png create mode 100644 assets/images/process_compressor_train_multiple_streams-415751902a6078520845f70740eaa1af.png create mode 100644 assets/images/pumpchart_eff-136e9a9dd1af0700084ddf17be0d4453.PNG create mode 100644 assets/images/pumpchart_head-ec0fc7f624752c8c95bd7c3f828090a3.PNG create mode 100644 assets/images/regularity-3e43516a1e0246a2e125d4980006b137.png create mode 100644 assets/images/simple_facility_pfd-ad59578d69ea3d3267f646b9d8141822.jpg create mode 100644 assets/images/upstream_choking-dc5aedeb280843ea22445ce83731b8dc.png create mode 100644 assets/images/validity_flag_example-5b8c9832693a18b6500cf408c0b4873b.png create mode 100644 assets/js/00bdc23f.66d5f21c.js create mode 100644 assets/js/03dfed1e.567e449b.js create mode 100644 assets/js/0425b884.72278814.js create mode 100644 assets/js/058ad5bf.0c0d810d.js create mode 100644 assets/js/06543a48.5310234a.js create mode 100644 assets/js/0673f3d8.5a6cdc86.js create mode 100644 assets/js/0745e7f0.1a08a580.js create mode 100644 assets/js/09bd96eb.86e1b386.js create mode 100644 assets/js/0a776dcb.a4df551c.js create mode 100644 assets/js/0c22fffd.91e5cbc7.js create mode 100644 assets/js/0fd76486.3776b2de.js create mode 100644 assets/js/0ffabbb0.fdb8e7bc.js create mode 100644 assets/js/1169.f5af047e.js create mode 100644 assets/js/1176.ef72ee50.js create mode 100644 assets/js/1245.fc77c46b.js create mode 100644 assets/js/130.def7e228.js create mode 100644 assets/js/1303.2eab4989.js create mode 100644 assets/js/1303.2eab4989.js.LICENSE.txt create mode 100644 assets/js/1331.2f91c32d.js create mode 100644 assets/js/138e0e15.7676a675.js create mode 100644 assets/js/1398.a24173c3.js create mode 100644 assets/js/147b5d1b.11846856.js create mode 100644 assets/js/14eb3368.450e3902.js create mode 100644 assets/js/151edf84.14cd53fe.js create mode 100644 assets/js/155359f6.f5f625c3.js create mode 100644 assets/js/16059610.c4c04ce2.js create mode 100644 assets/js/162.ff070cda.js create mode 100644 assets/js/163041ea.6d64c70e.js create mode 100644 assets/js/17896441.41832d39.js create mode 100644 assets/js/17896441.41832d39.js.LICENSE.txt create mode 100644 assets/js/18b0ec42.2ac73a22.js create mode 100644 assets/js/1946.4b9f4a0c.js create mode 100644 assets/js/1a4e3797.df845592.js create mode 100644 assets/js/1c663d3d.d38f16f7.js create mode 100644 assets/js/1d55f518.ed9ff422.js create mode 100644 assets/js/1df93b7f.7976f793.js create mode 100644 assets/js/1eb7400c.99dbd36c.js create mode 100644 assets/js/1f60d0d4.22494f28.js create mode 100644 assets/js/1f7805b6.29cce52e.js create mode 100644 assets/js/20703393.b1647309.js create mode 100644 assets/js/2121587b.6744d348.js create mode 100644 assets/js/2130.c5e4f4c2.js create mode 100644 assets/js/218ce29d.b7d66088.js create mode 100644 assets/js/2237.308b3350.js create mode 100644 assets/js/2376.cc3e3d09.js create mode 100644 assets/js/2453.6f423daf.js create mode 100644 assets/js/2548.46d5757e.js create mode 100644 assets/js/277de022.18fd3489.js create mode 100644 assets/js/27b97f54.4c21a317.js create mode 100644 assets/js/281e4beb.dea8f301.js create mode 100644 assets/js/282c1cc9.73879b24.js create mode 100644 assets/js/2843.22300328.js create mode 100644 assets/js/2924e06f.4213d1b7.js create mode 100644 assets/js/2925.f06f0a4f.js create mode 100644 assets/js/2983.93d6a43d.js create mode 100644 assets/js/2b2be347.21292636.js create mode 100644 assets/js/2b47973a.9071322a.js create mode 100644 assets/js/2b572af2.2a5b2378.js create mode 100644 assets/js/2ce3b5da.a3a2dcc3.js create mode 100644 assets/js/2cedaf2f.7266b378.js create mode 100644 assets/js/2f04f592.50d46dcd.js create mode 100644 assets/js/2fdfb4de.51347ac3.js create mode 100644 assets/js/303.39e1a2ee.js create mode 100644 assets/js/3068.021ebcf1.js create mode 100644 assets/js/32311569.ecdf1b16.js create mode 100644 assets/js/331.af64ff0c.js create mode 100644 assets/js/33498b04.3c79c15f.js create mode 100644 assets/js/3390a8e0.280e220b.js create mode 100644 assets/js/33fb585a.0eed8140.js create mode 100644 assets/js/3409ab5c.07103752.js create mode 100644 assets/js/3451a9ae.a366cef9.js create mode 100644 assets/js/34864e1f.78d111db.js create mode 100644 assets/js/3626.55925cb3.js create mode 100644 assets/js/3706.3ef4ee36.js create mode 100644 assets/js/3720c009.784ce305.js create mode 100644 assets/js/376.dedd6ca6.js create mode 100644 assets/js/386ea0a5.a59c5988.js create mode 100644 assets/js/38d592cf.4449eff9.js create mode 100644 assets/js/3ac409ea.3e145ceb.js create mode 100644 assets/js/3be812e9.2ce31a7e.js create mode 100644 assets/js/3d5bbd33.c1ee4223.js create mode 100644 assets/js/3e38e310.5f46b2fe.js create mode 100644 assets/js/40912a5c.b11b4ca5.js create mode 100644 assets/js/40d6382c.cdc08712.js create mode 100644 assets/js/4162.389f54aa.js create mode 100644 assets/js/420.011125cd.js create mode 100644 assets/js/426.9063c910.js create mode 100644 assets/js/428320b6.9fdfe9cc.js create mode 100644 assets/js/42b1e060.c0b5850f.js create mode 100644 assets/js/4358a0b2.1cc97b8a.js create mode 100644 assets/js/43a1031a.0a2d738e.js create mode 100644 assets/js/43a26e71.dd67e435.js create mode 100644 assets/js/4424673c.34b787c0.js create mode 100644 assets/js/453.2de45f11.js create mode 100644 assets/js/45c974ba.0b665fc2.js create mode 100644 assets/js/465c5577.777fdbe2.js create mode 100644 assets/js/46613219.210a2a47.js create mode 100644 assets/js/4741.8ba96072.js create mode 100644 assets/js/478.66e42700.js create mode 100644 assets/js/47daf389.a34e589e.js create mode 100644 assets/js/489.5e628191.js create mode 100644 assets/js/489.5e628191.js.LICENSE.txt create mode 100644 assets/js/4943.7797e509.js create mode 100644 assets/js/496ed8d5.0530b3d2.js create mode 100644 assets/js/498bfcff.79dc88fb.js create mode 100644 assets/js/4aa4fc36.e9e47236.js create mode 100644 assets/js/4b5a01f9.6ef3d6d0.js create mode 100644 assets/js/4b80f681.637f9c92.js create mode 100644 assets/js/4d8633af.c131feaf.js create mode 100644 assets/js/4ee97ba8.9f4c6982.js create mode 100644 assets/js/5394.ec8f3b81.js create mode 100644 assets/js/56baec0c.15385c7f.js create mode 100644 assets/js/5741.3f175718.js create mode 100644 assets/js/5785ef4b.5a8eff10.js create mode 100644 assets/js/5920dbec.865006f6.js create mode 100644 assets/js/5b24544a.354ee6cb.js create mode 100644 assets/js/5bfc86d7.32a3926b.js create mode 100644 assets/js/5c08a402.656b6c7e.js create mode 100644 assets/js/5c8ec56d.16d6c1af.js create mode 100644 assets/js/5da39e49.02bbf67e.js create mode 100644 assets/js/5e10e9e1.8733fcd6.js create mode 100644 assets/js/5e95c892.084f3624.js create mode 100644 assets/js/5f3f5785.ffeee995.js create mode 100644 assets/js/60c8c0f3.1229e49d.js create mode 100644 assets/js/6268ac32.86d2733f.js create mode 100644 assets/js/62f9a98c.23d094ad.js create mode 100644 assets/js/63091997.747d23e4.js create mode 100644 assets/js/635.d2f8f161.js create mode 100644 assets/js/637c67a5.6b2b1de4.js create mode 100644 assets/js/63ecd22d.0a5816d7.js create mode 100644 assets/js/63f63b83.bc4fafbb.js create mode 100644 assets/js/6406f263.f9be9ff7.js create mode 100644 assets/js/6420.392ca7fe.js create mode 100644 assets/js/64d2b91f.dbbe6108.js create mode 100644 assets/js/66286265.39cf8098.js create mode 100644 assets/js/6711f262.25b663bb.js create mode 100644 assets/js/6788.423d194b.js create mode 100644 assets/js/68.af96128d.js create mode 100644 assets/js/6803.b770662f.js create mode 100644 assets/js/682b2100.74c56514.js create mode 100644 assets/js/689.a3a2233a.js create mode 100644 assets/js/69fd9be6.cbada077.js create mode 100644 assets/js/6a04e9fa.56795369.js create mode 100644 assets/js/6a216250.bfc7f6f2.js create mode 100644 assets/js/6adcc868.4aa146e1.js create mode 100644 assets/js/6b1cdc5e.23acb505.js create mode 100644 assets/js/6b8f95a4.fd5cf9c9.js create mode 100644 assets/js/6bf1c518.a41f29cd.js create mode 100644 assets/js/6bf367cb.6058d350.js create mode 100644 assets/js/6eb500eb.c1ddc254.js create mode 100644 assets/js/6f2c9828.e0006080.js create mode 100644 assets/js/706.03fb65f6.js create mode 100644 assets/js/70bbd824.a5ac8cee.js create mode 100644 assets/js/721cfe60.f1ac0539.js create mode 100644 assets/js/741.253699a9.js create mode 100644 assets/js/741de8b7.b0766c91.js create mode 100644 assets/js/7426.1418c0c2.js create mode 100644 assets/js/7557b935.3331a08c.js create mode 100644 assets/js/75df07ec.a7ff5f37.js create mode 100644 assets/js/78771141.542d28f0.js create mode 100644 assets/js/788.e94a45f6.js create mode 100644 assets/js/7b02141e.324a3fad.js create mode 100644 assets/js/7be299fb.e0a783e4.js create mode 100644 assets/js/7d3b81bb.c327fe31.js create mode 100644 assets/js/7d9552c0.fff8bb86.js create mode 100644 assets/js/7db788f5.cdf881d0.js create mode 100644 assets/js/7e6991bb.03ac52ca.js create mode 100644 assets/js/7eb3a421.4f947033.js create mode 100644 assets/js/803.8e7831e5.js create mode 100644 assets/js/8055.420163ab.js create mode 100644 assets/js/810.88aff555.js create mode 100644 assets/js/81dd00c5.bdfc871f.js create mode 100644 assets/js/8337.18b868de.js create mode 100644 assets/js/83ed74d7.558311cb.js create mode 100644 assets/js/841adc37.26b5c8c8.js create mode 100644 assets/js/843.d7e56aae.js create mode 100644 assets/js/8478.b172b069.js create mode 100644 assets/js/85cb5dc7.4db0a746.js create mode 100644 assets/js/8635.edad2cdd.js create mode 100644 assets/js/869.3cca42c0.js create mode 100644 assets/js/8810.3128d514.js create mode 100644 assets/js/8859d7a9.7d814690.js create mode 100644 assets/js/8869.9de439a5.js create mode 100644 assets/js/8961bfac.95578cae.js create mode 100644 assets/js/8a4fc9f1.6a8ce834.js create mode 100644 assets/js/8abfe720.417e7671.js create mode 100644 assets/js/8bcf6c84.bdd49444.js create mode 100644 assets/js/8d2ce0de.05db6a6e.js create mode 100644 assets/js/902.630236d2.js create mode 100644 assets/js/908e0101.9f66b67f.js create mode 100644 assets/js/925.f8ccfbd9.js create mode 100644 assets/js/943.e1f9edb9.js create mode 100644 assets/js/946.bcce335e.js create mode 100644 assets/js/95bf0c8c.21e11369.js create mode 100644 assets/js/96533a10.b3a8cad4.js create mode 100644 assets/js/9680e89f.4f53056e.js create mode 100644 assets/js/9689.5859b53d.js create mode 100644 assets/js/9a118db7.e0e710f7.js create mode 100644 assets/js/9a7150ac.cceeda90.js create mode 100644 assets/js/9ac5a6f1.75350006.js create mode 100644 assets/js/9caa4dca.f5d5fbe0.js create mode 100644 assets/js/9d1a436a.f3298440.js create mode 100644 assets/js/9d87d0ad.73800669.js create mode 100644 assets/js/9e136365.0ca05f05.js create mode 100644 assets/js/9e91bf8d.3f92c5f9.js create mode 100644 assets/js/9f62981a.5e92dfad.js create mode 100644 assets/js/9fe770c0.123911d0.js create mode 100644 assets/js/a1e1f72e.a12161b6.js create mode 100644 assets/js/a2e97e20.bf98d1ec.js create mode 100644 assets/js/a359a99b.b9879044.js create mode 100644 assets/js/a592ae15.2b39f39d.js create mode 100644 assets/js/a5dcc804.396480f9.js create mode 100644 assets/js/a7456010.6958eccd.js create mode 100644 assets/js/a7bd4aaa.ac02ed0d.js create mode 100644 assets/js/a89a20bc.e0dbdb35.js create mode 100644 assets/js/a94703ab.77575623.js create mode 100644 assets/js/aae5f4ca.bb5e530c.js create mode 100644 assets/js/aba21aa0.c774b9b6.js create mode 100644 assets/js/ad129716.3e146e2e.js create mode 100644 assets/js/aedaac15.264095c6.js create mode 100644 assets/js/af105519.56e01e4d.js create mode 100644 assets/js/b2f67940.3e18db76.js create mode 100644 assets/js/b9581e7f.d87aa9cc.js create mode 100644 assets/js/bb45b332.933ee4bf.js create mode 100644 assets/js/bdf25f4c.7ae1f63d.js create mode 100644 assets/js/bf562633.eb1d4d4e.js create mode 100644 assets/js/bfdf430b.21810c64.js create mode 100644 assets/js/bffc9314.71323be9.js create mode 100644 assets/js/c127897d.80dabf97.js create mode 100644 assets/js/c1f3bf99.6a3b4b8d.js create mode 100644 assets/js/c240171b.ba77aa57.js create mode 100644 assets/js/c3d1f0cd.c85bd257.js create mode 100644 assets/js/c90bf1e8.4616fd83.js create mode 100644 assets/js/cbac54c5.746e1d32.js create mode 100644 assets/js/cbf35f3a.89e1e3fa.js create mode 100644 assets/js/cda37ba5.0a01ec17.js create mode 100644 assets/js/ce0c4b55.d9f7da32.js create mode 100644 assets/js/d20656b7.4d9e502c.js create mode 100644 assets/js/d2279440.c199f0c6.js create mode 100644 assets/js/d3d733e5.c16c0a33.js create mode 100644 assets/js/d5cd246e.5d533a23.js create mode 100644 assets/js/d708d793.49998533.js create mode 100644 assets/js/d857f50e.ac4e457f.js create mode 100644 assets/js/d8846ffb.084e4a37.js create mode 100644 assets/js/d8c9bd2d.6105424d.js create mode 100644 assets/js/d90d1a18.bd7b0cd9.js create mode 100644 assets/js/d9a6ba4c.f573b5d9.js create mode 100644 assets/js/dcab5fea.bd7ad1bd.js create mode 100644 assets/js/de3649f0.2d88cccf.js create mode 100644 assets/js/df203c0f.f449b894.js create mode 100644 assets/js/dfbab2f3.a1dd7dec.js create mode 100644 assets/js/e1df8231.261795dc.js create mode 100644 assets/js/e2712b99.282d782f.js create mode 100644 assets/js/e5622214.ad407cb7.js create mode 100644 assets/js/e64a1018.1f5145d5.js create mode 100644 assets/js/e8ebc025.a7473e7b.js create mode 100644 assets/js/e9e63826.0a978166.js create mode 100644 assets/js/ea18955c.e08b7ef2.js create mode 100644 assets/js/eab951c7.d3aa6a07.js create mode 100644 assets/js/eb609ab0.9bd53ea8.js create mode 100644 assets/js/eb949326.e491ee79.js create mode 100644 assets/js/ebdd570f.12240552.js create mode 100644 assets/js/ed5b25aa.7bc95883.js create mode 100644 assets/js/ed6dee8b.168a500a.js create mode 100644 assets/js/edb3a98b.a789225f.js create mode 100644 assets/js/eee46244.5cdfbdd9.js create mode 100644 assets/js/f054b415.ddae0d3b.js create mode 100644 assets/js/f256795b.08d49ac5.js create mode 100644 assets/js/f469c95f.d43928c8.js create mode 100644 assets/js/f4c60d9f.0b33cb43.js create mode 100644 assets/js/f52ed7e3.e35d875f.js create mode 100644 assets/js/f577f5c2.c5621f96.js create mode 100644 assets/js/f92867ed.7e67b420.js create mode 100644 assets/js/fa0b6059.2f627b0c.js create mode 100644 assets/js/fa17a3e5.56765911.js create mode 100644 assets/js/fa3d98bd.76d300f3.js create mode 100644 assets/js/fb7e7841.6bd54bb0.js create mode 100644 assets/js/fba8a418.751544b2.js create mode 100644 assets/js/fcc523f6.067010b7.js create mode 100644 assets/js/fe44757f.0c0de2c3.js create mode 100644 assets/js/fedb6237.5b3f7f78.js create mode 100644 assets/js/main.ddbe8469.js create mode 100644 assets/js/main.ddbe8469.js.LICENSE.txt create mode 100644 assets/js/runtime~main.a8700afe.js create mode 100644 docs/about/getting_started/api/index.html create mode 100644 docs/about/getting_started/api/libecalc.html create mode 100644 docs/about/getting_started/api/libecalc/common.html create mode 100644 docs/about/getting_started/api/libecalc/common/chart_type.html create mode 100644 docs/about/getting_started/api/libecalc/common/component_info.html create mode 100644 docs/about/getting_started/api/libecalc/common/component_info/component_level.html create mode 100644 docs/about/getting_started/api/libecalc/common/component_info/compressor.html create mode 100644 docs/about/getting_started/api/libecalc/common/component_type.html create mode 100644 docs/about/getting_started/api/libecalc/common/consumer_type.html create mode 100644 docs/about/getting_started/api/libecalc/common/consumption_type.html create mode 100644 docs/about/getting_started/api/libecalc/common/datetime.html create mode 100644 docs/about/getting_started/api/libecalc/common/datetime/utils.html create mode 100644 docs/about/getting_started/api/libecalc/common/decorators.html create mode 100644 docs/about/getting_started/api/libecalc/common/decorators/capturer.html create mode 100644 docs/about/getting_started/api/libecalc/common/decorators/feature_flags.html create mode 100644 docs/about/getting_started/api/libecalc/common/discriminator_fallback.html create mode 100644 docs/about/getting_started/api/libecalc/common/energy_model_type.html create mode 100644 docs/about/getting_started/api/libecalc/common/energy_usage_type.html create mode 100644 docs/about/getting_started/api/libecalc/common/errors.html create mode 100644 docs/about/getting_started/api/libecalc/common/errors/exceptions.html create mode 100644 docs/about/getting_started/api/libecalc/common/fixed_speed_pressure_control.html create mode 100644 docs/about/getting_started/api/libecalc/common/fluid_stream_type.html create mode 100644 docs/about/getting_started/api/libecalc/common/graph.html create mode 100644 docs/about/getting_started/api/libecalc/common/list.html create mode 100644 docs/about/getting_started/api/libecalc/common/list/adjustment.html create mode 100644 docs/about/getting_started/api/libecalc/common/list/list_utils.html create mode 100644 docs/about/getting_started/api/libecalc/common/logger.html create mode 100644 docs/about/getting_started/api/libecalc/common/math.html create mode 100644 docs/about/getting_started/api/libecalc/common/math/math_utils.html create mode 100644 docs/about/getting_started/api/libecalc/common/math/numbers.html create mode 100644 docs/about/getting_started/api/libecalc/common/priorities.html create mode 100644 docs/about/getting_started/api/libecalc/common/priority_optimizer.html create mode 100644 docs/about/getting_started/api/libecalc/common/run_info.html create mode 100644 docs/about/getting_started/api/libecalc/common/serializable_chart.html create mode 100644 docs/about/getting_started/api/libecalc/common/stream_conditions.html create mode 100644 docs/about/getting_started/api/libecalc/common/string.html create mode 100644 docs/about/getting_started/api/libecalc/common/string/string_utils.html create mode 100644 docs/about/getting_started/api/libecalc/common/tabular_time_series.html create mode 100644 docs/about/getting_started/api/libecalc/common/temporal_model.html create mode 100644 docs/about/getting_started/api/libecalc/common/time_utils.html create mode 100644 docs/about/getting_started/api/libecalc/common/units.html create mode 100644 docs/about/getting_started/api/libecalc/common/variables.html create mode 100644 docs/about/getting_started/api/libecalc/common/version.html create mode 100644 docs/about/getting_started/api/libecalc/domain.html create mode 100644 docs/about/getting_started/api/libecalc/domain/stream_conditions.html create mode 100644 docs/about/getting_started/api/libecalc/domain/tabular.html create mode 100644 docs/about/getting_started/api/libecalc/domain/tabular/exceptions.html create mode 100644 docs/about/getting_started/api/libecalc/domain/tabular/tabular.html create mode 100644 docs/about/getting_started/api/libecalc/dto.html create mode 100644 docs/about/getting_started/api/libecalc/dto/base.html create mode 100644 docs/about/getting_started/api/libecalc/dto/component_graph.html create mode 100644 docs/about/getting_started/api/libecalc/dto/components.html create mode 100644 docs/about/getting_started/api/libecalc/dto/core_specs.html create mode 100644 docs/about/getting_started/api/libecalc/dto/core_specs/base.html create mode 100644 docs/about/getting_started/api/libecalc/dto/core_specs/base/operational_settings.html create mode 100644 docs/about/getting_started/api/libecalc/dto/core_specs/compressor.html create mode 100644 docs/about/getting_started/api/libecalc/dto/core_specs/compressor/operational_settings.html create mode 100644 docs/about/getting_started/api/libecalc/dto/core_specs/pump.html create mode 100644 docs/about/getting_started/api/libecalc/dto/core_specs/pump/operational_settings.html create mode 100644 docs/about/getting_started/api/libecalc/dto/core_specs/system.html create mode 100644 docs/about/getting_started/api/libecalc/dto/emission.html create mode 100644 docs/about/getting_started/api/libecalc/dto/fuel_type.html create mode 100644 docs/about/getting_started/api/libecalc/dto/models.html create mode 100644 docs/about/getting_started/api/libecalc/dto/models/base.html create mode 100644 docs/about/getting_started/api/libecalc/dto/models/chart.html create mode 100644 docs/about/getting_started/api/libecalc/dto/models/compressor.html create mode 100644 docs/about/getting_started/api/libecalc/dto/models/compressor/base.html create mode 100644 docs/about/getting_started/api/libecalc/dto/models/compressor/chart.html create mode 100644 docs/about/getting_started/api/libecalc/dto/models/compressor/fluid.html create mode 100644 docs/about/getting_started/api/libecalc/dto/models/compressor/sampled.html create mode 100644 docs/about/getting_started/api/libecalc/dto/models/compressor/stage.html create mode 100644 docs/about/getting_started/api/libecalc/dto/models/compressor/train.html create mode 100644 docs/about/getting_started/api/libecalc/dto/models/consumer_system.html create mode 100644 docs/about/getting_started/api/libecalc/dto/models/direct.html create mode 100644 docs/about/getting_started/api/libecalc/dto/models/generator_set.html create mode 100644 docs/about/getting_started/api/libecalc/dto/models/pump.html create mode 100644 docs/about/getting_started/api/libecalc/dto/models/sampled.html create mode 100644 docs/about/getting_started/api/libecalc/dto/models/tabulated.html create mode 100644 docs/about/getting_started/api/libecalc/dto/models/turbine.html create mode 100644 docs/about/getting_started/api/libecalc/dto/node_info.html create mode 100644 docs/about/getting_started/api/libecalc/dto/result_options.html create mode 100644 docs/about/getting_started/api/libecalc/dto/types.html create mode 100644 docs/about/getting_started/api/libecalc/dto/utils.html create mode 100644 docs/about/getting_started/api/libecalc/dto/utils/validators.html create mode 100644 docs/about/getting_started/api/libecalc/examples.html create mode 100644 docs/about/getting_started/api/libecalc/examples/advanced.html create mode 100644 docs/about/getting_started/api/libecalc/examples/simple.html create mode 100644 docs/about/getting_started/api/libecalc/expression.html create mode 100644 docs/about/getting_started/api/libecalc/expression/expression.html create mode 100644 docs/about/getting_started/api/libecalc/expression/expression_evaluator.html create mode 100644 docs/about/getting_started/api/libecalc/infrastructure.html create mode 100644 docs/about/getting_started/api/libecalc/infrastructure/file_io.html create mode 100644 docs/about/getting_started/api/libecalc/infrastructure/file_utils.html create mode 100644 docs/about/getting_started/api/libecalc/version.html create mode 100644 docs/about/getting_started/cli/cli_reference/index.html create mode 100644 docs/about/getting_started/cli/faq/index.html create mode 100644 docs/about/getting_started/cli/index.html create mode 100644 docs/about/getting_started/index.html create mode 100644 docs/about/getting_started/library/index.html create mode 100644 docs/about/getting_started/yaml/index.html create mode 100644 docs/about/index.html create mode 100644 docs/about/migration_guides/index.html create mode 100644 docs/about/migration_guides/v7_to_v8/index.html create mode 100644 docs/about/migration_guides/v8-1_to_v8-2/index.html create mode 100644 docs/about/migration_guides/v8-2_to_v8-3/index.html create mode 100644 docs/about/migration_guides/v8-3_to_v8-4/index.html create mode 100644 docs/about/migration_guides/v8-5_to_v8-6/index.html create mode 100644 docs/about/migration_guides/v8-6_to_v8-7/index.html create mode 100644 docs/about/migration_guides/v8.12_to_v8.13/index.html create mode 100644 docs/about/migration_guides/v8.13_to_v8.14/index.html create mode 100644 docs/about/migration_guides/v8.15_to_v8.16/index.html create mode 100644 docs/about/migration_guides/v8.22_to_v8.23/index.html create mode 100644 docs/about/migration_guides/v8.7_to_v8.8/index.html create mode 100644 docs/about/migration_guides/v8_to_v81/index.html create mode 100644 docs/about/miscellaneous/index.html create mode 100644 docs/about/modelling/course_material/advanced_invalid_timesteps/index.html create mode 100644 docs/about/modelling/course_material/index.html create mode 100644 docs/about/modelling/course_material/simple_invalid_timesteps/index.html create mode 100644 docs/about/modelling/examples/advanced/index.html create mode 100644 docs/about/modelling/examples/drogon/index.html create mode 100644 docs/about/modelling/examples/index.html create mode 100644 docs/about/modelling/examples/simple/index.html create mode 100644 docs/about/modelling/index.html create mode 100644 docs/about/modelling/setup/facility_inputs/generator_modelling/index.html create mode 100644 docs/about/modelling/setup/facility_inputs/index.html create mode 100644 docs/about/modelling/setup/facility_inputs/pump_modelling/index.html create mode 100644 docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts/index.html create mode 100644 docs/about/modelling/setup/facility_inputs/sampled_compressor_model/index.html create mode 100644 docs/about/modelling/setup/facility_inputs/tabular/index.html create mode 100644 docs/about/modelling/setup/file_format_and_syntax/expressions/index.html create mode 100644 docs/about/modelling/setup/file_format_and_syntax/index.html create mode 100644 docs/about/modelling/setup/fuel_types/index.html create mode 100644 docs/about/modelling/setup/index.html create mode 100644 docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor/index.html create mode 100644 docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system/index.html create mode 100644 docs/about/modelling/setup/installations/compressor_models_in_calculations/index.html create mode 100644 docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures/index.html create mode 100644 docs/about/modelling/setup/installations/direct_consumers/index.html create mode 100644 docs/about/modelling/setup/installations/generator_sets_in_calculations/index.html create mode 100644 docs/about/modelling/setup/installations/index.html create mode 100644 docs/about/modelling/setup/installations/pump_models_in_calculations/index.html create mode 100644 docs/about/modelling/setup/installations/tabular_models_in_calculations/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/compressor_charts/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/index.html create mode 100644 docs/about/modelling/setup/models/fluid_model/index.html create mode 100644 docs/about/modelling/setup/models/index.html create mode 100644 docs/about/modelling/setup/models/turbine_modeling/index.html create mode 100644 docs/about/modelling/setup/time_series/index.html create mode 100644 docs/about/modelling/setup/variables/index.html create mode 100644 docs/about/modelling/theory/compressor_modelling/index.html create mode 100644 docs/about/modelling/theory/index.html create mode 100644 docs/about/modelling/theory/pump_modelling/index.html create mode 100644 docs/about/modelling/workflow/generic_workflow/index.html create mode 100644 docs/about/modelling/workflow/index.html create mode 100644 docs/about/references/ADJUSTMENT/index.html create mode 100644 docs/about/references/CABLE_LOSS/index.html create mode 100644 docs/about/references/CALCULATE_MAX_RATE/index.html create mode 100644 docs/about/references/CATEGORY/index.html create mode 100644 docs/about/references/CHART_TYPE/index.html create mode 100644 docs/about/references/COMPOSITION/index.html create mode 100644 docs/about/references/COMPRESSOR_CHART/index.html create mode 100644 docs/about/references/COMPRESSOR_MODEL/index.html create mode 100644 docs/about/references/COMPRESSOR_SYSTEM/index.html create mode 100644 docs/about/references/COMPRESSOR_TRAIN/index.html create mode 100644 docs/about/references/COMPRESSOR_TRAIN_MODEL/index.html create mode 100644 docs/about/references/CONDITION/index.html create mode 100644 docs/about/references/CONDITIONS/index.html create mode 100644 docs/about/references/CONSTANT/index.html create mode 100644 docs/about/references/CONSUMERS/index.html create mode 100644 docs/about/references/CONSUMPTION_RATE_TYPE/index.html create mode 100644 docs/about/references/CONTROL_MARGIN/index.html create mode 100644 docs/about/references/CONTROL_MARGIN_UNIT/index.html create mode 100644 docs/about/references/CROSSOVER/index.html create mode 100644 docs/about/references/CURVE/index.html create mode 100644 docs/about/references/CURVES/index.html create mode 100644 docs/about/references/DESIGN_HEAD/index.html create mode 100644 docs/about/references/DESIGN_RATE/index.html create mode 100644 docs/about/references/DIRECT_EMITTERS/index.html create mode 100644 docs/about/references/DISCHARGE_PRESSURE/index.html create mode 100644 docs/about/references/DOWNSTREAM_PRESSURE_CONTROL/index.html create mode 100644 docs/about/references/EFFICIENCY/index.html create mode 100644 docs/about/references/ELECTRICITY2FUEL/index.html create mode 100644 docs/about/references/EMISSION/index.html create mode 100644 docs/about/references/EMISSIONS/index.html create mode 100644 docs/about/references/EMISSION_NAME/index.html create mode 100644 docs/about/references/EMISSION_RATE/index.html create mode 100644 docs/about/references/EMITTER_MODEL/index.html create mode 100644 docs/about/references/END/index.html create mode 100644 docs/about/references/ENERGYFUNCTION/index.html create mode 100644 docs/about/references/ENERGY_USAGE_MODEL/index.html create mode 100644 docs/about/references/EOS_MODEL/index.html create mode 100644 docs/about/references/EXPRESSION/index.html create mode 100644 docs/about/references/EXTRAPOLATION/index.html create mode 100644 docs/about/references/FACILITY_INPUTS/index.html create mode 100644 docs/about/references/FACTOR/index.html create mode 100644 docs/about/references/FILE/index.html create mode 100644 docs/about/references/FLUID_DENSITY/index.html create mode 100644 docs/about/references/FLUID_MODEL/index.html create mode 100644 docs/about/references/FLUID_MODEL_TYPE/index.html create mode 100644 docs/about/references/FUEL/index.html create mode 100644 docs/about/references/FUELCONSUMERS/index.html create mode 100644 docs/about/references/FUELRATE/index.html create mode 100644 docs/about/references/FUEL_TYPES/index.html create mode 100644 docs/about/references/GAS_TYPE/index.html create mode 100644 docs/about/references/GENERATORSETS/index.html create mode 100644 docs/about/references/HCEXPORT/index.html create mode 100644 docs/about/references/HEAD/index.html create mode 100644 docs/about/references/HEAD_MARGIN/index.html create mode 100644 docs/about/references/INFLUENCE_TIME_VECTOR/index.html create mode 100644 docs/about/references/INLET_TEMPERATURE/index.html create mode 100644 docs/about/references/INSTALLATIONS/index.html create mode 100644 docs/about/references/INTERPOLATION_TYPE/index.html create mode 100644 docs/about/references/INTERSTAGE_CONTROL_PRESSURE/index.html create mode 100644 docs/about/references/LOAD/index.html create mode 100644 docs/about/references/LOWER_HEATING_VALUE/index.html create mode 100644 docs/about/references/MAXIMUM_DISCHARGE_PRESSURE/index.html create mode 100644 docs/about/references/MAXIMUM_POWER/index.html create mode 100644 docs/about/references/MAXIMUM_PRESSURE_RATIO_PER_STAGE/index.html create mode 100644 docs/about/references/MAX_USAGE_FROM_SHORE/index.html create mode 100644 docs/about/references/MODELS/index.html create mode 100644 docs/about/references/NAME/index.html create mode 100644 docs/about/references/OPERATIONAL_SETTINGS/index.html create mode 100644 docs/about/references/POLYTROPIC_EFFICIENCY/index.html create mode 100644 docs/about/references/POWERLOSSFACTOR/index.html create mode 100644 docs/about/references/POWER_ADJUSTMENT_CONSTANT/index.html create mode 100644 docs/about/references/PRESSURE_CONTROL/index.html create mode 100644 docs/about/references/PRESSURE_DROP_AHEAD_OF_STAGE/index.html create mode 100644 docs/about/references/PUMPS/index.html create mode 100644 docs/about/references/RATE/index.html create mode 100644 docs/about/references/RATE_FRACTIONS/index.html create mode 100644 docs/about/references/RATE_PER_STREAM/index.html create mode 100644 docs/about/references/REGULARITY/index.html create mode 100644 docs/about/references/STAGES/index.html create mode 100644 docs/about/references/START/index.html create mode 100644 docs/about/references/STREAM/index.html create mode 100644 docs/about/references/STREAMS/index.html create mode 100644 docs/about/references/SUCTION_PRESSURE/index.html create mode 100644 docs/about/references/TIME_SERIES/index.html create mode 100644 docs/about/references/TOTAL_SYSTEM_RATE/index.html create mode 100644 docs/about/references/TURBINE_EFFICIENCIES/index.html create mode 100644 docs/about/references/TURBINE_LOADS/index.html create mode 100644 docs/about/references/TURBINE_MODEL/index.html create mode 100644 docs/about/references/TYPE/index.html create mode 100644 docs/about/references/UNIT/index.html create mode 100644 docs/about/references/UNITS/index.html create mode 100644 docs/about/references/UPSTREAM_PRESSURE_CONTROL/index.html create mode 100644 docs/about/references/VARIABLES/index.html create mode 100644 docs/about/references/VENTING_EMITTERS/index.html create mode 100644 docs/about/references/VOLUME/index.html create mode 100644 docs/about/references/cli_reference/index.html create mode 100644 docs/about/references/include/index.html create mode 100644 docs/about/references/index.html create mode 100644 docs/category/documentation/index.html create mode 100644 docs/category/guides/index.html create mode 100644 docs/changelog/index.html create mode 100644 docs/changelog/latest/index.html create mode 100644 docs/changelog/separator/index.html create mode 100644 docs/changelog/v7-0-release/index.html create mode 100644 docs/changelog/v7-1-release/index.html create mode 100644 docs/changelog/v7-2-release/index.html create mode 100644 docs/changelog/v7-3-release/index.html create mode 100644 docs/changelog/v7-4-release/index.html create mode 100644 docs/changelog/v7-5-release/index.html create mode 100644 docs/changelog/v7-6-release/index.html create mode 100644 docs/changelog/v8.0-release/index.html create mode 100644 docs/changelog/v8.1-release/index.html create mode 100644 docs/changelog/v8.10-release/index.html create mode 100644 docs/changelog/v8.11-release/index.html create mode 100644 docs/changelog/v8.12-release/index.html create mode 100644 docs/changelog/v8.13-release/index.html create mode 100644 docs/changelog/v8.14-release/index.html create mode 100644 docs/changelog/v8.15-release/index.html create mode 100644 docs/changelog/v8.16-release/index.html create mode 100644 docs/changelog/v8.17-release/index.html create mode 100644 docs/changelog/v8.18-release/index.html create mode 100644 docs/changelog/v8.19-release/index.html create mode 100644 docs/changelog/v8.2-release/index.html create mode 100644 docs/changelog/v8.20-release/index.html create mode 100644 docs/changelog/v8.21-release/index.html create mode 100644 docs/changelog/v8.3-release/index.html create mode 100644 docs/changelog/v8.4-release/index.html create mode 100644 docs/changelog/v8.5-release/index.html create mode 100644 docs/changelog/v8.6-release/index.html create mode 100644 docs/changelog/v8.7-release/index.html create mode 100644 docs/changelog/v8.8-release/index.html create mode 100644 docs/contribute/documentation-guide/documentation/index.html create mode 100644 docs/contribute/documentation-guide/markdown/index.html create mode 100644 docs/contribute/get_started/index.html create mode 100644 docs/contribute/guides/conventional_commits/index.html create mode 100644 docs/contribute/guides/git/index.html create mode 100644 docs/tags/e-calc/index.html create mode 100644 docs/tags/index.html create mode 100644 docs/tags/release/index.html create mode 100644 img/docs/asgb/asgb_lpp3_pd.png create mode 100644 img/docs/asgb/asgb_lpp3_predef_fuel_result_comparison.png create mode 100644 img/docs/asgb/asgb_lpp3_predef_stage1.png create mode 100644 img/docs/asgb/asgb_lpp3_predef_stage1_2031.png create mode 100644 img/docs/asgb/asgb_lpp3_predef_stage2.png create mode 100644 img/docs/asgb/asgb_lpp3_predef_stage2_2031.png create mode 100644 img/docs/asgb/asgb_lpp3_ps.png create mode 100644 img/docs/asgb/asgb_lpp3_sketch.png create mode 100644 img/docs/asgb/asgb_lpp3_sys26_capacity_and_rate.png create mode 100644 img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pd200.png create mode 100644 img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pd250.png create mode 100644 img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pdsurface.png create mode 100644 img/docs/asgb/asgb_lpp3_sys26_stage1_at_ps31pd250.png create mode 100644 img/docs/asgb/asgb_lpp3_sys26_stage2_at_ps31pd250.png create mode 100644 img/docs/asgb/asgb_lpp3_sys27_capacity_and_rate.png create mode 100644 img/docs/asgb/asgb_lpp3_sys27_crossover_and_mode.png create mode 100644 img/docs/asgb/asgb_lpp3_sys27_gasrate.png create mode 100644 img/docs/asgb/asgb_lpp3_sys27_rate_and_mode.png create mode 100644 img/docs/asgb/asgb_lpp3_timeline.png create mode 100644 img/docs/asgb/asgb_lpp3_unisim_stage1.png create mode 100644 img/docs/asgb/asgb_lpp3_unisim_stage1_filtered.png create mode 100644 img/docs/asgb/asgb_lpp3_unisim_stage2.png create mode 100644 img/docs/asgb/asgb_lpp3_unisim_stage2_filtered.png create mode 100644 img/docs/asgb/asgb_sys27a_unisim_model.png create mode 100644 img/docs/asgb/asgb_sys27a_unisim_model_filtered.png create mode 100644 img/docs/asgb/ecalc_generic_chart_normalized.png create mode 100644 img/docs/asgb/ecalc_generic_chart_original.png create mode 100644 img/docs/changed_rate_resampling.png create mode 100644 img/docs/interpolation_plot.png create mode 100644 img/docusaurus.png create mode 100644 img/favicon.svg create mode 100644 img/logo.svg create mode 100644 img/undraw_docusaurus_mountain.svg create mode 100644 img/undraw_docusaurus_react.svg create mode 100644 img/undraw_docusaurus_tree.svg create mode 100644 index.html create mode 100644 search-index.json create mode 100644 search/index.html create mode 100644 sitemap.xml create mode 100644 versions/index.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000000..e69de29bb2 diff --git a/404.html b/404.html new file mode 100644 index 0000000000..b9cea69d64 --- /dev/null +++ b/404.html @@ -0,0 +1,13 @@ + + + + + +Page Not Found | eCalc™ Docs + + + + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+ + \ No newline at end of file diff --git a/assets/css/styles.8460b425.css b/assets/css/styles.8460b425.css new file mode 100644 index 0000000000..3eaa6a0e67 --- /dev/null +++ b/assets/css/styles.8460b425.css @@ -0,0 +1 @@ +.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}*,.loadingRing_RJI3 div{box-sizing:border-box}.clean-list,.containsTaskList_mC6p,.details_lb9f>summary,.dropdown__menu,.menu__list{list-style:none}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:#0000;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:#0000000d;--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 #0000001a;--ifm-global-shadow-md:0 5px 40px #0003;--ifm-global-shadow-tl:0 12px 28px 0 #0003,0 2px 4px 0 #0000001a;--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:#0000;--ifm-table-stripe-background:#00000008;--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#2e8555;--ifm-color-primary-dark:#29784c;--ifm-color-primary-darker:#277148;--ifm-color-primary-darkest:#205d3b;--ifm-color-primary-light:#33925d;--ifm-color-primary-lighter:#359962;--ifm-color-primary-lightest:#3cad6e;--ifm-code-font-size:95%;--docusaurus-highlighted-code-line-bg:#0000001a;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300);--docusaurus-announcement-bar-height:auto;--docusaurus-collapse-button-bg:#0000;--docusaurus-collapse-button-bg-hover:#0000001a;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:#0000}html{background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;-webkit-text-size-adjust:100%;text-size-adjust:100%}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.list_eTzJ article:last-child,.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid #0000001a;border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:initial;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}.container_lyt7,.container_lyt7>svg,img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_Gvgb,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:#3578e526;--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:#ebedf026;--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:#00a40026;--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:#54c7ec26;--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:#ffba0026;--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:#fa383e26;--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after,.searchBarContainer_NW3z.searchIndexLoading_EJ1f .searchBarLoadingRing_YnHq{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:any-link:hover,.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:#0000;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.content_knG7 a,.hitFooter_E9YW a,.suggestion_fB_2.cursor_eG29 mark{text-decoration:underline}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;pointer-events:none;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor #0000;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_BuS1>:last-child,.cardContainer_fWXF :last-child,.collapsibleContent_i85q p:last-child,.details_lb9f>summary>p:last-child,.footer__items,.searchResultItem_U687>h2{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;top:0;visibility:hidden;left:0}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;filter:var(--ifm-menu-link-sublist-icon-filter);content:""}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}#nprogress,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:#ffffff1a;--ifm-navbar-search-input-placeholder-color:#ffffff80;color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:#ffffff0d;--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);position:fixed;transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:#0009;position:fixed;right:0;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover{text-decoration:none}.pagination-nav{display:grid;grid-gap:var(--ifm-spacing-horizontal);gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs,:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid #0000;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:#ffffff0d;--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:#ffffff1a;--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:#ffffff12;--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}[data-theme=dark]{--ifm-color-primary:#25c2a0;--ifm-color-primary-dark:#21af90;--ifm-color-primary-darker:#1fa588;--ifm-color-primary-darkest:#1a8870;--ifm-color-primary-light:#29d5b0;--ifm-color-primary-lighter:#32d8b4;--ifm-color-primary-lightest:#4fddbf;--docusaurus-highlighted-code-line-bg:#0000004d}.code-block-old-line,.major-change-deprecation{background-color:#ff000020;border-left:3px solid #ff000080}.code-block-new-line,.code-block-old-line,.major-change-deprecation,.major-change-new-feature{display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.code-block-new-line,.major-change-new-feature{background-color:#0d8a0940;border-left:3px solid #0ec929e0}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.lastUpdated_JAkA{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.cursor_eG29 .hideAction_vcyE>svg,.tocCollapsibleContent_vkbj a{display:block}.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{left:0;position:absolute;top:0;fill:currentColor;height:inherit;opacity:inherit;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.admonition_xJq3{margin-bottom:1em}.admonitionHeading_Gvgb{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family)}.admonitionHeading_Gvgb:not(:last-child){margin-bottom:.3rem}.admonitionHeading_Gvgb code{text-transform:none}.admonitionIcon_Rf37{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_Rf37 svg{display:inline-block;height:1.6em;width:1.6em;fill:var(--ifm-alert-foreground-color)}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.docSidebarContainer_YfHR,.hideAction_vcyE>svg,.sidebarLogo_isFc,.themedComponent_mlkZ,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedComponent--dark_xIcU,[data-theme=light] .themedComponent--light_NVdE,html:not([data-theme]) .themedComponent--light_NVdE{display:initial}[data-theme=dark]:root{--docusaurus-collapse-button-bg:#ffffff0d;--docusaurus-collapse-button-bg-hover:#ffffff1a}.collapseSidebarButton_PEFL{display:none;margin:0}.iconExternalLink_nPIU{margin-left:.3rem}.docMainContainer_TBSr,.docRoot_UBD9{display:flex;width:100%}.docsWrapper_hBAB{display:flex;flex:1 0 auto}.dropdownNavbarItemMobile_S0Fm{cursor:pointer}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.searchBar_RVTs .dropdownMenu_qbY6{background:var(--search-local-modal-background,#f5f6f7);border-radius:6px;box-shadow:var(--search-local-modal-shadow,inset 1px 1px 0 0 #ffffff80,0 3px 8px 0 #555a64);left:auto!important;margin-top:8px;padding:var(--search-local-spacing,12px);position:relative;right:0!important;width:var(--search-local-modal-width,560px)}html[data-theme=dark] .searchBar_RVTs .dropdownMenu_qbY6{background:var(--search-local-modal-background,var(--ifm-background-color));box-shadow:var(--search-local-modal-shadow,inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309)}.searchBar_RVTs .dropdownMenu_qbY6 .suggestion_fB_2{align-items:center;background:var(--search-local-hit-background,#fff);border-radius:4px;box-shadow:var(--search-local-hit-shadow,0 1px 3px 0 #d4d9e1);color:var(--search-local-hit-color,#444950);cursor:pointer;display:flex;flex-direction:row;height:var(--search-local-hit-height,56px);padding:0 var(--search-local-spacing,12px);width:100%}.hitTree_kk6K,.noResults_l6Q3{align-items:center;display:flex}html[data-theme=dark] .dropdownMenu_qbY6 .suggestion_fB_2{background:var(--search-local-hit-background,var(--ifm-color-emphasis-100));box-shadow:var(--search-local-hit-shadow,none);color:var(--search-local-hit-color,var(--ifm-font-color-base))}.searchBar_RVTs .dropdownMenu_qbY6 .suggestion_fB_2:not(:last-child){margin-bottom:4px}.searchBar_RVTs .dropdownMenu_qbY6 .suggestion_fB_2.cursor_eG29{background-color:var(--search-local-highlight-color,var(--ifm-color-primary))}.hitFooter_E9YW a,.hitIcon_a7Zy,.hitPath_ieM4,.hitTree_kk6K,.noResultsIcon_EBY5{color:var(--search-local-muted-color,#969faf)}html[data-theme=dark] .hitIcon_a7Zy,html[data-theme=dark] .hitPath_ieM4,html[data-theme=dark] .hitTree_kk6K,html[data-theme=dark] .noResultsIcon_EBY5{color:var(--search-local-muted-color,var(--ifm-color-secondary-darkest))}.hitTree_kk6K>svg{height:var(--search-local-hit-height,56px);opacity:.5;width:24px}.hitIcon_a7Zy,.hitTree_kk6K>svg{stroke-width:var(--search-local-icon-stroke-width,1.4)}.hitAction_NqkB,.hitIcon_a7Zy{height:20px;width:20px}.hitWrapper_sAK8{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;margin:0 8px;overflow-x:hidden;width:80%}.hitWrapper_sAK8 mark{background:none;color:var(--search-local-highlight-color,var(--ifm-color-primary))}.hitTitle_vyVt{font-size:.9em}.hitPath_ieM4{font-size:.75em}.hitPath_ieM4,.hitTitle_vyVt{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.noResults_l6Q3{flex-direction:column;justify-content:center;padding:var(--search-local-spacing,12px) 0}.noResultsIcon_EBY5{margin-bottom:var(--search-local-spacing,12px)}.hitFooter_E9YW{font-size:.85em;margin-top:var(--search-local-spacing,12px);text-align:center}.suggestion_fB_2.cursor_eG29,.suggestion_fB_2.cursor_eG29 .hitIcon_a7Zy,.suggestion_fB_2.cursor_eG29 .hitPath_ieM4,.suggestion_fB_2.cursor_eG29 .hitTree_kk6K,.suggestion_fB_2.cursor_eG29 mark{color:var(--search-local-hit-active-color,var(--ifm-color-white))!important}.searchBarContainer_NW3z{margin-left:16px}.searchBarContainer_NW3z .searchBarLoadingRing_YnHq{display:none;left:10px;position:absolute;top:6px}.searchBarContainer_NW3z .searchClearButton_qk4g{background:none;border:none;line-height:1rem;padding:0;position:absolute;right:.8rem;top:50%;transform:translateY(-50%)}.navbar__search{position:relative}.searchIndexLoading_EJ1f .navbar__search-input{background-image:none}.searchHintContainer_Pkmr{align-items:center;display:flex;gap:4px;height:100%;justify-content:center;pointer-events:none;position:absolute;right:10px;top:0}.searchHint_iIMx{background-color:var(--ifm-navbar-search-input-background-color);border:1px solid var(--ifm-color-emphasis-500);box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-500);color:var(--ifm-navbar-search-input-placeholder-color)}.loadingRing_RJI3{display:inline-block;height:20px;opacity:var(--search-local-loading-icon-opacity,.5);position:relative;width:20px}.loadingRing_RJI3 div{animation:1.2s cubic-bezier(.5,0,.5,1) infinite a;border:2px solid var(--search-load-loading-icon-color,var(--ifm-navbar-search-input-color));border-color:var(--search-load-loading-icon-color,var(--ifm-navbar-search-input-color)) #0000 #0000 #0000;border-radius:50%;display:block;height:16px;margin:2px;position:absolute;width:16px}.loadingRing_RJI3 div:first-child{animation-delay:-.45s}.loadingRing_RJI3 div:nth-child(2){animation-delay:-.3s}.loadingRing_RJI3 div:nth-child(3){animation-delay:-.15s}@keyframes a{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;user-select:none}.hash-link:before{content:"#"}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.cardContainer_fWXF{--ifm-link-color:var(--ifm-color-emphasis-800);--ifm-link-hover-color:var(--ifm-color-emphasis-700);--ifm-link-hover-decoration:none;border:1px solid var(--ifm-color-emphasis-200);box-shadow:0 1.5px 3px 0 #00000026;transition:all var(--ifm-transition-fast) ease;transition-property:border,box-shadow}.cardContainer_fWXF:hover{border-color:var(--ifm-color-primary);box-shadow:0 3px 6px 0 #0003}.cardTitle_rnsV{font-size:1.2rem}.cardDescription_PWke{font-size:.8rem}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:#0000 #0000 #0000 var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.img_ev3q{height:auto}.tag_Nnez{display:inline-block;margin:.5rem .5rem 0 1rem}#__docusaurus-base-url-issue-banner-container,.navbarSearchContainer_Bca1:empty{display:none}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.errorBoundaryFallback_VBag{color:red;padding:.55rem}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.breadcrumbHomeIcon_YNFT{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.title_kItE{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-leading)*1.25)}.searchContextInput_mXoe,.searchQueryInput_CFBF{background:var(--ifm-background-color);border:var(--ifm-global-border-width) solid var(--ifm-color-content-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-font-color-base);font-size:var(--ifm-font-size-base);margin-bottom:1rem;padding:.5rem;width:100%}.searchResultItem_U687{border-bottom:1px solid #dfe3e8;padding:1rem 0}.searchResultItemPath_uIbk{color:var(--ifm-color-content-secondary);font-size:.8rem;margin:.5rem 0 0}.searchResultItemSummary_oZHr{font-style:italic;margin:.5rem 0 0}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_TmdG{background-color:var(--docusaurus-collapse-button-bg)}.lastUpdated_JAkA{text-align:right}.tocMobile_ITEo{display:none}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_i1dp,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_TmdG:focus,.expandButton_TmdG:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_TmdG{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_i1dp{transform:rotate(180deg)}.docSidebarContainer_YfHR{border-right:1px solid var(--ifm-toc-border-color);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_DPk8{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_aRkj{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_TBSr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_lQrH{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_JWYK{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.navbarSearchContainer_Bca1{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.docItemCol_VOVn,.generatedIndexPage_vN6x{max-width:75%!important}.list_eTzJ article:nth-last-child(-n+2){margin-bottom:0!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.docItemContainer_F8PC{padding:0 .3rem}.navbarSearchContainer_Bca1{position:absolute;right:var(--ifm-navbar-padding-horizontal)}}@media not (max-width:996px){.searchBar_RVTs.searchBarLeft_MXDe .dropdownMenu_qbY6{left:0!important;right:auto!important}}@media only screen and (max-width:996px){.searchQueryColumn_q7nx{max-width:60%!important}.searchContextColumn_oWAF{max-width:40%!important}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}.navbar__search-input:not(:focus){width:2rem}.searchBar_RVTs .dropdownMenu_qbY6{max-width:calc(100vw - var(--ifm-navbar-padding-horizontal)*2);width:var(--search-local-modal-width-sm,340px)}.searchBarContainer_NW3z:not(.focused_OWtg) .searchClearButton_qk4g,.searchHintContainer_Pkmr{display:none}}@media screen and (max-width:576px){.searchQueryColumn_q7nx{max-width:100%!important}.searchContextColumn_oWAF{max-width:100%!important;padding-left:var(--ifm-spacing-horizontal)!important}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file diff --git a/assets/images/asv_recycling-8cbf643933baa1262460838cc4b483ae.png b/assets/images/asv_recycling-8cbf643933baa1262460838cc4b483ae.png new file mode 100644 index 0000000000000000000000000000000000000000..07d2ee8c95711c1350623ada5abc2f3e6308626f GIT binary patch literal 44134 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 literal 0 HcmV?d00001 diff --git a/assets/images/changed_rate_resampling-1618c246583304921e59eced813219f2.png b/assets/images/changed_rate_resampling-1618c246583304921e59eced813219f2.png new file mode 100644 index 0000000000000000000000000000000000000000..001279ea62cb0b290286ecc16b38ce1b3dbe6390 GIT binary patch literal 237031 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≷?Gu@&hmiW*naLh2w>J!Zn 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 literal 0 HcmV?d00001 diff --git a/assets/images/ecalc_compressor_train_common_shaft_with_turbine_additional_pressure-c971bb4cd1ee2f4d1cd9827d6231364c.png b/assets/images/ecalc_compressor_train_common_shaft_with_turbine_additional_pressure-c971bb4cd1ee2f4d1cd9827d6231364c.png new file mode 100644 index 0000000000000000000000000000000000000000..081590629fdec32ef2618b23c2ac8b2b9b847043 GIT binary patch literal 157773 zcmZs?2{@E(|2~dk3EFoDcO34-~%P?eL#yT`6gF;4@6s<^!tYaN1 zT9h?=4P}iijpcv$Jn#E_f6sgTkAs7`k9+R>x<1$E`Yh*pUg`FBmfW0ToJ>qi+{djj zj!aCfa3&_^ItUoJa+KRG5ctE4bF?&NdfJaz06wt#nw&6UVyd~pwd=tKeCEJfoy9RR ziSYgTWqvKUZp6fNaPK(A z0?Oo68%C$Z>Wqm=mWp1+AwGKtV`dHa&ID%Mt1lNXRxq^9&wl!-_3@a~r`oC)o3{(@ zEPv;$uq)crk6u|nAe1R&{P*WF{pDob^}SmSm9&!oySmeMOV!nT^!eqVeQK?pZoLMl zyzK?e9sd5wjd5R_>H6@XcjTuhVCr zd8hC0t`F24c=IS}{@+Wi4HIb9{v(>}jLoI76W$$Ft@~H@`vw2~Dkk#uLParYPxe{B zn2wD0?rH~bjdS~r4Cp^I$jIicHwPojJl>a?!)3JpJ&%Mu8k0`gOhs{AMl-+LzaQOp z(wj+HJ2^Je=HFwtI;6R~w>7yY#_b_2_V2GC$uxJ4=uGhce8IvyL7j{H-*d})Ok?s; z1wTL~{nykPWpf}sJ~)!tg*^Q)b0RBHpe|&G-2aT-*v=emlYixZuLhcfhikmjRL<9{ zubL+P+Yoc+-b~`}VRN2Y|1%h8GBZr0B>Q1U$1pIwb z&3sM1^*Mu}5YT5;aQHbvW$p4>(eezaHG-22 zMWEk>o+*yqEVzC99Krv~t1!*L@%rH}kN<2v>-%?6N!hOc8nn=RcEDFV8?e)fP$@%$ z&Ac)Nj~Njb-TD$R*q*toWqrB`6nghb_K4ax) zuY57><4Ggc6SuX=BelMd-es{*#BN>K0pgceypW1cne^$uR%PZ-1erGf+p`tVm!IZdrwXGEWXAK9Ftc*^Vr_Wi7Q?8V#|4*z;T6(@q1y5foB9|)quA|%x3DA2aMJI zoQPiOa_f~i*cphQD+-?=i?~IY=md-kim1dfmR`pD7t$cNrtZg=?1PF=q_*z=?t@6g zEZ@s>(_~3cndFr?dPpj6+hg&jGQu#%1u#bJx;~?W^FrHJ%jW3S`&FYauI8P8724ah z+yl%(RzG|>7nsrnMYqg=QXP-jx?!|08g2e2+@X>&-hg`s#OH-~rAhEcRUn$%QP6zR z&eV1dY3=hZF?yTU%fQA>2OO#_Ij{YYX4CG^z7J1abp`GpkE;ZH54|{@CUwg&_ILhF zFcAETPF;tN7Y<&eanT2gb;A&Hb`-xWx6&!Pe#b{<5Q{z{Y9rkzIB7hs;6o}G}K zI~rF86|`=dlvuH%nBEJ=uq)5<@wI7ARGci~V>E-zYzG_HJuY-eQO;awHJxqxG8DSP}3@C&LJ>huufD|zpr3Dar_>wZPCcikW?>4 z`~i2?d&}YFM8P4#eSVC{&0eHLxLuuWX$JhRqbY9)2FXVwzb0g=Mo)o4rgh!ie#9OFso%ce*t$R^|#(%4p*8JE~66 zf-FS#+Cd_i@w!Iy>Dxa!fbyPe;s;)KYfefiVF zo5ADwmV`AQJNHH)6lqV+vbBR2c+Ln8zYHqgX#wh=v6yebrfa@(o_28Xt17;L#;RtO zH2>kAO^mH&sYQ1LP&sMFH%>F2C{W8$WX|<(Z?%eFGUiyx`1G6-&y>`0!K72bM#yo4=CL*JmT9_si6V>Uf}Ca~z_(Y@V=1yr-EOQSDpTHBAm z8by`{C$aNx3c(|)vGJ9(EW>{Sbvfx&2Gm%PiOkZQc=uo`iT8Fv;0KxfWDIc?gilNt zu6#5@;Dk?9WGMo?Kyt=@Jf= z8*ax+Wlfliaa0#mWQ+*l(r%W^wHTzYt|T;x#?-*~r-+-GOQR*Q96vmmtLQ}JTsR}B zm~85oEs%R!sfYjjTynLt8{mT#AG@Z_gv>o;Z8JP|`qkCzOyU%HxK@G_#TF)vxK>`2 zdf3?qJ9sGyn&BUL^^m%71@l%5yAa*kBS%Lsf4pB{sy-Ja`+cgCoG@xLER=G2SclG* zmY1b!y8Q*~kG`{faEE6`l@CD6qjERrLRXaTIFd8uBdqwxpb=<-7nMsaHs(!X^)Vhr(f&1 z0*(=377w-L6ggodzY0f>2ZvC%%8;8o&eO1*++qT z4aWWM{)xh5uNZmaJ$3h8%eSEJ#<oy*akb7=Z$mJL)UTCwvnU&* zxqBv-AURKspR@f!wrtN_AAaO8Tr3{cq~U=#>n3ivw$*Dp9CU5!u_L%Vxn`*tx{L}6 zG(5;bzXDJHlP_`v$awe;h7HQcMd6Vo9oCioF3Y27KDOOURF}vItH#dRV~Xt5bp7An zK9U(VpG?X!P^Mf~gA|}JoITek`QWr1(@RC_9*M!o;0Qj}h`rxGs&pCNYmYXp=LPL5 zmar-i=1^gUXQ!Hb9vo83~$3WSLcr{>wuS^Rqu)%SgNJ0j#8@A;%xUuyD_PZSN(czTKWmF>Xy zR&g+T`<}%r(YI;w>l+kOJZhDRWMB>5|k{&;Poa}Y9U!x3MeJn<# zRS?3;(d|iejy!n{1MS#}2Xkpc;d>r5?P6I+``R;g0b5^7!33wGa(hmmM^fnAQ^YQ5%aP|(`Ho93 zfTBsR0?N)a&GaeP;IR1T&bSC5vS4cm9-nuw2~&buQHnGl9+nUvvs8KDa5ptLL@zKp zDTIV}LwJ@c?Yh^ATYec)oVEIB(jddfWGS5XSy2;d|4vVaFuYW?DUBYp~|VyTZk&5D}H&HJY-3Aa`v&4yTzOB z$J#+06%$-7#XoErDCoe5BGgynu@2r2vQ z5@&mE^t|keAlB%$B-FYbV)W#5*RaM@Ng6wd9$OC^WtY_hz}LHTiEr@%dOdg(*|Vi4 z=3rU7XDHBXgk4k*Ng{K0fcuBG+tv4FDZ$SY3Mor7C6Ok>23j4TACx)Z*5-MtNVzIZVrtR9Xv!t{4n;z#NWcH3v*nwHnR6~=W_lhj9Wuw(Ln`9}78apK z(v+wZ?`I}+Vk((DnI?aHf|okt4)et&jKuG6CN5z~dORgb9U5DSSKEJiN#SwE$w`y1 z`WCBBXGiird^s68<8itvB6uCUp15Z=?pf%De3f-Tk5QMw1RLpf9U0{q8c=)Hm6-u` zHWNp_?zKs%#ZDfIj^pC$rRbXXaskzj^>?c@8WZs}!P?l$-QWa9-OCr@xxZ;6ehEsO zlbls^^nxqn2DI><`I)__7&c?5dtzn{*H}*k@2sx=;f+MPAcGnXyL9F5%{3{1Z?*yT zmf}z9kByliqPCo)G}i8O#GU;5PG2N{LHgm%g0&+psW=o@{vj`e*Dj>3wLQ#Z&4%y9 zxl1hB3YX)4dNBv!eOtr3@l7g=CR5JhT8v>~Uw6{=*L@0k835o3pnT@9IzlS%J;%X<0fa->x zgl>D)oIcewt^GU2C3u2hu&OUdk|I+V9@8=2!_^*1kqYYdW?f-ouhq(6uQj~oHQyEB zcy=*DD2~M)^Q@8!(t-`Gc|-QGOJOtA6jS2pQk+_uDG*FEwcd6l@l2f5W*Q|2BqeXG zA@8;%MmNTY@PQ0e66|vJeuDT2OHnVlr;e`M*YT>W4NK()i_20$Syy_;mD?g^5o!+J z*Tse4Pg5BLS{deuX+-@;Qm*nlqxZaW-(7`d)&4H3E})W9{A|1Ri94b)GYL-XN)Fth zDI8E^=fQqi=Q2%U1=8K6Kjd>9F1rA?(Tdx+-S(5EHDyhC)&doB{8BYvgU)E8m5VNM z&p$(HmP1_jjiEsLi7U!pF&{|Ha!U9i_?Ar5>K@`z5o>MrvF_Y{!WlKuR_S)Eik-=! zd6!aZ)n8rupA|`FJ!Q4^b}qRvZ#-rSj5%)0nwap!$0py1M@@n) z=~oUOTUJO8_G(YV~4f&zW{EzUJ#~BfT9U!yxr|d^Vtdr&TS()w+59f+HH@5 zQX?}@0|-~iIxYiRuA&_{J{;@QP@^ctWV)A9eyVM zReO9;)$~3}e3I@>JG^mmEwx5DC&BHP)?bwx#v9o~*kX7%=P`X?vRBx9NDlGJDGd4u z!DbY^{}v5XSaeS|QS-13y$^w+A?dV7G~+`c#&U|2x4Vycn25X@-vU28qAkKaeM$vw z4)$3Lego+;#haJZbWalGbu^`gP@sMT*u8|2l{JPNR3l>^8W-NeJKGqcRuZy4fq5_E zpO%`MUWNB_>k+3!mnIe3F@2xaj3;_8hLy?Ex{8&dXy{WH_Z`S|ceP^d09^G2=^XIHJok#mp3etce2mjjZIkJ;z(snv7ukvCCEs>TaLZo{cxc!nf` z*?T6rFwC1dI1<*QwS#*>@Qr5<7yH}*pR@^HN^SVgo?XAJ12}Gh2cvf$_x4Cj8GrxT zhLEo@5^{8<#%R z@!j7Y)joK6Fgqc40^ic6ia?nL^ER&NEpzx{hyt7M)lOu_;VZ?LZG89Glr@L<^Y=-6 zr5ArPB)RBqJF%1sZzCH9ePWstopS4$YIqUEa5k)erx3Sn=$t@%9ogBmnLb1rn+*~= z?|A)>Z4EZoh-;bOyeq1r zDSFQZVkfJ&6PR|Z{l-mYXB|bs{xZ~?ai@7UX=GzebrVqG%nru3@p)AD8)~UvDiqwr z^VxPm*-ybpxo5!*0XQ<{+-gkjYQnM}X??(x~$M}ZM2<4Sqs z6HF65j9`>PgjuO+VOkLYnpPxjux}O_7$VsE+55%2@Gz49zC=$#&WSq)c7{DY;qN|I z8r#OQ{}^`=gz$BJyHR^$;zmyAk+LG#=35Pxs^GZvd@6M&EUv8W8FwR5b|`bbcSpu| za#_tzz9DKbuq5E<^_-)ns)LW52N3Lx>oPqW!?AaZs$;7>_0TTQRa;~#9!5RHfS=}F z9CWa^s-U$UF>Nb*`)m~IU@e#*A{=PiCZkE?SSomqWVMvvU_OugeN3%>YhEhS_+tfj z>FmQ>EB7)#N?yJ@ZnVhjaPbV&-3x1QwdpLKzBqmJb3l0C4%x4ls{ELUy=tzOY~$Ev zwNT27e3-f~=|N;94=o-0n##!Co0g9~!pLy9j5kddjm;nO)w3kL+JGZuW;A1owN>7Y zfu*-wvgsL(Ri080s5AaO8{*@w8*Ak>>>@%}uSxi~X}jTNt?@02z*A7{<4Fx=y+3f` zaY@#T-*0K$zvm`6tA8hm7!5OC=n%L^Qc9nWq@o8;W;ti~+_xL%=@$koJ&bz*07UIa)eqIh%rGcvEc3avATfF{3$m2%>zcd zE<_XE68Pfg5BIC0t2xh^KAhNgdy2>H*li}^5(TLH!M1hQ>ZF@Rik&7Fgf&o_1UYpn zk{T}1?CDWG(BP3eaYy8-5s8bZ5T{R(H|z^BrC4%)&$=^nvnA1w`s4gnq8A;px`)yQ*)Ce?)SDTtZGCP|!vE%j9I3OqE1m%*ZyI0V=e+Y1 ze&u*|kUzWS+YF_^ZMQ4_bLCTaWq~+3#6ixi6ZX#LgJaJ(*rj)hb=vzHC3N)e_>Pr7 zdB^J@lB&~o*SE zX5w@yGju7p>lznxn=;@S*9mGBT9%A52~>-;;pzqGsRs5X#(Xh$e1|6^ELc*H7a_%H z_uVU_!SvDW(A0*YNS@WR$vPzbr!bfyWlMicV2^i?zo&;WVn`>h2Qq9}jg|w(ESVXf zt3AvW2Sa=|*f&;)it}j;PD$($*pZn;sM z-Wh7%ds1QM_;=P>ng95fHsa@d0dxM6ryt&p&oI|ULJc?`P(7aiVrg=pqW52=m)iF9 zfu!|CD_}1F@2jmGJgRkNd>J?*41*h7_1CLQSg_IvV^TGGc_PNLPLzSxf(< z$M}}KSF(LiD3GE~oAT&1oZ0;;S=XVr>FDdw%oi)VeK$kDNVaXqI+PR)#`5ffCk!43 ze07tDKsL|+jNcsN?N_VqLbIasxeaqnJYyIJ6Is}34 zMfuvw$}gMaS{(}_!JbujkF6ls%a|D!(N?Sh!t%PhAn+*84FevP9ZI1>d&K|pk3sPx zSG*|^6brQuDh3N0MU`b2uP2#h%-TekN#QC6k%lwLv*V*bETgA!aptD@y^fu*41C*` z`mCMyO(z$OV2Ogl3_G$MyV5w_$oGO`ZhN`UU(G>(F8*s@o^IJ)5lo(Rb<{7jjo5?V zL#;&jnNKU&0f7sb7!IQdkoPjTF2X2LBoT?V<3m&4b1!ny5!4TdHM+M@az~x+&VSU) zbK6phJz}cdV>W3Ve7;|8Cadw{DMuh_JIv$ebw$J9f6H&8Jz0yqBT+7=*C+ESY0R*YbMIN-)QpwilNK<%eYljBE&1r3 zJ_DmaIp>fvKy_wE!E9iLi~JAuWYth0UQo-JFva$HvMN1U_z^4yz?=oF_f7R7Ce;x*}$X@|Dh?la+t2*S~$qql|O-Q7r zR=Pg-b5OkS>UplJ>*qI)^v~NdDV#!@?N;KQ5Bh^1xi!BEo=@_DNG*!f+4%C~-g7=8 z%mUq!2@@XgYw)7S7-%9%K&E!Ys`tH4_^9?e=F$&X3AgEwC-F@!tO`qpib*}>PolO485L#rxfQ{0)$oS_R z@&u^AlqEL+PGSd-f2AD`7vW0@h!SdI#X!o?O&MDJUy>_loa0#tCC?t5Dp%eyw`J-v zK9?aROE~P_Elhx!YD#@=Ec$87JA-LrCtsMOeAo)A@}QL;FZ2@Vc%Xcvq2;48>ziMV`sdPw-Zg2_F_;l zIJRl;%&E2py8e>NZ2?kIWdcUg3KL&_F~Q3`881aK`*7Sp6PC;b9!xF}Xm;l^;pa2C z&H2k2>vma6xKsM620eRVmZp~p0bdDTy)fuKHJp9C$0-D$+#P@pP%yFftx|@F!QFYr z7xTM-qjQSg*$c!o|0&%6bXaWc(whyLo(Yr;=$m90JYEd(89Q;jplw7&!Atl$jfd|4 zJcmMnrhj)uJLk1U-hWp->CWwdKNz!*LR>&N`}99BaqnU^{TXnADI??O>IsaSIrz-; zwTC-xaX@OD-3)qq^%@I5-RLC>^guBAm!p0+7b31q#Q!yzEV&7OI*Bl=ACwy)i-QJ@ie?tZl7o#`4#f ze5!5XTG*eiDKZi$5SbIb`}oSt9Ys&^xgCM8_`Cidu>o$rJI=m@WARS8Txmxg4zbOh z@vdIr$2e3EEJH*QffSK5PSsPnwb^V#V;nu+?AcHyoH77q{VBrbP(44IoYp%cPY@(a z{NOuX%cpUb9Mrh_E@qO5G`>=R-bRcP!`#X;ohFr6zd$vi4AFMrVG&{Aez+C?q<4I>s8x% zwe=|>**ucF1%%!`aFU-q4Fl?c{L>Yl^~JT&xoxNTHd86uqS2?(U|PE4RHK!ad-oSr z(drqGzhIct(Ud-uy!zSAi_|7pwC0-;Xvhc(fkyr=3P47Fv5L1T`KOzZpkK4zkR zhXq<5?Cz{vRGJK<+VNW-_pKU@6M{u%4w=ri9xz&G$p~Rm(oN~6j9Ve&1cAr?CK=$B zuhD2-fTPf&XIH|Lxk;*xr`>a#N&#O0w(O~_D`Y%GlNBr{4RgCW*s5T!4Q;o@%MtEk+n*l<((}!l8YMaU@i6NROkg`Bl_taOY zE1Dg1677+C=N0oC;;i6oLJn!_1x4D9rFIovZAVZ-vQVFDk|7i~SJyUf2MBb7g49%p z1;@#QOei|PgHUY4l6!h9GNbJrAaS4N;0>5d{$52js^4%`fUiR>Bbg-|BIVX4QSiw) z%S04;2@mJlWM{_j{Zg(ZMAQb)THsXC^ztzE`JcBmq4hV>H{{~d{SS1Yxu->vl<&NG{k?AylXEjGh-hnf}jl#t^QMv=I>KmC5sM`_I zKj392U>fvQatD(%?s0F@Y1C?4%=A05qfq+_mKFutP2^*0)I+3 z6F#^C*n)Po?EDq;<3exz9KRaUUI%M#1ARI_ACM0KGaP4o zzz?r{X*T`UTf*w=6)W~~IdUWRxi|*QX&0RiHCC1RF2<%hN}@-Xp>DYSu^mSS%{cCG zDdv>YN${;)8Q;;B)YI+9<4%vr##4BV3ckwpI*-2!dlb|XWilhH=>kld+*4AJ0i8~1 zzadx}DsuIdp#1;yZiOaW>wC^o;xDj%cLlpH-6~osH`WwLeA5EzyXpucaF}+l2`*e3 z_jqafRy|DDFnLfJ9*F*)qj3Z;04B+zizC9dcXKOrD z(v?cOnZ4MSwYvEq%XNLXGPVYJ8OmK8KKz1=-50obR9)^;;ou{8HdzvW{urrP41;iP zj{0S*4e5FmX+$U9K2DU-6QQVW;$IoZ8FC%?#>~3OK0r>N9Z89hFBC z4v72%hmE`%Vf*B~SWnl-Q8j?-VEeTtk#RO;j6*kk`p{L^oWqpJWVc7QX+aF=iz8Zb6gF;CYfW>>=D&!u$F#P$*B$c?-{dCam*kZ-u^)wVXDpB4T3@eP zFPC)Cr9D2aol1-%zFJOZXI)Z-lbLTC5FDUWf^Z58h)19IScQy~w-c~)H36Ws3~


B<|OZ6~Tr2gXngj~*$>DJ9qX7ovSV9DgRsKdU%I48_S~Fw@cS~QfU`x%R2C>C zZXynWzAIQOOBh+J6d|!hipW++!c}TWC<4^~T)*P_!Pq$wip=L+`uNoNPFO@t+LB*A zco|2F^mXkg75tbx;#XEHpUZ77etM`*sGmAw`1Ty|^MPV@c9(#ko;4pp`vuIzQM&`i%kHN7`pUe>{@H@7e zenXO8-{FvB{u!)QDYAdLc}DigKLOj?+g&aW&}iM6RqVDzx46wlcUKT6;f1qPjYVGF zu_^(?*0%iq3^-BoPmAWrC93sa{+({MYN00{XIIYp9s=RFBZJ8J4K8`&&dyNsjVH~MHlUoG#3{A=ChWYwr+ zkFksBn7eBzfudFCRXXd%pv*3OtSIyd^N zJr^)(OVuYSyib)U)3EMrqH5^8=V^eFD?gN-RLCO;Yw`<%a8)im7a0{}&|ZAq9kvsG zkM|0D`0BYX>H5|hoKt>Hm$7_vEdQ|m@MVEHn^Yjl0d;on8;k#oYoGzwy05>+&Ar`; z%U`!=*zH#mYP6RMYN`avFa_vmIl8;gQzP8vTL@M@h_{D0F2A#rr}V1IF~g%rIZ)m4 zM6DuZqIy42O?$cO5`@ZW&s5`HGTK*c-6A(>$SpJ&(_LPmSyK+IhP_ z&KP#ex|~Lo$2lcY0d5T7mp;m3&lT*vkVs0gOZ|1BIS|na3cSLA2hKk{{pj`<&TLxS z#gd22e5A%E@9?vjou3i(^bTu!3hsSffGh4UOOc@6{jhnM{Uq5#MabVS*RWk5- zEaO;{2y-fX(dlhH!%+zb<(-|ZDSf_!Vdqi3Z(lpvzx=bl2D8AwKdk|*w)+aY6}=v~ z%3ImnCi+qDsmJ4DkY;;F{B?g!z^Mq6wtLIr5g#qXh^$GhD9q2pS% zVn^?u;L{fE(>S~#02fu3R*yJA_!+wl@o+CD+(w3c);r$Y;yRgx>s)h{meWOn7@Zg; z2U#|@+3`~l=pUV?{8=&{Z)AR)Mh!_!>du_K7n<#sfb&UV#ejWo1mAyB>qo`^>HYx~ zpU&p%PuQf74@SehgR2)pAOE(J7FKHF51C_268E7p%aiSBaQJkxUnWLZUu!K;R%jba z|GrciXmMeC4F|O{D@q7P-6mF6)VmOd8un$C|o@oRZi9 zRS|{uAZDIy>qIen>FA3(w+m-|9ZBgJQr=#NbBN{0xp-QivnQetb32cTECr)x<%vN9 z|8(j=*`fKs66^B0bw^^0x8^5^7Nvfz2q}_b+ucs9e+}Ap{-?lk!7+& z!+xNx;b2n~JN)FfO?hITH8(^Oq92-NtRU8{Gd|WuesZz3CD=c*#GX1-g+z_nXqRAY zr=ncw#XmX>8&CTne9MHk1FNp4B(#T}WCiduJ$Z#yLHe4qwsmy*lBO{|q6h_|6YDzm zf3~5bs4E8L;wWS68@@{WEk46`1#LlLGBbNI!>FkLo)k2r-nSW?WWArr)HbE>5ML}Z z-wN|RZX#2r0{7r}U!-8LY*O}m+W-_VzL4kqPxqjxslLz?L9RSS7ri|a(S4D?ODx?s z;;ZS;^_&>k?l^X>R=w_0lSO>{wnW;*(T_3UwS-{A*o!Ky?iqb-OuCC4+n{2uW}LSz zZ4S-?Vf38*efsyQt?lu4oo%Bswy`ex=^*i&Q|yyH8nCZ@XekZq4xCjWnTPYj=x>+L zD>bVxotL;`L}H}6P1sD_t{X)C(G|o^LbteGF-HZeyfCU?4Sa(iGMnYM_e>_CZ_hnmQG}*SC2`>u~oxI-(F2O8))yA z+%*rV>u)WlwS^%+B`rlR2@EMU;vW^$jK?-yFC@;+Z2PSQl9~NFDyJ#>WhY?-*t=bn z%?Gxn+iBvwX92!L(xSAq8bHIUMg1bp56Z=VOWYa_`Fu4vN$a(L*5qS5*wn;qaXFoau z`w;`-CU(HDvdkKEpNz{1w_cVmO4bl3qcGuutaUUmB{uM1WwkRIzbcObSJ@G=A`vfu zwq8sx>F`#FuHF20{$=JWt5krk_i5vJ>4{81Cv;rRY=!&DJL>GA-~=Ws!B-~_fgC_? zwG-$UP)>oj{u((!H<-I}alLCk;ZOpUpy}p9rrzgX)t8X0(tnv=b3$JxRjbI#+nDCz z^Mx02P10w?Tyr&E5G$Dw^K!^g_SKmz9x|0h!p>A{1J4QxPJq^O5Q+ ztyy03Auyf4Ti)hH8xzo?|B-*fp!pBN^>5CN&vw3YR$vM#I#=fp4}U0-4n<%2^zgLS zG$2*-eD@%mmu>kr6gcgI2FINY#YKNQQLTP=S!lui?$IV6ML11bT|HszXk5#Un^K~z zQPeguKJX_2NTl2sCi-XIXlO41s&gSxI{~vqU5*Co%N@VP;)^H1SFWB9{}Kj-_@`_< z_Zc1*>{c6K`sW*%AD{u**^mlFUcMej_{j6@% zj9sz%tLJsAqDcj;PjT0@X8dzD6C>sXoi4L)Hf}G-BUTN4#lMErCu90|bYpKjOSLoR zZAN(O3LteR=fM3cvFz&ZKqj4MM~gu2C6iGuJNKA^59@_5rf~Id!#!5`bV@2`pty)pc_Tf!Z3{`v7nqun{&<|tNbjW}0dZ?WOL5k}EPRa5Ah zKTHoLX|axazWn+tWbV3>Mc4qis$y2LGMCi65s+Tek@P#^vk3!KnQjwZ%QBXr6>JcER;u4li+m& z6cofckt0r~@`NfrPZS^~c}cLx@vGu9u2;^aU8u{V%1;Kp?A6G6W&DsO$J`q2WxNDL!S-xNZ8}$hATdGBZA@fPb_2|2(m58IXbCb2o-y}J3_;}O0Q>}@0n`P9y1v01VB%*D^%WvH0y;O*i!(Kq^KF1lJ%s2~3|K2hPV40t9V<)l~ zDqtdhT23;cTSKx; zt*#&K2YB|MBt9Y0d6zXjm6zvTZ@_t;Ip42FG)Rq2atxZ++k7ZOj~sT zcyL6oBcV14*S8jOcmzD=X>X^XrN|}>UZE(1D>g-GU0uxID#B>NI=kR-{|=sZRj7)d z+M?Fji=mvAntst0kK+!V@Nl`(APd#jK5Gt$L;$L z$oKSI8LNiKlhg9Rq6Fx6ppXHWW9>Yh78 z2X&|wfKC#kvtwGT1(R%3XvWbU9&`II>{LifsG_jpdiLNZKeNXn9pUf6J8oqW{*#?2 zfd+>;S%u<+Q2h-bRojwSN~@z9-)QN1R8l5X>mM!m>bhZfM&crfbZinItQPWR`2H7> z--pkHOy|QCv7Z}?8!Y)^RmaT`TvZ==BBdC_q~jSP^sW&p{pmaI#q)O?4q)8lu}Gep zCD;0c5gkTqZQstS`15!4khuDj5pwT}*P4K&9L>CTb4a6KXzbhgPx!=DhTSH4)>N?M zg3PWS+woDRGEPQ%e(yDy2;t1st6)j=0Y#Z~!!X$pzu(50no!&SW3aN+@9ss@{}-#C_O{?pTj$v|f+Fx?d7P zBp_Rdy8iz2S7y@nYuAx)f@_Q*GX^iwLF2yu1By+N)SW4p9k-WLWbyyja6iqw?KQdX zST0mjrvTmbU!hN3y`$IrRwe*Lf)7D6{Mw*_qR^k}m*i+X6QbIh>KlN3jFV!@8%NwP;T`!wh8cwH2DOVjhn>PaXtX~t!7 z#jt~1!4J^={RO+;Q_biL6dUlp7?J8?^j=^-b0>L96m9VX>WamPW<^n3W^6SY=aa9# zg-Z8pr{3+qD%_H^eyPeCCF-r!@g^aE<=GHH5bW#C4)PdfT3HX#=8*pugQM)ut$3F< ztFOL{e7)H?PJit=c3A7lbB=!H;^4$ui{KM=eYSPZ^}(;!1OOi!6He-^fjoPc#R&-S z{co*z273vQd@=M3k2ANwEQO|=(Y|}J?d+Bk4Wn;tz%V+XALKJQJ;((fRS;(Jz(C*3 z%T6&jgy7o-=6>l3HA`e2dpP(EelcG ze6d8>@$son6akeTVbY4XvYcbGyYHG`9%MOeyz!!}MgRpx8*T2-BBaq#zb^YrtquJU zjl7TD#e};IKfNG4!ZCCmw;)^g!AROWVo4c!MY`m7x?V!g#YbmUW#k%*0}|%1Bd;>7 z@5nsAP*D=#anUAM!DI9$n@0P6;dAvy=%A7GFA$``RalH4SKOADoda2#bL$a+R=5F} zeJ_WB{OZ{cs_MWw2x|(!M_NajoL?0{k61$9v$SQ;)lPo)2q(b`rPTSV)Mws%?W$)x#qv${85ZHEVF0=HxoeU zO^j&-{-cffroaO194xFdnfttN86Z#Q)Y`^)A`KZP+RQw6Qv5*S+(M)xTzVUKKd%2s zNi53v9k|JOs%_dblts0eHc*j!1zC)5)+xa(om{k_u=f^d*D=eE?P;Gm7T)ovw=NFsda@uEa>ud zzy7gI;TBLJOi7-!@I$V&mO$~$^4e9Xq)Di5mglDu6OdM${3w3J=W0``U)!PvOuEhg zsT4X6jYqdc3c(5atBq9)yp`msmjhwn2Q{X5jSsRaVJdb8^q#9ms&Oa~3(LZxIAkLB zd>mPd0#fF$FTId0JS{ZsV`5Ovk_EIK4Rg0w{=e^Cp00G(#XwW{8@(i9<*0442pKOX zyxdN(vkITpn|XmK7lMnzqN&$L;>z$M4zlHn#sD1`#g(4yf|v(ZM?BJGvM+M$C>?SA zgwt9Q&NLUiRH#tUU!-5i;MGWhTal#EyVi3#gu&~yqXcV||@CJysHIqB? zNq_@=9)$F_jLv z%juKxiOJ=$+fPQ@9vdC_vawYUja(2RgmOGBh;BG1|2&wkatxJ}$y)P{T_D!|qpTy_ z7CZpIC#NJ0NT4evCu~$D4OiHPGEf!0_ieVnNC~6x6gG1wK(qVD0J-g41M`^6nGX`v zx$n?-{tg)b$N`v^!(E{tIJw`vnW0FlPtml-TwxZaM{~oCdJL;jAnCm~D46uzwX$H9 zg6S6khOhdI3;X5^tjPHHhxmi7_`-o|)qce;rZ4I?H?%x_Z{U9_9o{r;4K=Et|sh;^b;z>%ffGuAQeB*T@`pa9^Q$=S2)ELfy|?*+=QIshYp;Ro>Cb}kGUb!wN>h=pEs)mRBsTJA6Ii_lQUs9H^s+9|Ej0bzhx38xtfa?arQRk+1L5WOs zSSd3-|LW^H7umGIBjAj<1&Q+J-~cQA>4~yqA;k{#Bn7^w$4q$xZf*f&ROi7HhzY|O zW@22*U89ESaS6^+;P*WQ>gmkxu^YZPal?JqFvw0+;EuAk#4!sI8D;Oyu~#x9%8cxp zY>^@qLLy}p%KTlY*X#Xxe?G78?f0MCjpO+^*Yk1h`*pu?Bl9+u&bbr86kK)Sq+n?0v}H9wrMDq$DcASxH-FN(>0Swn8F=ouf6Q zYQsqJ%YXX4+~FCXKSPTR5JHsbe;^MqqfFA&7?$$MXHjvw+FtcM0vvRZkjIlZhQuQM z=XB95R9#t@3%Fwx{;n<<5DJ!m$0zzviU;>IBvbK=)bH`5;vjnIs^uomy5+n=%5&x9 zbU}>UEON!I1lj$H1sXe3RH_4){%$+NF^u*?C*Kfe|HqF+eSU;GmssdL`h2Fzy?pwc zDT}rNVKy|UZ?b40aD2Z}-qKP3-du=A{Pz&+_&hrrte;r)NX!4=QCJUNJ2cfWUAYI- z(r5J;)1dHL!mR|7`Fq^;Z)>j2d!Te}S(y7Dm#zsgOzQlVv5i_w{xMaK13>p?mW*E* z+4-T!QJlFlW%h8m?E!rIfEO_HN zx^lG(351%r*Dk+#0#Fm*};7p35}#5maq~T;rbrOKXv%>iChs4(;+!6Kr?| zwJv_1zU&pLUy1SuW#;?-6UCbL0xog*pT~>TZ8zJ`s*X=feDzCYkQ}YNrZ<9f4!`Ay zT3QuJA(iKo{>8>+8~pi=m0v|OH4mE%AFy1fd$m-W<0>+{dOu3m`l;7D%f@OlK%tAy zt56+VwfSW&^}G5XNZ*0r63Z^;c@>J009b} z6aO0@#szqS#~pS<=@SJi_!oKZ>}{AY9YLbL>b^5u?*t0YFQp)LGA4gm>An$t@6n4- zfG3C(>Wc5X6-5I5W6`Q>qxlMMjE{j9Bx`U#9cB@8l;cKsyC{guN`f8*lXps(rzh^S zT1|7u1{@z~!j%0;P2pLD)O0_w;Pe!X!D~SKLDwj}@LV#GP28TT*W}d6WC7lgHsG4* zzx{bQi}RqS8taiLt+41)R)%HD^8l2Ax+N3_DewGppZwrNLY>}eTYC27*Af{UJHJ_V z=g~L#ps0v-=U;4`esMo*dSg zJ_{mO`Wdd9M=R!-M8QO^G2MaOq6}tQF#~N%GX-@N zrRusTj zchOO*;f3=?_v@!V0=M*03H>OD zzpxmHdStK=J3>J)4<^pU4;tK;`qXmoxJJf2!J;3vQ5VJ+&bf!K@ba8!u!qN6 zbec=uSqN&%QaIcY{b8YppqqYH7?)g8wSPm;JZ0|LClgmp0n>+z@G2L;vSB0v3LSVcImZ0qmOIh?7HcAV$GDurz=0e45O|KUA0F`*=HHJ%q( zE+^e_4M|`c6CE`|Xml;~sSYo6eQVd8s=6V#+4@6oqpFut&d-SXM2j0hvzu5bvsM7s zZc|zvA@RUvY@Ee1E%gpW_XiQc@9zBjuUe6KD0VObwLgwr4+93J}i9X&k% zzmPSU)MY}BIwQCxza#(k1QEB7vUQB7S)vXim;c9XD;cC(7sBPjo++r(sc3#rl=(QT*$0|4WkzkV|TCrA?`!{xQ5#@tL0>;q_E4Lr-%}(=W!4v-hMF0E6 z08}pT4=<3ZJr+;A3N|z~nN7X#1VzcAlPl$}4ECD*Pd?(zrTZl2p#qY00UA5 z1+D$qLxDuuohS>unP1yWCBQ83@YIl~(S81svm7AF7D%w z@eu#7xc?ldkWxhc;tftpf^9Z?d(q7__|S#p#%n{46cVh%9kyhDetR-QvBcV zpn|uxl5u13ky2ub8_x>#{Q}I@S+>r;#}EPzTlRPgve4L|Owy$sfo0 z_bdPB!Rm>Z()99V1^|?~+_d^IrQGoGU=#&gF>vfmG<)5Gf0C$^FK-FVHk_bA34h+a zrYgm600*L>JyYv8-wuL7N&V|fiv+=uvc7}^tre>)mLANw!epS;_Xqk@Z#3t`B9M7x zU@H{d_$JiTbqeU8NJX?+5xFS7bC?HSN=rW4rFK^PJD&u@`p^ zH#=T6R8mTC|J7vObvDJSh&!C(|Gsn9W`s|M-1+$qiLyI75WdUaD@oQ@l zD`TI3X@xSe=onTT=73b}y_zt)NRCNxX6MyH#7&xlAgis5_7BaY!GdUSJ8!&_KHQ zhZ)bxAa(e^mhO*=5eQ>>zRE95n)GWvL5f7Y4ocCSIj4>04Nug~kyz_g=P~-1(y-#O zK7v~Z2r-WzEg5D>*VsgCc9sY14`miE=aTcN_(xz_cd(E8LxA$fsQ&XPemUQ-Pa6Rq z{uY5Feu?`)%5IR-@KA{-w-s)Tz4;J?rTlPj(3k(EC>l+kYnY$wZ-@9LHIL5;7O*th z;}W4b-c{XTK2$5I-WlYp>aQD-)_Ujoyu366HSJ=2oB;aR}mru2C% zUvPCaFSf0a8*6X>@xd{e0f09s(-I^yN~6>gFXc^?@ClzIS{MHL{lm3Ofk*CnO(vfn z{924Gl@BGns#S_D9Q-eh4oj+Y7^A1K2L3=b@~sO*9=D3Esy*#;BwUuU@sxj2A@V&i zVnsjfqBBg@`I9*PFA1~C#x>vj#tRgEn!fBfeIN1GhybdUas~&F)$Fr92nE8N1fxV|O9^rx=M-!BccD~xG1ML6S z>}@c53>4O&r`Tf?dfWo$Cy|0Jq^8ho6G{a=pd45ieSL|F!|>k^?YmXg#+fJMg@J6R zSk^e?fb@3bwMJJDh>PLGF_MrKr2tHD5H2|t7}0Jhdj20ti;&~Ucz?egaKU$h^8AkT zt*K{ez#XTKM|O!H4(_tSK=qQLHyo_lK#lDy@ZMVgw(rX4RQJEPAG)Sot_e8yy9$>} z%_WkG&!oRI7zaj3d1~B@QhR}nPxJF=9v{|(Y*49c5+Bp5+Ieq&WReQzr9$)oIp1Y? zMIt<^;9e~^j8!!gfYxkwjsfd{9vrMa{_MsfI`Fh#ad8Dg&wk)tL?7_08lT4f~yRrY#*%ioiRS2f2T%Ebp2a1VHV>OJrKIm@A5zwFacBy#{a7BM}vl)xaV z*X+55P>rP)e{L6o6E2+UOjN)MUXLH#@ZE4J{hm|RCw8fHQqci3jC~=|TS7LW4fhw{m zVXLH!m5Sqtp~|3t`$W4UT|hT5;Y*N)`WMk;QeIhZH8gh?hrrD9nEHZCsK-{8N5cZ)sSgYUp#$I6icp_Nw^=_(q(uRNeU;w*czxfz5vq$w?S)|nA3Zm<`2_+ z6IJh0290^OO-$0An4`!@7{r8ByWLv8Nw8@dh#i45o!Tql)@p~zDvgCMA#^|aMdw`7 z-WPtaURG|yC-p`Z79+z(Z}2Y~sOg>HGe3BQ>qEp7 zMLc!9`CR1oCj#lMA5P}J&apZ-c3;eSjJZs-J2*H^SJt@m#?tU`a>S-34N~!G=FNB& zgE!*Djn)iJ;kugLZuVw6MB54(aqDz-eq#0WncCCUM)XJ)lgO=avUI{Lq-)cUE5w|~ zkxxu2csXLIB~8keRm&|a8tQLNVO;qh7C z*o&{$UIZmmfkv}vYbmNa z%{+B<)i|O~>QkHgtog@zfrFrlJu5h$;+}BNKx*PFj9M5R>CKoqKHvqi;^cwInuRxBfiidSt`{rrqNUAe{cC+6jGR4=&?bUReV z($s2sV=%l>!#Ix(1aa^P72o%V8qps4q+emYxVzWC_U z%-t6B_t6rM&F*p$&!am|Q$c4$j)VOj@;LXE89W^;A6F=hbY`YASskJ48 znR|w{NKIQ9Vwb?h;nK}UPw@4>KLra8c9!y-Zvy(oN`&L-&JqK~-TFk04v$}B-a5>6 zKPpV^-j92UEQNC|@2y=do~k~XDD%C@W7>SX)&KP?0PFWqV%RTyhC+`7pP3`8CZxK6 zD`X80?t;YTHZmAEUn`B2E{T)TjNqH>5WeguC{pnLetiRM%EE2^vSbaO3Fc*)e@W;$V~C&NCjMY2D3uGOwT-;dX?{;_leeWj0%Z<;JUdo zWjFK~e_6*u@OFNPKQhRQ^9*5gEu?PWT z#%BAW-fUzccRPg0-_W*zO1(10Vzm@ zZo5%(Y;Mdpj!|Y#C~0&l&xiDAwh=oN^ks`XBXeUtD7dK9pO+aur52c+E^xTf*}@PiA`fR?5q3AJbHk_3XLnL^j)unLu zYhKM(>tbbmcG?-qHdEB%;!ICW%6Ul`B*aLE*%D=K9&$~-ea-Q$Tgg>5qJsaEPy3N* zIo0Fk*UXP~ugx4D->UukwWxLnU7y50yZO51?sB^~C5GRso4?7T#YDgmKZZcP?|c+# ze&9(HHAaW^w}8kCff;$dYz=&885Wt1gU@A^0S+z07Kg=gFE&Zn<{ER#e;aU^XkeO! zC%qrN76f{;n?9o*+kFhBpChR;MwBlhd<_&Xdbway%Wb2q=oZ=tdCZlF=Sk>S2Nk!HF87e@?b28u&l^&nnkTp9DB zD4d-xQlFjvF={{#S3pE+q{UxfW5>(w*2r6=lqzCM=ucC|{J1BO zrWsp0@cMjDiRC_Na)Z9EmU^zL$t7;9$`|JTL5|cYJNwaGCuf;zzwl8MeyC>@@o9CG ztuvE$j*U|G=({nptb14dSC&Nl)}_|y+W<1Wm35fl-DQAZ8;Uc$4jLR zr3;8kAO0b}CrCvTVEVVnVxK4aHzY0J0I6PSm$fk&$!fBH7MCS$;Af~&Yi`R!vu3Ds z2ysHJHc-6kvJSL-ZyrLvHqgLm&_XSX3;;*O-PzIBEJ&zZ$Ct)P4G|R(-;X}$E3C|7 z-dqdCgIXYtoW8`Zlh zR?63@P;cJgA>+>zPi};W-_Wkhvy84#yn#?Mc}FDv#IBLg zW!fE8^p-G^k5F@`?darFxc|<^_U_JB1a4^(I^&F7vB|d?d(NC00ae7e$dF+0AQE~U z$%ayC0Iq$bjCoJ)nB4X1k6`A-y=)}{TW>tP?_X5DrpP+*J=72GtVx;U46c`L**8U9 ze8kP~FP2CRH824vwsK02I=FQ~3%?+h-L=>C3;Rp?;v0&Wicij|c9#i_1fdKjaHSWe z>5x38EU$KDf`^mzA8tM?K`tAq2@amvoT7-`igv`7^zIiF~q{zqbqIJzG1^{ap-s8>c9 zCKoIaM|PH)B;AU~i8fU9IVwEnTlwxwrg2Iksr7Z#r9>~(uQXkyJ_+qqj%tb#b9~(? zg#@Q29!Z6+Pq^ww5YvArE!kr6GP@HY?xk2NOfFj^a<9=g|MEnc>P5)lYAIWuWtNkK ze9^D47ciVYfF7Sj3YS~^@6rdr=^k$3Nzl^2An`^%pd<-h?2im+_xw#__+tt8nuf<9 z(?nCCx6{OvETeJ@aSO*(Wy}hnMm)W^j)2HDjSJ(8P?m>x7<0h}VrTBzMz;*?FfYev z?uV-!7nWZ}B|J)E-@O!-tDoxm1DXi^g{rZ`ok~q-aYcA0`<)r12$%X2#6txpm&}WnrL)<0oz^ZAu zEbvJdA)l#?X~`Jq<=V_pvW?JedB{{^l4r&`5S2E{Yv(K@MWk7aF3l@9+0kQB#mjg} zgnRO!M4x5Uu0Cm5Cad|#fbNnz@A>@4N$4h#mEm=`v#^z>-l)oCWHR5z$+eGtPBQ#y z61p^+Sg-C|sGaZrsYi)F%WViwiZ0Re$wlsojvG-8nnpDwUN8qvY)Z_=#LFlYvRhw~ ze*1W{<1`@;SJfZ{+GJh;M(uNaC{M@3Yw}mvuQHpniCXz6yXH$M`4O+( z>Rug6E7iB=F;tJ3VF5bHw08f)?6>C$K!EH{Hd#8HvBVFlotQ@{8J%Cxe$O*+ z*y767zTs?c|A^g0*?oFCgP1*~0)v>h@17VBO&(dl6pzs~)Y!o;;t(z5UR;7Qeg>KR zFP1%QlSn1#rsfbdWP9;lu<-=RqRnWo^hCXr;o7^WIXc;5nlLS0oY#Oc;bw32{bB#U z##VhJt@}(keYDZSLk8%_4;X`l1}?lTF-tZp=+jEmDd>B4j6c9lD1JH6fcl%fJ)yYk z@j~s!$%glPS3>cCeX>i#W%~vL2szv<2I@M!%llfx$W)P3284rg#aOiEfo=(C>*QXF8`{lQX-r^|GrD8Y_0oEP~g+= zoTyTpmoX?_J_`*DB@?0Mg*7nLph=HqQ@A}5p^Dp1T-2`cEM#u39~TrNv~ z^@W3Wxi2ctItROqU{Hum=F%4_1)$uQ(1O)8fsC^kRW+HAYqG~b-|Xzoy1lX*;4gFQ zp2(XtdZf=bbPm=3-0Fi2s{QtR$AZ2}{&JJH=E+3j;wwMD2(W#Rrgkna?Ix-UQ<U_GHtqG>ABdxw?GD2IaQ_v z65PIk;-82pTT?7h#D=Xx_gLj3vsrFlrYr-pQTrlBc%s65!n?TN8%Yq(s#hj0OF=*p zkP?AkZBr*N8oc5EEZE@;_|?qi6#fHd=p=dg=aKBbvtJEhGd z1&R)=0~fjUGP6lpvzc3a2m6uRiX+TDyBZ6fF3Us06GCgg)_Gy!wl6;^xO^cJ{k5UEUx0 zzumtlqHX_)-zKbo2`vsp#*>~tu+LnSHe<(Ijg)xMiK}O}uU!g1n>Bv&!{z<) zh;T|B#Ay`!@yVA$4{67Pvq>v;tO+&MzDwq6LBcMy+!INL-<||3lLltf_LP|KmiTY{ zKJoJXz8f#%|MsHCtjbdHl8;l<}x= z?wErCJBp>Ch6py}hou?h?%j5#gqoPU{-aU^lb)F!tL9ldlW~w3J!2|%?mYwU`Rf-N zK4&7$28jw&a$|K$=EdU5UKA~N93u3wa1N6@e{{Mu!eOMXe&tQ*&Tz80$lcxRP5uYx z)})IQCvWKs!mU#-h7bUWMrlC5Ale=gu8dKNO~pcF?1|#rcf9LehZ|xeN7gy(rbaS^ z>o(IrO73Ui>C!{UXP<_-ki4hFP|n21E*)^>bFo2>Rnw#sm3nkGIe5U9NEs*DA2zGN zVzvNmZH~AWD!+DwbITIhXWWCwcJ4xoQF@{be-Vc%&8t9>3mFbnDksSp_mUBci+u5c zZYw-t zdd_RSasV+0l#2CXZIdG&`g)ZPOi?n&O1!d!YMFfY zm7Cqyg@Wf=bDWsdoSEO=7gq0twl~BZ=krftF%qGtCX$K{<)$_Xacxn>(rqY?Jh=Vi zLX+)hXAdW;A>7NOUPYIe(BdX#}D*tt>?hHECeJIts(#74kMq z1n>#UXMNGKX4P{@(Ji{T^*yA3epCWIakz`6Glx%7WQ46cMODaOkr$FlR>>(6mE)27 z)dxLk%JCc}7Q6JQ4)=?OW$wS^$OeBpNcPu;K1S~{FoPtE6>ocA=3DcqehW>xyJoV3 zi(t(1ZglYG$j>lKyFrd;%_cMXgoclu&Yjj=y+iH!`b52^;h#=Wj)X2O9&shq{6vXX zX4Ryk!-)O~Dy@r|lB+s)f2h>1V{`aL!|y_C(om!nlRo5#vE*Sl@38W(3zJ-PMS5W# zs>DA!;%6^MsQ8V%myaqfOkz(ay*0X#q<-T%6fn8j-#>C`BfJx@xyWmGvn?6xVlsa~xXl1SX7+(I|I;kH2DA#qX;myU2a zeg6AXlU~h}!O5$S9-h_Kw)glue02`6CxUNnU2Kx%8vN$P*2*fB!_E}p4eeUaYJZ5> zE%r3w;R&!5uA94A5|aki0|e7;R?Xg_YAC!Uv##1ZhfFI6C-13T`}ACHo+*RM%_V(} zZ?#`w|0Ad6fmcSKK#moN2{ANRG3ogzX<2T6&K4o>&dZ~pJ4(p}sI76t>KEp3Y!jP=Gk9_ZM zL9KIO12DgzUnpqE=L$o_Q3#EiN20}s>~C%QlUVK7gjCPdhp|t%x*r*mbmOu*ws>zQ z&^V*<_~`X=>=6q73ja~$f|ERsQTG7XoaG8USZ}OMx;@|#JNx)oG zZ|N#jd8F{d6qyf>>u(=zaey*C^d%cia&Od#e3(~a|IGq5NR8po;;_@oNaxhehNK{h z6uP1q?4B)9A7gZX%Xq-2@UyzC6Nbt6x0&91t!47dHS3i=_0dt27gF;hZbE5@RG8Ht zZ(UdPWO2wBrdi^4mMNCmF;tBRsdGGxA~Yl*B_Kn}l9Q+$jKtAEhw)9H=H^XG%ji8N6^LLDODHF;dGv^lvkIiW2uo%n*h$#hU)*Pb}mwBk!uoA+BkNl!-Gzfhd2`sCNB)IJ-Nq zWT1y)dVBLb{%D_9KU;>^si2bhOvgN>g4y3bRcMXM|L~{q%i0Wna~ou2Yw0h@J!E5P z=u2FO=N-_qtCX1Qf@E%)g5L5E5`SKjU=eY3v_|4z)TQEMH-CJOsjm5a3T?3^>P>XX zd8(I*Fp6aD`%{PpmSnM_liXwgqUHqa%LXpi?a~36rYDZ7$^r6H1nfFVhQYY3q|2)3 zaT?@R^mc6ADf>&Fhtr!Uq=l6J3G`7vn<38UH7?eJx@5^_Cxow5f`b^js)50!&8$yx zEsy}@>(qzLN}FiM11>yWEB4B{N?CGu+VZvPy}8T2>sv&nV6{LWN{lM3K7`3G5mOc= zq2D@BlzK5NEnru;^>x__(WJiRgE9xRN3o}qhq^Jwl-NAvs8R{-WA&g zOR=I5WH&FZH21)+vax^f#)ykGN?9q{EKp#WL#(E)h>)GqxiAwLQDPpPjEsml4B60$ z-YxWOE6AWI;Wd562+qR=-AeIWlU4J(Eo8l%sO|=IBSsz|%blfqVKvxw5v*ZZR_XQ2 zi)t=-w>;6Z4>D`Au-lKOMG6SgQ7^1Dhc?zl7l_*r)+@HbWaHGZ8~^sOE1CA1qIVBg zjwi_$OCgmz=!K$Th67n%`dhbv+mICGMd;O(N{^kX8Ce|-|7h6xqQxUAe`vuW9J(y&oO z?xfsf^IMQ6X^s`>Tc6Aa_EaXMAVTu$ zzfQ)V!FJwH>@Bz3?(g?~Ea6_n!B6aGB;@lV9S%FH+PD-YEw``0 zr6Fk~NpARXMI#Rn&Rc9u$%E=8Ai<4}A;xu!f~+yBo@oXsWIOgBoMu=0+)dHBACNHT zx9PYh@+eZw>Fuy=Y>Xv??g*AdnWC~*MKxk8+l6`ZFsd;z|D)LHH7~y$%?>(us4@rG z3PSv^p+)$%HrM&R$I39F+oZW6p&+nn1UX&_ix7GX`%+np$%Y7nL%m z3`EWpdfnN(Y}HD8f5n-c4p^!w=w7EKe{K1hWMEi2gcA!vcQk5xdt0#fTPX9VkPx1U zvT%B$IrzGK+&w%|)Mw)e$?i#b^xz8)w91VQ%KczY^&|N@^!&8lL>2FOAQ;c<5HWf# zeEjIU<_HCrABh8BoR&(QD(pE0A|2msz^U%?f0Re~6Z23v_*XX%+^qsy@ru>K%=g~f z6{IdYPiYYe#%S)jWh3-o*NRyAhps*8C$}MGl(O!wa=c^l)?`48z&zl4)2b|!Ji|be zackM!kKQ*P3)hnK^7YHM@pb(PszIr#*?WXLZ^|MZbPF0K@@57**hXi8-jT8;8yDET z7lo1dj9MOhH!{fVUNiM9&zv4Ns)>}*#lDM=rlyx;Wgc=de5E;l>)9I(JPuRXOa^;? zxnWPQN>steZfx#+sBIvUIFciIzw}f}HDZA1VTxS->2I<~69J!6M5qNhiF)#pvpwA@ zlRG)^9}mSd#b2*rwRHoS=1UhaUtEDYJD!E zr`UH0z3&is)Kg$g^bq@XkU+^OK&2+uvv9@D$_;jm3 zozr7sk)5nG2ZxsgWTMVW*bky^!Us7-0P4sE13TDfecDOK0@g10z!FZ$_dr7m;J@pa zufJfyc6zXQlQqmsV>ChXe-Dlo3KTk(+%dcmkvb|m!mt8*Bh4E4!wR_zg6yuDTO^d^ zL(_x>ke+EG<{bZjABXiAx7U&XtPj?D^c!#_D}cRA0r-{%z_^M%*Cy1g%K#(*-x_PR z{{5|Co!wvM7YRs|H1qyI!4!K?Pq6?~dU0nB*jTNbeeNvwe$+jRC9VdDVcio=S4dgo!dldvDArIYikuQaPc+~acKBpxJZh#+NhMsaFo@IyWsRmq|n;ns0%0^3(vVFz#$ z;8-&cKf}mFDi+6zT`(cMb!+ZL4e=$}=~f4T4}HEX4Krd}*q2-`1ai6nKgFbY#t>V_ zDp8~3Bj6O+M&Zx3H?R2V)H%Gx#h>4ytq@!gGw5M?;|tI$uk%CX76Gs~NcMWGj{(%+ z*e`PGB*EB{bvKA`T5N9wr%2p|Kw9*2;!# zpiB=N!`{kptS|0|pK`IV)xL>n>t2Z5z?pEr2$|8oVt* znCe09Qi#8)wbTAnF}!x+|Gp7^O9W1M4S*j|KUOj<#iv8T#SrEetme>-+Ld%8L|N3b(O{ zQ6hykKp8ny^pm@0YmA8!N-WSUJFal+>|g8FD^*#w>CE655J(_cuL!eVv1NcNa~jAZ zr;9N`2?1GjK32|zSbLIO0%P$Z;({+@(z=5M@UrsDFM?icMSxZ|+E!3AYNz#YL2;)a zZh>wdE`pfWvyS(i0X`5kj?`5zh_wjBD5VSDu(I-544=00`F{l{&(NMzh>nbRv{rq3 z1XTB`1LQ{Nt$VlMhS-ADf<4VwQw%kV&+;iRL{WJB0yHy&`x)($7eO_0IX2j}zU7uJ z4S-vno%Dz4#eZE^E%N@cKl`2kd)%S;{;mAeBX#V^Pu)6>0TEIVo1VbDnqyeFQ89AM zw?QQaH<=teex}*8;AI6!%~e>3$;!!}R${}081NVa?qzcMKc@CS7VA7A0SRS;p7)=H z?*GVq6QIk(9)rOoF8lkKxEzJ z5Gq^`zRO$EeEQW)m!5$+5W>0FUIYgH&u{_Iu11?F-s$AL`tWuk&HB5iw^9QSDzI2i zsgR#(Ksoq77n8N-+u?TD#_5WH^wuno^v_pLb(_w=B41DVvAR&}CW!zk-y32${nH@;_C;I1WBaBLDj(uD-np?D-BRFl8wVDMrDR{xkb zx_%grW1i2`qMa5k`vZ)sI=Z+Q+wc=Q7O$+LyZN~e@4sU5KC%s@E2h}VT|Xv)@eH3U z4N8r=6tC`o7#LgreBQA5)~V9Ott|mf^VN?y==BM&+NGr%vW*PLAwBdj>|g}8q5b`g zKMvxrPl~Rw(mQlW+_;W4<}ZR!GiMX9s23WinDkmWjU;1E2iyw7%{}-~!Z(9dSXQ5P zat}&~YFl#v(&jlQ?f$7ZaL(<28Q29|wd+zmf~TI!68=AH`5*X(&vke<5YvjA`H`;i zu`$0eyyWX%z#n)wWuw*8h?GU*DAm_S<+Uo_1ImfN-dA;t-MhRo9Tnk8K+<%9&M{1? zhPdI#`d-#P7Euo9TY!RM0S!D*_)KiW+?~d&+a~V)x~Bff_Bx zr=Tx5jXp_vte2<#NPapIoc}3KKtoUph#0cpfSlH;XFBFSJ~t*I5B7OJb1Lxn3Qe6G zQgjaBv79nw$(i}EVmXzRNhY&>Tr(5s7x#uaWgO_pP6B462o4dXAyW<_aFhFsRCBM7 zvW_moHE*A|7jVVS{#jPn-qH04@XM!S&*TgUp%=#u=oV(*QStPHcm^%_ZY9^tYf;Te zo^qoa48Y;0T0fS%O=)yAS&$yxoA{|}HA`H9Ym8DdRx)xVj5EWx?7nHK#_6;DPV&my3@XSwde_#G@2?ON0~2@xv%;nOEBQi>_DMQYwc(_tH#!3B8!l5kh!C>DJ1O@-yK`bkNeu-a z>Wva1s59T!BXFD<4!=^pTwI1m-{+e;=hSYxw?d$lZ=PIWxOsxAxW`mJ&n-f5YZAFG zew+R6t;wV(Z=XOyW?XVFuX*B;d&=}FgEowY+I`A>S^KqaUJi8TZY;6X-MJ|O97?a= zrfl%H#^d-3o4?qqTdDCaUK436#%lDmmJ1sVl_O)<9&(<}tB~xHrv> z$0x>;aN+GLtaJCat6R7B?wNbsNt5;Zf@^;F-eYVp^WrBRv%8!! zaj-(}qoZg;yc=|>_@Pb5FJFy%=<5}K`_}@8sA&9FklD(~?NWGkmt!|*Y|i*=c0eaT zZO~Y!!|a)-IghdI5CL(YO$U?>tp+oAxZ<-VlUr65xO3z`GB-)i?|i&RAmE6=nZG*d z(Q@xwTxSQ2DN1`RNBK5TJb(2g-T@KPd<7%*q0*{tMmFQF=);vJU8Hxw0`VHXje305nWGsE=z~C%!QeRyNZ3k+<0jemZH}xao4R4E=f;=J+f<;d5ijO6t_7HU zayp;1M0irF~f$q5C%5fLTG3naHC>+?#lw4~!qy;#JxUIoGa#P=T)=|W? zp~43~sLNLOzdfH$@8%Lg_GHeda(N4+U9s0o4Q`xg7no_3NKpJ;yRvfd?3>-|yq@LJ z$j#)J6b_58ncW=bh>K!~r6qeg8T<2YFsIQ~T*^o$i%VZkf*w{iNSo6-~3gjb0_TiCD!D{Nua!Zoy3(K+?C2aX>$j( zsjO05PgsD^$zV8^9ye@7pZfysi|uAnb>`I^b56YYQMw{XG~NvhwZSwkjJe|(oLSB4 z(<-v%yaj`1eK$)&q!M-jh&+6yi*l&jvx4=&mk!s$ju-Fu|K>2ISv`gT zS-7BS_+bsx1S2iw?D3~l;@aNW=k;Ys4FlqNChI)evt}m6K0qKPs~m*`iY}0en{pjG)3;?Z*Tc?u|K)_Xk~M zwZ}cocGr5#>ZBw|Z3z z&yeGIWYY(~ux7jTMVn`#KPc)XO^M>zSmgEN!UfUkSJKMtEZs3mq+_%P_j?`rgsh2e zGQTa-`XrcjBSdJqwxQ>7cro~n&WPr{357{nQ} zA9$v%K0@3ub*~2!^yT3~m(^m~(|7iCGB;mP6b&MCUwPOKYQ7|-Dstia#GNj9Z8WUc zL3PIX@KPQ?!X0#GbUD>}fQ|aPFoJyV!G1PzzDElM2`CM>xbwTD;6}2vlB#FI$FIgU zX5~3Iv$%N+t-lA_r`NAft35HU;tYND5mBM%Ci-po*5S>1mS|$^9MRd(D_%214S9L` z`OZ6-^t_BQPNH@Kd7g{wdbHYMa;iDD%8nYU>&S<&tVJbPO0Z}VL2Q;B{Qf>83tqSs z!F7T#T>BdLU*#N~w;rT#dcPB35eW(j2Ow+flRlhLuF=+ct+UtxtvpFlgJC0sjG)-7 zziz?o*GMQM#ToUSP0reosc+8s4R;D@81c_WmMHqD40q0IlpLx;5z8dOLD@`+F6R94*TlpN&#E1EO7|wmHRi3qg_+e;a>SFVGS^(a zhU92vC|VdS&0IPeyMpb{-aY0^uYyvFu_&p;S&qYvILF0fPNuI_-sph>n&p#{I`ov} zxERCgy&hLsXR~$j7xCCcYtW6*>Cs`ii)9d0CaSY7G0PC0-+5qn`|3{-ZDbv#SVHrB z9lb(KO~>&mfTrV_qo=#Zu(fy>Ve_HG+=U)r>Hgve)i-p=>pFhn1vrsBAiLNSCrE3W z@?>;9XoKv8dEXo2={T~U23qgG0*GyK5sM!d$UbF=l*cjm{OXdc8NN@evUU9H2_y5X zf$4~)(W-4ZWfk5SrO%N67`&omkEG^^OZg^dWvd38-qkpD&#aQG=claT(j?IN1)L@2 zrvu+n{8Qf(1gqx?ZxMdsh)~W{sGb{R0iHLGUIHfJUQRt%HUZ-gL+J3H$hG zg#QTIS;@#&?7z?*Zd#*r?t=WPWaw2TwLQtlLiaU7$D()o7IF$>$~$>P{>sDoM0s<7 znos1fCX-=5zw^QYcb=}D6M=SGE7PoyMFBb8v)?!B5XAc;$u4tC#C|?OS8#D3Z!3hE z1gJ|PuP>OZbd0D7SGnW|q@GbY?CFedC%F0Moy{HkDvB;eCC$Rm{5Q$zXcsn{J#}2O zJabY7jQgab3C`A=wI^+I zbSV;04BCkheewOsb#1cheybyMx6$MF56jU^SBHq)+(cb$zcuC6E_d?MNw}v@mKlpq zBpQpkJl%YXGjeaw&UyxFhz3gm2phZJ)GIpQ!nKl5O1vI_wd=vZzoH*9!x%+^RNQ*6 z^W>$q05<|BrBiB5I{v}EZd&3S@td6C3>`rZqAqVvuER*Xui%*Wcl-xZ53_zT{kn=I z5~qsv` zy2X|M;KFS8+dF48bgln7f7=$)Ec=FRwVv=!gJtDMm4D?I+|^61Q&Hjc>iQb;h+sTw zPExx294`Zw7yoP*oygblrvse}lSD>Jxvs7nl8}f?NMhn^@AQ!Lk)*uoi^TM~FSBEU z?;`Qj2knWHgN@+wS3>pMMS{OQ&kQ5M5Qjw0cxu54f z=YHSwkGfng);RkYdtcY}{e1kM5l~f=Z7ZBpSGpa+WY|gZS|wvlu<*^9glgmoy`e<; z-y=mW92FEk#`&k(*8)OPnc1ZYi%*MH~;5Go4mND7y!*Nw4J1; z#tLe9PyVDN$V^bWGkwyJJmp9kTH?)+?UgwK38;4HAV>?=n7P{GBM=gACv!YX$^WxrwhjgAv>k|ym2r@}CG z^j^43ojh7?$4n=V1N8>O0s8-PxS6NAL(tWfpOfL4^$uNpE8f6y1Kb$s>`Oz{X zrupheGV@q9{(a%!?<~AMUvDe7&8u72f~7}b2^$@qhxVmv{{&*ylI$E44^VbK%t5P- zF!e^@1a#F?ug+Hyce%=r{mu`^?S9eO{Z8&;XJc&D2TGA(2|-8;Ot`&_XS&X}oW@#% zPKt+zuthSp;+gdopN1F()atb+{Bcl$98-EldBsrXGaM(QK);9Th{&Rbw}jv~*=5ZcHI!b{^X=&UKh3kYIfIHtIg zjtaz(w^MRMx=q2}I}vyb?M~8a;8B)YM)@us>JT|C=D*xl>W*E6bp81T62ykBcAYKk zVe|e@5?i=}zL3(K6~>y>0slg<%PscwepO^-?DEWQ@%_%lHLwiB*TP17Gz`zz$2sz zk%)p#LKZ{ZK_$irE8u$lj`KuS7L5Aw*EgI~Mx)4w*Mp&fnsmL|gtkUVrl41Do>vUt z8hWSADxhBUc}?zYWAtYHaW{i(PYTC`o)x?lp8g7M<9TGq*kGIakhb7BpkQddpKsKj z2R~G1$L)}*U z?r@ZRQy%UIl)^cjY&3Kw;G4~*J2FBLi)^NJx0T2;V>%Q;$asH#h}|m#z;F3`{vMho zL#Z4EexMy^ZH07r$+VaM)&E1rcJ5>FifI>)$xg)-K28Hkwy62TVNZTuBarqAHdUdn zQnTXwTbx^P+?WgrD4}C(!9gK~IU+#P$pIyjo=DCB6nCi6sfE1yUF)(j{&{r3>V3Pv z^C+Ht4O zD#c95OmEIx?BG$k@j#N@bblKEe@fRqPBAKW3JU&8mc6oLRuLE3*Uxhacr-MK%a*kf zT#V(U$S6nJ?@bTyLXtug92r*gWY(OX=|u7g>1ijIg#4wMPHlKQIoYnJmT}$5(>QZM z5CuXdpO}O^3;Sfn28Qp~X>ZgdFyA9rW>aHd@4bE2!h0e=jpf)BA=;>rtDsv1Hf-wR zePaU}dCWFrUweCsY*iOYg5`qw@4w|md>~Wo3ZUIA^w-slS`PT4WoMN>M?z;M?Yw%2 zde(AsB%#RxPF~dQ+~)9*vsX>aVS5;WSSK0dJ9RU^YOqLt!?;{RAj!4kg`6#+>#9!b ztthK0YEM@)Fm-3dR%6XLtO^5OD?Rsoak`>%0p?<-nmeI@ zJG3g*Ja#ul{36z>v*n4HXG-z{S2UwicEJQQ(DEpX&GeZRXXx}+Giv}6*-v<&@jKM2 zuK*O$9ExD|e6)APdX#X*+S`A3x4W@a2h%NKO{L8%-6<@Ja0c9L!!_NELXS@NU50y# zF22yzvx8AE{Uag}E)u@tArW;j*y{IoIr?ichQW9@xgF_9(CA0ZAa_aP)kPCR8wD*i z8_m}zs24dhQKX$w_ zthB=d#Yp|w0d9=lJ(bvsyO(PXx5xg5-LFeLwwmihZHq%CN)BQZ_j6pqx`yLDV%rbc zbHEvs&G-Ffuwuzr_vg`Hj1HXsdGlZx)mt)7MNJ49ZYWuLB{}uMuhVx$YkOD>TshOk z+(OL;)1U_ydN+eDfz9ji!S0)<2qCNoc4(Kp(bUynq}xzgs7|Zo#vbQ@P=TJ2dv?!E z(1i8#gZacTH8KSpQg9!>)R*ddX&0{1(*88^*)OtK$rqCd%|1z0d99>t_O)q6totv_X6x{gm2Pv! z&)tW0ciM>F9%7ak(B|i5`e-{UyuqHKKo3{_z7a1Z;b1kk>Dlge;H*v9JnKR8#9y2f zM!K*db~hrEvODprJ5SO=ibvj)XG;KZ_l{G)XChq33)PD}_xS5yJu-7px;mzO8T%`# zbH&vXmjsu58^2!%0R2GG-MRs+cqX^OJP&nJbAmu36CJ!1bX&d+XT$k~j5p;rZ;o1y zDvxY0hZ82AOg=wUa6E`Sl#XN$q5sPW?Sd5-fWX|T{1|4TF5)XP{jB2`O7;8DvJvOPb;=<-xyZ$+-8`5ei~0{le6XhSchEgbzBde{~ES(}Yc!P|e|G423r0-v|4qJi&<0KXU}Z{J#iDClqe9 z3dH!|d32tsvRL2$nqX#!)<==#77ux%EQx+8$|e?`Fva+cuv2i&g%vz(!EnPUUzG64 zfS=M9CsFVFbgy(TE@~FiJ4z3{J9o=6>^d<)s36PvguZ7dE*7dPdhEYE0kiP5n0t zPCW^P`6#Ft+Qrh-D3f$3()wununr)K=?szRV1NC%fy{{Jc3_&*q!dwFUCHs6=Ie9E zly`#LrlF0NNzI;TesdsuS}&C_6V&ah2!sy<=J3-Ok9sY8s2y!cI*2;r)Me@1gGE17 z_qyD6e{4PaY=cv3CCKu~UzY2!aI+ss$r0FKw3CFb=?ZkkQLRuu9kY8Qd_PUfHKEs% z&Cjhi-~$RRX&0s{p~I$ph?G!mN|?1VKuPMPM3}no$X^Tw!8l$tH%-vd;k-4528MT7 zhY(*fu$2|G^WP|oSS!Wsu8{o>V~eKNVl159!~^dKyNd+EQv<{nrO2uM0D07K7OI$> zhr^BI+3-(R(x<=4+;QF2$)(@o-giZ&eE!sXPce#22S?4(mf!(~ThW!D+L!-tcMGM~ zR7pt)O^V|xarKY&)_ID(?V6C(h4&-0AWkNV1VSP+OYI32R5Yc>WbGY5U|^Q;s;-mk zpxY?5cyC-=Q*apy=u?4bGVzs{>7BNQM>L`?u5_QXcg=^7SlgENMdUXbcR-bR zFq6x+#MFsDDW)wcG<%buj3oZFMewKQ#Bt7!)g)Sdhj0LYsClizozVO?yN|b{f5Unw zv|g`rYIVvA)ykUgmP-Q36JI@MKL$?fHH$u?oc6pH+)J}B<(IR|Q{N%M)NSrj?qJs2 z7ZsHo9&JwNjFYZTx?iEJ$H7k?mC1-I$0oHtD3ouJ^tN=!J^=Mvbm%<|l4AMqEgHRy zZs}X{@EdiaBU*#`jh$_RGdke|i9(5e8TK3mR^fYGv^Iwism-gDc<6{0;T9+B$*<-; z19-?E+9Hw9QE1vMP&XY@X*lB=-nr*-kK|nPxWa_yb$<{HBapv4u|Nb;a`%)0M%092 z1=P{wy#$?Ww(q%aq$(q#YfsLD%dPG$;=(ts5Rho%K4Hc1fv0^AqfZlWyRw`My`_q2 ziF)JX=z=|JeD%Ut(X?^7M4?D7Y-|``6EUVAU$e75#Q?u;SkKSWxBs+_C-9?CD;DN( z>McuLw{^vR$IBuU$jPr^)q~WLmn)ENdhei4m6N2SF!X z?~hmyu4md?wM-j4+`5-w%I-yiU4*}LvX0LQ`*upbaJ7j;9VC--<;2MXp<9_kS}kFAl^)}YGQ-(QS-6xUZ~NVhi@I=*737}V4l$X zMV1CBuwm?9TbAh9L+^e!%rUU58FFVAViS3>2u}8opF54)C5fznNuYR5Ts#tgyz7pOC0;f)>ixehiY~+uV2+|)JN6r%s$jYLS~8dVVl}aXLmxisCjzCl*D_G47>j(zz9q-{oUV1vhn88c)d}Y z`#ou^Zh6~(bKX=%c(yUDMl{t4e^-}l@u_SJurA73^>1g-7)~U_MaUF!SmmL%bOS7b zds91+u)ACuW5{h-%wQu` zXM?l!I~yf@;EBa9WJAHPH=P5xsIDFkEw@g z4l0HOf1T3>5qOgiz+uO#;kg?nNsb6D0vmtSI}}P9Pb1U~))MLX$eGhzW~fcadY+QM z%{4LcshjXS2bI|G0C({nUiopj!pt_iXp@M{PkWZtHmOlV-b&l>1rzAQu;=3-Yzh}O zuNBu5o{!(o4cg)U=c*M!#8NJu>d}aMaI#jls#aa>-{`99yI zf=lBwN{$3fN3hArsj%_qvSq-i@o`( z@oMDEUv=!x(nktaG0T1JQIpw=u94RIal zdLXp3hn)OX7CI^9T|H55N5N@5uLGz_FTQYW`55p1==8`T>#`b2Bs_Wvnx29%k0z*~ zs`YokzSRO$vU{1&q`L=(IBL}Gp4E?AS!314m_inGr=@UBd7Hb#c_G{6G+@jolMsxk zdi0AWHEn}-+Ue+XpL?;dwoz zQ21sH!ODmgkbtjaYm|_~mS_qa%y&gDf-T!@gr&~lF~0@UEA^g`aMCcF5ch~S{N=39 zn&@?$!MMGGu8H4MGoB<#VP}E`~tXcyC=YS~;+^CYXipwGOp($^U6{`nU z#1O3ba+CgmqOeRJ9vsjUoKySLE9b+eNd`?V0E7)ou7@7YtIm#a3h6zGdCKGdij6=t zq+$x0#H7urY4>oAaZ1tdrRrT3I!=d5a>7y_J-woH`hQ=VO$7`$HYsi=n_;LXlF&2| z{`?&biYwrtCi=J;r$XeO^&>75VO#ZU=^;6Ah#s1@Iv}OUcj$STBZ+v2s_Ki%r~z$h zC3MVl);J@L&Ctc+&JRzMf2!(rO7d7XwdGV+>DR}CK!*xsK@1QUYR0CWP^CFe0FL6` zfbNj*SY5z=&r~eq=a)Bm57?o!@ve*?3XctiC;d5oi0{=7uwi`f+|QxF*cagj&;4k7 zcf6jTq@k*b6j#KJk`k7sU+B)jq+Bw}@NgiPf;#c4H6CQDTe{y>PpM}yZlva7lpZ=b zwvp(|=5R=>43Ma=G0~*Kv;Ox8At(wpphpE|x5GbVabP(F2CTqxI=Lh)N+PGAl&3se zPxbSY$JV0-5(ufB$;g9ByDtplEYsq$<+;S~(Q&?)w%~V@`XGFER1Z&C_o?;}`8AWb zfv>zi&0-6>rK21WO{&Y-lat)JElw>5^^R4{kwMnGPoD@@ius7~XHzcC@m+)lPm!k_ z&FhpIhb9n;FZvodfl#FDXm@J-Ol9N-{ox`AXucHdOQhib{&wS*HcAcXR7)xEO+9ZH z3IlxjulsB&k-iD#g--`@K_l_@v%9XoAIM;*jj+C*BI9M(okc*BDzNfZ9H`C`rbd#O z`}Rj~0z>3>K+SY7xyg1u)=gS|uIW!%PL9L2=I>v^&Z4C9|BPTts>BxaT32!eVn;+o z&Ld`wtcz)G3ws!!5Fyauz9{t&0~5@; zc+%*+f>C;sdQqK8N8M*`11D5+WiYz6SR%p#-il6-~s)Pluy$5Lw5n@Tk?2D{v|H)gErlK30M$oa4-nr{-7g$ zlULv~B)M*!!OLYd&RCe{K}HUR8Jp#{x$qkoroS2CG0)llXW;M+cK;-=&~Uz_!R>gn zQL;LlcULY26$ecYWdwRRpAb3dSb#bB{~694KyavDEclF3N1zuCYgDPk0_NsObmsl= zSU9VgH#$xn3Mi;6P$S`~jat0o3!YJJr{AB|c3k7dz;DOY`coNFKauJHo&YmQM2ocC zPl$$$u2ty28txP!^wcKL^XmS%WHG@>Zv84P+003kRm45}z2f-q?_g?C0JG^I(ComY z{~2lBCa1>z@`~U7j0>T{FW5B{U{srkg%JQ6>e^nYw&MRa@Xg~2YBjS2{B2fjVOd9t zY-pihKunD+h*c&n#0nd-nZBC+25!i8v#7%)8Ed5K_!-mna=zs01jbX z+bSnO#NN)+fi2UcXx+D{G!roMs-p!u)#C%g2^$%=0#_^mY<4IC^YlOMdSlxFR^VT= z>O4H)qYr>l=2GXWva&MRnk#EazVwsZacg!!7ZuS`h{ZOGikN@6hYQiFLO>ushN>zd z1Dx2LLV$?eM~_xz2k-(?7s20w@BH;GptyRt4s} z$G+@H!pW0z>St7pz3FSFGOHg`wxp)IxUgBF>X6 z?F@T5o?s&N@M?p7pV@BCyeJYf{AB(nqohYSDP#roajCa>U^sdX&L3Rkwn*j1bRCoN z5V-Rd4|T+5;(a2cXc7PV68-lUoJ(KsEZJID1pNr=O`b%lY~wp-&&{mxqb#y z7HA-Jy3=mvVq_hAu#cVq7}UtSw}o3FB9Ku`8?-QXsfpniho3CC-Ss|%&xt!4;v&f< zcECujO$il@sdN671&l;tkDOTGJ30)1hioSOs^@UMts4vz1E$kMF*yFH=(j$QTjmpW z`6{9!o}jaG)g~8q9ZZ&Nl_lDa3G2qw>3E31nV<|gKS~JuK-P=iOVl)WBU!`|6i>BN z{pS%fu`Aiprw4VhN;OAxSh z#Pp1dXCjAvA~pQim${|2WdNmuc7N){HiMEXW?`friG$D$;(v|Gn@}MjeeI`sntN84 zyGeQn7-3NZy4AHfaFUGn?H5kE*r(Z{KpSvd9wrnewsh}Iu>X;FVCc|M(C3oBFyH7> z?uw_b^tTlVJDSEmZi38{c!y7f$&cYkpOpHsn^}2j=`lIUUqqgN=1yvPn+BRZ+o^k> zM%Z57dL=w9#3kC+ze_Mv8)tQUI4lw5yCVpD(fO$a=4|rbb%%qtDJmvHTsR1%s3qnl zFpLaK+|t6!8*3SM|us$VUyv@brUNiENdtEJS4QI#@)kU*U|rVlry)R5ve#^(XN*~3Lkrq2_FDV) z5As$RvGX&tiWP(I8Lm$}1CQ(Btsh2q3dJkvqv5Gt^eq=(sR+}#Q(xsJK4Q%0HDp3y zv_H$lq_cq(NB4Y_!fH!ZM_=j>)x#oGTW%jKqb;6KtL_LoasMNASN7#eTk6;u#SY{9 zXvhY+C=X~We%lo7zL?{uaR+*`9h@&32~NeRm!i`G4hLSx5l+M%hS1|wTkk);WV$bC zaX_A3Zq33A!}IIe(mzylO>#KhtYtJ_^;Lmf$kR*okwAy034YPI8CbxjyZZH5_{gsX zv*u8`B7;Xv-CdmX;|?Hf`bC-P?*IE%W)))0Jq8SP1P?FB&MdSZX&h}YEXPM3)$$k& z=pr87=Z+WB0-A(>XL-O$ka2j8Ip95Re>9!n1eK*w+2-89=_2R!8nfi9_lM@Lc8xLd z_CNaszdm7*hvQs?d;BP5?e|zY+tsG-*SG=1P@6E7RiC!FEBlMl?ms)v>dR=z3SFP? zYd7uPO*0ztDYUKmR{nzyws=~Ni2bGl%ioMzmQ-c4I*b9OtV<2HXdi=gMsv@CgmoRU z$gXsd5?FZnm27N;2U@R|Kqp6oM%?tU0ymkHKT7E_l*Pa$Vjf4>VL1M3g9Ovg;if)H zReevMs6QDL*e*x>7%i#TY3n}|EDEGm-G7~!Q_wS8I7Jm;h72c;uE6JSR&17Ymr#Y1 zFj9b)vX%dZ)&<6~=tOubaq2-8LX=v4?m+s90ugQrd47RNB;{sdUOw>?5LqZ&#QCR8 z@ZSrxkmv~gsD5Gpi1|nsmt>(I_dNk6p9rTB?sG)eMD_TxJ^S|`z)aSC8}t5eoKKOG z`o%luH{XU5Sl~Hcl50;2K_^#esq~s=O>jjrDK%y)#Zrk#q69DJFWY?DfW@T%n^z#; zAMGaW=Q+a#(od>#((E5uy_$nz04J|uui)l|D~p(4)3*b))j{(mCTlq^7GaEzeK(JxcmvQtBQ3 zMOF)4XI9-&Cv2qDP^Q_YhlwGIosIPv$~pt!p_3&0R?D-*8=rEDJ8ZdIvo&WW)u3gReN=uh#Q%>L?%@#(i7rEFArGzie zlD@qY(nyBLzhp(C(gxKbCC1H)UVB%^GjF0qT%%#`M*LfCo;;Tbh?FdXVDu$JbS$i3 z?a@`_pD(YqC|^y(6Jdd?M%q!a|Fiio5T)iBCWqpw4N~Y65lS@kL+Paacbx8*Z-q5) z(gLkhrd~eTzhWyOPlau6$GA&VK1+~DaUYsKZF6CsG^G*baGA{CQ%V<#uY`>pJY_Me z>D0C6@o+q)o+5jix)olZ?BVb{O?7)5na)~eAb?OZ=(IxjGG|)8>;U0YZs1hO8nFssa@08yNuGK2IJ`?e_P*CfY;4&y) z4G`ti8NNpd&v#w~q?#vAkSz7fu`xGz)}OuaTLlQ*m=Z=qM%QL05nOwy3a>QSwRqMC zm>Y}|VFtPTvp=$hoQ3+`$@iT4t?;*%KA!K^_xoNg0%HacLSNyZEA~gif6DEXrz^KH z$#dnPvLk_};XlU}26z-DAs>hDP;r!@Ji^Surb2hB*=sHHtLeYOQ6PbN2Mo8M-%dIg zW;{*$oFmepPjDw+PcAC8Z@(dEGtsRRi$1a=q+nNg>Bki=c4@ruQdv_j1qP4A!l|sx ztHsS{hf%Fm(m>B77YgZy*xFp8v7ZLuG9yNXEgZs50Y*-L$l~oO6AxoLi_}x7f z<+CughNd8IiPl^~gwVMbVQHO-@=SFAsyt{O`)s$rE1W+nIL z+{Ps*ti7rd$vM+&4wzMB^sVqLy?@wF#Lkg8h%XkvJ@;<2R*+!d8bu)A_~)xO(t}6Q zp4&SxIH@6oHdq*hrT>4IvDN(-(@N69`&f=e8W!c2HmkzqagI9)W1Dy22iV4=g=1^c zW@{c6?2+h9;hA>9L?xU%VzX?^_omTdM5T1IAuFE%dd4!rZA~k^tP|hY9cplD@%Tvc z1jq87avbr)GrT*&+`&r-Xh=k-wftCUo%u=KYAoI33g;Bvb$SWB3*Ai7mC!I^+z1HU-(wD6*O{j*?(uI6NDQsV5+T2Cp5FVl} zqXOv<7-sKWM+kq(#Z$dhMnLlDlbcs9qC2IIjqDB*Z5;fs!HGt+l6VL6B62NtIU;pK zH1@}*>0esw9>3|~lZuzf$D$d*6Tq3rgNP(1G#r_D^Eo6%#Bek;}f0QC3PHH z$0It!dItQT5niU|Vrd^A(i4{lOMx&yhE!d=rrzCbIGEW zGoF^^sq{^0TB!mT^Pfuh<1WGflV}I?!k%@NwtYUsc*OEJDXtqQwt8+((WvOQn@4-i5HyCfs)zzGo;x7MW!4h0?%b|DF@?P{Q_ZDkWp= zMA%uK7n_ag@KZ&7Z@WOO+Pi~Dnvh`j{!Yh)`w9Zqzvp>tj9-lR?X&FW59ss~PY%O) z(Qxi==97ECd7y?8j`;@c2!BQv32e$@*|fTpaRcaD09$|oMVA#`1FAE|_D;di>*4iR z#Y|GrrIbm8^6_8+r<0QcVWG3Dro^g4`Pxe-N8|rVHvb=h06`S0^VAD;_{*+-^VAcI zkIL<)%mu=$6B60d(fa2jGZO#oi3|2OsfRdX;{;2e4En_5APAZr4|5FJV(24!uBaIY zsU3?FoR5q4tvaCCr;8+TJn-GL(!J%KeQ`G)f-u}!Y&~H>9tHCwzwD5Oa>*~M+(^b9 z-`t75W5jJoxc~f4kKG{nB zbtl?OQfg4IZBPM!rRgH&-s}rhJs_2xE&MI`+6)xj?f>{pwP+RY54``s-%2|T)0$o)^=J6*hl^3J{-pDYeh#;qISHp_Jo#E^bizd018Tb>R?_Tz|ayfVg^NiK;oA;{4#y;PfO~TH7<_<O|0>SbonCLMSdgJ&6*sJ`N7t$`KXv_@!v#f6%}q?`@Q8xvW$5 z=?4vXRA5-&8Z~f2Wm!QTy&7DJDQ?TU?C{;q()_g4^)kGkjpZ93U^IH{_3gyAA*7A7 z2vq>^d~jrtnF{1Jqq^gNgqoRzF9m>0rd|_u5L7H#Pbn|-?(GV|UV`*825 zJ7QU9Fk6=dHDBLax|!B~e|;V(g2}yu&NkIAPS+Zo8F0endClbIS$>V}XVLZ(W_(vk zeErC7`~gGePK^rvQ~`XIQufmS9{#t&JSM7h2(>vi^yyj+6)P+P1xC)3_1YgtAnr&W?t-%>nEFn}el`VMK(?*aDYp0Q?G`5G7@F5#I5C@&}ay|?%z zb^P#PrB4C}umEms zO}wgoSaMst-UD{e+hVHS@C!k2P=d{E+6XO5r@_xa9e`y25cr29Q6C?*cmvVWbQYJ1 zQXR;Wb0OmbhK>tLPsUfhzh&kK`E5%DI^1ZiVF@dzlC^DIKAHF)4P&3X!)n+%4~0Q- z+2lUz<$iEx|MP)fNGWP2h>ZGMtsk}jqtk(S%4z>%wx0EYjAUqnQ*yil0+XZ*#NKl@ z32iXlp5Bu57*#A|aRt4;BLYFt-X6RG>s)5|05G#T&>x!#1BiekMVUD+kIHs#&Uoh- zsE?R=tiJKlXS3oM4Tk8Bq~)=tWR707YF+jHlSAbMNY~6!E>`=YOe8)9*NfwaX%#3v zPt}V#N@sZxRWps?h*1W9lIxSpff3*)%DCkfOiyxq6j%!~iG$b{qsxv5G6pyqWjEV)?tzl3L|8n0JwL|hT6pq!k0d>h#BU8*ci1Y%>)BwQlEeW>!%PROK|@~segJgxrb z!F#Ta!E7X{$}y05_8LhS2CINM9z%rCgT- z{hBw}`BGU&?oQ6Q&ekXbU;qoa4hy%-x6HP2rUF3|E3G5eAilVhM;L}rcpVsWJ9@M| z0dB>qdb@*Jvr_Zal*wWZWlqcXHuBb{icCI}L5cWVlMhk^ptOrk$gTmz;)lrtu+rcs zam3WeQ^g2;b_r^i=5twIw9oJRMo+`O=)Pm`Q1bRm#ht*W%y{ENl&pmXn7U;HeHxJr z&ZL$X2;e?aGM#CAh-3;IiO;S*R+N4@Hund(M^-<50^~Ze-tlM_q0_eXv@tce1vf|4o} zXexrdtZ{Ocqz^IPU*_uz2N@4;xUIC8wsUioPlH3Yj~dhwij+~uphc} ztK{RIVUzZ@0r~^U)aZCie1l`W_MZU1G zi`@^0k1X1KK-1kJJjYxUBL;O!+&=V`&Pt$LY~i5bHoS~!)*a+kO2QyVcTr8nI#np% z^f~a=7Ijqq&E=;24?lt^^J*IWw&y}%210y)E zO@95_s8XX;866sHNjz77jY_+FR4Jpi_1vv@2=rd;L6u7gv_7Z-#vWGk;%2EqZ zEN=j`MmE@UEVMlz1JY!;8aC$xJM~XD%vj(VTgB~-+7qDZ>%|Gk^ zz=y0&UE=-}dz=9R>zc0bSJ z@{sqkuRZZQO96-;S%gylr$t)8D@yIzot`fZ zC$WmfE6-A75+$U%1ZIW4%OdF9#?bRT5c7%%&YttmKLNf=5&G}(%Gy=c_ns?|cMe#E zcU_$F^oL`PI_lFd5?|d4F_qjU<+^Kb{e%X~;SuZ?13Wnw-Cpn7mR>63I5T)T%!+Me z+&O-}Zwj<;b8&}j{X@y(OHRiz`|w_3Dm2)~z@1saKjP3YolUp{YcHtj>SZl_%IO7~ zRTW-7wp(Fa{@)ZJ$xO&nZXl?Xj9zUARr=X>8w1I>l*+oJ>D#Mtgc>g{i z7bL8<7h764<#nN*0I1Kd_95!~=R|Plrr$3!%r<`9wqWw>^^`p~226pO@bG~SfbJJdq650R= zlgRjfMyR5tR*}|nzYiKRQ;zO1`;jr6DS!1Zn68-s8af0v?Ry2}rzm9CO&^J6`Yo9r zCwnB@j4d@==jx*-$c(+#HlofTNmVum1NP1!>(^o-qs$qgZTRZqjNbQ_Y%>u{7jtTn z(C`vKp&#Rmj#`LY?ggLHuZf5`&rO%gWOC)$D=j=zDa0(5hi-SDCRG^1*V@>!@JRut z*x`u(@c0n;N7wc|Qipznz2XEV<=|;Qn?{&HMQw~BkEP(eoMxuT8WzZ7V)u37eg$?x zb&1t-j?hvNep0#%Dy|ceY@pY!;{upZ$rYX2GMGGuWRQblD2xjc4;6T|RB6CI7LV@m z2hZAG4?_6cIGb1{ZCB5nu776q_ml0(&xXwGa7!!r2F&=0M_VPfWt$*stM0~^ypunEWU?_QwS6x_w3ZMLWE&H>sx>FS0YBj(U1{MN?|F&L-n1@|5RGJ?D9#DVzYd58~bA)_dfS?e631 zN6zfcj-Ja|KzqqGTJkI9`i6hC(zWeRP7Y0q$^XKorYfEK{ z#n2owKq*i~YQEiZaH9I7 z&B^#UJOp8P*rRKwAk)>Q%HpYPimQbAGG8LWQ2$9)x57_lArG`Ge~Frt zCb-KPXZ5bjNm~ztmszPmMnwcj%ul$_&!^ z==>Cp*0^0z8n`5OTk~dq7D()=yGq0m9+Lo>KzVYf!ggy>5?I-^y1~3%!iWhfBeJGV zwY2;EG)zj8Ka8Yr;R@y>LLy$+R-us5nKWqWzl5$yNoH% z41kCYJGNMc#D`UAg=g*Ec|=c=@>tVWTLuL+mB4u5Q%;l!)Pehj-%%tER?%n0P7_ZM zD>u=*9LniijXn_;9_xucfkPz>C>9ta88J>lI2n^s905PY!xq8Kj%c`f@{BM#z^BUS zy{Y}ALi+ZBIuX<3u0Wp+kP`S5?L-_+@&OjoCFu~xh(vYz{RqG{-?-%32ARX@E=fB! z+KA*Ff@tOLAApI;>i2j?sFDJ>o5br)lXJ_;FyB5*vp78XdADw7g)?w9nV_$73BY%$ zAEGLbL`!DZpHUaFkTcvSj2|2&%qeSzEhHrqRCcBc=G`c}+k^;G8yY@-?ZntS(Hj0hn!S4M^s&XV$kv`Z6s+l}SOa=|^-6Gt-6@Mm;7KwGGqn&DG{D zmcQm3m{q{gP5R&Dpd;f;*Kulzb-94{`R)5IC`*^@ObkQd?1dtg5V4?+Y>KW90#d@# z=I#!;TJKMgANVvZtIgw8c~jEV_*+(&_Mo5RBx%<0P2pyzois#?fS>+;{>8*ppsWb z{v9}=nB_kJ!f`UC{b=@QAjA^?n{ms5`-~6%{5g?43v3a<6LYcEPaKK=k68vR5&Y4l z9P!OrlgX9!=e)d)gk9aCXm*Zi34!0ikHIwo7E};l)PH;7^Qj=>;(o=1svvg`=84S2 z;X5&k>8));5c6t2O~E$59dLO@n4omR*`^*!`}Q7mAbd*4{VnaUg;r+joi|V&&@7VK zg0?BlQh~WKucu)80up9X^Be11pN7M-Myt9ZDkgU5;)>4!j_mTl({iwfQoFiWo7vT@ zjIU{X({ms+W-FG7)>(!0(576L(KZLb%(YKcUbvoNdxncsa);pW$!3cLFxHY9fJlr< zm%H`LK_RfStq)Z1Ji`o}vT})86Dh?fh=DaViO`$t#Zh8AP*2qTt+N|*sXH8gSobHx zGP#F7+541D1WAnGa}B%+GI)j2wUYCEIrA=M=y7oMl+Zo9mGdb_sf+e*HlY{!r|~(8 zHy-8d>gxes#FlL}{H7IN+peG(=Cr-g0o)x1YJejsc6PuD93!-%;Qh26z{kXOtAqph zp@2aJA~rtCbzYCBcX3$tCPWp)L=6i=LZXH(d5#}X2&O^45h4~rm~BW0@En{j?7e%631g%sBq>U<#8=S zG&*O8A+P-RQ+pfXLJGFnSQj0Ucc@XHx)U6mibhcc$365N3=+RBM5*sH2{pg`fgvns zar@FLhWh`c;8n82ijpOG8&@+nw^&;04n_c7BR&ai$i%`x73j_$=KL9GJB)l1@$SVX z`)S@D90>d-zIH3hf|WMF!sO>X(G+z=<6EDUFLJMp&zyURI6o0=U~lRwH=w|uv$J__ zP^494&0N}FY+d)`z3%XJ(5D$w;9o2K0yFD6ySnuCyHL#k9>%Tf zCK^NIkta2Z;1cnendA|4B@oT#HSe3obXn#ztw0`6Q#8VZ@(9XK%@@q;`` zKe!Q7sGq2$goHQzgz`=smvE@$YURdfCxUVs#$h}@IbV4iJLiJ6PO5%7CPUO0T(5=7 zFJ!&|y1gPkPeZ84@q0@JR4={1y?D{}OKcXtX4_RBlL`Uj8(VZRvRV1fsLYu& zzF`7>WW+Bm_ZDG~xFW!7Ym#&@O0Qvr)*6y9#pN>-Tqqb~WVN-V?5M$!iUmuT;ALgi zMf!;_)Qw5woP9EtL&hJt0D+XP&iSp_ByfdhfbGQ`P&$O2mw2H#o2ZigaV?lMvTK7K zZp<7S6IM@TSn|d~Y^%Ssde8N_ZeiU+wkZU}EPfy0_0;J4 zGRnp`tF-#U?|tpfHM2)D;$Ew3lxw_;tYn6eE%TC< zy%MsMTPdroj3ivLlRYytuaSB2eW}mm_v1oUU4~~~#`__() z#l9aS_oXP?-e{ZCQ2XEgWet(bx&8ad4xo!JL82zu4)`QZ+9U01{6c|~|$e_XO?!9S5Hns{i`s76F4us;D6rS<+g zL}K79yve`GzRCYc?UC$_o3hgR5#Oj9u&=I!f{eoUdedrM@Yd6!!yb7-K6Ieg2SWie z`ScTw8Parn_@qW>vJA^A&3dV>A!)Wq(WCS0tFIRHJDmaTI&QB3qOtY?-o4#t!DQc%ShmgiSgSSu6^LMqgOSv5Ch^aowAi?GgSv4u7;+D*)H_jBS zLSt~n5>$;!0{xaILxP3;7#xBMzf_%o`iDjKLh8fSBMdX9Ka-(UlQIyt=O zFJJZ~uxY*inonkFY!y(QmM#saMWR|afG}N2XaBGC#2Mjph zl(~};@am)b)*JTxNZ6TTn&!QHs~iW@UC)IMDhc}JWc4h<{myt*i|(Op}xsHut`lJ7W=zF)ZLHBt{Pq!6=DoX!p$KmM5zom<@WlP(rOx&48}+}(e(d!2avZbJhpp~mKC6Y} zZpKhX(qum_Y!R}9>a@g_=w*h}d|vI7PW?DvM8K+JbjA9Ujn_x^>)EwEFB^_&pK}>3 zmTWJH}AYkjKqzwYo=uns}pn8iau>*dnJoG|K6b=XhuJbSFKG-@TMrnV9$%J z9}FXsy3i@z+z1mVUG0R7?k}VLNjb91Z1P6O1g!E#z8tY@p>GXsLyTFpqAZF#&Ngto zHqM*x?Rsuh(esb$!=vf!hD{l4rqF{4pHI`sxMPi5;fh%j(2+rTGW(FhKSgtU5bYG+ zyLD4ZCg*-p?DAaZy;`MxwoeMRKNuG0kf^EEc|3d=dFA3ty5!x&P8RQ69lo>7_;I38 z>h#T9C2t`4kdF143qBbnrEWNRduSx;0xE<1?Y%X19IO}vLn3MUH0Gn8YSSydu@sMu z_cqiL&^O6;aCFJBg+6qrpz-tj#$=%Rr$c<;^{hv7DY&{1y1nwLLEY6H=hCUTopI`S z0s{0t_k3XE&YvoTmt;mPpWs5*&u;S(#J+>RNR!IT1Z}#>VK54!$n9Ju8j6%C!iwYCt7ZxA=FQxuAS<=9vYMiNslxdBc5Zis zHoZBKwE+q&r>R+d$!+40VT=#gPMGB4ZVg{>k$TW>=gl!rAa6dR;Tr4jHjD_hcB=eT z8L504a@F`Xr6l)jo_M9hfmhFA$rSBx7MoxU)z&ha`OV#kH*D`6icIj0-fQ`d@N;&xq+v@6Vtsozw0K->YJg46Uesuo5k= ztcF1kPUi-?A$_Ine;S#|+BXfwzlUL^y>Domt($27m)u0!9OX{Oik_0XdtZ1}fIff@ zRK0m533sCk)SjfD>*$IG+(34cuC3pC&qWj-9!1L<;_g)QBIwpCUp%<5!$?gMnP$&I z)j6hRl}S`QwD?zCu|x*0nB`p`~X;_aIs1&n-eeVPJ56`}%=njas|my5FsEG5+F?pJ_XH zFA|0CzN6=h({534e&rR@cMLl?T(K?IZuo#pOJLi}u?CUj-ok&0DMGAYhsKuoBM=QA z5qC|>%ozvU9{|~HZUB);kYW#4v=e%PgMo;prj$xKLxRW}noDHxL`Pqrwh&lf zl}YB&!+!)<2*5$q?T#qD4KpUcrYH#^n|QKJV?T<+;aV}2p-kx?3_iUvNkV9Ye$#XW z0s~CoCsalW(aYQ}#1P4RiXqzcb88@fSC(>;?GBwxYS1@5u^D!qkekm5nmUTw?hZ7X zt7&#HYF%XMRUYix>U3%MDYc|wVAYjS?a+;-y{np0FQ2R!PoYzKhB4^J?HQXde4G?d z(hO}!If}I}3a+SnIl1)q(NO3~hz<~`vEr?;$)}=Wcs4fq0-`-Q*A&##Hx|X(x{pdt z4&@d6YzKe;QQSJ$05?Eq(>TQogpgV*L`6Zhp#3xbVTQ{v!c3LVc)oMzhZeDf#WIWh z&@nvA&_zHyZ$Y77z0>dpvII``R4c`>xb_=*ke=GtZkQz;v?T1hq=8S_6=7J3o^#>Z zi4_d#Dv#`0+VdT|x)GFsNgj4mY5SCeVo{JK>GeMG5 zUge6j>L_^{kjSK#ji8ApXgDGY?V$Bbw9j+vP`4gR)~~`I$+lekjvATt-&71tfXqZy zdoQiAwD>BFSUuSdT|WnAk;r&BVZ~N0JfBx)(e5hFb{N5Y_FdAgeRxsJ!o+E$no9RS ziSG$)BKEls^g1R5aTj%Cbu>Ut0riT+5e18yhFyVIRF&l_u5iz3dh^DVvCVMyn^mbQ z<+s;9bcJ_#)YUhDgkon*e@8bP90gbT5vdy~>;$cL&Q7Ppsf0uUt6>4|f4g#is~PCJ zWygVb@3IdaYmRaA%@q=63Gw&--v>SEi?u~11?g~pSpiHq3$(};qA|Ps)}|9iAru#a zG6R}MZp0ckK)>)?-NR{F2?KcB^Bu-@ybE^8*C^AHksJ~deHGPdEIL)@ZqTgc80Q4@ zxpLJusr$=D`jfs-Un0BrfbLa zlBc*sXH^R4KJ049{5W<;g`pdj%T1lS7r|vLNCDixAVmgKT)cJbA*>|88H#q*qZ5*s}T+5@q-2dHvGPuCi#^ zw{mY$b*b(C^||5-&L4x_7j^R3)4SC1=vf1dPCe)Ac`-C-b4@pov(KUK!ME*%%LJ41 ze_d!su`9S?;|x$RWL?3>N4zqm%}ly#uUZa=GgU_sGJ=A{c;|M|-UfJncoD`9Z`)2D#I&?ovp7PJ6g4Rxz04>LPpk^o{d6sR#XN#@B;ja$d(*M)6PtY*sbZODeqnv{0RdNqMDEIR}r`j-|YmpH@HI6 z$_FYxM1W!wy3olnSu}$+cVa~JkfY;X>4Jm9&xvxuP-8l2Gnp-2Fxs zGPR4^38;CKyBJ|;LwMPhi4B#}?7toXZ#sn`na9`Groeyr}2PWATj zLFMPGedQ~rg|J0oS53XS6&Sn@Ubd#%js`r}NK9Fj&HID>46f>n-|7G=kS(ZZG={Qq zCW|QYvYK$L(cixz!@+YY@E<}>X;9Gn9W7%K8 zJij$BndnuUFWNAepVcIm(620by#2X)j7G*;B~kw2=L+oNy?84Hs?BJh1-LE3Us$C{ zWtLsu$lOTASq#kj-m7u#iqP&hDcEJ@)n(*5|IhAzl1>@8r43xcsf)Xy7k~fb9EYMG z=sf!34iEo;z{llGyRMbBpMakQiM?gkUZ|?E7_4Y%+pbPX*z~2MSJZ|0JJjW^y;Fhp4yqa_w;SNQy0{=02@(sPP*!6q;VFQJ5t z&IJjZFF)HO*>xr+$6J5?%XPu@kZDN5{Gv zo+G1%K0mTm6_G(yF**sRu*+AS>SWg3U)zdYRWo=nY^wEO7$b3XtY1{ZNJIVRlpsKK zf9)p)*sI+M3ddS&C+>Zvm$%o{CH-qbJHhYZ!PYz@OTDvB2UtZzghdxp>Ag3-RkPUmu(F;@2TjX7|5* zvN|S@hB@8`(#*dXD|J`?dW&CS*1uQzE=1hyH8PHJ@wGuG3jaK*>#9tT>PP&W9s-@{ zoel~88EKlP*EHH`Ztsz=wTTELK{&R|vN`yel8R~xpEy7i`5M2Z{73tXxqjZec1{xu zk{s>w8@)<#?~{zA4p&7f&6M&+d(zOf#wv-Y9%JS!EITRKmEZHN5!$;Hg%o3(leK#v zWW#5pEm8`fR4XA`mk!5`?1rzaJfxqXT8~--zLUl;iKdT6w3e?}I~(z8cpvC?3ZBSO z)~i>qJZw9`#PCknrWzeRD_SnRU~=}>eV(U(?<8DOotY3Sg*3043X60We&d@u^ib$l z_WleaHJszFqoW&NR|515gQ$Xvj<|(Azd>v>@Di%o$s8S7Z&t|2iqWss%@C~%Jp5p{ z$c?Zo$Wm{p+rHsNDjABNZ6?#bBa&u2yt+uqPT`W*aJz)oWY3~W+ebna*&zHW9U|Ks zdJQULTJ81f$(|BR%VWWN2al4T{do(#;*-F(k)dpoL=#zqjs!9?vP-Mwkk|9W$w40* zsLn@_(Sp30wUgsm-20^uJyk*cfMH>NVI6>&&9X=JDW#dELWd?8dFQFmev-_LPgkPm z?!v6N08QC1dpz$mtdPd&EfYa?D@aR3*Fq^RUjz)Ohbr06hmwFt(!M*rb*?p{z5=Vb zs;FBHLeE!_P~AT?q}YC2=!j3;6`Gl*4%=NxAGHsB@1BKj0KuAS@uuuqf{g(+zurk5pv9Go%Vl@z8>T&_PI3=>P56mUup{0O9 zP)bJTmpUZ&w#hk6I{~EC0^Em%HTB?dR71*uT|1ZukDR^9g|OhsFPUWpUX>6ZHAiqe zSE*eKuUordJQ^47V9~W2drxiT?SFBl6inKnrh3mbM6@YIR|HdzB4nfIU#&z~G6#u6 zRX@4Ua)EV%bJZbs!$)tbI9l^5&K?!I64NsxzLoIY<`IrT22cn08^gqp_WmdH8I9&E zpicgaxk`@zIXALl3lRLN)eRKvZ;{Y&A-EVN(C4}MUku=<0xFDz7mW0*!UTwqP{tr? z`dndlT^?cdfFDnQ+Y%f zV+-u|Psi)MgqT?{f6l@GacVKS0hv68G|esHzVYNK;Cl4XkO%)3__?{+oqbD#G)Sbp zo?&v!KOH!~k4{ppANSju%F2{qBzgGoVPk^T=m*Psf)Fdr$HcYX^^x~+LI!yVZ3-Gd ze6}#ni+DlzR~80QRXkl-f85cIN+A5j5V_~SL*h`4A!pg_GKR{HZ;VTq-?0aLC?~Mj z4tmR#rb+7AQ+h2i@_mgz&?mHYOGq=B%;h<0A=(J<{2PJS?v$CfDjSgzf?)je;o)qO z*#kgN5VGFW-fAd$*3QljTSW>I%vO9mBB^OoKk9c)_*1V3ACEJR}JH z%@z>28d@i~!);d8V9^bof^;Hr_tb)&9zVFmx(J@Vv8(yZ!f z4v$fX`X}d~$;ruICY6nH9V7q)-P}SzC;3&V7!LH4st{;gN<3T*l_q51x&0at)6M^U zcQ@4#HTV7BWrWxQ{!A3;yDPS7i@FXv1A!i8sfDT*6&D|GzBjK;&dW;#SsKq4e0o{W zCKh4yLa+kH;%Qyzg(^4Lp`k!26FddD%j`7&e$FhzNnh~>5j_haC=q96ByFbt`(j(& z$+IBOFE#uq^xd9pi8`0EZ+wns2<1;ZqeD_rpQ9JxE($=OzSCrlxceimsiwfpQy32P zp>wAjL$0A8*@O0rr-K=n>Ko!h&831dN2a0kPAw&9gDC#Jg;~l59-i4SFgS9O^G8j1ez-H0Pm1lZMr9eDvfdrJIbJXnML4q19HwGNg=`R2`=RJy-v z6T;1<7ShwQ;Mn&v7SNa>w28vqLEiRK`0Q}OXScHD;NS<;)8j{$|tR4A{c z9gj}y!3rV4niw3PgjIccX<<~v)pfioGVnGsAm;D0YoV~CzO|GA)}M5ORWtr~ieT6q z|C0fOFj^9jUN`uxKX*STfnGyOZZviz1RiY6^8r#nW+*?mI;YU3;SShy=)!E{^=^H1 z8Z1I)2L08_&&?R|2SJ#vNo_zRDxZ<|BqSS!HYy=!W<`)5SvkFK1~;qn;&n}Czzt5cX8653sVR06fFVx{ zSZe=R;sDq{&A?f}-tzqPXTQ`>AvEB7bOjJ9e+^cFl=`ERTKCz$Nuwb|;UvPu0(ok~#;AZwm0wy_X&> zw@#9_?YIwiDK*yYwe0TyHqJ|ce=3AJ44mO;4R#5-M|d=D$$W)eN~xgY@#chlUK8wG zeHgCGbCmK=^yGBF%e~OJ^!DX5kW4r-F}o5VjeM>Flz+F^R7MgQ z60N2ue~?X2d}jF4dIaJauSU(cMPKaRxn~!oqY4QiV)}QBO7-IuAT>Nrf#2E>`zI_! z!7dRfoUr}@h+I#*g`1udt(q1dq?-#RK)-mwl2?e8{%8eENgdBlJ=6190(;p@D@z&s zJyUY8j99cy*sN+%QvP)jMKy3GF%$n?eh`EW9KB7CB`q~o^B{b#^fFHc;}IrA9$(40 znSA^U*bQj$Y$xdaAAEg_U4reh%U>qD4Gg%`va`p5K^#5p^Lb!u5eUQ=Pzi?et1;2T z!IG-jy1F{+5vH`6OquJR%C3Kv9EmL4hy=@L?sun)@DUhb_5P>g_Yug|$y&+$uF|X+ z+}c=$^H0$k&LUu=8q>aY%5r$4)bR=JZ!d}`VE%+&_gRB%%`|=AzM!0G4vquMim-i* z`!j0n&Q!W3(4ydy%XdmHy3eV#6uCI6IlIRf2*o9WuO7e+Iy5Ol4F1NhbI~Xo=z#yHr@5l*bqg7E7%z#6-_D7 z*F??T<^Lxd7*Y}6$Cw9Yvo%$JtjYk7dS-VYAtb*ogO+9nm4p-vg$hLNJTt zG+reDOhGS|AgHs_fh{;Itc+@LV1d{rzv6hMsD!>@*U|+&Q7XC-eMFO}z z9RL~WWq)`-Qg0G$e(w)!6mnue+!*I){f9P2)h&~pzTOAy&i)4*S#~Bo!Yu!LNLN6w z+2#8m01H0>XuK(Na)u-!B_9)ENAVb=;St0;*Iv{MCUR?(umK9Zlldsa#mWKD=!cd z-OPA$Th()sw8fzymTbO>M;P-z4?+jT|4a55G8`J0G9N)gbF^_Xs-7$Iz}EISQbz)8 z7t^-0gM!^=-y#kc7wyhfvXoQ1ccIaT-AX`rChQC504M?mj6wugGK`LFyzDW2=qwUNc2-k`kNg@z$L{s-Cc z!Dgqg^J6kuo&G#eAbLpBdfgS`X7zL|iZUKnHfh;CNo-EBS~j1oUw7527ZX44qj2 z0*ZMoNInqg^Lt2Z7x7mq^FiOU@)7h4aAE@d;Jy9Nfu|M1RC#$(eknYTtL~91?84WD zP&|Iu^1H>*SKE5BWRDjNr0p=YR(Z*z!zn|OZ!Az9=ih6BD8LZmB0iq|16sR#T9$H7 zIhat?5NuDqh|oS@aayR`V|BEgTXOw~W7s!M2D)3!PDsWGT;kFa|E2q+#fhzc&ii%* z9#qrefApl}{{t-fgsdV)B3Cj9k$RZztcRuaF@Pd;ujW6(rV;Q39V27p+3De4Wm4gl z+-_bp(PC2fog)@{i152GO}y?GW1n0y7g;^jNV|8Rs5pwFfA~e|=5<3rW=2vQ-N7HM$r1rL6#%CFlQV zhVrjuv5dSij_zMvxhuI2ES2XV&uBmDX%w*J#rjz?`93eXWF06uI5>`;sCE1CN&;}X z+{|F&HqaD!cp+N@oi7I2ghq2hGC>d|Epm}UA;~sNqcuaXWS#+|>!G11T3-+hINMnO zmHD5U+4&Y2vtPP=l}#J*|DKu}@vhZh99*z14_xOz$8yw)oKPidfe^0T)xjrPUtAgh zX)Y_Hj0-dTazl{Mi(uu0ZRDaE`7%U?JY852Va5x=)z9gY`!#Uv5N z#klw#w!~nftDY;}O#H;M+aC>P?=Gj$SbHDtY1uR6(BqRjpQBRtF^Ak;{&%>zKoESO`m_RoEUcx_E7&d7&1Uk!~qlBC7`4V&vPSD%8l52Tk zB^;UBL*Ml<8~^^3N8PuvhleXAwDrjp^0Dm0y*7Y1-NJ)Ml2o^?N3wFkIC%iRM3)Xv z&RNrGCI)kKm7|X zF7SihK``|!lRQr)z(_`v7RU9^D(%vd&jD-LbBhE7Z{5>{dlW!_P0vk63A?#SDJT}q zsOyo>)Ut$(Jgnc}lXrWD5MWSaTe|}n;7D&zp&+9kh8F>{J(bD%K%N$|3CSlk&YOSa zkt&YFtztsCG245=iVUtZxZ@@Zf>}iKB!GIoyl|_|J^^Am#lA z=p2B{Yt_ro^TQMIVu?Nm#mx(l2`rZEym4dt`@n-JOsFe?InQhIIM^8H&NdUK#p(V7 zuE$q?o~KEwXNdk+;k9zR%jtaR-CfC<-5oDxf%M<7O&$^3FnyX(xy4*q32A;r)fKcR zzdM_72DhfRc8Co7f?hI0225R9al!3*FG`4n0Gt;P)N$$GE-%?@C1AY=Js zDTcqEv}Ds!5JnRHi@5yMKb@yH7;tiWepbPeI%(%RVAT}fh0J}y+v2`NUjQBJXoqr` zB+_wmp21_atycM-O&E{7yGsKQcv}4O$4?w;A&rZJEnbIPmNWQix>|tZQHb@-9ZYpZ z`?~LFPza`r8P*BL!)7fR`OKZ#D8<6mF}YsFqf><|w%9 zg78v}mpSCXZ6_zR5^C684G4$??EN@e6OA$8QZ z!5)(GWS=#Qh|?=g|)dAUhH~HwX)QUkeJSsB1oE zM+%-d_=P=6^=ariG1b3ZfTg0k82@1T`4?D*kUGdsVXuqqAUrk=qCCDe5E82QT@R!X z-gR{u%)JbGT6RX0{0B?bZ-eRfk1UH|#i+hS^)%67-Q1OCEd8I==4|sQ@3qB8H3m?t zT<|J8b_GP8_nWOAzx?Dm(tjp&R9#R;)Gc_)cn=aUN7etsTofib27gW=tH!JvAuw^4 z{(QB5$$KKQg-`yhS&LB>4C_6)!0ihj-9tzfe90eDefYVHKU`Po-bW`CNJxYX6s0z} zAQgyZ?yC51ys+EzY9yL>co4TOgA! ze)Y1eOootbGg;g`SX#k^WVXw;%?Qli97znsOywum{wV*osb5o8msQNNi26>PWrhhk zrZy{=P0>0W?{{no_}*DHYrlKg^+d1M6(^ohDUkO5^xj7yoN`s(+nV95f3=H0Mp3S&co=G@=2^B0)ugh zLHr`g&_j|D5G{DC2=9eIMZLb26OyU;3oJLSGc^RXD%K?XR+30vf=D3S>@H2%#HHcU! zv_62Lp5l?CgyJ!yq6hC&$qnvFn$|=3QmTm{g5e6ZamCkw{{Pyo_`Ge27>syf-2zN&P{;@ z;~J8kDbUQ)V3|A=j{D$s{v3M+H=}2l7y7h^y+0-E1Y$Ot$G^VgVwV@(lZO+!9@-zN zfVt;EHC}7Yv)-<3cOxLW$I(5x{`a-2+o}#~7nE6P61;mzp!Gq|{9N1?rk~~bYZSE` zgljtI+3c)}S8cbbFS~U4{roIury87=W(GH7HgmP9RoPRIp`0ZOjy68PXJucxyY7sd z^V9ejkkLUjjSDQn29hoMT<(D~k_;Lob^`ca36@2lT)}>lZqkCov$3QwP3kqNO2>Y# zF2uRUseTsu@Uzq)2(Xg^0n6W!2Y9jk!;cqS0?tn4ng2tpggc--%^xpE5+)t*t%Uwq z50QkX4_r%8BWO~~h+Q0Akp!7ZuB)R{;cq+C%P=s zm&vbjSR^UzmGdfZGFG{@XdYy&00YpbCo$vJ6jzpem|TCTDnq04MY-E`?9Y{~$*o_T z+4)mdSbM>lM|BZp3p6QOB^<6XHGigkYZBaND<6fT%1X;q&Q|5C+{lu$F34kXb`brg zaJ9Y9Iy}Ph|3hK0H4F31^AzK?L0rbnH3R5^4<~D5)xF!v?-7 z3@!@^a2(zH>_T8Ko?MHnu9hXH<`8B*3q@Om4@rp(2+$Ba8wcQy9(Pr%5j%gI9ScmpH)nJ`H>Vo=$h$$FjmrI? zbJEd$jGI_g8q*bkae%92+(vf6nX+`M40n|^_=1(%h@bbU!WG*Qhcg4v!7l-HMtJ+df71qc_?wz6(bmWmI^7zl%e_gAk zg%Z^1|0UPH`gIfD5p5z0A7?iah1rvXbdM%Lv_~~YaW{7jc$_|$>SukOR32)uUdV-o z6J-P?hiRxXn<(wdBVR{kW-?n(O;6jnxWs{BTt0dE|EfBYP@0S~4bYT%$B(3pq=d)c zn+b#}WwSJ++y#V=LXNknCb-v=Ub(CvEl8#)SoAYet(HGviX}D4<7NGBiJs!~I=o?* z8~l>rq#{FBvii$~KXHEy<_VU3++8;1PwKb$e!n+!f{7c-_CxXJPNwVE^D0I)1p}M> zHqNZ7nS*oMtq#fhzhHC&Q5&7^$!DunRc_5ZI-0wp;gawySGnJ?JWcDm3s81YhK=88C}pCdMep$Xf74&3HmdcR4YUI4)u3 z%l?^0yW-G`a|;jNa^mhrr?HCp&{bxVX4HJUxFsAo+yB zu_misuEYs_hT*3r-Honwx0*kAPhwi_#(n3*bZj8aR^@%%WN5UpWWMHiky{>Tt+g3F zhQ8_}y_pz6jjmGndeY=u4_c|1#?%5LdNQ}MZlOvu`d!j-uaNnU(#SXMsqFrK&Bi!F6brb=uP%UXz)fJpGzS=|5rk#F@&3AS^k;yvV9z zR{d{6n3nXM^AfFwtI=npO6T$^8Q)N=wK#}igp*a6F>+OUnG#N;A2{<{%Pl`&EB_4@ z_At=b{|2_M9xdb(W$77Bc1=+d(ceYO@heP*hd-g`R`vaUTSsSpeT7k=ISQl^n%x6+ z4qF(z2@5G1*xA|TTt+BCo_M8m%MsT3v>PUj07!r+lUXuvz9T`|wE2NDn><%^$1R~k z+e{s&A2u><3fw4Ff>QqDFLz!lhSK_NTetqmJj5=`Q>Yq~Y54rkyhdx%s9edEL*Z8E%N^8C3jXHT1Am!#&fj&*HGgg4~S`jP{@D19iS3jkfYzd zR**_T&+O?qC4wlSBqL8T2;V#J; z_t|e-cLYaEzAwUnl95Dj%)9W0lF%EiI<|B|<7Ct^VJVHG2x!)gzylh|%%kb92d&!6 z%GrZ<@c*{Hg1HU7lm3OIyo=082M?m~{PuUFlBRPnpS89r6xqFbC~W8{gRc<{>-UF# zs6IHnkSSS@v0h=w%^7CUr4>@@3_4d-^!n3 zi+jbzqVh^!JANyCIaHuv$@;Nr^<%QFnR=?AMAXI1TECKb5BTM==#5i7Kz_v~z{_wJWANnCGl_tzKo z>xOTB-=}1|p8x1nW&gJZ7iEJHls6HF~C#J(py$< zCQe_%$||u8^iXDK1id7?%t=Z3BF7ODi-z!O#mjW+S5kY`p!f5Po65%$NJr9Ln&QJj}4z*K4X1?!;O0#u-<6>A!Ja8;HAYO5Mnp{S0QglUf_Fur>m&UA(ed>>#>&? zTM#3U95o|ksHVeutUv4ikBP5x-vRB?7xny@#i`*S+HX*L2FJ8swg9t2j zVFlWTsJ8E*!r2xt^EMaO{ZVXPUo-aiT*QQiD4$3G9al@=m&uKlI`2PF$1BnUp{OutT;n;GB3{W)|D?d1b?I_dFtc z<8YJ6N+l5W=kvkWZ=bKp{c+*1T;v%pQ>BiLB|z5Tq)f_`@U`L&)lH`SpKAALA{NEu z+^R@x-KN@e6!sO&NGasG4Cr!(n^2I7?=A2G1g+nXW}qXe0OGpNZhnWzLMRGJ}m zkv5c)BC@OVvN>oKD?hM76Du~%7@_%$o5)@U8E60!ib3p>Rw|vK2v=tcvdpPlEkS=$ ziR7~U&$7d_X(DK?%=`NIyIl)cL=f{?G_HkvarY9J&j9-#LxibM?Fr zR5vbF*x=~k;d5ZJXmWsC243-|6oTuzQNMcD6V^C{Fr5^SitcwtKkN(pbmq#EV-WtP z*L3VU4eI?QM0kukx@uj@$y7h;ql4tw9VhafcEbuwTKw%u!-_1%D>*iKQomi33I??d z?LBV{bIfqHe!5!i6FhGzPQBE9sFC07HBhsqIp$kV+?xhxk@puoF)@!np%S!Ro9cZr z6Dsifr$yBHqte2gZOyCGA@m(IW>IvU%f%s0bWVew_|Bu;3DlO3g*RuH&?a7#qW`f* zJ^2$=e0P?JmaE3!Vk`8nw?WT(umuGN z@=8@O^A!j3HT%<;l*vF6*bFrHmW>UYP7rbrRf%tW?*BIN=X1(=vP@620inc3awz?$ zn}YNAyy@vlcbWhCuvxCPAy})7Jw0;eDegmc>74UG0le|&uNTs`(Bcc43|b`8fccsl zo2Vq_*72(=$@rnW<~-;OsJ#%9Ow%osVuFO882y7VKnBTkA#P7?(xSU0WFopNdyrIx z6jtURMH*v$kTv+h%|Zq*zh=0Mj%|{0=qtv*pRApKu%>A7IWJ1li~0U(-}H44VIok` z>ijLcQuo4RWs8$T@k#poPzVY2>$$}@X>}Joxh-31LP;&kE?QVeSZMH@rU$+q?7pWG z{V$cWpv?<;q?#jpesvzd1rIh9QL0UuJbYD>Ma9vrQw=2H>cnkb^%Ru1p0s^)=6Gcv z^>ySibrAj?jsI*}(|<0*@3{#=hCAS+9xNaK2!83dp_ZdshE3n6n!+8xbpl8@IQ_m1 zc-(+6GPjMmQI@fdMA=NzONsrwl3kf#WBvN7iNyr0{~f_AsvPyfimP_^r?8nOvGAzK z0vyH{t=vd6;lq)D(doUfB8ewW7Ro=-qJSefE%x6*ky5XPqp>aXoaT&pC87oTZ(4;7 zorUT3Xte4*&r*`d2zJ^}d9QyIQfUfoRVd)LuvBWBtY*NEXyD~5VpeZEX&Zlk6&G<* zsM%$MM!Jzc%iKx|L#twGeka7N@?t62;tMM1Ja#y!`P0s^yX?JONm{T0gk~qDR!}T2 zmS!sfg9$<3@lsLp%}$7nJDeLHX9u;X?=v(l?9lk3!#S|atRnc-_tG6;4E|;_LtHSf zm7p}L@*_-!Is^iF`QsFMjezJ+KIkn_y?Z-lb|19RNfI`3$5PsPXSw+56zN$-bhbs) z?9r3xvY#;tJN1g69*s}4IGO7>`R}i$*lA+jv7WJ=Nssr(q%E3!IT-|ReN9fWmG)~5 zdZ`@D5lzFT-qevWSZJ&4y*WhGbVBo`$IL7F$vJ+F&~}GJ4aaqF7TXSkj%WY9OU_I2 z`e0oD%{--x=ZG1B#B}#*FGrSQl+J0#GxuKfI8-@~PPf0Srg?n$%aVirF=4N>f%<4w znxTL{X_000eWSfk9v`Ct;)`P6-G9)0rRE@Reolt_ zEnAw+1L^4Z3e2kK@8~!xIiJ_Cn^iPX97s&kv3-h6cpqIe6U4%1fNGdv88huiRc~^< zSntg*T#GvSTOJ#nHl>`4foq_;H_ZjsjTlmoU5w zX4kanD~~9M7Ukl0`NvyA)!bQimJ{od?A-$c$Qgm~wb(uNEKb0lGtWns;SnV6jnaOk z)TQDHV)WF(dSj?S?UXM(X(p;ET_*fAewEPkCw|W{jXHS}BLHsB;3;d3hyQRd# z$2>OX#ruj+vxFp>@5KscyYTmVD;`gM2@#AXT6kwR*Gw+x5N8_JLVl;_`y6)_u}wmwRZ&ai-yloN8r0@V!OHG)!b=*lS}YN2^7kPPcWJ=1$+)_`!Z;!X7EhR zo234y)Y?JnBuB*mMHK(w85=i)X_(**sF9 z@B6?ox30#vl}A9!CPPRjaI?sC2M`%?#U1@(pyRrccteedckst}$Zbs|23ljyFvoB` zYIEVbZ(|3Kpqps+CyQ{^vuh7ddLpg|oGjlIK$_M0o>5X&Vs zt1wG;&>3m?$@xDyx2YGI(x3)(?E)-yRZ+fd?XZx;P_P-asu*FnT{Imw(mx3C$CzYgE&zGa4-(QTW?P zv-3lg^_<`l$@}QnTlg=`#5KGJZ*BMrP~_FBPkK=4m(_d$oh3%Q>~m|?>>+UTaV2&- z^Pn60z06-Ru6W*5nP0nt#VHy_VYh)>{K)*J@1gXAXYVx!>2)e<@?+-)1S-pVQULvIC(ZPST+gx| zaSWE#$y-cKRF39_J$(?26#bxj{??eB;C#1jppX|m`GbkBWQ|wUQ|4L5qXaB9+~b`U zM+5PD+F!Hmpi}L>%Pgmxn=LJ)G|}K-+x*rb0WU8BEuDP!qc+m(4S%BFFTiR-3GUmC zvwxVGzP~=q_}n*mZcCo^_HA36Z7KRY)CBVz;{?xZA_`sPvN_+SY}6&%ciKvDSgsWO zmm@IdHwQf^-Owm?tEOd;5N3ajuyLEK6m#zpy2d{}Vz<_Sr13`~^*YKJ_G zHy}FyxM^|?PLYL79cQ$cL`Jn|%ez2bf?3Jsx?rg|aRjEzh3n{QVSl#KeTwb_hzUZj zppP!6#**+d%EWMUq9 z_-4mCq~zu(bkV!}uFY4Xmh}og$a8<#(xYR^CTy7_ig}hpB%Vt*ApJ6C^@y>;FPB*8 zP(;cOukO>CoT+JlSjJDt5lLTE{ZDAR*k{sqdWXV0KSW8vKukt2f@vx#>iLexs(E~P zeSiXCU9Fb>sx^yI`E{m4;RwT9_=9gONKb~vq6%-t6@}gij6eI%lot5eW(_N)|H7C| z<0Mmi^m+S0Z4N{B?Oph9I+W8?34!y)G^APUyZYTyuEw*5V()QYw0S6b_*atFo~o-o zk1nDbd?|$A)kZY#!hGW!V0S8o7XSOKap%p|MaU^!%T^3xq7Bz6R)hR}0{`zbgIz{o zWoJ`C+0VqYAd(uIv~e%nF|XPWZyw5CM`t#O z7YvCWtHkI>%|2z{@UloI-l$91_`&)`mOg1Lb%*}?AKJPzeACuEH4l>UEz-A|-}JRaSWe}?^t{^Lq01*K?S>TMK<$8~=6UX&%fnTy2Z z@_4<)H8Zp%RpHko;^mP$82rE(g2>Cn`^>0L&D%YG$1T)|TLTLuNgB1QSu%v^79j^F z_owL{AvoS$r)4Z*ntqt_@X5vHS~~K$usisq8CkdQAl8x;DQyhxvFjQ1r|bx2W$5aY zGWe4c8#&G15}X?4zK)*BDM%|5(Th*ckGa85wDDKwl_$#p1HBKmy!_y2_14@tE(wCK zY8ndPy*@y`-zzpH_u>=&CR0kpQK;3v!lzv%rCp6&2*%l2MH{Crv9ORLw7a&pbP^%= z?IfHmF?fYK#}`?PBL%9BmK~S{7DI3zlN*eq5*evjha`$6y>O8#d}^@>I`J5#p^kQp z{0wsU(o!!Vi1~C8f)9B2vkn^Ndn1zZ`HQiZKV3%E8rnOQi9#FX-wc&EMG?1WasJMu z$>TjFzmg}olX>jQRQLD$Nz}eZ@muXkOR*L$c$uayp_9HuC`p0atcO=$DCOUj5}@Lk#xs6aizYfKttZ0Fj<~)W5AJKf`E%4CI4VbNpjW zUoybN6a#+D<+$@V5ZE1$@OL1v4!+u-y>ouq%g$Tt1(eHybMa-(PeMMLI#h3*EbmUI z6qegU(cV>?+k!Xr3Q>FtR=OUQ(|1B!qlRqQ*E@i9S-~&sa0QdrAgtgU^PZ}ekLevZ zlp=02sVnWg){FZ(215RlDK~#oXAAtT-mDQPxiyiQ8oP8iAW+p<-nzL^eSnUQ`NQ0! z?+g}#uwrnG69uwZOLXu4sd5WbrSnfintB*X9q@pf31qOK9`)^6z~LVa6!3TkpsK5U zPq^412trDcnO~<0D?;hVGXRBAiBySNoP?rjb~&bLt4DS|C^?W)i+chalfv#6s2oiEbLdjxqF=k_ua$>zqMy-`=lO5#_lADLgVwD90Z(8zYsc-N> ze<5z}px!ZevC+!*p6Pb3N5p%^rUi1vz7!P?@;kaD1@%#UVjdavurAZ}qm?|AEns<0 zBVX{^IQr#5M0dB$o>?=ya-+xKo>3vW;V{yNJVgt2Uw3sE;`p;!DgH0nf~fEO;WMNR zIdda4<%5G(&wUVeb1fS0cS=@c`{e3NgsCloBn-x)=|}b`L&I~CN%AVh>HpA$8-H$C z@nhO4GcDBqLq(absu4OwlH6o~%UYCX_k0J zwcA_Mw1kHA!S&R44XrXf9%QP8SrDTsk5x@mM%sWfhwBV0Z$#Jl{I1vtcvt=zQ`(#) z0SV>AofjwK6ARG9*lliX3le3E=l~xpyn$@*MFBj1rDphSFco6&4SebXzXK5$mSn6T z#4d^$<0o2N=7~|&C2C>!9;vu?-qOVzhf;Zd{m`4L&gh-RMh&%-1d-vXB<08_Yv5N( zEWnvaU(!Td=R{NtTh5m@8$jIH;Wntkah$bH)3S?b+}9l{UbdfP zJCPjQu@4$5AG3(KWWK)e)lv*&wpj=bt>;hE&gnkJi>eqwRvp%`lQpJL+L9=V>k)I< z!?mdv#8k>0s6F%K_BcTf{h$wOAb-Vn6L#1nX(Ck$pS4Eq`TVVS%o@4E<-T{hi*LCD zwPz#{*~OHtdo&0gsu08|R)eEP;u?1x%E)gMLOn2d*4N+^mZLvK@!_DwN-d9E-H9^h zHBEw*_O1svEoGFi4r7gNu544KSAS1`Sey%O3}cfXeTf0yZ?7?i>KSCteH<-#J(cpu z<8aC;7JORDMA#`rSCc#Wp2UcOvx>)P04E|@%T-ZQC^9|Fk^Kjo{Od{yV@|MAsYvF` z0a#0%Kq6)e)T|m+=qaAFC>)Uj#$$K(js2vLcWp*P&oYaG(O>F4b^cC{2s_hpZ({>) ztfjrf;7hHhrgm@ntO7iO4*oZvV{e$`M!CZRHa&;uaqpl7>Kwf-l1bj%b0~zqjgao7 zoAncMU(Nq04S0;7+?`3LYFJj zmAof7iFL7NqYb70>EQ(=m==bm@p232GX5VgHdCUU803tYwB7I9qslcXzl; zs$k?RPR5z3`=)mOAul-uM5G%vFV-KA8wcumoJ#SAfpKp!DgRi+MMO=p7D3$4ct^uc=jOK zDLVu2ViI=5noe{W$~%zvgFY+-r^J3UV`FF6v5(c7oTPmve6$Lg+DCG3CjefaN!^qE zphg39;}-;WK~8)Pl%e%4&b|RC5dpYEwgZcp-0@nQ&C7h%XE_ ziLS}2MDTAvj$KwqxAF_B4%&6-wkSq#kZ<%&nMI3#5>z9=wGTN-5#{Hq2Y*>K|5rAc z=K{G9Rz5D%QH%@S2yhnCX?jNXHh2C5*Z=2?~alLhUD5 z92_dhsPFoElc+r(>=ix-0chI#-ri6&YTMWADWE#Bp#QJg3MqpnLBpQz&lY{v;z#)$ zt|Nc*aMZ9`E1c`nmyLfI`0fn{_{m!XUR_jhPw&ro>a_z04GtJ!Gayw0CN8pfLArmy zUnyE?gxU9C+L(kaUV_wJqyoNQ)N%IXz=HG9B%e%6xihQ(p`Vw^dHovheW?9vAcp(U zw(bxv=@)&wxv;O-a<-0;U2PE0W87Rf@kECK&tijYm4zM&L1k-Fb_n=}29n8ew;;p z-XRQpHGEYr^buvuo1R5B5#Z6C@&Eh z{{@9Wueu;nHR366d7e?GLUL?mX zrN`YZ-9b69HOH3jH~H7rm_Ery_2F%ZOS0ENE=hecj3aLrf_fPSR~23-KT_}4?b<2m zyGohAHL{hm$^2en&5AW1TW>32Lwq2oT!oOtjoP#5%4{+^*gb8_DddBuVCsx6)DYXd znCn`-ql!Goolqz3GWqofN!!4Fi93hsrK3|^5KR&R-3E^PM>UY3D}rNm{G`5fGK9=L z^PFG7pn*1jpQ^i}iEL|Bf=Q~2k1%g8HbkD=hKH+Xp$tbNT0^C`TkEv>I5A<>y7=of zPFQv%ta{~>tG6I~&Ag7T^Kdq)%g;aZnyq+Lbm$ac5z_RI;VD>4=CcEb7w*4g4q_mB z&IyYbO>f436=7)zrNL_p3IGy!Jfya%DW(+ASXcv@n4h%&cS9hJRRLIP(S#YbbdavV zeQ25kKal9+B~9y=`-;!Y%iAH@_fuS3rxkHF@_8@UYor2pj=rCNCT38omdzE@Q#X8k#mOj|po z_3O8o*d@P<*0al`*p`=d1ku=#$1Q#VTA3~A(g&5)!0XW`v>VUu{YJb|J?{|~Mb_R_ z2KPTVTrNw2BqZe~k%il)WqC5;nKRyHR5slscLG>ed~o4Y#GWTj3;C=M270^fL9=2p zpIOGcCyu!P4AQ8KokpTxEXTxe-<0?c(O$-{#o;&qOVi0i&>MRV(RPQjS~gCKePKxQ z4XTHApa~h`y8ttSPZFk_i(ab0^|wwE#Ffe9{d-`JESBKbib^SDi@hYL)G566bqQ?LCP}Q<)~nbo>vB0L_r{w3VYIE@^#yCh z>1Z*`H-1bAy@6YAf*Bl3q&5W-k<@o-lv@RE3ji zszQXr&(Ggs1LTswJ+@Z^1;4y5DLN+l|M<0NL{3q9??C|mdw((dxC>i+HtP&329^{p z)Y)R;4RDl1bYMfF(13r6X6$?4ii*Rtl1Mll5(;Ub-`u)I>63RNzg=0M(ZJ2#AEQH!iEz!bG z5(U+6Y5lm9s%_xGu)C9P=eiW4cqOEJrKvE##Y`#$NN!vhSw5j>@P{rY|F7R( zE_Y1RF>*@_pHglD)y8H~)cUC{NGKPcog2r|MBS89zp>SZE)jHb_xG?ie#I^P%`$Jm zoH%mxscDV3=^*0imB;A<8rDN6cgx$Dh%t+t_F1r;i(tz~S9GSAKQ*|HIC}Fbkl*gF zNRlOhF6Aqo-BpmE6Lxzzrbj9-rt1Ob;T`%A*KB0PIdEtCZ3*7B#qbn=p9hMZ_uz>d z0j#+Luvw@;rqDOAav-Wr7SQ>yVOYth9RToA(zDvCosFwDtlA;`Yh zVc=_j)t_H(q2Kz-<@*%j6O#u2Pc`B>Va>iCJ7KMQM{%)+D)i||T;D4sG*=zQ zGbWfWoQp2aU8m_Y@)xr$HIKV=`ayIZ;cmv@2tFQI*&l8d56J#diapVF3+)%%@(b>m z{$I}=x%Z1{;bD7|46EPHfo@+%p0?X}7yu*uAL~r)P{y+fusp3Vh`AEmyU~5;+rI)0 zyGxA(s*Ia)wY0Q4e8ORJ34O6Z;MU7CLV))C*XWruY;gM|M4E zmfNPEN&gJ2CqMb67$yop$74(RVJ7G2rQlYM!JEUL?{dykp8EYn{(8&jB8mf5`2u@#{@y&prR^?I;|8Z?o=Aap!u_KgY;ARa!5ElzH3HP70&G`fTwoh18hs|Odr&*fvq2Fh< zq6Q0M;x#yvDyr$jk0N8nSz7|Cqa!cG%F3={Yx_NhxUi$XN(XBsvUpq=K(%c@EKE$u zLu?4CP3GmlsS;*3G|7QI1-V`PU^aJ8HU5Se@2bUt?hK+vM@5*|HBKdzlO~2qvYKlL#k$w&#%hCt$~P1RPSQ511W}7eSsa92ANzU z*w&jLdzF9ksI^}A_i=je>1gA%qeYp_w>3Dj0Ygm*rdGU5zeNpBu3rxpbqxdHWj-_(U=;u^C2JrRh;(i*NHnbX{L5 zHQJeot-Eq&J=9Lr;1JJzl2__voDoU{o0f|$JsbGRqW}1m-jSsEx>CekSBSHw_U~cq zt1{;RIkgdt`1qsKQ?2Jf1|X5XhWEef1rh5GA417|hk3Z#X)JJm0=YxHdMpjku#<4e z-qe9WG@o&c7@Hr%+k_^a@rA7G-oJzaIy_V$53yw}`vKtEc|#yP`-6}>bPDMVkMqVf z4wfvPv~WSszkL&aG`FTLUfY;!Ywr)x&m|QYdxxbZJz3{aQ+pdu#T1D|do|L!+*QUg zUl4fz`*w%0exRGCs2A<#vOwTI9PjCUk>Or8>sh@KZx2PVZnuwn(}Agz7dv;gl;)}}stv2L*6`Ax0l2m*2s7GzjxFS087t1ZG*{*zChaD%i6kn~y4PuBwHNC_JtGeq+ z&+j{iEumwu(hI4{lMX|5&Zx2JT*Xhirg6!I`(N~WHpEFlE!^*osXiLh+Z!w<)NtR^ z<0L?3jD@nz9Hn$5uXxBxPCf=?A41B?G{UFUpeewMSTs$V=u>zDZW!A z4M>gpq^#3~bHz{%0M|R)#l@@WLAH4cz8)Zqk6rRH$3-Z4t5fknU=o?{DYOdwc zN5b~S=69%NdegN1Kk^vAWur+nI6}2Mdm%r&$o^z`_vd30SYu^ez9 zvW|~gZF5+6jw22GLv9Sm(8+7D40@2mK3PRI!{~%L%%XZFjM10R#C{ZI|DhN2!;ajT zaY5vxELY*P=4 z<6L;I#R!c4kkq&xRsXUA>hfr$|NCVR17Ki4HiEA@U|EQ;cdvb}Lw*>fscuiHi>vVpEwHRm{-H1=H zxX>E!KRt;5BIDxCUrA1Y(=w;f#O=p%)H z>(-OgYf!nD0*7}G^!qBVD)~2lLL9Y3*K=>Q1VV%f6DuRD&IrpKS-^VEH0nJ5pAF)B zJ^UnJy`(XrCrV@J(Fg=eq3U(&?&VTP#a|&h{G*E~?sp?MptF{JPfKw2(c;L92COBz zPUA&Z$N3NB74XV8QZjA617kw&x}z7R1#MZy;xe>pj0|SqKqr8SRs2;FsVhRz!bO6z zm;h@bY&*F zm3EJL6LP!6zfl5bD)ibD7v?Xx5Aybw zAS>rgC7)Tb7QM6ZH?KvB`CMZ~SX`!rhY&Xrxk0^#c=bI6AlV_p^1p{Q>?7DjZ`!PN zUz@9QA0=YwDS+Dium^;B;)lmRgW3zxl$+ud<$K2usrN7_?nWTGTzIxum=Nu9M1j)G zcmGD*+U2zxEmLw}>f3~-t#6|;NAXo(<5*y|^IeHxO@$}(fRH0=J2_zp*PUApZFh-4U+?J;}avZGBclEr<>>T%SDU>Wci)CY&_zd zZ0-#iEP#%Ft~g@=SVzWF@u8P+^{-{>5hHAvh?yCy0J?wtMZ+#_#uci@zL%plazCGz zkN6^D)|{f+Yosr3Mlq79g%+!S z?^IWtsV0h~w`E9Q|I)V@`*U^Z&w%mkgTBRC-PeWwu;)Kl2Petk|9i5&-x$kNS*YV7 zk-nz}M^g?G7(dcen`HO&TXTjyl`@KDNN_AGd0gTcw14ZFl_cTsPw8E?rF&FJh5vCR zTMiNJS#=fuvXw1oW{p9e9L(_h2P3htgo38Em`&q^{KO%1#o=4|wL=g$bqXv|0fl=u zL*)pj6~`Bfi^?i#aZpDV;rT#c*@i7KaIqMy9-isrZy=!wRy}kykT8w-FsSE{yA1tq zDnZC86J9<+a~rz`_R!_j6~a@P2#__t?wOX&b)64t(s-aRl|Uo)JJ{H}!*8nk2bpfg zVahYExoGK!ZUlQ^x8Pw7qSbhIA^kjUpA-s0S7>Lex#{Q)dzPSH8SjSsVzsZJu}$cJ zK(d&U^CjrXf3SIufEWQSO6Z3OU^t2Q0u%S}F-5EnpFKTY!wxOc05vaRAk|lbN zenb{dHmqqfPgsw`0X1tvV{a&1g59IO_e&T^RzZ`NsY#P2c4Y9g^#uuteo`VZlv~)f zQjZ@W6kFFMpj?#0?8V4pSg|ZEB(RJ=l}yTXknh};TUFJ|?Bsm6h-eqLTabhW)$j-f zOLm7euvsCELRJmQDpwk()=Y>#6eNQ*-XbKLG=SE0=&(u-Yin`@ce2h04}W+XKzIlf zM*=O48l;u`S}a`h1;2f?Xx@GV)o8P~Wu1dlKa-N1E>c8F2rHGdR$4mgYW{eT&v*5;qrp=*hXCLxB=d899y%4wYG>hGo)ZOSHw{tBPO*$s%%oEjlbSD7uQe zbX3Dfu2^hz*SeRtS+;!5%F-m-b^ewX-c)7`{>9FhuQvMW=t29q>Mrg*%Nw{~i0S0!IgzRm z@L(0ebW<3P=t*4|t{2$XtN+rpyHFh)^PlF0b7H$EHPDk5P(w>dPH{|tKr(ZaY~n(g zdz5ZE&ZOWX;@h7#dwcF+_1eyk^5|MyOzM@l@^9SnW_Ec0$N9UYxKG5bAF-^@R>+MpFn zYFST;e-splqoa2PK>PrD^1p~HOis=W4UpK;V$W=B7}IYK+};Mb9p13;nsvkhJo^PU z1{BJCZbQF@GGYYFbSETZk1O@W+>*7$%r%E3syh|G?iptxUE&%aV zGvzv~{sg*Jzj}}d0R0|MowCLAFeBwlWF}$JET7fYBbfQ}_dTV|1q9fU;YHHbUuXGf^M2jG}`H zs+xXV>iO(R_xKZU2V!-vW{X%7w%XSZE;jZsc6F$C;EqN=EkM!Ge_YPlM4X@ZS1J|~bY7*2I z(_Q8as_jH3I&cOxy;dUFW;zr*ip|?KB2F*B2>$4Mimj?Fw}*R+;u={vERthz1dTjE zAPqUOKM5qB8|Q%N{z0LNH9f^xKzn!6dl*0+`)QS6&yYGc@kWajb^`sn;zn**8BsN* zmiavgoA0Oa>8T++yB{P_fN6ijGC666N|a~ovc$>&s=!mm!x{WCu9-vZ76DKVpr6{r zb|m(17TMJk&bs^1-IIjo2Xy_7)xCuWiLq!#&l-Cbv3S&d<_Bj0HBKdd%0CioP^UJ& zT_#R{ls1?g-!0MeOf!ejIrg`r%@O#Z@9xeo8kZDhQysUUu(4bpOX5S{WtRGxEm9eo7v^H26MpuTda9{Vb`#xpcB(8(pkDIXvn9 zwJMjC9as|U+b@%t@)uEo$EA%nT+B@8W8qE98nd^}pK@sUkrOyGb_OQTaY_qr5> zvVX3_0~hxaP*GsvJWWA*a6dD2 zAPUfzXXEO1qQ&tB;zgwU6X5%z!E0|8oNeTOoyyE$|Ar|3Bh2*WmDjvNb}4uZUwvZM zoy7w#I&7Df#V!=H-4zh=ELpv49%dj9>1erBc-?B~br{|{T^LPzzq{Pv7A_*9lDa8SuA{jtr0px`A?V*To#x23*b=n5AE%D?vWF!p8R=a|$xOGKV zc)v{x+~%m8E@VnnjPuVuWRu|&u(9nL7&FGJegDFup5H-d+IFloQHaLxFv)u@*@;6X zlHXk@{oSBr3pAi979NJwOkcc(EC%S2lTB3uP~21$Yn?qVq){Y4mY}Du;xQ!>d7OVc z#;k_fKI5izy|vuPfg_%CO^O<$QOwSQ8Vn~8*T>Sd#YP6Idlye+63V2*D+aWN(!ZB@ zaV8y2FcpuQE#zQBvyK9C77mpNqD>+5#t84`Q9zTXaN3E;CNN(VT6R>sj;O&OzG&!< zzQIBv)PG32>|j|@brc7A;9Kv|HN*0wpvBQSIpsjAg;mk`>V?eK!b971Tbq9?Xr1l@ ze3c0)I|a|;M5z$R@f5QQHTXvNHo8zHm-GASrS;NL0}m|4gEwa|GnZwVRBMh{|)oi|8j(8>=w^$;YI$I2w?UIo3p4 z@?@=$BvM+HCJgotP*2{bZDULxfKVx1)H?MOOnZf1D) zn(a5om2fz8h)d9HD?9#{j2b4vPVoc9`i(JhdiiKmEykb5lBCX5U%VbTu!|7T9m(6RuQX8_&`2D6R; z28ugzh=h0`14JLeH+m>KzwI?TJy4kG+zji$0QxyZS%$B{{n9KxJ|3`vZJ>dR*A?~_ z4wqYrfKxTH`RO@Wo?-AzLDJJJ6R&X87rq%-rJ8q`+`j9#p~32LIYeM$wY!ridg39* zf`W#7JeXcG=(z!i2qgn4zmxH9Ol}b8OFT`SaMS#Rx;zGWJkXdJGV|Y!jwtWMs|#V$(neLy(s3nkNu}%EpC0i;PiBL1o|w^4U;i=kvH5dOTql!f#+s0YnLH|I+3{P&u~AYJ5U*ol^(XGTQN|ZhQ>d(%!>OiM3== zD6W7LCXGgOq1#8ihKZFo1rm6nQZw3QVEKs*zP^~0@ZtXvR27~&=I3BsEk9fnWH9By zI->FozVa+^Ki3wgMpDfHzmYHrIqqGMp{b+9gTWrq1t=$AunTltnSY>$*Rh>TrkPb< zL}A76HfRD+NSw@Lqc41$R+{f1i!c@M1Jsk?bCFkpfU9dMPgyNitIS3LA#sc>M+qh%AUz zr`TBrZ~xl`%n?L779tOtQ6gdLQ0Jf2r9t9pn3^y^iF944ES5lBpt8t`WNm9F|I260 zGh_Ki0)K(Zq}k$;fn3wy2)C+ST5!yVqNVDNN$il-A|`|qz|Yu094YY{5UyZm z4x?wL_=7J=hxi;wU-pVu3`8ffR0a(;`vN2nsrREIC3l#Pu8~HIM5(Am+y@gs@}+y7 z(r5D-Ls@=(v>g6zYtZI`vNLKLZYt^bcYoHIj#8F%-7DU6Qxo>4wICpG1hI56{ zsmmlFsUmUW)a}5uW9j9Up(r5j+Hkfhc%M+wOeZPO(VN93I$70gM9Qvd8*v&$+IM6J zKjJ8JFo#x*uoy_v#6+B_Ei6<=exH?K|2`i6NuMqt5HITI3HpNgXk^KfqgYEpZ1OY# zsSho*^@t%LHh;sE)FgBopE3`Xt27_`)w>ttH2oF~rA{9QBN=Fw5-L^|UH9l2txc9Y zeD#8N8Sw->OHbqV$DW}?gzWbZ?_yYOc;|IMj?r~Q`fECN$1ywjH3PA?RD`%~N^$5U zM<#k(%+L_=ZS57QzG*6|=R3&Ei$GJOL~ME%Z*kR&a2dHQ^v9WwL+-cUsRLeqJ` z3*%>^3HYBop~IC4dVy!53K!g-ZXekWD6X8QFCNyqKad;e`jTb1Ue$@AUv*%4;Dv}= zrDAy!gbyc(-Jom2qii$YIBdc??gC~wt2inXJZU=1(ToY@^wr{tDC=nW)Lm3=GE^2$ z^@IcZiS#_}xc96N>+7D`G&jEvrKcA}Okz|1IU=hRMMmJn^ES6yera@;XwW#J@3?gh zh*^`%JJqFj^}<9VO6i@xMBhrfW?Bx$`j)9aknt%NBI<<|^KmsfLeIaXZX)P*fjc&@ z*J**OLTRkV^%QHRN2WTt#(y!qyGD3&h8B;c(h&q&Lv|iqNz*gN=86T1%v{`;^}8BN z*@L~Nbf8;@Q;-F!EyU4F)|#B78kLzphD;sda5Sc)*Rw|!Yo71@vx-|)rrd*Po8AA| zv-%uE>+;X8IAOJFe{bhoN|PI<*leA%L!0Ff3#?{*_hcLg}!Jw*0 zKM}i}f*Lr+TW!+XGsxckwGK5X8F1iuTnxKAHmdSSI3a8iF0Lz<-EdE9jltZp(sBWPB+{@=gR-UgjcG@8`1k=tBz z7QJo02CV`Z&U01pgfGm@Y$rRr5@%*M?6AM1+s=6ShwX@CoYdXDOX7ktixX>JmJE_l zI02ZkHs+_tCFf~}_6D^fB#exMU?pGdq|pre@;bVpOf@B!(38c{be42UyUoM> zPXmWI3nM?6Q|@QI>0Mv&-pdF;ffwUh9GsDNG2BdbJ}L<%w?Gw1rJBp~QT;w-T&#o#A#E-$8<1-Ov+3 z)zda)y4Z39h%`xK5avxT8&+cOTXr#z1?Y=@}!c$Oi=iAD9!1s9GYmQATOqu-vHu&5&fdUXXg}U5L?0k+$H(_XA8|6a zub@1D6cW~>>!+RcIYcE9vpMaM5kT;i zSO8Xa;Ot?#{%kjiTT$6Wr|^b()8a@WVCFCTeT;kTM^8dEB{$`lgoi0Q@N77t8|!!55Y&C;`Hg|qclw*i>PM+^1xG&%;YI)x0aoy5S?@tT`3c z=+2=;CyH01Z@)ydfna3bBg&ZM4Y^VtynCKNStM*yJ2m37laOwM0z|Qj!^URG>h_d* zIG+1fFRjIc^$Kxc_*49X6_!@l2&ZnfI9_dSq^0E|+MACw_{yWuHNyXmFN=Br>0zKf z+K7ah$9lMp(EA)oe_p=$mY}O2He0{`+tacKXgIs#sOh|cAbAp+P|9qjHhy(Pk&xV z0Fb${rA{+Is}c-g7X!(8Lqn=6`*&C^%mn@DgcO){XPY1F-3h3(M(qpm3U0l`)ma}# z>7)abXRuOhEvIdhXuMx-|KhfQU#j)7RfK<7651ozj3~WPWX{YD-@8pez5IvjeQ*z% z+ruTg07`+pC|FH2I<^^}bP2P8cm?$REsBAJ2{iUaT#-Z?CzO`E^t1Xl6?#fn@bl`mpeEmMTlR_=_?cUnCZ3cR9m5{)Vd)_%8;WS!h+UZ}fo!oi_$*+YO}k z7U#AGW@vOJGFo8XExCnZqgMo5C`}Vsw_jgj9#IfewsSK+sW4?V?!#+SeLb zFdrFV#bIjCk{Uji}~7tR-=apsy?sDQ6%GmU|dvXDZ{JtM;9PA_=BoT#qpsoRM1I{Xn;T6td zXtTVgFUc2S-d?Ul4s7n~`fbb*`6@Z(BQYTyO$G1~z7RHP?SwzNO%`j-#QRsovrDzs zlX*N$ke&fD!M|TXqhJIbbzA;X6AC2PnW1wfchOA$0 z6m0hm-QqotVT;c{%1@03QIkU`HGcVsqNyA;jVCz1W3-1Cj^UhHrR&>RTAU2G(*INY z-fp-ox1>MdKrCK(>d(!wd{JS)!vSOcDQxcz2Rs zlBw)5qL8ULx-SN>N}ryYsFDLK91!@JhNF>lfsF>Lw4s!Qf&lk7C`dlk2RRLe#1fs? z!cv$40ggbv)TboxV5_q&O;F)7*1%Eylmz5W&}+)P=5Lk( z%`7b;w_;@lELoAuT^GpHcKOPsys=ZAyZl0~ey=o)spYdMV-4tQknHsHES*|$QNMAm z@3dx0)8b&|S)O9i_9Gq+1Cx;+=y>C#uwissO`wNg5vKo1G+=6w3jN5`w&%AX&KFs@ zsFq_;5M6L!h^%B5UZKX>ki^$3doEJ3LIC|+i0_hWI+r(G6HIE3NI)71(^bQk1dWeC+evD-(gWow2`GRme&#-=!p{8 z#)AbOH%lWa)0C>e#-r*F)WiZ0Ba;4F zPLytDnFlRz*zP)o532IqgN03NL@4SsL$v^b67is%mbG}MaMRh`2e;K=m~{tA3T-=( z@}#O8XC?9*gL>=N$TR9ob<-rplonof+ak#CaX{-A`E2kXQ-LUFQ;0AMDS^b9p(V$R^9< zb2YDAEl2Z6^CLC;u*tE8b_vz`lG8cK(sy*KHi2hfuSU*?hsxk%Q8uJ^YeDz~d$Z@)J+c5<+sR&D{6wkZLv4B_|h=A!(J!1}rW6Frd&waWk-6Z-}S zFOKnq-aMATej^d$0gH+542#e(=Y}oPB~%|j>gSpx9WmW8?CtNLyB1rgeFT=k^h`~q z=V9+eBQ^q}D9`Eycm5vc_h_804l8X}Xm%OUlgKD8r^!<@a73}L&Wks9tt+(mL`M{;nYlg`mAbEXJjp@UbFpn6hvxWHfzyXi zBUvryQcJQo<%}nC;}XeI$yprwv9)a4fj}+O1WmXgaB`*qO}G*TqF02c^NV?pvMMs` zid3=B1stGG2<_eJo{W>i4WeiDBkc&WV-)gYAylJ_DWCAWMXrdcUos(nqb`5ecLgwm z(9R1^gFo&O1=A7%Xf)6!ILGxZGh?Fmo00#51M%y7?dVD4a*$;O=FFd|HJ|^*X{f8* z?Yx_;JFrWt48mn9HwQ!Kd5{-Y6)x&TC#5%t_fgH1qb4+j@Ver8`9*7gtODQZP>LqE z3Cn-ynJB#!Wn_LhdOdCo<6Jn~V|1T={zccgO5^*Q}iC=;?eQx^VyH0%z;B~AH$YICAui16pzJAC}m++@&&i)YIiI7i9c9%cwU1@URwC%=y0+HAgA zKQ2JF|Cp7QVTLZfc{Mq?)NAH1N-d?0PxYQ)wJR9b)j%wi62mwb%s_Z}-8ca^4Bgyy?V;ZawJARXC1IkONCS$mokUPBWf!>YMajqO;a z3W$-8jQ@W$ol{^Xfzqu!+qP|U$L7Sz#I`0jCU!EhZ5unbcC5S4Isbj=$9}A? z>Z-NYH)%Xlp$N7UsEzzZ2nv*Ok)o9kN(S;Z!-K8KGpGqe$Yoc+=;jZeW5Svcg~6C> zcW&K>e`_Xc^6nsdvsmerbLRYDa*AvXbMMa>#s@H8cH@s z(Ai@TGYHT@^-k;$FHQMGX#x!mOw`9Y0=_&~t&X5$<@2>BSTG^yh#cMj{eGF#-SG*- zd^%^6AHy=A0mW1<{lC$SNy(E!^mNqW#S1<>8jTnG>(}f`G~mE)CC?vCdvD4Gqq%U; za5J7Dhjg+K==uyUXIn-D{P5vUT;W!CRwPVC$=#QGeGkw+`okq}a8w#Y!*)U`cm)2* zVAvLn*8E9*{&+l-0I;Ql08^_()?(Ng7?AkDl%W(^(>*)u$D!M zvywh^fQM+J1r~1Ns6og@pz>U^XU!g3HklN6_{g39zKL4*L3@ zAarNO3Y^jrnz!>zrOpGLBjAFRCRB{pU~DIdn&3pMrBwIhL--5{-~UUqLZ-1*cLqd1 zIYSjDsi zVTG>@&Az-lxb^rfGMT%_PT!g@F^LO((Cxo+?f~79LoxpTge!DQ0-vnVE6+K4I33Yn z=`e`7Z0YgzntS@)DNTT?D?DLHc%Hv~B`S6fx#2l}z2_Ay;r>#XH?nU^hOl$l-LHeZ ziD)-A=|YIDKHE9zgl&7dGg@NAk;%@edo)@v=*;#lf%=D3VAl%EliHr|&`F@;>_Sw- z{{3>RBEO^?UM2E1-`WvQ1qPg*SV@J2^YsNC9;CS(0A3NkGhOaWeZFCZ{BLrfiI18Zu-) zw8S$DUo)1V!UO~Y#bcDaTd`51bbG5Sxz#dtgql+D*=)RpbA7|Cw3b6`6P9dqGewoz zk;lpdlvJo;JP$(SHLU_joYjr5^u7`A;uF`51nL&ISuR^KBNP|aT}5P7^1R@WYX8^{ z6?2^|@+tF=-M(vKjQ1gi7DZf^h#)RRR-uEKvLDYko57?x%_bt>gqXYST(MZdQc+<( z=d+IqixZQz>b;8j&rwdeOSIu^K|CLfiMxV__s0M`(vA)w)pC@ZZM7MkXXu;8igaEH z6Xb=3m%#4K*55+rQKlPGEub8=q3auOmFFMNlu8j$c9eFc&tgR-B{EA-EMO>&DEN7v zRw;$+joSlL4>$IJdkEwqDd%)MGYOko9Re`zicf&)bfL;k{Al0d)Q0VB??3F`1RSjvxvE04Pan=li!sYr7ek(!m?)dJx0A@azRgcMr`L)+&hmZ?> z?dAIpE*rsM4u)pC!Gfm;(|R*aE=``+x=1P zaD}mDGm1F}s}@ox&f$`7zFqAXiY3z3yCfws^Ka2~7Nl&KDCZl5{hNaL1if)u*Dq)W z!qdjMj<71CXT3gVuv+cizY~{Sehin87OZ^7S}`YT6XOBO3WRR`9<^k1{~@8)6;5H? zvU8Ce(E9ZH)c%AnpwYfh&$S}>JM@7Uj;)v9c1jAx~C~XokP+AQMk%q_V(@} zcdY!9`nwg>yvpwZr5{{=DDdEU5u|u+&^!g%>g5pJbVpHkN+vvRiQoz^*}wLSW`e%G zZ>|~JBuXJP}yP|+bSY;F@NnZ?(dRUXYtDa5WJ^lXE^x2h$d~Gb7lSRI3z$*)`8JJ zaEjNkjU$2aB_`#>sdr8yCgp`=feFel=fp;jqA)VY6rDIf3s!)qpKZ)y&k)DX_xnwN z6LM1ctCBb)m06_8qdA#P+%%B-jYhX8zl|KEyVhS8!;hD_(o_2nej#H`xbQC`+v%V% zeH(@v+^Mi~G0uJpPVMg|f@HNQVRioB+hers06-OSsTjTLc+Ub4igjC+w$eH>WC{O@ zCm)7<2IcPa9Uili6x_Cg#*2;VWgBAAp`4m&eYfxO{1jj_Quw&GlMkf@QDU=>`e#KW zRQ{!EUd0wZkM+CJWNi1hSGl61sNSJw?gzrRwkxlIJf{DqA;&u?UGx11Jk`wP1+ug^ zc&Zo~8QFmZuVHczL*oVe_L&*gaQ?#)87;)4iVBnwKmOwr31*Jp&HaQi?M?-wvz%@U zz!UI)dBSSfq{O|Jrwf0#)rM4*MoqdQ!xXQ2=kB0aUiiN0=7t#eSDCbCJK*fuwIlET({i$h+F6 z^|5ai__dAeQQ-xn;5^BRz>k<(r>#g9KmS7Gx{`4Eu5Yt9L8uedXs5d&6>+f57*8I@F1#{gViK`g) zn)a3h1j|lbf1|+)E#6ZIZJV;f%9IMp)Um?ONs0`+Qo@=)icSN+HPRE@k#k*st<;;# zH-Ex1$d5C&g)AFX489510q0Qkw)D~l*Sq=jv*a1SVKrYe8k^q3%oXzXFwi5|lgEk} z(BQT$DemB0|9r8{7RrSS{$Vb(d`s<9m{X`5b3o<5`6Jfv{9l+q}NUFQ$a zCf1)(?a|+_Pb^*i zfPg_W56I&BJa0mfJR)hwv2m-%rMTk)HX6NKOy?ncD>!%AqmQ2IuVGlk1$-;iW&Z#0vzukzdUKyQ- zR$6NW!6m)cQq)(W(T5OaIK_3Zn0YpS1Y5#Z=T93(!;}yb91U7K0y(~rq(n75-<)ai zi3|C#=ITX>XxZ`RSV)PBS>Z||=#jRI*~UQO5=RCGmfI63=qB>YlbVE0zHUmSD_@ic z<&o6;QH-n3k=7;=IP~$1Hb#+8Pu*3b*Z)5D zD<&^*4aK>BGQUg>0%lA-uSf^x1yXrt_CBz{nVLg`FtQwebq)rG27aZEVNjsOsO$_B zV9{gyBXlazVMpwo|Jo(wvu`p?MQ-V2xF;3rOS|XuId*C;PDrnf4PdoLJ3PbfORsNr zp}Z{&+kJa})-utP4x&iBx<&GX-Sh{Ans5S%+f2=;$b-zk8rmX)-mCv=!i2ko%)aWk z|1!h$DE7eZ5&SxqLG;ylrPi2_ws&&!;&TE|v(l(n&XtXEb>yHM5&#Z6mjbgH@`Qt) zChB&MobC?gFBw%QMvzlKen_ZGnp)*gFeVerEaR^o~~J%1>V;{0g8o}3zLch412 zY-n}p7nE>@DAWVus~{MPgp7F`T{t57<%cPk1ChlrHX#6a@Jvl>;NY$lr6oNW#O>l* zCoO1;xELwA7F6hB_r5_J-t+91o`uAi_8QRx9dGU0E*R?!*?28;+&58%pLGW};0ub6UDPZYVe+*%Y z>s(%?J3dDBqmtMKGpuc{(0nk&>h0soyK5P41GA^ls1a<|UQm8PcM`;sHr*HhAJj3F z=MU7b^tr;*T)3xZsiIcq(o*ZW0AU9V65zaYn>7!fFY69Y@>iQ0Nv5W8p&J=R<<5N_ zv2?iK#dp41-h6o7WV!eD)2$-yzR8?Q4%5^25jEk9D^K{8#iXaW{>}^|3OFYwufxb=(-&tKV(? zYeZxi;0bz{jqLru;k;0Sb!A!j^G0w1hVovPPP2G@%jKls6Jl);xzPFCtm*Q42Dh$eg4)av^76p-r~Ub zj7^`FD%wVCNuj}i3}|TUA_gV!`{=kL!o?`lI!bEP@amIV$0y>#>M<S zl%PJlSsk70u>VGqTyH9se1TYHYyW7X{tU?m6HyDml+z7&V{i&|N9GUcFUf;9PNBVE zL;x}-W*C^0>J%h%T7N^Y{ZlPexJEb!J_?gDH5$f`gN#NweSDhX>zL-&H)@NAg5hTm zI8VIb-MDW|MD&nHmj~$BT`__2qmI|t;!lut0O3=}rx06V+cyd>Z?N=l(wc!nYxN?q ze&`pMC*JR*qp!!Amw|>e0?Bllecu+ohlg|j6rFdYB5A-fc3MXw=tMThuvxilN7i@c zhXq;m_qx%)1-3NYbAa!PtP^%+ss0SfY!Y=l?%#AR*dnRog0c=7q$==3|IL&C;Z=$E z!EU~EH`?=g_dm~u@<5kNZH5@*KFV^L;+B>AmcY!71!Zds$m(4&g8Ksp`JI9iRc?wK z8k(3m*(Fs8Aw0TayZe&8fwi5t;d7#r|KW0LS@GYihNiow<|FzeukR@y8^|Vv$bpy* zy#9F&dy?4b7c9^PwL?wk5s09A)j57(cn@2L^1SW>coAjeuAmi<`xm>@Mv@sIV^1lF zFQ_kX)K}#E5%6F8L7LC0J1h2l-*}notorF|@kz(+_xIbKK<%^x9 zpkid!SIBez%W#2~g1pVh5@kf4P!v&d%7`GGnWYL6ntWu7Z7<@95H8KG=&UvLm%lAL z=gU%ZI)%sH?0@@Zq~&PEboE-A`q}wJXo4MU(EBqp58N^6|>p8v+U%AuHtsGgvSrhIN+sv$P5eY^H%vDm?6Pu zoxxlnxL0fdTYeg(ycmvgmZYpq7?ZK&h_-+c*)@$h?pCk~Yk4BEcgY-5w9q+#$Tjs_ znDXTELlsAJRTpF!AKlL=e%m6~_JaQgqVo~I+tVb&|dq0jZhXhF^d0@^rlJyD@`=Cwx(kxBsuCD+CAY&oX$ZK zk&lFqPR=eOrDFF{1&8&C91-;q#n?sV*D9Bw&>esCs-mw?pUp!IZTljK5 zv}%EtpAlo21zb=zrF?w8thG+@9<*7MWVe+_@2^E*Y4%%7L3O80__RFu1TUfB1m!Ga z2-C|%$PXaaNLe;E?SdkWBAt7Fd1qt%iM$mMtBsfwP=%$VwzsQE8T^EAn?-&?eD*V{ zGpNE4ljBl*0as?44jc+3S*z&9k|#3ajBrH+FzF!e(c_(6|6-RrE@ zco^ALEwXMDVcCG=8RJG(HjVu1OA%YAQ`sHYF^97MS|cRvhaLHjnU~l2jl6<;L_R&Z zw`5kV`j(PgKaRSZXTo*q0A3egfK}C^u9%|X4IVquJYZQ&7p`=*fTf?{epzq!sR#95 z`@@nhT=KoabwN{695Cv^mf96OwV*kR^Ff?}YMy_0YMV^IC1G%hineG`P@W!HE`d^h zYDHC{D4}hKLvsoc)2Fk>K?dHDp)GES%iH`I!vB-?*u2j>Bh!meL__I*=--4A`wL}Gl{ZV=2Jt) z7HoEVGyK1LtqCN12q0T2B)i!DG$$MSG3pvJnnWqf5BEWu_$9usu5Kb%@N;`GApR$t zbaT|k#zr@<#vnN6sEC@A91=#lRubDEj%4l_X2hwU86?+Cx&RX{8 z_ej!zO1`nfopJvhckx2R2j|doLd3gmrRd6xq!C;u}Tc6Bt$dYpi#R zKkhi#5Dpfh8uJF!9o}^#Ek{3%gy)38*uB^4fo^Qugiapgo}j7|+jeOJH`y&@U`I>S zW*FsyFQk0`b4}vN5i};M%`2HaZuw^cu)89mW`ZvutX_7a2}ITk3X+fZZ+#II>EcK%8#p>DLh@H@(ovhMp;fz9Jjy9P;*ur2ZaJY3&#f~=zFm=e$uqmBX41_~uWLG*9=_V-q?`+`i23IP#@}z_JTHZmklz%$E}enNGYoa$9|C$`gkO;pTVv+ z-*F%kyqVx7OKaTYyr5r2-cFTAQqS@#zM}q@0&j?)Zj%1whOFG&bN^tE%2;Q3)8vW=+)h-rl-h+ zSsv;_BqanSORj((*y9%KG;Eu0PM@FbrT44 z@8Pz^C(|a3MNV>z7-_ZPYBeAyxok%2C_dI^D=^oh`%z&^@L~H>VL!Cy#7Lo$XoXtJ z-29I!+djX<30imA7BqP`+tM0d;opn|YHIaJ-Njd95HtLHEE|G!?I!YjdGAzHaqYUq zumfF>M+(n1>`C~(z))R`Y=Oy94By~uipR?`Dgh(2klHS;UburLz1LxiNM+jIxqeJB zfSn>$T@2Ck@V?g@>+C(9%e|AW*4TehM$WGM8Ybz7Ql;=@Ug%1)*T!4L4f1e=LS_F% z`48SBmOvAl8FqRx;eT4u>gY=h>>fYZfat3|xIwT|x3mCLJ#NDoTBBBfgmD%7IwvEF zD=~{(X)gj?2{opP?g;#O>u}jqRFik=7mc`U1pnV14*=#+M6q12*_o@ssirXDLLMGz*U^kHVqsZ>l*0>ajJ?K z;p$IIVm-9NvQv7SRPlnwhTZ5HiDnw z8|dvTO@0v5hJH!fngV8v0h2z7j*u54Y;vV*`Gi=%GfsujQVcMrXET9aaJ^f8EbH!i z@m~I;@i+d+|5vCqC{A<{)7OHx^jF(Nl$4UEokTZs@gBr-**qzW6`G&&H;fVOI|m2k zG5yzRUkN`6GBPqeE}E8$<{9ei>vI;zo=8cUOYAn=)H6o+{o%Izn-XzXIN*d1j--

>3-JXP1^3y0$N-5uTzF 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 literal 0 HcmV?d00001 diff --git a/assets/images/ecalc_general_consumer_overview-26f2e87a69f9a685f123b818e6bed313.png b/assets/images/ecalc_general_consumer_overview-26f2e87a69f9a685f123b818e6bed313.png new file mode 100644 index 0000000000000000000000000000000000000000..aa408a4e5bbe1828b0b13d557a07d7b340f08d1a GIT binary patch literal 38869 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 literal 0 HcmV?d00001 diff --git a/assets/images/ecalc_illustration-9c9342f8d3a926d760096a17ccb76556.svg b/assets/images/ecalc_illustration-9c9342f8d3a926d760096a17ccb76556.svg new file mode 100644 index 0000000000..9a1d6fc639 --- /dev/null +++ b/assets/images/ecalc_illustration-9c9342f8d3a926d760096a17ccb76556.svg @@ -0,0 +1,4330 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Energy and Emission calculations + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Injection + + + + + + + + Drilling + + + + + + + + + + + + + + + + + + + + + + Processing + + + + + + + + + + Export + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Lift + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Power generation + + + + + + + + + + + + + + + + + + + + + + + + + Power from shore + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Emissions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/generic_unified_compressor_chart-ba6f49b5df22923cfcbe4d5d2aa4525b.png b/assets/images/generic_unified_compressor_chart-ba6f49b5df22923cfcbe4d5d2aa4525b.png new file mode 100644 index 0000000000000000000000000000000000000000..1539208055f52808dbf41c157105db23b214f01c GIT binary patch literal 43536 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 b^`E(9`39BPkSyTL0|RhVfS=1cr-UW|D53y@ literal 0 HcmV?d00001 diff --git a/assets/images/interpolation_plot-d4eee4126032e046bf374ef66ceb9946.png b/assets/images/interpolation_plot-d4eee4126032e046bf374ef66ceb9946.png new file mode 100644 index 0000000000000000000000000000000000000000..a73169a2d68a331d534865d391085d6c158cf199 GIT binary patch literal 16617 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�T+RaHT_$QDCP}4Z_^s?z1jCyA| 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 YOBFS4pG|IECNG(CSo2WkfzucMAI9d?W&i*H literal 0 HcmV?d00001 diff --git a/assets/images/process_compressor_chart-28c5f110972461aba840e82b0962c3d2.png b/assets/images/process_compressor_chart-28c5f110972461aba840e82b0962c3d2.png new file mode 100644 index 0000000000000000000000000000000000000000..fa9815bb08e949f71a8ae32b772e600f24473a32 GIT binary patch literal 66545 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

  • 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

    9Cc{z(n$lD^%LlNnJBeGJI2? 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

    Hq13(;Pb8auH{F zF8NJM-+4McTiMIxA?j_4d}Z3=G6KL-H7sr*TF8Er>Pb{weY(uEnt9p|!2uUSc|rtx zX3Zeibp)s5I=cBZ?M^nghb3Q^3|S99;#SQi@Q;0f`O{ZXH(*gQuqa;{wTQw<&%v)qb-WZBt=B3omZD^px_5Z61*1(52)%e$ zW!GU19l3fbu1sCHfBFsZIAc5v`=La)AkiAF3gb^JpuX{dKs1Fqm?8N~_L$6n zf~itVCI?ZtrfiE+nBwDK0IvG#mD*|u$09EuJbl_NhoJWIsuf3P=>cf;wxuyS+b0zb zpl(R%9-*?#9n)uRap;5W1^FU|t0Z5gwfHk!AW4!vB_8MUlIE)I$njF!f~*wWa;Ys8 zN@F*3ZLdj{a@@jxwMtVB{z2&Z`LEjExkpEYfa7kkk=bW0b3fi&#ykj;<3!NQ*q4?B zUQbYx#z$~^CiT#a#0JKfH7YfCB;DR4adU6=&ZFML+ctH?-ScG`H;g6WEZ!%`HBf6l z+j@Imn=LM+Qga&maS{4To?sTg@rYj(j?a9n0@99ehIE>J_D>HZvurW$1|2yvqfAI? zG_ZxHQ-m{0gnH**`cFcNG9k^as^3aY{evz$w_3L>wPf5=j1DLquS>oE$$R+JkdwKN z`XTWjH%pu&td1&uP9T5VTFn=QAAozrH-X-WK=QtlfN2FOy-th+PB5gy9#$1!PAMXU zvmLd?23f%+K?a*Tty2zOu=dqE)lC& z7M1mzl4J<%sARCCehXkw{h|^^xa*sh@;p%Au3Xls_SOz$%DNL3W`@t|?CwWIt}ZKC z5fHF3-a|2F#m1OD>!_cAnnmm#GXEAZv8HUukWk=d0z6H27Zrrk@T>o@;P%khjE`ea z&eirsq7{A<9K#jByVzaqLO4ZG_c)n%B)O;AK-DM82c!C-auPA#gRzx!$Q5Hire+W= zxd^{l+(A6s!x-YDQ%IT((46S?F=vw;LA$TF{TGGRgtooANE1kP*tR)6(=%yytFelb zBs(Ki|DF55t1!jKi1%l}odQ~uF|ovx;59)0mZ?k*!NuF^aMB$OdY^VOw!x~({Z-H5 z0w~s}z6!GeRywZgR`7^?24_$pc(nJUav^c|$Zk^>$=Ee`v}*)xWZV=!u7w)UtHJ~A zMv4JR4ZhpM=B;+LfOqW?kHrw3&hKw`+9OuE>DeDMs?u&8Ul2Ij5MQ2mda9w@8tXG; zDc^z%HH|~DY9w@7y4+OGCRb&!c>@U}s@dlBNGOe6!_cSK$8UYw<8Ux{C-5LoTmQj? zZ{7{#Te9`)yXojB2Y2RmNX{3B>c6*{zw^$AEz1HC$Ri$fGUd@yHYjmQHJBqNOrtur zlyhQaGj9OEV2;)O8N}E^qcw;TY|M?z?GB}tXt5;)8!g_|)bBBl12%}`O!b?k_-JAM zipQY-==7geB>3+z?)R$I->5?N_pVw!P2RF}499JgoPvK^43WS2qM(I3k4PhJz-SUJ z;Tl0!ni{shyz1A9%#+=1TJl&SRTbm9dNQ9-++;VGpCv@Ep2*%e>0cV0?%swA|Di1u z34;x{(Ur;1rmSc3fBT|9qc$T3!bh~|8N9dQDr5n*d4+jEMJK~dYTj>ok<;Xd>O47o zE(s^Bs_luCZL=?~hIlDf4N66JGPQ!9ymRLPBF(eg^x%~ufAM;_5K|vhfJkJbE3VlHgv{) ze|>l4FKYZixe6eo#QceXO{p!P$$``~#+LL!i5>ij>O&5hxO)F1g96zKjInK zE*Y-Q*5I6pZ`%Vu)YxXO8(p0u6l?=n9*Zddk}nDcLk~pRd4a)&1Hw8pD5 zEM_u7h3--aqgxGDiH)CB_7hRmVE1(wr>6Z?jCM8ijN5NL39x>X^(^=kcj9Wm(C8yP zHqut21IjCa>U32{V9bdHp?5a3I^pI>ir`32IQB8HwbFGsR+#t{_AeTGz3DmZG*ap< zrq{~#Co*>CIx32_X2mXi{k?kx4Tl0DU&%e>^_Qs5z5hY1+bT{?_0`Zv!#RaRgI~)^ zJ;OYVUx!xdqX&;l(7W4*hF;HX00z&U`#+%_-rRB0aJXyt^e*bPrd-wXf8L2Lo-Hsl zkb2E;OZphN6Drixpg$0D^}@$|invV}_w00V9i@5T<=YyPM(2~v`8{x;W^u_v^c$LR z#EjhJ9^ju7Jq|MRO<)CH)e#PHZUSU9vz&Z$BtvlIQF!EIQa4lA0a=)I7JgL3J$!}< zJMn$J+vzWWX$*dcgQLAz>*mMS5z*dVf(Dy&kngQh7otqE7e}2 zRgv)|9ikD`&P=G%JEi**&CO#xFC7de_Dr048o#VpdQvF5I&)lXnnXiyUdHIB*$)V7 zs;@t-PWgnEukZyQGX}y)HQXh~Xi$7foel_mLex^64vR6OO=7b{?qS%-vO$)u1i>P& z#Juwv9JamYsP8j8G!T5ZZ7ryxU>d|~DS@=-z9Bs>-KfwY1+dS2|MT~lgQXpg7Sa=t z?Mq%9WesDO^av-Ez6+WZpko}+VzpL-jrAM%jz#)2}sTDA!Q~oj-9rSVw-!C&di2o_MI2xKUD3ye*{KV5NBfy>0Em7E>L$}E+o!9 zyx_+X&NP==pFfHp7_WTJ5L1zhRzv{Q zWat`#6G|H<2RJACk<03G z9leoVRzSt^yPLt^$;}{-r$kbfZkJIQ>j-B2*2c7DK^Rr}I--4NDe)&hC@Wp!Ox5|N z<#DG&i(ll{(i!yHyU|V_eYBO+G+*q=x`sX)c5vv3WMabq8`>EBn_{A#yT46Y=tIzB zwNI+x0G5y&6{YUru=^xFLS1wvwcG8d31{9Gu(_SsL1WviEzHFqCl}anZ}l`~o7La$ zh$@u+)QbyrMJy$ZN)86nvVAa0gqCsIXeW)gUcQX<4tabCw zaxHlPD7=1KQ;6+qqWW)XGJuz;GMfV>0kV9C4XKr<=b*N@N8XYBV=sM)*y*M2UET+7 zd+e3;jQ+bzv;ot1P4K1Bwq^ru@v=J^Zk$<_Lt9I%U03GD5azF3a*>yiApm`Z&4Cg> zysfnnB`Vcfw0()F!e6r*Tp|Bas(M%Y3jfsi4}VbUA?TOo+5%zz0HJbED(a{s2)^Q} zqZk#!1IB>tVbSDc#Pf(_&I)7$CUhA9`!f!KVw4>rT)s*P`ULtsDFusm)pz(EDKiD$ z_3sG9e9y$WjH>QAEG!yH_sQbLJKFY_mTmmq=%7-ZgRiiD$YY8dq4TJ#5iCUi6IhQV%#+KgKkB3{2EP>5QAwYfU_+eQCd2U7cPaBPBcMPBuZ z)+&zJEWHO&QAx*`gW*D3){K($6igmTi({%+nV~dcWg+SYFxkNA62gz}mDtV1(LHmA zK3tXDi+FaDo+7hcnBeZ;e@guz!`AcU89AtqLPymG)Y#1D38EzNq{LHvX{ZC)#N5Dp zOTc*3PiPRRg5k2;!11CrrN(K4$0%BZV0xl+&gX4tM%#1HKd7o14D+`NS^`XE%9TV| z=#ykZc8{@))Q?im+ao}wI{wftJsLr+%KNJ$&cStk#zAq-b(($R1H%kY$o6KH2;byg za;GpJD>JxK+BWz~v!?H)bSa45A5dz1WsS026#o&!nnRp4)B6z^nqaPb*j5rHA)L&> z8;({m9)0%`-lroh3YuqMJ)aWv$HqtW$kLQ6D#K60bmqnX8*TjmKH}>CmJs}Rsr`Rz zcK&btx4*B{{{IRXmPlL4jVva#2ctr6JR)EBj?{^%oKDMuv62bcQ}AL_XTeZlZZM_F zHnyrT8{n>nt$Izjd;1V78Wr21)|RU`p~1I9M}{@UyWjb(W0vGxc5jc(9(EHCUhEmcrsAUUx{gkTCQmNt1E82FRF{EvNug}%?lXQN*zOl<8 zV3%tN(ZSglCi+S?D;?J?Cm43Lx!OlfU62WG?82ILiw& zB{++0A8fsS{T2V(>K8S4517X9OE)D9ff7c-SPLbFqKyhfC6jDmQ*rA{M?=_O>?7!} z2@}k$Cm6ClOj^CVBJF=ITUr=wLA`(s&5b?UZJlZ({N%#1$||}N8%XF@GUWqlw% za|90a9A(*m<9&)n8=?OdHFzUSBd z*LKE3yQjX5P>0itdrg_dk6SoMIzTUuUu6SAd?W7bq6z9qCanZ08vCz{=8@P(Xjy|3 z%q)iuo2pF~y+DQP+MB&wgG41I=A}85qkVI!hlCw2owHd!Lzq*{^6sg!X@SCfI1+pb|@VcVQFc5T=C8cX7Ir0Sk540ISB4_atdI-+GcALPceI>t7_#UCRF=1)y5 z1WtY8i#&{Kvjq5x&Zh2ME8Tlsc9B5>p}d9YvlVi(hcE@ zA(TO^d=+canULb#_of)?;qT8;n`(thTDNAt4nnLzT3Z0J(}Np-whT|Rnwi>2`6fb^ zE3?M=)}(V^)nfy}Cf6kL9u&U|_4b3*PgX5Al=m|XyHi_lkOL42AA=cd>$A;&{-Uss zvD15EcwKiub?^z+RV!42HfBu#Gg-Z7JTtyV5H%KcIkQKEcop5(*Dh*ji$u-y_>Azj zNIX8$JVVFU(^kW(^4)2)nL{Pos_dhy`K|7QhP&!_?J$*{V)D6Z16Z^ylgz)5SZe*S zsw;2=%{?;dE6bq=MnIzMX~YJ!_CrYI|FHG$+9gdAw9279SXvPrw|mz3!pn-mDAk5betp5Z`)4@;%Nsr3yxTVBt z|L6otvxr1#R;k&`t0#LsIbFk(wsoqp#n%wudc-dZMF6-F%Uq2LoQXGB1@D0T8@+W{ z%y@+AtQkg?VBa{rfwpLwku!d|J}YE8*b<4PS{i}#h8DUvs?^iF?;L`7L(sVf%c$)xKX2n)V)~V z&8s|er<71H*($zVr7L;mHe61Xzp;~-UpB0Q3X-Sa?;4&!sYdDzbho}7{;A>aDN$fL zr*U{kUFel63w#UtI;IjSvKCiL9N_^znX4utid*vdYRLu)y`c59zyE^X>ncXo?G-ct zh)i+Ku<_dn$c5%N>n<`Mha7V|^UTZ5NVB!R?Ji2f{x&c-@9=gYoV`};`z}6e$VKobC(6zX)@!w`aNS+< zkqg_m*t$_|;>zIHOBXMKkOu{3>=#Es6Z3Ff`9&c#h&jMe0DI1o{I@RRR(?drsB449 zw3Gf*c;uxha#Mp?iG@`6`#pH!`X{Q?n!FRnHkV2|rrOcIvRJBkz3d@5n3_r{pKs|{ zD(@s$j@`0GDiDuC%X4cMY$|^l4#=C!z2*!U&CTAYUjU7zIQpJ*0iaX9^msB><#0Q?*4i?LPlADa{a5$@OrgL@TOB5@p1Hy#GSJc-X zuzBDV?aU&8Vl`T$u;kd|!8ymp8{uPA;(qv2(u%0JaucHIHK{YSPg^5xnA=u{b=;89 zG+)Weh(`GJihNCCMuUt2BFO^mD#i%W1N`C-K#7DIz~tVcUMzL6;3JYU{U~BPd&~~* zyg)70pVEj~TgqtDt!30EH0sJ}h2xjI_fJ^YtLzlmpmD3qL2F4rZ>UsON}EeGxd1v3P8_ZaXeKG)&oH*I_A57pgD5O8q;hT$&=FMmw>5iEtpTbsfAt}Nc7wpdMGHIM}T4mN3Hd?HU`Etru7 zTzdT9lLd+bGJVA$L~=$90E~S*B;^vly3|-qfVJv2c@Fz89wHbX2HGJv7MtSs^>}^A z-cof(WI-~NI_h*+&689((~r{!EUi}(jj03|&t6OGaJdH)I?jWQbwohiN|6dz^Hjg; zGgUFvIXI-J0N<*%k{wkZ61X^ z^&8jiFOYXo*2`^(hO$Sb^)PkBv=yDm(16{c`bORGknFAE)>K-GuiBpOP$%=Fxfz~E z@<-(he+kRGtBQ?Y^jU*^oO2k^{j7m|V=%eBL#_-;I7+s`sG5xH^uWdS@>a^~SufOi zi}N4t$?J*dVHQ7H^R#%ZxwU)xRLQhl4@R=RFBT{@xfyKj5pi8^UVMs4u{5fx>uF`V zE@Ip4`D&v&5?5IjDwz2eCyb*2oY??gIF{_F1vhDiYCp?#Zt^7rvKIoX?jER9yG7qr z*oqfW*9ST0KOE_y@5#ro1H()u@xNc7Z3&&(BE0|p}l%hgFp41@?wRpzO*dB_*c+%s-?21NhmcEl7M6Z%>ua=VWf$y;jjdt zb7^Q5LeES2#%}2`K{Ouy8!_Xm$BU;!e!-mQ@7G?A5lCO06y7#U{9y0>ML~!8wnM(k zdNEM`(s8S!u`J!up1>6JdkCKYELC|KaHq0rlLH> zV@*+?_oh>h_d6`HZh0cMZQKr(JNrL&6QB1<3g6WRh~o~_7uiY|SpVcd+Rbg8fb>C@0<^t+}OC8_GiK;NjQx_b%-yXgn>gT3!sDs#64 zn0~PPClm<=8Mt|ebPP}>N1znKnB*StZ*Sul#2-4;k7ueo_~d@D^?v=_^0PVJI_LB| zawuHj&Q&(KCup}n(fik`7Bd&_TZM%mYC94!Yv@a$jK(_9n8PId*#IUdMFI9;&!IHn zo|dn3j}$~NZ?ZXoZSe8!FDt1UTygl;9m99;T8uIe2+|@dHrt997b8H(!(%QXDhHGh zP?DvvYpFC$oJ^ObQ*=l>g6j&dG1Lc0Q+m;ueb8ag%NR{*=z1dCF7j1NgaKk55n4RR=BZDaQ{VSG?B=g4NMSLR>6>=#myDanF*bZy zGcI4-gY>V&l^-m#$qEzh-aF(Xsje(M>=&pYf6e6Q@F2V?3zLAa%V1$(Q^a+vj+?`q zE9w?)a>Vn(HxH=em{n)CAJQHLZSLjDOckK6b2fmtiV%zGbt}QlXj`sVNkiDSKuu@uWCBiQm1sFEF`-WuVqQcK=WWaw!4j3chtz>stEk zpmF^5{8PrFKY#)@cIZ%4)&S$z&MFl=Tel%0LAvYd#PDVg?G(E#<7tq0=qR;#!t-!R zTj-hmap;}j@R2`Dn)C?gZa*tmzJ}crlUw}53M2JBifbAb4fZI-s2x&}8H4a51kC+b zpaIH+x8d1rICRklHloH=xz;1$Q(qKxr5+iXflX;~cD{obbsUX3!sZlbID>QB8tr=H;D@Dul9D?(~ zs7+UdPvs}(>vZBuk4={{^ofp(7Y6T?54@yjaQ~8t`=IyzcNHG{ zJ6^Yzlmea@A*$+k$_g?+-5cGwd*`Uv9EDpj!o2RVrqD^#%7?xZdizd#TCCD`h<-cU z45F|^KZ&kms(dDT(*4)&bVkly$BcoVfKsE>bCJwOy;b6eHVpG%X9hxwgQ>+{Ipngh z@l7*H5lToXo7OZ%0f0(es4(clV91CF|1#r`HP^`M%oTE7IAH|ECdZ?c=!QCvgiO#t zQ>W`d9G3cL95PFY&?nq;gBU3~_is34pU->dgG|4%Yb@mVI~Y+9#Cd730l;U+ULur< z`seG&H%Pj$SrbD6qQz|6JU|F<yD zf*`mCM5pnxq^hl@q#l1k8UoG`KA1|?quaO$kSxkNsdM+md^0)KaWgcWiVZa+K9x^& z`NUIaOTo^Q3Fgs_95@3T&rHe4;(H^;3zH8+VCXnf zr{h-HQ*sbxZFP+>I`kGrz*HF@6%IBsRit{MVPQ6@eAJQ;J*Q8r7_u^du6-cCa?yHs zpnEM-tdxkHb0eSVrJ3ab8tMyj5RiEE6fG438mc5o?209s_P-sM>p{cW7cJ;|5U;VC zqoWx#yc9A>wPwHUcK9h*ISDhCKH}aVX%D#k>I6{5KEauDb3I-s1N&o)A(%)FNAOkS zagu34D*Zwxz{bBF6b#oZA~YRM_9zWlqxD158E)@*%8uG@_|@t2*~avmy9oGz)aCt9 zu;0?|vZoBjt@%?8oe}z{zfR=09TFpRWqd11`qpn%l+5Zb{0{-G%c8yw)~vJZXT&Io z4!^BFymZyKDvwnozm1xkv<)2H-?VW03t|xe%}RGOQ_9c&D7p3Q!^E+!-ko*NH$Au? zv))Ss&^1>oo@F-U{*Of3{WSvCjg~B%EVz%l$mF(4uEex1+PlCQagT6$ia-y8e1(9n z`C&8cc&y^<+6qZH;>u@)%X9v2T~FUFOC9>5o*a&W&Si*9P0!B)5wxo%b?!?g0bVtR6$bHC%-p!s=q!6qNxIxF$=^oj9=PoT)8^o!Ke z;OkaVO-NxEUwmHBGII^o_D$9w({g^zbxwZ)T{@_LU**$g>6T>McZaWQZzk=(#kdb> zuscZR0D%E6#1Srn-b|0R^~iUUUJcuqSJFP&D5q%=^jaw@QcS*UrQ+fK;dRyG=PPU~ zN?C^x7cSmaAQ$@n!y4uP4glJJ1Y-3ato9$7t^XT-_HPeX`}K>02E&Bt0Ne6WYo*8F z$`SG^sSO;)Pc@0gv*kaDt6vlluuTlTZi{5|y7Rw)dVfPg&6Ffwfl^j8$~yR6k#5sEz#dZ-Zl(jAu49g9{{$9{88vv&N)L6Pox zs@SJ__()E^bQ{F(z2t*lomrZlClvX;nb4bA4cq$m^na9edfX%JFc95?pUPYFd)-ePnz@!&HIHhZ%enK5kD=0Cxk*LZT{=3dX^@fxpoH&+~*YF;{vmalRF+w6H+C7EA@(Lkr7 zg2{=Mwy{>BhdzE1w7%pi(MA(MV>Y#+yPA=3=b-|-7$EW=Uf;v?{PJ{V_HY5;UZUg4q(eTD}bwFavjm?fD};i z=o2@@Lx&rG--5AI>euyt;8!ZZ{Vntr?-6vUOnBt#VG`xrD>9B`n`P~GY8qZIE=_sY z9w-MvaRp{7Y|&QEVy>74-Z+(rrWrNqPRKEHbG9`2xn7z&T<`6rF-+Ek$JjdOL&Mo} z6Z*arS)Tnf7xUu>HujWgw;iggcwVjW523Y#;GWiCDqW@&df`I!da8BumGb=h57Rv-vn`ZB{UQonTqBVvN( zRw0WA+B2C({g^7=OR5TdkDYY(LKP;3r02w+x#_5PBJOFW{52f=q?A!k_Af}+1U^m8 zt<45&t~~Jm#NvdkLUaQ5vGhF(*8y9lN%CRKh1Of-Gt3RA2-8(O$BYZ3L$-#3k8hUWVHKoIcI=R6HN{ojoh`&HFxDk1itU&Y!i13lL zCT1dLg+qA3xgpq9=ovc))(j!$#~Lly2i;PqGX+EK0XDXSm^~Y+@yB+$g*uem*^_Hi zuc)<9K*5cV`ycGR2UJsAyEcjy6)@5jgs6z9l&FAg5r}0gA|h6*5ETUiVzyh5ATdip zx)>{L;e)6ssFYAbkrp8om5oT3P*PB&MOGBTlB_K5^xS*KIrrb+H|{xie0SXce0z^! zh8fG4tU2eJ?|jSiJ`bpyen;m>WI{zQbfa3S?3)`x5s@N;@hixezBS|Tb(deMuJ8$$ zCqLi&$f^2yW~$fTuAgrPdOq`ww>pHAY=nsnG!$;E<53drbgA9-930IjDQNmxZ)i7#Aa@aEa2({vj)}5T`e~iTYMy-Ni(r zBa-oS81|fBoZp_~^RqFEVyz_DpNVP&3gbE~@mH~*kQK6n{6xveyTeg9=^ebk{kAQ?S(hc`9gL+_T&dWYh)%- zz~HFT8}YH#1oR+62)TSZ(bR4OsxIjp*i+ZeUc6xF5nR$JI-lsjP|clU)Y0x#8gV>H zBweldDh8dP6QCLsNbrO>*Nl~mt;e{0_U9OJ@CYrHwaksSO2SC6S#HQJd2JIS=r^y^ zSFSW%bGv)|@}w|h?`?-29@T1`d`{bhnT7n|+lhl5_O1F5A1KH&?GyXqT!4oy+cy-w zW0B$7J?EBPXjXvonK2weF%x!ZQFk|cl!@{AMNVwx;Rxa~bXPlScv<=Oo-Il3G?#L- z$FXW>TyKky8{BiG7?{A$E9v|U&>9E{(&z>$fe?<)#~1ikU7##W5vk~ct)lzFX})3Y zV&C}2#-o*owNFOaA3yTZ?AIME$*+KQm1hOgkr8*mez!)qS!~5t%d3f}n-_{i29}jN zEn+9w$}xqy``#9==Jd^nVW*cqRgTShRCD5^s<)wtfS9_XYN55#BLOHrlQ2qIrsfjvW4*!?Q7-{L7;k{C!(~nYKDo zYLxB-IrEFMP#t4n>sBI6sfztzW1`(c>~{~7=4BnhRi1UQ1mUXv8r#(O6MY$K zQdSms=XiN?t@nbCJX+9plQ+x)5_+_{&8XBg5X$s!_;O+%I)tgyv=NSEtYIrCWi3L@ zkVr{rqX$6#EJFeXa;TwtP5P#{g+DS&B|1@~9y`k{n?K%qnwt}rB=XO2xgbA8e?@}H zR^sE5JST%je5rOKFaT#MF~64g0Yyvhk>LTr){x7ayD0h+yR5@bAKiZQtG2o)fAn(l zjpE)7r^9VsUnTvzDTz3#ju^>oK{6qghNpmHoD@QA;a)*wq-mWIrrHvnuJWFym)Y+$ zcZ;d?saA}SFRvtP-FHyc46(25U>T)^Cse%5N+;t#_|N;sm#+HppwPKM=g(G6m(X)p z;0pNBM2!Vn9>C12t(Gtv@M^}j1>O)D-Px@*=$2p5vE)Hs76fIwXI9*YKe2hjc;pXxRYhOiM{j`&`F}(BG_md7@?_4)&NIi&I0~38r}G zZXfo}z$~P_7L-A51UJ!oJOiPgivuIw(3q{v71V%>Ld8`u^B7_(bEa*C`SpakqYE7q z)`w8_`Cf2I{(IX>@3pXVyor8qojy)t$Ub6oAHY3^lxNKgU$s3&jVg_kem#pySJ%(+4^ygGf&4y@%SS zoUFeBwvP}c-B>fR*=fMW?vrGBLH-_?rj_6pzcAFP*3L>;3lTnU3|z$J)ICSK_rNXU zYY+Xu@~Pe2*U>+jh>#JXsaj8_B=7!8d_}5A`?|%q!F^6_H7bK^XIb4*Oi=%z06mgx za%mPwDm*qwxMo9;>=ptN{S6XhVPj(OGs~7m$mbd$1uUWfYB`6OE%%`(ftQ`?JEO)I zbc$|qw_BJunpQTglsM>2|7aiA`0Mp2m;=}E&QOhjsb*FQ+|vb-9jNK{yA(JSpaKnH z>6hQgwq)CX& zi?<5Mni9{2^({@45zysUZ~0aCx0L71M6i<9=({;@F=RITDtx6Nt4qbtVZa#A2YocB z<*e$hyF*1vEzz7JBL*9a#H&o6Y()UZxB*&8&3bitVWcqIc8~arNu^arz0g&Xo+V;x zj;b~m;0;blp*x+TAN%lOQ#^DgyrXg5j&a$H$5Q7wvYJ=rso^7Gu6k#veHg z>*+s~X;#ocSh}bM)nsCeYo1ejq|9ETGz^wrEG5E8s3SZbwbk!!s@zZ7otzkXNnCwy z#kWBPppKLBCnCf9&+LqUu^|457XDApg7~sU8{yWHaFqlW!f#ABf~O-YwS`_Azj;ZB z2{iYdkpVrpCC0+ZTC0rHIn^BM`jXvlk+$XS{II+U)|ZDRrEwk(XZOtShC_iN1lZ=t za&hpWh|=>Js0`ZZM14&atJgD2jN*bpz%?2Ao8+e)Jor0Tctd8E}i#VDuoUV{HWe9PnBswGO1lbbvX2QpCh{?1#8{DFs zq=>UZ0N0?+r=`T}#aHR1_$2omr9vU{dFZa`ZBMB?vQ-|gH zC*_<{Sj>rL8{c~mpe~zjLI+!P(L)kOoZV{FK?229LWBI}qurOM6Ku$XrWcP$2=O$> zToUm?*o(1pX~D&?=c6f6O=!EDj_j+=f+IDLb?WO1C zcPM9~r|i~I8T$x>jJO$(P2^R`HbK+G>M32_`ndzdSnt&`?Z}|(h5f@B4aq5IrPp@g zZ$L$a@dDWn`UepHvT*?4QbYpH8EWWpnlO5{1}I-?Z#AY%K7#26G=s8*W3%AnOwaPH<1^_cQvd z!5cdL&1Re5y#txbG!=;1T4S=t!pOD(51rSoG|R;@|87!ydnX zWwgfpr(5+}EoWgrR1JqM4iv2Y`8`pW3{0K(YG64W zZ0d)<|A}Wo*K3>n72Kl{?Qe}A(BzQ<#a-ObA z?|_toA^qWfrAHB;x_t}p5AtKm>wouW!nbHdN!nu-AFjt^wu?AKv$Ak_rf;icWMFMu zaqjBR?L)vnGNB-b)2J3j3Q)iiN07cz;vCesdOc#BH`+Q%R0U)ZvFiK)&JvpMiJc3+ zJU`{LawJSZ(sl3)qNs2ZQ3KQHtPO?jxwJisalyKK-)GG#9O58`p{Uk`6zr0SJgOa! zcs+dsDTc&en4Ho0j5;kni$p$mhh;XWaywfWzrmwqLG zMH;!7N=NZ>i)+{=BJ9FItOBK(;2T4nM3e-k(&J7J8P}up*0ahU)3T3YKgMhk&&QvJ zZsKlW%i4V|6&AKXR8eWHgO+kH2(llYFXi>o70WwvD(yJe^cPC_iGVnb%Y~Lz>mn6( z)pI4EBa6drp<22*e5v#~l~Qk~({1tn=Pv8&C>B|JYfAe4XT1IMYQoN5RF*Ky2aQ&N zrP~9|1%a?V5!qhYdl*vwx0Fttcv99N(~1*1_iA%JmPgl)x@`93aV6hsE-!eP;B>q1 zUb4tF!s7L0JwISzJxoufEG-(e$0W4XgSf?@u2Ow%5SoK9xdWCkDW08e8_Lx;h0}|& zs0myFmlLlXx&*-anx*0HPe%hP$Hb?$5KcSP>c)BBU+Q2rH=760Wi zK#2@=rAxOMcmglvoP&>-pMYvR;P*GS_Q|8@nlz%9N#cu0a{Gcu2bInlzf3C>V{baK z9Yi?T?5YJ0$kT|~1@?u#u6L#MAK%gWsrR@%xmw8yTCLismdGm{o%3t1!7A4zhqHdS zui6Y^i!K7weyal#WOLYb&O<6F6bo2AGQn9+l+AHTuWS2xad*Q^!vj&E_%u!h!M`dw zy0+GoR9}ctJR`oHEyB-YQve_11>n8{B|K&iak@Yu!5DMjX4HqQ#Ie_&b!g)ti8Y ziN<<#6j61V)Ep7Zyg`F#a=LW^vQ5~pBWZsnpB3VH8Ap+`fiUBE zH|^9Qe^G#)a=zr}>P_upKiHSE^?}M%Qt1WYH4XU}D;bb4tW_VmU6tEf7In5P&IeR2 z_OS@27Gv9UcONP*DabD#ho3L;Iu%|&F3OAT_0V3^J{}=lVdb| zcHCoKm536jRp8ybCNtMB3-PHfFTT+_n!ZA^w<@cNasd!^Gg18?_|r{JzFpIY5ObNP z7kR_Qc_jZNXer&|LqdY(lH^SuqvqIqoy7jM-=FF4Gt1O&_3YpB#xSk(g{~1e%J%CR ze^>YcYWTwJ$sVL603~5!3BIP^QR>kdB6n%AZ^t(Hdv72vtHyC{CzFy&rsvS~SS|8zeuMUY>|M^&WMwOMdE)sloQ~#V1#_ z<~{8UF}B^l%YCx-g`P{}cfgPR4_5k`42RenH%j^zb^@nJA6Ln4Y*vX8ug)cxE-2mb zy1Wb_ylBYqzrf~g?t9yt{}eyPmjW*-GK+H($K%w~mm_`>%3ew7cmiO$9^9Yb{s~DA zeL_tZE|`uhUUY#FGdZgeKcoHONxs{}ZLvu)Qy(F`@;Lao@PkOyeW=pIZ)b!Kqn_o{8FS+4Ci+QJ~$BX>U6^B19kl(S|PSKt{@ zU}JcT8e+@-__7Kn#ie_udGKo62Dz9CImFhETjye;+*MI}+dS8_8@Tlw=6oLbo&QP`r3pKJmQ-J#n+1KBp|l&g-ekceuL!a%hhB-k;yiGWynube*!E-$i*+U{~{Cgud>kpJ`S+p z$a-h=J`-8jEoTxUIaBi__4L1W4_ToaM%exqR6P)DNv`3~Tth_vCN`XaIS_ErxMv-4 zrrp=5_Lpw-{(u4Wp*w~%b^mQd{CZZ5-T43R#8bw`UKJgaa&>o3Yw&GWpq7WrqtGYA zzB9I)0xMe;&^kr1tM`sl9BLk>T}5C3m{6qW8C)5Gamr)AlLm zTsbQ)Hz+tw`-tPqN&_KrQ9@HM8B!mU%>%Y78$`i?S&0wI)-^v91BtQx0{(bWpu}7n zjAThJoj;ImBr=f&6tybxCV9)~*H|?!~kc7FrdU)=ZiO{P{>2oEvoH`Y!v#KiAy>&A;s_!DS$Q#DCV!*(+UPaV_ABU^Mqa&b}_{WQ5Uk$L;7r^X}fe$A_L%#!1g?!mDsLl+C zq(C#9S!fUQ18}b%FS$zenpF^4KyjSOlXmk#D|4ho5g;cn6aUUNG#32U2}n>rt1#(9 z`d&mV_&lrdvnF1m#6Y!4*bU$!Z}pSffV+-(i0g)sM7)S1Uyi#*l&nH`0&g^(@yAP? zHAIm%9x>y{mv>|5TE@e`4KJ|&`>Qs^#|-R|R4`Zb1kUI_;xg!4R>mJMv0gL&n$*80 z^{*%O|JUumfg_m2$4+koaTf^eQ3L{xy~eGU`F!@m3KR3)8#R(PoQAIF+}X3neC_S> z!t%{7^VN*ML-HzO0KTVDT8yOdfjTrWurLP{Lri)XVJ zX(z10ze?Lo5vUygL?*IL(aq1fLeH|gBc4=O=ME3qVU8Sd`2UxmgjYK90$?;9pqdNB z^Ekw?@x~-&5o*x!g>FHcBQc5<*sYP@L&;&!y^*7y9mUzNg)gfRzpy|}tN?CrEYE2V zia7??=MLP@4WRgeUP2?0kbE{!8zdC}Xm~lhe^3&_=Soox{wofAnAk%UIg68JrXHxd z{BPA7s7o8&1d-L1GIfc5&U!VbEnMAj&Pu8=w-B%tey-bf_v zF9AqCaEh++mj!>v{pJ$xW!7ECTyi#KV1HsVU-^s3c-irVw)M2eOO&Yq);Hh|MhdDm zAV1m}`8E1a-1BZoqcFLF6{Qo^wt5X7ajD(_yCzIhjc7qfL2^%t2vNW1lcnf{Vmf(JUmEIj8m>zDK=`*Ld4| z_3Y-%Mul<*>|Qapj|o$Z>Iuj(kQ{eoekgTI5$rrAYFUABgqI%aZgyi4h5o3ygn5k} zPTusUj1?DBwe-t^Hw(XX@iz{x=Z}T{f%zYQ9emZV6X+v?v}0DG0$8oCVgyHOXhd~b zG8@`L`BMO_d_-K1E|%>^bpT~`V~vONI9Z}pUrxG?86yVVYFqdVQG{==KPvtmAu$U>I`~G&1Mzeg8W>Nv#b;^4QP>9V(2+A^&lo2GtJVYGomF_S{~uhIFM52{ zrdw!K!@AB?Kvgnnn-M(R^a@&3t><5=bARBrfD%2R(F(E}wp+*CI6!OAlD9Wk=7#PsLAHr< zy}R6VCrqog+>uasV3jO-9ekqhVjDT*&FVEXY&9os9t!H_5${d1Ez(Joe9~JYs@E$c zBA-P-IfF0Es^=(@ldY?hW!q^N+bf+UO9t9>$cf=ikvm6-wq5EASq3|TLH|r0*qZ-6g2nC#L-SxNUzGyoZx373<2H7 z08P$Eb`pgkb;8~HLwF+UtegQrLKCPl3pvWc5rx2Qz7EOEW$H2|OcjsVLqa^(h&6zi z#9rzrg+6eKi0^F}h4fL*RTg3iNTf#K?NYNYJ7fB5d@(*D*cnt)m8vbNO$U+t@SvzW zRxg;p2yqpi2I}x!eWO;o0X2T&kQb3Vpf5RiO$e9-XBAFTqetJi?{BrdqI)=@?sCp0 zkIwrI$ylORXc9nP=RL~m_awQIJa>lqT=BDUbqP%hJ!~TFb}8Lt&bjKVd-@sja9n=%!d_fk&Lb-!3-eq_hgjWgYV_Q zjA0UwfATAlO)QvfDGuYDF8w;IaDph1P`>Xay=sx!wM3Iv?Td4|`K|E7-$5WKNIM>CZj#olDqb>jgwTWFWvo zv+X`#Owk-=&aVu7=HB0rT$*XGFD0Gpm?FgJ6P&Ck93#f+r;h|wuapE|zI59v7DR-| z0k)^9uH0hI{+idnQZYw4x&6zjX zi8p-NyND{XA$|xVEZ#mZVh(JN>ez$Oc#eeG$mrpVV#be4cDr*V3rl4i>xEUJ!gVjR z1Jp-#?lBis`h-0HU=-mUKGvJsV*xa9yw|kf;c|xyo<`pmlGKs#S|06E3MFQ8?35gG z{ayjpq}i!S%pQSnS4XA?19cr5qiiLen z5#pAO{<4K@SWbw^Qh%et3Mhh}IQ@ZL2%1NPFB{cS3DpKz4YWwOS&6AkH5z2q1?`xd z=@;1ulrb5~!=IuZ8#R8VS$A(;rs*4Yrtie7YLZAB)s2Klr$v6KR<=~Fb^QHzIv$A} z#Ko3=`_08aH>Y|9x?VDIv#FW$DfUF)@YeERb$rV9rd}T{-_4Ozz*yatIAZD(h_Tso z!DJcP05Oo+(sYpvhGij}d;0?~AdErfn5LuGQvylxmz)e<&u{y=L~vL67au-R@H;;W z52t{~;7Iiv)V{nJcMA5AIwNtp?gJY3GGaW9JV=Sg7Pg-}!nbe^5vKVx++4>JgZsr=4&4pw@?gJ!e@d<+!x<@dwvv3#4AfVYXZZTi%oa5n!Z zJV9W^|85@kA993FuiP`Mur@h{BQ+J_<>VrD;ZK3s{s~picp#TQ^Y+uuJsPfD=A}O) zTi0J>{?}!v(?sus(_|1}7o)oC8OS=t>)1B3mb2Y+nJEo|{o*Yvo*oi)3n%K01Nl)N zy!*mysf`}Me^uP_{M1U9cEuan-}7e`JnjSP1`Su~c@ht_JF3ZZIli&tHI<#!n`jFV zhR}Jj{idTD_+`4>(v%o(+DH?TnF~6605Vb<}d>>-YD%D-}gS=JnPNTb`Ycr?AWB<-2@$c$@#0DIJ0p6G8hc z;Z^z)@N3%(AR#GMUk(18SZPVyDw^hE8(YVx`gO+7`JFg1(k*RQ$!q!s|Gvo?@psZF z`PwvJ;xHfH2RAFfZf#O7C~#PlWVJ-{M)$eB{ha&PTofXVts{C=Ba^spN8ZE78YzrpX^aNJ=96W_18!lec9WW(1rMm()A1L|u$CRX7q z?)@(uhjfs5uW90Zz0T=9iisP+Bz6mIA#k>Xl>gvo@rcYCJu9(F?muFw_q@edMWoomPVnp6T%;rYhZVMW-4Q%+^zwfxf;Tj_lDm$rNGRkk~O?bqmB zTU-gS1~_C}D0V1W76A2wg20#us>u2{fhmv7D%?wSXI&hS*hf#rzoZKw!K52;7}O^uZ}3 z_O;ck^Q$BW?+1lFLQ?B5;fqdH!;LXhfnjIzyJ)-5s0<`zoj5V-!hKh=AKY2WdWAg4 zMnKf&R}bVTONF3)Qh9j50>&|Hw&zeC8@$ydD)&5+Vnog=fl~94ly`|QKD^7-1hV8l z7j4;+O`p~p?$3A83jz(P7xC~h5@P8njX{h>&e}BaphnPkhsbu&mQ_?%cI9G=`uKIs zm6*;4hmZSa^yAh&y`Yj+FIQ{utHfTH<(CynW=674J@p#aH|{iL**LwR+hL6y*mVNg z(1@x{)S1HVuZU`>YbMpTrkpLMuaW=8@h7PS&<)|OsiB%VNneLu^_NME$#y>>0q>pH zYEN%v;($P+$}Z8@uD*aH{qAo<$st&kB}@==fh*D=j|Y?%nC4wT3oubb!XX*n5e<&` zrRdT3j}y3f?Mj`T)_sXWR;XzHEvM~!Zhj+Gv+Qu%0Wz0By z5v#$;r0L;Ud0y0$F(vJuspIXR_Pz&7N=mMd>n)So&hM%CKBFBsnN<+!5$W6xDltrK z(KcBKH5ps701TWDSR4XH`gxWU3D}&D;+AWiUY7SBy9owC1gExE8e zkJ?zHGZ9Ji$=#`;v}E+MyxsHeygCKNA!k(IbXH+~69NJ_zaF@0R>2)uo-|ei1F^(O zMe;jD9|A(5AOREx6IZPW)xHMNh9?-WHl|*6(8~%_V<5XhMEDrIjIg&~bMtH_#!1M2 znypmaYr_!-+MFM_gn_TE5%Is?;9O%$uP~K4QvjMx=3xgxSQ!t&dx!|l2(>6h&y=F( zoF9KSaK2}dV35ud0$^5DDTpmyu@@{Z0Ri!m5dS0KpH(=_5d%V#@6lk1W)-roLJx5a zqJTq!_u*rzb*dzGS+ZYfX5Hd(-cQ{QupZ+^ibS+1xKajq-Eu>7GC24GM zj)v%N=%hJ3M2u=v=mps)-eggeW)+Tfuk|7wjrkd#7AIfh z2%1PSGxYLgyc!t#!-35bO7xzJoD}kU);AMW}+L=nA=r0BxK~n@U;VP)rDVp6%+O{t7`7a;YjCz-E zNMs#mEICnfnVxom5+({HEE%;w1S#?c-pKX;7lW+FW*F=&JbWN!BR3gE-gu_+8U+`!$ zIf?&d1s2U%{+KB(l!IorKn8EA?T*pQ#5&SVx^+2xMR@m}DLl5L^9*1<-DmTD|7#Nr zKWwK{gwtPh>b&y)+v3A=5Fg*>7hQQ51=~wo<++xQdygRuiNPz<929?H%WwTA)tXfL zbfdmS`uk-%fwr!PkPM-*ec5-R%rDxgG%Cr>tc&w5lhYH9seF^CoRI@pKyZsxK)PnB zw_UcqUVkeB5c*2J^`f6u`Hnd#wX+x(@1h!T;l}b}746z|Lzo}!8?nb-obg^%{POSx zW%eAI<)1Vj`YXcxpAZ%PGw<=Q2=iYzD*7wp{pYSNlsJK|+y;6Jxl5rMS0dSY?l8|) zO5#!yW;!5ta_zpsQkm&3*ssB{%F&~fU1ipP_;jQL98;G{!c%n}iO5U5q!N>JtABkyj~XLP zdNi2Yf5gAHxjY&4wG_l3x?RN)^HKc^G8J#sO@7aA3BAvI$$MXpgfPw#jjLwBEf^9qzU zKg3C=9#@(J;;Dx;MWEx_!c+wQOSDy7m;k!L$D!K>o0S(20$EO1&-|M~ySX!W>z);i z(U*6Ea!-uq*y-DE{Bp^m(mRbS^Q{Rl-~VSTrzj+%D=UDf>?kiLe(8gza_RHBzXDfm zVK68cI@xUl)sZ;V36v?x3qCQlIo~96(`rU%Dm`XX(^|Xk6Gq5+|ik(|d?w9lF%h!U| z%~^#HIH1iV`x*Gtme^)$@*s1(IZQA{& zOh3hQpXvF%N>SQ#+0aL?(5vRt?O)v$h&?m$vkC+zk^sK5e^z0);FtcumN8d&I)-8<><9_pSG>rNP4JmN?ps=R+(l+nPc#5t5}(=ID}4%_ zzyz#rzyz6=x%k_yY)22DlE@mW=fH$mnvtM)V*aqV1-$T@5EsLXAJaBnddN3?c6Ciw9Z+JwgZL|={miAc}#uIv-(g8u8y4R#-qk}*SQ2eLM~I3 z{b#B=JEwbg5DQ)yqxscpP|YhM?9uW;Z35H8)l)PBt4+(^Po|l*H3_=`=LwTkEn&vw zobwLfXLhEG@)3a~mnZvk*-2ZPMUZCTGR_C)c+&#ji39S9dJ?i-8(UH@!Pm?rN71%J zvhAoQrz2w@B>V|E4l@p?HfSyT4mVwLpHfs>E7f$=_lY=_84BgO%w^ z+9%Fy9ylD(?ZRAYnReQ1^Anj@$=&DvDL3*P19RM(F33QIYheniA<+f`*oM21rn(Im zmSFFhZ2Njb!hmkc%cAnaJN()b9pW_%_kn39a&de%rQ#|)SenBNIJEOzati(VnRv6+ zCDB8qPh7wR1NOr*AciW)!mq@M=g7|V(43K-FvVLE!bq@Nj~+uteDZowFQjRChw$!+ z_o$MPrP@cXHVIGkIZ&LuzeF-r5a=f);XGUXE8yVhK*P>8#xt4Y)u-z)w{)M-S^DU6#GjG z*a^=6b15==q6M)rcIXTtAnUYiw>NJ;&_NJe;Ce3#FR}9a-Q7?0d-|sw<1c{xbC>8j zyQVMtnBdg@soSzjckfN9rV1$c<6;N4cbm}61q=m*M3Q9PpxHlveY%~E zQ$k4lE4rrS0ob7&pQ5(OY~709Cx3m>2pV$|LFph=`bL5mPs;*m;qn)jAFGQB zKv{14HG$V$?C{zF4a7(IVKw|2)CkM>iUakA9tiaa`!QblX1(I+*ma##hax<`yI-~B z2!6vC3_X&CV|-HK#Q0Ong1!`^dVIXK4YbVcTxDlj8>T^ZH?sk%<;SD_3qE>%KyBaK z*suHTtHb#3hH%sjAU^MQm<)weTyY1`ng)Eti$NuOxD2c7WmqH-o4rOFo$|F?+# zAOEpe`G4yF|4T>kUuP}uL5^sS>>T}Vx~)70JPyb!8;*oLqKF?CLXHEjW$vq^9Hbu;rR`Wb==oe^o# zT?=dHn>Kjp5w&8UgTw9M{(z2sq0y}A<1AqohEoFW`Ef7Q5eXMEkPXu{xeFax+O$=z z!7PvpW`AL1dVEjTX{^oa_~<+bJ@VD`v6^!jEc5LA4094#hT5U#RN@K1I#TH7pAImk zuk1kXK5`eR*YIdF__`LrR$9kU{q9i}g|Q@A(sPl3DwQ&s`nryKwv zMZU>TJlWk=t$~o5Wzs(JWLV#`zO~%gq=dk&_b)bNgQN$9;fX`c+;^*9DQ) zZs-j2`m91Rf$I|emftY5vrxji9>w$Gqc%wLBaM7Xoh(8 zh}W|{`uCN8o5~C2k`w_&+7@_JABVWZgSE+@9$&m7WX(hTc2yD-AAH>QvTd@$Jz@7y z)2FRyh1=xYexVr2JaqsPU|DkI9h@4hDCu7U=0Yxb9ux?x4JA z?XgQ;C0)NfEl#V{N|Jo}Di%MwxyWZgY%m^g=++&4<6ZBu^Ot#8(VxlOrj{dSqy3wdyuNfCw2=c z*R9eGkWkrXH`4C4hY*(N=A$RhkI)?mW988`xzb1hZt0j+wQ8%`Z8MYeXi#3Dxo2N* zAQ5-w=2c?3^9LoV9c(qOD$}FQk>5e*Xl9I%6lrsw4ySY#kr&5cY7=_=2bP@J>YvJ7 zZf>({A0(^{09B>ffo-bvw<$L+ZC>lrmCwb0IQHl5EBH&p=Fiq)@vp35<4u&zDhzhl zGJ3)VrF9&h`e1TGPNfpCh4|}J#1%iJMq0hR%+fN*w1$d6JP1jsD^AS@jS^j{i(b5<&uebbe?iLp{&cYV!eweBZ`l+Bp^SJM@LPg0nN^$4)+mwh2cpXd^wd1_3Ow@5V5u4Z?7ddT| zevz!Pzn>fQFiGfRf2*-zIl~5_0BZ`+3lSmcscsRRRmbl-N z6lAcsJ!E3RnBAhJ_VN6Y=Ai6Ak}7+irC8jY+mPlLc(VNdu;R?c8XK!k+>1dbu3FQo z_BQG@Ynqhdw-Ng?qurX;-rjeEwKDein>SWC%-2ccG#W_3%tS;$HK2bWg3n%!Y=2Hd z9S{oc+SH=+v*H|P=ZQa@JSVY%Xq1p}wI{|aGGiDW@P_UMH>%^umEL$=b% zdy*-f5(m^1*fQ1>NI*xNf@=0x&xdM`{?Gu$(OWqS%+|KC9>3II4&>9Cj#n0!NnC50 zu}Mjnx;?U@rix3ArP+%`FB6Wyjj=}-ncCPt>ht99QOV_zM!HtvABVt1@fb`jzr*`@1bJv04kz)VsVl@%MDYU};e=e94FW6SN{WB7QC=f(=s z_1vl-ay^dzpy<>#nTXSzjVTp@e5DMkISvpeEM%jVSWmW>-pnkjVl+%#$Lm=V<{}xj z=^Nhz0*{sOlkx++P$1KT7$1jQ;)6+X19q@o(bE8)_j6%(LR4kMI~mvYvY|9Ngq&9; z8q@KqrPOm1l+hO7#P3U6U+zs%PEI-ZU1F$??#Xmt;R4E7xa{HL?5IBi3p6 zirhza&S#vp(Z1xGRM@njxw4>1z0msZcNQ3S1Q>P#A1Is5Dx4;1)4O!ip* z;v8gSo&!jpQu|uQW{)U-@{oarN8cm7iOHW{PXB9?0O%=i+bXh2-6h}a{0=W=7 zV~kYP2PvRlGOJPklEDt~BnMy00CEaxN}{RKIwM%#8TE-DO*4Kzl2UR%3~s7(nW>Me zPwY?a^%^d{CfJ&HFHO{lw59kIo^g6&=b7*3ITw+d<()!$1-~czsabP-pJMT2AEA zXeaCSrs6N>UlF@mnAYc7=FA2T4uaV*NRgX7cNKNlmYmF%m!L|VX1?__4{4W!@3-(3Gin&Liy8}9_I!m$7w)+=h_@B!@_j|oL!s3xQc0`R`Aw> zXPE`rRP$HfI5_ipcAcMpv6DTwTECs0(7$(U`K*G&hAS8SOyBA<`1kLv;DnV|@cxc$ z``?KQSgC+{nZ%pJIg9JDlHQkR9j(nCd`|Rhxdv%qTj~X+U5x1V`a9qjyo*F1Dz_WO zF1(+&HAcT^-Mw;JO5t#M5qV_0ms#rNRwXhq4Tr1&glE|z0HHGyhvi{S-s|MIQ6hZA zm=IY_KytIFy}OXcXUKrFRjoBJ^}%7mN_^ZXekskO(Ej;O5r>_by|6&Z-7zyvC39fi zqt9dkzEl2xb&IYjuP)9Q*4i?fBF)YmPC28Z$Dcy`Z%-{v&}8IC^W=&ZsXE8zsDl@3D1Pxm1eB1}uZVdH#Oh(p$uUJbHr-o>v; zHhWU9x;)AEr{fkZ#6y1$68O*-d(B-NS}wn#9#&wlQg>H7&IT_9 z*uV%O^nM<@{ngNfUY~;!kZT2#DlU;=o)!8 zec`B;6%$7{qn_6Lwf$fR-x)j=F|{83m4zc<4XhG^CM(4IYn$rRl_e^f8Nz;gR~sh% zo%F%cju{r7Yi?~4OB?2Mmq>SSm4W-IlQ=Q!kM-PtP4&IByH^?)?S z9wd?KCCR8-g|tsH{i-*?7C=)4toS?%4U%m|CXU2A_<+iJkoU~q_Q}+$qX9MHpdcI5 zy~Qd5^?wwURo21og;dSb&H~1^z2B;DgS|5cs_~j4BI`oMX6Z{2X3jv9Y!yoDWanxR zYNgC7_*X^>yJL6gKrwcf{z;n`pLIZqLycL~p>F56FP7kTELxIT$Qw9ZAaW?v=_Ru;d!H&0%}u5vxl zZPC2lv(-{p#bX&g#J!`DZA(xUv$n}jMdiRy*9`q&X z(@p;~)P6TUOTfZZ9)npM8Nt*_U?QsSC#{kkaUUjxD8@i%@d*Q~s!j!EIE8OwI3X&7 zdizIrCGmdlJ`#psVwvzIlX&L}nIoBGDg7O1b=ArAsN1ZFG~p&BB>MQblc{NZ6{z zCFR>Ce1J7gpJPi)_uwPbK$D*<#CTC2MeBhQ6Utj*$Tzs_2pQM&{@f! zmlcaTi-LR(0GNi2?V}GTMpL?~Sb?tjElPRoPciJQPjl8VvOH|)H8%_Q{*n9J+rqXw75JyzRs0b(su@pp$A*F(pfW#4` zD2$>q3MmIt(dC%12jFPLt`hgI1rQk)kd z!H1a7Go$cx*?*<932XJ-wKJR|ZOY4yyWZ%K;LO@A_4L2fCiw4EI{Bwi_TTAgfBUTe z>lVu9V06&1?k%5@87d=MNXW*SglNY}+)@!OlB6kO>}bkw8&ZvK7~}>VX=CUku99+L z&ER_b^95_`UZO|FG9&g6e$L2rj?+X+JL*bCp^*2#6>)~~a7YBYvV>36;RS;vG~p)Q z8*YrP>tHgEP(*~5>oN}mvpgx(ieE-?=t%-LZb&GBog}YpP?EhL4HRXOU5?em2KiFy zUEA1*)aba(;4h0o{GHC&jLU#vKio)HU`im9Tm=i;cW#hIU&)?*FfkN+7;%%}7oqlp zpN+lKeb-fG9Z(u3N0(E93_=&xG0+HP0q&*N(unCIO>*<{P;&LmRDgOT9oK7iW6T5b zQ2$6bfalv+ug)Fw%xV3mYP_@X&4e&wzQIGcxbi^%<6+*9c2lTJbG(l@dA)S$TB#LJ z0$mB(pSnR+a3jRu+Gwn1fMUT;#wMD2AN;#LRMRsB5XDt!FhY<8SnOvVQJ$~9M#K5EEKCihL=!@ZiAci%6_5}&xnyt5d3nLS9UF zgAG&JvI3oWh|h3%Y5P@c70ur-!MIfVB-zA!@1Rx0y>!{?l1z)E*|yiVGT&{$mVpYz z@7w4updR`THUzCp!<6YRY_TI?y@CR10_b5GzR2kKsx|w9w~X@9{y%ts$UJ2~wiJXZ zw?P#4CJR!$_MZ7dZo#9gLA0=AKM?WR_*F~%n4|dkFMynQk%%})V&|g2YQWEgAo4l;!S4s$P(2pwbPg=4JrI9`vl05M5^BMlqF%tHl4OL; zlLe(TmVe31=fU1VK^(mtxMG#6h+U2-e$ob`~`=G~t>Z>Z-G(h;!~VN{Y~P%G*UDQ)q<9#+b05~$)C^SyWe8Zh4BLZM zt`Wa}qEvU?L$@fS1y9fSPwZ_m{9&Zs?(LJfAGK$-$Lq6M6`?Al=Ic<kZuMrGSKlWIs7RB2 zHJnaybv+q$`}w@jUVg^1jDsx+I6m%dkV`NhbkZ+Jtae+;izm9NpIuQCP*GeE42*O& z*Y0a>H7}!GI!g>yjLh3FY$Q&k344;AJfr&u#nxg)pqT1>UC zb4@mWuxxT|YqspODQSdlvm-CY2i$}BPl4FePdx^Vei1ZvUBXIZt#XP{`uiYH@Oz9 zv>6uA#>_A5Yx63T&M8Jn?W z82N2R#%fhu<#DHT616j|%m!_BOpeF`QabRLd)R^F*L%Y4Haii6#>&~}TU#&ezxnol ziJ!l?u-5bVzOP#SEL6_|(`6t%;Q23j0?6!Nz_s~wGSYsZOh3m1h2cybUriaPLS~eU z?Tp!5)juiiJ4nVf7HP;>`r%S#$WZ?)f4bdEx+Ct2oKA?p4`i;;tqpzOy)2zKy+Hsb zKrHaB0X_!GjX8y3y!k{bM<*oqDw|UB8maa|F2E;Mox7_V8m_+Kz6o}RziM@|Px;3a z4<_%09{7hCIH(@hK75gT@K(iWMw}ySoTSIefd+6FCQ(F+3<<fr+%lOW(k?rx*07n#Sk<3DDK4T+D-Z#tF$w=wt083DPB8Z;KTsv zIY>``(Pu|>B=a9xP`0UQ4Vi8dJENq7h8nbUwdTtP;<{LbK@52mAT`+s?hADsOZfP_!5S zb%6}u0CE%i(DT^HC*r$ze}c;B3^36qHiI7WZ@+O6kzI7o(_H3Bcs$r$0W`T&ZE-2! zCK)?H-FuCa*>=93ULV0HUUks#0nuWry(m+2v-=Ygvzv9OK;6RFp)}1mxj7N$=PlqF zBh5aH=fW+vDm_u)aYm2#mtA0w2i-D~QQm5ZzkZ}uT$3_2qcrTq8xT(eab<*e0Di+t zZ6r}caqYYW(;YXSa%wEeCX?8*{wNY|(!q-d6_H=lf@RCDOBM6^K^4v{sj+;ebwCZ3 z+{PQKLyf+LjG@XDxkhb;Z~#L6MP{kc0|@0KyOJc^GJ0s`L~e4GjF>Lgw)-=@MxjmP zwK)_Q2R9F*r=(4LT^r%LD_ly0dQyIzm`vYYcD(BWMcAeV9n(kZ)Xw1U831I1YQ*x) z2=x;B_eh3viF$1Mt5ybMJ%T^bAI-cxy0y1)OF5D!4bPVaoNCXF=cI+7%^iAkq7VH} zW;|lq?PcxoY#PL2>m8FC8Xna>(G+r&!2F7$NF_fEM)lpt2y%az<gnVq;=agQb}Po#pf2*Ki}(q! zXcqtl!-QFI%g#hej**5Z;AJvE|8^TQQ)rN#dxbZzSv#cOHKQ@^?zlJSG?hzOeSEU{ zJGdkfHPIi;e?L&8#w|w*x&j7kkf4UXnv7T551{YRl{45fT@7Gi0dzvIaX0KL3C~o5 zQep=lhq(JHr7*E0Vt$CxVNf}}6K1sR)`Q7d?KG#wV+1^MX8)rGrA^k-`ZL@IA+fJ3 zgpt0XG1=RhvErvC=*nPB_bLLeyMPE=VqzBT8NuYOrkhAPBC`qda;G(SXxro0lbFO+ zca+wH#U&?{8STLIDNXuSYfXp|F1hhA#a#X_xhAC1Sf=aVR=;0$Q#OAP*sTeIOD4(v z7N{ODgKN~}^CUOLwP(fLh!&g(H%7Yh*}W%W)CnQQ!~J6hw};>k>0}2>O5{7#KaMl-Oo_PtNAMTZZ_vCu@XPM?om8G4HDC(He$H#R zRQYgcnmx?fKZ!M^e)#RYOdxxWpYbd>X%iko{7MK0 zq6-Vrh2Y0ThS*deNl|;hC$Dm{hk2?@O=%5N%NGF}3%0C9*7W#dB%+IxXEqLfLC7C}u zuL{uvx1XjA6EB?ZSwxF#@8%%hZKezQq9(z%MwO6LW4H9atyAt)kB(Gc%z5OYo432v zzjJNxYc1$bavq3beZf`rrgypsJTg=_l2Kd-u)2u$`z0CJ%cx zgCHsK9r2wZc_xmiem_0)jj#d|)lH8O5aI*_br}G4`3hCX?%*a>yvsev&ODVja#FmI z2X@yHPr*-#?g&3f83+xRxB0O%xxeGa2y>7uexMzaCH=F}^~XmP^*E}{rWyM)1xpFi zP~uv^jj~kK0nr4sjBbfs2X=^xq>Xup9zRJIy&EH>pj0WOAL>=Rl4;>yn?O#? zU09mjx2HboZFQNu?GNtS`4=>)3?Z4z-s?H-!^$|ude#%w3u2W`D2=Jp*v8~&bQ=ai(V=kU1ipL#IC*ai0A;%xB$z8^|_Y14lmw* zoY?0>mEQ0^M$F+ov_K6LvBjW$birn%yBv^F|8N3K*JB8)5Ha>bQbiV5Fhg1iUscy^ z_%eE@q1#aS+31W{7JZ_L*2y*_w>abSa{s*4@IZgFCkDdxc#vc#fav1cCZ42_r8*@B z(*-N*F%*7LfI-XSeayix2W5!6^q{X=p!Q*+1(nGeTNtk)n2bj(a6l4e>@!qNmOCnS zWQNJuMw~8SbIrg=gp`zllJAZ?XlIx;1Z?~`cK0y`^X7U6`&7{s3yQA@9;w2#HhM8bXA+MLokbU02;M~XP*;xo$&*q%y(Jy@D+%5^T7)lPNE zkKdSB9(LI8pi%{VdgVg(My!RmlqD0(DN0T&Q5!Y4$}y;4>-T)d9^0(ET1E|@@eBbR zaIcJrGFo+q!{a2Ur)Ng1N{!w_E=>`sLaoQx=q(ICT$ z@d896RM>wkSg>=?j8}i7HE{EEU^Hkl#(48zPn>)vJmhSu+z_I2Hit>+%Wg(4s4Y1q z#TmKY4;vafH(tl8Cxg|p@}250@R0s+cA!;bOTb@Ppp6K}h=BJl4BVu&PpOGNBDmIb zqI}Z&Ue}2wbZgB``ggLfoiY5;g^0U!arnl*Xb9g!mHi3!vrFvI+$JW|c|!p5sjdD8 zZ3S38{P!%_{j@RMz@a0;61YM*r_ecNj}Rlc2{o9&YoqaG)74B zPq-%*A|ovY8*2K{W76`p#wTX|He3^%otEV4-DOD3;lY}+@0zo|eAX0$L3{xMrHxP< zDKWPsg?FZ$mqDx+cChV#s?Tf1FIQmeC&eqB?AS=M$<_n5YEl|wr7}i!?>Ox@)mN>q z`T=pv5!yE2n%kOt9Wu%$|Gf>^cSOnWEN)5%0Wkx9%US$$w7LM&{PDn5$Yh+_njyqi zHwvj0jT@pRcF1LCJpG{Qcg^*OiyMi$+y-sshm;4;huk8{5tr^FUUlDx>F+jat2Yb( zWYuZQ1!^J~LnlmYl3Y_KCsa~qwOillkby!^1cAOynt7zXzAaan4tAsJ8j62B-YxTk zN$}%0Z(kqi^&jcD()XWjS{?Z6tgxq1&UNp@~y<3|$^$X0qg4$JNo_zLJ@sq)9hJV)u zeNA#vXz&+HwI9S6La-Zd7>LG?E`fzipvF5mYTm~+>$i*1O61CNMMCYD%#=7U&A13SZsG zYy~&msnDnYid5Mr7Y*3DYvT3|0e@jZi_u_7JJWbq-(D$nv0w$zID17IwY)@aMRE=g z$ZPx`b0^E9h`M3Wh~X3{^)CDs;yXL*qYgEs5$$%C9x*K9ic!&Ri#B_aVTK(ik+-DL zo|Y4nqeGPtmeHKw_IKnsTH8=-nvVD?Ihou)xle8Xg|KCc;QcG zMoa?Cq> z_3Xo&zv}91>g#UokXQb4<3MoozHE!rL8q`V2>um^8e2-pul7nR>(ms6Aa{mo*OS0l zF=(6Wyp?XCEb2kc>xBYqoPWckms3tL5{02)zR?S=L`^;ap`*X8-ZhO1&;@~V0)nsE zr&WG-q>NBEDDcR(L~O~0F_P&k`Zr2IF#V*`g)Q5ML`v6S1nhatY}?1t?mLKq!0Tb3 zvl-nod0HB3=-SIAEe~MK}!ltCw zD3%~Oo{v}1e@pbak{Q7@vow2D=^+?pqY%?|Vx zy?4@E2_n;>zC~RiMOp6px351+c~qOcn;mNNU5bod>i$P?N~fxTe3jQ7hzX9qN`lb;tgS7P6=^Ioypc^4?9(K)Rl@|)`$16`ac+P{%1dXe*z)hf=Mt%5X4fo z0FFt6&Jc!~ZL#DGh|19qwLVcgv3+ij&r9e`x3PD%8I9F${#<1b>3y(zm#%2R7CcTK zw^dr1+9-<}{TxCZ3^ScU`k4SyeEzdQU1Ux%jiWjWUWlXh>{ALm)rs){DG=j7Z?6_M z;^0GCs`{%L63f0i2m4It%`SgS9uNM4y@X3HZFF0AlgrX?k1nA_pi1tWnBz*9x(ZrO zo9IQkjIaVpIl>#729-hz$oM$y$=nxZ(blSx@=2r0yLRnZN!f&bb@v4bigOZr=NxfA zch2g@pC5J^l7-wJeM-GB-HB8I>ZD3SnjO_OP>D;m>r%75{e;ooCqGj6dJRQqdd~VP zqOFe{;XQubG(b>T z8@|B9R55BC&91DI-~q&puCi=#FCNeRZ5;an6n@SySBKu2h`n08546D|?aIX6&8eC8 z9{syLNG*6=^p6Y6pa(icecCz1UIGOtoDCPN&0`gfBz#M_-{w!zr*+cD~kt0 zX?396hHum(03H`abQQE)nEO=00UZ{=lf}3LHeUSK5f zT7Rw?xU;BNG+`M{T_xPIF9+b2)iZpcVZ2wOXpK{EzVY^jT3T|6U~RL0$5q+TyH?TB zmmX`zHd`IMnlkVE7U35X*zSbl>gFe~E2gtXnbk3K?jU`e+8x13$sOXw$Mc=vj`pr3 zXpe(h9(uUA2z}JO@cxAenIgIVMS1jJt9A1$pOpAN4K@0*4Rq<>QJ~B9RK1VDZ?B-o9;k#L$w9|>ZbE=9UF!V)a?$=Nq3Qn(SSXW z+`W54yWg3+rJW{k{wmcXp86(sWQp!)*wMD_M>JqRK7nxIPjaKeW)nmReq5$}mw*ZH zx=|@?w|hVxppYAYlN;IAXXZ~A)t0IpdTy0Gg-*m!b%&EGD?Y6E2Jpixkd_hD{s={7 zph+c$GDRhAb+L47I7{l99?e`dF1lJ=@5I=Ig_OiQ9!By*0cza(Xk^5y?|6^QG48^B{~b0Zm*;7&O`?U6MA7r*XL2fV zh|LFDi^EAdF@y_A_E)BAgrTIg9D&nhF#U%Wew*fe%Gr#P$Z;Mdd zKy#pJ>uerSzWTrS&Wl77qNIcP#Q$A?PML2YkLO(5K(Y>PHb8bvg#B(%2Q03O&wlzi#=(k|4D z_F%I+Mw&`z6O@d|zp>gA8VO@W9BuDUNCCsx?M{f{=#E}lRmplhrd?`?Qg$1P`+0Adx0pz=I!W#cj-F}frdbP zvn4FPa$uW^h2fj zj^R~5|9XHAhQmZGVoGx4I503u@Vo*(r@$MlV&d88d}VW%lBr@SE9*>eZ$KJgm&Gf-<8mKnn|SrN^IoNeYV|2d74(%zq}m+1tOsBRZds@Nsd^8i7Z3kNMD+n+jbDb%3kA3uoJ3)4%#!p>^-H_d`6O%w z=$l~8rQ1IUGb%~L?2*xD6OQJ+3cGwGU2j=k+x~Ma$-s>Y3jotk zq~TzW5PvQtc~CzDKKGu%&u@(Rj2{O9h!P=EOB;jzl6%O=Z=>sK>zb8y$rT@>)S=u- z=F&fG#p%2ycGrtqn}2wT^#qj!4u_cTXl(oyH$9G=0DAVkg^aa`q0~ZvTRP6r1zynbcNKzVA$H0heOB$2Wsv0d*fb*T(o?sR@NsnBExTZdF2LQ2zb-*;BUIl7)u*H z2zy@!$-9%%CUcCa1&}y_gW(laPX^eTWc~vLYIoLCI^UwOX>n~18%x4I`iB`EtS%fC zg&D>FwM+@}g8f!!kMS!XTqJhrsLuDxi#-d`1=NL5T~BURo>k>icHtu-!!Lu%Z}smAS?L_GeIm8(wpw94&<;Fq8&LsAAM$?xY}hR)rXYg_M`oZHD`X0ub{=qVp0^oKlwk}9XFr4IB46?bFj-` zuIyK=4a2X1Bv}wl!mXMRde@15XFVeG^B2yl58rT8a4P905)F~xH~QwdM`VoMfRK78 zFQp+j(ylj4uID=cQ4N@0w}VlW>&p8_5jGgKyU4KAabyd%1nXhxU<*NS!spRAcXRAk zB-pJxw%~p)1{=Sc6~hWnzo6q;bqefcgM7<=e9! zJ$Y{fu&4Ni=%MD{Z& zIbXZ!NPFtOGEvr?XM(!yt5Lf035&zHW|Sx4Iia5ucjD+2V@Xc)(&zXD3|Eukt_sf`!L)=yb&OoYk@n z{o4-qmx>X%&OZGE+r0WXT`!^A)BJk---8uN^Fz(9150uyYGBbeO9m_$-~{Wr)7$59 zx~NZ~TCXW?+_p69zUZDF@E?C~u6~mqs#aFBt+vZ_=Zf=nP_lXW}!JV;c z0$M?oaPjl$D$EnhYcKIFc*IOsB!FSUf{){pc}oCy_&j4Htlg$SzUL)2nHid|?odc1n0Ek|^IcXF~{R>Fq3y3m!JDc)Bt%ejmmyy_3$W!|i4 z6c4m=Pd$26-EYOVl{@qaN&TPI{&AK%I+ir{*@_DG$ph9@YwKSQNNTyY3AV|jqpJ?w zODC9v1))fE-eE$ z>q`gEvKrtPCEvm(_4hBeKWT&4`M}5ISG@dYQ6Ny}(wABP8n%TRaDjJPJe=F_uly@J zx5EAhUs2BkUnEktkSFEdlvkGYbI|RhCPSvOp;OC>%zkxSsV1R%_L%NzU_3yD(nQ{! zBxIA5=~kd&wTQ+HfJ~7o^uRzkSgm2CD|LQvy6aM>edHfmsq9o`S-su_6jrW)|vrw`Jac|8!e z^bMF0kC7CtTW5@b6|)wB=$b_NkHYT%i*S53PjX#!o>c_#zXxYPu1XY?l$}o{Oc|@q z!aPS_`SFA21A-cC*b>{!VJQ6z&ozB0FDD01#NO=RT%bPGSl?8CAw1mtCJ<`2l;99E z1>lHai@{xoxcbR3V8z`PRC4c*mC~MAHvx|?8WE`xb7lD3tb755}X|G)7<%(K0<7y zFl~m$q;l?`p|K3G?Jg+S@T_gS4xD8d0cQ=W=Yd}W zQfHH&z;U!;~vBrC$;iETG1l076&4hC!hQR3Vw<8#J`t{fq&f-bO9h8)cR?mr@^ah zK4*SU^~RQ*<9HN@ew@q=XQ|hY8=bGVzFCvYPQJ;0jSbl6zPJ@sTI2FjNE%c)5%0VS zJAcT-gsXXxR!E9o^=Q17ikn^dA4*{0@&PL_aaLOna7jiVG|%bCnVC^M@&vY&aRl85 zM>n2+`~$6;Z!~(P+V>fA?KQDqcZ|v473H5dc3)Vk=Q8oWg81|lrdy}%xGNzb*3gt? zsn450zCqI%)0BqyOnBj@PXKuOTDmEcB2DHtC)rR>)jvxA`uwZ zIIuoqx(7(Hn}LH!+=9D`H+1qZ^$T@2M96T4%(V@_d?KdJIzKr>qR^f+T{lo!8RKzw z=^;_*#|8`0I-7;1K3Zt=~z3Qt{bpHSID}x+t1h9ue3oV zjgMbOC}g#_`rjQWjyg~NWAobHT_&Jk;=fLC1u_Q}9BtJ2f&>KMn@mywm`1_961xIP zPw_}#YcB^4kgkgY1$ShFD!-1qhQ?JtHSPZy?rcXS&)$#jY}{NzD|uQ6>b_UsCK&bu zfP^*q(>IdT{D^e&l4f)Ia-cxk1Io~=opfZZWY$Vlr~Gw@GXW-M+WISSNRB|nt?f52 zE-IQ>&W~J7D*&yIwRTPN+p3w`-+DsN&F^D;g7~I9iIgZZ#uhik-9b%|hjwD-SFNhv z`g9Q~C1>`JoKEs0xkZk~;wZAEGAt|A`ZHqRB<~RfoRJY0Ph?f_UdL*UJqo^~F0a7j=TS5Y#I73qdY8lzQ6*hEhwF~-V<6|VI zbW(4ehjRu!Od_=}Vy`q^{-`IUo|M+yZK%SfnO7(Ken4@u$59db!|bN+=dskc*Q}!{ z4{_6>noLkP0PKEm)fXh#u$?pn>yO3e_QhNO}Z!JylNJCnohhb;Il7S>% zsuQ6!Ywh^i8P#5o!M;)dH`<2=qr^5U62}tV-3)~E$!mfB4<{`a-+><*vO}n5ejX%VV{sXYysb^A4@3@T&tpVAiDFL)LYEVY$@5s~fE~-Jt4c z&y##0B{y64f5s;Rc2|UUH-IFnQqLL!0Ml2h+3Sy7s7Ue|^VloX7ErCioUP#GJ8C0$ zxob;yvrVr;5xz!_5~L>EP15IRIEMp+;KVT!pr>iK_}RDPFNs&8E0h!<J4>bc+>&oj=vd6!)GUtLmqJRJI zuf}M=$(jqm$AY>sAYf|?mk5AVWmq>Cw}RHyY5HBC(`ISFLjIES(MjiZ!U!wd{H=q& zH-Da~`?dYa&6x0Ca34X1X2BYeyH`VJI0?0Z>jB(1AJj&S$g)OaX#YK=N|s@AL;#9q zie%1Qw-wF(_bz;98Ka&B9UrzP_q*4^%p`)87HwkL8QWAzE!M&cpiq*CrMjSDHm{!G zt>%SBWCY@X`O}Qs8)Hh~_XG62d_Q!*nesiu@FjcYBv~1g`r%}{uNAsOnh6ZLKa8dO zT2Gl>-Rw*3!C^WZKmo~$ep18DX~$O!ry?!V8FR5`LQ2d%T26ZeK}GB!UG+PCNv@zy zH*`BpoCjjXGe?*|FttN+*p;+IkI<}+*#2=5SDf%!{O+BqN>dGmaz;{QN$=VL!6E|` zlNpw@XAw1fivZ=~bthHYvp6(oWd-{#4d3c;_B_J~4!>;r<6l&Qpgxcl5&diNED|uW zvL}XcpV3N$58_9(u_b$zo+DE4sk<=KPuV_T?-dGaAg1Kb?HMpfT96;J?g*Q{Pbu$i z7&lr_@$2Fb@|sex2GY6j<>A(imO!Y>^JvwtxGSimR18{V$-VT=QfnPwrE9vA`-4{@ zfhMpxC8|LlK^9Ioc}-ZF5L|kr;Fj-bu?$dU zjp#v*S5RQ1$yR(V2VIrHj}5F=J{V>@?T7tUr-s_I>+YZ%9($!vx+xXy<+RhlUP6)f zQtr=LhM13n%><#JPB|vbp6OJIULiUvLu?V4XA9NXGZy?4b)Gwt1TD;0zEiag*cPX> zebvIF?)P1?o0n1d4Did4URIq9;L^To2!1%wG495iWp6O12uS^TU2j0pVy;p=nIUO*EO!v_ck5Z{9r zgkOU0M;6=@h4Hw-Q=AwXSr0MXwQ-yPTyJcZ3-jlpdl2`+nwZ*I2sO{CtH&od9+S9d zdi5W|l_LzmjxxX%;!MMgn(APHhRg@#o`eB31bqF09R1xAC zA~H;Mvd3DFA;I7jv;e1IEa=aK;3K-h-@L(bE%lvz7IU`BEt;8Cx`|-bXtr zZu8TYx5G>+xA%0SCy_zif=xbWdoM?SP87^KS3Ye2zHOG5WXD=TJMYgo zPpYgw7q|4KYn4)f>1e<}#38y;%dc7nv=kML7>-qilv+31gSZ<;&nd&pBW>ny&o&|m z7AUv1^;IpIsjrwllNH)EVU$@I_JVkmxEA6w@p{(Nj>QNSeB?#24d;H-RQD;vtIk@J zn8|=V>fMFhQOoj7ZJ;7Tjo|#koPxX0>DJ~i7`ausQuK6>->pUfkSuhf?_(XS%95p^ ztMK4#Ni(=VZ^Em2F0!DKQqTU7wRVUdx!~$u89t4%wx-|CxKwv)dBE$?`ledeR?!=` zpfa;8-;Oy5sD3Q~$8f?Y^f>t1NgLzy=3~of8#+L|3g!>3phM9@)P6_fGSi5L&1QkO zqB4!a`&U>sZnG&mv7JjbD6+`}hYe=hAUqr8pGoqpcjy7+Z_gJVmfu>u5`!Q~rYS)B z5<(f@+IL6P`$7z6N%9!Ahwr!^jVZWs$>u(AkFmLZzp0jds5(K+SlFUU-B1E~a!M-=Do z(*&K)YaVCosD1sVZ}Upt*IQh6HmUXvi>arCHLrm+b?F@2Cs$eJNY2s3Un5={0g~f? zLi+orsFBbC@vA`N*D>aZ5lPhbv!+^(fkzNR-wu-ma`zU%o6<5zvi^E1sea&UT6aq3 z4qYjj|4Hvi?Z9>N0oI<(ijwM3Z?A@{$lhP(s4s#0&i{sdLws96Fl-^7farzVmMFr8!|_2k3{+opsrHI@Qj4j%1Lm*rA9wy zpBRdk8%td;+2ZGn$G+g`UODH}UN({Ku+&hf9BwzMh&l4CR$2JnD*Crb6M%*ZkvQag zXv$lr7+%A$VI>#_u2V8EIfb4Y`y`1#d>;A+Ab9_PfT$6k4$c5s?_M4sxWO(XKp?XW zjT$yfNBqMq=lLAJ2w9NfQ+V`mLu@MVs}@7X<2^&cT_@;+Kz`X-p5%&yw%lC5Q@$oz zy_Z&^Vh%F&yB>%Ia33MrNIU5>@$z}z@*@J31LGQItNZ|TMeA=W+Im*Jo-`_YQAZ6K zsuh{v%w|%p^EFtRdi-C}3La>j;dgx1`mr8poB^aq?8;^$c6!*7AoYAk2T*`hToHp? z2#XNim%6rmGhv;P-&g8&))OzIF%_>vMa_35@*|R%sd1^C*yi$=IkYoWOHZ!SD=Yr4czklJojhsievugZ5mL^> zYk~kmYYRs0nd~C5l!HJdbVWaQV~rYoHtCTI;PrZ28F zN;?sdCnh$5+>^5cacs>7iZz6b46E7*1DdGEO&KhYuXu07ZHr}HMvd3?a}|IN@g#2H zvASj?acOO{ow6hUT%_&*V^LyjEVaAnL)w@c8N*%zD81+6EN)7m-cDbl$))SF!$iCk z=Q-$VBoaO)aNeL?GD4~h69o$*7KWPY_S?zB9S_K@jE@eS=vzO)HI7?t^?AC!AjFC- zw>DUP3fuh|H0|{qMlPwzd(|XN1i^>d6jgDx5VHiz09Qs$py57X^uQbo7zrEmX@K9d zW#g8dS0_V8(HR`C3gw%W8f}%^2YH7x( zD70WMQdaxS?K^*7lCbVKB(h!TIsS-rK|-at3=*c}?e`-gzcgTDfJOAV%hJQ~U=6qb zGoXTuK5K1#Hfrf_X=&+mL&x9U-Dl;G*1*pt^Sipbq?Maa?z?Jx^pG}jj57}*%3=~4 z$*@?4PmYRMgJ^eRYlQSQV-bsJS6g+x1=wbomG-%dZP?~)I`p}#@W#lYzUcgoDg|l4 z>YZ!)+aZ}xp=afOEod1J4goY$5q=HgGKnn?0trp_I5?;0`A%Rqn(KDF?LvBfhl;^_o)M0(k~DH5MB)1^<>zp{dI|Zk(e{)nA{RcfJx|@UN*W! z!v=Qg2N=(ZuqSyr-MAmL><9E==JfCT%r&fVCyz1a!q8YR?y@q9l)^I-D7yqIhQ-k; z;NjQQG~l#@8Z0w0xWJy4n|>HoVK2tiaURm6JG_3qVs-M&`zy0pcn z?es+`*}F3{rgPL#!*kw7%aeM%1D$c{&L*0NjP(?rE*H1RHHMI3MUO9}hYs1{v;%2@ zj*H$lXSI1XudnMb>0SA3bGX>kJ*YPG?WPh9AV+5M;3&luUrnOh^*RGP>)k-e$Waxn zDMs=4hW#eUdX14W#fYOMxTBOhEXSpSqRH{&uJ`CfWzJ3gCSf|AAWL}}Wto@P8!utI zAF8Fg?uEt5#otJV&std3otk2Tlz`RNrA(@;z?8ZJ@k_{63ORqQM~@z*xeY96)W&qG zvVh~v8_V#}X}v}pk>q4@8`PIsUcwS2+>W(05ZTt2Tm7ZZDEY3WXN3=+M@ zALT+o1bP?#F0s}XT?^P_^B-ugH!r8~RLM#hf?_X#k@0|w9%!=$QW)l z?XGQ?`i-S)bB^={N9JMCQomo`&Ky?Iea9$ry*>Sxt6XesrY)Q7f98GF+RD2~T+9n$ zA~t|Ou7CMeSX$X@+K8$I>8_xAAU!gwsSeP|kQ(w4yG4qKqBzbHK;miyq-cy%)ZjeTp?=&;)Z!X;-w{PI^W zcze4#d4PJ>xXsk@rLBCsiW2n0F!}XH_JW#^8Mi)+`eQZ-L8d-bb`F?NjRsx02tmvS%g|7EQ3f6&+Jan_H+tboJSF|&Ze`C~P+%I~t zn>lmIH+LxGJ}v9OKqFCRz2Rr!XOpmwcRvr=dW5wKj{*s~?W&ClpGZJ4|9wd{ud3nF zsBxZqX;1c$a0pb~-E_NQVdtI^vQGeQ%HEz?La<;p%qtRp8 z^=N8YxAf1t$#XtE`p>g1SEYA;`BPKRlXSCQO^)@XN0U?WRpJivDy-9Qh+Ee6AdIyv z0<{E>fhl=0nKNh;L2Wd@KMLeju&wawC(VsjwDrt(;A}CJSrV!!d|$A#cZbyuijU@4S62H_?P$~=%omAj@@YqLP3(R=R5`L#LJ4;4ne$_J8JDBGV_q64)=1%mJX~ELE zOIBR@MicTe`06d0hUlv7C>m>s?qhS`91%1d*THSGoaEC35nSk%7_kL9d7)#xVLes2 z5@=enltMvFpaD{@4jeDguS0^R0baIDUzj(gyss^cvZfrX&hw}pu=VhlH8+(K(oXlC z<~1dgv}us^Lz$VE(M{FeQ`AXN)bd~Dc~5b03syeP62eum9S$9C#h>Dl(7YvH2WDPX}Csc12 zDofxvOm|(?zcR;lFi9>f$KKd8%;C;UM2bI7B=A6v6=OZukeC48AlOd#1HY0}eD7w* zdPE@G>1^#RZ1WPGxy7OUO0#+mS~1u&Dn_2POMY-Pe%(B^)wkA~zy3G&-aM+QG+!H~ zL`6l6ihzQUQYMwjfk6RDIUpj1s3<51Q4tv;q>w2{$X1Y9K(PP?B_aYMLqsNJNSG-_ zjEs>WWI$2o9hI;p$@Y8gyY5=wImbG;yKi@$I^Fz%ixtD(@80k5o1WkE(E7)?gC(N9 zXd}J?SBGErbH$(r(k3z>lMr`ab#%gTB4!1`;zh@bciy!zTyb3kwkqKC)xdk7X~5BO zCRTyKU(*KR$_=65TeLU-6F8wW#TuZ|H1B9cBXuF!k4IG|%Oh02C_XgfL5;#)(ro9; z_f`V;CPjzfN}pU$bo;k+;+&}wXQUCuI>EhgPK z{KVGnWK{20DOY%UFi+Sw9-zA3xJm{jHCa3m5%(jesmf7K3fDcfgB|gDc8K)|59+1~KT`5vPIj znYbDmIGd+fk~2o%+);GXS}WRXh`AgYHH2?<-&{mA+D_Iie$(Ig<=L5QgSK+hX)_bV z`NofS5s1poM4zR<>{{t@{!l~w+QY>cg6?g4@D^SmW&4d<`I zl7qoYq=nzMzwg9rLqHbr#pgdFnk2p$8wbv zF;3z8WrXM9TP654;xmAaN*gh&W3baqf-X9fgr6E_X4DqgI!w06R=4?VvQzB$e3oxV z^a#^+&@(HF{DLoO7dEf@0X4+Jdzr`vLy%blFKQz;lD?|T(G+Q(s+UDiM z=w?`h_s|YZt>!dM#u*uAqDyv)RyW>r@#^p{IpNJI({6N;Y0>d9JpBCnNwOJ>yep6V zQ)zejZ}(i(rW!YU!v{2?2&;$Vj(2_Jpi2h8N@7p|PstHt%*B}r4BXgSl{cOZS}Job zs|C!sGJ~a!LrGE8Re^ZZ-)#7pwd9>tC-~h!UVKj1M9yPKo@CWDyAsdb-b1zl<&7f= zd1;`*hzh&CZ+>QO=Y>tg5vQV!U1e>$2_nW4@^XQ39zXQX4t@ToGi6=nkm`u(v6PAS zq&ts8%54xJCwsS-eZ{O@Dg>+`z!}UD*r7|>3kINiFzehDHAN(ekG<^lF0rUk?1)6( z_hfUT#37=eK3FJqOxElw_6$l_dyu{_2NrP+q5*{b4xuHDvNhhix5iyFp*;5~fd?(| zVkf2y5r2ia?VK+*Niop)EBaQTCFcbi-)ih$TcL~6M9ab3HKRzAZ4fh&1>)#HTupX| z^-H->9Ii|$;eA()jUcJnp=$7QVAhNLf&|mn1Mu+WbFAc1MKw9NA}yQr3r9D&>P~K6 z{+Fs>8R>XJ7g(#Rbo4R7L1+mLTHg$1VQJ1PhJbi)8mB1*0 zrjP;1e`A&~`hq7AQ#J_n1A&eGTiD~W2igke8R&*suT0(f!+1NUwV1(cgg{Sjaw z?^D!i)4sHK(x5jMOlzwPcnk;Jc`qD6Z<~-=i6}|3;Qo3Xrrcm2UM!Wyx4WSo{xW~< z#et+)J#;Hc{)O$q{v(!Q>%*29KhA8=adDb7(- zmc^OoL#1~0sw%>BlG}7CN;|r?HxRc12^EGR+He6kF@mq^t8+Z?PUt@5FxOV54it0> z8r{}9Z1KLBlNhmJS{&qOMNsYjSXAS+$WpEEC+u5UaLfR7KQIFSElwN%94l4;^qhx5 zghTDGSMj{JVH>f+R@?0p>sa22`Kh3z#x-{nh;U6Y(+= z^?`7nCBiBu*|-QC8}sQuSPr?^TTyqxjA-$?d}q)|_e?-+NKI1A$|YUs9c`Y*E`2^5 zCh6vLy^RI?5`U0{k{nUXq-D@+84wS5h1EhvR5;j5oRz^hk)+`+F=kWS@LgINXRCbg zoX%4(%RlW-IGeovhx^XQ)i1kT;%0r2)+K?22WUdCdhdZH06+G5>^Lj}662VLvk zx#f;ie^c+r6Qia}(RF3ew2b5?gGAiS>au};pN;0?0IROY=+?lt|&sJUuv|EX|9a$kMwPXeAEMET|6Lys0Go8VhW@CIDFDmy(UbZME^;=JH&oiiXub0ZJR1 z78!%>W7VK!%7`kX%3)V}I$nInn#_6BRg;D;1%7aN2&n?E@=bavJOvSf#6E4oYm%Fj zglZvWoa1g(XkoxI^0Bk(rt6Z%tVF)I*3di6b$srPP%)nepncuLUB1(`9(-(c@wHLc z)zxvV5$fwHbm;>G%f+djAXN)rOCFSSlF&6>2}Mo#MU<7u0g!21c)8GJy{)hSuSot0 zD5}PoyFKu{P};PztHFUXuQy`Xd(4V`H;f)a1ZWv$EnwS}xg=JHt9ir-@lN2C@mQD2 zRLvUDr7-@==V}+F#!O{cc*8ffD(J?2ub?f>K3-lv^EN%)cd1$_)gk0;@Tp~;--Qr- z4_5F``mBa1j2CE?a;N$}4OPb1>fHjv0Xn~<=7ZMQ1X!;~PDoKI7@W=+{#Kv5) zEV3rAvKgDikq7U{P(T9SXKM@FAt8isR)n$cG56q0Je&kc34zWw&Iv~dW_mV9o>ui3 z8Q1n0$cjG=yp%?P2h*etyclQvtcgK1@Hwtyr9oG0Wi~1YY6`!y(U*9k9Z0|@Ne-hX zwCSq5n2(kqF$zB7Rxm#M;xT}zb-e{}@;(u*#JeG|o614c;ROWz7P|rlm&mvX=s+KC zkQQHu_+XTX9!;W>)(A2X`;$OcL)_m17;vb--uOTt-q5kYBiu^{*Bl;X^p1XmAZg$c z5W=Fegs)Qj-hq_>62R(QaB<_$(09iTh6tMZo++X0z`euSpi}iJ8T{51gMe$d*J1_0 z0~RZ?(1bRS3qUo#Wv)@5F^TVkxd)q@vALxM* zrNNrzv2c9m7X`8{pmjk@ze?qfrGJY9rVu0h7E~W@6)VmN?cn#(V#|ULvzVqZX<;19 zNc;a;?!Onc`dTflMtA7%p(1m-@ zNUc1NrR~0f&@ylNmH?^(iQ;uQmD%K~%;+i8nVx5(w~xOSpk}Jykqjo3M0)5;YB{s9 z8lY;hWz2dgnyNyZd;>ZBi0MQ` zWNO>t%9LYuGDsq&jauO`VIxu?jgze;sdN)$ipz{U`%%drlJ)kUm5J4xxRp8B*kZA) zC#$;#J7l|cv1(5A&jQ!T!sB}^^w(EfcWB^8$Asn}_1R3{LOSk6QIr@I_^I%f*|!&Ky0WcPBno)GwR>7ty6C zlPW-9E1-$x+l0|no>BX&^x-xxenMth3BY6gP#^G2$I1i5m{*nOo1hl(WP-eA%@!x1 zb_NQv`gwv4`%jk=-%1NXkRPrKLg1fqr_S}18?fbt#|1#+NTNCHWwC{9R-VL9 zYtSl5xO1kPCMI%&dch1Y;AcN0xDP$4*;usd$hpoecXui5h_y%;st;g*?v?W9sM};| z(Q&akY!Ekf^%q@qz6*wXNz;J2&ASC2;E zd57_~KqjLMA|&-Webiz0wF-Yl`rs2QhbHVt@ED3ZlGiw>(tZEa(&j+sk`trWJnC}i zn%0-eT_-yOWv#Vjb+47h6-wdymE*oj>Ea>*jDsdt#PGf`eT&@?4?$*Uhg+hVT^xRX zjr5|_MMWrct%*}~!-N?xwVc!_Yo3;7dcP{6z2Qrmn;WgQJGp1~DPGfofN7wD!=vq&2N=p`Ppz&BB z#}Uy*R^3@`62stTT4;4nHaBkCbr0=IcV+nYW~|pSbHS4r!*61Lao?8h6mJrHWcz)k zt6k=YE=G&@5k;Ub&~cL-1c1FFumnKk)LqQ@XdL<@NKYd>b$HXDy#gex>n&>B3$0b# zv~E{{#J=i1l8=62lgJ^I)kT*h=(y;rdYhI{Y`N~cE64#u$ zx?zf*UsEiB^oGL)LBF~gty5_J{>y0SN105IC%srzj3$XM+lt_yPdeMWN@)L8YH9iGif=SD^_y_qENo@Z zyPJ|!$ekJsj#TlszzaV2ky{}-mR#BuV}n)ss{8@5gP^uGx@JBrXhTcL=TN0G}Rd@!D*chc!3L9yybR^WE^t7FQ!S=+anF!7)VN9+o;sGuzICS(oV){0jGY$mBh z?LDv+s2`639&7!q^6Td^^>i%DYN~8hjIN*SHd>P%*Lbi36A1YeeN>(^25{p5NwUy> zplC2+2#aiRoG?0jo|np=IgF@_44vM*m?^oWzc8bi>?tU|b@qG|oa)pb9Yt3eFfTEB z)j{_1`LP1j<&H?MGfqQ&SmAP53h4Z4k{805di>HC74J__8%^EbkP4bB72}=}p&_d3 z*tSs$fGOt8GixP6{C3E(s{B$s;lz*S`*}ZMcm?QUP;^=tM4D<&yC~BPw#g=Z%zY$` zcl>Q-_j!gp6s4wFLKgt7z5cCEVtXX(?n%67rd-##P3pDqOk>+ba8p`^$+GO0%*8!L z>B{IA3uy|IF&}cDin35ewusEddN96zDsoWa3Xq93sH@T}j=jH2H-2?>cX984MOOhK z{YF!za%+rHXuQPVsfH6;;H^}7!P+cT;jbeh|7Uv*e}e1(@FhV6dJ>)uL-qQM@iH+0 ztoCfoXN|N|+$e0^#}J^>LKErXR2b6-yaQ+b@qW$NkG9{i7-#9kuTn)UMe1U}MPyF` zSX_74!+?VfBlG8J==iIc=Klnf@JEglOgPBrgM@i9aKq<=Tzcs{I2gT4*-q<97q2kG7CUW{Fob*C0&{ zwHk{+T0CW2ueoLp`EaGcT2OI^zn#1z@S@x859p?k)3y37v!jzOy&q-W-kJx&E!1km zf7nzzeo_Tq!++^_*v|Uxt5n6*_#P1ss^3ljfj}*FoY;1kkg1M1(+HWW0?mP>Xmh&) z#L6++83vfG#P~2mp=Vd)gkv@35cIVz0+4?hC9{qHw0X3la%GYS&a zad<{7Uy3f?BLecMdI7lDS?%#yE^!6Pg}!CfLZKUAd@XbZnNNpY{P7lxBAS+y4m_g; z#-^L?G~10=KoZ7_bbX4hF$+0%znn`wG&Z~E&(TBq{mLBu5{(MN7=tfHNo@Q#?O8yo zS3q0wO6JQM;6UVkmHL>0?`uP!0XJ_2AeO|nOrw>@(ESY93sj?WS;7l|@eLB~g+`ME zwNO!y)T+al|MEWyOr#XG#LGjk8HHb^MyiIZmb@2((_}p@mNAa+g+34X16+p<@Cu#) z{59~LPg6xtsS-CPdr2IQ%ffy+$Qa-DRVo<#6o!a)9sUVBHvLDb|Lp(i)UiwMr}k`I zGk-<+BJ<@|^VJsRfVv|93}d=FSj99dC=y2p)8<1Zvj|XERwJeqi?<_fpdHV_aiRRiQvhwz zv{R>fvu~VHs#YyL{qSe)xJ9=nn<@kl?Hjgj14ACijmN>qXc2Ub0Mmqt`6~5@I3dqt z&PQw-2Y(b0}hT)uQqj z_x2sv?E4adp9J&2zzCG8eF5N~G5#CQ8*s568nmFn!*?+qw9BBjy`PF~%$v~U;xObR z2v#Id4nv{=*#Y}>FIi`(R=xg4Kgq7C>dfGq5oX9;0=tY&$tc{L)*I~533K1?(o9g5w|waOMuaLD6LSE`NO*&}M9{o04(r+vC3~xlveTb`(jb zt9yOSJSud!s5&rxm8Q(;cPdcCes~YovjBRogyVt(LufT^CpkW7LhBm^LE>gkBo20G zh*xDdhqFKNsldYa8SvDon=2ozNR@Zc!Z;~pq}xss_^@+#{}vfkax)=m`k(l|bJ%u?zE;F$k25G4MI z#(>+x@WFmDXCj&`Nh&pgGn->%`jJCR=$(f_BJ{t4gUi$)EI=1YjnK^oikCUtQm{-Yxa`0j4s zn(2ETH-V|9uN6H4IQwrh7IQy;f_Ly;f06Y{;S+EX-M>m{fm9VZ{uyHMdru($8-utm z9swwD)E=-?Lwz{OJ>0Yv@(m@$0AQ!z!D`L>p9aDG5%+%z_yM5b3iw2k(lk|Ka+0+R z^w-DZ-X0T}NaAOiXhyN8v^W;}j>l*vRv!8)wUH%>f+mNd=_H)zrVY{($~PsR4S(=d*i@ zWUj7$BJ(-=cS_*R@KhAwg_l#ZgIQNT%PBRWs-35eXB{r{1~#?s?FeWKx<2e_DABPE zXSY08Oh2Ky#d(+V8jWC`r?2lk{KGT$e{_Z5@4cV61pxEke!_9n@Iohw2{ig^_t@uQ z#`i1APxwh+w8X{$jf6J=mBX=kK*5dwva!Y%d_vm*K9PwCkJ|tkJI4Rs;mrNrKexE_ z-{3MSZUE*7y#-*adSk};7cu|^KENjGd>*C`#W3C`188P*%^m>MH9kYumV=(T0A82` zQs`Hy6DJ>lSws9M8~#y2&fInWdQ0_t?}`pd3K?&EabA!JY}Kob+2R^2{7;U|uTte{ z;`G)D1HkV2OnZN#Z=b za1CgAy9LfibID!Mmp488Kj4i@e~d?Ej{z{;vMwC=7AOZ36L4iaivVS{Lb=TX7bQDMw^FuUJ z9X*2FB%mB!-v{X73=jgRznjv=zywZJ0_IY%?kZ}eOD?K+jj{ESSRJc=@ot*YHWbGw<$7RVjmhr zpuB<}w+ij*psO6h(@)b0L5=%5S*QZODPv-M2A~5Q{J0t03(IYtCSI@^iDK=cg4>IF zwn=0hky$Xrr+^8}00Bf;tNeMBSwps=B5gpjmrbvSu|qWWB>4_@?<0X$zKr-s+)83i zi()SaF0MI08#b9=us_+>jce=J>d<@F`auQsdegthZuvXH>bYFR-|^D^sNBIn`aW~H zi2s4p{|_%G%%%K)&old5KmT8!i_rPUdLGk3jOQ$L89<_cv-Ga$V7AZ&38jTGxY6TQ zl5*}EdZYia7f`tQDpl|dfaYYOlhDQ#eTXNQcCeG8biy)tRkGJbMr4ggVBSd;+)C?V zDM(kjxFCNlJvXOl%qen`Ryd|KlU`i(aMW>|>!@jF-h-3Y!O#Qz;G3E>rQpg+dmI12 zK=WiL#RXQ!e1a_To{fn+C^PpX@R63VA0h-{4TIQk612r?#uEhr_$ zuRYlSlGjjx+z6}99EOmC=JFm2srdyiPcs|^oGao$|I5m`&~FZmPzLu6XiQKNn`NU* zcEB@-1i7`68zKuz2j>*H91C3TVA8$gq#H*g(B;@zlR-CG0uga^H4d|wIofmITB`)s zDi|st9Mb4^{t-K_@JIE&{4cwY%&^HsHlPLv-ue70kjCf|fL^tuxq0|Jqu=Xi4QpKm zJu~4|N|L`Y(8`leWbGxO(b1Mql%#}Mp^wbhg7z%(j+xW{%ihEf|0d%FGcI1GjUHf% zbVc( zVITs4=rSwx0Z@Km%?>zzSr5X%yzlmC9{q>);QpCg#~uF*;nD{ks=z}WM+f}PCC~{# z7aiCx1zk7z4qpCyNf9ZC*7FDVc4L*G`aSeblvmV+3^%(ZS7XTyx;&|12tT2N4JR66 z!d<1|s0^Qn-WY*Q^AStl1g6=fx3bImxbE^;wUZE#Q61NOeJ zQg7QpW~^QY$1SUx%+DuWWR1&-_KmV%mOvp7N7=+yMXq`%?y~Egy^P8)cb{(z;!J^9i)x@QO*usEC;eSdL4k($W7?e zgL6x|s)$!5dvR?E{NPCX8r$5FJxx`dOXgD*F#r*Y!; zg4k#ywBHDk7G$6fhb8fhiPg9=JX*X{{}S#c23-q!ju#{Yn)gu3D=eb@3Zwx;t;E~a zQCX1F+Aoyc#ld!2VEqdjeSmXU41NvYgp3Jm1bDH0KesXxaH>-y7|T%%rIWg_P=(99 zx(-S3T53vbvX!sv4N|1bAa{HM7Yxjf8t}0)Z#-wASYokn!Zar_z)r!neQD545Yc3G zdexzS7Yp>aJm;K$^0&OLe}(VB69E_|OY7gb*HB+Og zScV6*0@>C=S^HFRHZkQvzj$v+-0_^aqv>t-oq=W>ivx;+clY?v0`SW{D=TO9%TGf& z_`wtHl6j7wKp9HrJh0YE7Mr2IQ^*e>(o;Ej7Xu0!;Y#410T$pyt9L?IB*`LoKj7qW zKA5O#J|Y3K5NXM zGvbIU39Mon6dmzu$^vpA@>H~qd=kdCLYLLdS#)Lc3B-%$OiHTH+y=k_0J(xDHiyI-a{fRYZ)DZ1+tP&=*O4D>D+(DI4|KSbH&sDt9VLl z#3TBxt=M=*=~UfUsY|%!bXoE)fk|W1>J#FS#5V*rm2NfGM1?IEyV_1Gt?>1JEue3y z9CA0@`HqtF<8H%({2wDHb>Der>j)U*5n#p1IonFoxKsUR;Bsf7H*Bck9dbI)TCd~- z^}Hauk+Ie0<}W{FitJ&R9@Z`OMTO=H^WD^i=4o}4+xZlk20zwPp6C0UragksTh<(0 z>AT~lDtC)~)}~*7DL;BTDeti50Yf;&QiUwQ#V5A~si1`Ctsphs_CeH8J$F=TD z)=<>tGWa9;XK$w5Je}ogSa2qP$I-S?`wM<4KfA0x_2tOzl3$3|p(95fZvtVfE|@yh zdPP?p0u%X4k$`0Hz>Ifp3D3ugb0m(f443< zChh-EElldb5#M~R2q4;X4JgjEB*o&T=vrt8eVtt_ei0d8OvWLRc_cS(YxC5qk&7}3 zH3kpt?vtpER`^bH6^oS&-Zh}iL!#~elwqgouj|GmN(z$Ij!@ z8mVj*E-s!6m<0{uP}PWLK&j|LrxtjrAL~4q$?vo)^D>=Iyj3(}A~X@ErTYTyS9V}( zcAmF!u!CdjE9U$dshz2R$r^qU39}{n6lt^>NP3cqfUKjFj(d!Fz`?w?rYGsz0+-=i z#e^iH@zcT)RIS5MVzvu@d8-hKckVF?BOdMg+^=e~uaj2%E_JBgGr3nKmM1Qf+y-QL zZ-Kg)$%M6_fX5k^z?H&Zd+hna%}Faq24#_uTv8WLyO}6GqNXWGEZr zFQ>=-7<|e{%kB z8NAx0iC97KAtbbr>|7x*0Gb^&Rqm0B{>RBOdo1NugTG2ObL4Su zQ?ZrQmF8Qx2CH^)nQM&mxJheC^7gOHt^Dt^$5Jaylsyv7ciufYXz8EpYH4no_-j?v zE%icS!>0*{%H_>7|Culd|IB292oAL{vY=w{x?Tm%FL$Rf*|*HO zTF&9E^laZfx{V|Xcb;-Z=xRC{`$4XD@KHeIb)`&X}N<^l;jTli!`yk6}l{5at+75k1f{*mf>ue zI=8Zg7LH#@*BC)JP=D6zAl z9_nP2&@?)+Hen7N$L@f56~J>;@&B(#{4W7jkfPOLuW~*FoKqD>!@B&SH*=g?mB{=^FiOgOT^ zPMktTv{(|VK?Gx3TF^|n&HA0J_vH3?)Y6GW; z{{%Q^Zgrt&=l3Ybrp0N+h7BPZYzIIca*%rvC}PoJy`$xc}cU*U73*q z1#zet4_rI2$hjGr%hEsDA=dC7VIk5Mdj6fy^a=4cc!tM_C|@97czU8-HMDg$FP<+a zmCDtdy5ysh;dxW1%};3e0*Yh6WNh=DU3t-5Xj~eeYVf{k<7308wE(3l@oqxGtA?Cau^U`B2=5f0ikFxy^xG^m+jywappydc^qgLOvufcaX-!!wffGlL?(ZA%on~r0@Nq%kT zfFvZ62%Jrj6O745*MrFCFQQp3VjK|73jQXV^#aJw7xgFrwnBlT%s1(*L=zt1p;2dm z@1keGSrYRI_e~4Tj{$BiP(^{q_Gtwm;|sKek`2U`mqG3klv}bBzDa_`Ons9CyBUY$ z>tensfvqJr0s=%U2z*K01jzRX{>Vpy3~_J}Q=H{LBqK@1T*A(ll#Qa`dA>I`$LEX+ zqF4zqV|$3g#EW|YxN?f^KZLzf;|`}anF2AFp@Q!d`prm@B4zT=Xm_Sr25Udar(Tx8YJ5*bRkbHw;eX=DmkZ%vK2@w$+bx#OA8emTNLOKo7Lj-K(oVgaemeEJ094kI>?RIF0bPolM>iFp zl-#20lQ2V!x+FCMN6tc5Y{)9Au>#I2a^bD>sHsD?uiC~lsT+?F^z5v=$8(={mJi4t ztElZD@47e0`B2ppiKajy9wxK-P`w5i;SjTLk8nhC`wV!So>Qwy_QC*34h8r~XOPe# zOhn+WhxOd4mEOvcMZ7MHAH`d`mnz3w^N6b;ckiul5aOYl3|IJI5z+tNsJwR-5Ws9g z)ko`3`Sqo4N|n*C=a(+^3D(@RIJ~j9`Aos~-N&@@Pk-2*e#Mq+k^Lc2lf4v4BxNTd2Wpx z*&2t)qiWy`n?D1VbrAx}BbR5XU!^vE_$n2h1J&>RD)nKEq6l#*c_4#THES>}o5=VO z&u5CQwk4r%7DRMC<_D;Q*nmZn-*Uw4uo+7-;Mm0+09y~BtvhT@7N76;?(ze>Gx!Hz1aLLGn#9ZB@Sid(RP!kY#e3D}eU-Y$xq=gDK4W|- z6HWeYuMgL)4-mKa4B~NuwJ&jBuHyJV!b%cF@j9SZrw`f^+VeO8j&;=Uj6}Rs2VFb` zjzDL)6dZ8VIP_Qtn&romtRRCaiy8Iu{9)13I=Ml#n z!NYdYtSKjwieU3WxuiJhKh7)$i7{XBRmzgF2;$q^fIfN63@E_b-y6p7&Gv(nfnTNe z;uRtOj@!_u)lkzeuEDGxvIm%=lNmrt(T@IscKLe)`LDAr**!#?U5|h#U-4oH9J!5i ztM2zUz;`z7+^U;fb^qzq{muz9ch=3Fb#oSW&ce=F*g3!MFYe`>UneyeP0U3Tb203H zOaaVA6LZnTTr@G4Ir*J@-6tZt%nX$3P9h-p=`J*oI8uygL+OkMc8GrTM675FrGrt* zYA}!$FGHBzsaV$^U!mKqXrr@^(fUNKsz)8s;pUEcs=EW9lvW(}H6Z%J{aM< zSp7>V?Q`Xa_SE4Wc2~Z*${N8J8i&K`;~&~JX#!t*c<3ER+p)o-CQT8>RS$jzmj>`*Gp^kGFQrNC?=*wTfD8>q?ywnt<=6Fcj z73t!AzR(`(6KQWWn8%IoHXpgY$DLcS|FWMrzXKoKN>TX5B<6LnUF>5gqmnpkY2*9t z7AMsLBdtT}ZP3dwArJwQJ?`C$_B7+Lo~< z`AmN>wW4kG+3pnU30;R}$4|PKC2E1Hz(Js4i(5@sBwv6d(~>9{(0$gxSW&YMii|!9 z=hD0$vK#$MG?E(+?bk3dbtpKmYB_xU;VzH-*T4Pjn0oENl4a^b0K>R(T$1xuYMg^^ z1-0!efhu&zpq`k-SOfY|@JjVVjBwma@-cvI5ro(n%|sh1g|m)UM!qO{O^UF(<7;TQ za%A`Jvp(ug%0YR#<~Kw1)?8Ab$!nm(c-|1Mk2Pf1KxKFFkWzt63}uPf7H+vAAo5bO zjZ=d2N9hY$hHZ<x;LM6P1+0s`kZBNIk}}-AKI`h?*%s$bH+t+_J4xQw58AfoYe8C^-_gDLRxnZq zWulGclG}`ND%yda%@z~!V}bbR(bG@{wJpf?Trc*0HAP7Q zMUiZQa6Cfwl2Wn^;&t_WQ3cY_zD^>qEWDSG>VTAQg_<7gyeogozBH{x=*UV?$Slc; zLhpk@MY{nzK!hd&vm?rWwi%|V=o}?XHK6xx(;o|mbOmdvp#I|R(?Ou z6XcH7p}IYKlUFw06YC=***SM!<~?w>30&$}At3(@+cml@>3UXK-R+}abCfyX&#TM( zQ#0ZY+FA%`S1S*+Jf-oK#wQ+*Rw!Dml{`cjjHNocCv=$yU!*mG;-rZ!$O12EcGJH7 z$jlj;2gP^Vdc)R+qI=1Uc_Q;i1DBu&?x1G_+l&*dm5Y9+g)`iM{sbgE))`n(tw$KD zY$PX{T1QduBHQ1!4p~s!oYT}B`*6e| z!EcpPP^tBzfH=OA4(QCW#=^nG2~ALpDn*yP z8$XrYV8(Hp#NwiesMd(%2p@``k$+ZhP;R$m%<1Pe$DohS zUhLeY+_71$I|Z+IHhC3z*I_4IU_3uBl5R>?Lyie(b+eHbMOFQfsRYFyL7%Zf*Cpnd7DV?D(ZK{(zs1^>sxlUT z$F=|PlN+<{ z+aCC3{6i%AM9qaPJ;Nf!mN1*cPcMweD9YM+<(zr(aGvUmh5LbuF6OG5Ig%m@ru1P~ zP}YrPs?~I(Iw%WQ<`E;_!vo6~@@>w4LtQOCkHq@>@fh<@kRpyN@4Wx>x`|u9_`5 z9K2RiUb7d`o4M?k2R6m`2Q-}udveCBwd?SRMr*XiMuPIWf?Om|Sc1@ormnIMjRnaZ ztc`9kRUOAKAdZS)dzU@icSzy@`pVV{ERZcyjV> zMn=J{oF`ATyiQWR0j&>=VM_~(CAV>{y5W!2bFy<+t59sZL-hCi*cn!W0)&jy_6^7t$p1e_Xg;++wAEc ze-}Pu(@oPmXT4u$N}_=De-nGG$H7*1Y_}#^9xjSgY1J@b(A4ST6=clDH4hlHLQ?%l z7`?^C=gW$4ySq^n#D)h%*f5P zsL|fh)x~-%6}NMHi>R zp{o4a!v@?uvwF^zAqlrS6m#c|fSJok;aj$htr(AHs< zYO^cW6S)piXRTNKDg`aUm&u6Lqyf&r5U7+L5}$?f(UdjlGatC0*V@92ah2^58$j?U zzGe$8j0;{T!a4COK;+}tY$I^p=q`}!O*)O~pKjCJ)M^)Yw062O+UNXDFC8?QvXtd6 zu!<0G>v#o*>9YV>jT{%v=|NX!uzZ; z;wrQYUxtqr@5t{XP}Bt2R$_dWFrsjzG^h7Y!3Q>@3A21u*){KU;0n*;^R#i_AFIlr zB&6@So4R9p$|-^*oU#V0_k_4NoIDzd(QMyr@MtR}$-3ooxH?q6gkJgt>EgaF)-%vE zRFMtM@Z$UIH}v0SNL*F&Xldfr`)3cyjI}F#G#MWeg;AQZ<*XP`Ra{JYfh{+w<0M&Z zfQu89Vrr~-Q<0!JXl}-z@YwfCiym!jd+w{0Z70p6I^t)v<4HwH=y3eFU|_(hUL#iT zg{(H~n;8I#B=@*a=e89$MWS9bANv=~_tFkgELAautQa=r%-Kv>P#NjNS3h{)oUXhN5sBunAsy5M;t0&dD8lR@#;<&`e(a zPLhdi5%hCu6Kl9TxACLvK*4w!-4LJ|Tu1e`0W8l_^V4?`PNPz=qKW-$4%?~_2@)N8 z>^xvG%N}k$RFZtQx}>(^Nm+H2O3c}WpLRO^1pp?VMtZ=zcLS!MfWE}9Do+ZB)-rsE zeV=$~&CoKY8-Z^pP0DU%yJtS-W!$klSkkMjC$?E)_zJlgTBKv&HNBeOd#=RaJ!HYN z!}8IzDg*P=JUz398_3ilfmQT*GR7whyXqwJ{F8H+Pt8W)t35`$EY?$-ww=tqu6V_; z(@47D8L5i&7)LNsvzpone9;h3KUCfJPtb)i3nclz1dl=dI>0vi;ws! zrAAqYSe%HnQl}>k;pdCDu*iCRo9(@p0}n|4$9l?U{4@@|Y12Kj9t9wFY*}R;4mgd8 zw*+az^GGR|aTUBQqtLc?Q)Y|Bf*yWPS$R*ul(xvqihfAFx-+oIY(nv?6kFN2z{maJ z@h`CCVW)wSiBxF9w~kLJ6C=hdfF5gSbTI%No}Cc_&`I|Vo+^|z{k#7s6?O-hfxV!` z{yv2bh{^miWdSvr2Laz734uNz_^h2c-D-jcT;w%ehQuMLT=E2T5|RZXYqXbIYBe6r zEi&Vqe3QuJG3#ja$CSq@t2=6T2~?U=U9qLTHJ18RsK6@g!?O!trM!E}9l8u__W>VV zIY7x|edlw&|LR0zZ<@%E@*4XMCk+ORZ>2tFw&J5Wsx{iY2~SdRlX7b#ZRLrvk`Kyb zC+Z)x<`9A&J?3~Rl^%E56+&E=ML5qgo*M4|5>tFs`opXa;EiITOXNhW(1wc&bcV zbiRD{zMV%d0cHe4YJVdtX8<;?Wq!A;aSbSbNx8S7}V zj5Yolign%EOFpd_$tPm)h<8v$uXuZ4R3~lHu)4_R=WhCM=?PamBt>N++~*1!(;xu{ zJ3xpQb$m=<;(!(@w)-Rdxp0u#?9fXKps#)! zs<-dC;2!IK*PxDd@9?2(I#rkasPI0tw#oR6NQ1mrfQuHN7GUdw=q3W0 zCOQ9xGh*a8LgV9_aI3_-7#%e`_4DP*CBifwiEK^ac?M===o#BBw@A=uNUmqg{p{rc zJy3X#D7CuEB2+F@mTZam^BEY@Se?c8SB5kNl1U3?WzRU+wo6HQjZW`wJ4GcGe=r@q zweuzQp_kL0tMEV{{shygwrS=4>(v_dd)^CZYs|043!esu!Nulsj zX=0a%f;Qty+{=IElsit~U=Oa(VE*aQhn|CK0%k&426hc8!mevC&bJ!oT=vPW7No`S z$_eqF?|d-3yN#LtJ`0z!mbY-Rt{r&hDX?Jx_=+2KZfyL$@VA~+ta-C=NMuX_7$x_Q zjVVfIO576q$K#mI2CvbMN0)lXv<^|KDeX`Nbv#An=2?}<5b04msEaJjk9#&q7q`Ow zt;*P#Y2vbsUlVNt1qRU*`Y&sFt#{m$o+mkXombnZsbEvEL25RL4g?p&Qz%`TTP0T+ zr)ca_VGa^}k3?*8HAmFp;3m`rrX&rm4%DG889)-BZ!ao~;Op384|hyEPpGkllPc8` z+`(SM`1alG#kzNU0{XO_Ut6>av|~PFWJtkyL2%sk9h1gPMYtmVAt|YezOI+{V^>+2 z%ulbzJ-Vk8JRG|9GtCI9CN^C~zC_xTzDA;~^Ks2gkNq7tAww*Df{Ey0KzqXwPQ0>B z$VVJus_?z!mc@GVegU(Ny28_98Ekchu8TN22@GPvLND6E?K1S)^b)lx80$;jp=?G{ z_gbyKeEVHYD+5ta6RXMq`?ye20bX`Cwv;uVCHPdwDRpUWBqo}2;>5UoJV~}L(-2OJ zBb)eTBba8&mPg%&3E=$Y8^jj+o)K9^XO~o!beC19WeyI#h?`}5-egKp7D5LNo(t&) zWCH{kg9SuMJYApcDVU0+D~UJ5_(XHBFg{0(#5!K~%G`k0Z^pR-Eia3=xr29PB?>-w?DVs4~$$SUmgE)e1asBOJEV?-VQSP50*EC3j;=a+DY2rvd+rUT~9 zQ4EgH@FKJYfPGJh%#oz}izdy~E0BsI6z`;;B#=G?u#9FyJJ*r1LzsnQnQLt+&l~O0 z#@3>>o>RAhIGW@_b1?dA`L4^d)Y!g&Nrx2?)Gn z)tJ`;Efw46kg6Ly#%6c-TjXWi=6flbY~JwX)EeOyv(fLzN!1@B_<#v zFhS^x_!W!sh)95|$I8%^Nba9smrtpQ_Xrd-c+gTW|1r~);-ve|Cr8>a!Ha}hFcP{fm(0C?ic3v(q&0Dz<{0}!mnU| za9tv3<|Njf7$V9e5p}MbuyJHIdzZ((k*agiImb_ua>SMe1kAckc#xzrY#n%70WsaOND0++G6&jopm!+5bw12eOV z{||d_8rD?yuM6UciWor#1tBUTDq~ zGO2(OAs`Tl%%v0}V;~5bRAh+kD1EffbN432N&jJM*G zP)nH9f>S^)zY(4hYo;(E0a3FFUH7g^dQ88ru3flOb#8GcqT{f+F}%E`8tJb2cqN%;lo6bH3jJ=*(vb)bbW zJkB3aq-+j5$lOPJF*KFsdaAXeJ7o1*FL(P8vt}Cd3m#ojAdYE`Z*IiOU&^rjl(Qoy z@58a`%tc~|Hy`&g)}W^5H;VxALH>L!MO*pJ>#&ucO663g?+-OKT_k-T!`@w27D;n$ zf7b<`jE762s=Q-Da7#P77D?mb)g}hBJK`ur9$wXd3hIMSrWQeoYdK~55L?mjD$JVZ z0=EX>&ztapEKO@3HWpjWZAo_0@}AT>no&rO6jY}OSvOs+whS<>Bjq`d0(8|IksiL& zVt>?dkYRbKD5W}{-{5d|(6L|g$LkB)grQ{G5a&N&q5W4b^1oL~3H^7I?Qh`!%0iU^ z;Pmbk+Jc`C!7p^ss?^n>rf2xCxzLaw`o-^ug4;JqG?>`Vp8Q|IJz*(O_d{>q;48xA z1&Tj|_JNKf_RJhrK?ah-dv~FWGt#3NktX2br#U>ta3}v0$yxrNmB;)?>-0a-=Ja@tei++>2C?G@w zG#!%fc^+h`Op*%8X0|Ugmx(cnp$VVtwPoLahIuUb8c35zq-Pxj*mxkQXH*4M*fj;! zKD#1fbgv3r;t4WKyP{zK0@^v`PcdlGt=!$SsWG*iA9tsK9Ai^^eHKuT+`Kne%4Z*9 zKdVSVm9yzQ{#OjLO_Kfeg5FC~SR|A}#ESdXmfU*T6UZyrBLFF$^96{(Tc_=S!+#_@9W9S*= z@E$N7&El*yIfdyKDY`juLDL;1oZonV4V#Dd1x?fvNPodxT2Gp=XU7(RRYhx$d>@*U#7qxXGNTnf4jg^4aq#C*OP% zG|VKIS80Fc?#XB|_1L;6-IlrbiQysahjBPda$a8CXmx|SjQWW#_h1?@|CgB_;y=cm-Z#>3)A&1wNIz-*@xh zHK1PX3U~AE8EGn??5pSrRwnRFg1*9=m^YO@U!JY}w(6COQjF%p$dH@cgo{gEaF%aC z@x&0;f2S@dy$5#BYG-8}g-r;$@IArIi z3gxQol=~^{ zYf<;7_2`iO#ua%!NIV#N-iJdBtzv&=XM3eh^Mwa*WIXR>nuzm)Jm>u%?X%N*EyO4y zPA4$G^Q;#UZGGI2nc+xlE@LOY0nXnatTr67sYIs!jSnLD#2*S5oNjAA>Ix{UTN~ZXKEPm0y(7-*F|Adu5+Sb&zj;lAE6FJ(3R_2%%T+CnzE8 zBaJZoHq-1OQqz+Cr}xPs&@x)*zd&tx6u368f)Lb-VVL~-g=Allp+Gs|0zgn z3pF(YX#hOOK~$4HKb--p{;{ZD{WlN18bzUTfVyhby$iqZy&a#nbkvP~JXOzM=_!&UQI{8n(h|%m-cfC|<}{AhTii;7>DjuKJU!c; z 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 literal 0 HcmV?d00001 diff --git a/assets/images/upstream_choking-dc5aedeb280843ea22445ce83731b8dc.png b/assets/images/upstream_choking-dc5aedeb280843ea22445ce83731b8dc.png new file mode 100644 index 0000000000000000000000000000000000000000..cb6d07508979697db9b52569d032fc3c94088287 GIT binary patch literal 46036 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%0A%{;l2R-P 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 Q%WY&&op7`z9`jE67tAbFCjbBd literal 0 HcmV?d00001 diff --git a/assets/images/validity_flag_example-5b8c9832693a18b6500cf408c0b4873b.png b/assets/images/validity_flag_example-5b8c9832693a18b6500cf408c0b4873b.png new file mode 100644 index 0000000000000000000000000000000000000000..d6810cbb41cb61e786a264d250b2b2e9802b8a76 GIT binary patch literal 150701 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.r(n),i.d(n,{assets:()=>r,contentTitle:()=>a,default:()=>c,frontMatter:()=>l,metadata:()=>d,toc:()=>p});var t=i(74848),s=i(28453);const l={},a="Pump chart",d={id:"about/modelling/setup/facility_inputs/pump_modelling/pump_charts",title:"Pump chart",description:"Energy usage for pumps is not based on pre-sampled data between rates,",source:"@site/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts.md",sourceDirName:"about/modelling/setup/facility_inputs/pump_modelling",slug:"/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"Pump modelling",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/"},next:{title:"Sampled compressor model",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model"}},r={},p=[{value:"PUMP_CHART_SINGLE_SPEED",id:"pump_chart_single_speed",level:2},{value:"Header Requirements",id:"header-requirements",level:3},{value:"Required",id:"required",level:4},{value:"Optional",id:"optional",level:4},{value:"Format",id:"format",level:3},{value:"PUMP_CHART_VARIABLE_SPEED",id:"pump_chart_variable_speed",level:2},{value:"Description",id:"description",level:3},{value:"Header Requirements",id:"header-requirements-1",level:3},{value:"Format",id:"format-1",level:3},{value:"Examples",id:"examples",level:2}];function o(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"pump-chart",children:"Pump chart"}),"\n",(0,t.jsxs)(n.p,{children:["Energy usage for pumps is not based on pre-sampled data between rates,\npressures and energy usage, but on ",(0,t.jsx)(n.strong,{children:"equations and the pump chart"})," defining the pumps."]}),"\n",(0,t.jsx)(n.p,{children:"There are two types of pump models supported:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Variable speed pumps"}),"\n",(0,t.jsx)(n.li,{children:"Single speed pumps"}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["The pump chart defines the pump's operational area. When rates below minimum flow\n(a point with the lowest rate for a single speed pump and a line defined by the lowest rate vs.\nhead for each speed for variable speed) are requested, the rate is projected up and\nevaluated at minimum flow to mimic the ",(0,t.jsx)(n.code,{children:"ASV"})," (anti-surge valve)."]}),"\n",(0,t.jsx)(n.p,{children:"For heads below minimum head/minimum speed, i.e., when the requested pressure\ndifference between the outlet and the inlet is smaller than the minimum pressure difference,\nthe head will be lifted up to minimum head to mimic that the pump will then be run on\nits minimum speed and the pressure will be choked back downstream of the pump.\nFor single speed pumps, the minimum speed/minimum head curve is the same as\nthe head vs. rate curve."}),"\n",(0,t.jsxs)(n.admonition,{title:"Tip",type:"tip",children:[(0,t.jsx)(n.p,{children:"When calibrating pump charts to historical data, the head values for maximum speed could be\nput in the cloud of data to be unbiased. However, eCalc will treat all head values above the\nmaximum defined in the chart as infeasible (outside pump capacity)."}),(0,t.jsxs)(n.p,{children:["To mitigate this when\nrunning through historical data for power calibration, the keyword ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/HEAD_MARGIN",children:"HEAD_MARGIN"})," may be used to move points outside capacity (but inside the margin) to the capacity limit."]})]}),"\n",(0,t.jsx)(n.h2,{id:"pump_chart_single_speed",children:"PUMP_CHART_SINGLE_SPEED"}),"\n",(0,t.jsxs)(n.p,{children:["Pump chart data for single speed pump. The required fields are ",(0,t.jsx)(n.code,{children:"RATE"})," and ",(0,t.jsx)(n.code,{children:"HEAD"}),". Optionally (and most likely) ",(0,t.jsx)(n.code,{children:"EFFICIENCY"})," and ",(0,t.jsx)(n.code,{children:"UNITS"})," should be supplied as well.\n(if not given, efficiency is set to 100%)."]}),"\n",(0,t.jsx)(n.h3,{id:"header-requirements",children:"Header Requirements"}),"\n",(0,t.jsx)(n.h4,{id:"required",children:"Required"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"RATE"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"HEAD"})}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"optional",children:"Optional"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"EFFICIENCY"}),", if not set the efficiency is assumed to be 100%."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"SPEED"}),", if set all values must be equal."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Note that speed is not used in any way for single speed pumps and is only included here to allow the speed column to be\npresent in the input file without the run failing. There is still a check that all speeds are equal if speed is present\nto avoid usage of the wrong pump model, i.e. avoid using the single speed model for variable speed pump chart data."}),"\n",(0,t.jsx)(n.h3,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: \n FILE: \n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n RATE: \n HEAD: \n EFFICIENCY: \n"})}),"\n",(0,t.jsx)(n.h2,{id:"pump_chart_variable_speed",children:"PUMP_CHART_VARIABLE_SPEED"}),"\n",(0,t.jsx)(n.h3,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:["Pump chart data for variable speed (VSD) pump. The required fields are ",(0,t.jsx)(n.code,{children:"SPEED"}),",\n",(0,t.jsx)(n.code,{children:"RATE"})," and ",(0,t.jsx)(n.code,{children:"HEAD"}),". Optionally (and most likely) ",(0,t.jsx)(n.code,{children:"EFFICIENCY"})," and ",(0,t.jsx)(n.code,{children:"UNITS"})," should be supplied as well.\n(if not given, efficiency is set to 100%)."]}),"\n",(0,t.jsx)(n.h3,{id:"header-requirements-1",children:"Header Requirements"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"RATE"}),", ",(0,t.jsx)(n.code,{children:"HEAD"})," and ",(0,t.jsx)(n.code,{children:"SPEED"})," required."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"EFFICIENCY"}),", ",(0,t.jsx)(n.code,{children:"UNITS"})," optional."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"format-1",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: \n FILE: \n TYPE: PUMP_CHART_VARIABLE_SPEED\n UNITS:\n RATE: \n HEAD: \n EFFICIENCY: \n"})}),"\n",(0,t.jsx)(n.h2,{id:"examples",children:"Examples"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: a_single_speed_pump\n FILE: inputs/single_speed_pumpchart.csv\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n \n - NAME: a_variable_speed_pump\n FILE: inputs/variable_speed_pumpchart.csv\n TYPE: PUMP_CHART_VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n\n - NAME: a_single_speed_pump_with_head_margin_applied\n FILE: inputs/single_speed_pumpchart.csv\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n HEAD_MARGIN: 10\n"})})]})}function c(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(o,{...e})}):o(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>a,x:()=>d});var t=i(96540);const s={},l=t.createContext(s);function a(e){const n=t.useContext(l);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),t.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/03dfed1e.567e449b.js b/assets/js/03dfed1e.567e449b.js new file mode 100644 index 0000000000..46c7f9308d --- /dev/null +++ b/assets/js/03dfed1e.567e449b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9099],{81906:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>t,metadata:()=>d,toc:()=>i});var r=s(74848),c=s(28453);const t={},l="ENERGY_USAGE_MODEL",d={id:"about/references/ENERGY_USAGE_MODEL",title:"ENERGY_USAGE_MODEL",description:"INSTALLATIONS /",source:"@site/docs/about/references/ENERGY_USAGE_MODEL.md",sourceDirName:"about/references",slug:"/about/references/ENERGY_USAGE_MODEL",permalink:"/ecalc/docs/about/references/ENERGY_USAGE_MODEL",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/ENERGY_USAGE_MODEL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"ENERGYFUNCTION",permalink:"/ecalc/docs/about/references/ENERGYFUNCTION"},next:{title:"EOS_MODEL",permalink:"/ecalc/docs/about/references/EOS_MODEL"}},o={},i=[{value:"Description",id:"description",level:2},{value:"Temporal energy usage model",id:"temporal-energy-usage-model",level:2}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,c.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"energy_usage_model",children:"ENERGY_USAGE_MODEL"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Required"}),(0,r.jsx)(n.th,{children:"Child of"}),(0,r.jsx)(n.th,{children:"Children/Options"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Yes"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"FUELCONSUMERS"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"COMPRESSORS"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"CONSUMERS"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"CONDITION"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(n.code,{children:"CONDITIONS"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(n.code,{children:"CONSUMPTION_RATE_TYPE"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(n.code,{children:"DISCHARGE_PRESSURE"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(n.code,{children:"ENERGYFUNCTION"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(n.code,{children:"FLUID_DENSITY"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(n.code,{children:"FUELRATE"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(n.code,{children:"LOAD"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(n.code,{children:"OPERATIONAL_SETTINGS"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(n.code,{children:"POWERLOSSFACTOR"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(n.code,{children:"PUMPS"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(n.code,{children:"RATE"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(n.code,{children:"SUCTION_PRESSURE"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(n.code,{children:"TOTAL_SYSTEM_RATE"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(n.code,{children:"TYPE"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(n.code,{children:"VARIABLES"})]})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsx)(n.p,{children:"The energy usage model specifies the data to calculate the energy usage of a consumer. This data is used to set up a\nfunction that may be evaluated for a set of time series and returns a result including the calculated energy usage."}),"\n",(0,r.jsxs)(n.p,{children:["The type of energy usage model is defined by ",(0,r.jsx)(n.code,{children:"TYPE"}),", and which keywords are required/supported will be different\nfor each type. The available types are:"]}),"\n",(0,r.jsx)(n.p,{children:"Energy usage model types:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/installations/direct_consumers",children:"DIRECT"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations",children:"TABULATED"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations#pump-energy-usage-model",children:"PUMP"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations#pump_system-energy-usage-model",children:"PUMP_SYSTEM"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor",children:"COMPRESSOR"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system",children:"COMPRESSOR_SYSTEM"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["For all types, the keywords ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/CONDITION",children:"CONDITION"}),", ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/CONDITIONS",children:"CONDITIONS"})," and ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/POWERLOSSFACTOR",children:"POWERLOSSFACTOR"})," are optional and supported, and these will act\non the calculated energy usage after the calculated energy usage from the model defined by ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/TYPE",children:"TYPE"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"temporal-energy-usage-model",children:"Temporal energy usage model"}),"\n",(0,r.jsxs)(n.p,{children:["It is possible to update the energy model within a consumer over time, as long as the\n",(0,r.jsx)(n.code,{children:"ENERGY_USAGE_MODEL"})," stays within one type. The ",(0,r.jsx)(n.code,{children:"TYPE"})," cannot change over time. In case ",(0,r.jsx)(n.code,{children:"TYPE"})," evolution is needed, we recommend that you split the model into two ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/CONSUMERS",children:"CONSUMERS"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n 2020-01-01:\n TYPE: TABULATED\n ENERGYFUNCTION: tabulated_energy_function_reference_initial\n VARIABLES:\n - NAME: RATE\n EXPRESSION: SIM1;GAS_PROD\n 2022-01-01:\n TYPE: TABULATED\n ENERGYFUNCTION: tabulated_energy_function_reference_new\n VARIABLES:\n - NAME: RATE\n EXPRESSION: SIM1;GAS_PROD\n"})})]})}function h(e={}){const{wrapper:n}={...(0,c.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>l,x:()=>d});var r=s(96540);const c={},t=r.createContext(c);function l(e){const n=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:l(e.components),r.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0425b884.72278814.js b/assets/js/0425b884.72278814.js new file mode 100644 index 0000000000..8a7e91184d --- /dev/null +++ b/assets/js/0425b884.72278814.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1510],{89062:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var r=n(74848),i=n(28453);const o={title:"Python Library",sidebar_position:3,description:"Getting started with eCalc Python Library"},a="Python Library",s={id:"about/getting_started/library/index",title:"Python Library",description:"Getting started with eCalc Python Library",source:"@site/docs/about/getting_started/library/index.md",sourceDirName:"about/getting_started/library",slug:"/about/getting_started/library/",permalink:"/ecalc/docs/about/getting_started/library/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/getting_started/library/index.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Python Library",sidebar_position:3,description:"Getting started with eCalc Python Library"},sidebar:"about",previous:{title:"API Reference",permalink:"/ecalc/docs/about/getting_started/api/"},next:{title:"YAML",permalink:"/ecalc/docs/about/getting_started/yaml/"}},c={},d=[];function l(t){const e={a:"a",admonition:"admonition",h1:"h1",p:"p",strong:"strong",...(0,i.R)(),...t.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e.h1,{id:"python-library",children:"Python Library"}),"\n",(0,r.jsx)(e.admonition,{type:"warning",children:(0,r.jsxs)(e.p,{children:["It is currently ",(0,r.jsx)(e.strong,{children:"not recommended"})," to use the Python library due to upcoming breaking changes."]})}),"\n",(0,r.jsx)(e.p,{children:"If you choose to use the Python library programmatically when creating eCalc models, there is a greater flexibility in\ndynamically changing the eCalc models."}),"\n",(0,r.jsxs)(e.p,{children:["See all commands and options in the ",(0,r.jsx)(e.a,{href:"/ecalc/docs/about/getting_started/api/",children:"API reference"})]})]})}function u(t={}){const{wrapper:e}={...(0,i.R)(),...t.components};return e?(0,r.jsx)(e,{...t,children:(0,r.jsx)(l,{...t})}):l(t)}},28453:(t,e,n)=>{n.d(e,{R:()=>a,x:()=>s});var r=n(96540);const i={},o=r.createContext(i);function a(t){const e=r.useContext(o);return r.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function s(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(i):t.components||i:a(t.components),r.createElement(o.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/058ad5bf.0c0d810d.js b/assets/js/058ad5bf.0c0d810d.js new file mode 100644 index 0000000000..710457847d --- /dev/null +++ b/assets/js/058ad5bf.0c0d810d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8202],{15029:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>l,frontMatter:()=>t,metadata:()=>c,toc:()=>_});var r=s(74848),o=s(28453);const t={},i="MAXIMUM_PRESSURE_RATIO_PER_STAGE",c={id:"about/references/MAXIMUM_PRESSURE_RATIO_PER_STAGE",title:"MAXIMUM_PRESSURE_RATIO_PER_STAGE",description:"MODELS /",source:"@site/docs/about/references/MAXIMUM_PRESSURE_RATIO_PER_STAGE.md",sourceDirName:"about/references",slug:"/about/references/MAXIMUM_PRESSURE_RATIO_PER_STAGE",permalink:"/ecalc/docs/about/references/MAXIMUM_PRESSURE_RATIO_PER_STAGE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/MAXIMUM_PRESSURE_RATIO_PER_STAGE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"MAXIMUM_POWER",permalink:"/ecalc/docs/about/references/MAXIMUM_POWER"},next:{title:"MAX_USAGE_FROM_SHORE",permalink:"/ecalc/docs/about/references/MAX_USAGE_FROM_SHORE"}},a={},_=[{value:"Description",id:"description",level:2},{value:"Functionality",id:"functionality",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function E(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"maximum_pressure_ratio_per_stage",children:"MAXIMUM_PRESSURE_RATIO_PER_STAGE"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/MODELS",children:"MODELS"})," /\n",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/MAXIMUM_PRESSURE_RATIO_PER_STAGE",children:"MAXIMUM_PRESSURE_RATIO_PER_STAGE"})]}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"MAXIMUM_PRESSURE_RATIO_PER_STAGE"})," is used in the process of determining (at run time) the number of compressors\nin a ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",children:"SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN"}),"\nwith unknown stages. The number of compressors is set such that there are just enough compressors to ensure no pressure ratios are above the given\n",(0,r.jsx)(n.code,{children:"MAXIMUM_PRESSURE_RATIO_PER_STAGE"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"functionality",children:"Functionality"}),"\n",(0,r.jsxs)(n.p,{children:["This is an optional setting and is ",(0,r.jsx)(n.strong,{children:"only"})," supported for ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",children:"SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN"})," with unknown stages, i.e. if ",(0,r.jsx)(n.code,{children:"STAGES"})," are not specified."]}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: \n COMPRESSOR_TRAIN:\n MAXIMUM_PRESSURE_RATIO_PER_STAGE: \n COMPRESSOR_CHART: \n INLET_TEMPERATURE: \n POWER_ADJUSTMENT_CONSTANT: \n ...\n"})}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: simplified_compressor_train_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: some_fluid_model\n COMPRESSOR_TRAIN:\n MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5\n COMPRESSOR_CHART: some_compressor_chart\n INLET_TEMPERATURE: 30\n ...\n"})})]})}function l(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(E,{...e})}):E(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>i,x:()=>c});var r=s(96540);const o={},t=r.createContext(o);function i(e){const n=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),r.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/06543a48.5310234a.js b/assets/js/06543a48.5310234a.js new file mode 100644 index 0000000000..3cbd636a12 --- /dev/null +++ b/assets/js/06543a48.5310234a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5734],{40520:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>l});var c=r(74848),t=r(28453);const o={},s="LOAD",a={id:"about/references/LOAD",title:"LOAD",description:"INSTALLATIONS /",source:"@site/docs/about/references/LOAD.md",sourceDirName:"about/references",slug:"/about/references/LOAD",permalink:"/ecalc/docs/about/references/LOAD",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/LOAD.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"INTERSTAGE_CONTROL_PRESSURE",permalink:"/ecalc/docs/about/references/INTERSTAGE_CONTROL_PRESSURE"},next:{title:"LOWER_HEATING_VALUE",permalink:"/ecalc/docs/about/references/LOWER_HEATING_VALUE"}},i={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,t.R)(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(n.h1,{id:"load",children:"LOAD"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/LOAD",children:"LOAD"})]}),"\n",(0,c.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,c.jsxs)(n.p,{children:["Used for direct load ",(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," to define electrical power load directly\nwith an ",(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/EXPRESSION",children:"EXPRESSION"}),"."]}),"\n",(0,c.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: \n CONSUMPTION_RATE_TYPE: \n CONDITION: \n POWERLOSSFACTOR: \n"})}),"\n",(0,c.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 10\n"})})]})}function u(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,c.jsx)(n,{...e,children:(0,c.jsx)(d,{...e})}):d(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>s,x:()=>a});var c=r(96540);const t={},o=c.createContext(t);function s(e){const n=c.useContext(o);return c.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),c.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0673f3d8.5a6cdc86.js b/assets/js/0673f3d8.5a6cdc86.js new file mode 100644 index 0000000000..f1360df9b2 --- /dev/null +++ b/assets/js/0673f3d8.5a6cdc86.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6],{98170:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>o,default:()=>l,frontMatter:()=>r,metadata:()=>i,toc:()=>u});var s=n(74848),c=n(28453);const r={},o="FUEL_TYPES",i={id:"about/references/FUEL_TYPES",title:"FUEL_TYPES",description:"FUELTYPES",source:"@site/docs/about/references/FUEL_TYPES.md",sourceDirName:"about/references",slug:"/about/references/FUEL_TYPES",permalink:"/ecalc/docs/about/references/FUEL_TYPES",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/FUEL_TYPES.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FUELRATE",permalink:"/ecalc/docs/about/references/FUELRATE"},next:{title:"GAS_TYPE",permalink:"/ecalc/docs/about/references/GAS_TYPE"}},a={},u=[{value:"Description",id:"description",level:2}];function d(e){const t={a:"a",h1:"h1",h2:"h2",p:"p",...(0,c.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"fuel_types",children:"FUEL_TYPES"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.a,{href:"/ecalc/docs/about/references/FUEL_TYPES",children:"FUEL_TYPES"})}),"\n",(0,s.jsx)(t.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(t.p,{children:["This part of the setup specifies the various fuel types and associated emissions\nused in the model. Each fuel type is specified in a list and the defined fuels can later be referred to the\n",(0,s.jsx)(t.a,{href:"/ecalc/docs/about/references/INSTALLATIONS",children:"INSTALLATIONS"})," part of the setup by its name."]}),"\n",(0,s.jsxs)(t.p,{children:["The use of fuel can lead to one or more emission types, specified in ",(0,s.jsx)(t.a,{href:"/ecalc/docs/about/references/EMISSIONS",children:"EMISSIONS"}),".\nYou can optionally specify a ",(0,s.jsx)(t.a,{href:"/ecalc/docs/about/references/CATEGORY",children:"CATEGORY"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["See ",(0,s.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/fuel_types",children:"FUEL TYPES"})," for more details about usage."]})]})}function l(e={}){const{wrapper:t}={...(0,c.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>i});var s=n(96540);const c={},r=s.createContext(c);function o(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:o(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0745e7f0.1a08a580.js b/assets/js/0745e7f0.1a08a580.js new file mode 100644 index 0000000000..f0d154d1e9 --- /dev/null +++ b/assets/js/0745e7f0.1a08a580.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1267],{68758:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>o,contentTitle:()=>t,default:()=>h,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var a=r(74848),s=r(28453);const i={slug:"v8.5-release",title:"v8.5",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:-15},t="eCalc",l={id:"changelog/v8-5",title:"v8.5",description:"New Features",source:"@site/docs/changelog/v8-5.md",sourceDirName:"changelog",slug:"/changelog/v8.5-release",permalink:"/ecalc/docs/changelog/v8.5-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-5.md",tags:[{inline:!0,label:"release",permalink:"/ecalc/docs/tags/release"},{inline:!0,label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:-15,frontMatter:{slug:"v8.5-release",title:"v8.5",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:-15},sidebar:"changelog",previous:{title:"v8.6",permalink:"/ecalc/docs/changelog/v8.6-release"},next:{title:"v8.4",permalink:"/ecalc/docs/changelog/v8.4-release"}},o={},c=[{value:"New Features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking changes",id:"breaking-changes",level:2}];function d(e){const n={code:"code",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h1,{id:"ecalc",children:"eCalc"}),"\n",(0,a.jsx)(n.h2,{id:"new-features",children:"New Features"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Added chart area flag NO_FLOW_RATE to the possible statuses for an operational point in a variable speed compressor chart. The chart area flags can currently only be found in the json result file, but we will also try to find a way of displaying this information in the WebApp as well."}),"\n",(0,a.jsx)(n.li,{children:"Whenever there is a variable speed compressor only recirculation fluid (can happen in a multiple streams and pressures compressor train) a warning will be logged."}),"\n",(0,a.jsx)(n.li,{children:"Add rate type to more equipment in results"}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"fixes",children:"Fixes"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"nmvoc"})," emissions were incorrectly reported for the ltp categories ",(0,a.jsx)(n.code,{children:"HEATER"})," and ",(0,a.jsx)(n.code,{children:"BOILER"}),": The emission query filters included ",(0,a.jsx)(n.code,{children:"nox"}),", and are now corrected to ",(0,a.jsx)(n.code,{children:"nmvoc"}),"."]}),"\n",(0,a.jsx)(n.li,{children:"Instead of applying the surge control margin to the average of the minimum flow rate for all speed curves in the compressor chart, a more robust calculation is implemented for variable speed compressors: The updated minimum flow is calculated individually for each speed, using the control margin as the increase in minimum flow, in percentage or fraction of the rate difference between minimum- and maximum flow, for the given speed. This solves the problem of eCalc failing when the new calculated minimum rate was outside the compressor chart for a given speed."}),"\n",(0,a.jsx)(n.li,{children:"Improved error messages"}),"\n",(0,a.jsx)(n.li,{children:"Other fixes"}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,a.jsx)(n.p,{children:"None"})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>t,x:()=>l});var a=r(96540);const s={},i=a.createContext(s);function t(e){const n=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:t(e.components),a.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/09bd96eb.86e1b386.js b/assets/js/09bd96eb.86e1b386.js new file mode 100644 index 0000000000..c11c4212fe --- /dev/null +++ b/assets/js/09bd96eb.86e1b386.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[872],{60326:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>T,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var r=t(74848),o=t(28453);const i={},c="RATE_FRACTIONS",s={id:"about/references/RATE_FRACTIONS",title:"RATE_FRACTIONS",description:"Description",source:"@site/docs/about/references/RATE_FRACTIONS.md",sourceDirName:"about/references",slug:"/about/references/RATE_FRACTIONS",permalink:"/ecalc/docs/about/references/RATE_FRACTIONS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/RATE_FRACTIONS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"RATE",permalink:"/ecalc/docs/about/references/RATE"},next:{title:"RATE_PER_STREAM",permalink:"/ecalc/docs/about/references/RATE_PER_STREAM"}},a={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function E(e){const n={code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"rate_fractions",children:"RATE_FRACTIONS"}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(n.p,{children:["A list with one expression per consumer specifying the rate fraction for each consumer. If this is used, ",(0,r.jsx)(n.code,{children:"TOTAL_SYSTEM_RATE"})," for the ",(0,r.jsx)(n.code,{children:"ENERGY_USAGE_MODEL"})," is also required. You can use either ",(0,r.jsx)(n.code,{children:"RATES"})," or ",(0,r.jsx)(n.code,{children:"RATE_FRACTIONS"}),"; however, not both in one operational setting."]}),"\n",(0,r.jsx)(n.p,{children:"When specifying the rate fraction, the first fraction will relate to the first operational unit mentioned - i.e. if a pump system has two pumps, the first pump mentioned will relate to the rate fraction."}),"\n",(0,r.jsx)(n.p,{children:"Note that in the case of a compressor, the same method is utilised for specifying rate fractions."}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: \n CHART: \n - NAME: \n CHART: \n TOTAL_SYSTEM_RATE: \n FLUID_DENSITY: \n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: <[fraction 1, fraction 2]>\n ...\n - RATE_FRACTIONS: <[fraction 1, fraction 2]>\n ...\n"})}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump1\n CHART: water_injection_pump_reference\n - NAME: pump2\n CHART: water_injection_pump_reference\n TOTAL_SYSTEM_RATE: SIM1;WATER_INJ\n FLUID_DENSITY: 1030\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1, 0]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS: [0.5, 0.5]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n FLUID_DENSITIES:\n - 1000\n - 1050\n"})})]})}function T(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(E,{...e})}):E(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>s});var r=t(96540);const o={},i=r.createContext(o);function c(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0a776dcb.a4df551c.js b/assets/js/0a776dcb.a4df551c.js new file mode 100644 index 0000000000..e34ada5cad --- /dev/null +++ b/assets/js/0a776dcb.a4df551c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8409],{59045:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>R,contentTitle:()=>c,default:()=>i,frontMatter:()=>o,metadata:()=>E,toc:()=>S});var s=r(74848),t=r(28453);const o={},c="UPSTREAM_PRESSURE_CONTROL",E={id:"about/references/UPSTREAM_PRESSURE_CONTROL",title:"UPSTREAM_PRESSURE_CONTROL",description:"MODELS /",source:"@site/docs/about/references/UPSTREAM_PRESSURE_CONTROL.md",sourceDirName:"about/references",slug:"/about/references/UPSTREAM_PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/UPSTREAM_PRESSURE_CONTROL",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/UPSTREAM_PRESSURE_CONTROL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"UNITS",permalink:"/ecalc/docs/about/references/UNITS"},next:{title:"VARIABLES",permalink:"/ecalc/docs/about/references/VARIABLES"}},R={},S=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"upstream_pressure_control",children:"UPSTREAM_PRESSURE_CONTROL"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/MODELS",children:"MODELS"})," /\n[...] /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/INTERSTAGE_CONTROL_PRESSURE",children:"INTERSTAGE_CONTROL_PRESSURE"}),"\n/ ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/UPSTREAM_PRESSURE_CONTROL",children:"UPSTREAM_PRESSURE_CONTROL"})]}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(n.p,{children:["This keyword is used only for ",(0,s.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})," type. It is used within the ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/INTERSTAGE_CONTROL_PRESSURE",children:"INTERSTAGE_CONTROL_PRESSURE"})," keyword."]}),"\n",(0,s.jsxs)(n.p,{children:["The pressure control method upstream (before) the interstage pressure is specified in this keyword.\nFor more explanation see ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:"Variable speed compressor train model with multiple streams and pressures"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n STAGES:\n ...\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: \n ...\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n STAGES:\n ...\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: UPSTREAM_CHOKE\n DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE\n"})})]})}function i(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>c,x:()=>E});var s=r(96540);const t={},o=s.createContext(t);function c(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function E(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0c22fffd.91e5cbc7.js b/assets/js/0c22fffd.91e5cbc7.js new file mode 100644 index 0000000000..75d690c9f8 --- /dev/null +++ b/assets/js/0c22fffd.91e5cbc7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6170],{3784:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>o,contentTitle:()=>r,default:()=>u,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var t=a(74848),i=a(28453);const s={slug:"v8.21-release",title:"v8.21 (Latest)",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:-1001},r="eCalc",l={id:"changelog/v8-21",title:"v8.21 (Latest)",description:"Breaking Changes",source:"@site/docs/changelog/v8-21.md",sourceDirName:"changelog",slug:"/changelog/v8.21-release",permalink:"/ecalc/docs/changelog/v8.21-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-21.md",tags:[{inline:!0,label:"release",permalink:"/ecalc/docs/tags/release"},{inline:!0,label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:-1001,frontMatter:{slug:"v8.21-release",title:"v8.21 (Latest)",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:-1001},sidebar:"changelog",previous:{title:"Next",permalink:"/ecalc/docs/changelog/latest"},next:{title:"---",permalink:"/ecalc/docs/changelog/separator"}},o={},c=[{value:"Breaking Changes",id:"breaking-changes",level:2},{value:"Features",id:"features",level:2}];function d(e){const n={code:"code",h1:"h1",h2:"h2",li:"li",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"ecalc",children:"eCalc"}),"\n",(0,t.jsx)(n.h2,{id:"breaking-changes",children:"Breaking Changes"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Do not allow pressure drop ahead of stage for simplified variable speed trains: Defining ",(0,t.jsx)(n.code,{children:"PRESSURE_DROP_AHEAD_OF_STAGE"})," for a simplified variable speed train does not have any effect. eCalc now gives an error if specified, instead of ignoring it."]}),"\n",(0,t.jsxs)(n.li,{children:["Do not allow control margin for simplified variable speed trains: Defining ",(0,t.jsx)(n.code,{children:"CONTROL_MARGIN"})," for a simplified variable speed train does not have any effect. eCalc now gives an error if specified, instead of ignoring it."]}),"\n",(0,t.jsx)(n.li,{children:"Do not allow 0 efficiency in input chart: Give earlier feedback to user, and point to the relevant file."}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"features",children:"Features"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Make sure that pressure calculation tolerances are the same at different places in the code: Can give minor result changes because the calculation is more accurate (adding iterations in the calculation of the outlet pressure of a compressor stage)."}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,n,a)=>{a.d(n,{R:()=>r,x:()=>l});var t=a(96540);const i={},s=t.createContext(i);function r(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0fd76486.3776b2de.js b/assets/js/0fd76486.3776b2de.js new file mode 100644 index 0000000000..781ea6ae95 --- /dev/null +++ b/assets/js/0fd76486.3776b2de.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1474],{30597:(e,n,l)=>{l.r(n),l.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>t,metadata:()=>i,toc:()=>r});var o=l(74848),a=l(28453);const t={sidebar_position:7,description:"Examples of eCalc usage"},s="Examples",i={id:"about/modelling/examples/index",title:"Examples",description:"Examples of eCalc usage",source:"@site/docs/about/modelling/examples/index.md",sourceDirName:"about/modelling/examples",slug:"/about/modelling/examples/",permalink:"/ecalc/docs/about/modelling/examples/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/examples/index.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{sidebar_position:7,description:"Examples of eCalc usage"},sidebar:"about",previous:{title:"Generic Workflow",permalink:"/ecalc/docs/about/modelling/workflow/generic_workflow"},next:{title:"Advanced model example",permalink:"/ecalc/docs/about/modelling/examples/advanced"}},c={},r=[];function d(e){const n={a:"a",h1:"h1",li:"li",p:"p",ul:"ul",...(0,a.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"examples",children:"Examples"}),"\n",(0,o.jsx)(n.p,{children:"Here you find some examples."}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"/ecalc/docs/about/modelling/examples/simple",children:"Simple example"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"/ecalc/docs/about/modelling/examples/advanced",children:"Advanced example"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"/ecalc/docs/about/modelling/examples/drogon",children:"Drogon example"})}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:"The models are also available in the Python library under the libecalc.examples module."})]})}function m(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},28453:(e,n,l)=>{l.d(n,{R:()=>s,x:()=>i});var o=l(96540);const a={},t=o.createContext(a);function s(e){const n=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),o.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0ffabbb0.fdb8e7bc.js b/assets/js/0ffabbb0.fdb8e7bc.js new file mode 100644 index 0000000000..a44f4113d0 --- /dev/null +++ b/assets/js/0ffabbb0.fdb8e7bc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9100],{40695:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>r,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>d});var l=n(74848),t=n(28453);const i={sidebar_position:7,description:"eCalc FAQ",title:"CLI reference"},c="ecalc",o={id:"about/getting_started/cli/cli_reference",title:"CLI reference",description:"eCalc FAQ",source:"@site/docs/about/getting_started/cli/cli_reference.md",sourceDirName:"about/getting_started/cli",slug:"/about/getting_started/cli/cli_reference",permalink:"/ecalc/docs/about/getting_started/cli/cli_reference",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/getting_started/cli/cli_reference.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{sidebar_position:7,description:"eCalc FAQ",title:"CLI reference"},sidebar:"about",previous:{title:"CLI",permalink:"/ecalc/docs/about/getting_started/cli/"},next:{title:"FAQ / Troubleshooting",permalink:"/ecalc/docs/about/getting_started/cli/faq"}},r={},d=[{value:"ecalc run",id:"ecalc-run",level:2},{value:"ecalc selftest",id:"ecalc-selftest",level:2},{value:"ecalc show",id:"ecalc-show",level:2},{value:"ecalc show results",id:"ecalc-show-results",level:3},{value:"ecalc show yaml",id:"ecalc-show-yaml",level:3}];function a(e){const s={code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(s.h1,{id:"ecalc",children:(0,l.jsx)(s.code,{children:"ecalc"})}),"\n",(0,l.jsx)(s.p,{children:"Args: log_level: Log level of the CLI logger, defaults to INFO log_folder: Path to location of log files version: Option to show libecalc version."}),"\n",(0,l.jsx)(s.p,{children:"Returns:"}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Usage"}),":"]}),"\n",(0,l.jsx)(s.pre,{children:(0,l.jsx)(s.code,{className:"language-console",children:"$ ecalc [OPTIONS] COMMAND [ARGS]...\n"})}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Options"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--log [CRITICAL|FATAL|ERROR|WARNING|INFO|DEBUG|NOTSET]"}),": Set the loglevel. [default: INFO]"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--log-folder PATH"}),": Store log files in a folder"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--version"}),": Show current eCalc\u2122 version."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--install-completion"}),": Install completion for the current shell."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--show-completion"}),": Show completion for the current shell, to copy it or customize the installation."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--help"}),": Show this message and exit."]}),"\n"]}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Commands"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsx)(s.li,{children:(0,l.jsx)(s.code,{children:"run"})}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"selftest"}),": Test that eCalc has been successfully..."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"show"}),": Command to show information in the model..."]}),"\n"]}),"\n",(0,l.jsx)(s.h2,{id:"ecalc-run",children:(0,l.jsx)(s.code,{children:"ecalc run"})}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Usage"}),":"]}),"\n",(0,l.jsx)(s.pre,{children:(0,l.jsx)(s.code,{className:"language-console",children:"$ ecalc run [OPTIONS] MODEL_FILE\n"})}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Arguments"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"MODEL_FILE"}),": The Model YAML-file specifying time series inputs, facility inputs and the relationship between energy consumers. [required]"]}),"\n"]}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Options"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"-f, --output-frequency, --outputfrequency [NONE|YEAR|MONTH|DAY]"}),": Frequency of output. Options are DAY, MONTH, YEAR. If not specified, it will give time steps equal to the union of all input given with INFLUENCE_TIME_VECTOR set to True. Down-sampling the result may lead to loss of data, and rates such as MW may not add up to cumulative values [default: NONE]"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"-c, --csv"}),": Toggle output of csv data. [default: True]"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--json"}),": Toggle output of json output."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"-o, --output-folder, --outputfolder PATH"}),": Outputfolder. Defaults to output/ relative to the yml setup file"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"-n, --name-prefix, --nameprefix TEXT"}),": Name prefix for output data. Defaults to name of setup file."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--ltp-export"}),": In addition to standard output, a specific Long Term Prognosis (LTP) file will be provided for simple export of LTP relevant data (Tabular Separated Values)."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--stp-export"}),": In addition to standard output, a specific Short Term Prognosis (STP) file will be provided for simple export of STP relevant data (Tabular Separated Values)."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--flow-diagram"}),": Output the input model formatted to be displayed in a custom flow diagram format in JSON"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--detailed-output, --detailedoutput"}),": Output detailed output. When False you will get basic results such as energy usage, power, time vector."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--date-format-option [0|1|2]"}),': Date format option. 0: "YYYY-MM-DD HH:MM',":SS",'" (Accepted variant of ISO8601), 1: "YYYYMMDD HH:MM',":SS",'" (ISO8601), 2: "DD.MM.YYYY HH:MM',":SS",'". Default 0 (ISO 8601) [default: 0]']}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--help"}),": Show this message and exit."]}),"\n"]}),"\n",(0,l.jsx)(s.h2,{id:"ecalc-selftest",children:(0,l.jsx)(s.code,{children:"ecalc selftest"})}),"\n",(0,l.jsx)(s.p,{children:"Test that eCalc has been successfully installed"}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Usage"}),":"]}),"\n",(0,l.jsx)(s.pre,{children:(0,l.jsx)(s.code,{className:"language-console",children:"$ ecalc selftest [OPTIONS]\n"})}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Options"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--help"}),": Show this message and exit."]}),"\n"]}),"\n",(0,l.jsx)(s.h2,{id:"ecalc-show",children:(0,l.jsx)(s.code,{children:"ecalc show"})}),"\n",(0,l.jsx)(s.p,{children:"Command to show information in the model or results."}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Usage"}),":"]}),"\n",(0,l.jsx)(s.pre,{children:(0,l.jsx)(s.code,{className:"language-console",children:"$ ecalc show [OPTIONS] COMMAND [ARGS]...\n"})}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Options"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--help"}),": Show this message and exit."]}),"\n"]}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Commands"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"results"}),": Show results."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"yaml"}),": Show yaml model."]}),"\n"]}),"\n",(0,l.jsx)(s.h3,{id:"ecalc-show-results",children:(0,l.jsx)(s.code,{children:"ecalc show results"})}),"\n",(0,l.jsx)(s.p,{children:"Show results. You need to run eCalc\u2122 before this will be available."}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Usage"}),":"]}),"\n",(0,l.jsx)(s.pre,{children:(0,l.jsx)(s.code,{className:"language-console",children:"$ ecalc show results [OPTIONS]\n"})}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Options"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"-n, --name TEXT"}),": Filter the results to only show the component with this name"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--output-format [csv|json]"}),": Show the data in this format. [default: json]"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--file PATH"}),": Write the data to a file with the specified name."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--output-folder PATH"}),": Output folder. Defaults to current working directory"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--detailed-output"}),": Output detailed output. When False you will get basic energy usage and emissions results"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--date-format-option [0|1|2]"}),': Date format option. 0: "YYYY-MM-DD HH:MM',":SS",'" (Accepted variant of ISO8601), 1: "YYYYMMDD HH:MM',":SS",'" (ISO8601), 2: "DD.MM.YYYY HH:MM',":SS",'". Default 0 (ISO 8601) [default: 0]']}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"-f, --output-frequency [NONE|YEAR|MONTH|DAY]"}),": Frequency of output. Options are DAY, MONTH, YEAR. If not specified, it will give time steps equal to the union of all input given with INFLUENCE_TIME_VECTOR set to True. Down-sampling the result may lead to loss of data, and rates such as MW may not add up to cumulative values [default: NONE]"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--help"}),": Show this message and exit."]}),"\n"]}),"\n",(0,l.jsx)(s.h3,{id:"ecalc-show-yaml",children:(0,l.jsx)(s.code,{children:"ecalc show yaml"})}),"\n",(0,l.jsx)(s.p,{children:"Show yaml model. This will show the yaml after processing !include."}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Usage"}),":"]}),"\n",(0,l.jsx)(s.pre,{children:(0,l.jsx)(s.code,{className:"language-console",children:"$ ecalc show yaml [OPTIONS] MODEL_FILE\n"})}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Arguments"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"MODEL_FILE"}),": YAML file specifying time series inputs, facility inputs and the relationship between energy consumers. [required]"]}),"\n"]}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Options"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--file PATH"}),": Write the data to a file with the specified name."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--help"}),": Show this message and exit."]}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,t.R)(),...e.components};return s?(0,l.jsx)(s,{...e,children:(0,l.jsx)(a,{...e})}):a(e)}},28453:(e,s,n)=>{n.d(s,{R:()=>c,x:()=>o});var l=n(96540);const t={},i=l.createContext(t);function c(e){const s=l.useContext(i);return l.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),l.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1169.f5af047e.js b/assets/js/1169.f5af047e.js new file mode 100644 index 0000000000..36f32d8037 --- /dev/null +++ b/assets/js/1169.f5af047e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1169],{73046:(t,e,n)=>{n.d(e,{T:()=>k});var r=n(48585),o=n(39142),i=n(89610),s=n(27422),u=n(11662),c=n(66401),a=n(8058),f=n(69592),h=n(13588),A=n(24326),d=n(62062),l=n(25707);const v=function(t){return t!=t};const b=function(t,e,n){for(var r=n-1,o=t.length;++r-1};const g=function(t,e,n){for(var r=-1,o=null==t?0:t.length;++r=200){var a=e?null:C(t);if(a)return(0,w.A)(a);s=!1,o=j.A,c=new d.A}else c=e?[]:u;t:for(;++r1?r.setNode(t,e):r.setNode(t)})),this}setNode(t,e){return r.A(this._nodes,t)?(arguments.length>1&&(this._nodes[t]=e),this):(this._nodes[t]=arguments.length>1?e:this._defaultNodeLabelFn(t),this._isCompound&&(this._parent[t]=P,this._children[t]={},this._children[P][t]=!0),this._in[t]={},this._preds[t]={},this._out[t]={},this._sucs[t]={},++this._nodeCount,this)}node(t){return this._nodes[t]}hasNode(t){return r.A(this._nodes,t)}removeNode(t){var e=this;if(r.A(this._nodes,t)){var n=function(t){e.removeEdge(e._edgeObjs[t])};delete this._nodes[t],this._isCompound&&(this._removeFromParentsChildList(t),delete this._parent[t],a.A(this.children(t),(function(t){e.setParent(t)})),delete this._children[t]),a.A(s.A(this._in[t]),n),delete this._in[t],delete this._preds[t],a.A(s.A(this._out[t]),n),delete this._out[t],delete this._sucs[t],--this._nodeCount}return this}setParent(t,e){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(f.A(e))e=P;else{for(var n=e+="";!f.A(n);n=this.parent(n))if(n===t)throw new Error("Setting "+e+" as parent of "+t+" would create a cycle");this.setNode(e)}return this.setNode(t),this._removeFromParentsChildList(t),this._parent[t]=e,this._children[e][t]=!0,this}_removeFromParentsChildList(t){delete this._children[this._parent[t]][t]}parent(t){if(this._isCompound){var e=this._parent[t];if(e!==P)return e}}children(t){if(f.A(t)&&(t=P),this._isCompound){var e=this._children[t];if(e)return s.A(e)}else{if(t===P)return this.nodes();if(this.hasNode(t))return[]}}predecessors(t){var e=this._preds[t];if(e)return s.A(e)}successors(t){var e=this._sucs[t];if(e)return s.A(e)}neighbors(t){var e=this.predecessors(t);if(e)return N(e,this.successors(t))}isLeaf(t){return 0===(this.isDirected()?this.successors(t):this.neighbors(t)).length}filterNodes(t){var e=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});e.setGraph(this.graph());var n=this;a.A(this._nodes,(function(n,r){t(r)&&e.setNode(r,n)})),a.A(this._edgeObjs,(function(t){e.hasNode(t.v)&&e.hasNode(t.w)&&e.setEdge(t,n.edge(t))}));var r={};function o(t){var i=n.parent(t);return void 0===i||e.hasNode(i)?(r[t]=i,i):i in r?r[i]:o(i)}return this._isCompound&&a.A(e.nodes(),(function(t){e.setParent(t,o(t))})),e}setDefaultEdgeLabel(t){return i.A(t)||(t=o.A(t)),this._defaultEdgeLabelFn=t,this}edgeCount(){return this._edgeCount}edges(){return D.A(this._edgeObjs)}setPath(t,e){var n=this,r=arguments;return S.A(t,(function(t,o){return r.length>1?n.setEdge(t,o,e):n.setEdge(t,o),o})),this}setEdge(){var t,e,n,o,i=!1,s=arguments[0];"object"==typeof s&&null!==s&&"v"in s?(t=s.v,e=s.w,n=s.name,2===arguments.length&&(o=arguments[1],i=!0)):(t=s,e=arguments[1],n=arguments[3],arguments.length>2&&(o=arguments[2],i=!0)),t=""+t,e=""+e,f.A(n)||(n=""+n);var u=U(this._isDirected,t,e,n);if(r.A(this._edgeLabels,u))return i&&(this._edgeLabels[u]=o),this;if(!f.A(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(e),this._edgeLabels[u]=i?o:this._defaultEdgeLabelFn(t,e,n);var c=function(t,e,n,r){var o=""+e,i=""+n;if(!t&&o>i){var s=o;o=i,i=s}var u={v:o,w:i};r&&(u.name=r);return u}(this._isDirected,t,e,n);return t=c.v,e=c.w,Object.freeze(c),this._edgeObjs[u]=c,x(this._preds[e],t),x(this._sucs[t],e),this._in[e][u]=c,this._out[t][u]=c,this._edgeCount++,this}edge(t,e,n){var r=1===arguments.length?z(this._isDirected,arguments[0]):U(this._isDirected,t,e,n);return this._edgeLabels[r]}hasEdge(t,e,n){var o=1===arguments.length?z(this._isDirected,arguments[0]):U(this._isDirected,t,e,n);return r.A(this._edgeLabels,o)}removeEdge(t,e,n){var r=1===arguments.length?z(this._isDirected,arguments[0]):U(this._isDirected,t,e,n),o=this._edgeObjs[r];return o&&(t=o.v,e=o.w,delete this._edgeLabels[r],delete this._edgeObjs[r],I(this._preds[e],t),I(this._sucs[t],e),delete this._in[e][r],delete this._out[t][r],this._edgeCount--),this}inEdges(t,e){var n=this._in[t];if(n){var r=D.A(n);return e?u.A(r,(function(t){return t.v===e})):r}}outEdges(t,e){var n=this._out[t];if(n){var r=D.A(n);return e?u.A(r,(function(t){return t.w===e})):r}}nodeEdges(t,e){var n=this.inEdges(t,e);if(n)return n.concat(this.outEdges(t,e))}}function x(t,e){t[e]?t[e]++:t[e]=1}function I(t,e){--t[e]||delete t[e]}function U(t,e,n,r){var o=""+e,i=""+n;if(!t&&o>i){var s=o;o=i,i=s}return o+M+i+M+(f.A(r)?F:r)}function z(t,e){return U(t,e.v,e.w,e.name)}k.prototype._nodeCount=0,k.prototype._edgeCount=0},697:(t,e,n)=>{n.d(e,{T:()=>r.T});var r=n(73046)},62062:(t,e,n)=>{n.d(e,{A:()=>u});var r=n(29471);const o=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this};const i=function(t){return this.__data__.has(t)};function s(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new r.A;++e{n.d(e,{A:()=>r});const r=function(t,e){for(var n=-1,r=null==t?0:t.length;++n{n.d(e,{A:()=>r});const r=function(t,e){for(var n=-1,r=null==t?0:t.length,o=0,i=[];++n{n.d(e,{A:()=>r});const r=function(t,e){for(var n=-1,r=null==t?0:t.length,o=Array(r);++n{n.d(e,{A:()=>r});const r=function(t,e){for(var n=-1,r=e.length,o=t.length;++n{n.d(e,{A:()=>Z});var r=n(11754),o=n(72641),i=n(52851),s=n(22031),u=n(27422);const c=function(t,e){return t&&(0,s.A)(e,(0,u.A)(e),t)};var a=n(77996);const f=function(t,e){return t&&(0,s.A)(e,(0,a.A)(e),t)};var h=n(80154),A=n(39759),d=n(14792);const l=function(t,e){return(0,s.A)(t,(0,d.A)(t),e)};var v=n(76912),b=n(15647),_=n(13153);const p=Object.getOwnPropertySymbols?function(t){for(var e=[];t;)(0,v.A)(e,(0,d.A)(t)),t=(0,b.A)(t);return e}:_.A;const g=function(t,e){return(0,s.A)(t,p(t),e)};var j=n(19042),y=n(33831);const m=function(t){return(0,y.A)(t,a.A,p)};var w=n(9779),O=Object.prototype.hasOwnProperty;const C=function(t){var e=t.length,n=new t.constructor(e);return e&&"string"==typeof t[0]&&O.call(t,"index")&&(n.index=t.index,n.input=t.input),n};var E=n(90565);const L=function(t,e){var n=e?(0,E.A)(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)};var N=/\w*$/;const D=function(t){var e=new t.constructor(t.source,N.exec(t));return e.lastIndex=t.lastIndex,e};var S=n(241),F=S.A?S.A.prototype:void 0,P=F?F.valueOf:void 0;const M=function(t){return P?Object(P.call(t)):{}};var k=n(1801);const x=function(t,e,n){var r=t.constructor;switch(e){case"[object ArrayBuffer]":return(0,E.A)(t);case"[object Boolean]":case"[object Date]":return new r(+t);case"[object DataView]":return L(t,n);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return(0,k.A)(t,n);case"[object Map]":case"[object Set]":return new r;case"[object Number]":case"[object String]":return new r(t);case"[object RegExp]":return D(t);case"[object Symbol]":return M(t)}};var I=n(18598),U=n(92049),z=n(99912),B=n(53098);const $=function(t){return(0,B.A)(t)&&"[object Map]"==(0,w.A)(t)};var G=n(52789),R=n(64841),T=R.A&&R.A.isMap;const V=T?(0,G.A)(T):$;var W=n(23149);const q=function(t){return(0,B.A)(t)&&"[object Set]"==(0,w.A)(t)};var H=R.A&&R.A.isSet;const J=H?(0,G.A)(H):q;var K="[object Arguments]",Q="[object Function]",X="[object Object]",Y={};Y[K]=Y["[object Array]"]=Y["[object ArrayBuffer]"]=Y["[object DataView]"]=Y["[object Boolean]"]=Y["[object Date]"]=Y["[object Float32Array]"]=Y["[object Float64Array]"]=Y["[object Int8Array]"]=Y["[object Int16Array]"]=Y["[object Int32Array]"]=Y["[object Map]"]=Y["[object Number]"]=Y[X]=Y["[object RegExp]"]=Y["[object Set]"]=Y["[object String]"]=Y["[object Symbol]"]=Y["[object Uint8Array]"]=Y["[object Uint8ClampedArray]"]=Y["[object Uint16Array]"]=Y["[object Uint32Array]"]=!0,Y["[object Error]"]=Y[Q]=Y["[object WeakMap]"]=!1;const Z=function t(e,n,s,d,v,b){var _,p=1&n,y=2&n,O=4&n;if(s&&(_=v?s(e,d,v,b):s(e)),void 0!==_)return _;if(!(0,W.A)(e))return e;var E=(0,U.A)(e);if(E){if(_=C(e),!p)return(0,A.A)(e,_)}else{var L=(0,w.A)(e),N=L==Q||"[object GeneratorFunction]"==L;if((0,z.A)(e))return(0,h.A)(e,p);if(L==X||L==K||N&&!v){if(_=y||N?{}:(0,I.A)(e),!p)return y?g(e,f(_,e)):l(e,c(_,e))}else{if(!Y[L])return v?e:{};_=x(e,L,p)}}b||(b=new r.A);var D=b.get(e);if(D)return D;b.set(e,_),J(e)?e.forEach((function(r){_.add(t(r,n,s,r,e,b))})):V(e)&&e.forEach((function(r,o){_.set(o,t(r,n,s,o,e,b))}));var S=O?y?m:j.A:y?a.A:u.A,F=E?void 0:S(e);return(0,o.A)(F||e,(function(r,o){F&&(r=e[o=r]),(0,i.A)(_,o,t(r,n,s,o,e,b))})),_}},6240:(t,e,n)=>{n.d(e,{A:()=>i});var r=n(79841),o=n(38446);const i=function(t,e){return function(n,r){if(null==n)return n;if(!(0,o.A)(n))return t(n,r);for(var i=n.length,s=e?i:-1,u=Object(n);(e?s--:++s{n.d(e,{A:()=>r});const r=function(t,e,n,r){for(var o=t.length,i=n+(r?1:-1);r?i--:++i{n.d(e,{A:()=>a});var r=n(76912),o=n(241),i=n(52274),s=n(92049),u=o.A?o.A.isConcatSpreadable:void 0;const c=function(t){return(0,s.A)(t)||(0,i.A)(t)||!!(u&&t&&t[u])};const a=function t(e,n,o,i,s){var u=-1,a=e.length;for(o||(o=c),s||(s=[]);++u0&&o(f)?n>1?t(f,n-1,o,i,s):(0,r.A)(s,f):i||(s[s.length]=f)}return s}},79841:(t,e,n)=>{n.d(e,{A:()=>i});var r=n(4574),o=n(27422);const i=function(t,e){return t&&(0,r.A)(t,e,o.A)}},66318:(t,e,n)=>{n.d(e,{A:()=>i});var r=n(7819),o=n(30901);const i=function(t,e){for(var n=0,i=(e=(0,r.A)(e,t)).length;null!=t&&n{n.d(e,{A:()=>i});var r=n(76912),o=n(92049);const i=function(t,e,n){var i=e(t);return(0,o.A)(t)?i:(0,r.A)(i,n(t))}},49574:(t,e,n)=>{n.d(e,{A:()=>H});var r=n(11754),o=n(62062);const i=function(t,e){for(var n=-1,r=null==t?0:t.length;++nf))return!1;var A=c.get(t),d=c.get(e);if(A&&d)return A==e&&d==t;var l=-1,v=!0,b=2&n?new o.A:void 0;for(c.set(t,e),c.set(e,t);++l{n.d(e,{A:()=>r});const r=function(t){return function(e){return null==e?void 0:e[t]}}},64099:(t,e,n)=>{n.d(e,{A:()=>r});const r=function(t,e){return t.has(e)}},99922:(t,e,n)=>{n.d(e,{A:()=>o});var r=n(29008);const o=function(t){return"function"==typeof t?t:r.A}},7819:(t,e,n)=>{n.d(e,{A:()=>f});var r=n(92049),o=n(86586),i=n(46632);var s=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,u=/\\(\\)?/g;const c=function(t){var e=(0,i.A)(t,(function(t){return 500===n.size&&n.clear(),t})),n=e.cache;return e}((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(s,(function(t,n,r,o){e.push(r?o.replace(u,"$1"):n||t)})),e}));var a=n(28894);const f=function(t,e){return(0,r.A)(t)?t:(0,o.A)(t,e)?[t]:c((0,a.A)(t))}},19042:(t,e,n)=>{n.d(e,{A:()=>s});var r=n(33831),o=n(14792),i=n(27422);const s=function(t){return(0,r.A)(t,i.A,o.A)}},14792:(t,e,n)=>{n.d(e,{A:()=>u});var r=n(2634),o=n(13153),i=Object.prototype.propertyIsEnumerable,s=Object.getOwnPropertySymbols;const u=s?function(t){return null==t?[]:(t=Object(t),(0,r.A)(s(t),(function(e){return i.call(t,e)})))}:o.A},85054:(t,e,n)=>{n.d(e,{A:()=>a});var r=n(7819),o=n(52274),i=n(92049),s=n(25353),u=n(5254),c=n(30901);const a=function(t,e,n){for(var a=-1,f=(e=(0,r.A)(e,t)).length,h=!1;++a{n.d(e,{A:()=>u});var r=n(92049),o=n(61882),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,s=/^\w*$/;const u=function(t,e){if((0,r.A)(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!(0,o.A)(t))||(s.test(t)||!i.test(t)||null!=e&&t in Object(e))}},29959:(t,e,n)=>{n.d(e,{A:()=>r});const r=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=t})),n}},30901:(t,e,n)=>{n.d(e,{A:()=>o});var r=n(61882);const o=function(t){if("string"==typeof t||(0,r.A)(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}},11662:(t,e,n)=>{n.d(e,{A:()=>c});var r=n(2634),o=n(6240);const i=function(t,e){var n=[];return(0,o.A)(t,(function(t,r,o){e(t,r,o)&&n.push(t)})),n};var s=n(49574),u=n(92049);const c=function(t,e){return((0,u.A)(t)?r.A:i)(t,(0,s.A)(e,3))}},8058:(t,e,n)=>{n.d(e,{A:()=>u});var r=n(72641),o=n(6240),i=n(99922),s=n(92049);const u=function(t,e){return((0,s.A)(t)?r.A:o.A)(t,(0,i.A)(e))}},48585:(t,e,n)=>{n.d(e,{A:()=>s});var r=Object.prototype.hasOwnProperty;const o=function(t,e){return null!=t&&r.call(t,e)};var i=n(85054);const s=function(t,e){return null!=t&&(0,i.A)(t,e,o)}},39188:(t,e,n)=>{n.d(e,{A:()=>i});const r=function(t,e){return null!=t&&e in Object(t)};var o=n(85054);const i=function(t,e){return null!=t&&(0,o.A)(t,e,r)}},61882:(t,e,n)=>{n.d(e,{A:()=>i});var r=n(88496),o=n(53098);const i=function(t){return"symbol"==typeof t||(0,o.A)(t)&&"[object Symbol]"==(0,r.A)(t)}},69592:(t,e,n)=>{n.d(e,{A:()=>r});const r=function(t){return void 0===t}},27422:(t,e,n)=>{n.d(e,{A:()=>s});var r=n(83607),o=n(69471),i=n(38446);const s=function(t){return(0,i.A)(t)?(0,r.A)(t):(0,o.A)(t)}},89463:(t,e,n)=>{n.d(e,{A:()=>c});const r=function(t,e,n,r){var o=-1,i=null==t?0:t.length;for(r&&i&&(n=t[++o]);++o{n.d(e,{A:()=>r});const r=function(){return[]}},28894:(t,e,n)=>{n.d(e,{A:()=>f});var r=n(241),o=n(45572),i=n(92049),s=n(61882),u=r.A?r.A.prototype:void 0,c=u?u.toString:void 0;const a=function t(e){if("string"==typeof e)return e;if((0,i.A)(e))return(0,o.A)(e,t)+"";if((0,s.A)(e))return c?c.call(e):"";var n=e+"";return"0"==n&&1/e==-1/0?"-0":n};const f=function(t){return null==t?"":a(t)}},38207:(t,e,n)=>{n.d(e,{A:()=>s});var r=n(45572);const o=function(t,e){return(0,r.A)(e,(function(e){return t[e]}))};var i=n(27422);const s=function(t){return null==t?[]:o(t,(0,i.A)(t))}}}]); \ No newline at end of file diff --git a/assets/js/1176.ef72ee50.js b/assets/js/1176.ef72ee50.js new file mode 100644 index 0000000000..ccbbf89199 --- /dev/null +++ b/assets/js/1176.ef72ee50.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1176],{21176:(n,e,r)=>{r.d(e,{Zp:()=>Ce});var t=r(8058),o=r(5664),i=r(48585),u=r(39142),a=r(34098),d=r(74722),c=r(91395),f=r(697);class s{constructor(){var n={};n._next=n._prev=n,this._sentinel=n}dequeue(){var n=this._sentinel,e=n._prev;if(e!==n)return v(e),e}enqueue(n){var e=this._sentinel;n._prev&&n._next&&v(n),n._next=e._next,e._next._prev=n,e._next=n,n._prev=e}toString(){for(var n=[],e=this._sentinel,r=e._prev;r!==e;)n.push(JSON.stringify(r,g)),r=r._prev;return"["+n.join(", ")+"]"}}function v(n){n._prev._next=n._next,n._next._prev=n._prev,delete n._next,delete n._prev}function g(n,e){if("_next"!==n&&"_prev"!==n)return e}var h=u.A(1);function l(n,e){if(n.nodeCount()<=1)return[];var r=function(n,e){var r=new f.T,o=0,i=0;t.A(n.nodes(),(function(n){r.setNode(n,{v:n,in:0,out:0})})),t.A(n.edges(),(function(n){var t=r.edge(n.v,n.w)||0,u=e(n),a=t+u;r.setEdge(n.v,n.w,a),i=Math.max(i,r.node(n.v).out+=u),o=Math.max(o,r.node(n.w).in+=u)}));var u=c.A(i+o+3).map((function(){return new s})),a=o+1;return t.A(r.nodes(),(function(n){p(u,a,r.node(n))})),{graph:r,buckets:u,zeroIdx:a}}(n,e||h),o=function(n,e,r){var t,o=[],i=e[e.length-1],u=e[0];for(;n.nodeCount();){for(;t=u.dequeue();)A(n,e,r,t);for(;t=i.dequeue();)A(n,e,r,t);if(n.nodeCount())for(var a=e.length-2;a>0;--a)if(t=e[a].dequeue()){o=o.concat(A(n,e,r,t,!0));break}}return o}(r.graph,r.buckets,r.zeroIdx);return a.A(d.A(o,(function(e){return n.outEdges(e.v,e.w)})))}function A(n,e,r,o,i){var u=i?[]:void 0;return t.A(n.inEdges(o.v),(function(t){var o=n.edge(t),a=n.node(t.v);i&&u.push({v:t.v,w:t.w}),a.out-=o,p(e,r,a)})),t.A(n.outEdges(o.v),(function(t){var o=n.edge(t),i=t.w,u=n.node(i);u.in-=o,p(e,r,u)})),n.removeNode(o.v),u}function p(n,e,r){r.out?r.in?n[r.out-r.in+e].enqueue(r):n[n.length-1].enqueue(r):n[0].enqueue(r)}function w(n){var e="greedy"===n.graph().acyclicer?l(n,function(n){return function(e){return n.edge(e).weight}}(n)):function(n){var e=[],r={},o={};function u(a){i.A(o,a)||(o[a]=!0,r[a]=!0,t.A(n.outEdges(a),(function(n){i.A(r,n.w)?e.push(n):u(n.w)})),delete r[a])}return t.A(n.nodes(),u),e}(n);t.A(e,(function(e){var r=n.edge(e);n.removeEdge(e),r.forwardName=e.name,r.reversed=!0,n.setEdge(e.w,e.v,r,o.A("rev"))}))}var m=r(98879),b=r(81942),y=r(23068),x=r(61882);const k=function(n,e,r){for(var t=-1,o=n.length;++te};var N=r(29008);const _=function(n){return n&&n.length?k(n,N.A,E):void 0};const I=function(n){var e=null==n?0:n.length;return e?n[e-1]:void 0};var T=r(52528),R=r(79841),M=r(49574);const L=function(n,e){var r={};return e=(0,M.A)(e,3),(0,R.A)(n,(function(n,t,o){(0,T.A)(r,t,e(n,t,o))})),r};var C=r(69592);const O=function(n,e){return nMath.abs(u)*c?(a<0&&(c=-c),r=c*u/a,t=c):(u<0&&(d=-d),r=d,t=d*a/u),{x:o+r,y:i+t}}function B(n){var e=d.A(c.A(Y(n)+1),(function(){return[]}));return t.A(n.nodes(),(function(r){var t=n.node(r),o=t.rank;C.A(o)||(e[o][t.order]=r)})),e}function q(n,e,r,t){var o={width:0,height:0};return arguments.length>=4&&(o.rank=r,o.order=t),F(n,"border",o,e)}function Y(n){return _(d.A(n.nodes(),(function(e){var r=n.node(e).rank;if(!C.A(r))return r})))}function z(n,e){var r=j();try{return e()}finally{console.log(n+" time: "+(j()-r)+"ms")}}function D(n,e){return e()}function $(n,e,r,t,o,i){var u={width:0,height:0,rank:i,borderType:e},a=o[e][i-1],d=F(n,"border",u,r);o[e][i]=d,n.setParent(d,t),a&&n.setEdge(a,d,{weight:1})}function J(n){var e=n.graph().rankdir.toLowerCase();"bt"!==e&&"rl"!==e||function(n){t.A(n.nodes(),(function(e){K(n.node(e))})),t.A(n.edges(),(function(e){var r=n.edge(e);t.A(r.points,K),i.A(r,"y")&&K(r)}))}(n),"lr"!==e&&"rl"!==e||(!function(n){t.A(n.nodes(),(function(e){Q(n.node(e))})),t.A(n.edges(),(function(e){var r=n.edge(e);t.A(r.points,Q),i.A(r,"x")&&Q(r)}))}(n),Z(n))}function Z(n){t.A(n.nodes(),(function(e){H(n.node(e))})),t.A(n.edges(),(function(e){H(n.edge(e))}))}function H(n){var e=n.width;n.width=n.height,n.height=e}function K(n){n.y=-n.y}function Q(n){var e=n.x;n.x=n.y,n.y=e}function U(n){n.graph().dummyChains=[],t.A(n.edges(),(function(e){!function(n,e){var r,t,o,i=e.v,u=n.node(i).rank,a=e.w,d=n.node(a).rank,c=e.name,f=n.edge(e),s=f.labelRank;if(d===u+1)return;for(n.removeEdge(e),o=0,++u;u-1?o[i?e[u]:u]:void 0}};var cn=r(25707),fn=r(74342);const sn=function(n){var e=(0,fn.A)(n),r=e%1;return e==e?r?e-r:e:0};var vn=Math.max;const gn=dn((function(n,e,r){var t=null==n?0:n.length;if(!t)return-1;var o=null==r?0:sn(r);return o<0&&(o=vn(t+o,0)),(0,cn.A)(n,(0,M.A)(e,3),o)}));var hn=r(11662);u.A(1);u.A(1);r(69471),r(9779),r(88496);var ln=r(92049);r(53098);(0,r(70805).A)("length");RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");var An="\\ud800-\\udfff",pn="["+An+"]",wn="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",mn="\\ud83c[\\udffb-\\udfff]",bn="[^"+An+"]",yn="(?:\\ud83c[\\udde6-\\uddff]){2}",xn="[\\ud800-\\udbff][\\udc00-\\udfff]",kn="(?:"+wn+"|"+mn+")"+"?",En="[\\ufe0e\\ufe0f]?",Nn=En+kn+("(?:\\u200d(?:"+[bn,yn,xn].join("|")+")"+En+kn+")*"),_n="(?:"+[bn+wn+"?",wn,yn,xn,pn].join("|")+")";RegExp(mn+"(?="+mn+")|"+_n+Nn,"g");function In(){}function Tn(n,e,r){ln.A(e)||(e=[e]);var o=(n.isDirected()?n.successors:n.neighbors).bind(n),i=[],u={};return t.A(e,(function(e){if(!n.hasNode(e))throw new Error("Graph does not have node: "+e);Rn(n,e,"post"===r,u,o,i)})),i}function Rn(n,e,r,o,u,a){i.A(o,e)||(o[e]=!0,r||a.push(e),t.A(u(e),(function(e){Rn(n,e,r,o,u,a)})),r&&a.push(e))}In.prototype=new Error;r(73046);function Mn(n){n=function(n){var e=(new f.T).setGraph(n.graph());return t.A(n.nodes(),(function(r){e.setNode(r,n.node(r))})),t.A(n.edges(),(function(r){var t=e.edge(r.v,r.w)||{weight:0,minlen:1},o=n.edge(r);e.setEdge(r.v,r.w,{weight:t.weight+o.weight,minlen:Math.max(t.minlen,o.minlen)})})),e}(n),X(n);var e,r=en(n);for(On(r),Ln(r,n);e=Sn(r);)Fn(r,n,e,jn(r,n,e))}function Ln(n,e){var r=function(n,e){return Tn(n,e,"post")}(n,n.nodes());r=r.slice(0,r.length-1),t.A(r,(function(r){!function(n,e,r){var t=n.node(r),o=t.parent;n.edge(r,o).cutvalue=Cn(n,e,r)}(n,e,r)}))}function Cn(n,e,r){var o=n.node(r).parent,i=!0,u=e.edge(r,o),a=0;return u||(i=!1,u=e.edge(o,r)),a=u.weight,t.A(e.nodeEdges(r),(function(t){var u,d,c=t.v===r,f=c?t.w:t.v;if(f!==o){var s=c===i,v=e.edge(t).weight;if(a+=s?v:-v,u=r,d=f,n.hasEdge(u,d)){var g=n.edge(r,f).cutvalue;a+=s?-g:g}}})),a}function On(n,e){arguments.length<2&&(e=n.nodes()[0]),Pn(n,{},1,e)}function Pn(n,e,r,o,u){var a=r,d=n.node(o);return e[o]=!0,t.A(n.neighbors(o),(function(t){i.A(e,t)||(r=Pn(n,e,r,t,o))})),d.low=a,d.lim=r++,u?d.parent=u:delete d.parent,r}function Sn(n){return gn(n.edges(),(function(e){return n.edge(e).cutvalue<0}))}function jn(n,e,r){var t=r.v,o=r.w;e.hasEdge(t,o)||(t=r.w,o=r.v);var i=n.node(t),u=n.node(o),a=i,d=!1;i.lim>u.lim&&(a=u,d=!0);var c=hn.A(e.edges(),(function(e){return d===Gn(n,n.node(e.v),a)&&d!==Gn(n,n.node(e.w),a)}));return W(c,(function(n){return nn(e,n)}))}function Fn(n,e,r,o){var i=r.v,u=r.w;n.removeEdge(i,u),n.setEdge(o.v,o.w,{}),On(n),Ln(n,e),function(n,e){var r=gn(n.nodes(),(function(n){return!e.node(n).parent})),o=function(n,e){return Tn(n,e,"pre")}(n,r);o=o.slice(1),t.A(o,(function(r){var t=n.node(r).parent,o=e.edge(r,t),i=!1;o||(o=e.edge(t,r),i=!0),e.node(r).rank=e.node(t).rank+(i?o.minlen:-o.minlen)}))}(n,e)}function Gn(n,e,r){return r.low<=e.lim&&e.lim<=r.lim}function Vn(n){switch(n.graph().ranker){case"network-simplex":default:qn(n);break;case"tight-tree":!function(n){X(n),en(n)}(n);break;case"longest-path":Bn(n)}}Mn.initLowLimValues=On,Mn.initCutValues=Ln,Mn.calcCutValue=Cn,Mn.leaveEdge=Sn,Mn.enterEdge=jn,Mn.exchangeEdges=Fn;var Bn=X;function qn(n){Mn(n)}var Yn=r(38207),zn=r(89463);function Dn(n){var e=F(n,"root",{},"_root"),r=function(n){var e={};function r(o,i){var u=n.children(o);u&&u.length&&t.A(u,(function(n){r(n,i+1)})),e[o]=i}return t.A(n.children(),(function(n){r(n,1)})),e}(n),o=_(Yn.A(r))-1,i=2*o+1;n.graph().nestingRoot=e,t.A(n.edges(),(function(e){n.edge(e).minlen*=i}));var u=function(n){return zn.A(n.edges(),(function(e,r){return e+n.edge(r).weight}),0)}(n)+1;t.A(n.children(),(function(t){$n(n,e,i,u,o,r,t)})),n.graph().nodeRankFactor=i}function $n(n,e,r,o,i,u,a){var d=n.children(a);if(d.length){var c=q(n,"_bt"),f=q(n,"_bb"),s=n.node(a);n.setParent(c,a),s.borderTop=c,n.setParent(f,a),s.borderBottom=f,t.A(d,(function(t){$n(n,e,r,o,i,u,t);var d=n.node(t),s=d.borderTop?d.borderTop:t,v=d.borderBottom?d.borderBottom:t,g=d.borderTop?o:2*o,h=s!==v?1:i-u[a]+1;n.setEdge(c,s,{weight:g,minlen:h,nestingEdge:!0}),n.setEdge(v,f,{weight:g,minlen:h,nestingEdge:!0})})),n.parent(a)||n.setEdge(e,c,{weight:0,minlen:i+u[a]})}else a!==e&&n.setEdge(e,a,{weight:0,minlen:r})}var Jn=r(91641);const Zn=function(n){return(0,Jn.A)(n,5)};function Hn(n,e,r){var u=function(n){var e;for(;n.hasNode(e=o.A("_root")););return e}(n),a=new f.T({compound:!0}).setGraph({root:u}).setDefaultNodeLabel((function(e){return n.node(e)}));return t.A(n.nodes(),(function(o){var d=n.node(o),c=n.parent(o);(d.rank===e||d.minRank<=e&&e<=d.maxRank)&&(a.setNode(o),a.setParent(o,c||u),t.A(n[r](o),(function(e){var r=e.v===o?e.w:e.v,t=a.edge(r,o),i=C.A(t)?0:t.weight;a.setEdge(r,o,{weight:n.edge(e).weight+i})})),i.A(d,"minRank")&&a.setNode(o,{borderLeft:d.borderLeft[e],borderRight:d.borderRight[e]}))})),a}var Kn=r(52851);const Qn=function(n,e,r){for(var t=-1,o=n.length,i=e.length,u={};++te||i&&u&&d&&!a&&!c||t&&u&&d||!r&&d||!o)return 1;if(!t&&!i&&!c&&n=a?d:d*("desc"==r[t]?-1:1)}return n.index-e.index};const ue=function(n,e,r){e=e.length?(0,Xn.A)(e,(function(n){return(0,ln.A)(n)?function(e){return(0,ne.A)(e,1===n.length?n[0]:n)}:n})):[N.A];var t=-1;e=(0,Xn.A)(e,(0,te.A)(M.A));var o=(0,ee.A)(n,(function(n,r,o){return{criteria:(0,Xn.A)(e,(function(e){return e(n)})),index:++t,value:n}}));return re(o,(function(n,e){return ie(n,e,r)}))};var ae=r(24326),de=r(6832);const ce=(0,ae.A)((function(n,e){if(null==n)return[];var r=e.length;return r>1&&(0,de.A)(n,e[0],e[1])?e=[]:r>2&&(0,de.A)(e[0],e[1],e[2])&&(e=[e[0]]),ue(n,(0,Wn.A)(e,1),[])}));function fe(n,e){for(var r=0,t=1;t0;)e%2&&(r+=f[e+1]),f[e=e-1>>1]+=n.weight;s+=n.weight*r}))),s}function ve(n,e){var r={};return t.A(n,(function(n,e){var t=r[n.v]={indegree:0,in:[],out:[],vs:[n.v],i:e};C.A(n.barycenter)||(t.barycenter=n.barycenter,t.weight=n.weight)})),t.A(e.edges(),(function(n){var e=r[n.v],t=r[n.w];C.A(e)||C.A(t)||(t.indegree++,e.out.push(r[n.w]))})),function(n){var e=[];function r(n){return function(e){e.merged||(C.A(e.barycenter)||C.A(n.barycenter)||e.barycenter>=n.barycenter)&&function(n,e){var r=0,t=0;n.weight&&(r+=n.barycenter*n.weight,t+=n.weight);e.weight&&(r+=e.barycenter*e.weight,t+=e.weight);n.vs=e.vs.concat(n.vs),n.barycenter=r/t,n.weight=t,n.i=Math.min(e.i,n.i),e.merged=!0}(n,e)}}function o(e){return function(r){r.in.push(e),0==--r.indegree&&n.push(r)}}for(;n.length;){var i=n.pop();e.push(i),t.A(i.in.reverse(),r(i)),t.A(i.out,o(i))}return d.A(hn.A(e,(function(n){return!n.merged})),(function(n){return b.A(n,["vs","i","barycenter","weight"])}))}(hn.A(r,(function(n){return!n.indegree})))}function ge(n,e){var r,o=function(n,e){var r={lhs:[],rhs:[]};return t.A(n,(function(n){e(n)?r.lhs.push(n):r.rhs.push(n)})),r}(n,(function(n){return i.A(n,"barycenter")})),u=o.lhs,d=ce(o.rhs,(function(n){return-n.i})),c=[],f=0,s=0,v=0;u.sort((r=!!e,function(n,e){return n.barycentere.barycenter?1:r?e.i-n.i:n.i-e.i})),v=he(c,d,v),t.A(u,(function(n){v+=n.vs.length,c.push(n.vs),f+=n.barycenter*n.weight,s+=n.weight,v=he(c,d,v)}));var g={vs:a.A(c)};return s&&(g.barycenter=f/s,g.weight=s),g}function he(n,e,r){for(var t;e.length&&(t=I(e)).i<=r;)e.pop(),n.push(t.vs),r++;return r}function le(n,e,r,o){var u=n.children(e),c=n.node(e),f=c?c.borderLeft:void 0,s=c?c.borderRight:void 0,v={};f&&(u=hn.A(u,(function(n){return n!==f&&n!==s})));var g=function(n,e){return d.A(e,(function(e){var r=n.inEdges(e);if(r.length){var t=zn.A(r,(function(e,r){var t=n.edge(r),o=n.node(r.v);return{sum:e.sum+t.weight*o.order,weight:e.weight+t.weight}}),{sum:0,weight:0});return{v:e,barycenter:t.sum/t.weight,weight:t.weight}}return{v:e}}))}(n,u);t.A(g,(function(e){if(n.children(e.v).length){var t=le(n,e.v,r,o);v[e.v]=t,i.A(t,"barycenter")&&(u=e,a=t,C.A(u.barycenter)?(u.barycenter=a.barycenter,u.weight=a.weight):(u.barycenter=(u.barycenter*u.weight+a.barycenter*a.weight)/(u.weight+a.weight),u.weight+=a.weight))}var u,a}));var h=ve(g,r);!function(n,e){t.A(n,(function(n){n.vs=a.A(n.vs.map((function(n){return e[n]?e[n].vs:n})))}))}(h,v);var l=ge(h,o);if(f&&(l.vs=a.A([f,l.vs,s]),n.predecessors(f).length)){var A=n.node(n.predecessors(f)[0]),p=n.node(n.predecessors(s)[0]);i.A(l,"barycenter")||(l.barycenter=0,l.weight=0),l.barycenter=(l.barycenter*l.weight+A.order+p.order)/(l.weight+2),l.weight+=2}return l}function Ae(n){var e=Y(n),r=pe(n,c.A(1,e+1),"inEdges"),o=pe(n,c.A(e-1,-1,-1),"outEdges"),u=function(n){var e={},r=hn.A(n.nodes(),(function(e){return!n.children(e).length})),o=_(d.A(r,(function(e){return n.node(e).rank}))),u=d.A(c.A(o+1),(function(){return[]})),a=ce(r,(function(e){return n.node(e).rank}));return t.A(a,(function r(o){if(!i.A(e,o)){e[o]=!0;var a=n.node(o);u[a.rank].push(o),t.A(n.successors(o),r)}})),u}(n);me(n,u);for(var a,f=Number.POSITIVE_INFINITY,s=0,v=0;v<4;++s,++v){we(s%2?r:o,s%4>=2);var g=fe(n,u=B(n));gd||c>e[o].lim));i=o,o=t;for(;(o=n.parent(o))!==i;)a.push(o);return{path:u.concat(a.reverse()),lca:i}}(n,e,o.v,o.w),u=i.path,a=i.lca,d=0,c=u[d],f=!0;r!==o.w;){if(t=n.node(r),f){for(;(c=u[d])!==a&&n.node(c).maxRankr){var t=e;e=r,r=t}var o=n[e];o||(n[e]=o={}),o[r]=!0}function Te(n,e,r){if(e>r){var t=e;e=r,r=t}return i.A(n[e],r)}function Re(n,e,r,o,u){var a={},d=function(n,e,r,o){var u=new f.T,a=n.graph(),d=function(n,e,r){return function(t,o,u){var a,d=t.node(o),c=t.node(u),f=0;if(f+=d.width/2,i.A(d,"labelpos"))switch(d.labelpos.toLowerCase()){case"l":a=-d.width/2;break;case"r":a=d.width/2}if(a&&(f+=r?a:-a),a=0,f+=(d.dummy?e:n)/2,f+=(c.dummy?e:n)/2,f+=c.width/2,i.A(c,"labelpos"))switch(c.labelpos.toLowerCase()){case"l":a=c.width/2;break;case"r":a=-c.width/2}return a&&(f+=r?a:-a),a=0,f}}(a.nodesep,a.edgesep,o);return t.A(e,(function(e){var o;t.A(e,(function(e){var t=r[e];if(u.setNode(t),o){var i=r[o],a=u.edge(i,t);u.setEdge(i,t,Math.max(d(n,e,o),a||0))}o=e}))})),u}(n,e,r,u),c=u?"borderLeft":"borderRight";function s(n,e){for(var r=d.nodes(),t=r.pop(),o={};t;)o[t]?n(t):(o[t]=!0,r.push(t),r=r.concat(e(t))),t=r.pop()}return s((function(n){a[n]=d.inEdges(n).reduce((function(n,e){return Math.max(n,a[e.v]+d.edge(e))}),0)}),d.predecessors.bind(d)),s((function(e){var r=d.outEdges(e).reduce((function(n,e){return Math.min(n,a[e.w]-d.edge(e))}),Number.POSITIVE_INFINITY),t=n.node(e);r!==Number.POSITIVE_INFINITY&&t.borderType!==c&&(a[e]=Math.max(a[e],r))}),d.successors.bind(d)),t.A(o,(function(n){a[n]=a[r[n]]})),a}function Me(n){var e,r=B(n),o=m.A(_e(n,r),function(n,e){var r={};function o(e,o,i,u,a){var d;t.A(c.A(o,i),(function(o){d=e[o],n.node(d).dummy&&t.A(n.predecessors(d),(function(e){var t=n.node(e);t.dummy&&(t.ordera)&&Ie(r,e,d)}))}))}return zn.A(e,(function(e,r){var i,u=-1,a=0;return t.A(r,(function(t,d){if("border"===n.node(t).dummy){var c=n.predecessors(t);c.length&&(i=n.node(c[0]).order,o(r,a,d,u,i),a=d,u=i)}o(r,a,r.length,i,e.length)})),r})),r}(n,r)),i={};t.A(["u","d"],(function(u){e="u"===u?r:Yn.A(r).reverse(),t.A(["l","r"],(function(r){"r"===r&&(e=d.A(e,(function(n){return Yn.A(n).reverse()})));var a=("u"===u?n.predecessors:n.successors).bind(n),c=function(n,e,r,o){var i={},u={},a={};return t.A(e,(function(n){t.A(n,(function(n,e){i[n]=n,u[n]=n,a[n]=e}))})),t.A(e,(function(n){var e=-1;t.A(n,(function(n){var t=o(n);if(t.length){t=ce(t,(function(n){return a[n]}));for(var d=(t.length-1)/2,c=Math.floor(d),f=Math.ceil(d);c<=f;++c){var s=t[c];u[n]===n&&e{r.d(e,{A:()=>i});var t=r(6240),o=r(38446);const i=function(n,e){var r=-1,i=(0,o.A)(n)?Array(n.length):[];return(0,t.A)(n,(function(n,t,o){i[++r]=e(n,t,o)})),i}},23068:(n,e,r)=>{r.d(e,{A:()=>c});var t=r(24326),o=r(66984),i=r(6832),u=r(77996),a=Object.prototype,d=a.hasOwnProperty;const c=(0,t.A)((function(n,e){n=Object(n);var r=-1,t=e.length,c=t>2?e[2]:void 0;for(c&&(0,i.A)(e[0],e[1],c)&&(t=1);++r{r.d(e,{A:()=>o});var t=r(13588);const o=function(n){return(null==n?0:n.length)?(0,t.A)(n,1):[]}},74722:(n,e,r)=>{r.d(e,{A:()=>a});var t=r(45572),o=r(49574),i=r(52568),u=r(92049);const a=function(n,e){return((0,u.A)(n)?t.A:i.A)(n,(0,o.A)(e,3))}},81942:(n,e,r)=>{r.d(e,{A:()=>A});var t=r(66318),o=r(52851),i=r(7819),u=r(25353),a=r(23149),d=r(30901);const c=function(n,e,r,t){if(!(0,a.A)(n))return n;for(var c=-1,f=(e=(0,i.A)(e,n)).length,s=f-1,v=n;null!=v&&++c{r.d(e,{A:()=>d});var t=Math.ceil,o=Math.max;const i=function(n,e,r,i){for(var u=-1,a=o(t((e-n)/(r||1)),0),d=Array(a);a--;)d[i?a:++u]=n,n+=r;return d};var u=r(6832),a=r(74342);const d=function(n){return function(e,r,t){return t&&"number"!=typeof t&&(0,u.A)(e,r,t)&&(r=t=void 0),e=(0,a.A)(e),void 0===r?(r=e,e=0):r=(0,a.A)(r),t=void 0===t?e{r.d(e,{A:()=>l});var t=/\s/;const o=function(n){for(var e=n.length;e--&&t.test(n.charAt(e)););return e};var i=/^\s+/;const u=function(n){return n?n.slice(0,o(n)+1).replace(i,""):n};var a=r(23149),d=r(61882),c=/^[-+]0x[0-9a-f]+$/i,f=/^0b[01]+$/i,s=/^0o[0-7]+$/i,v=parseInt;const g=function(n){if("number"==typeof n)return n;if((0,d.A)(n))return NaN;if((0,a.A)(n)){var e="function"==typeof n.valueOf?n.valueOf():n;n=(0,a.A)(e)?e+"":e}if("string"!=typeof n)return 0===n?n:+n;n=u(n);var r=f.test(n);return r||s.test(n)?v(n.slice(2),r?2:8):c.test(n)?NaN:+n};var h=1/0;const l=function(n){return n?(n=g(n))===h||n===-1/0?17976931348623157e292*(n<0?-1:1):n==n?n:0:0===n?n:0}},5664:(n,e,r)=>{r.d(e,{A:()=>i});var t=r(28894),o=0;const i=function(n){var e=++o;return(0,t.A)(n)+e}}}]); \ No newline at end of file diff --git a/assets/js/1245.fc77c46b.js b/assets/js/1245.fc77c46b.js new file mode 100644 index 0000000000..02e58d7f06 --- /dev/null +++ b/assets/js/1245.fc77c46b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1245],{91245:(t,e,s)=>{s.d(e,{D:()=>l,S:()=>c,a:()=>h,b:()=>a,c:()=>o,d:()=>B,p:()=>r,s:()=>P});var i=s(99702),n=function(){var t=function(t,e,s,i){for(s=s||{},i=t.length;i--;s[t[i]]=e);return s},e=[1,2],s=[1,3],i=[1,4],n=[2,4],r=[1,9],o=[1,11],a=[1,15],c=[1,16],l=[1,17],h=[1,18],u=[1,30],d=[1,19],p=[1,20],y=[1,21],f=[1,22],m=[1,23],g=[1,25],S=[1,26],_=[1,27],k=[1,28],T=[1,29],b=[1,32],E=[1,33],x=[1,34],C=[1,35],$=[1,31],v=[1,4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],D=[1,4,5,13,14,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],A=[4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],L={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,cssClassStatement:11,idStatement:12,DESCR:13,"--\x3e":14,HIDE_EMPTY:15,scale:16,WIDTH:17,COMPOSIT_STATE:18,STRUCT_START:19,STRUCT_STOP:20,STATE_DESCR:21,AS:22,ID:23,FORK:24,JOIN:25,CHOICE:26,CONCURRENT:27,note:28,notePosition:29,NOTE_TEXT:30,direction:31,acc_title:32,acc_title_value:33,acc_descr:34,acc_descr_value:35,acc_descr_multiline_value:36,classDef:37,CLASSDEF_ID:38,CLASSDEF_STYLEOPTS:39,DEFAULT:40,class:41,CLASSENTITY_IDS:42,STYLECLASS:43,direction_tb:44,direction_bt:45,direction_rl:46,direction_lr:47,eol:48,";":49,EDGE_STATE:50,STYLE_SEPARATOR:51,left_of:52,right_of:53,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",13:"DESCR",14:"--\x3e",15:"HIDE_EMPTY",16:"scale",17:"WIDTH",18:"COMPOSIT_STATE",19:"STRUCT_START",20:"STRUCT_STOP",21:"STATE_DESCR",22:"AS",23:"ID",24:"FORK",25:"JOIN",26:"CHOICE",27:"CONCURRENT",28:"note",30:"NOTE_TEXT",32:"acc_title",33:"acc_title_value",34:"acc_descr",35:"acc_descr_value",36:"acc_descr_multiline_value",37:"classDef",38:"CLASSDEF_ID",39:"CLASSDEF_STYLEOPTS",40:"DEFAULT",41:"class",42:"CLASSENTITY_IDS",43:"STYLECLASS",44:"direction_tb",45:"direction_bt",46:"direction_rl",47:"direction_lr",49:";",50:"EDGE_STATE",51:"STYLE_SEPARATOR",52:"left_of",53:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[10,3],[10,3],[11,3],[31,1],[31,1],[31,1],[31,1],[48,1],[48,1],[12,1],[12,1],[12,3],[12,3],[29,1],[29,1]],performAction:function(t,e,s,i,n,r,o){var a=r.length-1;switch(n){case 3:return i.setRootDoc(r[a]),r[a];case 4:this.$=[];break;case 5:"nl"!=r[a]&&(r[a-1].push(r[a]),this.$=r[a-1]);break;case 6:case 7:case 11:this.$=r[a];break;case 8:this.$="nl";break;case 12:const t=r[a-1];t.description=i.trimColon(r[a]),this.$=t;break;case 13:this.$={stmt:"relation",state1:r[a-2],state2:r[a]};break;case 14:const e=i.trimColon(r[a]);this.$={stmt:"relation",state1:r[a-3],state2:r[a-1],description:e};break;case 18:this.$={stmt:"state",id:r[a-3],type:"default",description:"",doc:r[a-1]};break;case 19:var c=r[a],l=r[a-2].trim();if(r[a].match(":")){var h=r[a].split(":");c=h[0],l=[l,h[1]]}this.$={stmt:"state",id:c,type:"default",description:l};break;case 20:this.$={stmt:"state",id:r[a-3],type:"default",description:r[a-5],doc:r[a-1]};break;case 21:this.$={stmt:"state",id:r[a],type:"fork"};break;case 22:this.$={stmt:"state",id:r[a],type:"join"};break;case 23:this.$={stmt:"state",id:r[a],type:"choice"};break;case 24:this.$={stmt:"state",id:i.getDividerId(),type:"divider"};break;case 25:this.$={stmt:"state",id:r[a-1].trim(),note:{position:r[a-2].trim(),text:r[a].trim()}};break;case 28:this.$=r[a].trim(),i.setAccTitle(this.$);break;case 29:case 30:this.$=r[a].trim(),i.setAccDescription(this.$);break;case 31:case 32:this.$={stmt:"classDef",id:r[a-1].trim(),classes:r[a].trim()};break;case 33:this.$={stmt:"applyClass",id:r[a-1].trim(),styleClass:r[a].trim()};break;case 34:i.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 35:i.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 36:i.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 37:i.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 40:case 41:this.$={stmt:"state",id:r[a].trim(),type:"default",description:""};break;case 42:case 43:this.$={stmt:"state",id:r[a-2].trim(),classes:[r[a].trim()],type:"default",description:""}}},table:[{3:1,4:e,5:s,6:i},{1:[3]},{3:5,4:e,5:s,6:i},{3:6,4:e,5:s,6:i},t([1,4,5,15,16,18,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],n,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:r,5:o,8:8,9:10,10:12,11:13,12:14,15:a,16:c,18:l,21:h,23:u,24:d,25:p,26:y,27:f,28:m,31:24,32:g,34:S,36:_,37:k,41:T,44:b,45:E,46:x,47:C,50:$},t(v,[2,5]),{9:36,10:12,11:13,12:14,15:a,16:c,18:l,21:h,23:u,24:d,25:p,26:y,27:f,28:m,31:24,32:g,34:S,36:_,37:k,41:T,44:b,45:E,46:x,47:C,50:$},t(v,[2,7]),t(v,[2,8]),t(v,[2,9]),t(v,[2,10]),t(v,[2,11],{13:[1,37],14:[1,38]}),t(v,[2,15]),{17:[1,39]},t(v,[2,17],{19:[1,40]}),{22:[1,41]},t(v,[2,21]),t(v,[2,22]),t(v,[2,23]),t(v,[2,24]),{29:42,30:[1,43],52:[1,44],53:[1,45]},t(v,[2,27]),{33:[1,46]},{35:[1,47]},t(v,[2,30]),{38:[1,48],40:[1,49]},{42:[1,50]},t(D,[2,40],{51:[1,51]}),t(D,[2,41],{51:[1,52]}),t(v,[2,34]),t(v,[2,35]),t(v,[2,36]),t(v,[2,37]),t(v,[2,6]),t(v,[2,12]),{12:53,23:u,50:$},t(v,[2,16]),t(A,n,{7:54}),{23:[1,55]},{23:[1,56]},{22:[1,57]},{23:[2,44]},{23:[2,45]},t(v,[2,28]),t(v,[2,29]),{39:[1,58]},{39:[1,59]},{43:[1,60]},{23:[1,61]},{23:[1,62]},t(v,[2,13],{13:[1,63]}),{4:r,5:o,8:8,9:10,10:12,11:13,12:14,15:a,16:c,18:l,20:[1,64],21:h,23:u,24:d,25:p,26:y,27:f,28:m,31:24,32:g,34:S,36:_,37:k,41:T,44:b,45:E,46:x,47:C,50:$},t(v,[2,19],{19:[1,65]}),{30:[1,66]},{23:[1,67]},t(v,[2,31]),t(v,[2,32]),t(v,[2,33]),t(D,[2,42]),t(D,[2,43]),t(v,[2,14]),t(v,[2,18]),t(A,n,{7:68}),t(v,[2,25]),t(v,[2,26]),{4:r,5:o,8:8,9:10,10:12,11:13,12:14,15:a,16:c,18:l,20:[1,69],21:h,23:u,24:d,25:p,26:y,27:f,28:m,31:24,32:g,34:S,36:_,37:k,41:T,44:b,45:E,46:x,47:C,50:$},t(v,[2,20])],defaultActions:{5:[2,1],6:[2,2],44:[2,44],45:[2,45]},parseError:function(t,e){if(!e.recoverable){var s=new Error(t);throw s.hash=e,s}this.trace(t)},parse:function(t){var e=this,s=[0],i=[],n=[null],r=[],o=this.table,a="",c=0,l=0,h=r.slice.call(arguments,1),u=Object.create(this.lexer),d={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(d.yy[p]=this.yy[p]);u.setInput(t,d.yy),d.yy.lexer=u,d.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var y=u.yylloc;r.push(y);var f=u.options&&u.options.ranges;"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,g,S,_,k,T,b,E,x,C={};;){if(g=s[s.length-1],this.defaultActions[g]?S=this.defaultActions[g]:(null==m&&(x=void 0,"number"!=typeof(x=i.pop()||u.lex()||1)&&(x instanceof Array&&(x=(i=x).pop()),x=e.symbols_[x]||x),m=x),S=o[g]&&o[g][m]),void 0===S||!S.length||!S[0]){var $="";for(k in E=[],o[g])this.terminals_[k]&&k>2&&E.push("'"+this.terminals_[k]+"'");$=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+E.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError($,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:y,expected:E})}if(S[0]instanceof Array&&S.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+m);switch(S[0]){case 1:s.push(m),n.push(u.yytext),r.push(u.yylloc),s.push(S[1]),m=null,l=u.yyleng,a=u.yytext,c=u.yylineno,y=u.yylloc;break;case 2:if(T=this.productions_[S[1]][1],C.$=n[n.length-T],C._$={first_line:r[r.length-(T||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(T||1)].first_column,last_column:r[r.length-1].last_column},f&&(C._$.range=[r[r.length-(T||1)].range[0],r[r.length-1].range[1]]),void 0!==(_=this.performAction.apply(C,[a,l,c,d.yy,S[1],n,r].concat(h))))return _;T&&(s=s.slice(0,-1*T*2),n=n.slice(0,-1*T),r=r.slice(0,-1*T)),s.push(this.productions_[S[1]][0]),n.push(C.$),r.push(C._$),b=o[s[s.length-2]][s[s.length-1]],s.push(b);break;case 3:return!0}}return!0}},I={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,s=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),s.length-1&&(this.yylineno-=s.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:s?(s.length===i.length?this.yylloc.first_column:0)+i[i.length-s.length].length-s[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var s,i,n;if(this.options.backtrack_lexer&&(n={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(n.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],s=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;if(this._backtrack){for(var r in n)this[r]=n[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,s,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),r=0;re[0].length)){if(e=s,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(s,n[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,n[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,s,i){switch(s){case 0:return 40;case 1:case 39:return 44;case 2:case 40:return 45;case 3:case 41:return 46;case 4:case 42:return 47;case 5:case 6:case 8:case 9:case 10:case 11:case 51:case 53:case 59:break;case 7:case 74:return 5;case 12:case 29:return this.pushState("SCALE"),16;case 13:case 30:return 17;case 14:case 20:case 31:case 46:case 49:this.popState();break;case 15:return this.begin("acc_title"),32;case 16:return this.popState(),"acc_title_value";case 17:return this.begin("acc_descr"),34;case 18:return this.popState(),"acc_descr_value";case 19:this.begin("acc_descr_multiline");break;case 21:return"acc_descr_multiline_value";case 22:return this.pushState("CLASSDEF"),37;case 23:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 24:return this.popState(),this.pushState("CLASSDEFID"),38;case 25:return this.popState(),39;case 26:return this.pushState("CLASS"),41;case 27:return this.popState(),this.pushState("CLASS_STYLE"),42;case 28:return this.popState(),43;case 32:this.pushState("STATE");break;case 33:case 36:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),24;case 34:case 37:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),25;case 35:case 38:return this.popState(),e.yytext=e.yytext.slice(0,-10).trim(),26;case 43:this.pushState("STATE_STRING");break;case 44:return this.pushState("STATE_ID"),"AS";case 45:case 61:return this.popState(),"ID";case 47:return"STATE_DESCR";case 48:return 18;case 50:return this.popState(),this.pushState("struct"),19;case 52:return this.popState(),20;case 54:return this.begin("NOTE"),28;case 55:return this.popState(),this.pushState("NOTE_ID"),52;case 56:return this.popState(),this.pushState("NOTE_ID"),53;case 57:this.popState(),this.pushState("FLOATING_NOTE");break;case 58:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 60:return"NOTE_TEXT";case 62:return this.popState(),this.pushState("NOTE_TEXT"),23;case 63:return this.popState(),e.yytext=e.yytext.substr(2).trim(),30;case 64:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),30;case 65:case 66:return 6;case 67:return 15;case 68:return 50;case 69:return 23;case 70:return e.yytext=e.yytext.trim(),13;case 71:return 14;case 72:return 27;case 73:return 51;case 75:return"INVALID"}},rules:[/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[9,10],inclusive:!1},struct:{rules:[9,10,22,26,32,39,40,41,42,51,52,53,54,68,69,70,71,72],inclusive:!1},FLOATING_NOTE_ID:{rules:[61],inclusive:!1},FLOATING_NOTE:{rules:[58,59,60],inclusive:!1},NOTE_TEXT:{rules:[63,64],inclusive:!1},NOTE_ID:{rules:[62],inclusive:!1},NOTE:{rules:[55,56,57],inclusive:!1},CLASS_STYLE:{rules:[28],inclusive:!1},CLASS:{rules:[27],inclusive:!1},CLASSDEFID:{rules:[25],inclusive:!1},CLASSDEF:{rules:[23,24],inclusive:!1},acc_descr_multiline:{rules:[20,21],inclusive:!1},acc_descr:{rules:[18],inclusive:!1},acc_title:{rules:[16],inclusive:!1},SCALE:{rules:[13,14,30,31],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[45],inclusive:!1},STATE_STRING:{rules:[46,47],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[9,10,33,34,35,36,37,38,43,44,48,49,50],inclusive:!1},ID:{rules:[9,10],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,10,11,12,15,17,19,22,26,29,32,50,54,65,66,67,68,69,70,71,73,74,75],inclusive:!0}}};function O(){this.yy={}}return L.lexer=I,O.prototype=L,L.Parser=O,new O}();n.parser=n;const r=n,o="TB",a="state",c="relation",l="default",h="divider",u="[*]",d="start",p=u,y="color",f="fill";let m="LR",g=[],S={};let _={root:{relations:[],states:{},documents:{}}},k=_.root,T=0,b=0;const E=t=>JSON.parse(JSON.stringify(t)),x=(t,e,s)=>{if(e.stmt===c)x(t,e.state1,!0),x(t,e.state2,!1);else if(e.stmt===a&&("[*]"===e.id?(e.id=s?t.id+"_start":t.id+"_end",e.start=s):e.id=e.id.trim()),e.doc){const t=[];let s,n=[];for(s=0;s0&&n.length>0){const s={stmt:a,id:(0,i.I)(),type:"divider",doc:E(n)};t.push(E(s)),e.doc=t}e.doc.forEach((t=>x(e,t,!0)))}},C=function(t,e=l,s=null,n=null,r=null,o=null,a=null,c=null){const h=null==t?void 0:t.trim();if(void 0===k.states[h]?(i.l.info("Adding state ",h,n),k.states[h]={id:h,descriptions:[],type:e,doc:s,note:r,classes:[],styles:[],textStyles:[]}):(k.states[h].doc||(k.states[h].doc=s),k.states[h].type||(k.states[h].type=e)),n&&(i.l.info("Setting state description",h,n),"string"==typeof n&&I(h,n.trim()),"object"==typeof n&&n.forEach((t=>I(h,t.trim())))),r&&(k.states[h].note=r,k.states[h].note.text=i.e.sanitizeText(k.states[h].note.text,(0,i.c)())),o){i.l.info("Setting state classes",h,o);("string"==typeof o?[o]:o).forEach((t=>N(h,t.trim())))}if(a){i.l.info("Setting state styles",h,a);("string"==typeof a?[a]:a).forEach((t=>R(h,t.trim())))}if(c){i.l.info("Setting state styles",h,a);("string"==typeof c?[c]:c).forEach((t=>w(h,t.trim())))}},$=function(t){_={root:{relations:[],states:{},documents:{}}},k=_.root,T=0,S={},t||(0,i.v)()},v=function(t){return k.states[t]};function D(t=""){let e=t;return t===u&&(T++,e=`${d}${T}`),e}function A(t="",e=l){return t===u?d:e}const L=function(t,e,s){if("object"==typeof t)!function(t,e,s){let n=D(t.id.trim()),r=A(t.id.trim(),t.type),o=D(e.id.trim()),a=A(e.id.trim(),e.type);C(n,r,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles),C(o,a,e.doc,e.description,e.note,e.classes,e.styles,e.textStyles),k.relations.push({id1:n,id2:o,relationTitle:i.e.sanitizeText(s,(0,i.c)())})}(t,e,s);else{const n=D(t.trim()),r=A(t),o=function(t=""){let e=t;return t===p&&(T++,e=`end${T}`),e}(e.trim()),a=function(t="",e=l){return t===p?"end":e}(e);C(n,r),C(o,a),k.relations.push({id1:n,id2:o,title:i.e.sanitizeText(s,(0,i.c)())})}},I=function(t,e){const s=k.states[t],n=e.startsWith(":")?e.replace(":","").trim():e;s.descriptions.push(i.e.sanitizeText(n,(0,i.c)()))},O=function(t,e=""){void 0===S[t]&&(S[t]={id:t,styles:[],textStyles:[]});const s=S[t];null!=e&&e.split(",").forEach((t=>{const e=t.replace(/([^;]*);/,"$1").trim();if(t.match(y)){const t=e.replace(f,"bgFill").replace(y,f);s.textStyles.push(t)}s.styles.push(e)}))},N=function(t,e){t.split(",").forEach((function(t){let s=v(t);if(void 0===s){const e=t.trim();C(e),s=v(e)}s.classes.push(e)}))},R=function(t,e){const s=v(t);void 0!==s&&s.textStyles.push(e)},w=function(t,e){const s=v(t);void 0!==s&&s.textStyles.push(e)},B={getConfig:()=>(0,i.c)().state,addState:C,clear:$,getState:v,getStates:function(){return k.states},getRelations:function(){return k.relations},getClasses:function(){return S},getDirection:()=>m,addRelation:L,getDividerId:()=>(b++,"divider-id-"+b),setDirection:t=>{m=t},cleanupLabel:function(t){return":"===t.substring(0,1)?t.substr(2).trim():t.trim()},lineType:{LINE:0,DOTTED_LINE:1},relationType:{AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},logDocuments:function(){i.l.info("Documents = ",_)},getRootDoc:()=>g,setRootDoc:t=>{i.l.info("Setting root doc",t),g=t},getRootDocV2:()=>(x({id:"root"},{id:"root",doc:g},!0),{id:"root",doc:g}),extract:t=>{let e;e=t.doc?t.doc:t,i.l.info(e),$(!0),i.l.info("Extract",e),e.forEach((t=>{switch(t.stmt){case a:C(t.id.trim(),t.type,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles);break;case c:L(t.state1,t.state2,t.description);break;case"classDef":O(t.id.trim(),t.classes);break;case"applyClass":N(t.id.trim(),t.styleClass)}}))},trimColon:t=>t&&":"===t[0]?t.substr(1).trim():t.trim(),getAccTitle:i.g,setAccTitle:i.s,getAccDescription:i.a,setAccDescription:i.b,addStyleClass:O,setCssClass:N,addDescription:I,setDiagramTitle:i.q,getDiagramTitle:i.t},P=t=>`\ndefs #statediagram-barbEnd {\n fill: ${t.transitionColor};\n stroke: ${t.transitionColor};\n }\ng.stateGroup text {\n fill: ${t.nodeBorder};\n stroke: none;\n font-size: 10px;\n}\ng.stateGroup text {\n fill: ${t.textColor};\n stroke: none;\n font-size: 10px;\n\n}\ng.stateGroup .state-title {\n font-weight: bolder;\n fill: ${t.stateLabelColor};\n}\n\ng.stateGroup rect {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n}\n\ng.stateGroup line {\n stroke: ${t.lineColor};\n stroke-width: 1;\n}\n\n.transition {\n stroke: ${t.transitionColor};\n stroke-width: 1;\n fill: none;\n}\n\n.stateGroup .composit {\n fill: ${t.background};\n border-bottom: 1px\n}\n\n.stateGroup .alt-composit {\n fill: #e0e0e0;\n border-bottom: 1px\n}\n\n.state-note {\n stroke: ${t.noteBorderColor};\n fill: ${t.noteBkgColor};\n\n text {\n fill: ${t.noteTextColor};\n stroke: none;\n font-size: 10px;\n }\n}\n\n.stateLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ${t.mainBkg};\n opacity: 0.5;\n}\n\n.edgeLabel .label rect {\n fill: ${t.labelBackgroundColor};\n opacity: 0.5;\n}\n.edgeLabel .label text {\n fill: ${t.transitionLabelColor||t.tertiaryTextColor};\n}\n.label div .edgeLabel {\n color: ${t.transitionLabelColor||t.tertiaryTextColor};\n}\n\n.stateLabel text {\n fill: ${t.stateLabelColor};\n font-size: 10px;\n font-weight: bold;\n}\n\n.node circle.state-start {\n fill: ${t.specialStateColor};\n stroke: ${t.specialStateColor};\n}\n\n.node .fork-join {\n fill: ${t.specialStateColor};\n stroke: ${t.specialStateColor};\n}\n\n.node circle.state-end {\n fill: ${t.innerEndBackground};\n stroke: ${t.background};\n stroke-width: 1.5\n}\n.end-state-inner {\n fill: ${t.compositeBackground||t.background};\n // stroke: ${t.background};\n stroke-width: 1.5\n}\n\n.node rect {\n fill: ${t.stateBkg||t.mainBkg};\n stroke: ${t.stateBorder||t.nodeBorder};\n stroke-width: 1px;\n}\n.node polygon {\n fill: ${t.mainBkg};\n stroke: ${t.stateBorder||t.nodeBorder};;\n stroke-width: 1px;\n}\n#statediagram-barbEnd {\n fill: ${t.lineColor};\n}\n\n.statediagram-cluster rect {\n fill: ${t.compositeTitleBackground};\n stroke: ${t.stateBorder||t.nodeBorder};\n stroke-width: 1px;\n}\n\n.cluster-label, .nodeLabel {\n color: ${t.stateLabelColor};\n}\n\n.statediagram-cluster rect.outer {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state .divider {\n stroke: ${t.stateBorder||t.nodeBorder};\n}\n\n.statediagram-state .title-state {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-cluster.statediagram-cluster .inner {\n fill: ${t.compositeBackground||t.background};\n}\n.statediagram-cluster.statediagram-cluster-alt .inner {\n fill: ${t.altBackground?t.altBackground:"#efefef"};\n}\n\n.statediagram-cluster .inner {\n rx:0;\n ry:0;\n}\n\n.statediagram-state rect.basic {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state rect.divider {\n stroke-dasharray: 10,10;\n fill: ${t.altBackground?t.altBackground:"#efefef"};\n}\n\n.note-edge {\n stroke-dasharray: 5;\n}\n\n.statediagram-note rect {\n fill: ${t.noteBkgColor};\n stroke: ${t.noteBorderColor};\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n.statediagram-note rect {\n fill: ${t.noteBkgColor};\n stroke: ${t.noteBorderColor};\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n\n.statediagram-note text {\n fill: ${t.noteTextColor};\n}\n\n.statediagram-note .nodeLabel {\n color: ${t.noteTextColor};\n}\n.statediagram .edgeLabel {\n color: red; // ${t.noteTextColor};\n}\n\n#dependencyStart, #dependencyEnd {\n fill: ${t.lineColor};\n stroke: ${t.lineColor};\n stroke-width: 1;\n}\n\n.statediagramTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n}\n`}}]); \ No newline at end of file diff --git a/assets/js/130.def7e228.js b/assets/js/130.def7e228.js new file mode 100644 index 0000000000..223d1a5663 --- /dev/null +++ b/assets/js/130.def7e228.js @@ -0,0 +1,18473 @@ +"use strict"; +exports.id = 130; +exports.ids = [130]; +exports.modules = { + +/***/ 22130: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ katex) +/* harmony export */ }); +/** + * Lexing or parsing positional information for error reporting. + * This object is immutable. + */ +class SourceLocation { + // The + prefix indicates that these fields aren't writeable + // Lexer holding the input string. + // Start offset, zero-based inclusive. + // End offset, zero-based exclusive. + constructor(lexer, start, end) { + this.lexer = void 0; + this.start = void 0; + this.end = void 0; + this.lexer = lexer; + this.start = start; + this.end = end; + } + /** + * Merges two `SourceLocation`s from location providers, given they are + * provided in order of appearance. + * - Returns the first one's location if only the first is provided. + * - Returns a merged range of the first and the last if both are provided + * and their lexers match. + * - Otherwise, returns null. + */ + + + static range(first, second) { + if (!second) { + return first && first.loc; + } else if (!first || !first.loc || !second.loc || first.loc.lexer !== second.loc.lexer) { + return null; + } else { + return new SourceLocation(first.loc.lexer, first.loc.start, second.loc.end); + } + } + +} + +/** + * Interface required to break circular dependency between Token, Lexer, and + * ParseError. + */ + +/** + * The resulting token returned from `lex`. + * + * It consists of the token text plus some position information. + * The position information is essentially a range in an input string, + * but instead of referencing the bare input string, we refer to the lexer. + * That way it is possible to attach extra metadata to the input string, + * like for example a file name or similar. + * + * The position information is optional, so it is OK to construct synthetic + * tokens if appropriate. Not providing available position information may + * lead to degraded error reporting, though. + */ +class Token { + // don't expand the token + // used in \noexpand + constructor(text, // the text of this token + loc) { + this.text = void 0; + this.loc = void 0; + this.noexpand = void 0; + this.treatAsRelax = void 0; + this.text = text; + this.loc = loc; + } + /** + * Given a pair of tokens (this and endToken), compute a `Token` encompassing + * the whole input range enclosed by these two. + */ + + + range(endToken, // last token of the range, inclusive + text // the text of the newly constructed token + ) { + return new Token(text, SourceLocation.range(this, endToken)); + } + +} + +/** + * This is the ParseError class, which is the main error thrown by KaTeX + * functions when something has gone wrong. This is used to distinguish internal + * errors from errors in the expression that the user provided. + * + * If possible, a caller should provide a Token or ParseNode with information + * about where in the source string the problem occurred. + */ +class ParseError { + // Error start position based on passed-in Token or ParseNode. + // Length of affected text based on passed-in Token or ParseNode. + // The underlying error message without any context added. + constructor(message, // The error message + token // An object providing position information + ) { + this.name = void 0; + this.position = void 0; + this.length = void 0; + this.rawMessage = void 0; + var error = "KaTeX parse error: " + message; + var start; + var end; + var loc = token && token.loc; + + if (loc && loc.start <= loc.end) { + // If we have the input and a position, make the error a bit fancier + // Get the input + var input = loc.lexer.input; // Prepend some information + + start = loc.start; + end = loc.end; + + if (start === input.length) { + error += " at end of input: "; + } else { + error += " at position " + (start + 1) + ": "; + } // Underline token in question using combining underscores + + + var underlined = input.slice(start, end).replace(/[^]/g, "$&\u0332"); // Extract some context from the input and add it to the error + + var left; + + if (start > 15) { + left = "…" + input.slice(start - 15, start); + } else { + left = input.slice(0, start); + } + + var right; + + if (end + 15 < input.length) { + right = input.slice(end, end + 15) + "…"; + } else { + right = input.slice(end); + } + + error += left + underlined + right; + } // Some hackery to make ParseError a prototype of Error + // See http://stackoverflow.com/a/8460753 + // $FlowFixMe + + + var self = new Error(error); + self.name = "ParseError"; // $FlowFixMe + + self.__proto__ = ParseError.prototype; + self.position = start; + + if (start != null && end != null) { + self.length = end - start; + } + + self.rawMessage = message; + return self; + } + +} // $FlowFixMe More hackery + + +ParseError.prototype.__proto__ = Error.prototype; + +/** + * This file contains a list of utility functions which are useful in other + * files. + */ + +/** + * Return whether an element is contained in a list + */ +var contains = function contains(list, elem) { + return list.indexOf(elem) !== -1; +}; +/** + * Provide a default value if a setting is undefined + * NOTE: Couldn't use `T` as the output type due to facebook/flow#5022. + */ + + +var deflt = function deflt(setting, defaultIfUndefined) { + return setting === undefined ? defaultIfUndefined : setting; +}; // hyphenate and escape adapted from Facebook's React under Apache 2 license + + +var uppercase = /([A-Z])/g; + +var hyphenate = function hyphenate(str) { + return str.replace(uppercase, "-$1").toLowerCase(); +}; + +var ESCAPE_LOOKUP = { + "&": "&", + ">": ">", + "<": "<", + "\"": """, + "'": "'" +}; +var ESCAPE_REGEX = /[&><"']/g; +/** + * Escapes text to prevent scripting attacks. + */ + +function escape(text) { + return String(text).replace(ESCAPE_REGEX, match => ESCAPE_LOOKUP[match]); +} +/** + * Sometimes we want to pull out the innermost element of a group. In most + * cases, this will just be the group itself, but when ordgroups and colors have + * a single element, we want to pull that out. + */ + + +var getBaseElem = function getBaseElem(group) { + if (group.type === "ordgroup") { + if (group.body.length === 1) { + return getBaseElem(group.body[0]); + } else { + return group; + } + } else if (group.type === "color") { + if (group.body.length === 1) { + return getBaseElem(group.body[0]); + } else { + return group; + } + } else if (group.type === "font") { + return getBaseElem(group.body); + } else { + return group; + } +}; +/** + * TeXbook algorithms often reference "character boxes", which are simply groups + * with a single character in them. To decide if something is a character box, + * we find its innermost group, and see if it is a single character. + */ + + +var isCharacterBox = function isCharacterBox(group) { + var baseElem = getBaseElem(group); // These are all they types of groups which hold single characters + + return baseElem.type === "mathord" || baseElem.type === "textord" || baseElem.type === "atom"; +}; + +var assert = function assert(value) { + if (!value) { + throw new Error('Expected non-null, but got ' + String(value)); + } + + return value; +}; +/** + * Return the protocol of a URL, or "_relative" if the URL does not specify a + * protocol (and thus is relative), or `null` if URL has invalid protocol + * (so should be outright rejected). + */ + +var protocolFromUrl = function protocolFromUrl(url) { + // Check for possible leading protocol. + // https://url.spec.whatwg.org/#url-parsing strips leading whitespace + // (U+20) or C0 control (U+00-U+1F) characters. + // eslint-disable-next-line no-control-regex + var protocol = /^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(url); + + if (!protocol) { + return "_relative"; + } // Reject weird colons + + + if (protocol[2] !== ":") { + return null; + } // Reject invalid characters in scheme according to + // https://datatracker.ietf.org/doc/html/rfc3986#section-3.1 + + + if (!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(protocol[1])) { + return null; + } // Lowercase the protocol + + + return protocol[1].toLowerCase(); +}; +var utils = { + contains, + deflt, + escape, + hyphenate, + getBaseElem, + isCharacterBox, + protocolFromUrl +}; + +/* eslint no-console:0 */ +// TODO: automatically generate documentation +// TODO: check all properties on Settings exist +// TODO: check the type of a property on Settings matches +var SETTINGS_SCHEMA = { + displayMode: { + type: "boolean", + description: "Render math in display mode, which puts the math in " + "display style (so \\int and \\sum are large, for example), and " + "centers the math on the page on its own line.", + cli: "-d, --display-mode" + }, + output: { + type: { + enum: ["htmlAndMathml", "html", "mathml"] + }, + description: "Determines the markup language of the output.", + cli: "-F, --format " + }, + leqno: { + type: "boolean", + description: "Render display math in leqno style (left-justified tags)." + }, + fleqn: { + type: "boolean", + description: "Render display math flush left." + }, + throwOnError: { + type: "boolean", + default: true, + cli: "-t, --no-throw-on-error", + cliDescription: "Render errors (in the color given by --error-color) ins" + "tead of throwing a ParseError exception when encountering an error." + }, + errorColor: { + type: "string", + default: "#cc0000", + cli: "-c, --error-color ", + cliDescription: "A color string given in the format 'rgb' or 'rrggbb' " + "(no #). This option determines the color of errors rendered by the " + "-t option.", + cliProcessor: color => "#" + color + }, + macros: { + type: "object", + cli: "-m, --macro ", + cliDescription: "Define custom macro of the form '\\foo:expansion' (use " + "multiple -m arguments for multiple macros).", + cliDefault: [], + cliProcessor: (def, defs) => { + defs.push(def); + return defs; + } + }, + minRuleThickness: { + type: "number", + description: "Specifies a minimum thickness, in ems, for fraction lines," + " `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, " + "`\\hdashline`, `\\underline`, `\\overline`, and the borders of " + "`\\fbox`, `\\boxed`, and `\\fcolorbox`.", + processor: t => Math.max(0, t), + cli: "--min-rule-thickness ", + cliProcessor: parseFloat + }, + colorIsTextColor: { + type: "boolean", + description: "Makes \\color behave like LaTeX's 2-argument \\textcolor, " + "instead of LaTeX's one-argument \\color mode change.", + cli: "-b, --color-is-text-color" + }, + strict: { + type: [{ + enum: ["warn", "ignore", "error"] + }, "boolean", "function"], + description: "Turn on strict / LaTeX faithfulness mode, which throws an " + "error if the input uses features that are not supported by LaTeX.", + cli: "-S, --strict", + cliDefault: false + }, + trust: { + type: ["boolean", "function"], + description: "Trust the input, enabling all HTML features such as \\url.", + cli: "-T, --trust" + }, + maxSize: { + type: "number", + default: Infinity, + description: "If non-zero, all user-specified sizes, e.g. in " + "\\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, " + "elements and spaces can be arbitrarily large", + processor: s => Math.max(0, s), + cli: "-s, --max-size ", + cliProcessor: parseInt + }, + maxExpand: { + type: "number", + default: 1000, + description: "Limit the number of macro expansions to the specified " + "number, to prevent e.g. infinite macro loops. If set to Infinity, " + "the macro expander will try to fully expand as in LaTeX.", + processor: n => Math.max(0, n), + cli: "-e, --max-expand ", + cliProcessor: n => n === "Infinity" ? Infinity : parseInt(n) + }, + globalGroup: { + type: "boolean", + cli: false + } +}; + +function getDefaultValue(schema) { + if (schema.default) { + return schema.default; + } + + var type = schema.type; + var defaultType = Array.isArray(type) ? type[0] : type; + + if (typeof defaultType !== 'string') { + return defaultType.enum[0]; + } + + switch (defaultType) { + case 'boolean': + return false; + + case 'string': + return ''; + + case 'number': + return 0; + + case 'object': + return {}; + } +} +/** + * The main Settings object + * + * The current options stored are: + * - displayMode: Whether the expression should be typeset as inline math + * (false, the default), meaning that the math starts in + * \textstyle and is placed in an inline-block); or as display + * math (true), meaning that the math starts in \displaystyle + * and is placed in a block with vertical margin. + */ + + +class Settings { + constructor(options) { + this.displayMode = void 0; + this.output = void 0; + this.leqno = void 0; + this.fleqn = void 0; + this.throwOnError = void 0; + this.errorColor = void 0; + this.macros = void 0; + this.minRuleThickness = void 0; + this.colorIsTextColor = void 0; + this.strict = void 0; + this.trust = void 0; + this.maxSize = void 0; + this.maxExpand = void 0; + this.globalGroup = void 0; + // allow null options + options = options || {}; + + for (var prop in SETTINGS_SCHEMA) { + if (SETTINGS_SCHEMA.hasOwnProperty(prop)) { + // $FlowFixMe + var schema = SETTINGS_SCHEMA[prop]; // TODO: validate options + // $FlowFixMe + + this[prop] = options[prop] !== undefined ? schema.processor ? schema.processor(options[prop]) : options[prop] : getDefaultValue(schema); + } + } + } + /** + * Report nonstrict (non-LaTeX-compatible) input. + * Can safely not be called if `this.strict` is false in JavaScript. + */ + + + reportNonstrict(errorCode, errorMsg, token) { + var strict = this.strict; + + if (typeof strict === "function") { + // Allow return value of strict function to be boolean or string + // (or null/undefined, meaning no further processing). + strict = strict(errorCode, errorMsg, token); + } + + if (!strict || strict === "ignore") { + return; + } else if (strict === true || strict === "error") { + throw new ParseError("LaTeX-incompatible input and strict mode is set to 'error': " + (errorMsg + " [" + errorCode + "]"), token); + } else if (strict === "warn") { + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (errorMsg + " [" + errorCode + "]")); + } else { + // won't happen in type-safe code + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + strict + "': " + errorMsg + " [" + errorCode + "]")); + } + } + /** + * Check whether to apply strict (LaTeX-adhering) behavior for unusual + * input (like `\\`). Unlike `nonstrict`, will not throw an error; + * instead, "error" translates to a return value of `true`, while "ignore" + * translates to a return value of `false`. May still print a warning: + * "warn" prints a warning and returns `false`. + * This is for the second category of `errorCode`s listed in the README. + */ + + + useStrictBehavior(errorCode, errorMsg, token) { + var strict = this.strict; + + if (typeof strict === "function") { + // Allow return value of strict function to be boolean or string + // (or null/undefined, meaning no further processing). + // But catch any exceptions thrown by function, treating them + // like "error". + try { + strict = strict(errorCode, errorMsg, token); + } catch (error) { + strict = "error"; + } + } + + if (!strict || strict === "ignore") { + return false; + } else if (strict === true || strict === "error") { + return true; + } else if (strict === "warn") { + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (errorMsg + " [" + errorCode + "]")); + return false; + } else { + // won't happen in type-safe code + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + strict + "': " + errorMsg + " [" + errorCode + "]")); + return false; + } + } + /** + * Check whether to test potentially dangerous input, and return + * `true` (trusted) or `false` (untrusted). The sole argument `context` + * should be an object with `command` field specifying the relevant LaTeX + * command (as a string starting with `\`), and any other arguments, etc. + * If `context` has a `url` field, a `protocol` field will automatically + * get added by this function (changing the specified object). + */ + + + isTrusted(context) { + if (context.url && !context.protocol) { + var protocol = utils.protocolFromUrl(context.url); + + if (protocol == null) { + return false; + } + + context.protocol = protocol; + } + + var trust = typeof this.trust === "function" ? this.trust(context) : this.trust; + return Boolean(trust); + } + +} + +/** + * This file contains information and classes for the various kinds of styles + * used in TeX. It provides a generic `Style` class, which holds information + * about a specific style. It then provides instances of all the different kinds + * of styles possible, and provides functions to move between them and get + * information about them. + */ + +/** + * The main style class. Contains a unique id for the style, a size (which is + * the same for cramped and uncramped version of a style), and a cramped flag. + */ +class Style { + constructor(id, size, cramped) { + this.id = void 0; + this.size = void 0; + this.cramped = void 0; + this.id = id; + this.size = size; + this.cramped = cramped; + } + /** + * Get the style of a superscript given a base in the current style. + */ + + + sup() { + return styles[sup[this.id]]; + } + /** + * Get the style of a subscript given a base in the current style. + */ + + + sub() { + return styles[sub[this.id]]; + } + /** + * Get the style of a fraction numerator given the fraction in the current + * style. + */ + + + fracNum() { + return styles[fracNum[this.id]]; + } + /** + * Get the style of a fraction denominator given the fraction in the current + * style. + */ + + + fracDen() { + return styles[fracDen[this.id]]; + } + /** + * Get the cramped version of a style (in particular, cramping a cramped style + * doesn't change the style). + */ + + + cramp() { + return styles[cramp[this.id]]; + } + /** + * Get a text or display version of this style. + */ + + + text() { + return styles[text$1[this.id]]; + } + /** + * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle) + */ + + + isTight() { + return this.size >= 2; + } + +} // Export an interface for type checking, but don't expose the implementation. +// This way, no more styles can be generated. + + +// IDs of the different styles +var D = 0; +var Dc = 1; +var T = 2; +var Tc = 3; +var S = 4; +var Sc = 5; +var SS = 6; +var SSc = 7; // Instances of the different styles + +var styles = [new Style(D, 0, false), new Style(Dc, 0, true), new Style(T, 1, false), new Style(Tc, 1, true), new Style(S, 2, false), new Style(Sc, 2, true), new Style(SS, 3, false), new Style(SSc, 3, true)]; // Lookup tables for switching from one style to another + +var sup = [S, Sc, S, Sc, SS, SSc, SS, SSc]; +var sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc]; +var fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc]; +var fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc]; +var cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc]; +var text$1 = [D, Dc, T, Tc, T, Tc, T, Tc]; // We only export some of the styles. + +var Style$1 = { + DISPLAY: styles[D], + TEXT: styles[T], + SCRIPT: styles[S], + SCRIPTSCRIPT: styles[SS] +}; + +/* + * This file defines the Unicode scripts and script families that we + * support. To add new scripts or families, just add a new entry to the + * scriptData array below. Adding scripts to the scriptData array allows + * characters from that script to appear in \text{} environments. + */ + +/** + * Each script or script family has a name and an array of blocks. + * Each block is an array of two numbers which specify the start and + * end points (inclusive) of a block of Unicode codepoints. + */ + +/** + * Unicode block data for the families of scripts we support in \text{}. + * Scripts only need to appear here if they do not have font metrics. + */ +var scriptData = [{ + // Latin characters beyond the Latin-1 characters we have metrics for. + // Needed for Czech, Hungarian and Turkish text, for example. + name: 'latin', + blocks: [[0x0100, 0x024f], // Latin Extended-A and Latin Extended-B + [0x0300, 0x036f] // Combining Diacritical marks + ] +}, { + // The Cyrillic script used by Russian and related languages. + // A Cyrillic subset used to be supported as explicitly defined + // symbols in symbols.js + name: 'cyrillic', + blocks: [[0x0400, 0x04ff]] +}, { + // Armenian + name: 'armenian', + blocks: [[0x0530, 0x058F]] +}, { + // The Brahmic scripts of South and Southeast Asia + // Devanagari (0900–097F) + // Bengali (0980–09FF) + // Gurmukhi (0A00–0A7F) + // Gujarati (0A80–0AFF) + // Oriya (0B00–0B7F) + // Tamil (0B80–0BFF) + // Telugu (0C00–0C7F) + // Kannada (0C80–0CFF) + // Malayalam (0D00–0D7F) + // Sinhala (0D80–0DFF) + // Thai (0E00–0E7F) + // Lao (0E80–0EFF) + // Tibetan (0F00–0FFF) + // Myanmar (1000–109F) + name: 'brahmic', + blocks: [[0x0900, 0x109F]] +}, { + name: 'georgian', + blocks: [[0x10A0, 0x10ff]] +}, { + // Chinese and Japanese. + // The "k" in cjk is for Korean, but we've separated Korean out + name: "cjk", + blocks: [[0x3000, 0x30FF], // CJK symbols and punctuation, Hiragana, Katakana + [0x4E00, 0x9FAF], // CJK ideograms + [0xFF00, 0xFF60] // Fullwidth punctuation + // TODO: add halfwidth Katakana and Romanji glyphs + ] +}, { + // Korean + name: 'hangul', + blocks: [[0xAC00, 0xD7AF]] +}]; +/** + * Given a codepoint, return the name of the script or script family + * it is from, or null if it is not part of a known block + */ + +function scriptFromCodepoint(codepoint) { + for (var i = 0; i < scriptData.length; i++) { + var script = scriptData[i]; + + for (var _i = 0; _i < script.blocks.length; _i++) { + var block = script.blocks[_i]; + + if (codepoint >= block[0] && codepoint <= block[1]) { + return script.name; + } + } + } + + return null; +} +/** + * A flattened version of all the supported blocks in a single array. + * This is an optimization to make supportedCodepoint() fast. + */ + +var allBlocks = []; +scriptData.forEach(s => s.blocks.forEach(b => allBlocks.push(...b))); +/** + * Given a codepoint, return true if it falls within one of the + * scripts or script families defined above and false otherwise. + * + * Micro benchmarks shows that this is faster than + * /[\u3000-\u30FF\u4E00-\u9FAF\uFF00-\uFF60\uAC00-\uD7AF\u0900-\u109F]/.test() + * in Firefox, Chrome and Node. + */ + +function supportedCodepoint(codepoint) { + for (var i = 0; i < allBlocks.length; i += 2) { + if (codepoint >= allBlocks[i] && codepoint <= allBlocks[i + 1]) { + return true; + } + } + + return false; +} + +/** + * This file provides support to domTree.js and delimiter.js. + * It's a storehouse of path geometry for SVG images. + */ +// In all paths below, the viewBox-to-em scale is 1000:1. +var hLinePad = 80; // padding above a sqrt vinculum. Prevents image cropping. +// The vinculum of a \sqrt can be made thicker by a KaTeX rendering option. +// Think of variable extraVinculum as two detours in the SVG path. +// The detour begins at the lower left of the area labeled extraVinculum below. +// The detour proceeds one extraVinculum distance up and slightly to the right, +// displacing the radiused corner between surd and vinculum. The radius is +// traversed as usual, then the detour resumes. It goes right, to the end of +// the very long vinculum, then down one extraVinculum distance, +// after which it resumes regular path geometry for the radical. + +/* vinculum + / + /▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒←extraVinculum + / █████████████████████←0.04em (40 unit) std vinculum thickness + / / + / / + / /\ + / / surd +*/ + +var sqrtMain = function sqrtMain(extraVinculum, hLinePad) { + // sqrtMain path geometry is from glyph U221A in the font KaTeX Main + return "M95," + (622 + extraVinculum + hLinePad) + "\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl" + extraVinculum / 2.075 + " -" + extraVinculum + "\nc5.3,-9.3,12,-14,20,-14\nH400000v" + (40 + extraVinculum) + "H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM" + (834 + extraVinculum) + " " + hLinePad + "h400000v" + (40 + extraVinculum) + "h-400000z"; +}; + +var sqrtSize1 = function sqrtSize1(extraVinculum, hLinePad) { + // size1 is from glyph U221A in the font KaTeX_Size1-Regular + return "M263," + (601 + extraVinculum + hLinePad) + "c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl" + extraVinculum / 2.084 + " -" + extraVinculum + "\nc4.7,-7.3,11,-11,19,-11\nH40000v" + (40 + extraVinculum) + "H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM" + (1001 + extraVinculum) + " " + hLinePad + "h400000v" + (40 + extraVinculum) + "h-400000z"; +}; + +var sqrtSize2 = function sqrtSize2(extraVinculum, hLinePad) { + // size2 is from glyph U221A in the font KaTeX_Size2-Regular + return "M983 " + (10 + extraVinculum + hLinePad) + "\nl" + extraVinculum / 3.13 + " -" + extraVinculum + "\nc4,-6.7,10,-10,18,-10 H400000v" + (40 + extraVinculum) + "\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM" + (1001 + extraVinculum) + " " + hLinePad + "h400000v" + (40 + extraVinculum) + "h-400000z"; +}; + +var sqrtSize3 = function sqrtSize3(extraVinculum, hLinePad) { + // size3 is from glyph U221A in the font KaTeX_Size3-Regular + return "M424," + (2398 + extraVinculum + hLinePad) + "\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl" + extraVinculum / 4.223 + " -" + extraVinculum + "c4,-6.7,10,-10,18,-10 H400000\nv" + (40 + extraVinculum) + "H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M" + (1001 + extraVinculum) + " " + hLinePad + "\nh400000v" + (40 + extraVinculum) + "h-400000z"; +}; + +var sqrtSize4 = function sqrtSize4(extraVinculum, hLinePad) { + // size4 is from glyph U221A in the font KaTeX_Size4-Regular + return "M473," + (2713 + extraVinculum + hLinePad) + "\nc339.3,-1799.3,509.3,-2700,510,-2702 l" + extraVinculum / 5.298 + " -" + extraVinculum + "\nc3.3,-7.3,9.3,-11,18,-11 H400000v" + (40 + extraVinculum) + "H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM" + (1001 + extraVinculum) + " " + hLinePad + "h400000v" + (40 + extraVinculum) + "H1017.7z"; +}; + +var phasePath = function phasePath(y) { + var x = y / 2; // x coordinate at top of angle + + return "M400000 " + y + " H0 L" + x + " 0 l65 45 L145 " + (y - 80) + " H400000z"; +}; + +var sqrtTall = function sqrtTall(extraVinculum, hLinePad, viewBoxHeight) { + // sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular + // One path edge has a variable length. It runs vertically from the vinculum + // to a point near (14 units) the bottom of the surd. The vinculum + // is normally 40 units thick. So the length of the line in question is: + var vertSegment = viewBoxHeight - 54 - hLinePad - extraVinculum; + return "M702 " + (extraVinculum + hLinePad) + "H400000" + (40 + extraVinculum) + "\nH742v" + vertSegment + "l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 " + hLinePad + "H400000v" + (40 + extraVinculum) + "H742z"; +}; + +var sqrtPath = function sqrtPath(size, extraVinculum, viewBoxHeight) { + extraVinculum = 1000 * extraVinculum; // Convert from document ems to viewBox. + + var path = ""; + + switch (size) { + case "sqrtMain": + path = sqrtMain(extraVinculum, hLinePad); + break; + + case "sqrtSize1": + path = sqrtSize1(extraVinculum, hLinePad); + break; + + case "sqrtSize2": + path = sqrtSize2(extraVinculum, hLinePad); + break; + + case "sqrtSize3": + path = sqrtSize3(extraVinculum, hLinePad); + break; + + case "sqrtSize4": + path = sqrtSize4(extraVinculum, hLinePad); + break; + + case "sqrtTall": + path = sqrtTall(extraVinculum, hLinePad, viewBoxHeight); + } + + return path; +}; +var innerPath = function innerPath(name, height) { + // The inner part of stretchy tall delimiters + switch (name) { + case "\u239c": + return "M291 0 H417 V" + height + " H291z M291 0 H417 V" + height + " H291z"; + + case "\u2223": + return "M145 0 H188 V" + height + " H145z M145 0 H188 V" + height + " H145z"; + + case "\u2225": + return "M145 0 H188 V" + height + " H145z M145 0 H188 V" + height + " H145z" + ("M367 0 H410 V" + height + " H367z M367 0 H410 V" + height + " H367z"); + + case "\u239f": + return "M457 0 H583 V" + height + " H457z M457 0 H583 V" + height + " H457z"; + + case "\u23a2": + return "M319 0 H403 V" + height + " H319z M319 0 H403 V" + height + " H319z"; + + case "\u23a5": + return "M263 0 H347 V" + height + " H263z M263 0 H347 V" + height + " H263z"; + + case "\u23aa": + return "M384 0 H504 V" + height + " H384z M384 0 H504 V" + height + " H384z"; + + case "\u23d0": + return "M312 0 H355 V" + height + " H312z M312 0 H355 V" + height + " H312z"; + + case "\u2016": + return "M257 0 H300 V" + height + " H257z M257 0 H300 V" + height + " H257z" + ("M478 0 H521 V" + height + " H478z M478 0 H521 V" + height + " H478z"); + + default: + return ""; + } +}; +var path = { + // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main + doubleleftarrow: "M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z", + // doublerightarrow is from glyph U+21D2 in font KaTeX Main + doublerightarrow: "M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z", + // leftarrow is from glyph U+2190 in font KaTeX Main + leftarrow: "M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z", + // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular + leftbrace: "M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z", + leftbraceunder: "M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z", + // overgroup is from the MnSymbol package (public domain) + leftgroup: "M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z", + leftgroupunder: "M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z", + // Harpoons are from glyph U+21BD in font KaTeX Main + leftharpoon: "M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z", + leftharpoonplus: "M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z", + leftharpoondown: "M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z", + leftharpoondownplus: "M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z", + // hook is from glyph U+21A9 in font KaTeX Main + lefthook: "M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z", + leftlinesegment: "M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z", + leftmapsto: "M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z", + // tofrom is from glyph U+21C4 in font KaTeX AMS Regular + leftToFrom: "M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z", + longequal: "M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z", + midbrace: "M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z", + midbraceunder: "M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z", + oiintSize1: "M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z", + oiintSize2: "M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z", + oiiintSize1: "M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z", + oiiintSize2: "M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z", + rightarrow: "M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z", + rightbrace: "M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z", + rightbraceunder: "M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z", + rightgroup: "M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z", + rightgroupunder: "M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z", + rightharpoon: "M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z", + rightharpoonplus: "M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z", + rightharpoondown: "M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z", + rightharpoondownplus: "M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z", + righthook: "M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z", + rightlinesegment: "M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z", + rightToFrom: "M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z", + // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular + twoheadleftarrow: "M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z", + twoheadrightarrow: "M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z", + // tilde1 is a modified version of a glyph from the MnSymbol package + tilde1: "M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z", + // ditto tilde2, tilde3, & tilde4 + tilde2: "M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z", + tilde3: "M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z", + tilde4: "M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z", + // vec is from glyph U+20D7 in font KaTeX Main + vec: "M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z", + // widehat1 is a modified version of a glyph from the MnSymbol package + widehat1: "M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z", + // ditto widehat2, widehat3, & widehat4 + widehat2: "M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z", + widehat3: "M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z", + widehat4: "M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z", + // widecheck paths are all inverted versions of widehat + widecheck1: "M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z", + widecheck2: "M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z", + widecheck3: "M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z", + widecheck4: "M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z", + // The next ten paths support reaction arrows from the mhchem package. + // Arrows for \ce{<-->} are offset from xAxis by 0.22ex, per mhchem in LaTeX + // baraboveleftarrow is mostly from glyph U+2190 in font KaTeX Main + baraboveleftarrow: "M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z", + // rightarrowabovebar is mostly from glyph U+2192, KaTeX Main + rightarrowabovebar: "M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z", + // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end. + // Ref from mhchem.sty: \rlap{\raisebox{-.22ex}{$\kern0.5em + baraboveshortleftharpoon: "M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z", + rightharpoonaboveshortbar: "M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z", + shortbaraboveleftharpoon: "M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z", + shortrightharpoonabovebar: "M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z" +}; +var tallDelim = function tallDelim(label, midHeight) { + switch (label) { + case "lbrack": + return "M403 1759 V84 H666 V0 H319 V1759 v" + midHeight + " v1759 h347 v-84\nH403z M403 1759 V0 H319 V1759 v" + midHeight + " v1759 h84z"; + + case "rbrack": + return "M347 1759 V0 H0 V84 H263 V1759 v" + midHeight + " v1759 H0 v84 H347z\nM347 1759 V0 H263 V1759 v" + midHeight + " v1759 h84z"; + + case "vert": + return "M145 15 v585 v" + midHeight + " v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v" + -midHeight + " v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v" + midHeight + " v585 h43z"; + + case "doublevert": + return "M145 15 v585 v" + midHeight + " v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v" + -midHeight + " v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v" + midHeight + " v585 h43z\nM367 15 v585 v" + midHeight + " v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v" + -midHeight + " v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M410 15 H367 v585 v" + midHeight + " v585 h43z"; + + case "lfloor": + return "M319 602 V0 H403 V602 v" + midHeight + " v1715 h263 v84 H319z\nMM319 602 V0 H403 V602 v" + midHeight + " v1715 H319z"; + + case "rfloor": + return "M319 602 V0 H403 V602 v" + midHeight + " v1799 H0 v-84 H319z\nMM319 602 V0 H403 V602 v" + midHeight + " v1715 H319z"; + + case "lceil": + return "M403 1759 V84 H666 V0 H319 V1759 v" + midHeight + " v602 h84z\nM403 1759 V0 H319 V1759 v" + midHeight + " v602 h84z"; + + case "rceil": + return "M347 1759 V0 H0 V84 H263 V1759 v" + midHeight + " v602 h84z\nM347 1759 V0 h-84 V1759 v" + midHeight + " v602 h84z"; + + case "lparen": + return "M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1\nc-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,\n-36,557 l0," + (midHeight + 84) + "c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,\n949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9\nc0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,\n-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189\nl0,-" + (midHeight + 92) + "c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,\n-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z"; + + case "rparen": + return "M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,\n63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5\nc11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0," + (midHeight + 9) + "\nc-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664\nc-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11\nc0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17\nc242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558\nl0,-" + (midHeight + 144) + "c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,\n-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z"; + + default: + // We should not ever get here. + throw new Error("Unknown stretchy delimiter."); + } +}; + +/** + * This node represents a document fragment, which contains elements, but when + * placed into the DOM doesn't have any representation itself. It only contains + * children and doesn't have any DOM node properties. + */ +class DocumentFragment { + // HtmlDomNode + // Never used; needed for satisfying interface. + constructor(children) { + this.children = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.maxFontSize = void 0; + this.style = void 0; + this.children = children; + this.classes = []; + this.height = 0; + this.depth = 0; + this.maxFontSize = 0; + this.style = {}; + } + + hasClass(className) { + return utils.contains(this.classes, className); + } + /** Convert the fragment into a node. */ + + + toNode() { + var frag = document.createDocumentFragment(); + + for (var i = 0; i < this.children.length; i++) { + frag.appendChild(this.children[i].toNode()); + } + + return frag; + } + /** Convert the fragment into HTML markup. */ + + + toMarkup() { + var markup = ""; // Simply concatenate the markup for the children together. + + for (var i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + return markup; + } + /** + * Converts the math node into a string, similar to innerText. Applies to + * MathDomNode's only. + */ + + + toText() { + // To avoid this, we would subclass documentFragment separately for + // MathML, but polyfills for subclassing is expensive per PR 1469. + // $FlowFixMe: Only works for ChildType = MathDomNode. + var toText = child => child.toText(); + + return this.children.map(toText).join(""); + } + +} + +// This file is GENERATED by buildMetrics.sh. DO NOT MODIFY. +var fontMetricsData = { + "AMS-Regular": { + "32": [0, 0, 0, 0, 0.25], + "65": [0, 0.68889, 0, 0, 0.72222], + "66": [0, 0.68889, 0, 0, 0.66667], + "67": [0, 0.68889, 0, 0, 0.72222], + "68": [0, 0.68889, 0, 0, 0.72222], + "69": [0, 0.68889, 0, 0, 0.66667], + "70": [0, 0.68889, 0, 0, 0.61111], + "71": [0, 0.68889, 0, 0, 0.77778], + "72": [0, 0.68889, 0, 0, 0.77778], + "73": [0, 0.68889, 0, 0, 0.38889], + "74": [0.16667, 0.68889, 0, 0, 0.5], + "75": [0, 0.68889, 0, 0, 0.77778], + "76": [0, 0.68889, 0, 0, 0.66667], + "77": [0, 0.68889, 0, 0, 0.94445], + "78": [0, 0.68889, 0, 0, 0.72222], + "79": [0.16667, 0.68889, 0, 0, 0.77778], + "80": [0, 0.68889, 0, 0, 0.61111], + "81": [0.16667, 0.68889, 0, 0, 0.77778], + "82": [0, 0.68889, 0, 0, 0.72222], + "83": [0, 0.68889, 0, 0, 0.55556], + "84": [0, 0.68889, 0, 0, 0.66667], + "85": [0, 0.68889, 0, 0, 0.72222], + "86": [0, 0.68889, 0, 0, 0.72222], + "87": [0, 0.68889, 0, 0, 1.0], + "88": [0, 0.68889, 0, 0, 0.72222], + "89": [0, 0.68889, 0, 0, 0.72222], + "90": [0, 0.68889, 0, 0, 0.66667], + "107": [0, 0.68889, 0, 0, 0.55556], + "160": [0, 0, 0, 0, 0.25], + "165": [0, 0.675, 0.025, 0, 0.75], + "174": [0.15559, 0.69224, 0, 0, 0.94666], + "240": [0, 0.68889, 0, 0, 0.55556], + "295": [0, 0.68889, 0, 0, 0.54028], + "710": [0, 0.825, 0, 0, 2.33334], + "732": [0, 0.9, 0, 0, 2.33334], + "770": [0, 0.825, 0, 0, 2.33334], + "771": [0, 0.9, 0, 0, 2.33334], + "989": [0.08167, 0.58167, 0, 0, 0.77778], + "1008": [0, 0.43056, 0.04028, 0, 0.66667], + "8245": [0, 0.54986, 0, 0, 0.275], + "8463": [0, 0.68889, 0, 0, 0.54028], + "8487": [0, 0.68889, 0, 0, 0.72222], + "8498": [0, 0.68889, 0, 0, 0.55556], + "8502": [0, 0.68889, 0, 0, 0.66667], + "8503": [0, 0.68889, 0, 0, 0.44445], + "8504": [0, 0.68889, 0, 0, 0.66667], + "8513": [0, 0.68889, 0, 0, 0.63889], + "8592": [-0.03598, 0.46402, 0, 0, 0.5], + "8594": [-0.03598, 0.46402, 0, 0, 0.5], + "8602": [-0.13313, 0.36687, 0, 0, 1.0], + "8603": [-0.13313, 0.36687, 0, 0, 1.0], + "8606": [0.01354, 0.52239, 0, 0, 1.0], + "8608": [0.01354, 0.52239, 0, 0, 1.0], + "8610": [0.01354, 0.52239, 0, 0, 1.11111], + "8611": [0.01354, 0.52239, 0, 0, 1.11111], + "8619": [0, 0.54986, 0, 0, 1.0], + "8620": [0, 0.54986, 0, 0, 1.0], + "8621": [-0.13313, 0.37788, 0, 0, 1.38889], + "8622": [-0.13313, 0.36687, 0, 0, 1.0], + "8624": [0, 0.69224, 0, 0, 0.5], + "8625": [0, 0.69224, 0, 0, 0.5], + "8630": [0, 0.43056, 0, 0, 1.0], + "8631": [0, 0.43056, 0, 0, 1.0], + "8634": [0.08198, 0.58198, 0, 0, 0.77778], + "8635": [0.08198, 0.58198, 0, 0, 0.77778], + "8638": [0.19444, 0.69224, 0, 0, 0.41667], + "8639": [0.19444, 0.69224, 0, 0, 0.41667], + "8642": [0.19444, 0.69224, 0, 0, 0.41667], + "8643": [0.19444, 0.69224, 0, 0, 0.41667], + "8644": [0.1808, 0.675, 0, 0, 1.0], + "8646": [0.1808, 0.675, 0, 0, 1.0], + "8647": [0.1808, 0.675, 0, 0, 1.0], + "8648": [0.19444, 0.69224, 0, 0, 0.83334], + "8649": [0.1808, 0.675, 0, 0, 1.0], + "8650": [0.19444, 0.69224, 0, 0, 0.83334], + "8651": [0.01354, 0.52239, 0, 0, 1.0], + "8652": [0.01354, 0.52239, 0, 0, 1.0], + "8653": [-0.13313, 0.36687, 0, 0, 1.0], + "8654": [-0.13313, 0.36687, 0, 0, 1.0], + "8655": [-0.13313, 0.36687, 0, 0, 1.0], + "8666": [0.13667, 0.63667, 0, 0, 1.0], + "8667": [0.13667, 0.63667, 0, 0, 1.0], + "8669": [-0.13313, 0.37788, 0, 0, 1.0], + "8672": [-0.064, 0.437, 0, 0, 1.334], + "8674": [-0.064, 0.437, 0, 0, 1.334], + "8705": [0, 0.825, 0, 0, 0.5], + "8708": [0, 0.68889, 0, 0, 0.55556], + "8709": [0.08167, 0.58167, 0, 0, 0.77778], + "8717": [0, 0.43056, 0, 0, 0.42917], + "8722": [-0.03598, 0.46402, 0, 0, 0.5], + "8724": [0.08198, 0.69224, 0, 0, 0.77778], + "8726": [0.08167, 0.58167, 0, 0, 0.77778], + "8733": [0, 0.69224, 0, 0, 0.77778], + "8736": [0, 0.69224, 0, 0, 0.72222], + "8737": [0, 0.69224, 0, 0, 0.72222], + "8738": [0.03517, 0.52239, 0, 0, 0.72222], + "8739": [0.08167, 0.58167, 0, 0, 0.22222], + "8740": [0.25142, 0.74111, 0, 0, 0.27778], + "8741": [0.08167, 0.58167, 0, 0, 0.38889], + "8742": [0.25142, 0.74111, 0, 0, 0.5], + "8756": [0, 0.69224, 0, 0, 0.66667], + "8757": [0, 0.69224, 0, 0, 0.66667], + "8764": [-0.13313, 0.36687, 0, 0, 0.77778], + "8765": [-0.13313, 0.37788, 0, 0, 0.77778], + "8769": [-0.13313, 0.36687, 0, 0, 0.77778], + "8770": [-0.03625, 0.46375, 0, 0, 0.77778], + "8774": [0.30274, 0.79383, 0, 0, 0.77778], + "8776": [-0.01688, 0.48312, 0, 0, 0.77778], + "8778": [0.08167, 0.58167, 0, 0, 0.77778], + "8782": [0.06062, 0.54986, 0, 0, 0.77778], + "8783": [0.06062, 0.54986, 0, 0, 0.77778], + "8785": [0.08198, 0.58198, 0, 0, 0.77778], + "8786": [0.08198, 0.58198, 0, 0, 0.77778], + "8787": [0.08198, 0.58198, 0, 0, 0.77778], + "8790": [0, 0.69224, 0, 0, 0.77778], + "8791": [0.22958, 0.72958, 0, 0, 0.77778], + "8796": [0.08198, 0.91667, 0, 0, 0.77778], + "8806": [0.25583, 0.75583, 0, 0, 0.77778], + "8807": [0.25583, 0.75583, 0, 0, 0.77778], + "8808": [0.25142, 0.75726, 0, 0, 0.77778], + "8809": [0.25142, 0.75726, 0, 0, 0.77778], + "8812": [0.25583, 0.75583, 0, 0, 0.5], + "8814": [0.20576, 0.70576, 0, 0, 0.77778], + "8815": [0.20576, 0.70576, 0, 0, 0.77778], + "8816": [0.30274, 0.79383, 0, 0, 0.77778], + "8817": [0.30274, 0.79383, 0, 0, 0.77778], + "8818": [0.22958, 0.72958, 0, 0, 0.77778], + "8819": [0.22958, 0.72958, 0, 0, 0.77778], + "8822": [0.1808, 0.675, 0, 0, 0.77778], + "8823": [0.1808, 0.675, 0, 0, 0.77778], + "8828": [0.13667, 0.63667, 0, 0, 0.77778], + "8829": [0.13667, 0.63667, 0, 0, 0.77778], + "8830": [0.22958, 0.72958, 0, 0, 0.77778], + "8831": [0.22958, 0.72958, 0, 0, 0.77778], + "8832": [0.20576, 0.70576, 0, 0, 0.77778], + "8833": [0.20576, 0.70576, 0, 0, 0.77778], + "8840": [0.30274, 0.79383, 0, 0, 0.77778], + "8841": [0.30274, 0.79383, 0, 0, 0.77778], + "8842": [0.13597, 0.63597, 0, 0, 0.77778], + "8843": [0.13597, 0.63597, 0, 0, 0.77778], + "8847": [0.03517, 0.54986, 0, 0, 0.77778], + "8848": [0.03517, 0.54986, 0, 0, 0.77778], + "8858": [0.08198, 0.58198, 0, 0, 0.77778], + "8859": [0.08198, 0.58198, 0, 0, 0.77778], + "8861": [0.08198, 0.58198, 0, 0, 0.77778], + "8862": [0, 0.675, 0, 0, 0.77778], + "8863": [0, 0.675, 0, 0, 0.77778], + "8864": [0, 0.675, 0, 0, 0.77778], + "8865": [0, 0.675, 0, 0, 0.77778], + "8872": [0, 0.69224, 0, 0, 0.61111], + "8873": [0, 0.69224, 0, 0, 0.72222], + "8874": [0, 0.69224, 0, 0, 0.88889], + "8876": [0, 0.68889, 0, 0, 0.61111], + "8877": [0, 0.68889, 0, 0, 0.61111], + "8878": [0, 0.68889, 0, 0, 0.72222], + "8879": [0, 0.68889, 0, 0, 0.72222], + "8882": [0.03517, 0.54986, 0, 0, 0.77778], + "8883": [0.03517, 0.54986, 0, 0, 0.77778], + "8884": [0.13667, 0.63667, 0, 0, 0.77778], + "8885": [0.13667, 0.63667, 0, 0, 0.77778], + "8888": [0, 0.54986, 0, 0, 1.11111], + "8890": [0.19444, 0.43056, 0, 0, 0.55556], + "8891": [0.19444, 0.69224, 0, 0, 0.61111], + "8892": [0.19444, 0.69224, 0, 0, 0.61111], + "8901": [0, 0.54986, 0, 0, 0.27778], + "8903": [0.08167, 0.58167, 0, 0, 0.77778], + "8905": [0.08167, 0.58167, 0, 0, 0.77778], + "8906": [0.08167, 0.58167, 0, 0, 0.77778], + "8907": [0, 0.69224, 0, 0, 0.77778], + "8908": [0, 0.69224, 0, 0, 0.77778], + "8909": [-0.03598, 0.46402, 0, 0, 0.77778], + "8910": [0, 0.54986, 0, 0, 0.76042], + "8911": [0, 0.54986, 0, 0, 0.76042], + "8912": [0.03517, 0.54986, 0, 0, 0.77778], + "8913": [0.03517, 0.54986, 0, 0, 0.77778], + "8914": [0, 0.54986, 0, 0, 0.66667], + "8915": [0, 0.54986, 0, 0, 0.66667], + "8916": [0, 0.69224, 0, 0, 0.66667], + "8918": [0.0391, 0.5391, 0, 0, 0.77778], + "8919": [0.0391, 0.5391, 0, 0, 0.77778], + "8920": [0.03517, 0.54986, 0, 0, 1.33334], + "8921": [0.03517, 0.54986, 0, 0, 1.33334], + "8922": [0.38569, 0.88569, 0, 0, 0.77778], + "8923": [0.38569, 0.88569, 0, 0, 0.77778], + "8926": [0.13667, 0.63667, 0, 0, 0.77778], + "8927": [0.13667, 0.63667, 0, 0, 0.77778], + "8928": [0.30274, 0.79383, 0, 0, 0.77778], + "8929": [0.30274, 0.79383, 0, 0, 0.77778], + "8934": [0.23222, 0.74111, 0, 0, 0.77778], + "8935": [0.23222, 0.74111, 0, 0, 0.77778], + "8936": [0.23222, 0.74111, 0, 0, 0.77778], + "8937": [0.23222, 0.74111, 0, 0, 0.77778], + "8938": [0.20576, 0.70576, 0, 0, 0.77778], + "8939": [0.20576, 0.70576, 0, 0, 0.77778], + "8940": [0.30274, 0.79383, 0, 0, 0.77778], + "8941": [0.30274, 0.79383, 0, 0, 0.77778], + "8994": [0.19444, 0.69224, 0, 0, 0.77778], + "8995": [0.19444, 0.69224, 0, 0, 0.77778], + "9416": [0.15559, 0.69224, 0, 0, 0.90222], + "9484": [0, 0.69224, 0, 0, 0.5], + "9488": [0, 0.69224, 0, 0, 0.5], + "9492": [0, 0.37788, 0, 0, 0.5], + "9496": [0, 0.37788, 0, 0, 0.5], + "9585": [0.19444, 0.68889, 0, 0, 0.88889], + "9586": [0.19444, 0.74111, 0, 0, 0.88889], + "9632": [0, 0.675, 0, 0, 0.77778], + "9633": [0, 0.675, 0, 0, 0.77778], + "9650": [0, 0.54986, 0, 0, 0.72222], + "9651": [0, 0.54986, 0, 0, 0.72222], + "9654": [0.03517, 0.54986, 0, 0, 0.77778], + "9660": [0, 0.54986, 0, 0, 0.72222], + "9661": [0, 0.54986, 0, 0, 0.72222], + "9664": [0.03517, 0.54986, 0, 0, 0.77778], + "9674": [0.11111, 0.69224, 0, 0, 0.66667], + "9733": [0.19444, 0.69224, 0, 0, 0.94445], + "10003": [0, 0.69224, 0, 0, 0.83334], + "10016": [0, 0.69224, 0, 0, 0.83334], + "10731": [0.11111, 0.69224, 0, 0, 0.66667], + "10846": [0.19444, 0.75583, 0, 0, 0.61111], + "10877": [0.13667, 0.63667, 0, 0, 0.77778], + "10878": [0.13667, 0.63667, 0, 0, 0.77778], + "10885": [0.25583, 0.75583, 0, 0, 0.77778], + "10886": [0.25583, 0.75583, 0, 0, 0.77778], + "10887": [0.13597, 0.63597, 0, 0, 0.77778], + "10888": [0.13597, 0.63597, 0, 0, 0.77778], + "10889": [0.26167, 0.75726, 0, 0, 0.77778], + "10890": [0.26167, 0.75726, 0, 0, 0.77778], + "10891": [0.48256, 0.98256, 0, 0, 0.77778], + "10892": [0.48256, 0.98256, 0, 0, 0.77778], + "10901": [0.13667, 0.63667, 0, 0, 0.77778], + "10902": [0.13667, 0.63667, 0, 0, 0.77778], + "10933": [0.25142, 0.75726, 0, 0, 0.77778], + "10934": [0.25142, 0.75726, 0, 0, 0.77778], + "10935": [0.26167, 0.75726, 0, 0, 0.77778], + "10936": [0.26167, 0.75726, 0, 0, 0.77778], + "10937": [0.26167, 0.75726, 0, 0, 0.77778], + "10938": [0.26167, 0.75726, 0, 0, 0.77778], + "10949": [0.25583, 0.75583, 0, 0, 0.77778], + "10950": [0.25583, 0.75583, 0, 0, 0.77778], + "10955": [0.28481, 0.79383, 0, 0, 0.77778], + "10956": [0.28481, 0.79383, 0, 0, 0.77778], + "57350": [0.08167, 0.58167, 0, 0, 0.22222], + "57351": [0.08167, 0.58167, 0, 0, 0.38889], + "57352": [0.08167, 0.58167, 0, 0, 0.77778], + "57353": [0, 0.43056, 0.04028, 0, 0.66667], + "57356": [0.25142, 0.75726, 0, 0, 0.77778], + "57357": [0.25142, 0.75726, 0, 0, 0.77778], + "57358": [0.41951, 0.91951, 0, 0, 0.77778], + "57359": [0.30274, 0.79383, 0, 0, 0.77778], + "57360": [0.30274, 0.79383, 0, 0, 0.77778], + "57361": [0.41951, 0.91951, 0, 0, 0.77778], + "57366": [0.25142, 0.75726, 0, 0, 0.77778], + "57367": [0.25142, 0.75726, 0, 0, 0.77778], + "57368": [0.25142, 0.75726, 0, 0, 0.77778], + "57369": [0.25142, 0.75726, 0, 0, 0.77778], + "57370": [0.13597, 0.63597, 0, 0, 0.77778], + "57371": [0.13597, 0.63597, 0, 0, 0.77778] + }, + "Caligraphic-Regular": { + "32": [0, 0, 0, 0, 0.25], + "65": [0, 0.68333, 0, 0.19445, 0.79847], + "66": [0, 0.68333, 0.03041, 0.13889, 0.65681], + "67": [0, 0.68333, 0.05834, 0.13889, 0.52653], + "68": [0, 0.68333, 0.02778, 0.08334, 0.77139], + "69": [0, 0.68333, 0.08944, 0.11111, 0.52778], + "70": [0, 0.68333, 0.09931, 0.11111, 0.71875], + "71": [0.09722, 0.68333, 0.0593, 0.11111, 0.59487], + "72": [0, 0.68333, 0.00965, 0.11111, 0.84452], + "73": [0, 0.68333, 0.07382, 0, 0.54452], + "74": [0.09722, 0.68333, 0.18472, 0.16667, 0.67778], + "75": [0, 0.68333, 0.01445, 0.05556, 0.76195], + "76": [0, 0.68333, 0, 0.13889, 0.68972], + "77": [0, 0.68333, 0, 0.13889, 1.2009], + "78": [0, 0.68333, 0.14736, 0.08334, 0.82049], + "79": [0, 0.68333, 0.02778, 0.11111, 0.79611], + "80": [0, 0.68333, 0.08222, 0.08334, 0.69556], + "81": [0.09722, 0.68333, 0, 0.11111, 0.81667], + "82": [0, 0.68333, 0, 0.08334, 0.8475], + "83": [0, 0.68333, 0.075, 0.13889, 0.60556], + "84": [0, 0.68333, 0.25417, 0, 0.54464], + "85": [0, 0.68333, 0.09931, 0.08334, 0.62583], + "86": [0, 0.68333, 0.08222, 0, 0.61278], + "87": [0, 0.68333, 0.08222, 0.08334, 0.98778], + "88": [0, 0.68333, 0.14643, 0.13889, 0.7133], + "89": [0.09722, 0.68333, 0.08222, 0.08334, 0.66834], + "90": [0, 0.68333, 0.07944, 0.13889, 0.72473], + "160": [0, 0, 0, 0, 0.25] + }, + "Fraktur-Regular": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69141, 0, 0, 0.29574], + "34": [0, 0.69141, 0, 0, 0.21471], + "38": [0, 0.69141, 0, 0, 0.73786], + "39": [0, 0.69141, 0, 0, 0.21201], + "40": [0.24982, 0.74947, 0, 0, 0.38865], + "41": [0.24982, 0.74947, 0, 0, 0.38865], + "42": [0, 0.62119, 0, 0, 0.27764], + "43": [0.08319, 0.58283, 0, 0, 0.75623], + "44": [0, 0.10803, 0, 0, 0.27764], + "45": [0.08319, 0.58283, 0, 0, 0.75623], + "46": [0, 0.10803, 0, 0, 0.27764], + "47": [0.24982, 0.74947, 0, 0, 0.50181], + "48": [0, 0.47534, 0, 0, 0.50181], + "49": [0, 0.47534, 0, 0, 0.50181], + "50": [0, 0.47534, 0, 0, 0.50181], + "51": [0.18906, 0.47534, 0, 0, 0.50181], + "52": [0.18906, 0.47534, 0, 0, 0.50181], + "53": [0.18906, 0.47534, 0, 0, 0.50181], + "54": [0, 0.69141, 0, 0, 0.50181], + "55": [0.18906, 0.47534, 0, 0, 0.50181], + "56": [0, 0.69141, 0, 0, 0.50181], + "57": [0.18906, 0.47534, 0, 0, 0.50181], + "58": [0, 0.47534, 0, 0, 0.21606], + "59": [0.12604, 0.47534, 0, 0, 0.21606], + "61": [-0.13099, 0.36866, 0, 0, 0.75623], + "63": [0, 0.69141, 0, 0, 0.36245], + "65": [0, 0.69141, 0, 0, 0.7176], + "66": [0, 0.69141, 0, 0, 0.88397], + "67": [0, 0.69141, 0, 0, 0.61254], + "68": [0, 0.69141, 0, 0, 0.83158], + "69": [0, 0.69141, 0, 0, 0.66278], + "70": [0.12604, 0.69141, 0, 0, 0.61119], + "71": [0, 0.69141, 0, 0, 0.78539], + "72": [0.06302, 0.69141, 0, 0, 0.7203], + "73": [0, 0.69141, 0, 0, 0.55448], + "74": [0.12604, 0.69141, 0, 0, 0.55231], + "75": [0, 0.69141, 0, 0, 0.66845], + "76": [0, 0.69141, 0, 0, 0.66602], + "77": [0, 0.69141, 0, 0, 1.04953], + "78": [0, 0.69141, 0, 0, 0.83212], + "79": [0, 0.69141, 0, 0, 0.82699], + "80": [0.18906, 0.69141, 0, 0, 0.82753], + "81": [0.03781, 0.69141, 0, 0, 0.82699], + "82": [0, 0.69141, 0, 0, 0.82807], + "83": [0, 0.69141, 0, 0, 0.82861], + "84": [0, 0.69141, 0, 0, 0.66899], + "85": [0, 0.69141, 0, 0, 0.64576], + "86": [0, 0.69141, 0, 0, 0.83131], + "87": [0, 0.69141, 0, 0, 1.04602], + "88": [0, 0.69141, 0, 0, 0.71922], + "89": [0.18906, 0.69141, 0, 0, 0.83293], + "90": [0.12604, 0.69141, 0, 0, 0.60201], + "91": [0.24982, 0.74947, 0, 0, 0.27764], + "93": [0.24982, 0.74947, 0, 0, 0.27764], + "94": [0, 0.69141, 0, 0, 0.49965], + "97": [0, 0.47534, 0, 0, 0.50046], + "98": [0, 0.69141, 0, 0, 0.51315], + "99": [0, 0.47534, 0, 0, 0.38946], + "100": [0, 0.62119, 0, 0, 0.49857], + "101": [0, 0.47534, 0, 0, 0.40053], + "102": [0.18906, 0.69141, 0, 0, 0.32626], + "103": [0.18906, 0.47534, 0, 0, 0.5037], + "104": [0.18906, 0.69141, 0, 0, 0.52126], + "105": [0, 0.69141, 0, 0, 0.27899], + "106": [0, 0.69141, 0, 0, 0.28088], + "107": [0, 0.69141, 0, 0, 0.38946], + "108": [0, 0.69141, 0, 0, 0.27953], + "109": [0, 0.47534, 0, 0, 0.76676], + "110": [0, 0.47534, 0, 0, 0.52666], + "111": [0, 0.47534, 0, 0, 0.48885], + "112": [0.18906, 0.52396, 0, 0, 0.50046], + "113": [0.18906, 0.47534, 0, 0, 0.48912], + "114": [0, 0.47534, 0, 0, 0.38919], + "115": [0, 0.47534, 0, 0, 0.44266], + "116": [0, 0.62119, 0, 0, 0.33301], + "117": [0, 0.47534, 0, 0, 0.5172], + "118": [0, 0.52396, 0, 0, 0.5118], + "119": [0, 0.52396, 0, 0, 0.77351], + "120": [0.18906, 0.47534, 0, 0, 0.38865], + "121": [0.18906, 0.47534, 0, 0, 0.49884], + "122": [0.18906, 0.47534, 0, 0, 0.39054], + "160": [0, 0, 0, 0, 0.25], + "8216": [0, 0.69141, 0, 0, 0.21471], + "8217": [0, 0.69141, 0, 0, 0.21471], + "58112": [0, 0.62119, 0, 0, 0.49749], + "58113": [0, 0.62119, 0, 0, 0.4983], + "58114": [0.18906, 0.69141, 0, 0, 0.33328], + "58115": [0.18906, 0.69141, 0, 0, 0.32923], + "58116": [0.18906, 0.47534, 0, 0, 0.50343], + "58117": [0, 0.69141, 0, 0, 0.33301], + "58118": [0, 0.62119, 0, 0, 0.33409], + "58119": [0, 0.47534, 0, 0, 0.50073] + }, + "Main-Bold": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0, 0, 0.35], + "34": [0, 0.69444, 0, 0, 0.60278], + "35": [0.19444, 0.69444, 0, 0, 0.95833], + "36": [0.05556, 0.75, 0, 0, 0.575], + "37": [0.05556, 0.75, 0, 0, 0.95833], + "38": [0, 0.69444, 0, 0, 0.89444], + "39": [0, 0.69444, 0, 0, 0.31944], + "40": [0.25, 0.75, 0, 0, 0.44722], + "41": [0.25, 0.75, 0, 0, 0.44722], + "42": [0, 0.75, 0, 0, 0.575], + "43": [0.13333, 0.63333, 0, 0, 0.89444], + "44": [0.19444, 0.15556, 0, 0, 0.31944], + "45": [0, 0.44444, 0, 0, 0.38333], + "46": [0, 0.15556, 0, 0, 0.31944], + "47": [0.25, 0.75, 0, 0, 0.575], + "48": [0, 0.64444, 0, 0, 0.575], + "49": [0, 0.64444, 0, 0, 0.575], + "50": [0, 0.64444, 0, 0, 0.575], + "51": [0, 0.64444, 0, 0, 0.575], + "52": [0, 0.64444, 0, 0, 0.575], + "53": [0, 0.64444, 0, 0, 0.575], + "54": [0, 0.64444, 0, 0, 0.575], + "55": [0, 0.64444, 0, 0, 0.575], + "56": [0, 0.64444, 0, 0, 0.575], + "57": [0, 0.64444, 0, 0, 0.575], + "58": [0, 0.44444, 0, 0, 0.31944], + "59": [0.19444, 0.44444, 0, 0, 0.31944], + "60": [0.08556, 0.58556, 0, 0, 0.89444], + "61": [-0.10889, 0.39111, 0, 0, 0.89444], + "62": [0.08556, 0.58556, 0, 0, 0.89444], + "63": [0, 0.69444, 0, 0, 0.54305], + "64": [0, 0.69444, 0, 0, 0.89444], + "65": [0, 0.68611, 0, 0, 0.86944], + "66": [0, 0.68611, 0, 0, 0.81805], + "67": [0, 0.68611, 0, 0, 0.83055], + "68": [0, 0.68611, 0, 0, 0.88194], + "69": [0, 0.68611, 0, 0, 0.75555], + "70": [0, 0.68611, 0, 0, 0.72361], + "71": [0, 0.68611, 0, 0, 0.90416], + "72": [0, 0.68611, 0, 0, 0.9], + "73": [0, 0.68611, 0, 0, 0.43611], + "74": [0, 0.68611, 0, 0, 0.59444], + "75": [0, 0.68611, 0, 0, 0.90138], + "76": [0, 0.68611, 0, 0, 0.69166], + "77": [0, 0.68611, 0, 0, 1.09166], + "78": [0, 0.68611, 0, 0, 0.9], + "79": [0, 0.68611, 0, 0, 0.86388], + "80": [0, 0.68611, 0, 0, 0.78611], + "81": [0.19444, 0.68611, 0, 0, 0.86388], + "82": [0, 0.68611, 0, 0, 0.8625], + "83": [0, 0.68611, 0, 0, 0.63889], + "84": [0, 0.68611, 0, 0, 0.8], + "85": [0, 0.68611, 0, 0, 0.88472], + "86": [0, 0.68611, 0.01597, 0, 0.86944], + "87": [0, 0.68611, 0.01597, 0, 1.18888], + "88": [0, 0.68611, 0, 0, 0.86944], + "89": [0, 0.68611, 0.02875, 0, 0.86944], + "90": [0, 0.68611, 0, 0, 0.70277], + "91": [0.25, 0.75, 0, 0, 0.31944], + "92": [0.25, 0.75, 0, 0, 0.575], + "93": [0.25, 0.75, 0, 0, 0.31944], + "94": [0, 0.69444, 0, 0, 0.575], + "95": [0.31, 0.13444, 0.03194, 0, 0.575], + "97": [0, 0.44444, 0, 0, 0.55902], + "98": [0, 0.69444, 0, 0, 0.63889], + "99": [0, 0.44444, 0, 0, 0.51111], + "100": [0, 0.69444, 0, 0, 0.63889], + "101": [0, 0.44444, 0, 0, 0.52708], + "102": [0, 0.69444, 0.10903, 0, 0.35139], + "103": [0.19444, 0.44444, 0.01597, 0, 0.575], + "104": [0, 0.69444, 0, 0, 0.63889], + "105": [0, 0.69444, 0, 0, 0.31944], + "106": [0.19444, 0.69444, 0, 0, 0.35139], + "107": [0, 0.69444, 0, 0, 0.60694], + "108": [0, 0.69444, 0, 0, 0.31944], + "109": [0, 0.44444, 0, 0, 0.95833], + "110": [0, 0.44444, 0, 0, 0.63889], + "111": [0, 0.44444, 0, 0, 0.575], + "112": [0.19444, 0.44444, 0, 0, 0.63889], + "113": [0.19444, 0.44444, 0, 0, 0.60694], + "114": [0, 0.44444, 0, 0, 0.47361], + "115": [0, 0.44444, 0, 0, 0.45361], + "116": [0, 0.63492, 0, 0, 0.44722], + "117": [0, 0.44444, 0, 0, 0.63889], + "118": [0, 0.44444, 0.01597, 0, 0.60694], + "119": [0, 0.44444, 0.01597, 0, 0.83055], + "120": [0, 0.44444, 0, 0, 0.60694], + "121": [0.19444, 0.44444, 0.01597, 0, 0.60694], + "122": [0, 0.44444, 0, 0, 0.51111], + "123": [0.25, 0.75, 0, 0, 0.575], + "124": [0.25, 0.75, 0, 0, 0.31944], + "125": [0.25, 0.75, 0, 0, 0.575], + "126": [0.35, 0.34444, 0, 0, 0.575], + "160": [0, 0, 0, 0, 0.25], + "163": [0, 0.69444, 0, 0, 0.86853], + "168": [0, 0.69444, 0, 0, 0.575], + "172": [0, 0.44444, 0, 0, 0.76666], + "176": [0, 0.69444, 0, 0, 0.86944], + "177": [0.13333, 0.63333, 0, 0, 0.89444], + "184": [0.17014, 0, 0, 0, 0.51111], + "198": [0, 0.68611, 0, 0, 1.04166], + "215": [0.13333, 0.63333, 0, 0, 0.89444], + "216": [0.04861, 0.73472, 0, 0, 0.89444], + "223": [0, 0.69444, 0, 0, 0.59722], + "230": [0, 0.44444, 0, 0, 0.83055], + "247": [0.13333, 0.63333, 0, 0, 0.89444], + "248": [0.09722, 0.54167, 0, 0, 0.575], + "305": [0, 0.44444, 0, 0, 0.31944], + "338": [0, 0.68611, 0, 0, 1.16944], + "339": [0, 0.44444, 0, 0, 0.89444], + "567": [0.19444, 0.44444, 0, 0, 0.35139], + "710": [0, 0.69444, 0, 0, 0.575], + "711": [0, 0.63194, 0, 0, 0.575], + "713": [0, 0.59611, 0, 0, 0.575], + "714": [0, 0.69444, 0, 0, 0.575], + "715": [0, 0.69444, 0, 0, 0.575], + "728": [0, 0.69444, 0, 0, 0.575], + "729": [0, 0.69444, 0, 0, 0.31944], + "730": [0, 0.69444, 0, 0, 0.86944], + "732": [0, 0.69444, 0, 0, 0.575], + "733": [0, 0.69444, 0, 0, 0.575], + "915": [0, 0.68611, 0, 0, 0.69166], + "916": [0, 0.68611, 0, 0, 0.95833], + "920": [0, 0.68611, 0, 0, 0.89444], + "923": [0, 0.68611, 0, 0, 0.80555], + "926": [0, 0.68611, 0, 0, 0.76666], + "928": [0, 0.68611, 0, 0, 0.9], + "931": [0, 0.68611, 0, 0, 0.83055], + "933": [0, 0.68611, 0, 0, 0.89444], + "934": [0, 0.68611, 0, 0, 0.83055], + "936": [0, 0.68611, 0, 0, 0.89444], + "937": [0, 0.68611, 0, 0, 0.83055], + "8211": [0, 0.44444, 0.03194, 0, 0.575], + "8212": [0, 0.44444, 0.03194, 0, 1.14999], + "8216": [0, 0.69444, 0, 0, 0.31944], + "8217": [0, 0.69444, 0, 0, 0.31944], + "8220": [0, 0.69444, 0, 0, 0.60278], + "8221": [0, 0.69444, 0, 0, 0.60278], + "8224": [0.19444, 0.69444, 0, 0, 0.51111], + "8225": [0.19444, 0.69444, 0, 0, 0.51111], + "8242": [0, 0.55556, 0, 0, 0.34444], + "8407": [0, 0.72444, 0.15486, 0, 0.575], + "8463": [0, 0.69444, 0, 0, 0.66759], + "8465": [0, 0.69444, 0, 0, 0.83055], + "8467": [0, 0.69444, 0, 0, 0.47361], + "8472": [0.19444, 0.44444, 0, 0, 0.74027], + "8476": [0, 0.69444, 0, 0, 0.83055], + "8501": [0, 0.69444, 0, 0, 0.70277], + "8592": [-0.10889, 0.39111, 0, 0, 1.14999], + "8593": [0.19444, 0.69444, 0, 0, 0.575], + "8594": [-0.10889, 0.39111, 0, 0, 1.14999], + "8595": [0.19444, 0.69444, 0, 0, 0.575], + "8596": [-0.10889, 0.39111, 0, 0, 1.14999], + "8597": [0.25, 0.75, 0, 0, 0.575], + "8598": [0.19444, 0.69444, 0, 0, 1.14999], + "8599": [0.19444, 0.69444, 0, 0, 1.14999], + "8600": [0.19444, 0.69444, 0, 0, 1.14999], + "8601": [0.19444, 0.69444, 0, 0, 1.14999], + "8636": [-0.10889, 0.39111, 0, 0, 1.14999], + "8637": [-0.10889, 0.39111, 0, 0, 1.14999], + "8640": [-0.10889, 0.39111, 0, 0, 1.14999], + "8641": [-0.10889, 0.39111, 0, 0, 1.14999], + "8656": [-0.10889, 0.39111, 0, 0, 1.14999], + "8657": [0.19444, 0.69444, 0, 0, 0.70277], + "8658": [-0.10889, 0.39111, 0, 0, 1.14999], + "8659": [0.19444, 0.69444, 0, 0, 0.70277], + "8660": [-0.10889, 0.39111, 0, 0, 1.14999], + "8661": [0.25, 0.75, 0, 0, 0.70277], + "8704": [0, 0.69444, 0, 0, 0.63889], + "8706": [0, 0.69444, 0.06389, 0, 0.62847], + "8707": [0, 0.69444, 0, 0, 0.63889], + "8709": [0.05556, 0.75, 0, 0, 0.575], + "8711": [0, 0.68611, 0, 0, 0.95833], + "8712": [0.08556, 0.58556, 0, 0, 0.76666], + "8715": [0.08556, 0.58556, 0, 0, 0.76666], + "8722": [0.13333, 0.63333, 0, 0, 0.89444], + "8723": [0.13333, 0.63333, 0, 0, 0.89444], + "8725": [0.25, 0.75, 0, 0, 0.575], + "8726": [0.25, 0.75, 0, 0, 0.575], + "8727": [-0.02778, 0.47222, 0, 0, 0.575], + "8728": [-0.02639, 0.47361, 0, 0, 0.575], + "8729": [-0.02639, 0.47361, 0, 0, 0.575], + "8730": [0.18, 0.82, 0, 0, 0.95833], + "8733": [0, 0.44444, 0, 0, 0.89444], + "8734": [0, 0.44444, 0, 0, 1.14999], + "8736": [0, 0.69224, 0, 0, 0.72222], + "8739": [0.25, 0.75, 0, 0, 0.31944], + "8741": [0.25, 0.75, 0, 0, 0.575], + "8743": [0, 0.55556, 0, 0, 0.76666], + "8744": [0, 0.55556, 0, 0, 0.76666], + "8745": [0, 0.55556, 0, 0, 0.76666], + "8746": [0, 0.55556, 0, 0, 0.76666], + "8747": [0.19444, 0.69444, 0.12778, 0, 0.56875], + "8764": [-0.10889, 0.39111, 0, 0, 0.89444], + "8768": [0.19444, 0.69444, 0, 0, 0.31944], + "8771": [0.00222, 0.50222, 0, 0, 0.89444], + "8773": [0.027, 0.638, 0, 0, 0.894], + "8776": [0.02444, 0.52444, 0, 0, 0.89444], + "8781": [0.00222, 0.50222, 0, 0, 0.89444], + "8801": [0.00222, 0.50222, 0, 0, 0.89444], + "8804": [0.19667, 0.69667, 0, 0, 0.89444], + "8805": [0.19667, 0.69667, 0, 0, 0.89444], + "8810": [0.08556, 0.58556, 0, 0, 1.14999], + "8811": [0.08556, 0.58556, 0, 0, 1.14999], + "8826": [0.08556, 0.58556, 0, 0, 0.89444], + "8827": [0.08556, 0.58556, 0, 0, 0.89444], + "8834": [0.08556, 0.58556, 0, 0, 0.89444], + "8835": [0.08556, 0.58556, 0, 0, 0.89444], + "8838": [0.19667, 0.69667, 0, 0, 0.89444], + "8839": [0.19667, 0.69667, 0, 0, 0.89444], + "8846": [0, 0.55556, 0, 0, 0.76666], + "8849": [0.19667, 0.69667, 0, 0, 0.89444], + "8850": [0.19667, 0.69667, 0, 0, 0.89444], + "8851": [0, 0.55556, 0, 0, 0.76666], + "8852": [0, 0.55556, 0, 0, 0.76666], + "8853": [0.13333, 0.63333, 0, 0, 0.89444], + "8854": [0.13333, 0.63333, 0, 0, 0.89444], + "8855": [0.13333, 0.63333, 0, 0, 0.89444], + "8856": [0.13333, 0.63333, 0, 0, 0.89444], + "8857": [0.13333, 0.63333, 0, 0, 0.89444], + "8866": [0, 0.69444, 0, 0, 0.70277], + "8867": [0, 0.69444, 0, 0, 0.70277], + "8868": [0, 0.69444, 0, 0, 0.89444], + "8869": [0, 0.69444, 0, 0, 0.89444], + "8900": [-0.02639, 0.47361, 0, 0, 0.575], + "8901": [-0.02639, 0.47361, 0, 0, 0.31944], + "8902": [-0.02778, 0.47222, 0, 0, 0.575], + "8968": [0.25, 0.75, 0, 0, 0.51111], + "8969": [0.25, 0.75, 0, 0, 0.51111], + "8970": [0.25, 0.75, 0, 0, 0.51111], + "8971": [0.25, 0.75, 0, 0, 0.51111], + "8994": [-0.13889, 0.36111, 0, 0, 1.14999], + "8995": [-0.13889, 0.36111, 0, 0, 1.14999], + "9651": [0.19444, 0.69444, 0, 0, 1.02222], + "9657": [-0.02778, 0.47222, 0, 0, 0.575], + "9661": [0.19444, 0.69444, 0, 0, 1.02222], + "9667": [-0.02778, 0.47222, 0, 0, 0.575], + "9711": [0.19444, 0.69444, 0, 0, 1.14999], + "9824": [0.12963, 0.69444, 0, 0, 0.89444], + "9825": [0.12963, 0.69444, 0, 0, 0.89444], + "9826": [0.12963, 0.69444, 0, 0, 0.89444], + "9827": [0.12963, 0.69444, 0, 0, 0.89444], + "9837": [0, 0.75, 0, 0, 0.44722], + "9838": [0.19444, 0.69444, 0, 0, 0.44722], + "9839": [0.19444, 0.69444, 0, 0, 0.44722], + "10216": [0.25, 0.75, 0, 0, 0.44722], + "10217": [0.25, 0.75, 0, 0, 0.44722], + "10815": [0, 0.68611, 0, 0, 0.9], + "10927": [0.19667, 0.69667, 0, 0, 0.89444], + "10928": [0.19667, 0.69667, 0, 0, 0.89444], + "57376": [0.19444, 0.69444, 0, 0, 0] + }, + "Main-BoldItalic": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0.11417, 0, 0.38611], + "34": [0, 0.69444, 0.07939, 0, 0.62055], + "35": [0.19444, 0.69444, 0.06833, 0, 0.94444], + "37": [0.05556, 0.75, 0.12861, 0, 0.94444], + "38": [0, 0.69444, 0.08528, 0, 0.88555], + "39": [0, 0.69444, 0.12945, 0, 0.35555], + "40": [0.25, 0.75, 0.15806, 0, 0.47333], + "41": [0.25, 0.75, 0.03306, 0, 0.47333], + "42": [0, 0.75, 0.14333, 0, 0.59111], + "43": [0.10333, 0.60333, 0.03306, 0, 0.88555], + "44": [0.19444, 0.14722, 0, 0, 0.35555], + "45": [0, 0.44444, 0.02611, 0, 0.41444], + "46": [0, 0.14722, 0, 0, 0.35555], + "47": [0.25, 0.75, 0.15806, 0, 0.59111], + "48": [0, 0.64444, 0.13167, 0, 0.59111], + "49": [0, 0.64444, 0.13167, 0, 0.59111], + "50": [0, 0.64444, 0.13167, 0, 0.59111], + "51": [0, 0.64444, 0.13167, 0, 0.59111], + "52": [0.19444, 0.64444, 0.13167, 0, 0.59111], + "53": [0, 0.64444, 0.13167, 0, 0.59111], + "54": [0, 0.64444, 0.13167, 0, 0.59111], + "55": [0.19444, 0.64444, 0.13167, 0, 0.59111], + "56": [0, 0.64444, 0.13167, 0, 0.59111], + "57": [0, 0.64444, 0.13167, 0, 0.59111], + "58": [0, 0.44444, 0.06695, 0, 0.35555], + "59": [0.19444, 0.44444, 0.06695, 0, 0.35555], + "61": [-0.10889, 0.39111, 0.06833, 0, 0.88555], + "63": [0, 0.69444, 0.11472, 0, 0.59111], + "64": [0, 0.69444, 0.09208, 0, 0.88555], + "65": [0, 0.68611, 0, 0, 0.86555], + "66": [0, 0.68611, 0.0992, 0, 0.81666], + "67": [0, 0.68611, 0.14208, 0, 0.82666], + "68": [0, 0.68611, 0.09062, 0, 0.87555], + "69": [0, 0.68611, 0.11431, 0, 0.75666], + "70": [0, 0.68611, 0.12903, 0, 0.72722], + "71": [0, 0.68611, 0.07347, 0, 0.89527], + "72": [0, 0.68611, 0.17208, 0, 0.8961], + "73": [0, 0.68611, 0.15681, 0, 0.47166], + "74": [0, 0.68611, 0.145, 0, 0.61055], + "75": [0, 0.68611, 0.14208, 0, 0.89499], + "76": [0, 0.68611, 0, 0, 0.69777], + "77": [0, 0.68611, 0.17208, 0, 1.07277], + "78": [0, 0.68611, 0.17208, 0, 0.8961], + "79": [0, 0.68611, 0.09062, 0, 0.85499], + "80": [0, 0.68611, 0.0992, 0, 0.78721], + "81": [0.19444, 0.68611, 0.09062, 0, 0.85499], + "82": [0, 0.68611, 0.02559, 0, 0.85944], + "83": [0, 0.68611, 0.11264, 0, 0.64999], + "84": [0, 0.68611, 0.12903, 0, 0.7961], + "85": [0, 0.68611, 0.17208, 0, 0.88083], + "86": [0, 0.68611, 0.18625, 0, 0.86555], + "87": [0, 0.68611, 0.18625, 0, 1.15999], + "88": [0, 0.68611, 0.15681, 0, 0.86555], + "89": [0, 0.68611, 0.19803, 0, 0.86555], + "90": [0, 0.68611, 0.14208, 0, 0.70888], + "91": [0.25, 0.75, 0.1875, 0, 0.35611], + "93": [0.25, 0.75, 0.09972, 0, 0.35611], + "94": [0, 0.69444, 0.06709, 0, 0.59111], + "95": [0.31, 0.13444, 0.09811, 0, 0.59111], + "97": [0, 0.44444, 0.09426, 0, 0.59111], + "98": [0, 0.69444, 0.07861, 0, 0.53222], + "99": [0, 0.44444, 0.05222, 0, 0.53222], + "100": [0, 0.69444, 0.10861, 0, 0.59111], + "101": [0, 0.44444, 0.085, 0, 0.53222], + "102": [0.19444, 0.69444, 0.21778, 0, 0.4], + "103": [0.19444, 0.44444, 0.105, 0, 0.53222], + "104": [0, 0.69444, 0.09426, 0, 0.59111], + "105": [0, 0.69326, 0.11387, 0, 0.35555], + "106": [0.19444, 0.69326, 0.1672, 0, 0.35555], + "107": [0, 0.69444, 0.11111, 0, 0.53222], + "108": [0, 0.69444, 0.10861, 0, 0.29666], + "109": [0, 0.44444, 0.09426, 0, 0.94444], + "110": [0, 0.44444, 0.09426, 0, 0.64999], + "111": [0, 0.44444, 0.07861, 0, 0.59111], + "112": [0.19444, 0.44444, 0.07861, 0, 0.59111], + "113": [0.19444, 0.44444, 0.105, 0, 0.53222], + "114": [0, 0.44444, 0.11111, 0, 0.50167], + "115": [0, 0.44444, 0.08167, 0, 0.48694], + "116": [0, 0.63492, 0.09639, 0, 0.385], + "117": [0, 0.44444, 0.09426, 0, 0.62055], + "118": [0, 0.44444, 0.11111, 0, 0.53222], + "119": [0, 0.44444, 0.11111, 0, 0.76777], + "120": [0, 0.44444, 0.12583, 0, 0.56055], + "121": [0.19444, 0.44444, 0.105, 0, 0.56166], + "122": [0, 0.44444, 0.13889, 0, 0.49055], + "126": [0.35, 0.34444, 0.11472, 0, 0.59111], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.69444, 0.11473, 0, 0.59111], + "176": [0, 0.69444, 0, 0, 0.94888], + "184": [0.17014, 0, 0, 0, 0.53222], + "198": [0, 0.68611, 0.11431, 0, 1.02277], + "216": [0.04861, 0.73472, 0.09062, 0, 0.88555], + "223": [0.19444, 0.69444, 0.09736, 0, 0.665], + "230": [0, 0.44444, 0.085, 0, 0.82666], + "248": [0.09722, 0.54167, 0.09458, 0, 0.59111], + "305": [0, 0.44444, 0.09426, 0, 0.35555], + "338": [0, 0.68611, 0.11431, 0, 1.14054], + "339": [0, 0.44444, 0.085, 0, 0.82666], + "567": [0.19444, 0.44444, 0.04611, 0, 0.385], + "710": [0, 0.69444, 0.06709, 0, 0.59111], + "711": [0, 0.63194, 0.08271, 0, 0.59111], + "713": [0, 0.59444, 0.10444, 0, 0.59111], + "714": [0, 0.69444, 0.08528, 0, 0.59111], + "715": [0, 0.69444, 0, 0, 0.59111], + "728": [0, 0.69444, 0.10333, 0, 0.59111], + "729": [0, 0.69444, 0.12945, 0, 0.35555], + "730": [0, 0.69444, 0, 0, 0.94888], + "732": [0, 0.69444, 0.11472, 0, 0.59111], + "733": [0, 0.69444, 0.11472, 0, 0.59111], + "915": [0, 0.68611, 0.12903, 0, 0.69777], + "916": [0, 0.68611, 0, 0, 0.94444], + "920": [0, 0.68611, 0.09062, 0, 0.88555], + "923": [0, 0.68611, 0, 0, 0.80666], + "926": [0, 0.68611, 0.15092, 0, 0.76777], + "928": [0, 0.68611, 0.17208, 0, 0.8961], + "931": [0, 0.68611, 0.11431, 0, 0.82666], + "933": [0, 0.68611, 0.10778, 0, 0.88555], + "934": [0, 0.68611, 0.05632, 0, 0.82666], + "936": [0, 0.68611, 0.10778, 0, 0.88555], + "937": [0, 0.68611, 0.0992, 0, 0.82666], + "8211": [0, 0.44444, 0.09811, 0, 0.59111], + "8212": [0, 0.44444, 0.09811, 0, 1.18221], + "8216": [0, 0.69444, 0.12945, 0, 0.35555], + "8217": [0, 0.69444, 0.12945, 0, 0.35555], + "8220": [0, 0.69444, 0.16772, 0, 0.62055], + "8221": [0, 0.69444, 0.07939, 0, 0.62055] + }, + "Main-Italic": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0.12417, 0, 0.30667], + "34": [0, 0.69444, 0.06961, 0, 0.51444], + "35": [0.19444, 0.69444, 0.06616, 0, 0.81777], + "37": [0.05556, 0.75, 0.13639, 0, 0.81777], + "38": [0, 0.69444, 0.09694, 0, 0.76666], + "39": [0, 0.69444, 0.12417, 0, 0.30667], + "40": [0.25, 0.75, 0.16194, 0, 0.40889], + "41": [0.25, 0.75, 0.03694, 0, 0.40889], + "42": [0, 0.75, 0.14917, 0, 0.51111], + "43": [0.05667, 0.56167, 0.03694, 0, 0.76666], + "44": [0.19444, 0.10556, 0, 0, 0.30667], + "45": [0, 0.43056, 0.02826, 0, 0.35778], + "46": [0, 0.10556, 0, 0, 0.30667], + "47": [0.25, 0.75, 0.16194, 0, 0.51111], + "48": [0, 0.64444, 0.13556, 0, 0.51111], + "49": [0, 0.64444, 0.13556, 0, 0.51111], + "50": [0, 0.64444, 0.13556, 0, 0.51111], + "51": [0, 0.64444, 0.13556, 0, 0.51111], + "52": [0.19444, 0.64444, 0.13556, 0, 0.51111], + "53": [0, 0.64444, 0.13556, 0, 0.51111], + "54": [0, 0.64444, 0.13556, 0, 0.51111], + "55": [0.19444, 0.64444, 0.13556, 0, 0.51111], + "56": [0, 0.64444, 0.13556, 0, 0.51111], + "57": [0, 0.64444, 0.13556, 0, 0.51111], + "58": [0, 0.43056, 0.0582, 0, 0.30667], + "59": [0.19444, 0.43056, 0.0582, 0, 0.30667], + "61": [-0.13313, 0.36687, 0.06616, 0, 0.76666], + "63": [0, 0.69444, 0.1225, 0, 0.51111], + "64": [0, 0.69444, 0.09597, 0, 0.76666], + "65": [0, 0.68333, 0, 0, 0.74333], + "66": [0, 0.68333, 0.10257, 0, 0.70389], + "67": [0, 0.68333, 0.14528, 0, 0.71555], + "68": [0, 0.68333, 0.09403, 0, 0.755], + "69": [0, 0.68333, 0.12028, 0, 0.67833], + "70": [0, 0.68333, 0.13305, 0, 0.65277], + "71": [0, 0.68333, 0.08722, 0, 0.77361], + "72": [0, 0.68333, 0.16389, 0, 0.74333], + "73": [0, 0.68333, 0.15806, 0, 0.38555], + "74": [0, 0.68333, 0.14028, 0, 0.525], + "75": [0, 0.68333, 0.14528, 0, 0.76888], + "76": [0, 0.68333, 0, 0, 0.62722], + "77": [0, 0.68333, 0.16389, 0, 0.89666], + "78": [0, 0.68333, 0.16389, 0, 0.74333], + "79": [0, 0.68333, 0.09403, 0, 0.76666], + "80": [0, 0.68333, 0.10257, 0, 0.67833], + "81": [0.19444, 0.68333, 0.09403, 0, 0.76666], + "82": [0, 0.68333, 0.03868, 0, 0.72944], + "83": [0, 0.68333, 0.11972, 0, 0.56222], + "84": [0, 0.68333, 0.13305, 0, 0.71555], + "85": [0, 0.68333, 0.16389, 0, 0.74333], + "86": [0, 0.68333, 0.18361, 0, 0.74333], + "87": [0, 0.68333, 0.18361, 0, 0.99888], + "88": [0, 0.68333, 0.15806, 0, 0.74333], + "89": [0, 0.68333, 0.19383, 0, 0.74333], + "90": [0, 0.68333, 0.14528, 0, 0.61333], + "91": [0.25, 0.75, 0.1875, 0, 0.30667], + "93": [0.25, 0.75, 0.10528, 0, 0.30667], + "94": [0, 0.69444, 0.06646, 0, 0.51111], + "95": [0.31, 0.12056, 0.09208, 0, 0.51111], + "97": [0, 0.43056, 0.07671, 0, 0.51111], + "98": [0, 0.69444, 0.06312, 0, 0.46], + "99": [0, 0.43056, 0.05653, 0, 0.46], + "100": [0, 0.69444, 0.10333, 0, 0.51111], + "101": [0, 0.43056, 0.07514, 0, 0.46], + "102": [0.19444, 0.69444, 0.21194, 0, 0.30667], + "103": [0.19444, 0.43056, 0.08847, 0, 0.46], + "104": [0, 0.69444, 0.07671, 0, 0.51111], + "105": [0, 0.65536, 0.1019, 0, 0.30667], + "106": [0.19444, 0.65536, 0.14467, 0, 0.30667], + "107": [0, 0.69444, 0.10764, 0, 0.46], + "108": [0, 0.69444, 0.10333, 0, 0.25555], + "109": [0, 0.43056, 0.07671, 0, 0.81777], + "110": [0, 0.43056, 0.07671, 0, 0.56222], + "111": [0, 0.43056, 0.06312, 0, 0.51111], + "112": [0.19444, 0.43056, 0.06312, 0, 0.51111], + "113": [0.19444, 0.43056, 0.08847, 0, 0.46], + "114": [0, 0.43056, 0.10764, 0, 0.42166], + "115": [0, 0.43056, 0.08208, 0, 0.40889], + "116": [0, 0.61508, 0.09486, 0, 0.33222], + "117": [0, 0.43056, 0.07671, 0, 0.53666], + "118": [0, 0.43056, 0.10764, 0, 0.46], + "119": [0, 0.43056, 0.10764, 0, 0.66444], + "120": [0, 0.43056, 0.12042, 0, 0.46389], + "121": [0.19444, 0.43056, 0.08847, 0, 0.48555], + "122": [0, 0.43056, 0.12292, 0, 0.40889], + "126": [0.35, 0.31786, 0.11585, 0, 0.51111], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.66786, 0.10474, 0, 0.51111], + "176": [0, 0.69444, 0, 0, 0.83129], + "184": [0.17014, 0, 0, 0, 0.46], + "198": [0, 0.68333, 0.12028, 0, 0.88277], + "216": [0.04861, 0.73194, 0.09403, 0, 0.76666], + "223": [0.19444, 0.69444, 0.10514, 0, 0.53666], + "230": [0, 0.43056, 0.07514, 0, 0.71555], + "248": [0.09722, 0.52778, 0.09194, 0, 0.51111], + "338": [0, 0.68333, 0.12028, 0, 0.98499], + "339": [0, 0.43056, 0.07514, 0, 0.71555], + "710": [0, 0.69444, 0.06646, 0, 0.51111], + "711": [0, 0.62847, 0.08295, 0, 0.51111], + "713": [0, 0.56167, 0.10333, 0, 0.51111], + "714": [0, 0.69444, 0.09694, 0, 0.51111], + "715": [0, 0.69444, 0, 0, 0.51111], + "728": [0, 0.69444, 0.10806, 0, 0.51111], + "729": [0, 0.66786, 0.11752, 0, 0.30667], + "730": [0, 0.69444, 0, 0, 0.83129], + "732": [0, 0.66786, 0.11585, 0, 0.51111], + "733": [0, 0.69444, 0.1225, 0, 0.51111], + "915": [0, 0.68333, 0.13305, 0, 0.62722], + "916": [0, 0.68333, 0, 0, 0.81777], + "920": [0, 0.68333, 0.09403, 0, 0.76666], + "923": [0, 0.68333, 0, 0, 0.69222], + "926": [0, 0.68333, 0.15294, 0, 0.66444], + "928": [0, 0.68333, 0.16389, 0, 0.74333], + "931": [0, 0.68333, 0.12028, 0, 0.71555], + "933": [0, 0.68333, 0.11111, 0, 0.76666], + "934": [0, 0.68333, 0.05986, 0, 0.71555], + "936": [0, 0.68333, 0.11111, 0, 0.76666], + "937": [0, 0.68333, 0.10257, 0, 0.71555], + "8211": [0, 0.43056, 0.09208, 0, 0.51111], + "8212": [0, 0.43056, 0.09208, 0, 1.02222], + "8216": [0, 0.69444, 0.12417, 0, 0.30667], + "8217": [0, 0.69444, 0.12417, 0, 0.30667], + "8220": [0, 0.69444, 0.1685, 0, 0.51444], + "8221": [0, 0.69444, 0.06961, 0, 0.51444], + "8463": [0, 0.68889, 0, 0, 0.54028] + }, + "Main-Regular": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0, 0, 0.27778], + "34": [0, 0.69444, 0, 0, 0.5], + "35": [0.19444, 0.69444, 0, 0, 0.83334], + "36": [0.05556, 0.75, 0, 0, 0.5], + "37": [0.05556, 0.75, 0, 0, 0.83334], + "38": [0, 0.69444, 0, 0, 0.77778], + "39": [0, 0.69444, 0, 0, 0.27778], + "40": [0.25, 0.75, 0, 0, 0.38889], + "41": [0.25, 0.75, 0, 0, 0.38889], + "42": [0, 0.75, 0, 0, 0.5], + "43": [0.08333, 0.58333, 0, 0, 0.77778], + "44": [0.19444, 0.10556, 0, 0, 0.27778], + "45": [0, 0.43056, 0, 0, 0.33333], + "46": [0, 0.10556, 0, 0, 0.27778], + "47": [0.25, 0.75, 0, 0, 0.5], + "48": [0, 0.64444, 0, 0, 0.5], + "49": [0, 0.64444, 0, 0, 0.5], + "50": [0, 0.64444, 0, 0, 0.5], + "51": [0, 0.64444, 0, 0, 0.5], + "52": [0, 0.64444, 0, 0, 0.5], + "53": [0, 0.64444, 0, 0, 0.5], + "54": [0, 0.64444, 0, 0, 0.5], + "55": [0, 0.64444, 0, 0, 0.5], + "56": [0, 0.64444, 0, 0, 0.5], + "57": [0, 0.64444, 0, 0, 0.5], + "58": [0, 0.43056, 0, 0, 0.27778], + "59": [0.19444, 0.43056, 0, 0, 0.27778], + "60": [0.0391, 0.5391, 0, 0, 0.77778], + "61": [-0.13313, 0.36687, 0, 0, 0.77778], + "62": [0.0391, 0.5391, 0, 0, 0.77778], + "63": [0, 0.69444, 0, 0, 0.47222], + "64": [0, 0.69444, 0, 0, 0.77778], + "65": [0, 0.68333, 0, 0, 0.75], + "66": [0, 0.68333, 0, 0, 0.70834], + "67": [0, 0.68333, 0, 0, 0.72222], + "68": [0, 0.68333, 0, 0, 0.76389], + "69": [0, 0.68333, 0, 0, 0.68056], + "70": [0, 0.68333, 0, 0, 0.65278], + "71": [0, 0.68333, 0, 0, 0.78472], + "72": [0, 0.68333, 0, 0, 0.75], + "73": [0, 0.68333, 0, 0, 0.36111], + "74": [0, 0.68333, 0, 0, 0.51389], + "75": [0, 0.68333, 0, 0, 0.77778], + "76": [0, 0.68333, 0, 0, 0.625], + "77": [0, 0.68333, 0, 0, 0.91667], + "78": [0, 0.68333, 0, 0, 0.75], + "79": [0, 0.68333, 0, 0, 0.77778], + "80": [0, 0.68333, 0, 0, 0.68056], + "81": [0.19444, 0.68333, 0, 0, 0.77778], + "82": [0, 0.68333, 0, 0, 0.73611], + "83": [0, 0.68333, 0, 0, 0.55556], + "84": [0, 0.68333, 0, 0, 0.72222], + "85": [0, 0.68333, 0, 0, 0.75], + "86": [0, 0.68333, 0.01389, 0, 0.75], + "87": [0, 0.68333, 0.01389, 0, 1.02778], + "88": [0, 0.68333, 0, 0, 0.75], + "89": [0, 0.68333, 0.025, 0, 0.75], + "90": [0, 0.68333, 0, 0, 0.61111], + "91": [0.25, 0.75, 0, 0, 0.27778], + "92": [0.25, 0.75, 0, 0, 0.5], + "93": [0.25, 0.75, 0, 0, 0.27778], + "94": [0, 0.69444, 0, 0, 0.5], + "95": [0.31, 0.12056, 0.02778, 0, 0.5], + "97": [0, 0.43056, 0, 0, 0.5], + "98": [0, 0.69444, 0, 0, 0.55556], + "99": [0, 0.43056, 0, 0, 0.44445], + "100": [0, 0.69444, 0, 0, 0.55556], + "101": [0, 0.43056, 0, 0, 0.44445], + "102": [0, 0.69444, 0.07778, 0, 0.30556], + "103": [0.19444, 0.43056, 0.01389, 0, 0.5], + "104": [0, 0.69444, 0, 0, 0.55556], + "105": [0, 0.66786, 0, 0, 0.27778], + "106": [0.19444, 0.66786, 0, 0, 0.30556], + "107": [0, 0.69444, 0, 0, 0.52778], + "108": [0, 0.69444, 0, 0, 0.27778], + "109": [0, 0.43056, 0, 0, 0.83334], + "110": [0, 0.43056, 0, 0, 0.55556], + "111": [0, 0.43056, 0, 0, 0.5], + "112": [0.19444, 0.43056, 0, 0, 0.55556], + "113": [0.19444, 0.43056, 0, 0, 0.52778], + "114": [0, 0.43056, 0, 0, 0.39167], + "115": [0, 0.43056, 0, 0, 0.39445], + "116": [0, 0.61508, 0, 0, 0.38889], + "117": [0, 0.43056, 0, 0, 0.55556], + "118": [0, 0.43056, 0.01389, 0, 0.52778], + "119": [0, 0.43056, 0.01389, 0, 0.72222], + "120": [0, 0.43056, 0, 0, 0.52778], + "121": [0.19444, 0.43056, 0.01389, 0, 0.52778], + "122": [0, 0.43056, 0, 0, 0.44445], + "123": [0.25, 0.75, 0, 0, 0.5], + "124": [0.25, 0.75, 0, 0, 0.27778], + "125": [0.25, 0.75, 0, 0, 0.5], + "126": [0.35, 0.31786, 0, 0, 0.5], + "160": [0, 0, 0, 0, 0.25], + "163": [0, 0.69444, 0, 0, 0.76909], + "167": [0.19444, 0.69444, 0, 0, 0.44445], + "168": [0, 0.66786, 0, 0, 0.5], + "172": [0, 0.43056, 0, 0, 0.66667], + "176": [0, 0.69444, 0, 0, 0.75], + "177": [0.08333, 0.58333, 0, 0, 0.77778], + "182": [0.19444, 0.69444, 0, 0, 0.61111], + "184": [0.17014, 0, 0, 0, 0.44445], + "198": [0, 0.68333, 0, 0, 0.90278], + "215": [0.08333, 0.58333, 0, 0, 0.77778], + "216": [0.04861, 0.73194, 0, 0, 0.77778], + "223": [0, 0.69444, 0, 0, 0.5], + "230": [0, 0.43056, 0, 0, 0.72222], + "247": [0.08333, 0.58333, 0, 0, 0.77778], + "248": [0.09722, 0.52778, 0, 0, 0.5], + "305": [0, 0.43056, 0, 0, 0.27778], + "338": [0, 0.68333, 0, 0, 1.01389], + "339": [0, 0.43056, 0, 0, 0.77778], + "567": [0.19444, 0.43056, 0, 0, 0.30556], + "710": [0, 0.69444, 0, 0, 0.5], + "711": [0, 0.62847, 0, 0, 0.5], + "713": [0, 0.56778, 0, 0, 0.5], + "714": [0, 0.69444, 0, 0, 0.5], + "715": [0, 0.69444, 0, 0, 0.5], + "728": [0, 0.69444, 0, 0, 0.5], + "729": [0, 0.66786, 0, 0, 0.27778], + "730": [0, 0.69444, 0, 0, 0.75], + "732": [0, 0.66786, 0, 0, 0.5], + "733": [0, 0.69444, 0, 0, 0.5], + "915": [0, 0.68333, 0, 0, 0.625], + "916": [0, 0.68333, 0, 0, 0.83334], + "920": [0, 0.68333, 0, 0, 0.77778], + "923": [0, 0.68333, 0, 0, 0.69445], + "926": [0, 0.68333, 0, 0, 0.66667], + "928": [0, 0.68333, 0, 0, 0.75], + "931": [0, 0.68333, 0, 0, 0.72222], + "933": [0, 0.68333, 0, 0, 0.77778], + "934": [0, 0.68333, 0, 0, 0.72222], + "936": [0, 0.68333, 0, 0, 0.77778], + "937": [0, 0.68333, 0, 0, 0.72222], + "8211": [0, 0.43056, 0.02778, 0, 0.5], + "8212": [0, 0.43056, 0.02778, 0, 1.0], + "8216": [0, 0.69444, 0, 0, 0.27778], + "8217": [0, 0.69444, 0, 0, 0.27778], + "8220": [0, 0.69444, 0, 0, 0.5], + "8221": [0, 0.69444, 0, 0, 0.5], + "8224": [0.19444, 0.69444, 0, 0, 0.44445], + "8225": [0.19444, 0.69444, 0, 0, 0.44445], + "8230": [0, 0.123, 0, 0, 1.172], + "8242": [0, 0.55556, 0, 0, 0.275], + "8407": [0, 0.71444, 0.15382, 0, 0.5], + "8463": [0, 0.68889, 0, 0, 0.54028], + "8465": [0, 0.69444, 0, 0, 0.72222], + "8467": [0, 0.69444, 0, 0.11111, 0.41667], + "8472": [0.19444, 0.43056, 0, 0.11111, 0.63646], + "8476": [0, 0.69444, 0, 0, 0.72222], + "8501": [0, 0.69444, 0, 0, 0.61111], + "8592": [-0.13313, 0.36687, 0, 0, 1.0], + "8593": [0.19444, 0.69444, 0, 0, 0.5], + "8594": [-0.13313, 0.36687, 0, 0, 1.0], + "8595": [0.19444, 0.69444, 0, 0, 0.5], + "8596": [-0.13313, 0.36687, 0, 0, 1.0], + "8597": [0.25, 0.75, 0, 0, 0.5], + "8598": [0.19444, 0.69444, 0, 0, 1.0], + "8599": [0.19444, 0.69444, 0, 0, 1.0], + "8600": [0.19444, 0.69444, 0, 0, 1.0], + "8601": [0.19444, 0.69444, 0, 0, 1.0], + "8614": [0.011, 0.511, 0, 0, 1.0], + "8617": [0.011, 0.511, 0, 0, 1.126], + "8618": [0.011, 0.511, 0, 0, 1.126], + "8636": [-0.13313, 0.36687, 0, 0, 1.0], + "8637": [-0.13313, 0.36687, 0, 0, 1.0], + "8640": [-0.13313, 0.36687, 0, 0, 1.0], + "8641": [-0.13313, 0.36687, 0, 0, 1.0], + "8652": [0.011, 0.671, 0, 0, 1.0], + "8656": [-0.13313, 0.36687, 0, 0, 1.0], + "8657": [0.19444, 0.69444, 0, 0, 0.61111], + "8658": [-0.13313, 0.36687, 0, 0, 1.0], + "8659": [0.19444, 0.69444, 0, 0, 0.61111], + "8660": [-0.13313, 0.36687, 0, 0, 1.0], + "8661": [0.25, 0.75, 0, 0, 0.61111], + "8704": [0, 0.69444, 0, 0, 0.55556], + "8706": [0, 0.69444, 0.05556, 0.08334, 0.5309], + "8707": [0, 0.69444, 0, 0, 0.55556], + "8709": [0.05556, 0.75, 0, 0, 0.5], + "8711": [0, 0.68333, 0, 0, 0.83334], + "8712": [0.0391, 0.5391, 0, 0, 0.66667], + "8715": [0.0391, 0.5391, 0, 0, 0.66667], + "8722": [0.08333, 0.58333, 0, 0, 0.77778], + "8723": [0.08333, 0.58333, 0, 0, 0.77778], + "8725": [0.25, 0.75, 0, 0, 0.5], + "8726": [0.25, 0.75, 0, 0, 0.5], + "8727": [-0.03472, 0.46528, 0, 0, 0.5], + "8728": [-0.05555, 0.44445, 0, 0, 0.5], + "8729": [-0.05555, 0.44445, 0, 0, 0.5], + "8730": [0.2, 0.8, 0, 0, 0.83334], + "8733": [0, 0.43056, 0, 0, 0.77778], + "8734": [0, 0.43056, 0, 0, 1.0], + "8736": [0, 0.69224, 0, 0, 0.72222], + "8739": [0.25, 0.75, 0, 0, 0.27778], + "8741": [0.25, 0.75, 0, 0, 0.5], + "8743": [0, 0.55556, 0, 0, 0.66667], + "8744": [0, 0.55556, 0, 0, 0.66667], + "8745": [0, 0.55556, 0, 0, 0.66667], + "8746": [0, 0.55556, 0, 0, 0.66667], + "8747": [0.19444, 0.69444, 0.11111, 0, 0.41667], + "8764": [-0.13313, 0.36687, 0, 0, 0.77778], + "8768": [0.19444, 0.69444, 0, 0, 0.27778], + "8771": [-0.03625, 0.46375, 0, 0, 0.77778], + "8773": [-0.022, 0.589, 0, 0, 0.778], + "8776": [-0.01688, 0.48312, 0, 0, 0.77778], + "8781": [-0.03625, 0.46375, 0, 0, 0.77778], + "8784": [-0.133, 0.673, 0, 0, 0.778], + "8801": [-0.03625, 0.46375, 0, 0, 0.77778], + "8804": [0.13597, 0.63597, 0, 0, 0.77778], + "8805": [0.13597, 0.63597, 0, 0, 0.77778], + "8810": [0.0391, 0.5391, 0, 0, 1.0], + "8811": [0.0391, 0.5391, 0, 0, 1.0], + "8826": [0.0391, 0.5391, 0, 0, 0.77778], + "8827": [0.0391, 0.5391, 0, 0, 0.77778], + "8834": [0.0391, 0.5391, 0, 0, 0.77778], + "8835": [0.0391, 0.5391, 0, 0, 0.77778], + "8838": [0.13597, 0.63597, 0, 0, 0.77778], + "8839": [0.13597, 0.63597, 0, 0, 0.77778], + "8846": [0, 0.55556, 0, 0, 0.66667], + "8849": [0.13597, 0.63597, 0, 0, 0.77778], + "8850": [0.13597, 0.63597, 0, 0, 0.77778], + "8851": [0, 0.55556, 0, 0, 0.66667], + "8852": [0, 0.55556, 0, 0, 0.66667], + "8853": [0.08333, 0.58333, 0, 0, 0.77778], + "8854": [0.08333, 0.58333, 0, 0, 0.77778], + "8855": [0.08333, 0.58333, 0, 0, 0.77778], + "8856": [0.08333, 0.58333, 0, 0, 0.77778], + "8857": [0.08333, 0.58333, 0, 0, 0.77778], + "8866": [0, 0.69444, 0, 0, 0.61111], + "8867": [0, 0.69444, 0, 0, 0.61111], + "8868": [0, 0.69444, 0, 0, 0.77778], + "8869": [0, 0.69444, 0, 0, 0.77778], + "8872": [0.249, 0.75, 0, 0, 0.867], + "8900": [-0.05555, 0.44445, 0, 0, 0.5], + "8901": [-0.05555, 0.44445, 0, 0, 0.27778], + "8902": [-0.03472, 0.46528, 0, 0, 0.5], + "8904": [0.005, 0.505, 0, 0, 0.9], + "8942": [0.03, 0.903, 0, 0, 0.278], + "8943": [-0.19, 0.313, 0, 0, 1.172], + "8945": [-0.1, 0.823, 0, 0, 1.282], + "8968": [0.25, 0.75, 0, 0, 0.44445], + "8969": [0.25, 0.75, 0, 0, 0.44445], + "8970": [0.25, 0.75, 0, 0, 0.44445], + "8971": [0.25, 0.75, 0, 0, 0.44445], + "8994": [-0.14236, 0.35764, 0, 0, 1.0], + "8995": [-0.14236, 0.35764, 0, 0, 1.0], + "9136": [0.244, 0.744, 0, 0, 0.412], + "9137": [0.244, 0.745, 0, 0, 0.412], + "9651": [0.19444, 0.69444, 0, 0, 0.88889], + "9657": [-0.03472, 0.46528, 0, 0, 0.5], + "9661": [0.19444, 0.69444, 0, 0, 0.88889], + "9667": [-0.03472, 0.46528, 0, 0, 0.5], + "9711": [0.19444, 0.69444, 0, 0, 1.0], + "9824": [0.12963, 0.69444, 0, 0, 0.77778], + "9825": [0.12963, 0.69444, 0, 0, 0.77778], + "9826": [0.12963, 0.69444, 0, 0, 0.77778], + "9827": [0.12963, 0.69444, 0, 0, 0.77778], + "9837": [0, 0.75, 0, 0, 0.38889], + "9838": [0.19444, 0.69444, 0, 0, 0.38889], + "9839": [0.19444, 0.69444, 0, 0, 0.38889], + "10216": [0.25, 0.75, 0, 0, 0.38889], + "10217": [0.25, 0.75, 0, 0, 0.38889], + "10222": [0.244, 0.744, 0, 0, 0.412], + "10223": [0.244, 0.745, 0, 0, 0.412], + "10229": [0.011, 0.511, 0, 0, 1.609], + "10230": [0.011, 0.511, 0, 0, 1.638], + "10231": [0.011, 0.511, 0, 0, 1.859], + "10232": [0.024, 0.525, 0, 0, 1.609], + "10233": [0.024, 0.525, 0, 0, 1.638], + "10234": [0.024, 0.525, 0, 0, 1.858], + "10236": [0.011, 0.511, 0, 0, 1.638], + "10815": [0, 0.68333, 0, 0, 0.75], + "10927": [0.13597, 0.63597, 0, 0, 0.77778], + "10928": [0.13597, 0.63597, 0, 0, 0.77778], + "57376": [0.19444, 0.69444, 0, 0, 0] + }, + "Math-BoldItalic": { + "32": [0, 0, 0, 0, 0.25], + "48": [0, 0.44444, 0, 0, 0.575], + "49": [0, 0.44444, 0, 0, 0.575], + "50": [0, 0.44444, 0, 0, 0.575], + "51": [0.19444, 0.44444, 0, 0, 0.575], + "52": [0.19444, 0.44444, 0, 0, 0.575], + "53": [0.19444, 0.44444, 0, 0, 0.575], + "54": [0, 0.64444, 0, 0, 0.575], + "55": [0.19444, 0.44444, 0, 0, 0.575], + "56": [0, 0.64444, 0, 0, 0.575], + "57": [0.19444, 0.44444, 0, 0, 0.575], + "65": [0, 0.68611, 0, 0, 0.86944], + "66": [0, 0.68611, 0.04835, 0, 0.8664], + "67": [0, 0.68611, 0.06979, 0, 0.81694], + "68": [0, 0.68611, 0.03194, 0, 0.93812], + "69": [0, 0.68611, 0.05451, 0, 0.81007], + "70": [0, 0.68611, 0.15972, 0, 0.68889], + "71": [0, 0.68611, 0, 0, 0.88673], + "72": [0, 0.68611, 0.08229, 0, 0.98229], + "73": [0, 0.68611, 0.07778, 0, 0.51111], + "74": [0, 0.68611, 0.10069, 0, 0.63125], + "75": [0, 0.68611, 0.06979, 0, 0.97118], + "76": [0, 0.68611, 0, 0, 0.75555], + "77": [0, 0.68611, 0.11424, 0, 1.14201], + "78": [0, 0.68611, 0.11424, 0, 0.95034], + "79": [0, 0.68611, 0.03194, 0, 0.83666], + "80": [0, 0.68611, 0.15972, 0, 0.72309], + "81": [0.19444, 0.68611, 0, 0, 0.86861], + "82": [0, 0.68611, 0.00421, 0, 0.87235], + "83": [0, 0.68611, 0.05382, 0, 0.69271], + "84": [0, 0.68611, 0.15972, 0, 0.63663], + "85": [0, 0.68611, 0.11424, 0, 0.80027], + "86": [0, 0.68611, 0.25555, 0, 0.67778], + "87": [0, 0.68611, 0.15972, 0, 1.09305], + "88": [0, 0.68611, 0.07778, 0, 0.94722], + "89": [0, 0.68611, 0.25555, 0, 0.67458], + "90": [0, 0.68611, 0.06979, 0, 0.77257], + "97": [0, 0.44444, 0, 0, 0.63287], + "98": [0, 0.69444, 0, 0, 0.52083], + "99": [0, 0.44444, 0, 0, 0.51342], + "100": [0, 0.69444, 0, 0, 0.60972], + "101": [0, 0.44444, 0, 0, 0.55361], + "102": [0.19444, 0.69444, 0.11042, 0, 0.56806], + "103": [0.19444, 0.44444, 0.03704, 0, 0.5449], + "104": [0, 0.69444, 0, 0, 0.66759], + "105": [0, 0.69326, 0, 0, 0.4048], + "106": [0.19444, 0.69326, 0.0622, 0, 0.47083], + "107": [0, 0.69444, 0.01852, 0, 0.6037], + "108": [0, 0.69444, 0.0088, 0, 0.34815], + "109": [0, 0.44444, 0, 0, 1.0324], + "110": [0, 0.44444, 0, 0, 0.71296], + "111": [0, 0.44444, 0, 0, 0.58472], + "112": [0.19444, 0.44444, 0, 0, 0.60092], + "113": [0.19444, 0.44444, 0.03704, 0, 0.54213], + "114": [0, 0.44444, 0.03194, 0, 0.5287], + "115": [0, 0.44444, 0, 0, 0.53125], + "116": [0, 0.63492, 0, 0, 0.41528], + "117": [0, 0.44444, 0, 0, 0.68102], + "118": [0, 0.44444, 0.03704, 0, 0.56666], + "119": [0, 0.44444, 0.02778, 0, 0.83148], + "120": [0, 0.44444, 0, 0, 0.65903], + "121": [0.19444, 0.44444, 0.03704, 0, 0.59028], + "122": [0, 0.44444, 0.04213, 0, 0.55509], + "160": [0, 0, 0, 0, 0.25], + "915": [0, 0.68611, 0.15972, 0, 0.65694], + "916": [0, 0.68611, 0, 0, 0.95833], + "920": [0, 0.68611, 0.03194, 0, 0.86722], + "923": [0, 0.68611, 0, 0, 0.80555], + "926": [0, 0.68611, 0.07458, 0, 0.84125], + "928": [0, 0.68611, 0.08229, 0, 0.98229], + "931": [0, 0.68611, 0.05451, 0, 0.88507], + "933": [0, 0.68611, 0.15972, 0, 0.67083], + "934": [0, 0.68611, 0, 0, 0.76666], + "936": [0, 0.68611, 0.11653, 0, 0.71402], + "937": [0, 0.68611, 0.04835, 0, 0.8789], + "945": [0, 0.44444, 0, 0, 0.76064], + "946": [0.19444, 0.69444, 0.03403, 0, 0.65972], + "947": [0.19444, 0.44444, 0.06389, 0, 0.59003], + "948": [0, 0.69444, 0.03819, 0, 0.52222], + "949": [0, 0.44444, 0, 0, 0.52882], + "950": [0.19444, 0.69444, 0.06215, 0, 0.50833], + "951": [0.19444, 0.44444, 0.03704, 0, 0.6], + "952": [0, 0.69444, 0.03194, 0, 0.5618], + "953": [0, 0.44444, 0, 0, 0.41204], + "954": [0, 0.44444, 0, 0, 0.66759], + "955": [0, 0.69444, 0, 0, 0.67083], + "956": [0.19444, 0.44444, 0, 0, 0.70787], + "957": [0, 0.44444, 0.06898, 0, 0.57685], + "958": [0.19444, 0.69444, 0.03021, 0, 0.50833], + "959": [0, 0.44444, 0, 0, 0.58472], + "960": [0, 0.44444, 0.03704, 0, 0.68241], + "961": [0.19444, 0.44444, 0, 0, 0.6118], + "962": [0.09722, 0.44444, 0.07917, 0, 0.42361], + "963": [0, 0.44444, 0.03704, 0, 0.68588], + "964": [0, 0.44444, 0.13472, 0, 0.52083], + "965": [0, 0.44444, 0.03704, 0, 0.63055], + "966": [0.19444, 0.44444, 0, 0, 0.74722], + "967": [0.19444, 0.44444, 0, 0, 0.71805], + "968": [0.19444, 0.69444, 0.03704, 0, 0.75833], + "969": [0, 0.44444, 0.03704, 0, 0.71782], + "977": [0, 0.69444, 0, 0, 0.69155], + "981": [0.19444, 0.69444, 0, 0, 0.7125], + "982": [0, 0.44444, 0.03194, 0, 0.975], + "1009": [0.19444, 0.44444, 0, 0, 0.6118], + "1013": [0, 0.44444, 0, 0, 0.48333], + "57649": [0, 0.44444, 0, 0, 0.39352], + "57911": [0.19444, 0.44444, 0, 0, 0.43889] + }, + "Math-Italic": { + "32": [0, 0, 0, 0, 0.25], + "48": [0, 0.43056, 0, 0, 0.5], + "49": [0, 0.43056, 0, 0, 0.5], + "50": [0, 0.43056, 0, 0, 0.5], + "51": [0.19444, 0.43056, 0, 0, 0.5], + "52": [0.19444, 0.43056, 0, 0, 0.5], + "53": [0.19444, 0.43056, 0, 0, 0.5], + "54": [0, 0.64444, 0, 0, 0.5], + "55": [0.19444, 0.43056, 0, 0, 0.5], + "56": [0, 0.64444, 0, 0, 0.5], + "57": [0.19444, 0.43056, 0, 0, 0.5], + "65": [0, 0.68333, 0, 0.13889, 0.75], + "66": [0, 0.68333, 0.05017, 0.08334, 0.75851], + "67": [0, 0.68333, 0.07153, 0.08334, 0.71472], + "68": [0, 0.68333, 0.02778, 0.05556, 0.82792], + "69": [0, 0.68333, 0.05764, 0.08334, 0.7382], + "70": [0, 0.68333, 0.13889, 0.08334, 0.64306], + "71": [0, 0.68333, 0, 0.08334, 0.78625], + "72": [0, 0.68333, 0.08125, 0.05556, 0.83125], + "73": [0, 0.68333, 0.07847, 0.11111, 0.43958], + "74": [0, 0.68333, 0.09618, 0.16667, 0.55451], + "75": [0, 0.68333, 0.07153, 0.05556, 0.84931], + "76": [0, 0.68333, 0, 0.02778, 0.68056], + "77": [0, 0.68333, 0.10903, 0.08334, 0.97014], + "78": [0, 0.68333, 0.10903, 0.08334, 0.80347], + "79": [0, 0.68333, 0.02778, 0.08334, 0.76278], + "80": [0, 0.68333, 0.13889, 0.08334, 0.64201], + "81": [0.19444, 0.68333, 0, 0.08334, 0.79056], + "82": [0, 0.68333, 0.00773, 0.08334, 0.75929], + "83": [0, 0.68333, 0.05764, 0.08334, 0.6132], + "84": [0, 0.68333, 0.13889, 0.08334, 0.58438], + "85": [0, 0.68333, 0.10903, 0.02778, 0.68278], + "86": [0, 0.68333, 0.22222, 0, 0.58333], + "87": [0, 0.68333, 0.13889, 0, 0.94445], + "88": [0, 0.68333, 0.07847, 0.08334, 0.82847], + "89": [0, 0.68333, 0.22222, 0, 0.58056], + "90": [0, 0.68333, 0.07153, 0.08334, 0.68264], + "97": [0, 0.43056, 0, 0, 0.52859], + "98": [0, 0.69444, 0, 0, 0.42917], + "99": [0, 0.43056, 0, 0.05556, 0.43276], + "100": [0, 0.69444, 0, 0.16667, 0.52049], + "101": [0, 0.43056, 0, 0.05556, 0.46563], + "102": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959], + "103": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697], + "104": [0, 0.69444, 0, 0, 0.57616], + "105": [0, 0.65952, 0, 0, 0.34451], + "106": [0.19444, 0.65952, 0.05724, 0, 0.41181], + "107": [0, 0.69444, 0.03148, 0, 0.5206], + "108": [0, 0.69444, 0.01968, 0.08334, 0.29838], + "109": [0, 0.43056, 0, 0, 0.87801], + "110": [0, 0.43056, 0, 0, 0.60023], + "111": [0, 0.43056, 0, 0.05556, 0.48472], + "112": [0.19444, 0.43056, 0, 0.08334, 0.50313], + "113": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641], + "114": [0, 0.43056, 0.02778, 0.05556, 0.45116], + "115": [0, 0.43056, 0, 0.05556, 0.46875], + "116": [0, 0.61508, 0, 0.08334, 0.36111], + "117": [0, 0.43056, 0, 0.02778, 0.57246], + "118": [0, 0.43056, 0.03588, 0.02778, 0.48472], + "119": [0, 0.43056, 0.02691, 0.08334, 0.71592], + "120": [0, 0.43056, 0, 0.02778, 0.57153], + "121": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028], + "122": [0, 0.43056, 0.04398, 0.05556, 0.46505], + "160": [0, 0, 0, 0, 0.25], + "915": [0, 0.68333, 0.13889, 0.08334, 0.61528], + "916": [0, 0.68333, 0, 0.16667, 0.83334], + "920": [0, 0.68333, 0.02778, 0.08334, 0.76278], + "923": [0, 0.68333, 0, 0.16667, 0.69445], + "926": [0, 0.68333, 0.07569, 0.08334, 0.74236], + "928": [0, 0.68333, 0.08125, 0.05556, 0.83125], + "931": [0, 0.68333, 0.05764, 0.08334, 0.77986], + "933": [0, 0.68333, 0.13889, 0.05556, 0.58333], + "934": [0, 0.68333, 0, 0.08334, 0.66667], + "936": [0, 0.68333, 0.11, 0.05556, 0.61222], + "937": [0, 0.68333, 0.05017, 0.08334, 0.7724], + "945": [0, 0.43056, 0.0037, 0.02778, 0.6397], + "946": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563], + "947": [0.19444, 0.43056, 0.05556, 0, 0.51773], + "948": [0, 0.69444, 0.03785, 0.05556, 0.44444], + "949": [0, 0.43056, 0, 0.08334, 0.46632], + "950": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375], + "951": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653], + "952": [0, 0.69444, 0.02778, 0.08334, 0.46944], + "953": [0, 0.43056, 0, 0.05556, 0.35394], + "954": [0, 0.43056, 0, 0, 0.57616], + "955": [0, 0.69444, 0, 0, 0.58334], + "956": [0.19444, 0.43056, 0, 0.02778, 0.60255], + "957": [0, 0.43056, 0.06366, 0.02778, 0.49398], + "958": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375], + "959": [0, 0.43056, 0, 0.05556, 0.48472], + "960": [0, 0.43056, 0.03588, 0, 0.57003], + "961": [0.19444, 0.43056, 0, 0.08334, 0.51702], + "962": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285], + "963": [0, 0.43056, 0.03588, 0, 0.57141], + "964": [0, 0.43056, 0.1132, 0.02778, 0.43715], + "965": [0, 0.43056, 0.03588, 0.02778, 0.54028], + "966": [0.19444, 0.43056, 0, 0.08334, 0.65417], + "967": [0.19444, 0.43056, 0, 0.05556, 0.62569], + "968": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139], + "969": [0, 0.43056, 0.03588, 0, 0.62245], + "977": [0, 0.69444, 0, 0.08334, 0.59144], + "981": [0.19444, 0.69444, 0, 0.08334, 0.59583], + "982": [0, 0.43056, 0.02778, 0, 0.82813], + "1009": [0.19444, 0.43056, 0, 0.08334, 0.51702], + "1013": [0, 0.43056, 0, 0.05556, 0.4059], + "57649": [0, 0.43056, 0, 0.02778, 0.32246], + "57911": [0.19444, 0.43056, 0, 0.08334, 0.38403] + }, + "SansSerif-Bold": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0, 0, 0.36667], + "34": [0, 0.69444, 0, 0, 0.55834], + "35": [0.19444, 0.69444, 0, 0, 0.91667], + "36": [0.05556, 0.75, 0, 0, 0.55], + "37": [0.05556, 0.75, 0, 0, 1.02912], + "38": [0, 0.69444, 0, 0, 0.83056], + "39": [0, 0.69444, 0, 0, 0.30556], + "40": [0.25, 0.75, 0, 0, 0.42778], + "41": [0.25, 0.75, 0, 0, 0.42778], + "42": [0, 0.75, 0, 0, 0.55], + "43": [0.11667, 0.61667, 0, 0, 0.85556], + "44": [0.10556, 0.13056, 0, 0, 0.30556], + "45": [0, 0.45833, 0, 0, 0.36667], + "46": [0, 0.13056, 0, 0, 0.30556], + "47": [0.25, 0.75, 0, 0, 0.55], + "48": [0, 0.69444, 0, 0, 0.55], + "49": [0, 0.69444, 0, 0, 0.55], + "50": [0, 0.69444, 0, 0, 0.55], + "51": [0, 0.69444, 0, 0, 0.55], + "52": [0, 0.69444, 0, 0, 0.55], + "53": [0, 0.69444, 0, 0, 0.55], + "54": [0, 0.69444, 0, 0, 0.55], + "55": [0, 0.69444, 0, 0, 0.55], + "56": [0, 0.69444, 0, 0, 0.55], + "57": [0, 0.69444, 0, 0, 0.55], + "58": [0, 0.45833, 0, 0, 0.30556], + "59": [0.10556, 0.45833, 0, 0, 0.30556], + "61": [-0.09375, 0.40625, 0, 0, 0.85556], + "63": [0, 0.69444, 0, 0, 0.51945], + "64": [0, 0.69444, 0, 0, 0.73334], + "65": [0, 0.69444, 0, 0, 0.73334], + "66": [0, 0.69444, 0, 0, 0.73334], + "67": [0, 0.69444, 0, 0, 0.70278], + "68": [0, 0.69444, 0, 0, 0.79445], + "69": [0, 0.69444, 0, 0, 0.64167], + "70": [0, 0.69444, 0, 0, 0.61111], + "71": [0, 0.69444, 0, 0, 0.73334], + "72": [0, 0.69444, 0, 0, 0.79445], + "73": [0, 0.69444, 0, 0, 0.33056], + "74": [0, 0.69444, 0, 0, 0.51945], + "75": [0, 0.69444, 0, 0, 0.76389], + "76": [0, 0.69444, 0, 0, 0.58056], + "77": [0, 0.69444, 0, 0, 0.97778], + "78": [0, 0.69444, 0, 0, 0.79445], + "79": [0, 0.69444, 0, 0, 0.79445], + "80": [0, 0.69444, 0, 0, 0.70278], + "81": [0.10556, 0.69444, 0, 0, 0.79445], + "82": [0, 0.69444, 0, 0, 0.70278], + "83": [0, 0.69444, 0, 0, 0.61111], + "84": [0, 0.69444, 0, 0, 0.73334], + "85": [0, 0.69444, 0, 0, 0.76389], + "86": [0, 0.69444, 0.01528, 0, 0.73334], + "87": [0, 0.69444, 0.01528, 0, 1.03889], + "88": [0, 0.69444, 0, 0, 0.73334], + "89": [0, 0.69444, 0.0275, 0, 0.73334], + "90": [0, 0.69444, 0, 0, 0.67223], + "91": [0.25, 0.75, 0, 0, 0.34306], + "93": [0.25, 0.75, 0, 0, 0.34306], + "94": [0, 0.69444, 0, 0, 0.55], + "95": [0.35, 0.10833, 0.03056, 0, 0.55], + "97": [0, 0.45833, 0, 0, 0.525], + "98": [0, 0.69444, 0, 0, 0.56111], + "99": [0, 0.45833, 0, 0, 0.48889], + "100": [0, 0.69444, 0, 0, 0.56111], + "101": [0, 0.45833, 0, 0, 0.51111], + "102": [0, 0.69444, 0.07639, 0, 0.33611], + "103": [0.19444, 0.45833, 0.01528, 0, 0.55], + "104": [0, 0.69444, 0, 0, 0.56111], + "105": [0, 0.69444, 0, 0, 0.25556], + "106": [0.19444, 0.69444, 0, 0, 0.28611], + "107": [0, 0.69444, 0, 0, 0.53056], + "108": [0, 0.69444, 0, 0, 0.25556], + "109": [0, 0.45833, 0, 0, 0.86667], + "110": [0, 0.45833, 0, 0, 0.56111], + "111": [0, 0.45833, 0, 0, 0.55], + "112": [0.19444, 0.45833, 0, 0, 0.56111], + "113": [0.19444, 0.45833, 0, 0, 0.56111], + "114": [0, 0.45833, 0.01528, 0, 0.37222], + "115": [0, 0.45833, 0, 0, 0.42167], + "116": [0, 0.58929, 0, 0, 0.40417], + "117": [0, 0.45833, 0, 0, 0.56111], + "118": [0, 0.45833, 0.01528, 0, 0.5], + "119": [0, 0.45833, 0.01528, 0, 0.74445], + "120": [0, 0.45833, 0, 0, 0.5], + "121": [0.19444, 0.45833, 0.01528, 0, 0.5], + "122": [0, 0.45833, 0, 0, 0.47639], + "126": [0.35, 0.34444, 0, 0, 0.55], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.69444, 0, 0, 0.55], + "176": [0, 0.69444, 0, 0, 0.73334], + "180": [0, 0.69444, 0, 0, 0.55], + "184": [0.17014, 0, 0, 0, 0.48889], + "305": [0, 0.45833, 0, 0, 0.25556], + "567": [0.19444, 0.45833, 0, 0, 0.28611], + "710": [0, 0.69444, 0, 0, 0.55], + "711": [0, 0.63542, 0, 0, 0.55], + "713": [0, 0.63778, 0, 0, 0.55], + "728": [0, 0.69444, 0, 0, 0.55], + "729": [0, 0.69444, 0, 0, 0.30556], + "730": [0, 0.69444, 0, 0, 0.73334], + "732": [0, 0.69444, 0, 0, 0.55], + "733": [0, 0.69444, 0, 0, 0.55], + "915": [0, 0.69444, 0, 0, 0.58056], + "916": [0, 0.69444, 0, 0, 0.91667], + "920": [0, 0.69444, 0, 0, 0.85556], + "923": [0, 0.69444, 0, 0, 0.67223], + "926": [0, 0.69444, 0, 0, 0.73334], + "928": [0, 0.69444, 0, 0, 0.79445], + "931": [0, 0.69444, 0, 0, 0.79445], + "933": [0, 0.69444, 0, 0, 0.85556], + "934": [0, 0.69444, 0, 0, 0.79445], + "936": [0, 0.69444, 0, 0, 0.85556], + "937": [0, 0.69444, 0, 0, 0.79445], + "8211": [0, 0.45833, 0.03056, 0, 0.55], + "8212": [0, 0.45833, 0.03056, 0, 1.10001], + "8216": [0, 0.69444, 0, 0, 0.30556], + "8217": [0, 0.69444, 0, 0, 0.30556], + "8220": [0, 0.69444, 0, 0, 0.55834], + "8221": [0, 0.69444, 0, 0, 0.55834] + }, + "SansSerif-Italic": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0.05733, 0, 0.31945], + "34": [0, 0.69444, 0.00316, 0, 0.5], + "35": [0.19444, 0.69444, 0.05087, 0, 0.83334], + "36": [0.05556, 0.75, 0.11156, 0, 0.5], + "37": [0.05556, 0.75, 0.03126, 0, 0.83334], + "38": [0, 0.69444, 0.03058, 0, 0.75834], + "39": [0, 0.69444, 0.07816, 0, 0.27778], + "40": [0.25, 0.75, 0.13164, 0, 0.38889], + "41": [0.25, 0.75, 0.02536, 0, 0.38889], + "42": [0, 0.75, 0.11775, 0, 0.5], + "43": [0.08333, 0.58333, 0.02536, 0, 0.77778], + "44": [0.125, 0.08333, 0, 0, 0.27778], + "45": [0, 0.44444, 0.01946, 0, 0.33333], + "46": [0, 0.08333, 0, 0, 0.27778], + "47": [0.25, 0.75, 0.13164, 0, 0.5], + "48": [0, 0.65556, 0.11156, 0, 0.5], + "49": [0, 0.65556, 0.11156, 0, 0.5], + "50": [0, 0.65556, 0.11156, 0, 0.5], + "51": [0, 0.65556, 0.11156, 0, 0.5], + "52": [0, 0.65556, 0.11156, 0, 0.5], + "53": [0, 0.65556, 0.11156, 0, 0.5], + "54": [0, 0.65556, 0.11156, 0, 0.5], + "55": [0, 0.65556, 0.11156, 0, 0.5], + "56": [0, 0.65556, 0.11156, 0, 0.5], + "57": [0, 0.65556, 0.11156, 0, 0.5], + "58": [0, 0.44444, 0.02502, 0, 0.27778], + "59": [0.125, 0.44444, 0.02502, 0, 0.27778], + "61": [-0.13, 0.37, 0.05087, 0, 0.77778], + "63": [0, 0.69444, 0.11809, 0, 0.47222], + "64": [0, 0.69444, 0.07555, 0, 0.66667], + "65": [0, 0.69444, 0, 0, 0.66667], + "66": [0, 0.69444, 0.08293, 0, 0.66667], + "67": [0, 0.69444, 0.11983, 0, 0.63889], + "68": [0, 0.69444, 0.07555, 0, 0.72223], + "69": [0, 0.69444, 0.11983, 0, 0.59722], + "70": [0, 0.69444, 0.13372, 0, 0.56945], + "71": [0, 0.69444, 0.11983, 0, 0.66667], + "72": [0, 0.69444, 0.08094, 0, 0.70834], + "73": [0, 0.69444, 0.13372, 0, 0.27778], + "74": [0, 0.69444, 0.08094, 0, 0.47222], + "75": [0, 0.69444, 0.11983, 0, 0.69445], + "76": [0, 0.69444, 0, 0, 0.54167], + "77": [0, 0.69444, 0.08094, 0, 0.875], + "78": [0, 0.69444, 0.08094, 0, 0.70834], + "79": [0, 0.69444, 0.07555, 0, 0.73611], + "80": [0, 0.69444, 0.08293, 0, 0.63889], + "81": [0.125, 0.69444, 0.07555, 0, 0.73611], + "82": [0, 0.69444, 0.08293, 0, 0.64584], + "83": [0, 0.69444, 0.09205, 0, 0.55556], + "84": [0, 0.69444, 0.13372, 0, 0.68056], + "85": [0, 0.69444, 0.08094, 0, 0.6875], + "86": [0, 0.69444, 0.1615, 0, 0.66667], + "87": [0, 0.69444, 0.1615, 0, 0.94445], + "88": [0, 0.69444, 0.13372, 0, 0.66667], + "89": [0, 0.69444, 0.17261, 0, 0.66667], + "90": [0, 0.69444, 0.11983, 0, 0.61111], + "91": [0.25, 0.75, 0.15942, 0, 0.28889], + "93": [0.25, 0.75, 0.08719, 0, 0.28889], + "94": [0, 0.69444, 0.0799, 0, 0.5], + "95": [0.35, 0.09444, 0.08616, 0, 0.5], + "97": [0, 0.44444, 0.00981, 0, 0.48056], + "98": [0, 0.69444, 0.03057, 0, 0.51667], + "99": [0, 0.44444, 0.08336, 0, 0.44445], + "100": [0, 0.69444, 0.09483, 0, 0.51667], + "101": [0, 0.44444, 0.06778, 0, 0.44445], + "102": [0, 0.69444, 0.21705, 0, 0.30556], + "103": [0.19444, 0.44444, 0.10836, 0, 0.5], + "104": [0, 0.69444, 0.01778, 0, 0.51667], + "105": [0, 0.67937, 0.09718, 0, 0.23889], + "106": [0.19444, 0.67937, 0.09162, 0, 0.26667], + "107": [0, 0.69444, 0.08336, 0, 0.48889], + "108": [0, 0.69444, 0.09483, 0, 0.23889], + "109": [0, 0.44444, 0.01778, 0, 0.79445], + "110": [0, 0.44444, 0.01778, 0, 0.51667], + "111": [0, 0.44444, 0.06613, 0, 0.5], + "112": [0.19444, 0.44444, 0.0389, 0, 0.51667], + "113": [0.19444, 0.44444, 0.04169, 0, 0.51667], + "114": [0, 0.44444, 0.10836, 0, 0.34167], + "115": [0, 0.44444, 0.0778, 0, 0.38333], + "116": [0, 0.57143, 0.07225, 0, 0.36111], + "117": [0, 0.44444, 0.04169, 0, 0.51667], + "118": [0, 0.44444, 0.10836, 0, 0.46111], + "119": [0, 0.44444, 0.10836, 0, 0.68334], + "120": [0, 0.44444, 0.09169, 0, 0.46111], + "121": [0.19444, 0.44444, 0.10836, 0, 0.46111], + "122": [0, 0.44444, 0.08752, 0, 0.43472], + "126": [0.35, 0.32659, 0.08826, 0, 0.5], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.67937, 0.06385, 0, 0.5], + "176": [0, 0.69444, 0, 0, 0.73752], + "184": [0.17014, 0, 0, 0, 0.44445], + "305": [0, 0.44444, 0.04169, 0, 0.23889], + "567": [0.19444, 0.44444, 0.04169, 0, 0.26667], + "710": [0, 0.69444, 0.0799, 0, 0.5], + "711": [0, 0.63194, 0.08432, 0, 0.5], + "713": [0, 0.60889, 0.08776, 0, 0.5], + "714": [0, 0.69444, 0.09205, 0, 0.5], + "715": [0, 0.69444, 0, 0, 0.5], + "728": [0, 0.69444, 0.09483, 0, 0.5], + "729": [0, 0.67937, 0.07774, 0, 0.27778], + "730": [0, 0.69444, 0, 0, 0.73752], + "732": [0, 0.67659, 0.08826, 0, 0.5], + "733": [0, 0.69444, 0.09205, 0, 0.5], + "915": [0, 0.69444, 0.13372, 0, 0.54167], + "916": [0, 0.69444, 0, 0, 0.83334], + "920": [0, 0.69444, 0.07555, 0, 0.77778], + "923": [0, 0.69444, 0, 0, 0.61111], + "926": [0, 0.69444, 0.12816, 0, 0.66667], + "928": [0, 0.69444, 0.08094, 0, 0.70834], + "931": [0, 0.69444, 0.11983, 0, 0.72222], + "933": [0, 0.69444, 0.09031, 0, 0.77778], + "934": [0, 0.69444, 0.04603, 0, 0.72222], + "936": [0, 0.69444, 0.09031, 0, 0.77778], + "937": [0, 0.69444, 0.08293, 0, 0.72222], + "8211": [0, 0.44444, 0.08616, 0, 0.5], + "8212": [0, 0.44444, 0.08616, 0, 1.0], + "8216": [0, 0.69444, 0.07816, 0, 0.27778], + "8217": [0, 0.69444, 0.07816, 0, 0.27778], + "8220": [0, 0.69444, 0.14205, 0, 0.5], + "8221": [0, 0.69444, 0.00316, 0, 0.5] + }, + "SansSerif-Regular": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0, 0, 0.31945], + "34": [0, 0.69444, 0, 0, 0.5], + "35": [0.19444, 0.69444, 0, 0, 0.83334], + "36": [0.05556, 0.75, 0, 0, 0.5], + "37": [0.05556, 0.75, 0, 0, 0.83334], + "38": [0, 0.69444, 0, 0, 0.75834], + "39": [0, 0.69444, 0, 0, 0.27778], + "40": [0.25, 0.75, 0, 0, 0.38889], + "41": [0.25, 0.75, 0, 0, 0.38889], + "42": [0, 0.75, 0, 0, 0.5], + "43": [0.08333, 0.58333, 0, 0, 0.77778], + "44": [0.125, 0.08333, 0, 0, 0.27778], + "45": [0, 0.44444, 0, 0, 0.33333], + "46": [0, 0.08333, 0, 0, 0.27778], + "47": [0.25, 0.75, 0, 0, 0.5], + "48": [0, 0.65556, 0, 0, 0.5], + "49": [0, 0.65556, 0, 0, 0.5], + "50": [0, 0.65556, 0, 0, 0.5], + "51": [0, 0.65556, 0, 0, 0.5], + "52": [0, 0.65556, 0, 0, 0.5], + "53": [0, 0.65556, 0, 0, 0.5], + "54": [0, 0.65556, 0, 0, 0.5], + "55": [0, 0.65556, 0, 0, 0.5], + "56": [0, 0.65556, 0, 0, 0.5], + "57": [0, 0.65556, 0, 0, 0.5], + "58": [0, 0.44444, 0, 0, 0.27778], + "59": [0.125, 0.44444, 0, 0, 0.27778], + "61": [-0.13, 0.37, 0, 0, 0.77778], + "63": [0, 0.69444, 0, 0, 0.47222], + "64": [0, 0.69444, 0, 0, 0.66667], + "65": [0, 0.69444, 0, 0, 0.66667], + "66": [0, 0.69444, 0, 0, 0.66667], + "67": [0, 0.69444, 0, 0, 0.63889], + "68": [0, 0.69444, 0, 0, 0.72223], + "69": [0, 0.69444, 0, 0, 0.59722], + "70": [0, 0.69444, 0, 0, 0.56945], + "71": [0, 0.69444, 0, 0, 0.66667], + "72": [0, 0.69444, 0, 0, 0.70834], + "73": [0, 0.69444, 0, 0, 0.27778], + "74": [0, 0.69444, 0, 0, 0.47222], + "75": [0, 0.69444, 0, 0, 0.69445], + "76": [0, 0.69444, 0, 0, 0.54167], + "77": [0, 0.69444, 0, 0, 0.875], + "78": [0, 0.69444, 0, 0, 0.70834], + "79": [0, 0.69444, 0, 0, 0.73611], + "80": [0, 0.69444, 0, 0, 0.63889], + "81": [0.125, 0.69444, 0, 0, 0.73611], + "82": [0, 0.69444, 0, 0, 0.64584], + "83": [0, 0.69444, 0, 0, 0.55556], + "84": [0, 0.69444, 0, 0, 0.68056], + "85": [0, 0.69444, 0, 0, 0.6875], + "86": [0, 0.69444, 0.01389, 0, 0.66667], + "87": [0, 0.69444, 0.01389, 0, 0.94445], + "88": [0, 0.69444, 0, 0, 0.66667], + "89": [0, 0.69444, 0.025, 0, 0.66667], + "90": [0, 0.69444, 0, 0, 0.61111], + "91": [0.25, 0.75, 0, 0, 0.28889], + "93": [0.25, 0.75, 0, 0, 0.28889], + "94": [0, 0.69444, 0, 0, 0.5], + "95": [0.35, 0.09444, 0.02778, 0, 0.5], + "97": [0, 0.44444, 0, 0, 0.48056], + "98": [0, 0.69444, 0, 0, 0.51667], + "99": [0, 0.44444, 0, 0, 0.44445], + "100": [0, 0.69444, 0, 0, 0.51667], + "101": [0, 0.44444, 0, 0, 0.44445], + "102": [0, 0.69444, 0.06944, 0, 0.30556], + "103": [0.19444, 0.44444, 0.01389, 0, 0.5], + "104": [0, 0.69444, 0, 0, 0.51667], + "105": [0, 0.67937, 0, 0, 0.23889], + "106": [0.19444, 0.67937, 0, 0, 0.26667], + "107": [0, 0.69444, 0, 0, 0.48889], + "108": [0, 0.69444, 0, 0, 0.23889], + "109": [0, 0.44444, 0, 0, 0.79445], + "110": [0, 0.44444, 0, 0, 0.51667], + "111": [0, 0.44444, 0, 0, 0.5], + "112": [0.19444, 0.44444, 0, 0, 0.51667], + "113": [0.19444, 0.44444, 0, 0, 0.51667], + "114": [0, 0.44444, 0.01389, 0, 0.34167], + "115": [0, 0.44444, 0, 0, 0.38333], + "116": [0, 0.57143, 0, 0, 0.36111], + "117": [0, 0.44444, 0, 0, 0.51667], + "118": [0, 0.44444, 0.01389, 0, 0.46111], + "119": [0, 0.44444, 0.01389, 0, 0.68334], + "120": [0, 0.44444, 0, 0, 0.46111], + "121": [0.19444, 0.44444, 0.01389, 0, 0.46111], + "122": [0, 0.44444, 0, 0, 0.43472], + "126": [0.35, 0.32659, 0, 0, 0.5], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.67937, 0, 0, 0.5], + "176": [0, 0.69444, 0, 0, 0.66667], + "184": [0.17014, 0, 0, 0, 0.44445], + "305": [0, 0.44444, 0, 0, 0.23889], + "567": [0.19444, 0.44444, 0, 0, 0.26667], + "710": [0, 0.69444, 0, 0, 0.5], + "711": [0, 0.63194, 0, 0, 0.5], + "713": [0, 0.60889, 0, 0, 0.5], + "714": [0, 0.69444, 0, 0, 0.5], + "715": [0, 0.69444, 0, 0, 0.5], + "728": [0, 0.69444, 0, 0, 0.5], + "729": [0, 0.67937, 0, 0, 0.27778], + "730": [0, 0.69444, 0, 0, 0.66667], + "732": [0, 0.67659, 0, 0, 0.5], + "733": [0, 0.69444, 0, 0, 0.5], + "915": [0, 0.69444, 0, 0, 0.54167], + "916": [0, 0.69444, 0, 0, 0.83334], + "920": [0, 0.69444, 0, 0, 0.77778], + "923": [0, 0.69444, 0, 0, 0.61111], + "926": [0, 0.69444, 0, 0, 0.66667], + "928": [0, 0.69444, 0, 0, 0.70834], + "931": [0, 0.69444, 0, 0, 0.72222], + "933": [0, 0.69444, 0, 0, 0.77778], + "934": [0, 0.69444, 0, 0, 0.72222], + "936": [0, 0.69444, 0, 0, 0.77778], + "937": [0, 0.69444, 0, 0, 0.72222], + "8211": [0, 0.44444, 0.02778, 0, 0.5], + "8212": [0, 0.44444, 0.02778, 0, 1.0], + "8216": [0, 0.69444, 0, 0, 0.27778], + "8217": [0, 0.69444, 0, 0, 0.27778], + "8220": [0, 0.69444, 0, 0, 0.5], + "8221": [0, 0.69444, 0, 0, 0.5] + }, + "Script-Regular": { + "32": [0, 0, 0, 0, 0.25], + "65": [0, 0.7, 0.22925, 0, 0.80253], + "66": [0, 0.7, 0.04087, 0, 0.90757], + "67": [0, 0.7, 0.1689, 0, 0.66619], + "68": [0, 0.7, 0.09371, 0, 0.77443], + "69": [0, 0.7, 0.18583, 0, 0.56162], + "70": [0, 0.7, 0.13634, 0, 0.89544], + "71": [0, 0.7, 0.17322, 0, 0.60961], + "72": [0, 0.7, 0.29694, 0, 0.96919], + "73": [0, 0.7, 0.19189, 0, 0.80907], + "74": [0.27778, 0.7, 0.19189, 0, 1.05159], + "75": [0, 0.7, 0.31259, 0, 0.91364], + "76": [0, 0.7, 0.19189, 0, 0.87373], + "77": [0, 0.7, 0.15981, 0, 1.08031], + "78": [0, 0.7, 0.3525, 0, 0.9015], + "79": [0, 0.7, 0.08078, 0, 0.73787], + "80": [0, 0.7, 0.08078, 0, 1.01262], + "81": [0, 0.7, 0.03305, 0, 0.88282], + "82": [0, 0.7, 0.06259, 0, 0.85], + "83": [0, 0.7, 0.19189, 0, 0.86767], + "84": [0, 0.7, 0.29087, 0, 0.74697], + "85": [0, 0.7, 0.25815, 0, 0.79996], + "86": [0, 0.7, 0.27523, 0, 0.62204], + "87": [0, 0.7, 0.27523, 0, 0.80532], + "88": [0, 0.7, 0.26006, 0, 0.94445], + "89": [0, 0.7, 0.2939, 0, 0.70961], + "90": [0, 0.7, 0.24037, 0, 0.8212], + "160": [0, 0, 0, 0, 0.25] + }, + "Size1-Regular": { + "32": [0, 0, 0, 0, 0.25], + "40": [0.35001, 0.85, 0, 0, 0.45834], + "41": [0.35001, 0.85, 0, 0, 0.45834], + "47": [0.35001, 0.85, 0, 0, 0.57778], + "91": [0.35001, 0.85, 0, 0, 0.41667], + "92": [0.35001, 0.85, 0, 0, 0.57778], + "93": [0.35001, 0.85, 0, 0, 0.41667], + "123": [0.35001, 0.85, 0, 0, 0.58334], + "125": [0.35001, 0.85, 0, 0, 0.58334], + "160": [0, 0, 0, 0, 0.25], + "710": [0, 0.72222, 0, 0, 0.55556], + "732": [0, 0.72222, 0, 0, 0.55556], + "770": [0, 0.72222, 0, 0, 0.55556], + "771": [0, 0.72222, 0, 0, 0.55556], + "8214": [-0.00099, 0.601, 0, 0, 0.77778], + "8593": [1e-05, 0.6, 0, 0, 0.66667], + "8595": [1e-05, 0.6, 0, 0, 0.66667], + "8657": [1e-05, 0.6, 0, 0, 0.77778], + "8659": [1e-05, 0.6, 0, 0, 0.77778], + "8719": [0.25001, 0.75, 0, 0, 0.94445], + "8720": [0.25001, 0.75, 0, 0, 0.94445], + "8721": [0.25001, 0.75, 0, 0, 1.05556], + "8730": [0.35001, 0.85, 0, 0, 1.0], + "8739": [-0.00599, 0.606, 0, 0, 0.33333], + "8741": [-0.00599, 0.606, 0, 0, 0.55556], + "8747": [0.30612, 0.805, 0.19445, 0, 0.47222], + "8748": [0.306, 0.805, 0.19445, 0, 0.47222], + "8749": [0.306, 0.805, 0.19445, 0, 0.47222], + "8750": [0.30612, 0.805, 0.19445, 0, 0.47222], + "8896": [0.25001, 0.75, 0, 0, 0.83334], + "8897": [0.25001, 0.75, 0, 0, 0.83334], + "8898": [0.25001, 0.75, 0, 0, 0.83334], + "8899": [0.25001, 0.75, 0, 0, 0.83334], + "8968": [0.35001, 0.85, 0, 0, 0.47222], + "8969": [0.35001, 0.85, 0, 0, 0.47222], + "8970": [0.35001, 0.85, 0, 0, 0.47222], + "8971": [0.35001, 0.85, 0, 0, 0.47222], + "9168": [-0.00099, 0.601, 0, 0, 0.66667], + "10216": [0.35001, 0.85, 0, 0, 0.47222], + "10217": [0.35001, 0.85, 0, 0, 0.47222], + "10752": [0.25001, 0.75, 0, 0, 1.11111], + "10753": [0.25001, 0.75, 0, 0, 1.11111], + "10754": [0.25001, 0.75, 0, 0, 1.11111], + "10756": [0.25001, 0.75, 0, 0, 0.83334], + "10758": [0.25001, 0.75, 0, 0, 0.83334] + }, + "Size2-Regular": { + "32": [0, 0, 0, 0, 0.25], + "40": [0.65002, 1.15, 0, 0, 0.59722], + "41": [0.65002, 1.15, 0, 0, 0.59722], + "47": [0.65002, 1.15, 0, 0, 0.81111], + "91": [0.65002, 1.15, 0, 0, 0.47222], + "92": [0.65002, 1.15, 0, 0, 0.81111], + "93": [0.65002, 1.15, 0, 0, 0.47222], + "123": [0.65002, 1.15, 0, 0, 0.66667], + "125": [0.65002, 1.15, 0, 0, 0.66667], + "160": [0, 0, 0, 0, 0.25], + "710": [0, 0.75, 0, 0, 1.0], + "732": [0, 0.75, 0, 0, 1.0], + "770": [0, 0.75, 0, 0, 1.0], + "771": [0, 0.75, 0, 0, 1.0], + "8719": [0.55001, 1.05, 0, 0, 1.27778], + "8720": [0.55001, 1.05, 0, 0, 1.27778], + "8721": [0.55001, 1.05, 0, 0, 1.44445], + "8730": [0.65002, 1.15, 0, 0, 1.0], + "8747": [0.86225, 1.36, 0.44445, 0, 0.55556], + "8748": [0.862, 1.36, 0.44445, 0, 0.55556], + "8749": [0.862, 1.36, 0.44445, 0, 0.55556], + "8750": [0.86225, 1.36, 0.44445, 0, 0.55556], + "8896": [0.55001, 1.05, 0, 0, 1.11111], + "8897": [0.55001, 1.05, 0, 0, 1.11111], + "8898": [0.55001, 1.05, 0, 0, 1.11111], + "8899": [0.55001, 1.05, 0, 0, 1.11111], + "8968": [0.65002, 1.15, 0, 0, 0.52778], + "8969": [0.65002, 1.15, 0, 0, 0.52778], + "8970": [0.65002, 1.15, 0, 0, 0.52778], + "8971": [0.65002, 1.15, 0, 0, 0.52778], + "10216": [0.65002, 1.15, 0, 0, 0.61111], + "10217": [0.65002, 1.15, 0, 0, 0.61111], + "10752": [0.55001, 1.05, 0, 0, 1.51112], + "10753": [0.55001, 1.05, 0, 0, 1.51112], + "10754": [0.55001, 1.05, 0, 0, 1.51112], + "10756": [0.55001, 1.05, 0, 0, 1.11111], + "10758": [0.55001, 1.05, 0, 0, 1.11111] + }, + "Size3-Regular": { + "32": [0, 0, 0, 0, 0.25], + "40": [0.95003, 1.45, 0, 0, 0.73611], + "41": [0.95003, 1.45, 0, 0, 0.73611], + "47": [0.95003, 1.45, 0, 0, 1.04445], + "91": [0.95003, 1.45, 0, 0, 0.52778], + "92": [0.95003, 1.45, 0, 0, 1.04445], + "93": [0.95003, 1.45, 0, 0, 0.52778], + "123": [0.95003, 1.45, 0, 0, 0.75], + "125": [0.95003, 1.45, 0, 0, 0.75], + "160": [0, 0, 0, 0, 0.25], + "710": [0, 0.75, 0, 0, 1.44445], + "732": [0, 0.75, 0, 0, 1.44445], + "770": [0, 0.75, 0, 0, 1.44445], + "771": [0, 0.75, 0, 0, 1.44445], + "8730": [0.95003, 1.45, 0, 0, 1.0], + "8968": [0.95003, 1.45, 0, 0, 0.58334], + "8969": [0.95003, 1.45, 0, 0, 0.58334], + "8970": [0.95003, 1.45, 0, 0, 0.58334], + "8971": [0.95003, 1.45, 0, 0, 0.58334], + "10216": [0.95003, 1.45, 0, 0, 0.75], + "10217": [0.95003, 1.45, 0, 0, 0.75] + }, + "Size4-Regular": { + "32": [0, 0, 0, 0, 0.25], + "40": [1.25003, 1.75, 0, 0, 0.79167], + "41": [1.25003, 1.75, 0, 0, 0.79167], + "47": [1.25003, 1.75, 0, 0, 1.27778], + "91": [1.25003, 1.75, 0, 0, 0.58334], + "92": [1.25003, 1.75, 0, 0, 1.27778], + "93": [1.25003, 1.75, 0, 0, 0.58334], + "123": [1.25003, 1.75, 0, 0, 0.80556], + "125": [1.25003, 1.75, 0, 0, 0.80556], + "160": [0, 0, 0, 0, 0.25], + "710": [0, 0.825, 0, 0, 1.8889], + "732": [0, 0.825, 0, 0, 1.8889], + "770": [0, 0.825, 0, 0, 1.8889], + "771": [0, 0.825, 0, 0, 1.8889], + "8730": [1.25003, 1.75, 0, 0, 1.0], + "8968": [1.25003, 1.75, 0, 0, 0.63889], + "8969": [1.25003, 1.75, 0, 0, 0.63889], + "8970": [1.25003, 1.75, 0, 0, 0.63889], + "8971": [1.25003, 1.75, 0, 0, 0.63889], + "9115": [0.64502, 1.155, 0, 0, 0.875], + "9116": [1e-05, 0.6, 0, 0, 0.875], + "9117": [0.64502, 1.155, 0, 0, 0.875], + "9118": [0.64502, 1.155, 0, 0, 0.875], + "9119": [1e-05, 0.6, 0, 0, 0.875], + "9120": [0.64502, 1.155, 0, 0, 0.875], + "9121": [0.64502, 1.155, 0, 0, 0.66667], + "9122": [-0.00099, 0.601, 0, 0, 0.66667], + "9123": [0.64502, 1.155, 0, 0, 0.66667], + "9124": [0.64502, 1.155, 0, 0, 0.66667], + "9125": [-0.00099, 0.601, 0, 0, 0.66667], + "9126": [0.64502, 1.155, 0, 0, 0.66667], + "9127": [1e-05, 0.9, 0, 0, 0.88889], + "9128": [0.65002, 1.15, 0, 0, 0.88889], + "9129": [0.90001, 0, 0, 0, 0.88889], + "9130": [0, 0.3, 0, 0, 0.88889], + "9131": [1e-05, 0.9, 0, 0, 0.88889], + "9132": [0.65002, 1.15, 0, 0, 0.88889], + "9133": [0.90001, 0, 0, 0, 0.88889], + "9143": [0.88502, 0.915, 0, 0, 1.05556], + "10216": [1.25003, 1.75, 0, 0, 0.80556], + "10217": [1.25003, 1.75, 0, 0, 0.80556], + "57344": [-0.00499, 0.605, 0, 0, 1.05556], + "57345": [-0.00499, 0.605, 0, 0, 1.05556], + "57680": [0, 0.12, 0, 0, 0.45], + "57681": [0, 0.12, 0, 0, 0.45], + "57682": [0, 0.12, 0, 0, 0.45], + "57683": [0, 0.12, 0, 0, 0.45] + }, + "Typewriter-Regular": { + "32": [0, 0, 0, 0, 0.525], + "33": [0, 0.61111, 0, 0, 0.525], + "34": [0, 0.61111, 0, 0, 0.525], + "35": [0, 0.61111, 0, 0, 0.525], + "36": [0.08333, 0.69444, 0, 0, 0.525], + "37": [0.08333, 0.69444, 0, 0, 0.525], + "38": [0, 0.61111, 0, 0, 0.525], + "39": [0, 0.61111, 0, 0, 0.525], + "40": [0.08333, 0.69444, 0, 0, 0.525], + "41": [0.08333, 0.69444, 0, 0, 0.525], + "42": [0, 0.52083, 0, 0, 0.525], + "43": [-0.08056, 0.53055, 0, 0, 0.525], + "44": [0.13889, 0.125, 0, 0, 0.525], + "45": [-0.08056, 0.53055, 0, 0, 0.525], + "46": [0, 0.125, 0, 0, 0.525], + "47": [0.08333, 0.69444, 0, 0, 0.525], + "48": [0, 0.61111, 0, 0, 0.525], + "49": [0, 0.61111, 0, 0, 0.525], + "50": [0, 0.61111, 0, 0, 0.525], + "51": [0, 0.61111, 0, 0, 0.525], + "52": [0, 0.61111, 0, 0, 0.525], + "53": [0, 0.61111, 0, 0, 0.525], + "54": [0, 0.61111, 0, 0, 0.525], + "55": [0, 0.61111, 0, 0, 0.525], + "56": [0, 0.61111, 0, 0, 0.525], + "57": [0, 0.61111, 0, 0, 0.525], + "58": [0, 0.43056, 0, 0, 0.525], + "59": [0.13889, 0.43056, 0, 0, 0.525], + "60": [-0.05556, 0.55556, 0, 0, 0.525], + "61": [-0.19549, 0.41562, 0, 0, 0.525], + "62": [-0.05556, 0.55556, 0, 0, 0.525], + "63": [0, 0.61111, 0, 0, 0.525], + "64": [0, 0.61111, 0, 0, 0.525], + "65": [0, 0.61111, 0, 0, 0.525], + "66": [0, 0.61111, 0, 0, 0.525], + "67": [0, 0.61111, 0, 0, 0.525], + "68": [0, 0.61111, 0, 0, 0.525], + "69": [0, 0.61111, 0, 0, 0.525], + "70": [0, 0.61111, 0, 0, 0.525], + "71": [0, 0.61111, 0, 0, 0.525], + "72": [0, 0.61111, 0, 0, 0.525], + "73": [0, 0.61111, 0, 0, 0.525], + "74": [0, 0.61111, 0, 0, 0.525], + "75": [0, 0.61111, 0, 0, 0.525], + "76": [0, 0.61111, 0, 0, 0.525], + "77": [0, 0.61111, 0, 0, 0.525], + "78": [0, 0.61111, 0, 0, 0.525], + "79": [0, 0.61111, 0, 0, 0.525], + "80": [0, 0.61111, 0, 0, 0.525], + "81": [0.13889, 0.61111, 0, 0, 0.525], + "82": [0, 0.61111, 0, 0, 0.525], + "83": [0, 0.61111, 0, 0, 0.525], + "84": [0, 0.61111, 0, 0, 0.525], + "85": [0, 0.61111, 0, 0, 0.525], + "86": [0, 0.61111, 0, 0, 0.525], + "87": [0, 0.61111, 0, 0, 0.525], + "88": [0, 0.61111, 0, 0, 0.525], + "89": [0, 0.61111, 0, 0, 0.525], + "90": [0, 0.61111, 0, 0, 0.525], + "91": [0.08333, 0.69444, 0, 0, 0.525], + "92": [0.08333, 0.69444, 0, 0, 0.525], + "93": [0.08333, 0.69444, 0, 0, 0.525], + "94": [0, 0.61111, 0, 0, 0.525], + "95": [0.09514, 0, 0, 0, 0.525], + "96": [0, 0.61111, 0, 0, 0.525], + "97": [0, 0.43056, 0, 0, 0.525], + "98": [0, 0.61111, 0, 0, 0.525], + "99": [0, 0.43056, 0, 0, 0.525], + "100": [0, 0.61111, 0, 0, 0.525], + "101": [0, 0.43056, 0, 0, 0.525], + "102": [0, 0.61111, 0, 0, 0.525], + "103": [0.22222, 0.43056, 0, 0, 0.525], + "104": [0, 0.61111, 0, 0, 0.525], + "105": [0, 0.61111, 0, 0, 0.525], + "106": [0.22222, 0.61111, 0, 0, 0.525], + "107": [0, 0.61111, 0, 0, 0.525], + "108": [0, 0.61111, 0, 0, 0.525], + "109": [0, 0.43056, 0, 0, 0.525], + "110": [0, 0.43056, 0, 0, 0.525], + "111": [0, 0.43056, 0, 0, 0.525], + "112": [0.22222, 0.43056, 0, 0, 0.525], + "113": [0.22222, 0.43056, 0, 0, 0.525], + "114": [0, 0.43056, 0, 0, 0.525], + "115": [0, 0.43056, 0, 0, 0.525], + "116": [0, 0.55358, 0, 0, 0.525], + "117": [0, 0.43056, 0, 0, 0.525], + "118": [0, 0.43056, 0, 0, 0.525], + "119": [0, 0.43056, 0, 0, 0.525], + "120": [0, 0.43056, 0, 0, 0.525], + "121": [0.22222, 0.43056, 0, 0, 0.525], + "122": [0, 0.43056, 0, 0, 0.525], + "123": [0.08333, 0.69444, 0, 0, 0.525], + "124": [0.08333, 0.69444, 0, 0, 0.525], + "125": [0.08333, 0.69444, 0, 0, 0.525], + "126": [0, 0.61111, 0, 0, 0.525], + "127": [0, 0.61111, 0, 0, 0.525], + "160": [0, 0, 0, 0, 0.525], + "176": [0, 0.61111, 0, 0, 0.525], + "184": [0.19445, 0, 0, 0, 0.525], + "305": [0, 0.43056, 0, 0, 0.525], + "567": [0.22222, 0.43056, 0, 0, 0.525], + "711": [0, 0.56597, 0, 0, 0.525], + "713": [0, 0.56555, 0, 0, 0.525], + "714": [0, 0.61111, 0, 0, 0.525], + "715": [0, 0.61111, 0, 0, 0.525], + "728": [0, 0.61111, 0, 0, 0.525], + "730": [0, 0.61111, 0, 0, 0.525], + "770": [0, 0.61111, 0, 0, 0.525], + "771": [0, 0.61111, 0, 0, 0.525], + "776": [0, 0.61111, 0, 0, 0.525], + "915": [0, 0.61111, 0, 0, 0.525], + "916": [0, 0.61111, 0, 0, 0.525], + "920": [0, 0.61111, 0, 0, 0.525], + "923": [0, 0.61111, 0, 0, 0.525], + "926": [0, 0.61111, 0, 0, 0.525], + "928": [0, 0.61111, 0, 0, 0.525], + "931": [0, 0.61111, 0, 0, 0.525], + "933": [0, 0.61111, 0, 0, 0.525], + "934": [0, 0.61111, 0, 0, 0.525], + "936": [0, 0.61111, 0, 0, 0.525], + "937": [0, 0.61111, 0, 0, 0.525], + "8216": [0, 0.61111, 0, 0, 0.525], + "8217": [0, 0.61111, 0, 0, 0.525], + "8242": [0, 0.61111, 0, 0, 0.525], + "9251": [0.11111, 0.21944, 0, 0, 0.525] + } +}; + +/** + * This file contains metrics regarding fonts and individual symbols. The sigma + * and xi variables, as well as the metricMap map contain data extracted from + * TeX, TeX font metrics, and the TTF files. These data are then exposed via the + * `metrics` variable and the getCharacterMetrics function. + */ +// In TeX, there are actually three sets of dimensions, one for each of +// textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4: +// 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt). These are +// provided in the arrays below, in that order. +// +// The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respectively. +// This was determined by running the following script: +// +// latex -interaction=nonstopmode \ +// '\documentclass{article}\usepackage{amsmath}\begin{document}' \ +// '$a$ \expandafter\show\the\textfont2' \ +// '\expandafter\show\the\scriptfont2' \ +// '\expandafter\show\the\scriptscriptfont2' \ +// '\stop' +// +// The metrics themselves were retrieved using the following commands: +// +// tftopl cmsy10 +// tftopl cmsy7 +// tftopl cmsy5 +// +// The output of each of these commands is quite lengthy. The only part we +// care about is the FONTDIMEN section. Each value is measured in EMs. +var sigmasAndXis = { + slant: [0.250, 0.250, 0.250], + // sigma1 + space: [0.000, 0.000, 0.000], + // sigma2 + stretch: [0.000, 0.000, 0.000], + // sigma3 + shrink: [0.000, 0.000, 0.000], + // sigma4 + xHeight: [0.431, 0.431, 0.431], + // sigma5 + quad: [1.000, 1.171, 1.472], + // sigma6 + extraSpace: [0.000, 0.000, 0.000], + // sigma7 + num1: [0.677, 0.732, 0.925], + // sigma8 + num2: [0.394, 0.384, 0.387], + // sigma9 + num3: [0.444, 0.471, 0.504], + // sigma10 + denom1: [0.686, 0.752, 1.025], + // sigma11 + denom2: [0.345, 0.344, 0.532], + // sigma12 + sup1: [0.413, 0.503, 0.504], + // sigma13 + sup2: [0.363, 0.431, 0.404], + // sigma14 + sup3: [0.289, 0.286, 0.294], + // sigma15 + sub1: [0.150, 0.143, 0.200], + // sigma16 + sub2: [0.247, 0.286, 0.400], + // sigma17 + supDrop: [0.386, 0.353, 0.494], + // sigma18 + subDrop: [0.050, 0.071, 0.100], + // sigma19 + delim1: [2.390, 1.700, 1.980], + // sigma20 + delim2: [1.010, 1.157, 1.420], + // sigma21 + axisHeight: [0.250, 0.250, 0.250], + // sigma22 + // These font metrics are extracted from TeX by using tftopl on cmex10.tfm; + // they correspond to the font parameters of the extension fonts (family 3). + // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to + // match cmex7, we'd use cmex7.tfm values for script and scriptscript + // values. + defaultRuleThickness: [0.04, 0.049, 0.049], + // xi8; cmex7: 0.049 + bigOpSpacing1: [0.111, 0.111, 0.111], + // xi9 + bigOpSpacing2: [0.166, 0.166, 0.166], + // xi10 + bigOpSpacing3: [0.2, 0.2, 0.2], + // xi11 + bigOpSpacing4: [0.6, 0.611, 0.611], + // xi12; cmex7: 0.611 + bigOpSpacing5: [0.1, 0.143, 0.143], + // xi13; cmex7: 0.143 + // The \sqrt rule width is taken from the height of the surd character. + // Since we use the same font at all sizes, this thickness doesn't scale. + sqrtRuleThickness: [0.04, 0.04, 0.04], + // This value determines how large a pt is, for metrics which are defined + // in terms of pts. + // This value is also used in katex.less; if you change it make sure the + // values match. + ptPerEm: [10.0, 10.0, 10.0], + // The space between adjacent `|` columns in an array definition. From + // `\showthe\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm. + doubleRuleSep: [0.2, 0.2, 0.2], + // The width of separator lines in {array} environments. From + // `\showthe\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm. + arrayRuleWidth: [0.04, 0.04, 0.04], + // Two values from LaTeX source2e: + fboxsep: [0.3, 0.3, 0.3], + // 3 pt / ptPerEm + fboxrule: [0.04, 0.04, 0.04] // 0.4 pt / ptPerEm + +}; // This map contains a mapping from font name and character code to character +// should have Latin-1 and Cyrillic characters, but may not depending on the +// operating system. The metrics do not account for extra height from the +// accents. In the case of Cyrillic characters which have both ascenders and +// descenders we prefer approximations with ascenders, primarily to prevent +// the fraction bar or root line from intersecting the glyph. +// TODO(kevinb) allow union of multiple glyph metrics for better accuracy. + +var extraCharacterMap = { + // Latin-1 + 'Å': 'A', + 'Ð': 'D', + 'Þ': 'o', + 'å': 'a', + 'ð': 'd', + 'þ': 'o', + // Cyrillic + 'А': 'A', + 'Б': 'B', + 'В': 'B', + 'Г': 'F', + 'Д': 'A', + 'Е': 'E', + 'Ж': 'K', + 'З': '3', + 'И': 'N', + 'Й': 'N', + 'К': 'K', + 'Л': 'N', + 'М': 'M', + 'Н': 'H', + 'О': 'O', + 'П': 'N', + 'Р': 'P', + 'С': 'C', + 'Т': 'T', + 'У': 'y', + 'Ф': 'O', + 'Х': 'X', + 'Ц': 'U', + 'Ч': 'h', + 'Ш': 'W', + 'Щ': 'W', + 'Ъ': 'B', + 'Ы': 'X', + 'Ь': 'B', + 'Э': '3', + 'Ю': 'X', + 'Я': 'R', + 'а': 'a', + 'б': 'b', + 'в': 'a', + 'г': 'r', + 'д': 'y', + 'е': 'e', + 'ж': 'm', + 'з': 'e', + 'и': 'n', + 'й': 'n', + 'к': 'n', + 'л': 'n', + 'м': 'm', + 'н': 'n', + 'о': 'o', + 'п': 'n', + 'р': 'p', + 'с': 'c', + 'т': 'o', + 'у': 'y', + 'ф': 'b', + 'х': 'x', + 'ц': 'n', + 'ч': 'n', + 'ш': 'w', + 'щ': 'w', + 'ъ': 'a', + 'ы': 'm', + 'ь': 'a', + 'э': 'e', + 'ю': 'm', + 'я': 'r' +}; + +/** + * This function adds new font metrics to default metricMap + * It can also override existing metrics + */ +function setFontMetrics(fontName, metrics) { + fontMetricsData[fontName] = metrics; +} +/** + * This function is a convenience function for looking up information in the + * metricMap table. It takes a character as a string, and a font. + * + * Note: the `width` property may be undefined if fontMetricsData.js wasn't + * built using `Make extended_metrics`. + */ + +function getCharacterMetrics(character, font, mode) { + if (!fontMetricsData[font]) { + throw new Error("Font metrics not found for font: " + font + "."); + } + + var ch = character.charCodeAt(0); + var metrics = fontMetricsData[font][ch]; + + if (!metrics && character[0] in extraCharacterMap) { + ch = extraCharacterMap[character[0]].charCodeAt(0); + metrics = fontMetricsData[font][ch]; + } + + if (!metrics && mode === 'text') { + // We don't typically have font metrics for Asian scripts. + // But since we support them in text mode, we need to return + // some sort of metrics. + // So if the character is in a script we support but we + // don't have metrics for it, just use the metrics for + // the Latin capital letter M. This is close enough because + // we (currently) only care about the height of the glyph + // not its width. + if (supportedCodepoint(ch)) { + metrics = fontMetricsData[font][77]; // 77 is the charcode for 'M' + } + } + + if (metrics) { + return { + depth: metrics[0], + height: metrics[1], + italic: metrics[2], + skew: metrics[3], + width: metrics[4] + }; + } +} +var fontMetricsBySizeIndex = {}; +/** + * Get the font metrics for a given size. + */ + +function getGlobalMetrics(size) { + var sizeIndex; + + if (size >= 5) { + sizeIndex = 0; + } else if (size >= 3) { + sizeIndex = 1; + } else { + sizeIndex = 2; + } + + if (!fontMetricsBySizeIndex[sizeIndex]) { + var metrics = fontMetricsBySizeIndex[sizeIndex] = { + cssEmPerMu: sigmasAndXis.quad[sizeIndex] / 18 + }; + + for (var key in sigmasAndXis) { + if (sigmasAndXis.hasOwnProperty(key)) { + metrics[key] = sigmasAndXis[key][sizeIndex]; + } + } + } + + return fontMetricsBySizeIndex[sizeIndex]; +} + +/** + * This file contains information about the options that the Parser carries + * around with it while parsing. Data is held in an `Options` object, and when + * recursing, a new `Options` object can be created with the `.with*` and + * `.reset` functions. + */ +var sizeStyleMap = [// Each element contains [textsize, scriptsize, scriptscriptsize]. +// The size mappings are taken from TeX with \normalsize=10pt. +[1, 1, 1], // size1: [5, 5, 5] \tiny +[2, 1, 1], // size2: [6, 5, 5] +[3, 1, 1], // size3: [7, 5, 5] \scriptsize +[4, 2, 1], // size4: [8, 6, 5] \footnotesize +[5, 2, 1], // size5: [9, 6, 5] \small +[6, 3, 1], // size6: [10, 7, 5] \normalsize +[7, 4, 2], // size7: [12, 8, 6] \large +[8, 6, 3], // size8: [14.4, 10, 7] \Large +[9, 7, 6], // size9: [17.28, 12, 10] \LARGE +[10, 8, 7], // size10: [20.74, 14.4, 12] \huge +[11, 10, 9] // size11: [24.88, 20.74, 17.28] \HUGE +]; +var sizeMultipliers = [// fontMetrics.js:getGlobalMetrics also uses size indexes, so if +// you change size indexes, change that function. +0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488]; + +var sizeAtStyle = function sizeAtStyle(size, style) { + return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1]; +}; // In these types, "" (empty string) means "no change". + + +/** + * This is the main options class. It contains the current style, size, color, + * and font. + * + * Options objects should not be modified. To create a new Options with + * different properties, call a `.having*` method. + */ +class Options { + // A font family applies to a group of fonts (i.e. SansSerif), while a font + // represents a specific font (i.e. SansSerif Bold). + // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm + + /** + * The base size index. + */ + constructor(data) { + this.style = void 0; + this.color = void 0; + this.size = void 0; + this.textSize = void 0; + this.phantom = void 0; + this.font = void 0; + this.fontFamily = void 0; + this.fontWeight = void 0; + this.fontShape = void 0; + this.sizeMultiplier = void 0; + this.maxSize = void 0; + this.minRuleThickness = void 0; + this._fontMetrics = void 0; + this.style = data.style; + this.color = data.color; + this.size = data.size || Options.BASESIZE; + this.textSize = data.textSize || this.size; + this.phantom = !!data.phantom; + this.font = data.font || ""; + this.fontFamily = data.fontFamily || ""; + this.fontWeight = data.fontWeight || ''; + this.fontShape = data.fontShape || ''; + this.sizeMultiplier = sizeMultipliers[this.size - 1]; + this.maxSize = data.maxSize; + this.minRuleThickness = data.minRuleThickness; + this._fontMetrics = undefined; + } + /** + * Returns a new options object with the same properties as "this". Properties + * from "extension" will be copied to the new options object. + */ + + + extend(extension) { + var data = { + style: this.style, + size: this.size, + textSize: this.textSize, + color: this.color, + phantom: this.phantom, + font: this.font, + fontFamily: this.fontFamily, + fontWeight: this.fontWeight, + fontShape: this.fontShape, + maxSize: this.maxSize, + minRuleThickness: this.minRuleThickness + }; + + for (var key in extension) { + if (extension.hasOwnProperty(key)) { + data[key] = extension[key]; + } + } + + return new Options(data); + } + /** + * Return an options object with the given style. If `this.style === style`, + * returns `this`. + */ + + + havingStyle(style) { + if (this.style === style) { + return this; + } else { + return this.extend({ + style: style, + size: sizeAtStyle(this.textSize, style) + }); + } + } + /** + * Return an options object with a cramped version of the current style. If + * the current style is cramped, returns `this`. + */ + + + havingCrampedStyle() { + return this.havingStyle(this.style.cramp()); + } + /** + * Return an options object with the given size and in at least `\textstyle`. + * Returns `this` if appropriate. + */ + + + havingSize(size) { + if (this.size === size && this.textSize === size) { + return this; + } else { + return this.extend({ + style: this.style.text(), + size: size, + textSize: size, + sizeMultiplier: sizeMultipliers[size - 1] + }); + } + } + /** + * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted, + * changes to at least `\textstyle`. + */ + + + havingBaseStyle(style) { + style = style || this.style.text(); + var wantSize = sizeAtStyle(Options.BASESIZE, style); + + if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) { + return this; + } else { + return this.extend({ + style: style, + size: wantSize + }); + } + } + /** + * Remove the effect of sizing changes such as \Huge. + * Keep the effect of the current style, such as \scriptstyle. + */ + + + havingBaseSizing() { + var size; + + switch (this.style.id) { + case 4: + case 5: + size = 3; // normalsize in scriptstyle + + break; + + case 6: + case 7: + size = 1; // normalsize in scriptscriptstyle + + break; + + default: + size = 6; + // normalsize in textstyle or displaystyle + } + + return this.extend({ + style: this.style.text(), + size: size + }); + } + /** + * Create a new options object with the given color. + */ + + + withColor(color) { + return this.extend({ + color: color + }); + } + /** + * Create a new options object with "phantom" set to true. + */ + + + withPhantom() { + return this.extend({ + phantom: true + }); + } + /** + * Creates a new options object with the given math font or old text font. + * @type {[type]} + */ + + + withFont(font) { + return this.extend({ + font + }); + } + /** + * Create a new options objects with the given fontFamily. + */ + + + withTextFontFamily(fontFamily) { + return this.extend({ + fontFamily, + font: "" + }); + } + /** + * Creates a new options object with the given font weight + */ + + + withTextFontWeight(fontWeight) { + return this.extend({ + fontWeight, + font: "" + }); + } + /** + * Creates a new options object with the given font weight + */ + + + withTextFontShape(fontShape) { + return this.extend({ + fontShape, + font: "" + }); + } + /** + * Return the CSS sizing classes required to switch from enclosing options + * `oldOptions` to `this`. Returns an array of classes. + */ + + + sizingClasses(oldOptions) { + if (oldOptions.size !== this.size) { + return ["sizing", "reset-size" + oldOptions.size, "size" + this.size]; + } else { + return []; + } + } + /** + * Return the CSS sizing classes required to switch to the base size. Like + * `this.havingSize(BASESIZE).sizingClasses(this)`. + */ + + + baseSizingClasses() { + if (this.size !== Options.BASESIZE) { + return ["sizing", "reset-size" + this.size, "size" + Options.BASESIZE]; + } else { + return []; + } + } + /** + * Return the font metrics for this size. + */ + + + fontMetrics() { + if (!this._fontMetrics) { + this._fontMetrics = getGlobalMetrics(this.size); + } + + return this._fontMetrics; + } + /** + * Gets the CSS color of the current options object + */ + + + getColor() { + if (this.phantom) { + return "transparent"; + } else { + return this.color; + } + } + +} + +Options.BASESIZE = 6; + +/** + * This file does conversion between units. In particular, it provides + * calculateSize to convert other units into ems. + */ +// Thus, multiplying a length by this number converts the length from units +// into pts. Dividing the result by ptPerEm gives the number of ems +// *assuming* a font size of ptPerEm (normal size, normal style). + +var ptPerUnit = { + // https://en.wikibooks.org/wiki/LaTeX/Lengths and + // https://tex.stackexchange.com/a/8263 + "pt": 1, + // TeX point + "mm": 7227 / 2540, + // millimeter + "cm": 7227 / 254, + // centimeter + "in": 72.27, + // inch + "bp": 803 / 800, + // big (PostScript) points + "pc": 12, + // pica + "dd": 1238 / 1157, + // didot + "cc": 14856 / 1157, + // cicero (12 didot) + "nd": 685 / 642, + // new didot + "nc": 1370 / 107, + // new cicero (12 new didot) + "sp": 1 / 65536, + // scaled point (TeX's internal smallest unit) + // https://tex.stackexchange.com/a/41371 + "px": 803 / 800 // \pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX + +}; // Dictionary of relative units, for fast validity testing. + +var relativeUnit = { + "ex": true, + "em": true, + "mu": true +}; + +/** + * Determine whether the specified unit (either a string defining the unit + * or a "size" parse node containing a unit field) is valid. + */ +var validUnit = function validUnit(unit) { + if (typeof unit !== "string") { + unit = unit.unit; + } + + return unit in ptPerUnit || unit in relativeUnit || unit === "ex"; +}; +/* + * Convert a "size" parse node (with numeric "number" and string "unit" fields, + * as parsed by functions.js argType "size") into a CSS em value for the + * current style/scale. `options` gives the current options. + */ + +var calculateSize = function calculateSize(sizeValue, options) { + var scale; + + if (sizeValue.unit in ptPerUnit) { + // Absolute units + scale = ptPerUnit[sizeValue.unit] // Convert unit to pt + / options.fontMetrics().ptPerEm // Convert pt to CSS em + / options.sizeMultiplier; // Unscale to make absolute units + } else if (sizeValue.unit === "mu") { + // `mu` units scale with scriptstyle/scriptscriptstyle. + scale = options.fontMetrics().cssEmPerMu; + } else { + // Other relative units always refer to the *textstyle* font + // in the current size. + var unitOptions; + + if (options.style.isTight()) { + // isTight() means current style is script/scriptscript. + unitOptions = options.havingStyle(options.style.text()); + } else { + unitOptions = options; + } // TODO: In TeX these units are relative to the quad of the current + // *text* font, e.g. cmr10. KaTeX instead uses values from the + // comparably-sized *Computer Modern symbol* font. At 10pt, these + // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641; + // cmr5=1.361133, cmsy5=1.472241. Consider $\scriptsize a\kern1emb$. + // TeX \showlists shows a kern of 1.13889 * fontsize; + // KaTeX shows a kern of 1.171 * fontsize. + + + if (sizeValue.unit === "ex") { + scale = unitOptions.fontMetrics().xHeight; + } else if (sizeValue.unit === "em") { + scale = unitOptions.fontMetrics().quad; + } else { + throw new ParseError("Invalid unit: '" + sizeValue.unit + "'"); + } + + if (unitOptions !== options) { + scale *= unitOptions.sizeMultiplier / options.sizeMultiplier; + } + } + + return Math.min(sizeValue.number * scale, options.maxSize); +}; +/** + * Round `n` to 4 decimal places, or to the nearest 1/10,000th em. See + * https://github.com/KaTeX/KaTeX/pull/2460. + */ + +var makeEm = function makeEm(n) { + return +n.toFixed(4) + "em"; +}; + +/** + * These objects store the data about the DOM nodes we create, as well as some + * extra data. They can then be transformed into real DOM nodes with the + * `toNode` function or HTML markup using `toMarkup`. They are useful for both + * storing extra properties on the nodes, as well as providing a way to easily + * work with the DOM. + * + * Similar functions for working with MathML nodes exist in mathMLTree.js. + * + * TODO: refactor `span` and `anchor` into common superclass when + * target environments support class inheritance + */ + +/** + * Create an HTML className based on a list of classes. In addition to joining + * with spaces, we also remove empty classes. + */ +var createClass = function createClass(classes) { + return classes.filter(cls => cls).join(" "); +}; + +var initNode = function initNode(classes, options, style) { + this.classes = classes || []; + this.attributes = {}; + this.height = 0; + this.depth = 0; + this.maxFontSize = 0; + this.style = style || {}; + + if (options) { + if (options.style.isTight()) { + this.classes.push("mtight"); + } + + var color = options.getColor(); + + if (color) { + this.style.color = color; + } + } +}; +/** + * Convert into an HTML node + */ + + +var toNode = function toNode(tagName) { + var node = document.createElement(tagName); // Apply the class + + node.className = createClass(this.classes); // Apply inline styles + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + // $FlowFixMe Flow doesn't seem to understand span.style's type. + node.style[style] = this.style[style]; + } + } // Apply attributes + + + for (var attr in this.attributes) { + if (this.attributes.hasOwnProperty(attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } // Append the children, also as HTML nodes + + + for (var i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + + return node; +}; +/** + * Convert into an HTML markup string + */ + + +var toMarkup = function toMarkup(tagName) { + var markup = "<" + tagName; // Add the class + + if (this.classes.length) { + markup += " class=\"" + utils.escape(createClass(this.classes)) + "\""; + } + + var styles = ""; // Add the styles, after hyphenation + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + styles += utils.hyphenate(style) + ":" + this.style[style] + ";"; + } + } + + if (styles) { + markup += " style=\"" + utils.escape(styles) + "\""; + } // Add the attributes + + + for (var attr in this.attributes) { + if (this.attributes.hasOwnProperty(attr)) { + markup += " " + attr + "=\"" + utils.escape(this.attributes[attr]) + "\""; + } + } + + markup += ">"; // Add the markup of the children, also as markup + + for (var i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + markup += ""; + return markup; +}; // Making the type below exact with all optional fields doesn't work due to +// - https://github.com/facebook/flow/issues/4582 +// - https://github.com/facebook/flow/issues/5688 +// However, since *all* fields are optional, $Shape<> works as suggested in 5688 +// above. +// This type does not include all CSS properties. Additional properties should +// be added as needed. + + +/** + * This node represents a span node, with a className, a list of children, and + * an inline style. It also contains information about its height, depth, and + * maxFontSize. + * + * Represents two types with different uses: SvgSpan to wrap an SVG and DomSpan + * otherwise. This typesafety is important when HTML builders access a span's + * children. + */ +class Span { + constructor(classes, children, options, style) { + this.children = void 0; + this.attributes = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.width = void 0; + this.maxFontSize = void 0; + this.style = void 0; + initNode.call(this, classes, options, style); + this.children = children || []; + } + /** + * Sets an arbitrary attribute on the span. Warning: use this wisely. Not + * all browsers support attributes the same, and having too many custom + * attributes is probably bad. + */ + + + setAttribute(attribute, value) { + this.attributes[attribute] = value; + } + + hasClass(className) { + return utils.contains(this.classes, className); + } + + toNode() { + return toNode.call(this, "span"); + } + + toMarkup() { + return toMarkup.call(this, "span"); + } + +} +/** + * This node represents an anchor () element with a hyperlink. See `span` + * for further details. + */ + +class Anchor { + constructor(href, classes, children, options) { + this.children = void 0; + this.attributes = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.maxFontSize = void 0; + this.style = void 0; + initNode.call(this, classes, options); + this.children = children || []; + this.setAttribute('href', href); + } + + setAttribute(attribute, value) { + this.attributes[attribute] = value; + } + + hasClass(className) { + return utils.contains(this.classes, className); + } + + toNode() { + return toNode.call(this, "a"); + } + + toMarkup() { + return toMarkup.call(this, "a"); + } + +} +/** + * This node represents an image embed () element. + */ + +class Img { + constructor(src, alt, style) { + this.src = void 0; + this.alt = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.maxFontSize = void 0; + this.style = void 0; + this.alt = alt; + this.src = src; + this.classes = ["mord"]; + this.style = style; + } + + hasClass(className) { + return utils.contains(this.classes, className); + } + + toNode() { + var node = document.createElement("img"); + node.src = this.src; + node.alt = this.alt; + node.className = "mord"; // Apply inline styles + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + // $FlowFixMe + node.style[style] = this.style[style]; + } + } + + return node; + } + + toMarkup() { + var markup = "\"" 0) { + span = document.createElement("span"); + span.style.marginRight = makeEm(this.italic); + } + + if (this.classes.length > 0) { + span = span || document.createElement("span"); + span.className = createClass(this.classes); + } + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + span = span || document.createElement("span"); // $FlowFixMe Flow doesn't seem to understand span.style's type. + + span.style[style] = this.style[style]; + } + } + + if (span) { + span.appendChild(node); + return span; + } else { + return node; + } + } + /** + * Creates markup for a symbol node. + */ + + + toMarkup() { + // TODO(alpert): More duplication than I'd like from + // span.prototype.toMarkup and symbolNode.prototype.toNode... + var needsSpan = false; + var markup = " 0) { + styles += "margin-right:" + this.italic + "em;"; + } + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + styles += utils.hyphenate(style) + ":" + this.style[style] + ";"; + } + } + + if (styles) { + needsSpan = true; + markup += " style=\"" + utils.escape(styles) + "\""; + } + + var escaped = utils.escape(this.text); + + if (needsSpan) { + markup += ">"; + markup += escaped; + markup += ""; + return markup; + } else { + return escaped; + } + } + +} +/** + * SVG nodes are used to render stretchy wide elements. + */ + +class SvgNode { + constructor(children, attributes) { + this.children = void 0; + this.attributes = void 0; + this.children = children || []; + this.attributes = attributes || {}; + } + + toNode() { + var svgNS = "http://www.w3.org/2000/svg"; + var node = document.createElementNS(svgNS, "svg"); // Apply attributes + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + for (var i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + + return node; + } + + toMarkup() { + var markup = ""; + } else { + return ""; + } + } + +} +class LineNode { + constructor(attributes) { + this.attributes = void 0; + this.attributes = attributes || {}; + } + + toNode() { + var svgNS = "http://www.w3.org/2000/svg"; + var node = document.createElementNS(svgNS, "line"); // Apply attributes + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + return node; + } + + toMarkup() { + var markup = " but got " + String(group) + "."); + } +} + +/** + * This file holds a list of all no-argument functions and single-character + * symbols (like 'a' or ';'). + * + * For each of the symbols, there are three properties they can have: + * - font (required): the font to be used for this symbol. Either "main" (the + normal font), or "ams" (the ams fonts). + * - group (required): the ParseNode group type the symbol should have (i.e. + "textord", "mathord", etc). + See https://github.com/KaTeX/KaTeX/wiki/Examining-TeX#group-types + * - replace: the character that this symbol or function should be + * replaced with (i.e. "\phi" has a replace value of "\u03d5", the phi + * character in the main font). + * + * The outermost map in the table indicates what mode the symbols should be + * accepted in (e.g. "math" or "text"). + */ +// Some of these have a "-token" suffix since these are also used as `ParseNode` +// types for raw text tokens, and we want to avoid conflicts with higher-level +// `ParseNode` types. These `ParseNode`s are constructed within `Parser` by +// looking up the `symbols` map. +var ATOMS = { + "bin": 1, + "close": 1, + "inner": 1, + "open": 1, + "punct": 1, + "rel": 1 +}; +var NON_ATOMS = { + "accent-token": 1, + "mathord": 1, + "op-token": 1, + "spacing": 1, + "textord": 1 +}; +var symbols = { + "math": {}, + "text": {} +}; +/** `acceptUnicodeChar = true` is only applicable if `replace` is set. */ + +function defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) { + symbols[mode][name] = { + font, + group, + replace + }; + + if (acceptUnicodeChar && replace) { + symbols[mode][replace] = symbols[mode][name]; + } +} // Some abbreviations for commonly used strings. +// This helps minify the code, and also spotting typos using jshint. +// modes: + +var math = "math"; +var text = "text"; // fonts: + +var main = "main"; +var ams = "ams"; // groups: + +var accent = "accent-token"; +var bin = "bin"; +var close = "close"; +var inner = "inner"; +var mathord = "mathord"; +var op = "op-token"; +var open = "open"; +var punct = "punct"; +var rel = "rel"; +var spacing = "spacing"; +var textord = "textord"; // Now comes the symbol table +// Relation Symbols + +defineSymbol(math, main, rel, "\u2261", "\\equiv", true); +defineSymbol(math, main, rel, "\u227a", "\\prec", true); +defineSymbol(math, main, rel, "\u227b", "\\succ", true); +defineSymbol(math, main, rel, "\u223c", "\\sim", true); +defineSymbol(math, main, rel, "\u22a5", "\\perp"); +defineSymbol(math, main, rel, "\u2aaf", "\\preceq", true); +defineSymbol(math, main, rel, "\u2ab0", "\\succeq", true); +defineSymbol(math, main, rel, "\u2243", "\\simeq", true); +defineSymbol(math, main, rel, "\u2223", "\\mid", true); +defineSymbol(math, main, rel, "\u226a", "\\ll", true); +defineSymbol(math, main, rel, "\u226b", "\\gg", true); +defineSymbol(math, main, rel, "\u224d", "\\asymp", true); +defineSymbol(math, main, rel, "\u2225", "\\parallel"); +defineSymbol(math, main, rel, "\u22c8", "\\bowtie", true); +defineSymbol(math, main, rel, "\u2323", "\\smile", true); +defineSymbol(math, main, rel, "\u2291", "\\sqsubseteq", true); +defineSymbol(math, main, rel, "\u2292", "\\sqsupseteq", true); +defineSymbol(math, main, rel, "\u2250", "\\doteq", true); +defineSymbol(math, main, rel, "\u2322", "\\frown", true); +defineSymbol(math, main, rel, "\u220b", "\\ni", true); +defineSymbol(math, main, rel, "\u221d", "\\propto", true); +defineSymbol(math, main, rel, "\u22a2", "\\vdash", true); +defineSymbol(math, main, rel, "\u22a3", "\\dashv", true); +defineSymbol(math, main, rel, "\u220b", "\\owns"); // Punctuation + +defineSymbol(math, main, punct, "\u002e", "\\ldotp"); +defineSymbol(math, main, punct, "\u22c5", "\\cdotp"); // Misc Symbols + +defineSymbol(math, main, textord, "\u0023", "\\#"); +defineSymbol(text, main, textord, "\u0023", "\\#"); +defineSymbol(math, main, textord, "\u0026", "\\&"); +defineSymbol(text, main, textord, "\u0026", "\\&"); +defineSymbol(math, main, textord, "\u2135", "\\aleph", true); +defineSymbol(math, main, textord, "\u2200", "\\forall", true); +defineSymbol(math, main, textord, "\u210f", "\\hbar", true); +defineSymbol(math, main, textord, "\u2203", "\\exists", true); +defineSymbol(math, main, textord, "\u2207", "\\nabla", true); +defineSymbol(math, main, textord, "\u266d", "\\flat", true); +defineSymbol(math, main, textord, "\u2113", "\\ell", true); +defineSymbol(math, main, textord, "\u266e", "\\natural", true); +defineSymbol(math, main, textord, "\u2663", "\\clubsuit", true); +defineSymbol(math, main, textord, "\u2118", "\\wp", true); +defineSymbol(math, main, textord, "\u266f", "\\sharp", true); +defineSymbol(math, main, textord, "\u2662", "\\diamondsuit", true); +defineSymbol(math, main, textord, "\u211c", "\\Re", true); +defineSymbol(math, main, textord, "\u2661", "\\heartsuit", true); +defineSymbol(math, main, textord, "\u2111", "\\Im", true); +defineSymbol(math, main, textord, "\u2660", "\\spadesuit", true); +defineSymbol(math, main, textord, "\u00a7", "\\S", true); +defineSymbol(text, main, textord, "\u00a7", "\\S"); +defineSymbol(math, main, textord, "\u00b6", "\\P", true); +defineSymbol(text, main, textord, "\u00b6", "\\P"); // Math and Text + +defineSymbol(math, main, textord, "\u2020", "\\dag"); +defineSymbol(text, main, textord, "\u2020", "\\dag"); +defineSymbol(text, main, textord, "\u2020", "\\textdagger"); +defineSymbol(math, main, textord, "\u2021", "\\ddag"); +defineSymbol(text, main, textord, "\u2021", "\\ddag"); +defineSymbol(text, main, textord, "\u2021", "\\textdaggerdbl"); // Large Delimiters + +defineSymbol(math, main, close, "\u23b1", "\\rmoustache", true); +defineSymbol(math, main, open, "\u23b0", "\\lmoustache", true); +defineSymbol(math, main, close, "\u27ef", "\\rgroup", true); +defineSymbol(math, main, open, "\u27ee", "\\lgroup", true); // Binary Operators + +defineSymbol(math, main, bin, "\u2213", "\\mp", true); +defineSymbol(math, main, bin, "\u2296", "\\ominus", true); +defineSymbol(math, main, bin, "\u228e", "\\uplus", true); +defineSymbol(math, main, bin, "\u2293", "\\sqcap", true); +defineSymbol(math, main, bin, "\u2217", "\\ast"); +defineSymbol(math, main, bin, "\u2294", "\\sqcup", true); +defineSymbol(math, main, bin, "\u25ef", "\\bigcirc", true); +defineSymbol(math, main, bin, "\u2219", "\\bullet", true); +defineSymbol(math, main, bin, "\u2021", "\\ddagger"); +defineSymbol(math, main, bin, "\u2240", "\\wr", true); +defineSymbol(math, main, bin, "\u2a3f", "\\amalg"); +defineSymbol(math, main, bin, "\u0026", "\\And"); // from amsmath +// Arrow Symbols + +defineSymbol(math, main, rel, "\u27f5", "\\longleftarrow", true); +defineSymbol(math, main, rel, "\u21d0", "\\Leftarrow", true); +defineSymbol(math, main, rel, "\u27f8", "\\Longleftarrow", true); +defineSymbol(math, main, rel, "\u27f6", "\\longrightarrow", true); +defineSymbol(math, main, rel, "\u21d2", "\\Rightarrow", true); +defineSymbol(math, main, rel, "\u27f9", "\\Longrightarrow", true); +defineSymbol(math, main, rel, "\u2194", "\\leftrightarrow", true); +defineSymbol(math, main, rel, "\u27f7", "\\longleftrightarrow", true); +defineSymbol(math, main, rel, "\u21d4", "\\Leftrightarrow", true); +defineSymbol(math, main, rel, "\u27fa", "\\Longleftrightarrow", true); +defineSymbol(math, main, rel, "\u21a6", "\\mapsto", true); +defineSymbol(math, main, rel, "\u27fc", "\\longmapsto", true); +defineSymbol(math, main, rel, "\u2197", "\\nearrow", true); +defineSymbol(math, main, rel, "\u21a9", "\\hookleftarrow", true); +defineSymbol(math, main, rel, "\u21aa", "\\hookrightarrow", true); +defineSymbol(math, main, rel, "\u2198", "\\searrow", true); +defineSymbol(math, main, rel, "\u21bc", "\\leftharpoonup", true); +defineSymbol(math, main, rel, "\u21c0", "\\rightharpoonup", true); +defineSymbol(math, main, rel, "\u2199", "\\swarrow", true); +defineSymbol(math, main, rel, "\u21bd", "\\leftharpoondown", true); +defineSymbol(math, main, rel, "\u21c1", "\\rightharpoondown", true); +defineSymbol(math, main, rel, "\u2196", "\\nwarrow", true); +defineSymbol(math, main, rel, "\u21cc", "\\rightleftharpoons", true); // AMS Negated Binary Relations + +defineSymbol(math, ams, rel, "\u226e", "\\nless", true); // Symbol names preceded by "@" each have a corresponding macro. + +defineSymbol(math, ams, rel, "\ue010", "\\@nleqslant"); +defineSymbol(math, ams, rel, "\ue011", "\\@nleqq"); +defineSymbol(math, ams, rel, "\u2a87", "\\lneq", true); +defineSymbol(math, ams, rel, "\u2268", "\\lneqq", true); +defineSymbol(math, ams, rel, "\ue00c", "\\@lvertneqq"); +defineSymbol(math, ams, rel, "\u22e6", "\\lnsim", true); +defineSymbol(math, ams, rel, "\u2a89", "\\lnapprox", true); +defineSymbol(math, ams, rel, "\u2280", "\\nprec", true); // unicode-math maps \u22e0 to \npreccurlyeq. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u22e0", "\\npreceq", true); +defineSymbol(math, ams, rel, "\u22e8", "\\precnsim", true); +defineSymbol(math, ams, rel, "\u2ab9", "\\precnapprox", true); +defineSymbol(math, ams, rel, "\u2241", "\\nsim", true); +defineSymbol(math, ams, rel, "\ue006", "\\@nshortmid"); +defineSymbol(math, ams, rel, "\u2224", "\\nmid", true); +defineSymbol(math, ams, rel, "\u22ac", "\\nvdash", true); +defineSymbol(math, ams, rel, "\u22ad", "\\nvDash", true); +defineSymbol(math, ams, rel, "\u22ea", "\\ntriangleleft"); +defineSymbol(math, ams, rel, "\u22ec", "\\ntrianglelefteq", true); +defineSymbol(math, ams, rel, "\u228a", "\\subsetneq", true); +defineSymbol(math, ams, rel, "\ue01a", "\\@varsubsetneq"); +defineSymbol(math, ams, rel, "\u2acb", "\\subsetneqq", true); +defineSymbol(math, ams, rel, "\ue017", "\\@varsubsetneqq"); +defineSymbol(math, ams, rel, "\u226f", "\\ngtr", true); +defineSymbol(math, ams, rel, "\ue00f", "\\@ngeqslant"); +defineSymbol(math, ams, rel, "\ue00e", "\\@ngeqq"); +defineSymbol(math, ams, rel, "\u2a88", "\\gneq", true); +defineSymbol(math, ams, rel, "\u2269", "\\gneqq", true); +defineSymbol(math, ams, rel, "\ue00d", "\\@gvertneqq"); +defineSymbol(math, ams, rel, "\u22e7", "\\gnsim", true); +defineSymbol(math, ams, rel, "\u2a8a", "\\gnapprox", true); +defineSymbol(math, ams, rel, "\u2281", "\\nsucc", true); // unicode-math maps \u22e1 to \nsucccurlyeq. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u22e1", "\\nsucceq", true); +defineSymbol(math, ams, rel, "\u22e9", "\\succnsim", true); +defineSymbol(math, ams, rel, "\u2aba", "\\succnapprox", true); // unicode-math maps \u2246 to \simneqq. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u2246", "\\ncong", true); +defineSymbol(math, ams, rel, "\ue007", "\\@nshortparallel"); +defineSymbol(math, ams, rel, "\u2226", "\\nparallel", true); +defineSymbol(math, ams, rel, "\u22af", "\\nVDash", true); +defineSymbol(math, ams, rel, "\u22eb", "\\ntriangleright"); +defineSymbol(math, ams, rel, "\u22ed", "\\ntrianglerighteq", true); +defineSymbol(math, ams, rel, "\ue018", "\\@nsupseteqq"); +defineSymbol(math, ams, rel, "\u228b", "\\supsetneq", true); +defineSymbol(math, ams, rel, "\ue01b", "\\@varsupsetneq"); +defineSymbol(math, ams, rel, "\u2acc", "\\supsetneqq", true); +defineSymbol(math, ams, rel, "\ue019", "\\@varsupsetneqq"); +defineSymbol(math, ams, rel, "\u22ae", "\\nVdash", true); +defineSymbol(math, ams, rel, "\u2ab5", "\\precneqq", true); +defineSymbol(math, ams, rel, "\u2ab6", "\\succneqq", true); +defineSymbol(math, ams, rel, "\ue016", "\\@nsubseteqq"); +defineSymbol(math, ams, bin, "\u22b4", "\\unlhd"); +defineSymbol(math, ams, bin, "\u22b5", "\\unrhd"); // AMS Negated Arrows + +defineSymbol(math, ams, rel, "\u219a", "\\nleftarrow", true); +defineSymbol(math, ams, rel, "\u219b", "\\nrightarrow", true); +defineSymbol(math, ams, rel, "\u21cd", "\\nLeftarrow", true); +defineSymbol(math, ams, rel, "\u21cf", "\\nRightarrow", true); +defineSymbol(math, ams, rel, "\u21ae", "\\nleftrightarrow", true); +defineSymbol(math, ams, rel, "\u21ce", "\\nLeftrightarrow", true); // AMS Misc + +defineSymbol(math, ams, rel, "\u25b3", "\\vartriangle"); +defineSymbol(math, ams, textord, "\u210f", "\\hslash"); +defineSymbol(math, ams, textord, "\u25bd", "\\triangledown"); +defineSymbol(math, ams, textord, "\u25ca", "\\lozenge"); +defineSymbol(math, ams, textord, "\u24c8", "\\circledS"); +defineSymbol(math, ams, textord, "\u00ae", "\\circledR"); +defineSymbol(text, ams, textord, "\u00ae", "\\circledR"); +defineSymbol(math, ams, textord, "\u2221", "\\measuredangle", true); +defineSymbol(math, ams, textord, "\u2204", "\\nexists"); +defineSymbol(math, ams, textord, "\u2127", "\\mho"); +defineSymbol(math, ams, textord, "\u2132", "\\Finv", true); +defineSymbol(math, ams, textord, "\u2141", "\\Game", true); +defineSymbol(math, ams, textord, "\u2035", "\\backprime"); +defineSymbol(math, ams, textord, "\u25b2", "\\blacktriangle"); +defineSymbol(math, ams, textord, "\u25bc", "\\blacktriangledown"); +defineSymbol(math, ams, textord, "\u25a0", "\\blacksquare"); +defineSymbol(math, ams, textord, "\u29eb", "\\blacklozenge"); +defineSymbol(math, ams, textord, "\u2605", "\\bigstar"); +defineSymbol(math, ams, textord, "\u2222", "\\sphericalangle", true); +defineSymbol(math, ams, textord, "\u2201", "\\complement", true); // unicode-math maps U+F0 to \matheth. We map to AMS function \eth + +defineSymbol(math, ams, textord, "\u00f0", "\\eth", true); +defineSymbol(text, main, textord, "\u00f0", "\u00f0"); +defineSymbol(math, ams, textord, "\u2571", "\\diagup"); +defineSymbol(math, ams, textord, "\u2572", "\\diagdown"); +defineSymbol(math, ams, textord, "\u25a1", "\\square"); +defineSymbol(math, ams, textord, "\u25a1", "\\Box"); +defineSymbol(math, ams, textord, "\u25ca", "\\Diamond"); // unicode-math maps U+A5 to \mathyen. We map to AMS function \yen + +defineSymbol(math, ams, textord, "\u00a5", "\\yen", true); +defineSymbol(text, ams, textord, "\u00a5", "\\yen", true); +defineSymbol(math, ams, textord, "\u2713", "\\checkmark", true); +defineSymbol(text, ams, textord, "\u2713", "\\checkmark"); // AMS Hebrew + +defineSymbol(math, ams, textord, "\u2136", "\\beth", true); +defineSymbol(math, ams, textord, "\u2138", "\\daleth", true); +defineSymbol(math, ams, textord, "\u2137", "\\gimel", true); // AMS Greek + +defineSymbol(math, ams, textord, "\u03dd", "\\digamma", true); +defineSymbol(math, ams, textord, "\u03f0", "\\varkappa"); // AMS Delimiters + +defineSymbol(math, ams, open, "\u250c", "\\@ulcorner", true); +defineSymbol(math, ams, close, "\u2510", "\\@urcorner", true); +defineSymbol(math, ams, open, "\u2514", "\\@llcorner", true); +defineSymbol(math, ams, close, "\u2518", "\\@lrcorner", true); // AMS Binary Relations + +defineSymbol(math, ams, rel, "\u2266", "\\leqq", true); +defineSymbol(math, ams, rel, "\u2a7d", "\\leqslant", true); +defineSymbol(math, ams, rel, "\u2a95", "\\eqslantless", true); +defineSymbol(math, ams, rel, "\u2272", "\\lesssim", true); +defineSymbol(math, ams, rel, "\u2a85", "\\lessapprox", true); +defineSymbol(math, ams, rel, "\u224a", "\\approxeq", true); +defineSymbol(math, ams, bin, "\u22d6", "\\lessdot"); +defineSymbol(math, ams, rel, "\u22d8", "\\lll", true); +defineSymbol(math, ams, rel, "\u2276", "\\lessgtr", true); +defineSymbol(math, ams, rel, "\u22da", "\\lesseqgtr", true); +defineSymbol(math, ams, rel, "\u2a8b", "\\lesseqqgtr", true); +defineSymbol(math, ams, rel, "\u2251", "\\doteqdot"); +defineSymbol(math, ams, rel, "\u2253", "\\risingdotseq", true); +defineSymbol(math, ams, rel, "\u2252", "\\fallingdotseq", true); +defineSymbol(math, ams, rel, "\u223d", "\\backsim", true); +defineSymbol(math, ams, rel, "\u22cd", "\\backsimeq", true); +defineSymbol(math, ams, rel, "\u2ac5", "\\subseteqq", true); +defineSymbol(math, ams, rel, "\u22d0", "\\Subset", true); +defineSymbol(math, ams, rel, "\u228f", "\\sqsubset", true); +defineSymbol(math, ams, rel, "\u227c", "\\preccurlyeq", true); +defineSymbol(math, ams, rel, "\u22de", "\\curlyeqprec", true); +defineSymbol(math, ams, rel, "\u227e", "\\precsim", true); +defineSymbol(math, ams, rel, "\u2ab7", "\\precapprox", true); +defineSymbol(math, ams, rel, "\u22b2", "\\vartriangleleft"); +defineSymbol(math, ams, rel, "\u22b4", "\\trianglelefteq"); +defineSymbol(math, ams, rel, "\u22a8", "\\vDash", true); +defineSymbol(math, ams, rel, "\u22aa", "\\Vvdash", true); +defineSymbol(math, ams, rel, "\u2323", "\\smallsmile"); +defineSymbol(math, ams, rel, "\u2322", "\\smallfrown"); +defineSymbol(math, ams, rel, "\u224f", "\\bumpeq", true); +defineSymbol(math, ams, rel, "\u224e", "\\Bumpeq", true); +defineSymbol(math, ams, rel, "\u2267", "\\geqq", true); +defineSymbol(math, ams, rel, "\u2a7e", "\\geqslant", true); +defineSymbol(math, ams, rel, "\u2a96", "\\eqslantgtr", true); +defineSymbol(math, ams, rel, "\u2273", "\\gtrsim", true); +defineSymbol(math, ams, rel, "\u2a86", "\\gtrapprox", true); +defineSymbol(math, ams, bin, "\u22d7", "\\gtrdot"); +defineSymbol(math, ams, rel, "\u22d9", "\\ggg", true); +defineSymbol(math, ams, rel, "\u2277", "\\gtrless", true); +defineSymbol(math, ams, rel, "\u22db", "\\gtreqless", true); +defineSymbol(math, ams, rel, "\u2a8c", "\\gtreqqless", true); +defineSymbol(math, ams, rel, "\u2256", "\\eqcirc", true); +defineSymbol(math, ams, rel, "\u2257", "\\circeq", true); +defineSymbol(math, ams, rel, "\u225c", "\\triangleq", true); +defineSymbol(math, ams, rel, "\u223c", "\\thicksim"); +defineSymbol(math, ams, rel, "\u2248", "\\thickapprox"); +defineSymbol(math, ams, rel, "\u2ac6", "\\supseteqq", true); +defineSymbol(math, ams, rel, "\u22d1", "\\Supset", true); +defineSymbol(math, ams, rel, "\u2290", "\\sqsupset", true); +defineSymbol(math, ams, rel, "\u227d", "\\succcurlyeq", true); +defineSymbol(math, ams, rel, "\u22df", "\\curlyeqsucc", true); +defineSymbol(math, ams, rel, "\u227f", "\\succsim", true); +defineSymbol(math, ams, rel, "\u2ab8", "\\succapprox", true); +defineSymbol(math, ams, rel, "\u22b3", "\\vartriangleright"); +defineSymbol(math, ams, rel, "\u22b5", "\\trianglerighteq"); +defineSymbol(math, ams, rel, "\u22a9", "\\Vdash", true); +defineSymbol(math, ams, rel, "\u2223", "\\shortmid"); +defineSymbol(math, ams, rel, "\u2225", "\\shortparallel"); +defineSymbol(math, ams, rel, "\u226c", "\\between", true); +defineSymbol(math, ams, rel, "\u22d4", "\\pitchfork", true); +defineSymbol(math, ams, rel, "\u221d", "\\varpropto"); +defineSymbol(math, ams, rel, "\u25c0", "\\blacktriangleleft"); // unicode-math says that \therefore is a mathord atom. +// We kept the amssymb atom type, which is rel. + +defineSymbol(math, ams, rel, "\u2234", "\\therefore", true); +defineSymbol(math, ams, rel, "\u220d", "\\backepsilon"); +defineSymbol(math, ams, rel, "\u25b6", "\\blacktriangleright"); // unicode-math says that \because is a mathord atom. +// We kept the amssymb atom type, which is rel. + +defineSymbol(math, ams, rel, "\u2235", "\\because", true); +defineSymbol(math, ams, rel, "\u22d8", "\\llless"); +defineSymbol(math, ams, rel, "\u22d9", "\\gggtr"); +defineSymbol(math, ams, bin, "\u22b2", "\\lhd"); +defineSymbol(math, ams, bin, "\u22b3", "\\rhd"); +defineSymbol(math, ams, rel, "\u2242", "\\eqsim", true); +defineSymbol(math, main, rel, "\u22c8", "\\Join"); +defineSymbol(math, ams, rel, "\u2251", "\\Doteq", true); // AMS Binary Operators + +defineSymbol(math, ams, bin, "\u2214", "\\dotplus", true); +defineSymbol(math, ams, bin, "\u2216", "\\smallsetminus"); +defineSymbol(math, ams, bin, "\u22d2", "\\Cap", true); +defineSymbol(math, ams, bin, "\u22d3", "\\Cup", true); +defineSymbol(math, ams, bin, "\u2a5e", "\\doublebarwedge", true); +defineSymbol(math, ams, bin, "\u229f", "\\boxminus", true); +defineSymbol(math, ams, bin, "\u229e", "\\boxplus", true); +defineSymbol(math, ams, bin, "\u22c7", "\\divideontimes", true); +defineSymbol(math, ams, bin, "\u22c9", "\\ltimes", true); +defineSymbol(math, ams, bin, "\u22ca", "\\rtimes", true); +defineSymbol(math, ams, bin, "\u22cb", "\\leftthreetimes", true); +defineSymbol(math, ams, bin, "\u22cc", "\\rightthreetimes", true); +defineSymbol(math, ams, bin, "\u22cf", "\\curlywedge", true); +defineSymbol(math, ams, bin, "\u22ce", "\\curlyvee", true); +defineSymbol(math, ams, bin, "\u229d", "\\circleddash", true); +defineSymbol(math, ams, bin, "\u229b", "\\circledast", true); +defineSymbol(math, ams, bin, "\u22c5", "\\centerdot"); +defineSymbol(math, ams, bin, "\u22ba", "\\intercal", true); +defineSymbol(math, ams, bin, "\u22d2", "\\doublecap"); +defineSymbol(math, ams, bin, "\u22d3", "\\doublecup"); +defineSymbol(math, ams, bin, "\u22a0", "\\boxtimes", true); // AMS Arrows +// Note: unicode-math maps \u21e2 to their own function \rightdasharrow. +// We'll map it to AMS function \dashrightarrow. It produces the same atom. + +defineSymbol(math, ams, rel, "\u21e2", "\\dashrightarrow", true); // unicode-math maps \u21e0 to \leftdasharrow. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u21e0", "\\dashleftarrow", true); +defineSymbol(math, ams, rel, "\u21c7", "\\leftleftarrows", true); +defineSymbol(math, ams, rel, "\u21c6", "\\leftrightarrows", true); +defineSymbol(math, ams, rel, "\u21da", "\\Lleftarrow", true); +defineSymbol(math, ams, rel, "\u219e", "\\twoheadleftarrow", true); +defineSymbol(math, ams, rel, "\u21a2", "\\leftarrowtail", true); +defineSymbol(math, ams, rel, "\u21ab", "\\looparrowleft", true); +defineSymbol(math, ams, rel, "\u21cb", "\\leftrightharpoons", true); +defineSymbol(math, ams, rel, "\u21b6", "\\curvearrowleft", true); // unicode-math maps \u21ba to \acwopencirclearrow. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u21ba", "\\circlearrowleft", true); +defineSymbol(math, ams, rel, "\u21b0", "\\Lsh", true); +defineSymbol(math, ams, rel, "\u21c8", "\\upuparrows", true); +defineSymbol(math, ams, rel, "\u21bf", "\\upharpoonleft", true); +defineSymbol(math, ams, rel, "\u21c3", "\\downharpoonleft", true); +defineSymbol(math, main, rel, "\u22b6", "\\origof", true); // not in font + +defineSymbol(math, main, rel, "\u22b7", "\\imageof", true); // not in font + +defineSymbol(math, ams, rel, "\u22b8", "\\multimap", true); +defineSymbol(math, ams, rel, "\u21ad", "\\leftrightsquigarrow", true); +defineSymbol(math, ams, rel, "\u21c9", "\\rightrightarrows", true); +defineSymbol(math, ams, rel, "\u21c4", "\\rightleftarrows", true); +defineSymbol(math, ams, rel, "\u21a0", "\\twoheadrightarrow", true); +defineSymbol(math, ams, rel, "\u21a3", "\\rightarrowtail", true); +defineSymbol(math, ams, rel, "\u21ac", "\\looparrowright", true); +defineSymbol(math, ams, rel, "\u21b7", "\\curvearrowright", true); // unicode-math maps \u21bb to \cwopencirclearrow. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u21bb", "\\circlearrowright", true); +defineSymbol(math, ams, rel, "\u21b1", "\\Rsh", true); +defineSymbol(math, ams, rel, "\u21ca", "\\downdownarrows", true); +defineSymbol(math, ams, rel, "\u21be", "\\upharpoonright", true); +defineSymbol(math, ams, rel, "\u21c2", "\\downharpoonright", true); +defineSymbol(math, ams, rel, "\u21dd", "\\rightsquigarrow", true); +defineSymbol(math, ams, rel, "\u21dd", "\\leadsto"); +defineSymbol(math, ams, rel, "\u21db", "\\Rrightarrow", true); +defineSymbol(math, ams, rel, "\u21be", "\\restriction"); +defineSymbol(math, main, textord, "\u2018", "`"); +defineSymbol(math, main, textord, "$", "\\$"); +defineSymbol(text, main, textord, "$", "\\$"); +defineSymbol(text, main, textord, "$", "\\textdollar"); +defineSymbol(math, main, textord, "%", "\\%"); +defineSymbol(text, main, textord, "%", "\\%"); +defineSymbol(math, main, textord, "_", "\\_"); +defineSymbol(text, main, textord, "_", "\\_"); +defineSymbol(text, main, textord, "_", "\\textunderscore"); +defineSymbol(math, main, textord, "\u2220", "\\angle", true); +defineSymbol(math, main, textord, "\u221e", "\\infty", true); +defineSymbol(math, main, textord, "\u2032", "\\prime"); +defineSymbol(math, main, textord, "\u25b3", "\\triangle"); +defineSymbol(math, main, textord, "\u0393", "\\Gamma", true); +defineSymbol(math, main, textord, "\u0394", "\\Delta", true); +defineSymbol(math, main, textord, "\u0398", "\\Theta", true); +defineSymbol(math, main, textord, "\u039b", "\\Lambda", true); +defineSymbol(math, main, textord, "\u039e", "\\Xi", true); +defineSymbol(math, main, textord, "\u03a0", "\\Pi", true); +defineSymbol(math, main, textord, "\u03a3", "\\Sigma", true); +defineSymbol(math, main, textord, "\u03a5", "\\Upsilon", true); +defineSymbol(math, main, textord, "\u03a6", "\\Phi", true); +defineSymbol(math, main, textord, "\u03a8", "\\Psi", true); +defineSymbol(math, main, textord, "\u03a9", "\\Omega", true); +defineSymbol(math, main, textord, "A", "\u0391"); +defineSymbol(math, main, textord, "B", "\u0392"); +defineSymbol(math, main, textord, "E", "\u0395"); +defineSymbol(math, main, textord, "Z", "\u0396"); +defineSymbol(math, main, textord, "H", "\u0397"); +defineSymbol(math, main, textord, "I", "\u0399"); +defineSymbol(math, main, textord, "K", "\u039A"); +defineSymbol(math, main, textord, "M", "\u039C"); +defineSymbol(math, main, textord, "N", "\u039D"); +defineSymbol(math, main, textord, "O", "\u039F"); +defineSymbol(math, main, textord, "P", "\u03A1"); +defineSymbol(math, main, textord, "T", "\u03A4"); +defineSymbol(math, main, textord, "X", "\u03A7"); +defineSymbol(math, main, textord, "\u00ac", "\\neg", true); +defineSymbol(math, main, textord, "\u00ac", "\\lnot"); +defineSymbol(math, main, textord, "\u22a4", "\\top"); +defineSymbol(math, main, textord, "\u22a5", "\\bot"); +defineSymbol(math, main, textord, "\u2205", "\\emptyset"); +defineSymbol(math, ams, textord, "\u2205", "\\varnothing"); +defineSymbol(math, main, mathord, "\u03b1", "\\alpha", true); +defineSymbol(math, main, mathord, "\u03b2", "\\beta", true); +defineSymbol(math, main, mathord, "\u03b3", "\\gamma", true); +defineSymbol(math, main, mathord, "\u03b4", "\\delta", true); +defineSymbol(math, main, mathord, "\u03f5", "\\epsilon", true); +defineSymbol(math, main, mathord, "\u03b6", "\\zeta", true); +defineSymbol(math, main, mathord, "\u03b7", "\\eta", true); +defineSymbol(math, main, mathord, "\u03b8", "\\theta", true); +defineSymbol(math, main, mathord, "\u03b9", "\\iota", true); +defineSymbol(math, main, mathord, "\u03ba", "\\kappa", true); +defineSymbol(math, main, mathord, "\u03bb", "\\lambda", true); +defineSymbol(math, main, mathord, "\u03bc", "\\mu", true); +defineSymbol(math, main, mathord, "\u03bd", "\\nu", true); +defineSymbol(math, main, mathord, "\u03be", "\\xi", true); +defineSymbol(math, main, mathord, "\u03bf", "\\omicron", true); +defineSymbol(math, main, mathord, "\u03c0", "\\pi", true); +defineSymbol(math, main, mathord, "\u03c1", "\\rho", true); +defineSymbol(math, main, mathord, "\u03c3", "\\sigma", true); +defineSymbol(math, main, mathord, "\u03c4", "\\tau", true); +defineSymbol(math, main, mathord, "\u03c5", "\\upsilon", true); +defineSymbol(math, main, mathord, "\u03d5", "\\phi", true); +defineSymbol(math, main, mathord, "\u03c7", "\\chi", true); +defineSymbol(math, main, mathord, "\u03c8", "\\psi", true); +defineSymbol(math, main, mathord, "\u03c9", "\\omega", true); +defineSymbol(math, main, mathord, "\u03b5", "\\varepsilon", true); +defineSymbol(math, main, mathord, "\u03d1", "\\vartheta", true); +defineSymbol(math, main, mathord, "\u03d6", "\\varpi", true); +defineSymbol(math, main, mathord, "\u03f1", "\\varrho", true); +defineSymbol(math, main, mathord, "\u03c2", "\\varsigma", true); +defineSymbol(math, main, mathord, "\u03c6", "\\varphi", true); +defineSymbol(math, main, bin, "\u2217", "*", true); +defineSymbol(math, main, bin, "+", "+"); +defineSymbol(math, main, bin, "\u2212", "-", true); +defineSymbol(math, main, bin, "\u22c5", "\\cdot", true); +defineSymbol(math, main, bin, "\u2218", "\\circ", true); +defineSymbol(math, main, bin, "\u00f7", "\\div", true); +defineSymbol(math, main, bin, "\u00b1", "\\pm", true); +defineSymbol(math, main, bin, "\u00d7", "\\times", true); +defineSymbol(math, main, bin, "\u2229", "\\cap", true); +defineSymbol(math, main, bin, "\u222a", "\\cup", true); +defineSymbol(math, main, bin, "\u2216", "\\setminus", true); +defineSymbol(math, main, bin, "\u2227", "\\land"); +defineSymbol(math, main, bin, "\u2228", "\\lor"); +defineSymbol(math, main, bin, "\u2227", "\\wedge", true); +defineSymbol(math, main, bin, "\u2228", "\\vee", true); +defineSymbol(math, main, textord, "\u221a", "\\surd"); +defineSymbol(math, main, open, "\u27e8", "\\langle", true); +defineSymbol(math, main, open, "\u2223", "\\lvert"); +defineSymbol(math, main, open, "\u2225", "\\lVert"); +defineSymbol(math, main, close, "?", "?"); +defineSymbol(math, main, close, "!", "!"); +defineSymbol(math, main, close, "\u27e9", "\\rangle", true); +defineSymbol(math, main, close, "\u2223", "\\rvert"); +defineSymbol(math, main, close, "\u2225", "\\rVert"); +defineSymbol(math, main, rel, "=", "="); +defineSymbol(math, main, rel, ":", ":"); +defineSymbol(math, main, rel, "\u2248", "\\approx", true); +defineSymbol(math, main, rel, "\u2245", "\\cong", true); +defineSymbol(math, main, rel, "\u2265", "\\ge"); +defineSymbol(math, main, rel, "\u2265", "\\geq", true); +defineSymbol(math, main, rel, "\u2190", "\\gets"); +defineSymbol(math, main, rel, ">", "\\gt", true); +defineSymbol(math, main, rel, "\u2208", "\\in", true); +defineSymbol(math, main, rel, "\ue020", "\\@not"); +defineSymbol(math, main, rel, "\u2282", "\\subset", true); +defineSymbol(math, main, rel, "\u2283", "\\supset", true); +defineSymbol(math, main, rel, "\u2286", "\\subseteq", true); +defineSymbol(math, main, rel, "\u2287", "\\supseteq", true); +defineSymbol(math, ams, rel, "\u2288", "\\nsubseteq", true); +defineSymbol(math, ams, rel, "\u2289", "\\nsupseteq", true); +defineSymbol(math, main, rel, "\u22a8", "\\models"); +defineSymbol(math, main, rel, "\u2190", "\\leftarrow", true); +defineSymbol(math, main, rel, "\u2264", "\\le"); +defineSymbol(math, main, rel, "\u2264", "\\leq", true); +defineSymbol(math, main, rel, "<", "\\lt", true); +defineSymbol(math, main, rel, "\u2192", "\\rightarrow", true); +defineSymbol(math, main, rel, "\u2192", "\\to"); +defineSymbol(math, ams, rel, "\u2271", "\\ngeq", true); +defineSymbol(math, ams, rel, "\u2270", "\\nleq", true); +defineSymbol(math, main, spacing, "\u00a0", "\\ "); +defineSymbol(math, main, spacing, "\u00a0", "\\space"); // Ref: LaTeX Source 2e: \DeclareRobustCommand{\nobreakspace}{% + +defineSymbol(math, main, spacing, "\u00a0", "\\nobreakspace"); +defineSymbol(text, main, spacing, "\u00a0", "\\ "); +defineSymbol(text, main, spacing, "\u00a0", " "); +defineSymbol(text, main, spacing, "\u00a0", "\\space"); +defineSymbol(text, main, spacing, "\u00a0", "\\nobreakspace"); +defineSymbol(math, main, spacing, null, "\\nobreak"); +defineSymbol(math, main, spacing, null, "\\allowbreak"); +defineSymbol(math, main, punct, ",", ","); +defineSymbol(math, main, punct, ";", ";"); +defineSymbol(math, ams, bin, "\u22bc", "\\barwedge", true); +defineSymbol(math, ams, bin, "\u22bb", "\\veebar", true); +defineSymbol(math, main, bin, "\u2299", "\\odot", true); +defineSymbol(math, main, bin, "\u2295", "\\oplus", true); +defineSymbol(math, main, bin, "\u2297", "\\otimes", true); +defineSymbol(math, main, textord, "\u2202", "\\partial", true); +defineSymbol(math, main, bin, "\u2298", "\\oslash", true); +defineSymbol(math, ams, bin, "\u229a", "\\circledcirc", true); +defineSymbol(math, ams, bin, "\u22a1", "\\boxdot", true); +defineSymbol(math, main, bin, "\u25b3", "\\bigtriangleup"); +defineSymbol(math, main, bin, "\u25bd", "\\bigtriangledown"); +defineSymbol(math, main, bin, "\u2020", "\\dagger"); +defineSymbol(math, main, bin, "\u22c4", "\\diamond"); +defineSymbol(math, main, bin, "\u22c6", "\\star"); +defineSymbol(math, main, bin, "\u25c3", "\\triangleleft"); +defineSymbol(math, main, bin, "\u25b9", "\\triangleright"); +defineSymbol(math, main, open, "{", "\\{"); +defineSymbol(text, main, textord, "{", "\\{"); +defineSymbol(text, main, textord, "{", "\\textbraceleft"); +defineSymbol(math, main, close, "}", "\\}"); +defineSymbol(text, main, textord, "}", "\\}"); +defineSymbol(text, main, textord, "}", "\\textbraceright"); +defineSymbol(math, main, open, "{", "\\lbrace"); +defineSymbol(math, main, close, "}", "\\rbrace"); +defineSymbol(math, main, open, "[", "\\lbrack", true); +defineSymbol(text, main, textord, "[", "\\lbrack", true); +defineSymbol(math, main, close, "]", "\\rbrack", true); +defineSymbol(text, main, textord, "]", "\\rbrack", true); +defineSymbol(math, main, open, "(", "\\lparen", true); +defineSymbol(math, main, close, ")", "\\rparen", true); +defineSymbol(text, main, textord, "<", "\\textless", true); // in T1 fontenc + +defineSymbol(text, main, textord, ">", "\\textgreater", true); // in T1 fontenc + +defineSymbol(math, main, open, "\u230a", "\\lfloor", true); +defineSymbol(math, main, close, "\u230b", "\\rfloor", true); +defineSymbol(math, main, open, "\u2308", "\\lceil", true); +defineSymbol(math, main, close, "\u2309", "\\rceil", true); +defineSymbol(math, main, textord, "\\", "\\backslash"); +defineSymbol(math, main, textord, "\u2223", "|"); +defineSymbol(math, main, textord, "\u2223", "\\vert"); +defineSymbol(text, main, textord, "|", "\\textbar", true); // in T1 fontenc + +defineSymbol(math, main, textord, "\u2225", "\\|"); +defineSymbol(math, main, textord, "\u2225", "\\Vert"); +defineSymbol(text, main, textord, "\u2225", "\\textbardbl"); +defineSymbol(text, main, textord, "~", "\\textasciitilde"); +defineSymbol(text, main, textord, "\\", "\\textbackslash"); +defineSymbol(text, main, textord, "^", "\\textasciicircum"); +defineSymbol(math, main, rel, "\u2191", "\\uparrow", true); +defineSymbol(math, main, rel, "\u21d1", "\\Uparrow", true); +defineSymbol(math, main, rel, "\u2193", "\\downarrow", true); +defineSymbol(math, main, rel, "\u21d3", "\\Downarrow", true); +defineSymbol(math, main, rel, "\u2195", "\\updownarrow", true); +defineSymbol(math, main, rel, "\u21d5", "\\Updownarrow", true); +defineSymbol(math, main, op, "\u2210", "\\coprod"); +defineSymbol(math, main, op, "\u22c1", "\\bigvee"); +defineSymbol(math, main, op, "\u22c0", "\\bigwedge"); +defineSymbol(math, main, op, "\u2a04", "\\biguplus"); +defineSymbol(math, main, op, "\u22c2", "\\bigcap"); +defineSymbol(math, main, op, "\u22c3", "\\bigcup"); +defineSymbol(math, main, op, "\u222b", "\\int"); +defineSymbol(math, main, op, "\u222b", "\\intop"); +defineSymbol(math, main, op, "\u222c", "\\iint"); +defineSymbol(math, main, op, "\u222d", "\\iiint"); +defineSymbol(math, main, op, "\u220f", "\\prod"); +defineSymbol(math, main, op, "\u2211", "\\sum"); +defineSymbol(math, main, op, "\u2a02", "\\bigotimes"); +defineSymbol(math, main, op, "\u2a01", "\\bigoplus"); +defineSymbol(math, main, op, "\u2a00", "\\bigodot"); +defineSymbol(math, main, op, "\u222e", "\\oint"); +defineSymbol(math, main, op, "\u222f", "\\oiint"); +defineSymbol(math, main, op, "\u2230", "\\oiiint"); +defineSymbol(math, main, op, "\u2a06", "\\bigsqcup"); +defineSymbol(math, main, op, "\u222b", "\\smallint"); +defineSymbol(text, main, inner, "\u2026", "\\textellipsis"); +defineSymbol(math, main, inner, "\u2026", "\\mathellipsis"); +defineSymbol(text, main, inner, "\u2026", "\\ldots", true); +defineSymbol(math, main, inner, "\u2026", "\\ldots", true); +defineSymbol(math, main, inner, "\u22ef", "\\@cdots", true); +defineSymbol(math, main, inner, "\u22f1", "\\ddots", true); +defineSymbol(math, main, textord, "\u22ee", "\\varvdots"); // \vdots is a macro + +defineSymbol(math, main, accent, "\u02ca", "\\acute"); +defineSymbol(math, main, accent, "\u02cb", "\\grave"); +defineSymbol(math, main, accent, "\u00a8", "\\ddot"); +defineSymbol(math, main, accent, "\u007e", "\\tilde"); +defineSymbol(math, main, accent, "\u02c9", "\\bar"); +defineSymbol(math, main, accent, "\u02d8", "\\breve"); +defineSymbol(math, main, accent, "\u02c7", "\\check"); +defineSymbol(math, main, accent, "\u005e", "\\hat"); +defineSymbol(math, main, accent, "\u20d7", "\\vec"); +defineSymbol(math, main, accent, "\u02d9", "\\dot"); +defineSymbol(math, main, accent, "\u02da", "\\mathring"); // \imath and \jmath should be invariant to \mathrm, \mathbf, etc., so use PUA + +defineSymbol(math, main, mathord, "\ue131", "\\@imath"); +defineSymbol(math, main, mathord, "\ue237", "\\@jmath"); +defineSymbol(math, main, textord, "\u0131", "\u0131"); +defineSymbol(math, main, textord, "\u0237", "\u0237"); +defineSymbol(text, main, textord, "\u0131", "\\i", true); +defineSymbol(text, main, textord, "\u0237", "\\j", true); +defineSymbol(text, main, textord, "\u00df", "\\ss", true); +defineSymbol(text, main, textord, "\u00e6", "\\ae", true); +defineSymbol(text, main, textord, "\u0153", "\\oe", true); +defineSymbol(text, main, textord, "\u00f8", "\\o", true); +defineSymbol(text, main, textord, "\u00c6", "\\AE", true); +defineSymbol(text, main, textord, "\u0152", "\\OE", true); +defineSymbol(text, main, textord, "\u00d8", "\\O", true); +defineSymbol(text, main, accent, "\u02ca", "\\'"); // acute + +defineSymbol(text, main, accent, "\u02cb", "\\`"); // grave + +defineSymbol(text, main, accent, "\u02c6", "\\^"); // circumflex + +defineSymbol(text, main, accent, "\u02dc", "\\~"); // tilde + +defineSymbol(text, main, accent, "\u02c9", "\\="); // macron + +defineSymbol(text, main, accent, "\u02d8", "\\u"); // breve + +defineSymbol(text, main, accent, "\u02d9", "\\."); // dot above + +defineSymbol(text, main, accent, "\u00b8", "\\c"); // cedilla + +defineSymbol(text, main, accent, "\u02da", "\\r"); // ring above + +defineSymbol(text, main, accent, "\u02c7", "\\v"); // caron + +defineSymbol(text, main, accent, "\u00a8", '\\"'); // diaresis + +defineSymbol(text, main, accent, "\u02dd", "\\H"); // double acute + +defineSymbol(text, main, accent, "\u25ef", "\\textcircled"); // \bigcirc glyph +// These ligatures are detected and created in Parser.js's `formLigatures`. + +var ligatures = { + "--": true, + "---": true, + "``": true, + "''": true +}; +defineSymbol(text, main, textord, "\u2013", "--", true); +defineSymbol(text, main, textord, "\u2013", "\\textendash"); +defineSymbol(text, main, textord, "\u2014", "---", true); +defineSymbol(text, main, textord, "\u2014", "\\textemdash"); +defineSymbol(text, main, textord, "\u2018", "`", true); +defineSymbol(text, main, textord, "\u2018", "\\textquoteleft"); +defineSymbol(text, main, textord, "\u2019", "'", true); +defineSymbol(text, main, textord, "\u2019", "\\textquoteright"); +defineSymbol(text, main, textord, "\u201c", "``", true); +defineSymbol(text, main, textord, "\u201c", "\\textquotedblleft"); +defineSymbol(text, main, textord, "\u201d", "''", true); +defineSymbol(text, main, textord, "\u201d", "\\textquotedblright"); // \degree from gensymb package + +defineSymbol(math, main, textord, "\u00b0", "\\degree", true); +defineSymbol(text, main, textord, "\u00b0", "\\degree"); // \textdegree from inputenc package + +defineSymbol(text, main, textord, "\u00b0", "\\textdegree", true); // TODO: In LaTeX, \pounds can generate a different character in text and math +// mode, but among our fonts, only Main-Regular defines this character "163". + +defineSymbol(math, main, textord, "\u00a3", "\\pounds"); +defineSymbol(math, main, textord, "\u00a3", "\\mathsterling", true); +defineSymbol(text, main, textord, "\u00a3", "\\pounds"); +defineSymbol(text, main, textord, "\u00a3", "\\textsterling", true); +defineSymbol(math, ams, textord, "\u2720", "\\maltese"); +defineSymbol(text, ams, textord, "\u2720", "\\maltese"); // There are lots of symbols which are the same, so we add them in afterwards. +// All of these are textords in math mode + +var mathTextSymbols = "0123456789/@.\""; + +for (var i = 0; i < mathTextSymbols.length; i++) { + var ch = mathTextSymbols.charAt(i); + defineSymbol(math, main, textord, ch, ch); +} // All of these are textords in text mode + + +var textSymbols = "0123456789!@*()-=+\";:?/.,"; + +for (var _i = 0; _i < textSymbols.length; _i++) { + var _ch = textSymbols.charAt(_i); + + defineSymbol(text, main, textord, _ch, _ch); +} // All of these are textords in text mode, and mathords in math mode + + +var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + +for (var _i2 = 0; _i2 < letters.length; _i2++) { + var _ch2 = letters.charAt(_i2); + + defineSymbol(math, main, mathord, _ch2, _ch2); + defineSymbol(text, main, textord, _ch2, _ch2); +} // Blackboard bold and script letters in Unicode range + + +defineSymbol(math, ams, textord, "C", "\u2102"); // blackboard bold + +defineSymbol(text, ams, textord, "C", "\u2102"); +defineSymbol(math, ams, textord, "H", "\u210D"); +defineSymbol(text, ams, textord, "H", "\u210D"); +defineSymbol(math, ams, textord, "N", "\u2115"); +defineSymbol(text, ams, textord, "N", "\u2115"); +defineSymbol(math, ams, textord, "P", "\u2119"); +defineSymbol(text, ams, textord, "P", "\u2119"); +defineSymbol(math, ams, textord, "Q", "\u211A"); +defineSymbol(text, ams, textord, "Q", "\u211A"); +defineSymbol(math, ams, textord, "R", "\u211D"); +defineSymbol(text, ams, textord, "R", "\u211D"); +defineSymbol(math, ams, textord, "Z", "\u2124"); +defineSymbol(text, ams, textord, "Z", "\u2124"); +defineSymbol(math, main, mathord, "h", "\u210E"); // italic h, Planck constant + +defineSymbol(text, main, mathord, "h", "\u210E"); // The next loop loads wide (surrogate pair) characters. +// We support some letters in the Unicode range U+1D400 to U+1D7FF, +// Mathematical Alphanumeric Symbols. +// Some editors do not deal well with wide characters. So don't write the +// string into this file. Instead, create the string from the surrogate pair. + +var wideChar = ""; + +for (var _i3 = 0; _i3 < letters.length; _i3++) { + var _ch3 = letters.charAt(_i3); // The hex numbers in the next line are a surrogate pair. + // 0xD835 is the high surrogate for all letters in the range we support. + // 0xDC00 is the low surrogate for bold A. + + + wideChar = String.fromCharCode(0xD835, 0xDC00 + _i3); // A-Z a-z bold + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDC34 + _i3); // A-Z a-z italic + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDC68 + _i3); // A-Z a-z bold italic + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDD04 + _i3); // A-Z a-z Fractur + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDD6C + _i3); // A-Z a-z bold Fractur + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDDA0 + _i3); // A-Z a-z sans-serif + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDDD4 + _i3); // A-Z a-z sans bold + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDE08 + _i3); // A-Z a-z sans italic + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDE70 + _i3); // A-Z a-z monospace + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + + if (_i3 < 26) { + // KaTeX fonts have only capital letters for blackboard bold and script. + // See exception for k below. + wideChar = String.fromCharCode(0xD835, 0xDD38 + _i3); // A-Z double struck + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDC9C + _i3); // A-Z script + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + } // TODO: Add bold script when it is supported by a KaTeX font. + +} // "k" is the only double struck lower case letter in the KaTeX fonts. + + +wideChar = String.fromCharCode(0xD835, 0xDD5C); // k double struck + +defineSymbol(math, main, mathord, "k", wideChar); +defineSymbol(text, main, textord, "k", wideChar); // Next, some wide character numerals + +for (var _i4 = 0; _i4 < 10; _i4++) { + var _ch4 = _i4.toString(); + + wideChar = String.fromCharCode(0xD835, 0xDFCE + _i4); // 0-9 bold + + defineSymbol(math, main, mathord, _ch4, wideChar); + defineSymbol(text, main, textord, _ch4, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDFE2 + _i4); // 0-9 sans serif + + defineSymbol(math, main, mathord, _ch4, wideChar); + defineSymbol(text, main, textord, _ch4, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDFEC + _i4); // 0-9 bold sans + + defineSymbol(math, main, mathord, _ch4, wideChar); + defineSymbol(text, main, textord, _ch4, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDFF6 + _i4); // 0-9 monospace + + defineSymbol(math, main, mathord, _ch4, wideChar); + defineSymbol(text, main, textord, _ch4, wideChar); +} // We add these Latin-1 letters as symbols for backwards-compatibility, +// but they are not actually in the font, nor are they supported by the +// Unicode accent mechanism, so they fall back to Times font and look ugly. +// TODO(edemaine): Fix this. + + +var extraLatin = "\u00d0\u00de\u00fe"; + +for (var _i5 = 0; _i5 < extraLatin.length; _i5++) { + var _ch5 = extraLatin.charAt(_i5); + + defineSymbol(math, main, mathord, _ch5, _ch5); + defineSymbol(text, main, textord, _ch5, _ch5); +} + +/** + * This file provides support for Unicode range U+1D400 to U+1D7FF, + * Mathematical Alphanumeric Symbols. + * + * Function wideCharacterFont takes a wide character as input and returns + * the font information necessary to render it properly. + */ +/** + * Data below is from https://www.unicode.org/charts/PDF/U1D400.pdf + * That document sorts characters into groups by font type, say bold or italic. + * + * In the arrays below, each subarray consists three elements: + * * The CSS class of that group when in math mode. + * * The CSS class of that group when in text mode. + * * The font name, so that KaTeX can get font metrics. + */ + +var wideLatinLetterData = [["mathbf", "textbf", "Main-Bold"], // A-Z bold upright +["mathbf", "textbf", "Main-Bold"], // a-z bold upright +["mathnormal", "textit", "Math-Italic"], // A-Z italic +["mathnormal", "textit", "Math-Italic"], // a-z italic +["boldsymbol", "boldsymbol", "Main-BoldItalic"], // A-Z bold italic +["boldsymbol", "boldsymbol", "Main-BoldItalic"], // a-z bold italic +// Map fancy A-Z letters to script, not calligraphic. +// This aligns with unicode-math and math fonts (except Cambria Math). +["mathscr", "textscr", "Script-Regular"], // A-Z script +["", "", ""], // a-z script. No font +["", "", ""], // A-Z bold script. No font +["", "", ""], // a-z bold script. No font +["mathfrak", "textfrak", "Fraktur-Regular"], // A-Z Fraktur +["mathfrak", "textfrak", "Fraktur-Regular"], // a-z Fraktur +["mathbb", "textbb", "AMS-Regular"], // A-Z double-struck +["mathbb", "textbb", "AMS-Regular"], // k double-struck +// Note that we are using a bold font, but font metrics for regular Fraktur. +["mathboldfrak", "textboldfrak", "Fraktur-Regular"], // A-Z bold Fraktur +["mathboldfrak", "textboldfrak", "Fraktur-Regular"], // a-z bold Fraktur +["mathsf", "textsf", "SansSerif-Regular"], // A-Z sans-serif +["mathsf", "textsf", "SansSerif-Regular"], // a-z sans-serif +["mathboldsf", "textboldsf", "SansSerif-Bold"], // A-Z bold sans-serif +["mathboldsf", "textboldsf", "SansSerif-Bold"], // a-z bold sans-serif +["mathitsf", "textitsf", "SansSerif-Italic"], // A-Z italic sans-serif +["mathitsf", "textitsf", "SansSerif-Italic"], // a-z italic sans-serif +["", "", ""], // A-Z bold italic sans. No font +["", "", ""], // a-z bold italic sans. No font +["mathtt", "texttt", "Typewriter-Regular"], // A-Z monospace +["mathtt", "texttt", "Typewriter-Regular"] // a-z monospace +]; +var wideNumeralData = [["mathbf", "textbf", "Main-Bold"], // 0-9 bold +["", "", ""], // 0-9 double-struck. No KaTeX font. +["mathsf", "textsf", "SansSerif-Regular"], // 0-9 sans-serif +["mathboldsf", "textboldsf", "SansSerif-Bold"], // 0-9 bold sans-serif +["mathtt", "texttt", "Typewriter-Regular"] // 0-9 monospace +]; +var wideCharacterFont = function wideCharacterFont(wideChar, mode) { + // IE doesn't support codePointAt(). So work with the surrogate pair. + var H = wideChar.charCodeAt(0); // high surrogate + + var L = wideChar.charCodeAt(1); // low surrogate + + var codePoint = (H - 0xD800) * 0x400 + (L - 0xDC00) + 0x10000; + var j = mode === "math" ? 0 : 1; // column index for CSS class. + + if (0x1D400 <= codePoint && codePoint < 0x1D6A4) { + // wideLatinLetterData contains exactly 26 chars on each row. + // So we can calculate the relevant row. No traverse necessary. + var i = Math.floor((codePoint - 0x1D400) / 26); + return [wideLatinLetterData[i][2], wideLatinLetterData[i][j]]; + } else if (0x1D7CE <= codePoint && codePoint <= 0x1D7FF) { + // Numerals, ten per row. + var _i = Math.floor((codePoint - 0x1D7CE) / 10); + + return [wideNumeralData[_i][2], wideNumeralData[_i][j]]; + } else if (codePoint === 0x1D6A5 || codePoint === 0x1D6A6) { + // dotless i or j + return [wideLatinLetterData[0][2], wideLatinLetterData[0][j]]; + } else if (0x1D6A6 < codePoint && codePoint < 0x1D7CE) { + // Greek letters. Not supported, yet. + return ["", ""]; + } else { + // We don't support any wide characters outside 1D400–1D7FF. + throw new ParseError("Unsupported character: " + wideChar); + } +}; + +/* eslint no-console:0 */ + +/** + * Looks up the given symbol in fontMetrics, after applying any symbol + * replacements defined in symbol.js + */ +var lookupSymbol = function lookupSymbol(value, // TODO(#963): Use a union type for this. +fontName, mode) { + // Replace the value with its replaced value from symbol.js + if (symbols[mode][value] && symbols[mode][value].replace) { + value = symbols[mode][value].replace; + } + + return { + value: value, + metrics: getCharacterMetrics(value, fontName, mode) + }; +}; +/** + * Makes a symbolNode after translation via the list of symbols in symbols.js. + * Correctly pulls out metrics for the character, and optionally takes a list of + * classes to be attached to the node. + * + * TODO: make argument order closer to makeSpan + * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which + * should if present come first in `classes`. + * TODO(#953): Make `options` mandatory and always pass it in. + */ + + +var makeSymbol = function makeSymbol(value, fontName, mode, options, classes) { + var lookup = lookupSymbol(value, fontName, mode); + var metrics = lookup.metrics; + value = lookup.value; + var symbolNode; + + if (metrics) { + var italic = metrics.italic; + + if (mode === "text" || options && options.font === "mathit") { + italic = 0; + } + + symbolNode = new SymbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, metrics.width, classes); + } else { + // TODO(emily): Figure out a good way to only print this in development + typeof console !== "undefined" && console.warn("No character metrics " + ("for '" + value + "' in style '" + fontName + "' and mode '" + mode + "'")); + symbolNode = new SymbolNode(value, 0, 0, 0, 0, 0, classes); + } + + if (options) { + symbolNode.maxFontSize = options.sizeMultiplier; + + if (options.style.isTight()) { + symbolNode.classes.push("mtight"); + } + + var color = options.getColor(); + + if (color) { + symbolNode.style.color = color; + } + } + + return symbolNode; +}; +/** + * Makes a symbol in Main-Regular or AMS-Regular. + * Used for rel, bin, open, close, inner, and punct. + */ + + +var mathsym = function mathsym(value, mode, options, classes) { + if (classes === void 0) { + classes = []; + } + + // Decide what font to render the symbol in by its entry in the symbols + // table. + // Have a special case for when the value = \ because the \ is used as a + // textord in unsupported command errors but cannot be parsed as a regular + // text ordinal and is therefore not present as a symbol in the symbols + // table for text, as well as a special case for boldsymbol because it + // can be used for bold + and - + if (options.font === "boldsymbol" && lookupSymbol(value, "Main-Bold", mode).metrics) { + return makeSymbol(value, "Main-Bold", mode, options, classes.concat(["mathbf"])); + } else if (value === "\\" || symbols[mode][value].font === "main") { + return makeSymbol(value, "Main-Regular", mode, options, classes); + } else { + return makeSymbol(value, "AMS-Regular", mode, options, classes.concat(["amsrm"])); + } +}; +/** + * Determines which of the two font names (Main-Bold and Math-BoldItalic) and + * corresponding style tags (mathbf or boldsymbol) to use for font "boldsymbol", + * depending on the symbol. Use this function instead of fontMap for font + * "boldsymbol". + */ + + +var boldsymbol = function boldsymbol(value, mode, options, classes, type) { + if (type !== "textord" && lookupSymbol(value, "Math-BoldItalic", mode).metrics) { + return { + fontName: "Math-BoldItalic", + fontClass: "boldsymbol" + }; + } else { + // Some glyphs do not exist in Math-BoldItalic so we need to use + // Main-Bold instead. + return { + fontName: "Main-Bold", + fontClass: "mathbf" + }; + } +}; +/** + * Makes either a mathord or textord in the correct font and color. + */ + + +var makeOrd = function makeOrd(group, options, type) { + var mode = group.mode; + var text = group.text; + var classes = ["mord"]; // Math mode or Old font (i.e. \rm) + + var isFont = mode === "math" || mode === "text" && options.font; + var fontOrFamily = isFont ? options.font : options.fontFamily; + var wideFontName = ""; + var wideFontClass = ""; + + if (text.charCodeAt(0) === 0xD835) { + [wideFontName, wideFontClass] = wideCharacterFont(text, mode); + } + + if (wideFontName.length > 0) { + // surrogate pairs get special treatment + return makeSymbol(text, wideFontName, mode, options, classes.concat(wideFontClass)); + } else if (fontOrFamily) { + var fontName; + var fontClasses; + + if (fontOrFamily === "boldsymbol") { + var fontData = boldsymbol(text, mode, options, classes, type); + fontName = fontData.fontName; + fontClasses = [fontData.fontClass]; + } else if (isFont) { + fontName = fontMap[fontOrFamily].fontName; + fontClasses = [fontOrFamily]; + } else { + fontName = retrieveTextFontName(fontOrFamily, options.fontWeight, options.fontShape); + fontClasses = [fontOrFamily, options.fontWeight, options.fontShape]; + } + + if (lookupSymbol(text, fontName, mode).metrics) { + return makeSymbol(text, fontName, mode, options, classes.concat(fontClasses)); + } else if (ligatures.hasOwnProperty(text) && fontName.slice(0, 10) === "Typewriter") { + // Deconstruct ligatures in monospace fonts (\texttt, \tt). + var parts = []; + + for (var i = 0; i < text.length; i++) { + parts.push(makeSymbol(text[i], fontName, mode, options, classes.concat(fontClasses))); + } + + return makeFragment(parts); + } + } // Makes a symbol in the default font for mathords and textords. + + + if (type === "mathord") { + return makeSymbol(text, "Math-Italic", mode, options, classes.concat(["mathnormal"])); + } else if (type === "textord") { + var font = symbols[mode][text] && symbols[mode][text].font; + + if (font === "ams") { + var _fontName = retrieveTextFontName("amsrm", options.fontWeight, options.fontShape); + + return makeSymbol(text, _fontName, mode, options, classes.concat("amsrm", options.fontWeight, options.fontShape)); + } else if (font === "main" || !font) { + var _fontName2 = retrieveTextFontName("textrm", options.fontWeight, options.fontShape); + + return makeSymbol(text, _fontName2, mode, options, classes.concat(options.fontWeight, options.fontShape)); + } else { + // fonts added by plugins + var _fontName3 = retrieveTextFontName(font, options.fontWeight, options.fontShape); // We add font name as a css class + + + return makeSymbol(text, _fontName3, mode, options, classes.concat(_fontName3, options.fontWeight, options.fontShape)); + } + } else { + throw new Error("unexpected type: " + type + " in makeOrd"); + } +}; +/** + * Returns true if subsequent symbolNodes have the same classes, skew, maxFont, + * and styles. + */ + + +var canCombine = (prev, next) => { + if (createClass(prev.classes) !== createClass(next.classes) || prev.skew !== next.skew || prev.maxFontSize !== next.maxFontSize) { + return false; + } // If prev and next both are just "mbin"s or "mord"s we don't combine them + // so that the proper spacing can be preserved. + + + if (prev.classes.length === 1) { + var cls = prev.classes[0]; + + if (cls === "mbin" || cls === "mord") { + return false; + } + } + + for (var style in prev.style) { + if (prev.style.hasOwnProperty(style) && prev.style[style] !== next.style[style]) { + return false; + } + } + + for (var _style in next.style) { + if (next.style.hasOwnProperty(_style) && prev.style[_style] !== next.style[_style]) { + return false; + } + } + + return true; +}; +/** + * Combine consecutive domTree.symbolNodes into a single symbolNode. + * Note: this function mutates the argument. + */ + + +var tryCombineChars = chars => { + for (var i = 0; i < chars.length - 1; i++) { + var prev = chars[i]; + var next = chars[i + 1]; + + if (prev instanceof SymbolNode && next instanceof SymbolNode && canCombine(prev, next)) { + prev.text += next.text; + prev.height = Math.max(prev.height, next.height); + prev.depth = Math.max(prev.depth, next.depth); // Use the last character's italic correction since we use + // it to add padding to the right of the span created from + // the combined characters. + + prev.italic = next.italic; + chars.splice(i + 1, 1); + i--; + } + } + + return chars; +}; +/** + * Calculate the height, depth, and maxFontSize of an element based on its + * children. + */ + + +var sizeElementFromChildren = function sizeElementFromChildren(elem) { + var height = 0; + var depth = 0; + var maxFontSize = 0; + + for (var i = 0; i < elem.children.length; i++) { + var child = elem.children[i]; + + if (child.height > height) { + height = child.height; + } + + if (child.depth > depth) { + depth = child.depth; + } + + if (child.maxFontSize > maxFontSize) { + maxFontSize = child.maxFontSize; + } + } + + elem.height = height; + elem.depth = depth; + elem.maxFontSize = maxFontSize; +}; +/** + * Makes a span with the given list of classes, list of children, and options. + * + * TODO(#953): Ensure that `options` is always provided (currently some call + * sites don't pass it) and make the type below mandatory. + * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which + * should if present come first in `classes`. + */ + + +var makeSpan$2 = function makeSpan(classes, children, options, style) { + var span = new Span(classes, children, options, style); + sizeElementFromChildren(span); + return span; +}; // SVG one is simpler -- doesn't require height, depth, max-font setting. +// This is also a separate method for typesafety. + + +var makeSvgSpan = (classes, children, options, style) => new Span(classes, children, options, style); + +var makeLineSpan = function makeLineSpan(className, options, thickness) { + var line = makeSpan$2([className], [], options); + line.height = Math.max(thickness || options.fontMetrics().defaultRuleThickness, options.minRuleThickness); + line.style.borderBottomWidth = makeEm(line.height); + line.maxFontSize = 1.0; + return line; +}; +/** + * Makes an anchor with the given href, list of classes, list of children, + * and options. + */ + + +var makeAnchor = function makeAnchor(href, classes, children, options) { + var anchor = new Anchor(href, classes, children, options); + sizeElementFromChildren(anchor); + return anchor; +}; +/** + * Makes a document fragment with the given list of children. + */ + + +var makeFragment = function makeFragment(children) { + var fragment = new DocumentFragment(children); + sizeElementFromChildren(fragment); + return fragment; +}; +/** + * Wraps group in a span if it's a document fragment, allowing to apply classes + * and styles + */ + + +var wrapFragment = function wrapFragment(group, options) { + if (group instanceof DocumentFragment) { + return makeSpan$2([], [group], options); + } + + return group; +}; // These are exact object types to catch typos in the names of the optional fields. + + +// Computes the updated `children` list and the overall depth. +// +// This helper function for makeVList makes it easier to enforce type safety by +// allowing early exits (returns) in the logic. +var getVListChildrenAndDepth = function getVListChildrenAndDepth(params) { + if (params.positionType === "individualShift") { + var oldChildren = params.children; + var children = [oldChildren[0]]; // Add in kerns to the list of params.children to get each element to be + // shifted to the correct specified shift + + var _depth = -oldChildren[0].shift - oldChildren[0].elem.depth; + + var currPos = _depth; + + for (var i = 1; i < oldChildren.length; i++) { + var diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth; + var size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth); + currPos = currPos + diff; + children.push({ + type: "kern", + size + }); + children.push(oldChildren[i]); + } + + return { + children, + depth: _depth + }; + } + + var depth; + + if (params.positionType === "top") { + // We always start at the bottom, so calculate the bottom by adding up + // all the sizes + var bottom = params.positionData; + + for (var _i = 0; _i < params.children.length; _i++) { + var child = params.children[_i]; + bottom -= child.type === "kern" ? child.size : child.elem.height + child.elem.depth; + } + + depth = bottom; + } else if (params.positionType === "bottom") { + depth = -params.positionData; + } else { + var firstChild = params.children[0]; + + if (firstChild.type !== "elem") { + throw new Error('First child must have type "elem".'); + } + + if (params.positionType === "shift") { + depth = -firstChild.elem.depth - params.positionData; + } else if (params.positionType === "firstBaseline") { + depth = -firstChild.elem.depth; + } else { + throw new Error("Invalid positionType " + params.positionType + "."); + } + } + + return { + children: params.children, + depth + }; +}; +/** + * Makes a vertical list by stacking elements and kerns on top of each other. + * Allows for many different ways of specifying the positioning method. + * + * See VListParam documentation above. + */ + + +var makeVList = function makeVList(params, options) { + var { + children, + depth + } = getVListChildrenAndDepth(params); // Create a strut that is taller than any list item. The strut is added to + // each item, where it will determine the item's baseline. Since it has + // `overflow:hidden`, the strut's top edge will sit on the item's line box's + // top edge and the strut's bottom edge will sit on the item's baseline, + // with no additional line-height spacing. This allows the item baseline to + // be positioned precisely without worrying about font ascent and + // line-height. + + var pstrutSize = 0; + + for (var i = 0; i < children.length; i++) { + var child = children[i]; + + if (child.type === "elem") { + var elem = child.elem; + pstrutSize = Math.max(pstrutSize, elem.maxFontSize, elem.height); + } + } + + pstrutSize += 2; + var pstrut = makeSpan$2(["pstrut"], []); + pstrut.style.height = makeEm(pstrutSize); // Create a new list of actual children at the correct offsets + + var realChildren = []; + var minPos = depth; + var maxPos = depth; + var currPos = depth; + + for (var _i2 = 0; _i2 < children.length; _i2++) { + var _child = children[_i2]; + + if (_child.type === "kern") { + currPos += _child.size; + } else { + var _elem = _child.elem; + var classes = _child.wrapperClasses || []; + var style = _child.wrapperStyle || {}; + var childWrap = makeSpan$2(classes, [pstrut, _elem], undefined, style); + childWrap.style.top = makeEm(-pstrutSize - currPos - _elem.depth); + + if (_child.marginLeft) { + childWrap.style.marginLeft = _child.marginLeft; + } + + if (_child.marginRight) { + childWrap.style.marginRight = _child.marginRight; + } + + realChildren.push(childWrap); + currPos += _elem.height + _elem.depth; + } + + minPos = Math.min(minPos, currPos); + maxPos = Math.max(maxPos, currPos); + } // The vlist contents go in a table-cell with `vertical-align:bottom`. + // This cell's bottom edge will determine the containing table's baseline + // without overly expanding the containing line-box. + + + var vlist = makeSpan$2(["vlist"], realChildren); + vlist.style.height = makeEm(maxPos); // A second row is used if necessary to represent the vlist's depth. + + var rows; + + if (minPos < 0) { + // We will define depth in an empty span with display: table-cell. + // It should render with the height that we define. But Chrome, in + // contenteditable mode only, treats that span as if it contains some + // text content. And that min-height over-rides our desired height. + // So we put another empty span inside the depth strut span. + var emptySpan = makeSpan$2([], []); + var depthStrut = makeSpan$2(["vlist"], [emptySpan]); + depthStrut.style.height = makeEm(-minPos); // Safari wants the first row to have inline content; otherwise it + // puts the bottom of the *second* row on the baseline. + + var topStrut = makeSpan$2(["vlist-s"], [new SymbolNode("\u200b")]); + rows = [makeSpan$2(["vlist-r"], [vlist, topStrut]), makeSpan$2(["vlist-r"], [depthStrut])]; + } else { + rows = [makeSpan$2(["vlist-r"], [vlist])]; + } + + var vtable = makeSpan$2(["vlist-t"], rows); + + if (rows.length === 2) { + vtable.classes.push("vlist-t2"); + } + + vtable.height = maxPos; + vtable.depth = -minPos; + return vtable; +}; // Glue is a concept from TeX which is a flexible space between elements in +// either a vertical or horizontal list. In KaTeX, at least for now, it's +// static space between elements in a horizontal layout. + + +var makeGlue = (measurement, options) => { + // Make an empty span for the space + var rule = makeSpan$2(["mspace"], [], options); + var size = calculateSize(measurement, options); + rule.style.marginRight = makeEm(size); + return rule; +}; // Takes font options, and returns the appropriate fontLookup name + + +var retrieveTextFontName = function retrieveTextFontName(fontFamily, fontWeight, fontShape) { + var baseFontName = ""; + + switch (fontFamily) { + case "amsrm": + baseFontName = "AMS"; + break; + + case "textrm": + baseFontName = "Main"; + break; + + case "textsf": + baseFontName = "SansSerif"; + break; + + case "texttt": + baseFontName = "Typewriter"; + break; + + default: + baseFontName = fontFamily; + // use fonts added by a plugin + } + + var fontStylesName; + + if (fontWeight === "textbf" && fontShape === "textit") { + fontStylesName = "BoldItalic"; + } else if (fontWeight === "textbf") { + fontStylesName = "Bold"; + } else if (fontWeight === "textit") { + fontStylesName = "Italic"; + } else { + fontStylesName = "Regular"; + } + + return baseFontName + "-" + fontStylesName; +}; +/** + * Maps TeX font commands to objects containing: + * - variant: string used for "mathvariant" attribute in buildMathML.js + * - fontName: the "style" parameter to fontMetrics.getCharacterMetrics + */ +// A map between tex font commands an MathML mathvariant attribute values + + +var fontMap = { + // styles + "mathbf": { + variant: "bold", + fontName: "Main-Bold" + }, + "mathrm": { + variant: "normal", + fontName: "Main-Regular" + }, + "textit": { + variant: "italic", + fontName: "Main-Italic" + }, + "mathit": { + variant: "italic", + fontName: "Main-Italic" + }, + "mathnormal": { + variant: "italic", + fontName: "Math-Italic" + }, + // "boldsymbol" is missing because they require the use of multiple fonts: + // Math-BoldItalic and Main-Bold. This is handled by a special case in + // makeOrd which ends up calling boldsymbol. + // families + "mathbb": { + variant: "double-struck", + fontName: "AMS-Regular" + }, + "mathcal": { + variant: "script", + fontName: "Caligraphic-Regular" + }, + "mathfrak": { + variant: "fraktur", + fontName: "Fraktur-Regular" + }, + "mathscr": { + variant: "script", + fontName: "Script-Regular" + }, + "mathsf": { + variant: "sans-serif", + fontName: "SansSerif-Regular" + }, + "mathtt": { + variant: "monospace", + fontName: "Typewriter-Regular" + } +}; +var svgData = { + // path, width, height + vec: ["vec", 0.471, 0.714], + // values from the font glyph + oiintSize1: ["oiintSize1", 0.957, 0.499], + // oval to overlay the integrand + oiintSize2: ["oiintSize2", 1.472, 0.659], + oiiintSize1: ["oiiintSize1", 1.304, 0.499], + oiiintSize2: ["oiiintSize2", 1.98, 0.659] +}; + +var staticSvg = function staticSvg(value, options) { + // Create a span with inline SVG for the element. + var [pathName, width, height] = svgData[value]; + var path = new PathNode(pathName); + var svgNode = new SvgNode([path], { + "width": makeEm(width), + "height": makeEm(height), + // Override CSS rule `.katex svg { width: 100% }` + "style": "width:" + makeEm(width), + "viewBox": "0 0 " + 1000 * width + " " + 1000 * height, + "preserveAspectRatio": "xMinYMin" + }); + var span = makeSvgSpan(["overlay"], [svgNode], options); + span.height = height; + span.style.height = makeEm(height); + span.style.width = makeEm(width); + return span; +}; + +var buildCommon = { + fontMap, + makeSymbol, + mathsym, + makeSpan: makeSpan$2, + makeSvgSpan, + makeLineSpan, + makeAnchor, + makeFragment, + wrapFragment, + makeVList, + makeOrd, + makeGlue, + staticSvg, + svgData, + tryCombineChars +}; + +/** + * Describes spaces between different classes of atoms. + */ +var thinspace = { + number: 3, + unit: "mu" +}; +var mediumspace = { + number: 4, + unit: "mu" +}; +var thickspace = { + number: 5, + unit: "mu" +}; // Making the type below exact with all optional fields doesn't work due to +// - https://github.com/facebook/flow/issues/4582 +// - https://github.com/facebook/flow/issues/5688 +// However, since *all* fields are optional, $Shape<> works as suggested in 5688 +// above. + +// Spacing relationships for display and text styles +var spacings = { + mord: { + mop: thinspace, + mbin: mediumspace, + mrel: thickspace, + minner: thinspace + }, + mop: { + mord: thinspace, + mop: thinspace, + mrel: thickspace, + minner: thinspace + }, + mbin: { + mord: mediumspace, + mop: mediumspace, + mopen: mediumspace, + minner: mediumspace + }, + mrel: { + mord: thickspace, + mop: thickspace, + mopen: thickspace, + minner: thickspace + }, + mopen: {}, + mclose: { + mop: thinspace, + mbin: mediumspace, + mrel: thickspace, + minner: thinspace + }, + mpunct: { + mord: thinspace, + mop: thinspace, + mrel: thickspace, + mopen: thinspace, + mclose: thinspace, + mpunct: thinspace, + minner: thinspace + }, + minner: { + mord: thinspace, + mop: thinspace, + mbin: mediumspace, + mrel: thickspace, + mopen: thinspace, + mpunct: thinspace, + minner: thinspace + } +}; // Spacing relationships for script and scriptscript styles + +var tightSpacings = { + mord: { + mop: thinspace + }, + mop: { + mord: thinspace, + mop: thinspace + }, + mbin: {}, + mrel: {}, + mopen: {}, + mclose: { + mop: thinspace + }, + mpunct: {}, + minner: { + mop: thinspace + } +}; + +/** Context provided to function handlers for error messages. */ +// Note: reverse the order of the return type union will cause a flow error. +// See https://github.com/facebook/flow/issues/3663. +// More general version of `HtmlBuilder` for nodes (e.g. \sum, accent types) +// whose presence impacts super/subscripting. In this case, ParseNode<"supsub"> +// delegates its HTML building to the HtmlBuilder corresponding to these nodes. + +/** + * Final function spec for use at parse time. + * This is almost identical to `FunctionPropSpec`, except it + * 1. includes the function handler, and + * 2. requires all arguments except argTypes. + * It is generated by `defineFunction()` below. + */ + +/** + * All registered functions. + * `functions.js` just exports this same dictionary again and makes it public. + * `Parser.js` requires this dictionary. + */ +var _functions = {}; +/** + * All HTML builders. Should be only used in the `define*` and the `build*ML` + * functions. + */ + +var _htmlGroupBuilders = {}; +/** + * All MathML builders. Should be only used in the `define*` and the `build*ML` + * functions. + */ + +var _mathmlGroupBuilders = {}; +function defineFunction(_ref) { + var { + type, + names, + props, + handler, + htmlBuilder, + mathmlBuilder + } = _ref; + // Set default values of functions + var data = { + type, + numArgs: props.numArgs, + argTypes: props.argTypes, + allowedInArgument: !!props.allowedInArgument, + allowedInText: !!props.allowedInText, + allowedInMath: props.allowedInMath === undefined ? true : props.allowedInMath, + numOptionalArgs: props.numOptionalArgs || 0, + infix: !!props.infix, + primitive: !!props.primitive, + handler: handler + }; + + for (var i = 0; i < names.length; ++i) { + _functions[names[i]] = data; + } + + if (type) { + if (htmlBuilder) { + _htmlGroupBuilders[type] = htmlBuilder; + } + + if (mathmlBuilder) { + _mathmlGroupBuilders[type] = mathmlBuilder; + } + } +} +/** + * Use this to register only the HTML and MathML builders for a function (e.g. + * if the function's ParseNode is generated in Parser.js rather than via a + * stand-alone handler provided to `defineFunction`). + */ + +function defineFunctionBuilders(_ref2) { + var { + type, + htmlBuilder, + mathmlBuilder + } = _ref2; + defineFunction({ + type, + names: [], + props: { + numArgs: 0 + }, + + handler() { + throw new Error('Should never be called.'); + }, + + htmlBuilder, + mathmlBuilder + }); +} +var normalizeArgument = function normalizeArgument(arg) { + return arg.type === "ordgroup" && arg.body.length === 1 ? arg.body[0] : arg; +}; // Since the corresponding buildHTML/buildMathML function expects a +// list of elements, we normalize for different kinds of arguments + +var ordargument = function ordargument(arg) { + return arg.type === "ordgroup" ? arg.body : [arg]; +}; + +/** + * This file does the main work of building a domTree structure from a parse + * tree. The entry point is the `buildHTML` function, which takes a parse tree. + * Then, the buildExpression, buildGroup, and various groupBuilders functions + * are called, to produce a final HTML tree. + */ +var makeSpan$1 = buildCommon.makeSpan; // Binary atoms (first class `mbin`) change into ordinary atoms (`mord`) +// depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6, +// and the text before Rule 19. + +var binLeftCanceller = ["leftmost", "mbin", "mopen", "mrel", "mop", "mpunct"]; +var binRightCanceller = ["rightmost", "mrel", "mclose", "mpunct"]; +var styleMap$1 = { + "display": Style$1.DISPLAY, + "text": Style$1.TEXT, + "script": Style$1.SCRIPT, + "scriptscript": Style$1.SCRIPTSCRIPT +}; +var DomEnum = { + mord: "mord", + mop: "mop", + mbin: "mbin", + mrel: "mrel", + mopen: "mopen", + mclose: "mclose", + mpunct: "mpunct", + minner: "minner" +}; + +/** + * Take a list of nodes, build them in order, and return a list of the built + * nodes. documentFragments are flattened into their contents, so the + * returned list contains no fragments. `isRealGroup` is true if `expression` + * is a real group (no atoms will be added on either side), as opposed to + * a partial group (e.g. one created by \color). `surrounding` is an array + * consisting type of nodes that will be added to the left and right. + */ +var buildExpression$1 = function buildExpression(expression, options, isRealGroup, surrounding) { + if (surrounding === void 0) { + surrounding = [null, null]; + } + + // Parse expressions into `groups`. + var groups = []; + + for (var i = 0; i < expression.length; i++) { + var output = buildGroup$1(expression[i], options); + + if (output instanceof DocumentFragment) { + var children = output.children; + groups.push(...children); + } else { + groups.push(output); + } + } // Combine consecutive domTree.symbolNodes into a single symbolNode. + + + buildCommon.tryCombineChars(groups); // If `expression` is a partial group, let the parent handle spacings + // to avoid processing groups multiple times. + + if (!isRealGroup) { + return groups; + } + + var glueOptions = options; + + if (expression.length === 1) { + var node = expression[0]; + + if (node.type === "sizing") { + glueOptions = options.havingSize(node.size); + } else if (node.type === "styling") { + glueOptions = options.havingStyle(styleMap$1[node.style]); + } + } // Dummy spans for determining spacings between surrounding atoms. + // If `expression` has no atoms on the left or right, class "leftmost" + // or "rightmost", respectively, is used to indicate it. + + + var dummyPrev = makeSpan$1([surrounding[0] || "leftmost"], [], options); + var dummyNext = makeSpan$1([surrounding[1] || "rightmost"], [], options); // TODO: These code assumes that a node's math class is the first element + // of its `classes` array. A later cleanup should ensure this, for + // instance by changing the signature of `makeSpan`. + // Before determining what spaces to insert, perform bin cancellation. + // Binary operators change to ordinary symbols in some contexts. + + var isRoot = isRealGroup === "root"; + traverseNonSpaceNodes(groups, (node, prev) => { + var prevType = prev.classes[0]; + var type = node.classes[0]; + + if (prevType === "mbin" && utils.contains(binRightCanceller, type)) { + prev.classes[0] = "mord"; + } else if (type === "mbin" && utils.contains(binLeftCanceller, prevType)) { + node.classes[0] = "mord"; + } + }, { + node: dummyPrev + }, dummyNext, isRoot); + traverseNonSpaceNodes(groups, (node, prev) => { + var prevType = getTypeOfDomTree(prev); + var type = getTypeOfDomTree(node); // 'mtight' indicates that the node is script or scriptscript style. + + var space = prevType && type ? node.hasClass("mtight") ? tightSpacings[prevType][type] : spacings[prevType][type] : null; + + if (space) { + // Insert glue (spacing) after the `prev`. + return buildCommon.makeGlue(space, glueOptions); + } + }, { + node: dummyPrev + }, dummyNext, isRoot); + return groups; +}; // Depth-first traverse non-space `nodes`, calling `callback` with the current and +// previous node as arguments, optionally returning a node to insert after the +// previous node. `prev` is an object with the previous node and `insertAfter` +// function to insert after it. `next` is a node that will be added to the right. +// Used for bin cancellation and inserting spacings. + +var traverseNonSpaceNodes = function traverseNonSpaceNodes(nodes, callback, prev, next, isRoot) { + if (next) { + // temporarily append the right node, if exists + nodes.push(next); + } + + var i = 0; + + for (; i < nodes.length; i++) { + var node = nodes[i]; + var partialGroup = checkPartialGroup(node); + + if (partialGroup) { + // Recursive DFS + // $FlowFixMe: make nodes a $ReadOnlyArray by returning a new array + traverseNonSpaceNodes(partialGroup.children, callback, prev, null, isRoot); + continue; + } // Ignore explicit spaces (e.g., \;, \,) when determining what implicit + // spacing should go between atoms of different classes + + + var nonspace = !node.hasClass("mspace"); + + if (nonspace) { + var result = callback(node, prev.node); + + if (result) { + if (prev.insertAfter) { + prev.insertAfter(result); + } else { + // insert at front + nodes.unshift(result); + i++; + } + } + } + + if (nonspace) { + prev.node = node; + } else if (isRoot && node.hasClass("newline")) { + prev.node = makeSpan$1(["leftmost"]); // treat like beginning of line + } + + prev.insertAfter = (index => n => { + nodes.splice(index + 1, 0, n); + i++; + })(i); + } + + if (next) { + nodes.pop(); + } +}; // Check if given node is a partial group, i.e., does not affect spacing around. + + +var checkPartialGroup = function checkPartialGroup(node) { + if (node instanceof DocumentFragment || node instanceof Anchor || node instanceof Span && node.hasClass("enclosing")) { + return node; + } + + return null; +}; // Return the outermost node of a domTree. + + +var getOutermostNode = function getOutermostNode(node, side) { + var partialGroup = checkPartialGroup(node); + + if (partialGroup) { + var children = partialGroup.children; + + if (children.length) { + if (side === "right") { + return getOutermostNode(children[children.length - 1], "right"); + } else if (side === "left") { + return getOutermostNode(children[0], "left"); + } + } + } + + return node; +}; // Return math atom class (mclass) of a domTree. +// If `side` is given, it will get the type of the outermost node at given side. + + +var getTypeOfDomTree = function getTypeOfDomTree(node, side) { + if (!node) { + return null; + } + + if (side) { + node = getOutermostNode(node, side); + } // This makes a lot of assumptions as to where the type of atom + // appears. We should do a better job of enforcing this. + + + return DomEnum[node.classes[0]] || null; +}; +var makeNullDelimiter = function makeNullDelimiter(options, classes) { + var moreClasses = ["nulldelimiter"].concat(options.baseSizingClasses()); + return makeSpan$1(classes.concat(moreClasses)); +}; +/** + * buildGroup is the function that takes a group and calls the correct groupType + * function for it. It also handles the interaction of size and style changes + * between parents and children. + */ + +var buildGroup$1 = function buildGroup(group, options, baseOptions) { + if (!group) { + return makeSpan$1(); + } + + if (_htmlGroupBuilders[group.type]) { + // Call the groupBuilders function + // $FlowFixMe + var groupNode = _htmlGroupBuilders[group.type](group, options); // If the size changed between the parent and the current group, account + // for that size difference. + + if (baseOptions && options.size !== baseOptions.size) { + groupNode = makeSpan$1(options.sizingClasses(baseOptions), [groupNode], options); + var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; + groupNode.height *= multiplier; + groupNode.depth *= multiplier; + } + + return groupNode; + } else { + throw new ParseError("Got group of unknown type: '" + group.type + "'"); + } +}; +/** + * Combine an array of HTML DOM nodes (e.g., the output of `buildExpression`) + * into an unbreakable HTML node of class .base, with proper struts to + * guarantee correct vertical extent. `buildHTML` calls this repeatedly to + * make up the entire expression as a sequence of unbreakable units. + */ + +function buildHTMLUnbreakable(children, options) { + // Compute height and depth of this chunk. + var body = makeSpan$1(["base"], children, options); // Add strut, which ensures that the top of the HTML element falls at + // the height of the expression, and the bottom of the HTML element + // falls at the depth of the expression. + + var strut = makeSpan$1(["strut"]); + strut.style.height = makeEm(body.height + body.depth); + + if (body.depth) { + strut.style.verticalAlign = makeEm(-body.depth); + } + + body.children.unshift(strut); + return body; +} +/** + * Take an entire parse tree, and build it into an appropriate set of HTML + * nodes. + */ + + +function buildHTML(tree, options) { + // Strip off outer tag wrapper for processing below. + var tag = null; + + if (tree.length === 1 && tree[0].type === "tag") { + tag = tree[0].tag; + tree = tree[0].body; + } // Build the expression contained in the tree + + + var expression = buildExpression$1(tree, options, "root"); + var eqnNum; + + if (expression.length === 2 && expression[1].hasClass("tag")) { + // An environment with automatic equation numbers, e.g. {gather}. + eqnNum = expression.pop(); + } + + var children = []; // Create one base node for each chunk between potential line breaks. + // The TeXBook [p.173] says "A formula will be broken only after a + // relation symbol like $=$ or $<$ or $\rightarrow$, or after a binary + // operation symbol like $+$ or $-$ or $\times$, where the relation or + // binary operation is on the ``outer level'' of the formula (i.e., not + // enclosed in {...} and not part of an \over construction)." + + var parts = []; + + for (var i = 0; i < expression.length; i++) { + parts.push(expression[i]); + + if (expression[i].hasClass("mbin") || expression[i].hasClass("mrel") || expression[i].hasClass("allowbreak")) { + // Put any post-operator glue on same line as operator. + // Watch for \nobreak along the way, and stop at \newline. + var nobreak = false; + + while (i < expression.length - 1 && expression[i + 1].hasClass("mspace") && !expression[i + 1].hasClass("newline")) { + i++; + parts.push(expression[i]); + + if (expression[i].hasClass("nobreak")) { + nobreak = true; + } + } // Don't allow break if \nobreak among the post-operator glue. + + + if (!nobreak) { + children.push(buildHTMLUnbreakable(parts, options)); + parts = []; + } + } else if (expression[i].hasClass("newline")) { + // Write the line except the newline + parts.pop(); + + if (parts.length > 0) { + children.push(buildHTMLUnbreakable(parts, options)); + parts = []; + } // Put the newline at the top level + + + children.push(expression[i]); + } + } + + if (parts.length > 0) { + children.push(buildHTMLUnbreakable(parts, options)); + } // Now, if there was a tag, build it too and append it as a final child. + + + var tagChild; + + if (tag) { + tagChild = buildHTMLUnbreakable(buildExpression$1(tag, options, true)); + tagChild.classes = ["tag"]; + children.push(tagChild); + } else if (eqnNum) { + children.push(eqnNum); + } + + var htmlNode = makeSpan$1(["katex-html"], children); + htmlNode.setAttribute("aria-hidden", "true"); // Adjust the strut of the tag to be the maximum height of all children + // (the height of the enclosing htmlNode) for proper vertical alignment. + + if (tagChild) { + var strut = tagChild.children[0]; + strut.style.height = makeEm(htmlNode.height + htmlNode.depth); + + if (htmlNode.depth) { + strut.style.verticalAlign = makeEm(-htmlNode.depth); + } + } + + return htmlNode; +} + +/** + * These objects store data about MathML nodes. This is the MathML equivalent + * of the types in domTree.js. Since MathML handles its own rendering, and + * since we're mainly using MathML to improve accessibility, we don't manage + * any of the styling state that the plain DOM nodes do. + * + * The `toNode` and `toMarkup` functions work similarly to how they do in + * domTree.js, creating namespaced DOM nodes and HTML text markup respectively. + */ +function newDocumentFragment(children) { + return new DocumentFragment(children); +} +/** + * This node represents a general purpose MathML node of any type. The + * constructor requires the type of node to create (for example, `"mo"` or + * `"mspace"`, corresponding to `` and `` tags). + */ + +class MathNode { + constructor(type, children, classes) { + this.type = void 0; + this.attributes = void 0; + this.children = void 0; + this.classes = void 0; + this.type = type; + this.attributes = {}; + this.children = children || []; + this.classes = classes || []; + } + /** + * Sets an attribute on a MathML node. MathML depends on attributes to convey a + * semantic content, so this is used heavily. + */ + + + setAttribute(name, value) { + this.attributes[name] = value; + } + /** + * Gets an attribute on a MathML node. + */ + + + getAttribute(name) { + return this.attributes[name]; + } + /** + * Converts the math node into a MathML-namespaced DOM element. + */ + + + toNode() { + var node = document.createElementNS("http://www.w3.org/1998/Math/MathML", this.type); + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + if (this.classes.length > 0) { + node.className = createClass(this.classes); + } + + for (var i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + + return node; + } + /** + * Converts the math node into an HTML markup string. + */ + + + toMarkup() { + var markup = "<" + this.type; // Add the attributes + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + markup += " " + attr + "=\""; + markup += utils.escape(this.attributes[attr]); + markup += "\""; + } + } + + if (this.classes.length > 0) { + markup += " class =\"" + utils.escape(createClass(this.classes)) + "\""; + } + + markup += ">"; + + for (var i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + markup += ""; + return markup; + } + /** + * Converts the math node into a string, similar to innerText, but escaped. + */ + + + toText() { + return this.children.map(child => child.toText()).join(""); + } + +} +/** + * This node represents a piece of text. + */ + +class TextNode { + constructor(text) { + this.text = void 0; + this.text = text; + } + /** + * Converts the text node into a DOM text node. + */ + + + toNode() { + return document.createTextNode(this.text); + } + /** + * Converts the text node into escaped HTML markup + * (representing the text itself). + */ + + + toMarkup() { + return utils.escape(this.toText()); + } + /** + * Converts the text node into a string + * (representing the text itself). + */ + + + toText() { + return this.text; + } + +} +/** + * This node represents a space, but may render as or as text, + * depending on the width. + */ + +class SpaceNode { + /** + * Create a Space node with width given in CSS ems. + */ + constructor(width) { + this.width = void 0; + this.character = void 0; + this.width = width; // See https://www.w3.org/TR/2000/WD-MathML2-20000328/chapter6.html + // for a table of space-like characters. We use Unicode + // representations instead of &LongNames; as it's not clear how to + // make the latter via document.createTextNode. + + if (width >= 0.05555 && width <= 0.05556) { + this.character = "\u200a"; //   + } else if (width >= 0.1666 && width <= 0.1667) { + this.character = "\u2009"; //   + } else if (width >= 0.2222 && width <= 0.2223) { + this.character = "\u2005"; //   + } else if (width >= 0.2777 && width <= 0.2778) { + this.character = "\u2005\u200a"; //    + } else if (width >= -0.05556 && width <= -0.05555) { + this.character = "\u200a\u2063"; // ​ + } else if (width >= -0.1667 && width <= -0.1666) { + this.character = "\u2009\u2063"; // ​ + } else if (width >= -0.2223 && width <= -0.2222) { + this.character = "\u205f\u2063"; // ​ + } else if (width >= -0.2778 && width <= -0.2777) { + this.character = "\u2005\u2063"; // ​ + } else { + this.character = null; + } + } + /** + * Converts the math node into a MathML-namespaced DOM element. + */ + + + toNode() { + if (this.character) { + return document.createTextNode(this.character); + } else { + var node = document.createElementNS("http://www.w3.org/1998/Math/MathML", "mspace"); + node.setAttribute("width", makeEm(this.width)); + return node; + } + } + /** + * Converts the math node into an HTML markup string. + */ + + + toMarkup() { + if (this.character) { + return "" + this.character + ""; + } else { + return ""; + } + } + /** + * Converts the math node into a string, similar to innerText. + */ + + + toText() { + if (this.character) { + return this.character; + } else { + return " "; + } + } + +} + +var mathMLTree = { + MathNode, + TextNode, + SpaceNode, + newDocumentFragment +}; + +/** + * This file converts a parse tree into a corresponding MathML tree. The main + * entry point is the `buildMathML` function, which takes a parse tree from the + * parser. + */ + +/** + * Takes a symbol and converts it into a MathML text node after performing + * optional replacement from symbols.js. + */ +var makeText = function makeText(text, mode, options) { + if (symbols[mode][text] && symbols[mode][text].replace && text.charCodeAt(0) !== 0xD835 && !(ligatures.hasOwnProperty(text) && options && (options.fontFamily && options.fontFamily.slice(4, 6) === "tt" || options.font && options.font.slice(4, 6) === "tt"))) { + text = symbols[mode][text].replace; + } + + return new mathMLTree.TextNode(text); +}; +/** + * Wrap the given array of nodes in an node if needed, i.e., + * unless the array has length 1. Always returns a single node. + */ + +var makeRow = function makeRow(body) { + if (body.length === 1) { + return body[0]; + } else { + return new mathMLTree.MathNode("mrow", body); + } +}; +/** + * Returns the math variant as a string or null if none is required. + */ + +var getVariant = function getVariant(group, options) { + // Handle \text... font specifiers as best we can. + // MathML has a limited list of allowable mathvariant specifiers; see + // https://www.w3.org/TR/MathML3/chapter3.html#presm.commatt + if (options.fontFamily === "texttt") { + return "monospace"; + } else if (options.fontFamily === "textsf") { + if (options.fontShape === "textit" && options.fontWeight === "textbf") { + return "sans-serif-bold-italic"; + } else if (options.fontShape === "textit") { + return "sans-serif-italic"; + } else if (options.fontWeight === "textbf") { + return "bold-sans-serif"; + } else { + return "sans-serif"; + } + } else if (options.fontShape === "textit" && options.fontWeight === "textbf") { + return "bold-italic"; + } else if (options.fontShape === "textit") { + return "italic"; + } else if (options.fontWeight === "textbf") { + return "bold"; + } + + var font = options.font; + + if (!font || font === "mathnormal") { + return null; + } + + var mode = group.mode; + + if (font === "mathit") { + return "italic"; + } else if (font === "boldsymbol") { + return group.type === "textord" ? "bold" : "bold-italic"; + } else if (font === "mathbf") { + return "bold"; + } else if (font === "mathbb") { + return "double-struck"; + } else if (font === "mathfrak") { + return "fraktur"; + } else if (font === "mathscr" || font === "mathcal") { + // MathML makes no distinction between script and calligraphic + return "script"; + } else if (font === "mathsf") { + return "sans-serif"; + } else if (font === "mathtt") { + return "monospace"; + } + + var text = group.text; + + if (utils.contains(["\\imath", "\\jmath"], text)) { + return null; + } + + if (symbols[mode][text] && symbols[mode][text].replace) { + text = symbols[mode][text].replace; + } + + var fontName = buildCommon.fontMap[font].fontName; + + if (getCharacterMetrics(text, fontName, mode)) { + return buildCommon.fontMap[font].variant; + } + + return null; +}; +/** + * Takes a list of nodes, builds them, and returns a list of the generated + * MathML nodes. Also combine consecutive outputs into a single + * tag. + */ + +var buildExpression = function buildExpression(expression, options, isOrdgroup) { + if (expression.length === 1) { + var group = buildGroup(expression[0], options); + + if (isOrdgroup && group instanceof MathNode && group.type === "mo") { + // When TeX writers want to suppress spacing on an operator, + // they often put the operator by itself inside braces. + group.setAttribute("lspace", "0em"); + group.setAttribute("rspace", "0em"); + } + + return [group]; + } + + var groups = []; + var lastGroup; + + for (var i = 0; i < expression.length; i++) { + var _group = buildGroup(expression[i], options); + + if (_group instanceof MathNode && lastGroup instanceof MathNode) { + // Concatenate adjacent s + if (_group.type === 'mtext' && lastGroup.type === 'mtext' && _group.getAttribute('mathvariant') === lastGroup.getAttribute('mathvariant')) { + lastGroup.children.push(..._group.children); + continue; // Concatenate adjacent s + } else if (_group.type === 'mn' && lastGroup.type === 'mn') { + lastGroup.children.push(..._group.children); + continue; // Concatenate ... followed by . + } else if (_group.type === 'mi' && _group.children.length === 1 && lastGroup.type === 'mn') { + var child = _group.children[0]; + + if (child instanceof TextNode && child.text === '.') { + lastGroup.children.push(..._group.children); + continue; + } + } else if (lastGroup.type === 'mi' && lastGroup.children.length === 1) { + var lastChild = lastGroup.children[0]; + + if (lastChild instanceof TextNode && lastChild.text === '\u0338' && (_group.type === 'mo' || _group.type === 'mi' || _group.type === 'mn')) { + var _child = _group.children[0]; + + if (_child instanceof TextNode && _child.text.length > 0) { + // Overlay with combining character long solidus + _child.text = _child.text.slice(0, 1) + "\u0338" + _child.text.slice(1); + groups.pop(); + } + } + } + } + + groups.push(_group); + lastGroup = _group; + } + + return groups; +}; +/** + * Equivalent to buildExpression, but wraps the elements in an + * if there's more than one. Returns a single node instead of an array. + */ + +var buildExpressionRow = function buildExpressionRow(expression, options, isOrdgroup) { + return makeRow(buildExpression(expression, options, isOrdgroup)); +}; +/** + * Takes a group from the parser and calls the appropriate groupBuilders function + * on it to produce a MathML node. + */ + +var buildGroup = function buildGroup(group, options) { + if (!group) { + return new mathMLTree.MathNode("mrow"); + } + + if (_mathmlGroupBuilders[group.type]) { + // Call the groupBuilders function + // $FlowFixMe + var result = _mathmlGroupBuilders[group.type](group, options); // $FlowFixMe + + return result; + } else { + throw new ParseError("Got group of unknown type: '" + group.type + "'"); + } +}; +/** + * Takes a full parse tree and settings and builds a MathML representation of + * it. In particular, we put the elements from building the parse tree into a + * tag so we can also include that TeX source as an annotation. + * + * Note that we actually return a domTree element with a `` inside it so + * we can do appropriate styling. + */ + +function buildMathML(tree, texExpression, options, isDisplayMode, forMathmlOnly) { + var expression = buildExpression(tree, options); // TODO: Make a pass thru the MathML similar to buildHTML.traverseNonSpaceNodes + // and add spacing nodes. This is necessary only adjacent to math operators + // like \sin or \lim or to subsup elements that contain math operators. + // MathML takes care of the other spacing issues. + // Wrap up the expression in an mrow so it is presented in the semantics + // tag correctly, unless it's a single or . + + var wrapper; + + if (expression.length === 1 && expression[0] instanceof MathNode && utils.contains(["mrow", "mtable"], expression[0].type)) { + wrapper = expression[0]; + } else { + wrapper = new mathMLTree.MathNode("mrow", expression); + } // Build a TeX annotation of the source + + + var annotation = new mathMLTree.MathNode("annotation", [new mathMLTree.TextNode(texExpression)]); + annotation.setAttribute("encoding", "application/x-tex"); + var semantics = new mathMLTree.MathNode("semantics", [wrapper, annotation]); + var math = new mathMLTree.MathNode("math", [semantics]); + math.setAttribute("xmlns", "http://www.w3.org/1998/Math/MathML"); + + if (isDisplayMode) { + math.setAttribute("display", "block"); + } // You can't style nodes, so we wrap the node in a span. + // NOTE: The span class is not typed to have nodes as children, and + // we don't want to make the children type more generic since the children + // of span are expected to have more fields in `buildHtml` contexts. + + + var wrapperClass = forMathmlOnly ? "katex" : "katex-mathml"; // $FlowFixMe + + return buildCommon.makeSpan([wrapperClass], [math]); +} + +var optionsFromSettings = function optionsFromSettings(settings) { + return new Options({ + style: settings.displayMode ? Style$1.DISPLAY : Style$1.TEXT, + maxSize: settings.maxSize, + minRuleThickness: settings.minRuleThickness + }); +}; + +var displayWrap = function displayWrap(node, settings) { + if (settings.displayMode) { + var classes = ["katex-display"]; + + if (settings.leqno) { + classes.push("leqno"); + } + + if (settings.fleqn) { + classes.push("fleqn"); + } + + node = buildCommon.makeSpan(classes, [node]); + } + + return node; +}; + +var buildTree = function buildTree(tree, expression, settings) { + var options = optionsFromSettings(settings); + var katexNode; + + if (settings.output === "mathml") { + return buildMathML(tree, expression, options, settings.displayMode, true); + } else if (settings.output === "html") { + var htmlNode = buildHTML(tree, options); + katexNode = buildCommon.makeSpan(["katex"], [htmlNode]); + } else { + var mathMLNode = buildMathML(tree, expression, options, settings.displayMode, false); + + var _htmlNode = buildHTML(tree, options); + + katexNode = buildCommon.makeSpan(["katex"], [mathMLNode, _htmlNode]); + } + + return displayWrap(katexNode, settings); +}; +var buildHTMLTree = function buildHTMLTree(tree, expression, settings) { + var options = optionsFromSettings(settings); + var htmlNode = buildHTML(tree, options); + var katexNode = buildCommon.makeSpan(["katex"], [htmlNode]); + return displayWrap(katexNode, settings); +}; + +/** + * This file provides support to buildMathML.js and buildHTML.js + * for stretchy wide elements rendered from SVG files + * and other CSS trickery. + */ +var stretchyCodePoint = { + widehat: "^", + widecheck: "ˇ", + widetilde: "~", + utilde: "~", + overleftarrow: "\u2190", + underleftarrow: "\u2190", + xleftarrow: "\u2190", + overrightarrow: "\u2192", + underrightarrow: "\u2192", + xrightarrow: "\u2192", + underbrace: "\u23df", + overbrace: "\u23de", + overgroup: "\u23e0", + undergroup: "\u23e1", + overleftrightarrow: "\u2194", + underleftrightarrow: "\u2194", + xleftrightarrow: "\u2194", + Overrightarrow: "\u21d2", + xRightarrow: "\u21d2", + overleftharpoon: "\u21bc", + xleftharpoonup: "\u21bc", + overrightharpoon: "\u21c0", + xrightharpoonup: "\u21c0", + xLeftarrow: "\u21d0", + xLeftrightarrow: "\u21d4", + xhookleftarrow: "\u21a9", + xhookrightarrow: "\u21aa", + xmapsto: "\u21a6", + xrightharpoondown: "\u21c1", + xleftharpoondown: "\u21bd", + xrightleftharpoons: "\u21cc", + xleftrightharpoons: "\u21cb", + xtwoheadleftarrow: "\u219e", + xtwoheadrightarrow: "\u21a0", + xlongequal: "=", + xtofrom: "\u21c4", + xrightleftarrows: "\u21c4", + xrightequilibrium: "\u21cc", + // Not a perfect match. + xleftequilibrium: "\u21cb", + // None better available. + "\\cdrightarrow": "\u2192", + "\\cdleftarrow": "\u2190", + "\\cdlongequal": "=" +}; + +var mathMLnode = function mathMLnode(label) { + var node = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(stretchyCodePoint[label.replace(/^\\/, '')])]); + node.setAttribute("stretchy", "true"); + return node; +}; // Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts. +// Copyright (c) 2009-2010, Design Science, Inc. () +// Copyright (c) 2014-2017 Khan Academy () +// Licensed under the SIL Open Font License, Version 1.1. +// See \nhttp://scripts.sil.org/OFL +// Very Long SVGs +// Many of the KaTeX stretchy wide elements use a long SVG image and an +// overflow: hidden tactic to achieve a stretchy image while avoiding +// distortion of arrowheads or brace corners. +// The SVG typically contains a very long (400 em) arrow. +// The SVG is in a container span that has overflow: hidden, so the span +// acts like a window that exposes only part of the SVG. +// The SVG always has a longer, thinner aspect ratio than the container span. +// After the SVG fills 100% of the height of the container span, +// there is a long arrow shaft left over. That left-over shaft is not shown. +// Instead, it is sliced off because the span's CSS has overflow: hidden. +// Thus, the reader sees an arrow that matches the subject matter width +// without distortion. +// Some functions, such as \cancel, need to vary their aspect ratio. These +// functions do not get the overflow SVG treatment. +// Second Brush Stroke +// Low resolution monitors struggle to display images in fine detail. +// So browsers apply anti-aliasing. A long straight arrow shaft therefore +// will sometimes appear as if it has a blurred edge. +// To mitigate this, these SVG files contain a second "brush-stroke" on the +// arrow shafts. That is, a second long thin rectangular SVG path has been +// written directly on top of each arrow shaft. This reinforcement causes +// some of the screen pixels to display as black instead of the anti-aliased +// gray pixel that a single path would generate. So we get arrow shafts +// whose edges appear to be sharper. +// In the katexImagesData object just below, the dimensions all +// correspond to path geometry inside the relevant SVG. +// For example, \overrightarrow uses the same arrowhead as glyph U+2192 +// from the KaTeX Main font. The scaling factor is 1000. +// That is, inside the font, that arrowhead is 522 units tall, which +// corresponds to 0.522 em inside the document. + + +var katexImagesData = { + // path(s), minWidth, height, align + overrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"], + overleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"], + underrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"], + underleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"], + xrightarrow: [["rightarrow"], 1.469, 522, "xMaxYMin"], + "\\cdrightarrow": [["rightarrow"], 3.0, 522, "xMaxYMin"], + // CD minwwidth2.5pc + xleftarrow: [["leftarrow"], 1.469, 522, "xMinYMin"], + "\\cdleftarrow": [["leftarrow"], 3.0, 522, "xMinYMin"], + Overrightarrow: [["doublerightarrow"], 0.888, 560, "xMaxYMin"], + xRightarrow: [["doublerightarrow"], 1.526, 560, "xMaxYMin"], + xLeftarrow: [["doubleleftarrow"], 1.526, 560, "xMinYMin"], + overleftharpoon: [["leftharpoon"], 0.888, 522, "xMinYMin"], + xleftharpoonup: [["leftharpoon"], 0.888, 522, "xMinYMin"], + xleftharpoondown: [["leftharpoondown"], 0.888, 522, "xMinYMin"], + overrightharpoon: [["rightharpoon"], 0.888, 522, "xMaxYMin"], + xrightharpoonup: [["rightharpoon"], 0.888, 522, "xMaxYMin"], + xrightharpoondown: [["rightharpoondown"], 0.888, 522, "xMaxYMin"], + xlongequal: [["longequal"], 0.888, 334, "xMinYMin"], + "\\cdlongequal": [["longequal"], 3.0, 334, "xMinYMin"], + xtwoheadleftarrow: [["twoheadleftarrow"], 0.888, 334, "xMinYMin"], + xtwoheadrightarrow: [["twoheadrightarrow"], 0.888, 334, "xMaxYMin"], + overleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522], + overbrace: [["leftbrace", "midbrace", "rightbrace"], 1.6, 548], + underbrace: [["leftbraceunder", "midbraceunder", "rightbraceunder"], 1.6, 548], + underleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522], + xleftrightarrow: [["leftarrow", "rightarrow"], 1.75, 522], + xLeftrightarrow: [["doubleleftarrow", "doublerightarrow"], 1.75, 560], + xrightleftharpoons: [["leftharpoondownplus", "rightharpoonplus"], 1.75, 716], + xleftrightharpoons: [["leftharpoonplus", "rightharpoondownplus"], 1.75, 716], + xhookleftarrow: [["leftarrow", "righthook"], 1.08, 522], + xhookrightarrow: [["lefthook", "rightarrow"], 1.08, 522], + overlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522], + underlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522], + overgroup: [["leftgroup", "rightgroup"], 0.888, 342], + undergroup: [["leftgroupunder", "rightgroupunder"], 0.888, 342], + xmapsto: [["leftmapsto", "rightarrow"], 1.5, 522], + xtofrom: [["leftToFrom", "rightToFrom"], 1.75, 528], + // The next three arrows are from the mhchem package. + // In mhchem.sty, min-length is 2.0em. But these arrows might appear in the + // document as \xrightarrow or \xrightleftharpoons. Those have + // min-length = 1.75em, so we set min-length on these next three to match. + xrightleftarrows: [["baraboveleftarrow", "rightarrowabovebar"], 1.75, 901], + xrightequilibrium: [["baraboveshortleftharpoon", "rightharpoonaboveshortbar"], 1.75, 716], + xleftequilibrium: [["shortbaraboveleftharpoon", "shortrightharpoonabovebar"], 1.75, 716] +}; + +var groupLength = function groupLength(arg) { + if (arg.type === "ordgroup") { + return arg.body.length; + } else { + return 1; + } +}; + +var svgSpan = function svgSpan(group, options) { + // Create a span with inline SVG for the element. + function buildSvgSpan_() { + var viewBoxWidth = 400000; // default + + var label = group.label.slice(1); + + if (utils.contains(["widehat", "widecheck", "widetilde", "utilde"], label)) { + // Each type in the `if` statement corresponds to one of the ParseNode + // types below. This narrowing is required to access `grp.base`. + // $FlowFixMe + var grp = group; // There are four SVG images available for each function. + // Choose a taller image when there are more characters. + + var numChars = groupLength(grp.base); + var viewBoxHeight; + var pathName; + + var _height; + + if (numChars > 5) { + if (label === "widehat" || label === "widecheck") { + viewBoxHeight = 420; + viewBoxWidth = 2364; + _height = 0.42; + pathName = label + "4"; + } else { + viewBoxHeight = 312; + viewBoxWidth = 2340; + _height = 0.34; + pathName = "tilde4"; + } + } else { + var imgIndex = [1, 1, 2, 2, 3, 3][numChars]; + + if (label === "widehat" || label === "widecheck") { + viewBoxWidth = [0, 1062, 2364, 2364, 2364][imgIndex]; + viewBoxHeight = [0, 239, 300, 360, 420][imgIndex]; + _height = [0, 0.24, 0.3, 0.3, 0.36, 0.42][imgIndex]; + pathName = label + imgIndex; + } else { + viewBoxWidth = [0, 600, 1033, 2339, 2340][imgIndex]; + viewBoxHeight = [0, 260, 286, 306, 312][imgIndex]; + _height = [0, 0.26, 0.286, 0.3, 0.306, 0.34][imgIndex]; + pathName = "tilde" + imgIndex; + } + } + + var path = new PathNode(pathName); + var svgNode = new SvgNode([path], { + "width": "100%", + "height": makeEm(_height), + "viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight, + "preserveAspectRatio": "none" + }); + return { + span: buildCommon.makeSvgSpan([], [svgNode], options), + minWidth: 0, + height: _height + }; + } else { + var spans = []; + var data = katexImagesData[label]; + var [paths, _minWidth, _viewBoxHeight] = data; + + var _height2 = _viewBoxHeight / 1000; + + var numSvgChildren = paths.length; + var widthClasses; + var aligns; + + if (numSvgChildren === 1) { + // $FlowFixMe: All these cases must be of the 4-tuple type. + var align1 = data[3]; + widthClasses = ["hide-tail"]; + aligns = [align1]; + } else if (numSvgChildren === 2) { + widthClasses = ["halfarrow-left", "halfarrow-right"]; + aligns = ["xMinYMin", "xMaxYMin"]; + } else if (numSvgChildren === 3) { + widthClasses = ["brace-left", "brace-center", "brace-right"]; + aligns = ["xMinYMin", "xMidYMin", "xMaxYMin"]; + } else { + throw new Error("Correct katexImagesData or update code here to support\n " + numSvgChildren + " children."); + } + + for (var i = 0; i < numSvgChildren; i++) { + var _path = new PathNode(paths[i]); + + var _svgNode = new SvgNode([_path], { + "width": "400em", + "height": makeEm(_height2), + "viewBox": "0 0 " + viewBoxWidth + " " + _viewBoxHeight, + "preserveAspectRatio": aligns[i] + " slice" + }); + + var _span = buildCommon.makeSvgSpan([widthClasses[i]], [_svgNode], options); + + if (numSvgChildren === 1) { + return { + span: _span, + minWidth: _minWidth, + height: _height2 + }; + } else { + _span.style.height = makeEm(_height2); + spans.push(_span); + } + } + + return { + span: buildCommon.makeSpan(["stretchy"], spans, options), + minWidth: _minWidth, + height: _height2 + }; + } + } // buildSvgSpan_() + + + var { + span, + minWidth, + height + } = buildSvgSpan_(); // Note that we are returning span.depth = 0. + // Any adjustments relative to the baseline must be done in buildHTML. + + span.height = height; + span.style.height = makeEm(height); + + if (minWidth > 0) { + span.style.minWidth = makeEm(minWidth); + } + + return span; +}; + +var encloseSpan = function encloseSpan(inner, label, topPad, bottomPad, options) { + // Return an image span for \cancel, \bcancel, \xcancel, \fbox, or \angl + var img; + var totalHeight = inner.height + inner.depth + topPad + bottomPad; + + if (/fbox|color|angl/.test(label)) { + img = buildCommon.makeSpan(["stretchy", label], [], options); + + if (label === "fbox") { + var color = options.color && options.getColor(); + + if (color) { + img.style.borderColor = color; + } + } + } else { + // \cancel, \bcancel, or \xcancel + // Since \cancel's SVG is inline and it omits the viewBox attribute, + // its stroke-width will not vary with span area. + var lines = []; + + if (/^[bx]cancel$/.test(label)) { + lines.push(new LineNode({ + "x1": "0", + "y1": "0", + "x2": "100%", + "y2": "100%", + "stroke-width": "0.046em" + })); + } + + if (/^x?cancel$/.test(label)) { + lines.push(new LineNode({ + "x1": "0", + "y1": "100%", + "x2": "100%", + "y2": "0", + "stroke-width": "0.046em" + })); + } + + var svgNode = new SvgNode(lines, { + "width": "100%", + "height": makeEm(totalHeight) + }); + img = buildCommon.makeSvgSpan([], [svgNode], options); + } + + img.height = totalHeight; + img.style.height = makeEm(totalHeight); + return img; +}; + +var stretchy = { + encloseSpan, + mathMLnode, + svgSpan +}; + +/** + * Asserts that the node is of the given type and returns it with stricter + * typing. Throws if the node's type does not match. + */ +function assertNodeType(node, type) { + if (!node || node.type !== type) { + throw new Error("Expected node of type " + type + ", but got " + (node ? "node of type " + node.type : String(node))); + } // $FlowFixMe, >=0.125 + + + return node; +} +/** + * Returns the node more strictly typed iff it is of the given type. Otherwise, + * returns null. + */ + +function assertSymbolNodeType(node) { + var typedNode = checkSymbolNodeType(node); + + if (!typedNode) { + throw new Error("Expected node of symbol group type, but got " + (node ? "node of type " + node.type : String(node))); + } + + return typedNode; +} +/** + * Returns the node more strictly typed iff it is of the given type. Otherwise, + * returns null. + */ + +function checkSymbolNodeType(node) { + if (node && (node.type === "atom" || NON_ATOMS.hasOwnProperty(node.type))) { + // $FlowFixMe + return node; + } + + return null; +} + +// NOTE: Unlike most `htmlBuilder`s, this one handles not only "accent", but +// also "supsub" since an accent can affect super/subscripting. +var htmlBuilder$a = (grp, options) => { + // Accents are handled in the TeXbook pg. 443, rule 12. + var base; + var group; + var supSubGroup; + + if (grp && grp.type === "supsub") { + // If our base is a character box, and we have superscripts and + // subscripts, the supsub will defer to us. In particular, we want + // to attach the superscripts and subscripts to the inner body (so + // that the position of the superscripts and subscripts won't be + // affected by the height of the accent). We accomplish this by + // sticking the base of the accent into the base of the supsub, and + // rendering that, while keeping track of where the accent is. + // The real accent group is the base of the supsub group + group = assertNodeType(grp.base, "accent"); // The character box is the base of the accent group + + base = group.base; // Stick the character box into the base of the supsub group + + grp.base = base; // Rerender the supsub group with its new base, and store that + // result. + + supSubGroup = assertSpan(buildGroup$1(grp, options)); // reset original base + + grp.base = group; + } else { + group = assertNodeType(grp, "accent"); + base = group.base; + } // Build the base group + + + var body = buildGroup$1(base, options.havingCrampedStyle()); // Does the accent need to shift for the skew of a character? + + var mustShift = group.isShifty && utils.isCharacterBox(base); // Calculate the skew of the accent. This is based on the line "If the + // nucleus is not a single character, let s = 0; otherwise set s to the + // kern amount for the nucleus followed by the \skewchar of its font." + // Note that our skew metrics are just the kern between each character + // and the skewchar. + + var skew = 0; + + if (mustShift) { + // If the base is a character box, then we want the skew of the + // innermost character. To do that, we find the innermost character: + var baseChar = utils.getBaseElem(base); // Then, we render its group to get the symbol inside it + + var baseGroup = buildGroup$1(baseChar, options.havingCrampedStyle()); // Finally, we pull the skew off of the symbol. + + skew = assertSymbolDomNode(baseGroup).skew; // Note that we now throw away baseGroup, because the layers we + // removed with getBaseElem might contain things like \color which + // we can't get rid of. + // TODO(emily): Find a better way to get the skew + } + + var accentBelow = group.label === "\\c"; // calculate the amount of space between the body and the accent + + var clearance = accentBelow ? body.height + body.depth : Math.min(body.height, options.fontMetrics().xHeight); // Build the accent + + var accentBody; + + if (!group.isStretchy) { + var accent; + var width; + + if (group.label === "\\vec") { + // Before version 0.9, \vec used the combining font glyph U+20D7. + // But browsers, especially Safari, are not consistent in how they + // render combining characters when not preceded by a character. + // So now we use an SVG. + // If Safari reforms, we should consider reverting to the glyph. + accent = buildCommon.staticSvg("vec", options); + width = buildCommon.svgData.vec[1]; + } else { + accent = buildCommon.makeOrd({ + mode: group.mode, + text: group.label + }, options, "textord"); + accent = assertSymbolDomNode(accent); // Remove the italic correction of the accent, because it only serves to + // shift the accent over to a place we don't want. + + accent.italic = 0; + width = accent.width; + + if (accentBelow) { + clearance += accent.depth; + } + } + + accentBody = buildCommon.makeSpan(["accent-body"], [accent]); // "Full" accents expand the width of the resulting symbol to be + // at least the width of the accent, and overlap directly onto the + // character without any vertical offset. + + var accentFull = group.label === "\\textcircled"; + + if (accentFull) { + accentBody.classes.push('accent-full'); + clearance = body.height; + } // Shift the accent over by the skew. + + + var left = skew; // CSS defines `.katex .accent .accent-body:not(.accent-full) { width: 0 }` + // so that the accent doesn't contribute to the bounding box. + // We need to shift the character by its width (effectively half + // its width) to compensate. + + if (!accentFull) { + left -= width / 2; + } + + accentBody.style.left = makeEm(left); // \textcircled uses the \bigcirc glyph, so it needs some + // vertical adjustment to match LaTeX. + + if (group.label === "\\textcircled") { + accentBody.style.top = ".2em"; + } + + accentBody = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: body + }, { + type: "kern", + size: -clearance + }, { + type: "elem", + elem: accentBody + }] + }, options); + } else { + accentBody = stretchy.svgSpan(group, options); + accentBody = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: body + }, { + type: "elem", + elem: accentBody, + wrapperClasses: ["svg-align"], + wrapperStyle: skew > 0 ? { + width: "calc(100% - " + makeEm(2 * skew) + ")", + marginLeft: makeEm(2 * skew) + } : undefined + }] + }, options); + } + + var accentWrap = buildCommon.makeSpan(["mord", "accent"], [accentBody], options); + + if (supSubGroup) { + // Here, we replace the "base" child of the supsub with our newly + // generated accent. + supSubGroup.children[0] = accentWrap; // Since we don't rerun the height calculation after replacing the + // accent, we manually recalculate height. + + supSubGroup.height = Math.max(accentWrap.height, supSubGroup.height); // Accents should always be ords, even when their innards are not. + + supSubGroup.classes[0] = "mord"; + return supSubGroup; + } else { + return accentWrap; + } +}; + +var mathmlBuilder$9 = (group, options) => { + var accentNode = group.isStretchy ? stretchy.mathMLnode(group.label) : new mathMLTree.MathNode("mo", [makeText(group.label, group.mode)]); + var node = new mathMLTree.MathNode("mover", [buildGroup(group.base, options), accentNode]); + node.setAttribute("accent", "true"); + return node; +}; + +var NON_STRETCHY_ACCENT_REGEX = new RegExp(["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring"].map(accent => "\\" + accent).join("|")); // Accents + +defineFunction({ + type: "accent", + names: ["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring", "\\widecheck", "\\widehat", "\\widetilde", "\\overrightarrow", "\\overleftarrow", "\\Overrightarrow", "\\overleftrightarrow", "\\overgroup", "\\overlinesegment", "\\overleftharpoon", "\\overrightharpoon"], + props: { + numArgs: 1 + }, + handler: (context, args) => { + var base = normalizeArgument(args[0]); + var isStretchy = !NON_STRETCHY_ACCENT_REGEX.test(context.funcName); + var isShifty = !isStretchy || context.funcName === "\\widehat" || context.funcName === "\\widetilde" || context.funcName === "\\widecheck"; + return { + type: "accent", + mode: context.parser.mode, + label: context.funcName, + isStretchy: isStretchy, + isShifty: isShifty, + base: base + }; + }, + htmlBuilder: htmlBuilder$a, + mathmlBuilder: mathmlBuilder$9 +}); // Text-mode accents + +defineFunction({ + type: "accent", + names: ["\\'", "\\`", "\\^", "\\~", "\\=", "\\u", "\\.", '\\"', "\\c", "\\r", "\\H", "\\v", "\\textcircled"], + props: { + numArgs: 1, + allowedInText: true, + allowedInMath: true, + // unless in strict mode + argTypes: ["primitive"] + }, + handler: (context, args) => { + var base = args[0]; + var mode = context.parser.mode; + + if (mode === "math") { + context.parser.settings.reportNonstrict("mathVsTextAccents", "LaTeX's accent " + context.funcName + " works only in text mode"); + mode = "text"; + } + + return { + type: "accent", + mode: mode, + label: context.funcName, + isStretchy: false, + isShifty: true, + base: base + }; + }, + htmlBuilder: htmlBuilder$a, + mathmlBuilder: mathmlBuilder$9 +}); + +// Horizontal overlap functions +defineFunction({ + type: "accentUnder", + names: ["\\underleftarrow", "\\underrightarrow", "\\underleftrightarrow", "\\undergroup", "\\underlinesegment", "\\utilde"], + props: { + numArgs: 1 + }, + handler: (_ref, args) => { + var { + parser, + funcName + } = _ref; + var base = args[0]; + return { + type: "accentUnder", + mode: parser.mode, + label: funcName, + base: base + }; + }, + htmlBuilder: (group, options) => { + // Treat under accents much like underlines. + var innerGroup = buildGroup$1(group.base, options); + var accentBody = stretchy.svgSpan(group, options); + var kern = group.label === "\\utilde" ? 0.12 : 0; // Generate the vlist, with the appropriate kerns + + var vlist = buildCommon.makeVList({ + positionType: "top", + positionData: innerGroup.height, + children: [{ + type: "elem", + elem: accentBody, + wrapperClasses: ["svg-align"] + }, { + type: "kern", + size: kern + }, { + type: "elem", + elem: innerGroup + }] + }, options); + return buildCommon.makeSpan(["mord", "accentunder"], [vlist], options); + }, + mathmlBuilder: (group, options) => { + var accentNode = stretchy.mathMLnode(group.label); + var node = new mathMLTree.MathNode("munder", [buildGroup(group.base, options), accentNode]); + node.setAttribute("accentunder", "true"); + return node; + } +}); + +// Helper function +var paddedNode = group => { + var node = new mathMLTree.MathNode("mpadded", group ? [group] : []); + node.setAttribute("width", "+0.6em"); + node.setAttribute("lspace", "0.3em"); + return node; +}; // Stretchy arrows with an optional argument + + +defineFunction({ + type: "xArrow", + names: ["\\xleftarrow", "\\xrightarrow", "\\xLeftarrow", "\\xRightarrow", "\\xleftrightarrow", "\\xLeftrightarrow", "\\xhookleftarrow", "\\xhookrightarrow", "\\xmapsto", "\\xrightharpoondown", "\\xrightharpoonup", "\\xleftharpoondown", "\\xleftharpoonup", "\\xrightleftharpoons", "\\xleftrightharpoons", "\\xlongequal", "\\xtwoheadrightarrow", "\\xtwoheadleftarrow", "\\xtofrom", // The next 3 functions are here to support the mhchem extension. + // Direct use of these functions is discouraged and may break someday. + "\\xrightleftarrows", "\\xrightequilibrium", "\\xleftequilibrium", // The next 3 functions are here only to support the {CD} environment. + "\\\\cdrightarrow", "\\\\cdleftarrow", "\\\\cdlongequal"], + props: { + numArgs: 1, + numOptionalArgs: 1 + }, + + handler(_ref, args, optArgs) { + var { + parser, + funcName + } = _ref; + return { + type: "xArrow", + mode: parser.mode, + label: funcName, + body: args[0], + below: optArgs[0] + }; + }, + + // Flow is unable to correctly infer the type of `group`, even though it's + // unambiguously determined from the passed-in `type` above. + htmlBuilder(group, options) { + var style = options.style; // Build the argument groups in the appropriate style. + // Ref: amsmath.dtx: \hbox{$\scriptstyle\mkern#3mu{#6}\mkern#4mu$}% + // Some groups can return document fragments. Handle those by wrapping + // them in a span. + + var newOptions = options.havingStyle(style.sup()); + var upperGroup = buildCommon.wrapFragment(buildGroup$1(group.body, newOptions, options), options); + var arrowPrefix = group.label.slice(0, 2) === "\\x" ? "x" : "cd"; + upperGroup.classes.push(arrowPrefix + "-arrow-pad"); + var lowerGroup; + + if (group.below) { + // Build the lower group + newOptions = options.havingStyle(style.sub()); + lowerGroup = buildCommon.wrapFragment(buildGroup$1(group.below, newOptions, options), options); + lowerGroup.classes.push(arrowPrefix + "-arrow-pad"); + } + + var arrowBody = stretchy.svgSpan(group, options); // Re shift: Note that stretchy.svgSpan returned arrowBody.depth = 0. + // The point we want on the math axis is at 0.5 * arrowBody.height. + + var arrowShift = -options.fontMetrics().axisHeight + 0.5 * arrowBody.height; // 2 mu kern. Ref: amsmath.dtx: #7\if0#2\else\mkern#2mu\fi + + var upperShift = -options.fontMetrics().axisHeight - 0.5 * arrowBody.height - 0.111; // 0.111 em = 2 mu + + if (upperGroup.depth > 0.25 || group.label === "\\xleftequilibrium") { + upperShift -= upperGroup.depth; // shift up if depth encroaches + } // Generate the vlist + + + var vlist; + + if (lowerGroup) { + var lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + 0.5 * arrowBody.height + 0.111; + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: upperGroup, + shift: upperShift + }, { + type: "elem", + elem: arrowBody, + shift: arrowShift + }, { + type: "elem", + elem: lowerGroup, + shift: lowerShift + }] + }, options); + } else { + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: upperGroup, + shift: upperShift + }, { + type: "elem", + elem: arrowBody, + shift: arrowShift + }] + }, options); + } // $FlowFixMe: Replace this with passing "svg-align" into makeVList. + + + vlist.children[0].children[0].children[1].classes.push("svg-align"); + return buildCommon.makeSpan(["mrel", "x-arrow"], [vlist], options); + }, + + mathmlBuilder(group, options) { + var arrowNode = stretchy.mathMLnode(group.label); + arrowNode.setAttribute("minsize", group.label.charAt(0) === "x" ? "1.75em" : "3.0em"); + var node; + + if (group.body) { + var upperNode = paddedNode(buildGroup(group.body, options)); + + if (group.below) { + var lowerNode = paddedNode(buildGroup(group.below, options)); + node = new mathMLTree.MathNode("munderover", [arrowNode, lowerNode, upperNode]); + } else { + node = new mathMLTree.MathNode("mover", [arrowNode, upperNode]); + } + } else if (group.below) { + var _lowerNode = paddedNode(buildGroup(group.below, options)); + + node = new mathMLTree.MathNode("munder", [arrowNode, _lowerNode]); + } else { + // This should never happen. + // Parser.js throws an error if there is no argument. + node = paddedNode(); + node = new mathMLTree.MathNode("mover", [arrowNode, node]); + } + + return node; + } + +}); + +var makeSpan = buildCommon.makeSpan; + +function htmlBuilder$9(group, options) { + var elements = buildExpression$1(group.body, options, true); + return makeSpan([group.mclass], elements, options); +} + +function mathmlBuilder$8(group, options) { + var node; + var inner = buildExpression(group.body, options); + + if (group.mclass === "minner") { + node = new mathMLTree.MathNode("mpadded", inner); + } else if (group.mclass === "mord") { + if (group.isCharacterBox) { + node = inner[0]; + node.type = "mi"; + } else { + node = new mathMLTree.MathNode("mi", inner); + } + } else { + if (group.isCharacterBox) { + node = inner[0]; + node.type = "mo"; + } else { + node = new mathMLTree.MathNode("mo", inner); + } // Set spacing based on what is the most likely adjacent atom type. + // See TeXbook p170. + + + if (group.mclass === "mbin") { + node.attributes.lspace = "0.22em"; // medium space + + node.attributes.rspace = "0.22em"; + } else if (group.mclass === "mpunct") { + node.attributes.lspace = "0em"; + node.attributes.rspace = "0.17em"; // thinspace + } else if (group.mclass === "mopen" || group.mclass === "mclose") { + node.attributes.lspace = "0em"; + node.attributes.rspace = "0em"; + } else if (group.mclass === "minner") { + node.attributes.lspace = "0.0556em"; // 1 mu is the most likely option + + node.attributes.width = "+0.1111em"; + } // MathML default space is 5/18 em, so needs no action. + // Ref: https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo + + } + + return node; +} // Math class commands except \mathop + + +defineFunction({ + type: "mclass", + names: ["\\mathord", "\\mathbin", "\\mathrel", "\\mathopen", "\\mathclose", "\\mathpunct", "\\mathinner"], + props: { + numArgs: 1, + primitive: true + }, + + handler(_ref, args) { + var { + parser, + funcName + } = _ref; + var body = args[0]; + return { + type: "mclass", + mode: parser.mode, + mclass: "m" + funcName.slice(5), + // TODO(kevinb): don't prefix with 'm' + body: ordargument(body), + isCharacterBox: utils.isCharacterBox(body) + }; + }, + + htmlBuilder: htmlBuilder$9, + mathmlBuilder: mathmlBuilder$8 +}); +var binrelClass = arg => { + // \binrel@ spacing varies with (bin|rel|ord) of the atom in the argument. + // (by rendering separately and with {}s before and after, and measuring + // the change in spacing). We'll do roughly the same by detecting the + // atom type directly. + var atom = arg.type === "ordgroup" && arg.body.length ? arg.body[0] : arg; + + if (atom.type === "atom" && (atom.family === "bin" || atom.family === "rel")) { + return "m" + atom.family; + } else { + return "mord"; + } +}; // \@binrel{x}{y} renders like y but as mbin/mrel/mord if x is mbin/mrel/mord. +// This is equivalent to \binrel@{x}\binrel@@{y} in AMSTeX. + +defineFunction({ + type: "mclass", + names: ["\\@binrel"], + props: { + numArgs: 2 + }, + + handler(_ref2, args) { + var { + parser + } = _ref2; + return { + type: "mclass", + mode: parser.mode, + mclass: binrelClass(args[0]), + body: ordargument(args[1]), + isCharacterBox: utils.isCharacterBox(args[1]) + }; + } + +}); // Build a relation or stacked op by placing one symbol on top of another + +defineFunction({ + type: "mclass", + names: ["\\stackrel", "\\overset", "\\underset"], + props: { + numArgs: 2 + }, + + handler(_ref3, args) { + var { + parser, + funcName + } = _ref3; + var baseArg = args[1]; + var shiftedArg = args[0]; + var mclass; + + if (funcName !== "\\stackrel") { + // LaTeX applies \binrel spacing to \overset and \underset. + mclass = binrelClass(baseArg); + } else { + mclass = "mrel"; // for \stackrel + } + + var baseOp = { + type: "op", + mode: baseArg.mode, + limits: true, + alwaysHandleSupSub: true, + parentIsSupSub: false, + symbol: false, + suppressBaseShift: funcName !== "\\stackrel", + body: ordargument(baseArg) + }; + var supsub = { + type: "supsub", + mode: shiftedArg.mode, + base: baseOp, + sup: funcName === "\\underset" ? null : shiftedArg, + sub: funcName === "\\underset" ? shiftedArg : null + }; + return { + type: "mclass", + mode: parser.mode, + mclass, + body: [supsub], + isCharacterBox: utils.isCharacterBox(supsub) + }; + }, + + htmlBuilder: htmlBuilder$9, + mathmlBuilder: mathmlBuilder$8 +}); + +// \pmb is a simulation of bold font. +// The version of \pmb in ambsy.sty works by typesetting three copies +// with small offsets. We use CSS text-shadow. +// It's a hack. Not as good as a real bold font. Better than nothing. +defineFunction({ + type: "pmb", + names: ["\\pmb"], + props: { + numArgs: 1, + allowedInText: true + }, + + handler(_ref, args) { + var { + parser + } = _ref; + return { + type: "pmb", + mode: parser.mode, + mclass: binrelClass(args[0]), + body: ordargument(args[0]) + }; + }, + + htmlBuilder(group, options) { + var elements = buildExpression$1(group.body, options, true); + var node = buildCommon.makeSpan([group.mclass], elements, options); + node.style.textShadow = "0.02em 0.01em 0.04px"; + return node; + }, + + mathmlBuilder(group, style) { + var inner = buildExpression(group.body, style); // Wrap with an element. + + var node = new mathMLTree.MathNode("mstyle", inner); + node.setAttribute("style", "text-shadow: 0.02em 0.01em 0.04px"); + return node; + } + +}); + +var cdArrowFunctionName = { + ">": "\\\\cdrightarrow", + "<": "\\\\cdleftarrow", + "=": "\\\\cdlongequal", + "A": "\\uparrow", + "V": "\\downarrow", + "|": "\\Vert", + ".": "no arrow" +}; + +var newCell = () => { + // Create an empty cell, to be filled below with parse nodes. + // The parseTree from this module must be constructed like the + // one created by parseArray(), so an empty CD cell must + // be a ParseNode<"styling">. And CD is always displaystyle. + // So these values are fixed and flow can do implicit typing. + return { + type: "styling", + body: [], + mode: "math", + style: "display" + }; +}; + +var isStartOfArrow = node => { + return node.type === "textord" && node.text === "@"; +}; + +var isLabelEnd = (node, endChar) => { + return (node.type === "mathord" || node.type === "atom") && node.text === endChar; +}; + +function cdArrow(arrowChar, labels, parser) { + // Return a parse tree of an arrow and its labels. + // This acts in a way similar to a macro expansion. + var funcName = cdArrowFunctionName[arrowChar]; + + switch (funcName) { + case "\\\\cdrightarrow": + case "\\\\cdleftarrow": + return parser.callFunction(funcName, [labels[0]], [labels[1]]); + + case "\\uparrow": + case "\\downarrow": + { + var leftLabel = parser.callFunction("\\\\cdleft", [labels[0]], []); + var bareArrow = { + type: "atom", + text: funcName, + mode: "math", + family: "rel" + }; + var sizedArrow = parser.callFunction("\\Big", [bareArrow], []); + var rightLabel = parser.callFunction("\\\\cdright", [labels[1]], []); + var arrowGroup = { + type: "ordgroup", + mode: "math", + body: [leftLabel, sizedArrow, rightLabel] + }; + return parser.callFunction("\\\\cdparent", [arrowGroup], []); + } + + case "\\\\cdlongequal": + return parser.callFunction("\\\\cdlongequal", [], []); + + case "\\Vert": + { + var arrow = { + type: "textord", + text: "\\Vert", + mode: "math" + }; + return parser.callFunction("\\Big", [arrow], []); + } + + default: + return { + type: "textord", + text: " ", + mode: "math" + }; + } +} + +function parseCD(parser) { + // Get the array's parse nodes with \\ temporarily mapped to \cr. + var parsedRows = []; + parser.gullet.beginGroup(); + parser.gullet.macros.set("\\cr", "\\\\\\relax"); + parser.gullet.beginGroup(); + + while (true) { + // eslint-disable-line no-constant-condition + // Get the parse nodes for the next row. + parsedRows.push(parser.parseExpression(false, "\\\\")); + parser.gullet.endGroup(); + parser.gullet.beginGroup(); + var next = parser.fetch().text; + + if (next === "&" || next === "\\\\") { + parser.consume(); + } else if (next === "\\end") { + if (parsedRows[parsedRows.length - 1].length === 0) { + parsedRows.pop(); // final row ended in \\ + } + + break; + } else { + throw new ParseError("Expected \\\\ or \\cr or \\end", parser.nextToken); + } + } + + var row = []; + var body = [row]; // Loop thru the parse nodes. Collect them into cells and arrows. + + for (var i = 0; i < parsedRows.length; i++) { + // Start a new row. + var rowNodes = parsedRows[i]; // Create the first cell. + + var cell = newCell(); + + for (var j = 0; j < rowNodes.length; j++) { + if (!isStartOfArrow(rowNodes[j])) { + // If a parseNode is not an arrow, it goes into a cell. + cell.body.push(rowNodes[j]); + } else { + // Parse node j is an "@", the start of an arrow. + // Before starting on the arrow, push the cell into `row`. + row.push(cell); // Now collect parseNodes into an arrow. + // The character after "@" defines the arrow type. + + j += 1; + var arrowChar = assertSymbolNodeType(rowNodes[j]).text; // Create two empty label nodes. We may or may not use them. + + var labels = new Array(2); + labels[0] = { + type: "ordgroup", + mode: "math", + body: [] + }; + labels[1] = { + type: "ordgroup", + mode: "math", + body: [] + }; // Process the arrow. + + if ("=|.".indexOf(arrowChar) > -1) ; else if ("<>AV".indexOf(arrowChar) > -1) { + // Four arrows, `@>>>`, `@<<<`, `@AAA`, and `@VVV`, each take + // two optional labels. E.g. the right-point arrow syntax is + // really: @>{optional label}>{optional label}> + // Collect parseNodes into labels. + for (var labelNum = 0; labelNum < 2; labelNum++) { + var inLabel = true; + + for (var k = j + 1; k < rowNodes.length; k++) { + if (isLabelEnd(rowNodes[k], arrowChar)) { + inLabel = false; + j = k; + break; + } + + if (isStartOfArrow(rowNodes[k])) { + throw new ParseError("Missing a " + arrowChar + " character to complete a CD arrow.", rowNodes[k]); + } + + labels[labelNum].body.push(rowNodes[k]); + } + + if (inLabel) { + // isLabelEnd never returned a true. + throw new ParseError("Missing a " + arrowChar + " character to complete a CD arrow.", rowNodes[j]); + } + } + } else { + throw new ParseError("Expected one of \"<>AV=|.\" after @", rowNodes[j]); + } // Now join the arrow to its labels. + + + var arrow = cdArrow(arrowChar, labels, parser); // Wrap the arrow in ParseNode<"styling">. + // This is done to match parseArray() behavior. + + var wrappedArrow = { + type: "styling", + body: [arrow], + mode: "math", + style: "display" // CD is always displaystyle. + + }; + row.push(wrappedArrow); // In CD's syntax, cells are implicit. That is, everything that + // is not an arrow gets collected into a cell. So create an empty + // cell now. It will collect upcoming parseNodes. + + cell = newCell(); + } + } + + if (i % 2 === 0) { + // Even-numbered rows consist of: cell, arrow, cell, arrow, ... cell + // The last cell is not yet pushed into `row`, so: + row.push(cell); + } else { + // Odd-numbered rows consist of: vert arrow, empty cell, ... vert arrow + // Remove the empty cell that was placed at the beginning of `row`. + row.shift(); + } + + row = []; + body.push(row); + } // End row group + + + parser.gullet.endGroup(); // End array group defining \\ + + parser.gullet.endGroup(); // define column separation. + + var cols = new Array(body[0].length).fill({ + type: "align", + align: "c", + pregap: 0.25, + // CD package sets \enskip between columns. + postgap: 0.25 // So pre and post each get half an \enskip, i.e. 0.25em. + + }); + return { + type: "array", + mode: "math", + body, + arraystretch: 1, + addJot: true, + rowGaps: [null], + cols, + colSeparationType: "CD", + hLinesBeforeRow: new Array(body.length + 1).fill([]) + }; +} // The functions below are not available for general use. +// They are here only for internal use by the {CD} environment in placing labels +// next to vertical arrows. +// We don't need any such functions for horizontal arrows because we can reuse +// the functionality that already exists for extensible arrows. + +defineFunction({ + type: "cdlabel", + names: ["\\\\cdleft", "\\\\cdright"], + props: { + numArgs: 1 + }, + + handler(_ref, args) { + var { + parser, + funcName + } = _ref; + return { + type: "cdlabel", + mode: parser.mode, + side: funcName.slice(4), + label: args[0] + }; + }, + + htmlBuilder(group, options) { + var newOptions = options.havingStyle(options.style.sup()); + var label = buildCommon.wrapFragment(buildGroup$1(group.label, newOptions, options), options); + label.classes.push("cd-label-" + group.side); + label.style.bottom = makeEm(0.8 - label.depth); // Zero out label height & depth, so vertical align of arrow is set + // by the arrow height, not by the label. + + label.height = 0; + label.depth = 0; + return label; + }, + + mathmlBuilder(group, options) { + var label = new mathMLTree.MathNode("mrow", [buildGroup(group.label, options)]); + label = new mathMLTree.MathNode("mpadded", [label]); + label.setAttribute("width", "0"); + + if (group.side === "left") { + label.setAttribute("lspace", "-1width"); + } // We have to guess at vertical alignment. We know the arrow is 1.8em tall, + // But we don't know the height or depth of the label. + + + label.setAttribute("voffset", "0.7em"); + label = new mathMLTree.MathNode("mstyle", [label]); + label.setAttribute("displaystyle", "false"); + label.setAttribute("scriptlevel", "1"); + return label; + } + +}); +defineFunction({ + type: "cdlabelparent", + names: ["\\\\cdparent"], + props: { + numArgs: 1 + }, + + handler(_ref2, args) { + var { + parser + } = _ref2; + return { + type: "cdlabelparent", + mode: parser.mode, + fragment: args[0] + }; + }, + + htmlBuilder(group, options) { + // Wrap the vertical arrow and its labels. + // The parent gets position: relative. The child gets position: absolute. + // So CSS can locate the label correctly. + var parent = buildCommon.wrapFragment(buildGroup$1(group.fragment, options), options); + parent.classes.push("cd-vert-arrow"); + return parent; + }, + + mathmlBuilder(group, options) { + return new mathMLTree.MathNode("mrow", [buildGroup(group.fragment, options)]); + } + +}); + +// {123} and converts into symbol with code 123. It is used by the *macro* +// \char defined in macros.js. + +defineFunction({ + type: "textord", + names: ["\\@char"], + props: { + numArgs: 1, + allowedInText: true + }, + + handler(_ref, args) { + var { + parser + } = _ref; + var arg = assertNodeType(args[0], "ordgroup"); + var group = arg.body; + var number = ""; + + for (var i = 0; i < group.length; i++) { + var node = assertNodeType(group[i], "textord"); + number += node.text; + } + + var code = parseInt(number); + var text; + + if (isNaN(code)) { + throw new ParseError("\\@char has non-numeric argument " + number); // If we drop IE support, the following code could be replaced with + // text = String.fromCodePoint(code) + } else if (code < 0 || code >= 0x10ffff) { + throw new ParseError("\\@char with invalid code point " + number); + } else if (code <= 0xffff) { + text = String.fromCharCode(code); + } else { + // Astral code point; split into surrogate halves + code -= 0x10000; + text = String.fromCharCode((code >> 10) + 0xd800, (code & 0x3ff) + 0xdc00); + } + + return { + type: "textord", + mode: parser.mode, + text: text + }; + } + +}); + +var htmlBuilder$8 = (group, options) => { + var elements = buildExpression$1(group.body, options.withColor(group.color), false); // \color isn't supposed to affect the type of the elements it contains. + // To accomplish this, we wrap the results in a fragment, so the inner + // elements will be able to directly interact with their neighbors. For + // example, `\color{red}{2 +} 3` has the same spacing as `2 + 3` + + return buildCommon.makeFragment(elements); +}; + +var mathmlBuilder$7 = (group, options) => { + var inner = buildExpression(group.body, options.withColor(group.color)); + var node = new mathMLTree.MathNode("mstyle", inner); + node.setAttribute("mathcolor", group.color); + return node; +}; + +defineFunction({ + type: "color", + names: ["\\textcolor"], + props: { + numArgs: 2, + allowedInText: true, + argTypes: ["color", "original"] + }, + + handler(_ref, args) { + var { + parser + } = _ref; + var color = assertNodeType(args[0], "color-token").color; + var body = args[1]; + return { + type: "color", + mode: parser.mode, + color, + body: ordargument(body) + }; + }, + + htmlBuilder: htmlBuilder$8, + mathmlBuilder: mathmlBuilder$7 +}); +defineFunction({ + type: "color", + names: ["\\color"], + props: { + numArgs: 1, + allowedInText: true, + argTypes: ["color"] + }, + + handler(_ref2, args) { + var { + parser, + breakOnTokenText + } = _ref2; + var color = assertNodeType(args[0], "color-token").color; // Set macro \current@color in current namespace to store the current + // color, mimicking the behavior of color.sty. + // This is currently used just to correctly color a \right + // that follows a \color command. + + parser.gullet.macros.set("\\current@color", color); // Parse out the implicit body that should be colored. + + var body = parser.parseExpression(true, breakOnTokenText); + return { + type: "color", + mode: parser.mode, + color, + body + }; + }, + + htmlBuilder: htmlBuilder$8, + mathmlBuilder: mathmlBuilder$7 +}); + +// Row breaks within tabular environments, and line breaks at top level + +defineFunction({ + type: "cr", + names: ["\\\\"], + props: { + numArgs: 0, + numOptionalArgs: 0, + allowedInText: true + }, + + handler(_ref, args, optArgs) { + var { + parser + } = _ref; + var size = parser.gullet.future().text === "[" ? parser.parseSizeGroup(true) : null; + var newLine = !parser.settings.displayMode || !parser.settings.useStrictBehavior("newLineInDisplayMode", "In LaTeX, \\\\ or \\newline " + "does nothing in display mode"); + return { + type: "cr", + mode: parser.mode, + newLine, + size: size && assertNodeType(size, "size").value + }; + }, + + // The following builders are called only at the top level, + // not within tabular/array environments. + htmlBuilder(group, options) { + var span = buildCommon.makeSpan(["mspace"], [], options); + + if (group.newLine) { + span.classes.push("newline"); + + if (group.size) { + span.style.marginTop = makeEm(calculateSize(group.size, options)); + } + } + + return span; + }, + + mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mspace"); + + if (group.newLine) { + node.setAttribute("linebreak", "newline"); + + if (group.size) { + node.setAttribute("height", makeEm(calculateSize(group.size, options))); + } + } + + return node; + } + +}); + +var globalMap = { + "\\global": "\\global", + "\\long": "\\\\globallong", + "\\\\globallong": "\\\\globallong", + "\\def": "\\gdef", + "\\gdef": "\\gdef", + "\\edef": "\\xdef", + "\\xdef": "\\xdef", + "\\let": "\\\\globallet", + "\\futurelet": "\\\\globalfuture" +}; + +var checkControlSequence = tok => { + var name = tok.text; + + if (/^(?:[\\{}$&#^_]|EOF)$/.test(name)) { + throw new ParseError("Expected a control sequence", tok); + } + + return name; +}; + +var getRHS = parser => { + var tok = parser.gullet.popToken(); + + if (tok.text === "=") { + // consume optional equals + tok = parser.gullet.popToken(); + + if (tok.text === " ") { + // consume one optional space + tok = parser.gullet.popToken(); + } + } + + return tok; +}; + +var letCommand = (parser, name, tok, global) => { + var macro = parser.gullet.macros.get(tok.text); + + if (macro == null) { + // don't expand it later even if a macro with the same name is defined + // e.g., \let\foo=\frac \def\frac{\relax} \frac12 + tok.noexpand = true; + macro = { + tokens: [tok], + numArgs: 0, + // reproduce the same behavior in expansion + unexpandable: !parser.gullet.isExpandable(tok.text) + }; + } + + parser.gullet.macros.set(name, macro, global); +}; // -> | +// -> |\global +// -> | +// -> \global|\long|\outer + + +defineFunction({ + type: "internal", + names: ["\\global", "\\long", "\\\\globallong" // can’t be entered directly + ], + props: { + numArgs: 0, + allowedInText: true + }, + + handler(_ref) { + var { + parser, + funcName + } = _ref; + parser.consumeSpaces(); + var token = parser.fetch(); + + if (globalMap[token.text]) { + // KaTeX doesn't have \par, so ignore \long + if (funcName === "\\global" || funcName === "\\\\globallong") { + token.text = globalMap[token.text]; + } + + return assertNodeType(parser.parseFunction(), "internal"); + } + + throw new ParseError("Invalid token after macro prefix", token); + } + +}); // Basic support for macro definitions: \def, \gdef, \edef, \xdef +// -> +// -> \def|\gdef|\edef|\xdef +// -> + +defineFunction({ + type: "internal", + names: ["\\def", "\\gdef", "\\edef", "\\xdef"], + props: { + numArgs: 0, + allowedInText: true, + primitive: true + }, + + handler(_ref2) { + var { + parser, + funcName + } = _ref2; + var tok = parser.gullet.popToken(); + var name = tok.text; + + if (/^(?:[\\{}$&#^_]|EOF)$/.test(name)) { + throw new ParseError("Expected a control sequence", tok); + } + + var numArgs = 0; + var insert; + var delimiters = [[]]; // contains no braces + + while (parser.gullet.future().text !== "{") { + tok = parser.gullet.popToken(); + + if (tok.text === "#") { + // If the very last character of the is #, so that + // this # is immediately followed by {, TeX will behave as if the { + // had been inserted at the right end of both the parameter text + // and the replacement text. + if (parser.gullet.future().text === "{") { + insert = parser.gullet.future(); + delimiters[numArgs].push("{"); + break; + } // A parameter, the first appearance of # must be followed by 1, + // the next by 2, and so on; up to nine #’s are allowed + + + tok = parser.gullet.popToken(); + + if (!/^[1-9]$/.test(tok.text)) { + throw new ParseError("Invalid argument number \"" + tok.text + "\""); + } + + if (parseInt(tok.text) !== numArgs + 1) { + throw new ParseError("Argument number \"" + tok.text + "\" out of order"); + } + + numArgs++; + delimiters.push([]); + } else if (tok.text === "EOF") { + throw new ParseError("Expected a macro definition"); + } else { + delimiters[numArgs].push(tok.text); + } + } // replacement text, enclosed in '{' and '}' and properly nested + + + var { + tokens + } = parser.gullet.consumeArg(); + + if (insert) { + tokens.unshift(insert); + } + + if (funcName === "\\edef" || funcName === "\\xdef") { + tokens = parser.gullet.expandTokens(tokens); + tokens.reverse(); // to fit in with stack order + } // Final arg is the expansion of the macro + + + parser.gullet.macros.set(name, { + tokens, + numArgs, + delimiters + }, funcName === globalMap[funcName]); + return { + type: "internal", + mode: parser.mode + }; + } + +}); // -> +// -> \futurelet +// | \let +// -> |= + +defineFunction({ + type: "internal", + names: ["\\let", "\\\\globallet" // can’t be entered directly + ], + props: { + numArgs: 0, + allowedInText: true, + primitive: true + }, + + handler(_ref3) { + var { + parser, + funcName + } = _ref3; + var name = checkControlSequence(parser.gullet.popToken()); + parser.gullet.consumeSpaces(); + var tok = getRHS(parser); + letCommand(parser, name, tok, funcName === "\\\\globallet"); + return { + type: "internal", + mode: parser.mode + }; + } + +}); // ref: https://www.tug.org/TUGboat/tb09-3/tb22bechtolsheim.pdf + +defineFunction({ + type: "internal", + names: ["\\futurelet", "\\\\globalfuture" // can’t be entered directly + ], + props: { + numArgs: 0, + allowedInText: true, + primitive: true + }, + + handler(_ref4) { + var { + parser, + funcName + } = _ref4; + var name = checkControlSequence(parser.gullet.popToken()); + var middle = parser.gullet.popToken(); + var tok = parser.gullet.popToken(); + letCommand(parser, name, tok, funcName === "\\\\globalfuture"); + parser.gullet.pushToken(tok); + parser.gullet.pushToken(middle); + return { + type: "internal", + mode: parser.mode + }; + } + +}); + +/** + * This file deals with creating delimiters of various sizes. The TeXbook + * discusses these routines on page 441-442, in the "Another subroutine sets box + * x to a specified variable delimiter" paragraph. + * + * There are three main routines here. `makeSmallDelim` makes a delimiter in the + * normal font, but in either text, script, or scriptscript style. + * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1, + * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of + * smaller pieces that are stacked on top of one another. + * + * The functions take a parameter `center`, which determines if the delimiter + * should be centered around the axis. + * + * Then, there are three exposed functions. `sizedDelim` makes a delimiter in + * one of the given sizes. This is used for things like `\bigl`. + * `customSizedDelim` makes a delimiter with a given total height+depth. It is + * called in places like `\sqrt`. `leftRightDelim` makes an appropriate + * delimiter which surrounds an expression of a given height an depth. It is + * used in `\left` and `\right`. + */ + +/** + * Get the metrics for a given symbol and font, after transformation (i.e. + * after following replacement from symbols.js) + */ +var getMetrics = function getMetrics(symbol, font, mode) { + var replace = symbols.math[symbol] && symbols.math[symbol].replace; + var metrics = getCharacterMetrics(replace || symbol, font, mode); + + if (!metrics) { + throw new Error("Unsupported symbol " + symbol + " and font size " + font + "."); + } + + return metrics; +}; +/** + * Puts a delimiter span in a given style, and adds appropriate height, depth, + * and maxFontSizes. + */ + + +var styleWrap = function styleWrap(delim, toStyle, options, classes) { + var newOptions = options.havingBaseStyle(toStyle); + var span = buildCommon.makeSpan(classes.concat(newOptions.sizingClasses(options)), [delim], options); + var delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier; + span.height *= delimSizeMultiplier; + span.depth *= delimSizeMultiplier; + span.maxFontSize = newOptions.sizeMultiplier; + return span; +}; + +var centerSpan = function centerSpan(span, options, style) { + var newOptions = options.havingBaseStyle(style); + var shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight; + span.classes.push("delimcenter"); + span.style.top = makeEm(shift); + span.height -= shift; + span.depth += shift; +}; +/** + * Makes a small delimiter. This is a delimiter that comes in the Main-Regular + * font, but is restyled to either be in textstyle, scriptstyle, or + * scriptscriptstyle. + */ + + +var makeSmallDelim = function makeSmallDelim(delim, style, center, options, mode, classes) { + var text = buildCommon.makeSymbol(delim, "Main-Regular", mode, options); + var span = styleWrap(text, style, options, classes); + + if (center) { + centerSpan(span, options, style); + } + + return span; +}; +/** + * Builds a symbol in the given font size (note size is an integer) + */ + + +var mathrmSize = function mathrmSize(value, size, mode, options) { + return buildCommon.makeSymbol(value, "Size" + size + "-Regular", mode, options); +}; +/** + * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2, + * Size3, or Size4 fonts. It is always rendered in textstyle. + */ + + +var makeLargeDelim = function makeLargeDelim(delim, size, center, options, mode, classes) { + var inner = mathrmSize(delim, size, mode, options); + var span = styleWrap(buildCommon.makeSpan(["delimsizing", "size" + size], [inner], options), Style$1.TEXT, options, classes); + + if (center) { + centerSpan(span, options, Style$1.TEXT); + } + + return span; +}; +/** + * Make a span from a font glyph with the given offset and in the given font. + * This is used in makeStackedDelim to make the stacking pieces for the delimiter. + */ + + +var makeGlyphSpan = function makeGlyphSpan(symbol, font, mode) { + var sizeClass; // Apply the correct CSS class to choose the right font. + + if (font === "Size1-Regular") { + sizeClass = "delim-size1"; + } else + /* if (font === "Size4-Regular") */ + { + sizeClass = "delim-size4"; + } + + var corner = buildCommon.makeSpan(["delimsizinginner", sizeClass], [buildCommon.makeSpan([], [buildCommon.makeSymbol(symbol, font, mode)])]); // Since this will be passed into `makeVList` in the end, wrap the element + // in the appropriate tag that VList uses. + + return { + type: "elem", + elem: corner + }; +}; + +var makeInner = function makeInner(ch, height, options) { + // Create a span with inline SVG for the inner part of a tall stacked delimiter. + var width = fontMetricsData['Size4-Regular'][ch.charCodeAt(0)] ? fontMetricsData['Size4-Regular'][ch.charCodeAt(0)][4] : fontMetricsData['Size1-Regular'][ch.charCodeAt(0)][4]; + var path = new PathNode("inner", innerPath(ch, Math.round(1000 * height))); + var svgNode = new SvgNode([path], { + "width": makeEm(width), + "height": makeEm(height), + // Override CSS rule `.katex svg { width: 100% }` + "style": "width:" + makeEm(width), + "viewBox": "0 0 " + 1000 * width + " " + Math.round(1000 * height), + "preserveAspectRatio": "xMinYMin" + }); + var span = buildCommon.makeSvgSpan([], [svgNode], options); + span.height = height; + span.style.height = makeEm(height); + span.style.width = makeEm(width); + return { + type: "elem", + elem: span + }; +}; // Helpers for makeStackedDelim + + +var lapInEms = 0.008; +var lap = { + type: "kern", + size: -1 * lapInEms +}; +var verts = ["|", "\\lvert", "\\rvert", "\\vert"]; +var doubleVerts = ["\\|", "\\lVert", "\\rVert", "\\Vert"]; +/** + * Make a stacked delimiter out of a given delimiter, with the total height at + * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook. + */ + +var makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, options, mode, classes) { + // There are four parts, the top, an optional middle, a repeated part, and a + // bottom. + var top; + var middle; + var repeat; + var bottom; + var svgLabel = ""; + var viewBoxWidth = 0; + top = repeat = bottom = delim; + middle = null; // Also keep track of what font the delimiters are in + + var font = "Size1-Regular"; // We set the parts and font based on the symbol. Note that we use + // '\u23d0' instead of '|' and '\u2016' instead of '\\|' for the + // repeats of the arrows + + if (delim === "\\uparrow") { + repeat = bottom = "\u23d0"; + } else if (delim === "\\Uparrow") { + repeat = bottom = "\u2016"; + } else if (delim === "\\downarrow") { + top = repeat = "\u23d0"; + } else if (delim === "\\Downarrow") { + top = repeat = "\u2016"; + } else if (delim === "\\updownarrow") { + top = "\\uparrow"; + repeat = "\u23d0"; + bottom = "\\downarrow"; + } else if (delim === "\\Updownarrow") { + top = "\\Uparrow"; + repeat = "\u2016"; + bottom = "\\Downarrow"; + } else if (utils.contains(verts, delim)) { + repeat = "\u2223"; + svgLabel = "vert"; + viewBoxWidth = 333; + } else if (utils.contains(doubleVerts, delim)) { + repeat = "\u2225"; + svgLabel = "doublevert"; + viewBoxWidth = 556; + } else if (delim === "[" || delim === "\\lbrack") { + top = "\u23a1"; + repeat = "\u23a2"; + bottom = "\u23a3"; + font = "Size4-Regular"; + svgLabel = "lbrack"; + viewBoxWidth = 667; + } else if (delim === "]" || delim === "\\rbrack") { + top = "\u23a4"; + repeat = "\u23a5"; + bottom = "\u23a6"; + font = "Size4-Regular"; + svgLabel = "rbrack"; + viewBoxWidth = 667; + } else if (delim === "\\lfloor" || delim === "\u230a") { + repeat = top = "\u23a2"; + bottom = "\u23a3"; + font = "Size4-Regular"; + svgLabel = "lfloor"; + viewBoxWidth = 667; + } else if (delim === "\\lceil" || delim === "\u2308") { + top = "\u23a1"; + repeat = bottom = "\u23a2"; + font = "Size4-Regular"; + svgLabel = "lceil"; + viewBoxWidth = 667; + } else if (delim === "\\rfloor" || delim === "\u230b") { + repeat = top = "\u23a5"; + bottom = "\u23a6"; + font = "Size4-Regular"; + svgLabel = "rfloor"; + viewBoxWidth = 667; + } else if (delim === "\\rceil" || delim === "\u2309") { + top = "\u23a4"; + repeat = bottom = "\u23a5"; + font = "Size4-Regular"; + svgLabel = "rceil"; + viewBoxWidth = 667; + } else if (delim === "(" || delim === "\\lparen") { + top = "\u239b"; + repeat = "\u239c"; + bottom = "\u239d"; + font = "Size4-Regular"; + svgLabel = "lparen"; + viewBoxWidth = 875; + } else if (delim === ")" || delim === "\\rparen") { + top = "\u239e"; + repeat = "\u239f"; + bottom = "\u23a0"; + font = "Size4-Regular"; + svgLabel = "rparen"; + viewBoxWidth = 875; + } else if (delim === "\\{" || delim === "\\lbrace") { + top = "\u23a7"; + middle = "\u23a8"; + bottom = "\u23a9"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\}" || delim === "\\rbrace") { + top = "\u23ab"; + middle = "\u23ac"; + bottom = "\u23ad"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\lgroup" || delim === "\u27ee") { + top = "\u23a7"; + bottom = "\u23a9"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\rgroup" || delim === "\u27ef") { + top = "\u23ab"; + bottom = "\u23ad"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\lmoustache" || delim === "\u23b0") { + top = "\u23a7"; + bottom = "\u23ad"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\rmoustache" || delim === "\u23b1") { + top = "\u23ab"; + bottom = "\u23a9"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } // Get the metrics of the four sections + + + var topMetrics = getMetrics(top, font, mode); + var topHeightTotal = topMetrics.height + topMetrics.depth; + var repeatMetrics = getMetrics(repeat, font, mode); + var repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth; + var bottomMetrics = getMetrics(bottom, font, mode); + var bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth; + var middleHeightTotal = 0; + var middleFactor = 1; + + if (middle !== null) { + var middleMetrics = getMetrics(middle, font, mode); + middleHeightTotal = middleMetrics.height + middleMetrics.depth; + middleFactor = 2; // repeat symmetrically above and below middle + } // Calculate the minimal height that the delimiter can have. + // It is at least the size of the top, bottom, and optional middle combined. + + + var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; // Compute the number of copies of the repeat symbol we will need + + var repeatCount = Math.max(0, Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal))); // Compute the total height of the delimiter including all the symbols + + var realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal; // The center of the delimiter is placed at the center of the axis. Note + // that in this context, "center" means that the delimiter should be + // centered around the axis in the current style, while normally it is + // centered around the axis in textstyle. + + var axisHeight = options.fontMetrics().axisHeight; + + if (center) { + axisHeight *= options.sizeMultiplier; + } // Calculate the depth + + + var depth = realHeightTotal / 2 - axisHeight; // Now, we start building the pieces that will go into the vlist + // Keep a list of the pieces of the stacked delimiter + + var stack = []; + + if (svgLabel.length > 0) { + // Instead of stacking glyphs, create a single SVG. + // This evades browser problems with imprecise positioning of spans. + var midHeight = realHeightTotal - topHeightTotal - bottomHeightTotal; + var viewBoxHeight = Math.round(realHeightTotal * 1000); + var pathStr = tallDelim(svgLabel, Math.round(midHeight * 1000)); + var path = new PathNode(svgLabel, pathStr); + var width = (viewBoxWidth / 1000).toFixed(3) + "em"; + var height = (viewBoxHeight / 1000).toFixed(3) + "em"; + var svg = new SvgNode([path], { + "width": width, + "height": height, + "viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight + }); + var wrapper = buildCommon.makeSvgSpan([], [svg], options); + wrapper.height = viewBoxHeight / 1000; + wrapper.style.width = width; + wrapper.style.height = height; + stack.push({ + type: "elem", + elem: wrapper + }); + } else { + // Stack glyphs + // Start by adding the bottom symbol + stack.push(makeGlyphSpan(bottom, font, mode)); + stack.push(lap); // overlap + + if (middle === null) { + // The middle section will be an SVG. Make it an extra 0.016em tall. + // We'll overlap by 0.008em at top and bottom. + var innerHeight = realHeightTotal - topHeightTotal - bottomHeightTotal + 2 * lapInEms; + stack.push(makeInner(repeat, innerHeight, options)); + } else { + // When there is a middle bit, we need the middle part and two repeated + // sections + var _innerHeight = (realHeightTotal - topHeightTotal - bottomHeightTotal - middleHeightTotal) / 2 + 2 * lapInEms; + + stack.push(makeInner(repeat, _innerHeight, options)); // Now insert the middle of the brace. + + stack.push(lap); + stack.push(makeGlyphSpan(middle, font, mode)); + stack.push(lap); + stack.push(makeInner(repeat, _innerHeight, options)); + } // Add the top symbol + + + stack.push(lap); + stack.push(makeGlyphSpan(top, font, mode)); + } // Finally, build the vlist + + + var newOptions = options.havingBaseStyle(Style$1.TEXT); + var inner = buildCommon.makeVList({ + positionType: "bottom", + positionData: depth, + children: stack + }, newOptions); + return styleWrap(buildCommon.makeSpan(["delimsizing", "mult"], [inner], newOptions), Style$1.TEXT, options, classes); +}; // All surds have 0.08em padding above the vinculum inside the SVG. +// That keeps browser span height rounding error from pinching the line. + + +var vbPad = 80; // padding above the surd, measured inside the viewBox. + +var emPad = 0.08; // padding, in ems, measured in the document. + +var sqrtSvg = function sqrtSvg(sqrtName, height, viewBoxHeight, extraVinculum, options) { + var path = sqrtPath(sqrtName, extraVinculum, viewBoxHeight); + var pathNode = new PathNode(sqrtName, path); + var svg = new SvgNode([pathNode], { + // Note: 1000:1 ratio of viewBox to document em width. + "width": "400em", + "height": makeEm(height), + "viewBox": "0 0 400000 " + viewBoxHeight, + "preserveAspectRatio": "xMinYMin slice" + }); + return buildCommon.makeSvgSpan(["hide-tail"], [svg], options); +}; +/** + * Make a sqrt image of the given height, + */ + + +var makeSqrtImage = function makeSqrtImage(height, options) { + // Define a newOptions that removes the effect of size changes such as \Huge. + // We don't pick different a height surd for \Huge. For it, we scale up. + var newOptions = options.havingBaseSizing(); // Pick the desired surd glyph from a sequence of surds. + + var delim = traverseSequence("\\surd", height * newOptions.sizeMultiplier, stackLargeDelimiterSequence, newOptions); + var sizeMultiplier = newOptions.sizeMultiplier; // default + // The standard sqrt SVGs each have a 0.04em thick vinculum. + // If Settings.minRuleThickness is larger than that, we add extraVinculum. + + var extraVinculum = Math.max(0, options.minRuleThickness - options.fontMetrics().sqrtRuleThickness); // Create a span containing an SVG image of a sqrt symbol. + + var span; + var spanHeight = 0; + var texHeight = 0; + var viewBoxHeight = 0; + var advanceWidth; // We create viewBoxes with 80 units of "padding" above each surd. + // Then browser rounding error on the parent span height will not + // encroach on the ink of the vinculum. But that padding is not + // included in the TeX-like `height` used for calculation of + // vertical alignment. So texHeight = span.height < span.style.height. + + if (delim.type === "small") { + // Get an SVG that is derived from glyph U+221A in font KaTeX-Main. + // 1000 unit normal glyph height. + viewBoxHeight = 1000 + 1000 * extraVinculum + vbPad; + + if (height < 1.0) { + sizeMultiplier = 1.0; // mimic a \textfont radical + } else if (height < 1.4) { + sizeMultiplier = 0.7; // mimic a \scriptfont radical + } + + spanHeight = (1.0 + extraVinculum + emPad) / sizeMultiplier; + texHeight = (1.00 + extraVinculum) / sizeMultiplier; + span = sqrtSvg("sqrtMain", spanHeight, viewBoxHeight, extraVinculum, options); + span.style.minWidth = "0.853em"; + advanceWidth = 0.833 / sizeMultiplier; // from the font. + } else if (delim.type === "large") { + // These SVGs come from fonts: KaTeX_Size1, _Size2, etc. + viewBoxHeight = (1000 + vbPad) * sizeToMaxHeight[delim.size]; + texHeight = (sizeToMaxHeight[delim.size] + extraVinculum) / sizeMultiplier; + spanHeight = (sizeToMaxHeight[delim.size] + extraVinculum + emPad) / sizeMultiplier; + span = sqrtSvg("sqrtSize" + delim.size, spanHeight, viewBoxHeight, extraVinculum, options); + span.style.minWidth = "1.02em"; + advanceWidth = 1.0 / sizeMultiplier; // 1.0 from the font. + } else { + // Tall sqrt. In TeX, this would be stacked using multiple glyphs. + // We'll use a single SVG to accomplish the same thing. + spanHeight = height + extraVinculum + emPad; + texHeight = height + extraVinculum; + viewBoxHeight = Math.floor(1000 * height + extraVinculum) + vbPad; + span = sqrtSvg("sqrtTall", spanHeight, viewBoxHeight, extraVinculum, options); + span.style.minWidth = "0.742em"; + advanceWidth = 1.056; + } + + span.height = texHeight; + span.style.height = makeEm(spanHeight); + return { + span, + advanceWidth, + // Calculate the actual line width. + // This actually should depend on the chosen font -- e.g. \boldmath + // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and + // have thicker rules. + ruleWidth: (options.fontMetrics().sqrtRuleThickness + extraVinculum) * sizeMultiplier + }; +}; // There are three kinds of delimiters, delimiters that stack when they become +// too large + + +var stackLargeDelimiters = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230a", "\u230b", "\\lceil", "\\rceil", "\u2308", "\u2309", "\\surd"]; // delimiters that always stack + +var stackAlwaysDelimiters = ["\\uparrow", "\\downarrow", "\\updownarrow", "\\Uparrow", "\\Downarrow", "\\Updownarrow", "|", "\\|", "\\vert", "\\Vert", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27ee", "\u27ef", "\\lmoustache", "\\rmoustache", "\u23b0", "\u23b1"]; // and delimiters that never stack + +var stackNeverDelimiters = ["<", ">", "\\langle", "\\rangle", "/", "\\backslash", "\\lt", "\\gt"]; // Metrics of the different sizes. Found by looking at TeX's output of +// $\bigl| // \Bigl| \biggl| \Biggl| \showlists$ +// Used to create stacked delimiters of appropriate sizes in makeSizedDelim. + +var sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0]; +/** + * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4. + */ + +var makeSizedDelim = function makeSizedDelim(delim, size, options, mode, classes) { + // < and > turn into \langle and \rangle in delimiters + if (delim === "<" || delim === "\\lt" || delim === "\u27e8") { + delim = "\\langle"; + } else if (delim === ">" || delim === "\\gt" || delim === "\u27e9") { + delim = "\\rangle"; + } // Sized delimiters are never centered. + + + if (utils.contains(stackLargeDelimiters, delim) || utils.contains(stackNeverDelimiters, delim)) { + return makeLargeDelim(delim, size, false, options, mode, classes); + } else if (utils.contains(stackAlwaysDelimiters, delim)) { + return makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes); + } else { + throw new ParseError("Illegal delimiter: '" + delim + "'"); + } +}; +/** + * There are three different sequences of delimiter sizes that the delimiters + * follow depending on the kind of delimiter. This is used when creating custom + * sized delimiters to decide whether to create a small, large, or stacked + * delimiter. + * + * In real TeX, these sequences aren't explicitly defined, but are instead + * defined inside the font metrics. Since there are only three sequences that + * are possible for the delimiters that TeX defines, it is easier to just encode + * them explicitly here. + */ + + +// Delimiters that never stack try small delimiters and large delimiters only +var stackNeverDelimiterSequence = [{ + type: "small", + style: Style$1.SCRIPTSCRIPT +}, { + type: "small", + style: Style$1.SCRIPT +}, { + type: "small", + style: Style$1.TEXT +}, { + type: "large", + size: 1 +}, { + type: "large", + size: 2 +}, { + type: "large", + size: 3 +}, { + type: "large", + size: 4 +}]; // Delimiters that always stack try the small delimiters first, then stack + +var stackAlwaysDelimiterSequence = [{ + type: "small", + style: Style$1.SCRIPTSCRIPT +}, { + type: "small", + style: Style$1.SCRIPT +}, { + type: "small", + style: Style$1.TEXT +}, { + type: "stack" +}]; // Delimiters that stack when large try the small and then large delimiters, and +// stack afterwards + +var stackLargeDelimiterSequence = [{ + type: "small", + style: Style$1.SCRIPTSCRIPT +}, { + type: "small", + style: Style$1.SCRIPT +}, { + type: "small", + style: Style$1.TEXT +}, { + type: "large", + size: 1 +}, { + type: "large", + size: 2 +}, { + type: "large", + size: 3 +}, { + type: "large", + size: 4 +}, { + type: "stack" +}]; +/** + * Get the font used in a delimiter based on what kind of delimiter it is. + * TODO(#963) Use more specific font family return type once that is introduced. + */ + +var delimTypeToFont = function delimTypeToFont(type) { + if (type.type === "small") { + return "Main-Regular"; + } else if (type.type === "large") { + return "Size" + type.size + "-Regular"; + } else if (type.type === "stack") { + return "Size4-Regular"; + } else { + throw new Error("Add support for delim type '" + type.type + "' here."); + } +}; +/** + * Traverse a sequence of types of delimiters to decide what kind of delimiter + * should be used to create a delimiter of the given height+depth. + */ + + +var traverseSequence = function traverseSequence(delim, height, sequence, options) { + // Here, we choose the index we should start at in the sequences. In smaller + // sizes (which correspond to larger numbers in style.size) we start earlier + // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts + // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2 + var start = Math.min(2, 3 - options.style.size); + + for (var i = start; i < sequence.length; i++) { + if (sequence[i].type === "stack") { + // This is always the last delimiter, so we just break the loop now. + break; + } + + var metrics = getMetrics(delim, delimTypeToFont(sequence[i]), "math"); + var heightDepth = metrics.height + metrics.depth; // Small delimiters are scaled down versions of the same font, so we + // account for the style change size. + + if (sequence[i].type === "small") { + var newOptions = options.havingBaseStyle(sequence[i].style); + heightDepth *= newOptions.sizeMultiplier; + } // Check if the delimiter at this size works for the given height. + + + if (heightDepth > height) { + return sequence[i]; + } + } // If we reached the end of the sequence, return the last sequence element. + + + return sequence[sequence.length - 1]; +}; +/** + * Make a delimiter of a given height+depth, with optional centering. Here, we + * traverse the sequences, and create a delimiter that the sequence tells us to. + */ + + +var makeCustomSizedDelim = function makeCustomSizedDelim(delim, height, center, options, mode, classes) { + if (delim === "<" || delim === "\\lt" || delim === "\u27e8") { + delim = "\\langle"; + } else if (delim === ">" || delim === "\\gt" || delim === "\u27e9") { + delim = "\\rangle"; + } // Decide what sequence to use + + + var sequence; + + if (utils.contains(stackNeverDelimiters, delim)) { + sequence = stackNeverDelimiterSequence; + } else if (utils.contains(stackLargeDelimiters, delim)) { + sequence = stackLargeDelimiterSequence; + } else { + sequence = stackAlwaysDelimiterSequence; + } // Look through the sequence + + + var delimType = traverseSequence(delim, height, sequence, options); // Get the delimiter from font glyphs. + // Depending on the sequence element we decided on, call the + // appropriate function. + + if (delimType.type === "small") { + return makeSmallDelim(delim, delimType.style, center, options, mode, classes); + } else if (delimType.type === "large") { + return makeLargeDelim(delim, delimType.size, center, options, mode, classes); + } else + /* if (delimType.type === "stack") */ + { + return makeStackedDelim(delim, height, center, options, mode, classes); + } +}; +/** + * Make a delimiter for use with `\left` and `\right`, given a height and depth + * of an expression that the delimiters surround. + */ + + +var makeLeftRightDelim = function makeLeftRightDelim(delim, height, depth, options, mode, classes) { + // We always center \left/\right delimiters, so the axis is always shifted + var axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier; // Taken from TeX source, tex.web, function make_left_right + + var delimiterFactor = 901; + var delimiterExtend = 5.0 / options.fontMetrics().ptPerEm; + var maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight); + var totalHeight = Math.max( // In real TeX, calculations are done using integral values which are + // 65536 per pt, or 655360 per em. So, the division here truncates in + // TeX but doesn't here, producing different results. If we wanted to + // exactly match TeX's calculation, we could do + // Math.floor(655360 * maxDistFromAxis / 500) * + // delimiterFactor / 655360 + // (To see the difference, compare + // x^{x^{\left(\rule{0.1em}{0.68em}\right)}} + // in TeX and KaTeX) + maxDistFromAxis / 500 * delimiterFactor, 2 * maxDistFromAxis - delimiterExtend); // Finally, we defer to `makeCustomSizedDelim` with our calculated total + // height + + return makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes); +}; + +var delimiter = { + sqrtImage: makeSqrtImage, + sizedDelim: makeSizedDelim, + sizeToMaxHeight: sizeToMaxHeight, + customSizedDelim: makeCustomSizedDelim, + leftRightDelim: makeLeftRightDelim +}; + +// Extra data needed for the delimiter handler down below +var delimiterSizes = { + "\\bigl": { + mclass: "mopen", + size: 1 + }, + "\\Bigl": { + mclass: "mopen", + size: 2 + }, + "\\biggl": { + mclass: "mopen", + size: 3 + }, + "\\Biggl": { + mclass: "mopen", + size: 4 + }, + "\\bigr": { + mclass: "mclose", + size: 1 + }, + "\\Bigr": { + mclass: "mclose", + size: 2 + }, + "\\biggr": { + mclass: "mclose", + size: 3 + }, + "\\Biggr": { + mclass: "mclose", + size: 4 + }, + "\\bigm": { + mclass: "mrel", + size: 1 + }, + "\\Bigm": { + mclass: "mrel", + size: 2 + }, + "\\biggm": { + mclass: "mrel", + size: 3 + }, + "\\Biggm": { + mclass: "mrel", + size: 4 + }, + "\\big": { + mclass: "mord", + size: 1 + }, + "\\Big": { + mclass: "mord", + size: 2 + }, + "\\bigg": { + mclass: "mord", + size: 3 + }, + "\\Bigg": { + mclass: "mord", + size: 4 + } +}; +var delimiters = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230a", "\u230b", "\\lceil", "\\rceil", "\u2308", "\u2309", "<", ">", "\\langle", "\u27e8", "\\rangle", "\u27e9", "\\lt", "\\gt", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27ee", "\u27ef", "\\lmoustache", "\\rmoustache", "\u23b0", "\u23b1", "/", "\\backslash", "|", "\\vert", "\\|", "\\Vert", "\\uparrow", "\\Uparrow", "\\downarrow", "\\Downarrow", "\\updownarrow", "\\Updownarrow", "."]; + +// Delimiter functions +function checkDelimiter(delim, context) { + var symDelim = checkSymbolNodeType(delim); + + if (symDelim && utils.contains(delimiters, symDelim.text)) { + return symDelim; + } else if (symDelim) { + throw new ParseError("Invalid delimiter '" + symDelim.text + "' after '" + context.funcName + "'", delim); + } else { + throw new ParseError("Invalid delimiter type '" + delim.type + "'", delim); + } +} + +defineFunction({ + type: "delimsizing", + names: ["\\bigl", "\\Bigl", "\\biggl", "\\Biggl", "\\bigr", "\\Bigr", "\\biggr", "\\Biggr", "\\bigm", "\\Bigm", "\\biggm", "\\Biggm", "\\big", "\\Big", "\\bigg", "\\Bigg"], + props: { + numArgs: 1, + argTypes: ["primitive"] + }, + handler: (context, args) => { + var delim = checkDelimiter(args[0], context); + return { + type: "delimsizing", + mode: context.parser.mode, + size: delimiterSizes[context.funcName].size, + mclass: delimiterSizes[context.funcName].mclass, + delim: delim.text + }; + }, + htmlBuilder: (group, options) => { + if (group.delim === ".") { + // Empty delimiters still count as elements, even though they don't + // show anything. + return buildCommon.makeSpan([group.mclass]); + } // Use delimiter.sizedDelim to generate the delimiter. + + + return delimiter.sizedDelim(group.delim, group.size, options, group.mode, [group.mclass]); + }, + mathmlBuilder: group => { + var children = []; + + if (group.delim !== ".") { + children.push(makeText(group.delim, group.mode)); + } + + var node = new mathMLTree.MathNode("mo", children); + + if (group.mclass === "mopen" || group.mclass === "mclose") { + // Only some of the delimsizing functions act as fences, and they + // return "mopen" or "mclose" mclass. + node.setAttribute("fence", "true"); + } else { + // Explicitly disable fencing if it's not a fence, to override the + // defaults. + node.setAttribute("fence", "false"); + } + + node.setAttribute("stretchy", "true"); + var size = makeEm(delimiter.sizeToMaxHeight[group.size]); + node.setAttribute("minsize", size); + node.setAttribute("maxsize", size); + return node; + } +}); + +function assertParsed(group) { + if (!group.body) { + throw new Error("Bug: The leftright ParseNode wasn't fully parsed."); + } +} + +defineFunction({ + type: "leftright-right", + names: ["\\right"], + props: { + numArgs: 1, + primitive: true + }, + handler: (context, args) => { + // \left case below triggers parsing of \right in + // `const right = parser.parseFunction();` + // uses this return value. + var color = context.parser.gullet.macros.get("\\current@color"); + + if (color && typeof color !== "string") { + throw new ParseError("\\current@color set to non-string in \\right"); + } + + return { + type: "leftright-right", + mode: context.parser.mode, + delim: checkDelimiter(args[0], context).text, + color // undefined if not set via \color + + }; + } +}); +defineFunction({ + type: "leftright", + names: ["\\left"], + props: { + numArgs: 1, + primitive: true + }, + handler: (context, args) => { + var delim = checkDelimiter(args[0], context); + var parser = context.parser; // Parse out the implicit body + + ++parser.leftrightDepth; // parseExpression stops before '\\right' + + var body = parser.parseExpression(false); + --parser.leftrightDepth; // Check the next token + + parser.expect("\\right", false); + var right = assertNodeType(parser.parseFunction(), "leftright-right"); + return { + type: "leftright", + mode: parser.mode, + body, + left: delim.text, + right: right.delim, + rightColor: right.color + }; + }, + htmlBuilder: (group, options) => { + assertParsed(group); // Build the inner expression + + var inner = buildExpression$1(group.body, options, true, ["mopen", "mclose"]); + var innerHeight = 0; + var innerDepth = 0; + var hadMiddle = false; // Calculate its height and depth + + for (var i = 0; i < inner.length; i++) { + // Property `isMiddle` not defined on `span`. See comment in + // "middle"'s htmlBuilder. + // $FlowFixMe + if (inner[i].isMiddle) { + hadMiddle = true; + } else { + innerHeight = Math.max(inner[i].height, innerHeight); + innerDepth = Math.max(inner[i].depth, innerDepth); + } + } // The size of delimiters is the same, regardless of what style we are + // in. Thus, to correctly calculate the size of delimiter we need around + // a group, we scale down the inner size based on the size. + + + innerHeight *= options.sizeMultiplier; + innerDepth *= options.sizeMultiplier; + var leftDelim; + + if (group.left === ".") { + // Empty delimiters in \left and \right make null delimiter spaces. + leftDelim = makeNullDelimiter(options, ["mopen"]); + } else { + // Otherwise, use leftRightDelim to generate the correct sized + // delimiter. + leftDelim = delimiter.leftRightDelim(group.left, innerHeight, innerDepth, options, group.mode, ["mopen"]); + } // Add it to the beginning of the expression + + + inner.unshift(leftDelim); // Handle middle delimiters + + if (hadMiddle) { + for (var _i = 1; _i < inner.length; _i++) { + var middleDelim = inner[_i]; // Property `isMiddle` not defined on `span`. See comment in + // "middle"'s htmlBuilder. + // $FlowFixMe + + var isMiddle = middleDelim.isMiddle; + + if (isMiddle) { + // Apply the options that were active when \middle was called + inner[_i] = delimiter.leftRightDelim(isMiddle.delim, innerHeight, innerDepth, isMiddle.options, group.mode, []); + } + } + } + + var rightDelim; // Same for the right delimiter, but using color specified by \color + + if (group.right === ".") { + rightDelim = makeNullDelimiter(options, ["mclose"]); + } else { + var colorOptions = group.rightColor ? options.withColor(group.rightColor) : options; + rightDelim = delimiter.leftRightDelim(group.right, innerHeight, innerDepth, colorOptions, group.mode, ["mclose"]); + } // Add it to the end of the expression. + + + inner.push(rightDelim); + return buildCommon.makeSpan(["minner"], inner, options); + }, + mathmlBuilder: (group, options) => { + assertParsed(group); + var inner = buildExpression(group.body, options); + + if (group.left !== ".") { + var leftNode = new mathMLTree.MathNode("mo", [makeText(group.left, group.mode)]); + leftNode.setAttribute("fence", "true"); + inner.unshift(leftNode); + } + + if (group.right !== ".") { + var rightNode = new mathMLTree.MathNode("mo", [makeText(group.right, group.mode)]); + rightNode.setAttribute("fence", "true"); + + if (group.rightColor) { + rightNode.setAttribute("mathcolor", group.rightColor); + } + + inner.push(rightNode); + } + + return makeRow(inner); + } +}); +defineFunction({ + type: "middle", + names: ["\\middle"], + props: { + numArgs: 1, + primitive: true + }, + handler: (context, args) => { + var delim = checkDelimiter(args[0], context); + + if (!context.parser.leftrightDepth) { + throw new ParseError("\\middle without preceding \\left", delim); + } + + return { + type: "middle", + mode: context.parser.mode, + delim: delim.text + }; + }, + htmlBuilder: (group, options) => { + var middleDelim; + + if (group.delim === ".") { + middleDelim = makeNullDelimiter(options, []); + } else { + middleDelim = delimiter.sizedDelim(group.delim, 1, options, group.mode, []); + var isMiddle = { + delim: group.delim, + options + }; // Property `isMiddle` not defined on `span`. It is only used in + // this file above. + // TODO: Fix this violation of the `span` type and possibly rename + // things since `isMiddle` sounds like a boolean, but is a struct. + // $FlowFixMe + + middleDelim.isMiddle = isMiddle; + } + + return middleDelim; + }, + mathmlBuilder: (group, options) => { + // A Firefox \middle will stretch a character vertically only if it + // is in the fence part of the operator dictionary at: + // https://www.w3.org/TR/MathML3/appendixc.html. + // So we need to avoid U+2223 and use plain "|" instead. + var textNode = group.delim === "\\vert" || group.delim === "|" ? makeText("|", "text") : makeText(group.delim, group.mode); + var middleNode = new mathMLTree.MathNode("mo", [textNode]); + middleNode.setAttribute("fence", "true"); // MathML gives 5/18em spacing to each element. + // \middle should get delimiter spacing instead. + + middleNode.setAttribute("lspace", "0.05em"); + middleNode.setAttribute("rspace", "0.05em"); + return middleNode; + } +}); + +var htmlBuilder$7 = (group, options) => { + // \cancel, \bcancel, \xcancel, \sout, \fbox, \colorbox, \fcolorbox, \phase + // Some groups can return document fragments. Handle those by wrapping + // them in a span. + var inner = buildCommon.wrapFragment(buildGroup$1(group.body, options), options); + var label = group.label.slice(1); + var scale = options.sizeMultiplier; + var img; + var imgShift = 0; // In the LaTeX cancel package, line geometry is slightly different + // depending on whether the subject is wider than it is tall, or vice versa. + // We don't know the width of a group, so as a proxy, we test if + // the subject is a single character. This captures most of the + // subjects that should get the "tall" treatment. + + var isSingleChar = utils.isCharacterBox(group.body); + + if (label === "sout") { + img = buildCommon.makeSpan(["stretchy", "sout"]); + img.height = options.fontMetrics().defaultRuleThickness / scale; + imgShift = -0.5 * options.fontMetrics().xHeight; + } else if (label === "phase") { + // Set a couple of dimensions from the steinmetz package. + var lineWeight = calculateSize({ + number: 0.6, + unit: "pt" + }, options); + var clearance = calculateSize({ + number: 0.35, + unit: "ex" + }, options); // Prevent size changes like \Huge from affecting line thickness + + var newOptions = options.havingBaseSizing(); + scale = scale / newOptions.sizeMultiplier; + var angleHeight = inner.height + inner.depth + lineWeight + clearance; // Reserve a left pad for the angle. + + inner.style.paddingLeft = makeEm(angleHeight / 2 + lineWeight); // Create an SVG + + var viewBoxHeight = Math.floor(1000 * angleHeight * scale); + var path = phasePath(viewBoxHeight); + var svgNode = new SvgNode([new PathNode("phase", path)], { + "width": "400em", + "height": makeEm(viewBoxHeight / 1000), + "viewBox": "0 0 400000 " + viewBoxHeight, + "preserveAspectRatio": "xMinYMin slice" + }); // Wrap it in a span with overflow: hidden. + + img = buildCommon.makeSvgSpan(["hide-tail"], [svgNode], options); + img.style.height = makeEm(angleHeight); + imgShift = inner.depth + lineWeight + clearance; + } else { + // Add horizontal padding + if (/cancel/.test(label)) { + if (!isSingleChar) { + inner.classes.push("cancel-pad"); + } + } else if (label === "angl") { + inner.classes.push("anglpad"); + } else { + inner.classes.push("boxpad"); + } // Add vertical padding + + + var topPad = 0; + var bottomPad = 0; + var ruleThickness = 0; // ref: cancel package: \advance\totalheight2\p@ % "+2" + + if (/box/.test(label)) { + ruleThickness = Math.max(options.fontMetrics().fboxrule, // default + options.minRuleThickness // User override. + ); + topPad = options.fontMetrics().fboxsep + (label === "colorbox" ? 0 : ruleThickness); + bottomPad = topPad; + } else if (label === "angl") { + ruleThickness = Math.max(options.fontMetrics().defaultRuleThickness, options.minRuleThickness); + topPad = 4 * ruleThickness; // gap = 3 × line, plus the line itself. + + bottomPad = Math.max(0, 0.25 - inner.depth); + } else { + topPad = isSingleChar ? 0.2 : 0; + bottomPad = topPad; + } + + img = stretchy.encloseSpan(inner, label, topPad, bottomPad, options); + + if (/fbox|boxed|fcolorbox/.test(label)) { + img.style.borderStyle = "solid"; + img.style.borderWidth = makeEm(ruleThickness); + } else if (label === "angl" && ruleThickness !== 0.049) { + img.style.borderTopWidth = makeEm(ruleThickness); + img.style.borderRightWidth = makeEm(ruleThickness); + } + + imgShift = inner.depth + bottomPad; + + if (group.backgroundColor) { + img.style.backgroundColor = group.backgroundColor; + + if (group.borderColor) { + img.style.borderColor = group.borderColor; + } + } + } + + var vlist; + + if (group.backgroundColor) { + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [// Put the color background behind inner; + { + type: "elem", + elem: img, + shift: imgShift + }, { + type: "elem", + elem: inner, + shift: 0 + }] + }, options); + } else { + var classes = /cancel|phase/.test(label) ? ["svg-align"] : []; + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [// Write the \cancel stroke on top of inner. + { + type: "elem", + elem: inner, + shift: 0 + }, { + type: "elem", + elem: img, + shift: imgShift, + wrapperClasses: classes + }] + }, options); + } + + if (/cancel/.test(label)) { + // The cancel package documentation says that cancel lines add their height + // to the expression, but tests show that isn't how it actually works. + vlist.height = inner.height; + vlist.depth = inner.depth; + } + + if (/cancel/.test(label) && !isSingleChar) { + // cancel does not create horiz space for its line extension. + return buildCommon.makeSpan(["mord", "cancel-lap"], [vlist], options); + } else { + return buildCommon.makeSpan(["mord"], [vlist], options); + } +}; + +var mathmlBuilder$6 = (group, options) => { + var fboxsep = 0; + var node = new mathMLTree.MathNode(group.label.indexOf("colorbox") > -1 ? "mpadded" : "menclose", [buildGroup(group.body, options)]); + + switch (group.label) { + case "\\cancel": + node.setAttribute("notation", "updiagonalstrike"); + break; + + case "\\bcancel": + node.setAttribute("notation", "downdiagonalstrike"); + break; + + case "\\phase": + node.setAttribute("notation", "phasorangle"); + break; + + case "\\sout": + node.setAttribute("notation", "horizontalstrike"); + break; + + case "\\fbox": + node.setAttribute("notation", "box"); + break; + + case "\\angl": + node.setAttribute("notation", "actuarial"); + break; + + case "\\fcolorbox": + case "\\colorbox": + // doesn't have a good notation option. So use + // instead. Set some attributes that come included with . + fboxsep = options.fontMetrics().fboxsep * options.fontMetrics().ptPerEm; + node.setAttribute("width", "+" + 2 * fboxsep + "pt"); + node.setAttribute("height", "+" + 2 * fboxsep + "pt"); + node.setAttribute("lspace", fboxsep + "pt"); // + + node.setAttribute("voffset", fboxsep + "pt"); + + if (group.label === "\\fcolorbox") { + var thk = Math.max(options.fontMetrics().fboxrule, // default + options.minRuleThickness // user override + ); + node.setAttribute("style", "border: " + thk + "em solid " + String(group.borderColor)); + } + + break; + + case "\\xcancel": + node.setAttribute("notation", "updiagonalstrike downdiagonalstrike"); + break; + } + + if (group.backgroundColor) { + node.setAttribute("mathbackground", group.backgroundColor); + } + + return node; +}; + +defineFunction({ + type: "enclose", + names: ["\\colorbox"], + props: { + numArgs: 2, + allowedInText: true, + argTypes: ["color", "text"] + }, + + handler(_ref, args, optArgs) { + var { + parser, + funcName + } = _ref; + var color = assertNodeType(args[0], "color-token").color; + var body = args[1]; + return { + type: "enclose", + mode: parser.mode, + label: funcName, + backgroundColor: color, + body + }; + }, + + htmlBuilder: htmlBuilder$7, + mathmlBuilder: mathmlBuilder$6 +}); +defineFunction({ + type: "enclose", + names: ["\\fcolorbox"], + props: { + numArgs: 3, + allowedInText: true, + argTypes: ["color", "color", "text"] + }, + + handler(_ref2, args, optArgs) { + var { + parser, + funcName + } = _ref2; + var borderColor = assertNodeType(args[0], "color-token").color; + var backgroundColor = assertNodeType(args[1], "color-token").color; + var body = args[2]; + return { + type: "enclose", + mode: parser.mode, + label: funcName, + backgroundColor, + borderColor, + body + }; + }, + + htmlBuilder: htmlBuilder$7, + mathmlBuilder: mathmlBuilder$6 +}); +defineFunction({ + type: "enclose", + names: ["\\fbox"], + props: { + numArgs: 1, + argTypes: ["hbox"], + allowedInText: true + }, + + handler(_ref3, args) { + var { + parser + } = _ref3; + return { + type: "enclose", + mode: parser.mode, + label: "\\fbox", + body: args[0] + }; + } + +}); +defineFunction({ + type: "enclose", + names: ["\\cancel", "\\bcancel", "\\xcancel", "\\sout", "\\phase"], + props: { + numArgs: 1 + }, + + handler(_ref4, args) { + var { + parser, + funcName + } = _ref4; + var body = args[0]; + return { + type: "enclose", + mode: parser.mode, + label: funcName, + body + }; + }, + + htmlBuilder: htmlBuilder$7, + mathmlBuilder: mathmlBuilder$6 +}); +defineFunction({ + type: "enclose", + names: ["\\angl"], + props: { + numArgs: 1, + argTypes: ["hbox"], + allowedInText: false + }, + + handler(_ref5, args) { + var { + parser + } = _ref5; + return { + type: "enclose", + mode: parser.mode, + label: "\\angl", + body: args[0] + }; + } + +}); + +/** + * All registered environments. + * `environments.js` exports this same dictionary again and makes it public. + * `Parser.js` requires this dictionary via `environments.js`. + */ +var _environments = {}; +function defineEnvironment(_ref) { + var { + type, + names, + props, + handler, + htmlBuilder, + mathmlBuilder + } = _ref; + // Set default values of environments. + var data = { + type, + numArgs: props.numArgs || 0, + allowedInText: false, + numOptionalArgs: 0, + handler + }; + + for (var i = 0; i < names.length; ++i) { + // TODO: The value type of _environments should be a type union of all + // possible `EnvSpec<>` possibilities instead of `EnvSpec<*>`, which is + // an existential type. + _environments[names[i]] = data; + } + + if (htmlBuilder) { + _htmlGroupBuilders[type] = htmlBuilder; + } + + if (mathmlBuilder) { + _mathmlGroupBuilders[type] = mathmlBuilder; + } +} + +/** + * All registered global/built-in macros. + * `macros.js` exports this same dictionary again and makes it public. + * `Parser.js` requires this dictionary via `macros.js`. + */ +var _macros = {}; // This function might one day accept an additional argument and do more things. + +function defineMacro(name, body) { + _macros[name] = body; +} + +// Helper functions +function getHLines(parser) { + // Return an array. The array length = number of hlines. + // Each element in the array tells if the line is dashed. + var hlineInfo = []; + parser.consumeSpaces(); + var nxt = parser.fetch().text; + + if (nxt === "\\relax") { + // \relax is an artifact of the \cr macro below + parser.consume(); + parser.consumeSpaces(); + nxt = parser.fetch().text; + } + + while (nxt === "\\hline" || nxt === "\\hdashline") { + parser.consume(); + hlineInfo.push(nxt === "\\hdashline"); + parser.consumeSpaces(); + nxt = parser.fetch().text; + } + + return hlineInfo; +} + +var validateAmsEnvironmentContext = context => { + var settings = context.parser.settings; + + if (!settings.displayMode) { + throw new ParseError("{" + context.envName + "} can be used only in" + " display mode."); + } +}; // autoTag (an argument to parseArray) can be one of three values: +// * undefined: Regular (not-top-level) array; no tags on each row +// * true: Automatic equation numbering, overridable by \tag +// * false: Tags allowed on each row, but no automatic numbering +// This function *doesn't* work with the "split" environment name. + + +function getAutoTag(name) { + if (name.indexOf("ed") === -1) { + return name.indexOf("*") === -1; + } // return undefined; + +} +/** + * Parse the body of the environment, with rows delimited by \\ and + * columns delimited by &, and create a nested list in row-major order + * with one group per cell. If given an optional argument style + * ("text", "display", etc.), then each cell is cast into that style. + */ + + +function parseArray(parser, _ref, style) { + var { + hskipBeforeAndAfter, + addJot, + cols, + arraystretch, + colSeparationType, + autoTag, + singleRow, + emptySingleRow, + maxNumCols, + leqno + } = _ref; + parser.gullet.beginGroup(); + + if (!singleRow) { + // \cr is equivalent to \\ without the optional size argument (see below) + // TODO: provide helpful error when \cr is used outside array environment + parser.gullet.macros.set("\\cr", "\\\\\\relax"); + } // Get current arraystretch if it's not set by the environment + + + if (!arraystretch) { + var stretch = parser.gullet.expandMacroAsText("\\arraystretch"); + + if (stretch == null) { + // Default \arraystretch from lttab.dtx + arraystretch = 1; + } else { + arraystretch = parseFloat(stretch); + + if (!arraystretch || arraystretch < 0) { + throw new ParseError("Invalid \\arraystretch: " + stretch); + } + } + } // Start group for first cell + + + parser.gullet.beginGroup(); + var row = []; + var body = [row]; + var rowGaps = []; + var hLinesBeforeRow = []; + var tags = autoTag != null ? [] : undefined; // amsmath uses \global\@eqnswtrue and \global\@eqnswfalse to represent + // whether this row should have an equation number. Simulate this with + // a \@eqnsw macro set to 1 or 0. + + function beginRow() { + if (autoTag) { + parser.gullet.macros.set("\\@eqnsw", "1", true); + } + } + + function endRow() { + if (tags) { + if (parser.gullet.macros.get("\\df@tag")) { + tags.push(parser.subparse([new Token("\\df@tag")])); + parser.gullet.macros.set("\\df@tag", undefined, true); + } else { + tags.push(Boolean(autoTag) && parser.gullet.macros.get("\\@eqnsw") === "1"); + } + } + } + + beginRow(); // Test for \hline at the top of the array. + + hLinesBeforeRow.push(getHLines(parser)); + + while (true) { + // eslint-disable-line no-constant-condition + // Parse each cell in its own group (namespace) + var cell = parser.parseExpression(false, singleRow ? "\\end" : "\\\\"); + parser.gullet.endGroup(); + parser.gullet.beginGroup(); + cell = { + type: "ordgroup", + mode: parser.mode, + body: cell + }; + + if (style) { + cell = { + type: "styling", + mode: parser.mode, + style, + body: [cell] + }; + } + + row.push(cell); + var next = parser.fetch().text; + + if (next === "&") { + if (maxNumCols && row.length === maxNumCols) { + if (singleRow || colSeparationType) { + // {equation} or {split} + throw new ParseError("Too many tab characters: &", parser.nextToken); + } else { + // {array} environment + parser.settings.reportNonstrict("textEnv", "Too few columns " + "specified in the {array} column argument."); + } + } + + parser.consume(); + } else if (next === "\\end") { + endRow(); // Arrays terminate newlines with `\crcr` which consumes a `\cr` if + // the last line is empty. However, AMS environments keep the + // empty row if it's the only one. + // NOTE: Currently, `cell` is the last item added into `row`. + + if (row.length === 1 && cell.type === "styling" && cell.body[0].body.length === 0 && (body.length > 1 || !emptySingleRow)) { + body.pop(); + } + + if (hLinesBeforeRow.length < body.length + 1) { + hLinesBeforeRow.push([]); + } + + break; + } else if (next === "\\\\") { + parser.consume(); + var size = void 0; // \def\Let@{\let\\\math@cr} + // \def\math@cr{...\math@cr@} + // \def\math@cr@{\new@ifnextchar[\math@cr@@{\math@cr@@[\z@]}} + // \def\math@cr@@[#1]{...\math@cr@@@...} + // \def\math@cr@@@{\cr} + + if (parser.gullet.future().text !== " ") { + size = parser.parseSizeGroup(true); + } + + rowGaps.push(size ? size.value : null); + endRow(); // check for \hline(s) following the row separator + + hLinesBeforeRow.push(getHLines(parser)); + row = []; + body.push(row); + beginRow(); + } else { + throw new ParseError("Expected & or \\\\ or \\cr or \\end", parser.nextToken); + } + } // End cell group + + + parser.gullet.endGroup(); // End array group defining \cr + + parser.gullet.endGroup(); + return { + type: "array", + mode: parser.mode, + addJot, + arraystretch, + body, + cols, + rowGaps, + hskipBeforeAndAfter, + hLinesBeforeRow, + colSeparationType, + tags, + leqno + }; +} // Decides on a style for cells in an array according to whether the given +// environment name starts with the letter 'd'. + + +function dCellStyle(envName) { + if (envName.slice(0, 1) === "d") { + return "display"; + } else { + return "text"; + } +} + +var htmlBuilder$6 = function htmlBuilder(group, options) { + var r; + var c; + var nr = group.body.length; + var hLinesBeforeRow = group.hLinesBeforeRow; + var nc = 0; + var body = new Array(nr); + var hlines = []; + var ruleThickness = Math.max( // From LaTeX \showthe\arrayrulewidth. Equals 0.04 em. + options.fontMetrics().arrayRuleWidth, options.minRuleThickness // User override. + ); // Horizontal spacing + + var pt = 1 / options.fontMetrics().ptPerEm; + var arraycolsep = 5 * pt; // default value, i.e. \arraycolsep in article.cls + + if (group.colSeparationType && group.colSeparationType === "small") { + // We're in a {smallmatrix}. Default column space is \thickspace, + // i.e. 5/18em = 0.2778em, per amsmath.dtx for {smallmatrix}. + // But that needs adjustment because LaTeX applies \scriptstyle to the + // entire array, including the colspace, but this function applies + // \scriptstyle only inside each element. + var localMultiplier = options.havingStyle(Style$1.SCRIPT).sizeMultiplier; + arraycolsep = 0.2778 * (localMultiplier / options.sizeMultiplier); + } // Vertical spacing + + + var baselineskip = group.colSeparationType === "CD" ? calculateSize({ + number: 3, + unit: "ex" + }, options) : 12 * pt; // see size10.clo + // Default \jot from ltmath.dtx + // TODO(edemaine): allow overriding \jot via \setlength (#687) + + var jot = 3 * pt; + var arrayskip = group.arraystretch * baselineskip; + var arstrutHeight = 0.7 * arrayskip; // \strutbox in ltfsstrc.dtx and + + var arstrutDepth = 0.3 * arrayskip; // \@arstrutbox in lttab.dtx + + var totalHeight = 0; // Set a position for \hline(s) at the top of the array, if any. + + function setHLinePos(hlinesInGap) { + for (var i = 0; i < hlinesInGap.length; ++i) { + if (i > 0) { + totalHeight += 0.25; + } + + hlines.push({ + pos: totalHeight, + isDashed: hlinesInGap[i] + }); + } + } + + setHLinePos(hLinesBeforeRow[0]); + + for (r = 0; r < group.body.length; ++r) { + var inrow = group.body[r]; + var height = arstrutHeight; // \@array adds an \@arstrut + + var depth = arstrutDepth; // to each tow (via the template) + + if (nc < inrow.length) { + nc = inrow.length; + } + + var outrow = new Array(inrow.length); + + for (c = 0; c < inrow.length; ++c) { + var elt = buildGroup$1(inrow[c], options); + + if (depth < elt.depth) { + depth = elt.depth; + } + + if (height < elt.height) { + height = elt.height; + } + + outrow[c] = elt; + } + + var rowGap = group.rowGaps[r]; + var gap = 0; + + if (rowGap) { + gap = calculateSize(rowGap, options); + + if (gap > 0) { + // \@argarraycr + gap += arstrutDepth; + + if (depth < gap) { + depth = gap; // \@xargarraycr + } + + gap = 0; + } + } // In AMS multiline environments such as aligned and gathered, rows + // correspond to lines that have additional \jot added to the + // \baselineskip via \openup. + + + if (group.addJot) { + depth += jot; + } + + outrow.height = height; + outrow.depth = depth; + totalHeight += height; + outrow.pos = totalHeight; + totalHeight += depth + gap; // \@yargarraycr + + body[r] = outrow; // Set a position for \hline(s), if any. + + setHLinePos(hLinesBeforeRow[r + 1]); + } + + var offset = totalHeight / 2 + options.fontMetrics().axisHeight; + var colDescriptions = group.cols || []; + var cols = []; + var colSep; + var colDescrNum; + var tagSpans = []; + + if (group.tags && group.tags.some(tag => tag)) { + // An environment with manual tags and/or automatic equation numbers. + // Create node(s), the latter of which trigger CSS counter increment. + for (r = 0; r < nr; ++r) { + var rw = body[r]; + var shift = rw.pos - offset; + var tag = group.tags[r]; + var tagSpan = void 0; + + if (tag === true) { + // automatic numbering + tagSpan = buildCommon.makeSpan(["eqn-num"], [], options); + } else if (tag === false) { + // \nonumber/\notag or starred environment + tagSpan = buildCommon.makeSpan([], [], options); + } else { + // manual \tag + tagSpan = buildCommon.makeSpan([], buildExpression$1(tag, options, true), options); + } + + tagSpan.depth = rw.depth; + tagSpan.height = rw.height; + tagSpans.push({ + type: "elem", + elem: tagSpan, + shift + }); + } + } + + for (c = 0, colDescrNum = 0; // Continue while either there are more columns or more column + // descriptions, so trailing separators don't get lost. + c < nc || colDescrNum < colDescriptions.length; ++c, ++colDescrNum) { + var colDescr = colDescriptions[colDescrNum] || {}; + var firstSeparator = true; + + while (colDescr.type === "separator") { + // If there is more than one separator in a row, add a space + // between them. + if (!firstSeparator) { + colSep = buildCommon.makeSpan(["arraycolsep"], []); + colSep.style.width = makeEm(options.fontMetrics().doubleRuleSep); + cols.push(colSep); + } + + if (colDescr.separator === "|" || colDescr.separator === ":") { + var lineType = colDescr.separator === "|" ? "solid" : "dashed"; + var separator = buildCommon.makeSpan(["vertical-separator"], [], options); + separator.style.height = makeEm(totalHeight); + separator.style.borderRightWidth = makeEm(ruleThickness); + separator.style.borderRightStyle = lineType; + separator.style.margin = "0 " + makeEm(-ruleThickness / 2); + + var _shift = totalHeight - offset; + + if (_shift) { + separator.style.verticalAlign = makeEm(-_shift); + } + + cols.push(separator); + } else { + throw new ParseError("Invalid separator type: " + colDescr.separator); + } + + colDescrNum++; + colDescr = colDescriptions[colDescrNum] || {}; + firstSeparator = false; + } + + if (c >= nc) { + continue; + } + + var sepwidth = void 0; + + if (c > 0 || group.hskipBeforeAndAfter) { + sepwidth = utils.deflt(colDescr.pregap, arraycolsep); + + if (sepwidth !== 0) { + colSep = buildCommon.makeSpan(["arraycolsep"], []); + colSep.style.width = makeEm(sepwidth); + cols.push(colSep); + } + } + + var col = []; + + for (r = 0; r < nr; ++r) { + var row = body[r]; + var elem = row[c]; + + if (!elem) { + continue; + } + + var _shift2 = row.pos - offset; + + elem.depth = row.depth; + elem.height = row.height; + col.push({ + type: "elem", + elem: elem, + shift: _shift2 + }); + } + + col = buildCommon.makeVList({ + positionType: "individualShift", + children: col + }, options); + col = buildCommon.makeSpan(["col-align-" + (colDescr.align || "c")], [col]); + cols.push(col); + + if (c < nc - 1 || group.hskipBeforeAndAfter) { + sepwidth = utils.deflt(colDescr.postgap, arraycolsep); + + if (sepwidth !== 0) { + colSep = buildCommon.makeSpan(["arraycolsep"], []); + colSep.style.width = makeEm(sepwidth); + cols.push(colSep); + } + } + } + + body = buildCommon.makeSpan(["mtable"], cols); // Add \hline(s), if any. + + if (hlines.length > 0) { + var line = buildCommon.makeLineSpan("hline", options, ruleThickness); + var dashes = buildCommon.makeLineSpan("hdashline", options, ruleThickness); + var vListElems = [{ + type: "elem", + elem: body, + shift: 0 + }]; + + while (hlines.length > 0) { + var hline = hlines.pop(); + var lineShift = hline.pos - offset; + + if (hline.isDashed) { + vListElems.push({ + type: "elem", + elem: dashes, + shift: lineShift + }); + } else { + vListElems.push({ + type: "elem", + elem: line, + shift: lineShift + }); + } + } + + body = buildCommon.makeVList({ + positionType: "individualShift", + children: vListElems + }, options); + } + + if (tagSpans.length === 0) { + return buildCommon.makeSpan(["mord"], [body], options); + } else { + var eqnNumCol = buildCommon.makeVList({ + positionType: "individualShift", + children: tagSpans + }, options); + eqnNumCol = buildCommon.makeSpan(["tag"], [eqnNumCol], options); + return buildCommon.makeFragment([body, eqnNumCol]); + } +}; + +var alignMap = { + c: "center ", + l: "left ", + r: "right " +}; + +var mathmlBuilder$5 = function mathmlBuilder(group, options) { + var tbl = []; + var glue = new mathMLTree.MathNode("mtd", [], ["mtr-glue"]); + var tag = new mathMLTree.MathNode("mtd", [], ["mml-eqn-num"]); + + for (var i = 0; i < group.body.length; i++) { + var rw = group.body[i]; + var row = []; + + for (var j = 0; j < rw.length; j++) { + row.push(new mathMLTree.MathNode("mtd", [buildGroup(rw[j], options)])); + } + + if (group.tags && group.tags[i]) { + row.unshift(glue); + row.push(glue); + + if (group.leqno) { + row.unshift(tag); + } else { + row.push(tag); + } + } + + tbl.push(new mathMLTree.MathNode("mtr", row)); + } + + var table = new mathMLTree.MathNode("mtable", tbl); // Set column alignment, row spacing, column spacing, and + // array lines by setting attributes on the table element. + // Set the row spacing. In MathML, we specify a gap distance. + // We do not use rowGap[] because MathML automatically increases + // cell height with the height/depth of the element content. + // LaTeX \arraystretch multiplies the row baseline-to-baseline distance. + // We simulate this by adding (arraystretch - 1)em to the gap. This + // does a reasonable job of adjusting arrays containing 1 em tall content. + // The 0.16 and 0.09 values are found empirically. They produce an array + // similar to LaTeX and in which content does not interfere with \hlines. + + var gap = group.arraystretch === 0.5 ? 0.1 // {smallmatrix}, {subarray} + : 0.16 + group.arraystretch - 1 + (group.addJot ? 0.09 : 0); + table.setAttribute("rowspacing", makeEm(gap)); // MathML table lines go only between cells. + // To place a line on an edge we'll use , if necessary. + + var menclose = ""; + var align = ""; + + if (group.cols && group.cols.length > 0) { + // Find column alignment, column spacing, and vertical lines. + var cols = group.cols; + var columnLines = ""; + var prevTypeWasAlign = false; + var iStart = 0; + var iEnd = cols.length; + + if (cols[0].type === "separator") { + menclose += "top "; + iStart = 1; + } + + if (cols[cols.length - 1].type === "separator") { + menclose += "bottom "; + iEnd -= 1; + } + + for (var _i = iStart; _i < iEnd; _i++) { + if (cols[_i].type === "align") { + align += alignMap[cols[_i].align]; + + if (prevTypeWasAlign) { + columnLines += "none "; + } + + prevTypeWasAlign = true; + } else if (cols[_i].type === "separator") { + // MathML accepts only single lines between cells. + // So we read only the first of consecutive separators. + if (prevTypeWasAlign) { + columnLines += cols[_i].separator === "|" ? "solid " : "dashed "; + prevTypeWasAlign = false; + } + } + } + + table.setAttribute("columnalign", align.trim()); + + if (/[sd]/.test(columnLines)) { + table.setAttribute("columnlines", columnLines.trim()); + } + } // Set column spacing. + + + if (group.colSeparationType === "align") { + var _cols = group.cols || []; + + var spacing = ""; + + for (var _i2 = 1; _i2 < _cols.length; _i2++) { + spacing += _i2 % 2 ? "0em " : "1em "; + } + + table.setAttribute("columnspacing", spacing.trim()); + } else if (group.colSeparationType === "alignat" || group.colSeparationType === "gather") { + table.setAttribute("columnspacing", "0em"); + } else if (group.colSeparationType === "small") { + table.setAttribute("columnspacing", "0.2778em"); + } else if (group.colSeparationType === "CD") { + table.setAttribute("columnspacing", "0.5em"); + } else { + table.setAttribute("columnspacing", "1em"); + } // Address \hline and \hdashline + + + var rowLines = ""; + var hlines = group.hLinesBeforeRow; + menclose += hlines[0].length > 0 ? "left " : ""; + menclose += hlines[hlines.length - 1].length > 0 ? "right " : ""; + + for (var _i3 = 1; _i3 < hlines.length - 1; _i3++) { + rowLines += hlines[_i3].length === 0 ? "none " // MathML accepts only a single line between rows. Read one element. + : hlines[_i3][0] ? "dashed " : "solid "; + } + + if (/[sd]/.test(rowLines)) { + table.setAttribute("rowlines", rowLines.trim()); + } + + if (menclose !== "") { + table = new mathMLTree.MathNode("menclose", [table]); + table.setAttribute("notation", menclose.trim()); + } + + if (group.arraystretch && group.arraystretch < 1) { + // A small array. Wrap in scriptstyle so row gap is not too large. + table = new mathMLTree.MathNode("mstyle", [table]); + table.setAttribute("scriptlevel", "1"); + } + + return table; +}; // Convenience function for align, align*, aligned, alignat, alignat*, alignedat. + + +var alignedHandler = function alignedHandler(context, args) { + if (context.envName.indexOf("ed") === -1) { + validateAmsEnvironmentContext(context); + } + + var cols = []; + var separationType = context.envName.indexOf("at") > -1 ? "alignat" : "align"; + var isSplit = context.envName === "split"; + var res = parseArray(context.parser, { + cols, + addJot: true, + autoTag: isSplit ? undefined : getAutoTag(context.envName), + emptySingleRow: true, + colSeparationType: separationType, + maxNumCols: isSplit ? 2 : undefined, + leqno: context.parser.settings.leqno + }, "display"); // Determining number of columns. + // 1. If the first argument is given, we use it as a number of columns, + // and makes sure that each row doesn't exceed that number. + // 2. Otherwise, just count number of columns = maximum number + // of cells in each row ("aligned" mode -- isAligned will be true). + // + // At the same time, prepend empty group {} at beginning of every second + // cell in each row (starting with second cell) so that operators become + // binary. This behavior is implemented in amsmath's \start@aligned. + + var numMaths; + var numCols = 0; + var emptyGroup = { + type: "ordgroup", + mode: context.mode, + body: [] + }; + + if (args[0] && args[0].type === "ordgroup") { + var arg0 = ""; + + for (var i = 0; i < args[0].body.length; i++) { + var textord = assertNodeType(args[0].body[i], "textord"); + arg0 += textord.text; + } + + numMaths = Number(arg0); + numCols = numMaths * 2; + } + + var isAligned = !numCols; + res.body.forEach(function (row) { + for (var _i4 = 1; _i4 < row.length; _i4 += 2) { + // Modify ordgroup node within styling node + var styling = assertNodeType(row[_i4], "styling"); + var ordgroup = assertNodeType(styling.body[0], "ordgroup"); + ordgroup.body.unshift(emptyGroup); + } + + if (!isAligned) { + // Case 1 + var curMaths = row.length / 2; + + if (numMaths < curMaths) { + throw new ParseError("Too many math in a row: " + ("expected " + numMaths + ", but got " + curMaths), row[0]); + } + } else if (numCols < row.length) { + // Case 2 + numCols = row.length; + } + }); // Adjusting alignment. + // In aligned mode, we add one \qquad between columns; + // otherwise we add nothing. + + for (var _i5 = 0; _i5 < numCols; ++_i5) { + var align = "r"; + var pregap = 0; + + if (_i5 % 2 === 1) { + align = "l"; + } else if (_i5 > 0 && isAligned) { + // "aligned" mode. + pregap = 1; // add one \quad + } + + cols[_i5] = { + type: "align", + align: align, + pregap: pregap, + postgap: 0 + }; + } + + res.colSeparationType = isAligned ? "align" : "alignat"; + return res; +}; // Arrays are part of LaTeX, defined in lttab.dtx so its documentation +// is part of the source2e.pdf file of LaTeX2e source documentation. +// {darray} is an {array} environment where cells are set in \displaystyle, +// as defined in nccmath.sty. + + +defineEnvironment({ + type: "array", + names: ["array", "darray"], + props: { + numArgs: 1 + }, + + handler(context, args) { + // Since no types are specified above, the two possibilities are + // - The argument is wrapped in {} or [], in which case Parser's + // parseGroup() returns an "ordgroup" wrapping some symbol node. + // - The argument is a bare symbol node. + var symNode = checkSymbolNodeType(args[0]); + var colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body; + var cols = colalign.map(function (nde) { + var node = assertSymbolNodeType(nde); + var ca = node.text; + + if ("lcr".indexOf(ca) !== -1) { + return { + type: "align", + align: ca + }; + } else if (ca === "|") { + return { + type: "separator", + separator: "|" + }; + } else if (ca === ":") { + return { + type: "separator", + separator: ":" + }; + } + + throw new ParseError("Unknown column alignment: " + ca, nde); + }); + var res = { + cols, + hskipBeforeAndAfter: true, + // \@preamble in lttab.dtx + maxNumCols: cols.length + }; + return parseArray(context.parser, res, dCellStyle(context.envName)); + }, + + htmlBuilder: htmlBuilder$6, + mathmlBuilder: mathmlBuilder$5 +}); // The matrix environments of amsmath builds on the array environment +// of LaTeX, which is discussed above. +// The mathtools package adds starred versions of the same environments. +// These have an optional argument to choose left|center|right justification. + +defineEnvironment({ + type: "array", + names: ["matrix", "pmatrix", "bmatrix", "Bmatrix", "vmatrix", "Vmatrix", "matrix*", "pmatrix*", "bmatrix*", "Bmatrix*", "vmatrix*", "Vmatrix*"], + props: { + numArgs: 0 + }, + + handler(context) { + var delimiters = { + "matrix": null, + "pmatrix": ["(", ")"], + "bmatrix": ["[", "]"], + "Bmatrix": ["\\{", "\\}"], + "vmatrix": ["|", "|"], + "Vmatrix": ["\\Vert", "\\Vert"] + }[context.envName.replace("*", "")]; // \hskip -\arraycolsep in amsmath + + var colAlign = "c"; + var payload = { + hskipBeforeAndAfter: false, + cols: [{ + type: "align", + align: colAlign + }] + }; + + if (context.envName.charAt(context.envName.length - 1) === "*") { + // It's one of the mathtools starred functions. + // Parse the optional alignment argument. + var parser = context.parser; + parser.consumeSpaces(); + + if (parser.fetch().text === "[") { + parser.consume(); + parser.consumeSpaces(); + colAlign = parser.fetch().text; + + if ("lcr".indexOf(colAlign) === -1) { + throw new ParseError("Expected l or c or r", parser.nextToken); + } + + parser.consume(); + parser.consumeSpaces(); + parser.expect("]"); + parser.consume(); + payload.cols = [{ + type: "align", + align: colAlign + }]; + } + } + + var res = parseArray(context.parser, payload, dCellStyle(context.envName)); // Populate cols with the correct number of column alignment specs. + + var numCols = Math.max(0, ...res.body.map(row => row.length)); + res.cols = new Array(numCols).fill({ + type: "align", + align: colAlign + }); + return delimiters ? { + type: "leftright", + mode: context.mode, + body: [res], + left: delimiters[0], + right: delimiters[1], + rightColor: undefined // \right uninfluenced by \color in array + + } : res; + }, + + htmlBuilder: htmlBuilder$6, + mathmlBuilder: mathmlBuilder$5 +}); +defineEnvironment({ + type: "array", + names: ["smallmatrix"], + props: { + numArgs: 0 + }, + + handler(context) { + var payload = { + arraystretch: 0.5 + }; + var res = parseArray(context.parser, payload, "script"); + res.colSeparationType = "small"; + return res; + }, + + htmlBuilder: htmlBuilder$6, + mathmlBuilder: mathmlBuilder$5 +}); +defineEnvironment({ + type: "array", + names: ["subarray"], + props: { + numArgs: 1 + }, + + handler(context, args) { + // Parsing of {subarray} is similar to {array} + var symNode = checkSymbolNodeType(args[0]); + var colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body; + var cols = colalign.map(function (nde) { + var node = assertSymbolNodeType(nde); + var ca = node.text; // {subarray} only recognizes "l" & "c" + + if ("lc".indexOf(ca) !== -1) { + return { + type: "align", + align: ca + }; + } + + throw new ParseError("Unknown column alignment: " + ca, nde); + }); + + if (cols.length > 1) { + throw new ParseError("{subarray} can contain only one column"); + } + + var res = { + cols, + hskipBeforeAndAfter: false, + arraystretch: 0.5 + }; + res = parseArray(context.parser, res, "script"); + + if (res.body.length > 0 && res.body[0].length > 1) { + throw new ParseError("{subarray} can contain only one column"); + } + + return res; + }, + + htmlBuilder: htmlBuilder$6, + mathmlBuilder: mathmlBuilder$5 +}); // A cases environment (in amsmath.sty) is almost equivalent to +// \def\arraystretch{1.2}% +// \left\{\begin{array}{@{}l@{\quad}l@{}} … \end{array}\right. +// {dcases} is a {cases} environment where cells are set in \displaystyle, +// as defined in mathtools.sty. +// {rcases} is another mathtools environment. It's brace is on the right side. + +defineEnvironment({ + type: "array", + names: ["cases", "dcases", "rcases", "drcases"], + props: { + numArgs: 0 + }, + + handler(context) { + var payload = { + arraystretch: 1.2, + cols: [{ + type: "align", + align: "l", + pregap: 0, + // TODO(kevinb) get the current style. + // For now we use the metrics for TEXT style which is what we were + // doing before. Before attempting to get the current style we + // should look at TeX's behavior especially for \over and matrices. + postgap: 1.0 + /* 1em quad */ + + }, { + type: "align", + align: "l", + pregap: 0, + postgap: 0 + }] + }; + var res = parseArray(context.parser, payload, dCellStyle(context.envName)); + return { + type: "leftright", + mode: context.mode, + body: [res], + left: context.envName.indexOf("r") > -1 ? "." : "\\{", + right: context.envName.indexOf("r") > -1 ? "\\}" : ".", + rightColor: undefined + }; + }, + + htmlBuilder: htmlBuilder$6, + mathmlBuilder: mathmlBuilder$5 +}); // In the align environment, one uses ampersands, &, to specify number of +// columns in each row, and to locate spacing between each column. +// align gets automatic numbering. align* and aligned do not. +// The alignedat environment can be used in math mode. +// Note that we assume \nomallineskiplimit to be zero, +// so that \strut@ is the same as \strut. + +defineEnvironment({ + type: "array", + names: ["align", "align*", "aligned", "split"], + props: { + numArgs: 0 + }, + handler: alignedHandler, + htmlBuilder: htmlBuilder$6, + mathmlBuilder: mathmlBuilder$5 +}); // A gathered environment is like an array environment with one centered +// column, but where rows are considered lines so get \jot line spacing +// and contents are set in \displaystyle. + +defineEnvironment({ + type: "array", + names: ["gathered", "gather", "gather*"], + props: { + numArgs: 0 + }, + + handler(context) { + if (utils.contains(["gather", "gather*"], context.envName)) { + validateAmsEnvironmentContext(context); + } + + var res = { + cols: [{ + type: "align", + align: "c" + }], + addJot: true, + colSeparationType: "gather", + autoTag: getAutoTag(context.envName), + emptySingleRow: true, + leqno: context.parser.settings.leqno + }; + return parseArray(context.parser, res, "display"); + }, + + htmlBuilder: htmlBuilder$6, + mathmlBuilder: mathmlBuilder$5 +}); // alignat environment is like an align environment, but one must explicitly +// specify maximum number of columns in each row, and can adjust spacing between +// each columns. + +defineEnvironment({ + type: "array", + names: ["alignat", "alignat*", "alignedat"], + props: { + numArgs: 1 + }, + handler: alignedHandler, + htmlBuilder: htmlBuilder$6, + mathmlBuilder: mathmlBuilder$5 +}); +defineEnvironment({ + type: "array", + names: ["equation", "equation*"], + props: { + numArgs: 0 + }, + + handler(context) { + validateAmsEnvironmentContext(context); + var res = { + autoTag: getAutoTag(context.envName), + emptySingleRow: true, + singleRow: true, + maxNumCols: 1, + leqno: context.parser.settings.leqno + }; + return parseArray(context.parser, res, "display"); + }, + + htmlBuilder: htmlBuilder$6, + mathmlBuilder: mathmlBuilder$5 +}); +defineEnvironment({ + type: "array", + names: ["CD"], + props: { + numArgs: 0 + }, + + handler(context) { + validateAmsEnvironmentContext(context); + return parseCD(context.parser); + }, + + htmlBuilder: htmlBuilder$6, + mathmlBuilder: mathmlBuilder$5 +}); +defineMacro("\\nonumber", "\\gdef\\@eqnsw{0}"); +defineMacro("\\notag", "\\nonumber"); // Catch \hline outside array environment + +defineFunction({ + type: "text", + // Doesn't matter what this is. + names: ["\\hline", "\\hdashline"], + props: { + numArgs: 0, + allowedInText: true, + allowedInMath: true + }, + + handler(context, args) { + throw new ParseError(context.funcName + " valid only within array environment"); + } + +}); + +var environments = _environments; + +// defineEnvironment definitions. + +defineFunction({ + type: "environment", + names: ["\\begin", "\\end"], + props: { + numArgs: 1, + argTypes: ["text"] + }, + + handler(_ref, args) { + var { + parser, + funcName + } = _ref; + var nameGroup = args[0]; + + if (nameGroup.type !== "ordgroup") { + throw new ParseError("Invalid environment name", nameGroup); + } + + var envName = ""; + + for (var i = 0; i < nameGroup.body.length; ++i) { + envName += assertNodeType(nameGroup.body[i], "textord").text; + } + + if (funcName === "\\begin") { + // begin...end is similar to left...right + if (!environments.hasOwnProperty(envName)) { + throw new ParseError("No such environment: " + envName, nameGroup); + } // Build the environment object. Arguments and other information will + // be made available to the begin and end methods using properties. + + + var env = environments[envName]; + var { + args: _args, + optArgs + } = parser.parseArguments("\\begin{" + envName + "}", env); + var context = { + mode: parser.mode, + envName, + parser + }; + var result = env.handler(context, _args, optArgs); + parser.expect("\\end", false); + var endNameToken = parser.nextToken; + var end = assertNodeType(parser.parseFunction(), "environment"); + + if (end.name !== envName) { + throw new ParseError("Mismatch: \\begin{" + envName + "} matched by \\end{" + end.name + "}", endNameToken); + } // $FlowFixMe, "environment" handler returns an environment ParseNode + + + return result; + } + + return { + type: "environment", + mode: parser.mode, + name: envName, + nameGroup + }; + } + +}); + +// TODO(kevinb): implement \\sl and \\sc + +var htmlBuilder$5 = (group, options) => { + var font = group.font; + var newOptions = options.withFont(font); + return buildGroup$1(group.body, newOptions); +}; + +var mathmlBuilder$4 = (group, options) => { + var font = group.font; + var newOptions = options.withFont(font); + return buildGroup(group.body, newOptions); +}; + +var fontAliases = { + "\\Bbb": "\\mathbb", + "\\bold": "\\mathbf", + "\\frak": "\\mathfrak", + "\\bm": "\\boldsymbol" +}; +defineFunction({ + type: "font", + names: [// styles, except \boldsymbol defined below + "\\mathrm", "\\mathit", "\\mathbf", "\\mathnormal", // families + "\\mathbb", "\\mathcal", "\\mathfrak", "\\mathscr", "\\mathsf", "\\mathtt", // aliases, except \bm defined below + "\\Bbb", "\\bold", "\\frak"], + props: { + numArgs: 1, + allowedInArgument: true + }, + handler: (_ref, args) => { + var { + parser, + funcName + } = _ref; + var body = normalizeArgument(args[0]); + var func = funcName; + + if (func in fontAliases) { + func = fontAliases[func]; + } + + return { + type: "font", + mode: parser.mode, + font: func.slice(1), + body + }; + }, + htmlBuilder: htmlBuilder$5, + mathmlBuilder: mathmlBuilder$4 +}); +defineFunction({ + type: "mclass", + names: ["\\boldsymbol", "\\bm"], + props: { + numArgs: 1 + }, + handler: (_ref2, args) => { + var { + parser + } = _ref2; + var body = args[0]; + var isCharacterBox = utils.isCharacterBox(body); // amsbsy.sty's \boldsymbol uses \binrel spacing to inherit the + // argument's bin|rel|ord status + + return { + type: "mclass", + mode: parser.mode, + mclass: binrelClass(body), + body: [{ + type: "font", + mode: parser.mode, + font: "boldsymbol", + body + }], + isCharacterBox: isCharacterBox + }; + } +}); // Old font changing functions + +defineFunction({ + type: "font", + names: ["\\rm", "\\sf", "\\tt", "\\bf", "\\it", "\\cal"], + props: { + numArgs: 0, + allowedInText: true + }, + handler: (_ref3, args) => { + var { + parser, + funcName, + breakOnTokenText + } = _ref3; + var { + mode + } = parser; + var body = parser.parseExpression(true, breakOnTokenText); + var style = "math" + funcName.slice(1); + return { + type: "font", + mode: mode, + font: style, + body: { + type: "ordgroup", + mode: parser.mode, + body + } + }; + }, + htmlBuilder: htmlBuilder$5, + mathmlBuilder: mathmlBuilder$4 +}); + +var adjustStyle = (size, originalStyle) => { + // Figure out what style this fraction should be in based on the + // function used + var style = originalStyle; + + if (size === "display") { + // Get display style as a default. + // If incoming style is sub/sup, use style.text() to get correct size. + style = style.id >= Style$1.SCRIPT.id ? style.text() : Style$1.DISPLAY; + } else if (size === "text" && style.size === Style$1.DISPLAY.size) { + // We're in a \tfrac but incoming style is displaystyle, so: + style = Style$1.TEXT; + } else if (size === "script") { + style = Style$1.SCRIPT; + } else if (size === "scriptscript") { + style = Style$1.SCRIPTSCRIPT; + } + + return style; +}; + +var htmlBuilder$4 = (group, options) => { + // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e). + var style = adjustStyle(group.size, options.style); + var nstyle = style.fracNum(); + var dstyle = style.fracDen(); + var newOptions; + newOptions = options.havingStyle(nstyle); + var numerm = buildGroup$1(group.numer, newOptions, options); + + if (group.continued) { + // \cfrac inserts a \strut into the numerator. + // Get \strut dimensions from TeXbook page 353. + var hStrut = 8.5 / options.fontMetrics().ptPerEm; + var dStrut = 3.5 / options.fontMetrics().ptPerEm; + numerm.height = numerm.height < hStrut ? hStrut : numerm.height; + numerm.depth = numerm.depth < dStrut ? dStrut : numerm.depth; + } + + newOptions = options.havingStyle(dstyle); + var denomm = buildGroup$1(group.denom, newOptions, options); + var rule; + var ruleWidth; + var ruleSpacing; + + if (group.hasBarLine) { + if (group.barSize) { + ruleWidth = calculateSize(group.barSize, options); + rule = buildCommon.makeLineSpan("frac-line", options, ruleWidth); + } else { + rule = buildCommon.makeLineSpan("frac-line", options); + } + + ruleWidth = rule.height; + ruleSpacing = rule.height; + } else { + rule = null; + ruleWidth = 0; + ruleSpacing = options.fontMetrics().defaultRuleThickness; + } // Rule 15b + + + var numShift; + var clearance; + var denomShift; + + if (style.size === Style$1.DISPLAY.size || group.size === "display") { + numShift = options.fontMetrics().num1; + + if (ruleWidth > 0) { + clearance = 3 * ruleSpacing; + } else { + clearance = 7 * ruleSpacing; + } + + denomShift = options.fontMetrics().denom1; + } else { + if (ruleWidth > 0) { + numShift = options.fontMetrics().num2; + clearance = ruleSpacing; + } else { + numShift = options.fontMetrics().num3; + clearance = 3 * ruleSpacing; + } + + denomShift = options.fontMetrics().denom2; + } + + var frac; + + if (!rule) { + // Rule 15c + var candidateClearance = numShift - numerm.depth - (denomm.height - denomShift); + + if (candidateClearance < clearance) { + numShift += 0.5 * (clearance - candidateClearance); + denomShift += 0.5 * (clearance - candidateClearance); + } + + frac = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: denomm, + shift: denomShift + }, { + type: "elem", + elem: numerm, + shift: -numShift + }] + }, options); + } else { + // Rule 15d + var axisHeight = options.fontMetrics().axisHeight; + + if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) { + numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth)); + } + + if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) { + denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift)); + } + + var midShift = -(axisHeight - 0.5 * ruleWidth); + frac = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: denomm, + shift: denomShift + }, { + type: "elem", + elem: rule, + shift: midShift + }, { + type: "elem", + elem: numerm, + shift: -numShift + }] + }, options); + } // Since we manually change the style sometimes (with \dfrac or \tfrac), + // account for the possible size change here. + + + newOptions = options.havingStyle(style); + frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier; + frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier; // Rule 15e + + var delimSize; + + if (style.size === Style$1.DISPLAY.size) { + delimSize = options.fontMetrics().delim1; + } else if (style.size === Style$1.SCRIPTSCRIPT.size) { + delimSize = options.havingStyle(Style$1.SCRIPT).fontMetrics().delim2; + } else { + delimSize = options.fontMetrics().delim2; + } + + var leftDelim; + var rightDelim; + + if (group.leftDelim == null) { + leftDelim = makeNullDelimiter(options, ["mopen"]); + } else { + leftDelim = delimiter.customSizedDelim(group.leftDelim, delimSize, true, options.havingStyle(style), group.mode, ["mopen"]); + } + + if (group.continued) { + rightDelim = buildCommon.makeSpan([]); // zero width for \cfrac + } else if (group.rightDelim == null) { + rightDelim = makeNullDelimiter(options, ["mclose"]); + } else { + rightDelim = delimiter.customSizedDelim(group.rightDelim, delimSize, true, options.havingStyle(style), group.mode, ["mclose"]); + } + + return buildCommon.makeSpan(["mord"].concat(newOptions.sizingClasses(options)), [leftDelim, buildCommon.makeSpan(["mfrac"], [frac]), rightDelim], options); +}; + +var mathmlBuilder$3 = (group, options) => { + var node = new mathMLTree.MathNode("mfrac", [buildGroup(group.numer, options), buildGroup(group.denom, options)]); + + if (!group.hasBarLine) { + node.setAttribute("linethickness", "0px"); + } else if (group.barSize) { + var ruleWidth = calculateSize(group.barSize, options); + node.setAttribute("linethickness", makeEm(ruleWidth)); + } + + var style = adjustStyle(group.size, options.style); + + if (style.size !== options.style.size) { + node = new mathMLTree.MathNode("mstyle", [node]); + var isDisplay = style.size === Style$1.DISPLAY.size ? "true" : "false"; + node.setAttribute("displaystyle", isDisplay); + node.setAttribute("scriptlevel", "0"); + } + + if (group.leftDelim != null || group.rightDelim != null) { + var withDelims = []; + + if (group.leftDelim != null) { + var leftOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.leftDelim.replace("\\", ""))]); + leftOp.setAttribute("fence", "true"); + withDelims.push(leftOp); + } + + withDelims.push(node); + + if (group.rightDelim != null) { + var rightOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.rightDelim.replace("\\", ""))]); + rightOp.setAttribute("fence", "true"); + withDelims.push(rightOp); + } + + return makeRow(withDelims); + } + + return node; +}; + +defineFunction({ + type: "genfrac", + names: ["\\dfrac", "\\frac", "\\tfrac", "\\dbinom", "\\binom", "\\tbinom", "\\\\atopfrac", // can’t be entered directly + "\\\\bracefrac", "\\\\brackfrac" // ditto + ], + props: { + numArgs: 2, + allowedInArgument: true + }, + handler: (_ref, args) => { + var { + parser, + funcName + } = _ref; + var numer = args[0]; + var denom = args[1]; + var hasBarLine; + var leftDelim = null; + var rightDelim = null; + var size = "auto"; + + switch (funcName) { + case "\\dfrac": + case "\\frac": + case "\\tfrac": + hasBarLine = true; + break; + + case "\\\\atopfrac": + hasBarLine = false; + break; + + case "\\dbinom": + case "\\binom": + case "\\tbinom": + hasBarLine = false; + leftDelim = "("; + rightDelim = ")"; + break; + + case "\\\\bracefrac": + hasBarLine = false; + leftDelim = "\\{"; + rightDelim = "\\}"; + break; + + case "\\\\brackfrac": + hasBarLine = false; + leftDelim = "["; + rightDelim = "]"; + break; + + default: + throw new Error("Unrecognized genfrac command"); + } + + switch (funcName) { + case "\\dfrac": + case "\\dbinom": + size = "display"; + break; + + case "\\tfrac": + case "\\tbinom": + size = "text"; + break; + } + + return { + type: "genfrac", + mode: parser.mode, + continued: false, + numer, + denom, + hasBarLine, + leftDelim, + rightDelim, + size, + barSize: null + }; + }, + htmlBuilder: htmlBuilder$4, + mathmlBuilder: mathmlBuilder$3 +}); +defineFunction({ + type: "genfrac", + names: ["\\cfrac"], + props: { + numArgs: 2 + }, + handler: (_ref2, args) => { + var { + parser, + funcName + } = _ref2; + var numer = args[0]; + var denom = args[1]; + return { + type: "genfrac", + mode: parser.mode, + continued: true, + numer, + denom, + hasBarLine: true, + leftDelim: null, + rightDelim: null, + size: "display", + barSize: null + }; + } +}); // Infix generalized fractions -- these are not rendered directly, but replaced +// immediately by one of the variants above. + +defineFunction({ + type: "infix", + names: ["\\over", "\\choose", "\\atop", "\\brace", "\\brack"], + props: { + numArgs: 0, + infix: true + }, + + handler(_ref3) { + var { + parser, + funcName, + token + } = _ref3; + var replaceWith; + + switch (funcName) { + case "\\over": + replaceWith = "\\frac"; + break; + + case "\\choose": + replaceWith = "\\binom"; + break; + + case "\\atop": + replaceWith = "\\\\atopfrac"; + break; + + case "\\brace": + replaceWith = "\\\\bracefrac"; + break; + + case "\\brack": + replaceWith = "\\\\brackfrac"; + break; + + default: + throw new Error("Unrecognized infix genfrac command"); + } + + return { + type: "infix", + mode: parser.mode, + replaceWith, + token + }; + } + +}); +var stylArray = ["display", "text", "script", "scriptscript"]; + +var delimFromValue = function delimFromValue(delimString) { + var delim = null; + + if (delimString.length > 0) { + delim = delimString; + delim = delim === "." ? null : delim; + } + + return delim; +}; + +defineFunction({ + type: "genfrac", + names: ["\\genfrac"], + props: { + numArgs: 6, + allowedInArgument: true, + argTypes: ["math", "math", "size", "text", "math", "math"] + }, + + handler(_ref4, args) { + var { + parser + } = _ref4; + var numer = args[4]; + var denom = args[5]; // Look into the parse nodes to get the desired delimiters. + + var leftNode = normalizeArgument(args[0]); + var leftDelim = leftNode.type === "atom" && leftNode.family === "open" ? delimFromValue(leftNode.text) : null; + var rightNode = normalizeArgument(args[1]); + var rightDelim = rightNode.type === "atom" && rightNode.family === "close" ? delimFromValue(rightNode.text) : null; + var barNode = assertNodeType(args[2], "size"); + var hasBarLine; + var barSize = null; + + if (barNode.isBlank) { + // \genfrac acts differently than \above. + // \genfrac treats an empty size group as a signal to use a + // standard bar size. \above would see size = 0 and omit the bar. + hasBarLine = true; + } else { + barSize = barNode.value; + hasBarLine = barSize.number > 0; + } // Find out if we want displaystyle, textstyle, etc. + + + var size = "auto"; + var styl = args[3]; + + if (styl.type === "ordgroup") { + if (styl.body.length > 0) { + var textOrd = assertNodeType(styl.body[0], "textord"); + size = stylArray[Number(textOrd.text)]; + } + } else { + styl = assertNodeType(styl, "textord"); + size = stylArray[Number(styl.text)]; + } + + return { + type: "genfrac", + mode: parser.mode, + numer, + denom, + continued: false, + hasBarLine, + barSize, + leftDelim, + rightDelim, + size + }; + }, + + htmlBuilder: htmlBuilder$4, + mathmlBuilder: mathmlBuilder$3 +}); // \above is an infix fraction that also defines a fraction bar size. + +defineFunction({ + type: "infix", + names: ["\\above"], + props: { + numArgs: 1, + argTypes: ["size"], + infix: true + }, + + handler(_ref5, args) { + var { + parser, + funcName, + token + } = _ref5; + return { + type: "infix", + mode: parser.mode, + replaceWith: "\\\\abovefrac", + size: assertNodeType(args[0], "size").value, + token + }; + } + +}); +defineFunction({ + type: "genfrac", + names: ["\\\\abovefrac"], + props: { + numArgs: 3, + argTypes: ["math", "size", "math"] + }, + handler: (_ref6, args) => { + var { + parser, + funcName + } = _ref6; + var numer = args[0]; + var barSize = assert(assertNodeType(args[1], "infix").size); + var denom = args[2]; + var hasBarLine = barSize.number > 0; + return { + type: "genfrac", + mode: parser.mode, + numer, + denom, + continued: false, + hasBarLine, + barSize, + leftDelim: null, + rightDelim: null, + size: "auto" + }; + }, + htmlBuilder: htmlBuilder$4, + mathmlBuilder: mathmlBuilder$3 +}); + +// NOTE: Unlike most `htmlBuilder`s, this one handles not only "horizBrace", but +// also "supsub" since an over/underbrace can affect super/subscripting. +var htmlBuilder$3 = (grp, options) => { + var style = options.style; // Pull out the `ParseNode<"horizBrace">` if `grp` is a "supsub" node. + + var supSubGroup; + var group; + + if (grp.type === "supsub") { + // Ref: LaTeX source2e: }}}}\limits} + // i.e. LaTeX treats the brace similar to an op and passes it + // with \limits, so we need to assign supsub style. + supSubGroup = grp.sup ? buildGroup$1(grp.sup, options.havingStyle(style.sup()), options) : buildGroup$1(grp.sub, options.havingStyle(style.sub()), options); + group = assertNodeType(grp.base, "horizBrace"); + } else { + group = assertNodeType(grp, "horizBrace"); + } // Build the base group + + + var body = buildGroup$1(group.base, options.havingBaseStyle(Style$1.DISPLAY)); // Create the stretchy element + + var braceBody = stretchy.svgSpan(group, options); // Generate the vlist, with the appropriate kerns ┏━━━━━━━━┓ + // This first vlist contains the content and the brace: equation + + var vlist; + + if (group.isOver) { + vlist = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: body + }, { + type: "kern", + size: 0.1 + }, { + type: "elem", + elem: braceBody + }] + }, options); // $FlowFixMe: Replace this with passing "svg-align" into makeVList. + + vlist.children[0].children[0].children[1].classes.push("svg-align"); + } else { + vlist = buildCommon.makeVList({ + positionType: "bottom", + positionData: body.depth + 0.1 + braceBody.height, + children: [{ + type: "elem", + elem: braceBody + }, { + type: "kern", + size: 0.1 + }, { + type: "elem", + elem: body + }] + }, options); // $FlowFixMe: Replace this with passing "svg-align" into makeVList. + + vlist.children[0].children[0].children[0].classes.push("svg-align"); + } + + if (supSubGroup) { + // To write the supsub, wrap the first vlist in another vlist: + // They can't all go in the same vlist, because the note might be + // wider than the equation. We want the equation to control the + // brace width. + // note long note long note + // ┏━━━━━━━━┓ or ┏━━━┓ not ┏━━━━━━━━━┓ + // equation eqn eqn + var vSpan = buildCommon.makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options); + + if (group.isOver) { + vlist = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: vSpan + }, { + type: "kern", + size: 0.2 + }, { + type: "elem", + elem: supSubGroup + }] + }, options); + } else { + vlist = buildCommon.makeVList({ + positionType: "bottom", + positionData: vSpan.depth + 0.2 + supSubGroup.height + supSubGroup.depth, + children: [{ + type: "elem", + elem: supSubGroup + }, { + type: "kern", + size: 0.2 + }, { + type: "elem", + elem: vSpan + }] + }, options); + } + } + + return buildCommon.makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options); +}; + +var mathmlBuilder$2 = (group, options) => { + var accentNode = stretchy.mathMLnode(group.label); + return new mathMLTree.MathNode(group.isOver ? "mover" : "munder", [buildGroup(group.base, options), accentNode]); +}; // Horizontal stretchy braces + + +defineFunction({ + type: "horizBrace", + names: ["\\overbrace", "\\underbrace"], + props: { + numArgs: 1 + }, + + handler(_ref, args) { + var { + parser, + funcName + } = _ref; + return { + type: "horizBrace", + mode: parser.mode, + label: funcName, + isOver: /^\\over/.test(funcName), + base: args[0] + }; + }, + + htmlBuilder: htmlBuilder$3, + mathmlBuilder: mathmlBuilder$2 +}); + +defineFunction({ + type: "href", + names: ["\\href"], + props: { + numArgs: 2, + argTypes: ["url", "original"], + allowedInText: true + }, + handler: (_ref, args) => { + var { + parser + } = _ref; + var body = args[1]; + var href = assertNodeType(args[0], "url").url; + + if (!parser.settings.isTrusted({ + command: "\\href", + url: href + })) { + return parser.formatUnsupportedCmd("\\href"); + } + + return { + type: "href", + mode: parser.mode, + href, + body: ordargument(body) + }; + }, + htmlBuilder: (group, options) => { + var elements = buildExpression$1(group.body, options, false); + return buildCommon.makeAnchor(group.href, [], elements, options); + }, + mathmlBuilder: (group, options) => { + var math = buildExpressionRow(group.body, options); + + if (!(math instanceof MathNode)) { + math = new MathNode("mrow", [math]); + } + + math.setAttribute("href", group.href); + return math; + } +}); +defineFunction({ + type: "href", + names: ["\\url"], + props: { + numArgs: 1, + argTypes: ["url"], + allowedInText: true + }, + handler: (_ref2, args) => { + var { + parser + } = _ref2; + var href = assertNodeType(args[0], "url").url; + + if (!parser.settings.isTrusted({ + command: "\\url", + url: href + })) { + return parser.formatUnsupportedCmd("\\url"); + } + + var chars = []; + + for (var i = 0; i < href.length; i++) { + var c = href[i]; + + if (c === "~") { + c = "\\textasciitilde"; + } + + chars.push({ + type: "textord", + mode: "text", + text: c + }); + } + + var body = { + type: "text", + mode: parser.mode, + font: "\\texttt", + body: chars + }; + return { + type: "href", + mode: parser.mode, + href, + body: ordargument(body) + }; + } +}); + +// In LaTeX, \vcenter can act only on a box, as in +// \vcenter{\hbox{$\frac{a+b}{\dfrac{c}{d}}$}} +// This function by itself doesn't do anything but prevent a soft line break. + +defineFunction({ + type: "hbox", + names: ["\\hbox"], + props: { + numArgs: 1, + argTypes: ["text"], + allowedInText: true, + primitive: true + }, + + handler(_ref, args) { + var { + parser + } = _ref; + return { + type: "hbox", + mode: parser.mode, + body: ordargument(args[0]) + }; + }, + + htmlBuilder(group, options) { + var elements = buildExpression$1(group.body, options, false); + return buildCommon.makeFragment(elements); + }, + + mathmlBuilder(group, options) { + return new mathMLTree.MathNode("mrow", buildExpression(group.body, options)); + } + +}); + +defineFunction({ + type: "html", + names: ["\\htmlClass", "\\htmlId", "\\htmlStyle", "\\htmlData"], + props: { + numArgs: 2, + argTypes: ["raw", "original"], + allowedInText: true + }, + handler: (_ref, args) => { + var { + parser, + funcName, + token + } = _ref; + var value = assertNodeType(args[0], "raw").string; + var body = args[1]; + + if (parser.settings.strict) { + parser.settings.reportNonstrict("htmlExtension", "HTML extension is disabled on strict mode"); + } + + var trustContext; + var attributes = {}; + + switch (funcName) { + case "\\htmlClass": + attributes.class = value; + trustContext = { + command: "\\htmlClass", + class: value + }; + break; + + case "\\htmlId": + attributes.id = value; + trustContext = { + command: "\\htmlId", + id: value + }; + break; + + case "\\htmlStyle": + attributes.style = value; + trustContext = { + command: "\\htmlStyle", + style: value + }; + break; + + case "\\htmlData": + { + var data = value.split(","); + + for (var i = 0; i < data.length; i++) { + var keyVal = data[i].split("="); + + if (keyVal.length !== 2) { + throw new ParseError("Error parsing key-value for \\htmlData"); + } + + attributes["data-" + keyVal[0].trim()] = keyVal[1].trim(); + } + + trustContext = { + command: "\\htmlData", + attributes + }; + break; + } + + default: + throw new Error("Unrecognized html command"); + } + + if (!parser.settings.isTrusted(trustContext)) { + return parser.formatUnsupportedCmd(funcName); + } + + return { + type: "html", + mode: parser.mode, + attributes, + body: ordargument(body) + }; + }, + htmlBuilder: (group, options) => { + var elements = buildExpression$1(group.body, options, false); + var classes = ["enclosing"]; + + if (group.attributes.class) { + classes.push(...group.attributes.class.trim().split(/\s+/)); + } + + var span = buildCommon.makeSpan(classes, elements, options); + + for (var attr in group.attributes) { + if (attr !== "class" && group.attributes.hasOwnProperty(attr)) { + span.setAttribute(attr, group.attributes[attr]); + } + } + + return span; + }, + mathmlBuilder: (group, options) => { + return buildExpressionRow(group.body, options); + } +}); + +defineFunction({ + type: "htmlmathml", + names: ["\\html@mathml"], + props: { + numArgs: 2, + allowedInText: true + }, + handler: (_ref, args) => { + var { + parser + } = _ref; + return { + type: "htmlmathml", + mode: parser.mode, + html: ordargument(args[0]), + mathml: ordargument(args[1]) + }; + }, + htmlBuilder: (group, options) => { + var elements = buildExpression$1(group.html, options, false); + return buildCommon.makeFragment(elements); + }, + mathmlBuilder: (group, options) => { + return buildExpressionRow(group.mathml, options); + } +}); + +var sizeData = function sizeData(str) { + if (/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(str)) { + // str is a number with no unit specified. + // default unit is bp, per graphix package. + return { + number: +str, + unit: "bp" + }; + } else { + var match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(str); + + if (!match) { + throw new ParseError("Invalid size: '" + str + "' in \\includegraphics"); + } + + var data = { + number: +(match[1] + match[2]), + // sign + magnitude, cast to number + unit: match[3] + }; + + if (!validUnit(data)) { + throw new ParseError("Invalid unit: '" + data.unit + "' in \\includegraphics."); + } + + return data; + } +}; + +defineFunction({ + type: "includegraphics", + names: ["\\includegraphics"], + props: { + numArgs: 1, + numOptionalArgs: 1, + argTypes: ["raw", "url"], + allowedInText: false + }, + handler: (_ref, args, optArgs) => { + var { + parser + } = _ref; + var width = { + number: 0, + unit: "em" + }; + var height = { + number: 0.9, + unit: "em" + }; // sorta character sized. + + var totalheight = { + number: 0, + unit: "em" + }; + var alt = ""; + + if (optArgs[0]) { + var attributeStr = assertNodeType(optArgs[0], "raw").string; // Parser.js does not parse key/value pairs. We get a string. + + var attributes = attributeStr.split(","); + + for (var i = 0; i < attributes.length; i++) { + var keyVal = attributes[i].split("="); + + if (keyVal.length === 2) { + var str = keyVal[1].trim(); + + switch (keyVal[0].trim()) { + case "alt": + alt = str; + break; + + case "width": + width = sizeData(str); + break; + + case "height": + height = sizeData(str); + break; + + case "totalheight": + totalheight = sizeData(str); + break; + + default: + throw new ParseError("Invalid key: '" + keyVal[0] + "' in \\includegraphics."); + } + } + } + } + + var src = assertNodeType(args[0], "url").url; + + if (alt === "") { + // No alt given. Use the file name. Strip away the path. + alt = src; + alt = alt.replace(/^.*[\\/]/, ''); + alt = alt.substring(0, alt.lastIndexOf('.')); + } + + if (!parser.settings.isTrusted({ + command: "\\includegraphics", + url: src + })) { + return parser.formatUnsupportedCmd("\\includegraphics"); + } + + return { + type: "includegraphics", + mode: parser.mode, + alt: alt, + width: width, + height: height, + totalheight: totalheight, + src: src + }; + }, + htmlBuilder: (group, options) => { + var height = calculateSize(group.height, options); + var depth = 0; + + if (group.totalheight.number > 0) { + depth = calculateSize(group.totalheight, options) - height; + } + + var width = 0; + + if (group.width.number > 0) { + width = calculateSize(group.width, options); + } + + var style = { + height: makeEm(height + depth) + }; + + if (width > 0) { + style.width = makeEm(width); + } + + if (depth > 0) { + style.verticalAlign = makeEm(-depth); + } + + var node = new Img(group.src, group.alt, style); + node.height = height; + node.depth = depth; + return node; + }, + mathmlBuilder: (group, options) => { + var node = new mathMLTree.MathNode("mglyph", []); + node.setAttribute("alt", group.alt); + var height = calculateSize(group.height, options); + var depth = 0; + + if (group.totalheight.number > 0) { + depth = calculateSize(group.totalheight, options) - height; + node.setAttribute("valign", makeEm(-depth)); + } + + node.setAttribute("height", makeEm(height + depth)); + + if (group.width.number > 0) { + var width = calculateSize(group.width, options); + node.setAttribute("width", makeEm(width)); + } + + node.setAttribute("src", group.src); + return node; + } +}); + +// Horizontal spacing commands + +defineFunction({ + type: "kern", + names: ["\\kern", "\\mkern", "\\hskip", "\\mskip"], + props: { + numArgs: 1, + argTypes: ["size"], + primitive: true, + allowedInText: true + }, + + handler(_ref, args) { + var { + parser, + funcName + } = _ref; + var size = assertNodeType(args[0], "size"); + + if (parser.settings.strict) { + var mathFunction = funcName[1] === 'm'; // \mkern, \mskip + + var muUnit = size.value.unit === 'mu'; + + if (mathFunction) { + if (!muUnit) { + parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " supports only mu units, " + ("not " + size.value.unit + " units")); + } + + if (parser.mode !== "math") { + parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " works only in math mode"); + } + } else { + // !mathFunction + if (muUnit) { + parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " doesn't support mu units"); + } + } + } + + return { + type: "kern", + mode: parser.mode, + dimension: size.value + }; + }, + + htmlBuilder(group, options) { + return buildCommon.makeGlue(group.dimension, options); + }, + + mathmlBuilder(group, options) { + var dimension = calculateSize(group.dimension, options); + return new mathMLTree.SpaceNode(dimension); + } + +}); + +// Horizontal overlap functions +defineFunction({ + type: "lap", + names: ["\\mathllap", "\\mathrlap", "\\mathclap"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: (_ref, args) => { + var { + parser, + funcName + } = _ref; + var body = args[0]; + return { + type: "lap", + mode: parser.mode, + alignment: funcName.slice(5), + body + }; + }, + htmlBuilder: (group, options) => { + // mathllap, mathrlap, mathclap + var inner; + + if (group.alignment === "clap") { + // ref: https://www.math.lsu.edu/~aperlis/publications/mathclap/ + inner = buildCommon.makeSpan([], [buildGroup$1(group.body, options)]); // wrap, since CSS will center a .clap > .inner > span + + inner = buildCommon.makeSpan(["inner"], [inner], options); + } else { + inner = buildCommon.makeSpan(["inner"], [buildGroup$1(group.body, options)]); + } + + var fix = buildCommon.makeSpan(["fix"], []); + var node = buildCommon.makeSpan([group.alignment], [inner, fix], options); // At this point, we have correctly set horizontal alignment of the + // two items involved in the lap. + // Next, use a strut to set the height of the HTML bounding box. + // Otherwise, a tall argument may be misplaced. + // This code resolved issue #1153 + + var strut = buildCommon.makeSpan(["strut"]); + strut.style.height = makeEm(node.height + node.depth); + + if (node.depth) { + strut.style.verticalAlign = makeEm(-node.depth); + } + + node.children.unshift(strut); // Next, prevent vertical misplacement when next to something tall. + // This code resolves issue #1234 + + node = buildCommon.makeSpan(["thinbox"], [node], options); + return buildCommon.makeSpan(["mord", "vbox"], [node], options); + }, + mathmlBuilder: (group, options) => { + // mathllap, mathrlap, mathclap + var node = new mathMLTree.MathNode("mpadded", [buildGroup(group.body, options)]); + + if (group.alignment !== "rlap") { + var offset = group.alignment === "llap" ? "-1" : "-0.5"; + node.setAttribute("lspace", offset + "width"); + } + + node.setAttribute("width", "0px"); + return node; + } +}); + +defineFunction({ + type: "styling", + names: ["\\(", "$"], + props: { + numArgs: 0, + allowedInText: true, + allowedInMath: false + }, + + handler(_ref, args) { + var { + funcName, + parser + } = _ref; + var outerMode = parser.mode; + parser.switchMode("math"); + var close = funcName === "\\(" ? "\\)" : "$"; + var body = parser.parseExpression(false, close); + parser.expect(close); + parser.switchMode(outerMode); + return { + type: "styling", + mode: parser.mode, + style: "text", + body + }; + } + +}); // Check for extra closing math delimiters + +defineFunction({ + type: "text", + // Doesn't matter what this is. + names: ["\\)", "\\]"], + props: { + numArgs: 0, + allowedInText: true, + allowedInMath: false + }, + + handler(context, args) { + throw new ParseError("Mismatched " + context.funcName); + } + +}); + +var chooseMathStyle = (group, options) => { + switch (options.style.size) { + case Style$1.DISPLAY.size: + return group.display; + + case Style$1.TEXT.size: + return group.text; + + case Style$1.SCRIPT.size: + return group.script; + + case Style$1.SCRIPTSCRIPT.size: + return group.scriptscript; + + default: + return group.text; + } +}; + +defineFunction({ + type: "mathchoice", + names: ["\\mathchoice"], + props: { + numArgs: 4, + primitive: true + }, + handler: (_ref, args) => { + var { + parser + } = _ref; + return { + type: "mathchoice", + mode: parser.mode, + display: ordargument(args[0]), + text: ordargument(args[1]), + script: ordargument(args[2]), + scriptscript: ordargument(args[3]) + }; + }, + htmlBuilder: (group, options) => { + var body = chooseMathStyle(group, options); + var elements = buildExpression$1(body, options, false); + return buildCommon.makeFragment(elements); + }, + mathmlBuilder: (group, options) => { + var body = chooseMathStyle(group, options); + return buildExpressionRow(body, options); + } +}); + +var assembleSupSub = (base, supGroup, subGroup, options, style, slant, baseShift) => { + base = buildCommon.makeSpan([], [base]); + var subIsSingleCharacter = subGroup && utils.isCharacterBox(subGroup); + var sub; + var sup; // We manually have to handle the superscripts and subscripts. This, + // aside from the kern calculations, is copied from supsub. + + if (supGroup) { + var elem = buildGroup$1(supGroup, options.havingStyle(style.sup()), options); + sup = { + elem, + kern: Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - elem.depth) + }; + } + + if (subGroup) { + var _elem = buildGroup$1(subGroup, options.havingStyle(style.sub()), options); + + sub = { + elem: _elem, + kern: Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - _elem.height) + }; + } // Build the final group as a vlist of the possible subscript, base, + // and possible superscript. + + + var finalGroup; + + if (sup && sub) { + var bottom = options.fontMetrics().bigOpSpacing5 + sub.elem.height + sub.elem.depth + sub.kern + base.depth + baseShift; + finalGroup = buildCommon.makeVList({ + positionType: "bottom", + positionData: bottom, + children: [{ + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }, { + type: "elem", + elem: sub.elem, + marginLeft: makeEm(-slant) + }, { + type: "kern", + size: sub.kern + }, { + type: "elem", + elem: base + }, { + type: "kern", + size: sup.kern + }, { + type: "elem", + elem: sup.elem, + marginLeft: makeEm(slant) + }, { + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }] + }, options); + } else if (sub) { + var top = base.height - baseShift; // Shift the limits by the slant of the symbol. Note + // that we are supposed to shift the limits by 1/2 of the slant, + // but since we are centering the limits adding a full slant of + // margin will shift by 1/2 that. + + finalGroup = buildCommon.makeVList({ + positionType: "top", + positionData: top, + children: [{ + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }, { + type: "elem", + elem: sub.elem, + marginLeft: makeEm(-slant) + }, { + type: "kern", + size: sub.kern + }, { + type: "elem", + elem: base + }] + }, options); + } else if (sup) { + var _bottom = base.depth + baseShift; + + finalGroup = buildCommon.makeVList({ + positionType: "bottom", + positionData: _bottom, + children: [{ + type: "elem", + elem: base + }, { + type: "kern", + size: sup.kern + }, { + type: "elem", + elem: sup.elem, + marginLeft: makeEm(slant) + }, { + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }] + }, options); + } else { + // This case probably shouldn't occur (this would mean the + // supsub was sending us a group with no superscript or + // subscript) but be safe. + return base; + } + + var parts = [finalGroup]; + + if (sub && slant !== 0 && !subIsSingleCharacter) { + // A negative margin-left was applied to the lower limit. + // Avoid an overlap by placing a spacer on the left on the group. + var spacer = buildCommon.makeSpan(["mspace"], [], options); + spacer.style.marginRight = makeEm(slant); + parts.unshift(spacer); + } + + return buildCommon.makeSpan(["mop", "op-limits"], parts, options); +}; + +// Limits, symbols +// Most operators have a large successor symbol, but these don't. +var noSuccessor = ["\\smallint"]; // NOTE: Unlike most `htmlBuilder`s, this one handles not only "op", but also +// "supsub" since some of them (like \int) can affect super/subscripting. + +var htmlBuilder$2 = (grp, options) => { + // Operators are handled in the TeXbook pg. 443-444, rule 13(a). + var supGroup; + var subGroup; + var hasLimits = false; + var group; + + if (grp.type === "supsub") { + // If we have limits, supsub will pass us its group to handle. Pull + // out the superscript and subscript and set the group to the op in + // its base. + supGroup = grp.sup; + subGroup = grp.sub; + group = assertNodeType(grp.base, "op"); + hasLimits = true; + } else { + group = assertNodeType(grp, "op"); + } + + var style = options.style; + var large = false; + + if (style.size === Style$1.DISPLAY.size && group.symbol && !utils.contains(noSuccessor, group.name)) { + // Most symbol operators get larger in displaystyle (rule 13) + large = true; + } + + var base; + + if (group.symbol) { + // If this is a symbol, create the symbol. + var fontName = large ? "Size2-Regular" : "Size1-Regular"; + var stash = ""; + + if (group.name === "\\oiint" || group.name === "\\oiiint") { + // No font glyphs yet, so use a glyph w/o the oval. + // TODO: When font glyphs are available, delete this code. + stash = group.name.slice(1); + group.name = stash === "oiint" ? "\\iint" : "\\iiint"; + } + + base = buildCommon.makeSymbol(group.name, fontName, "math", options, ["mop", "op-symbol", large ? "large-op" : "small-op"]); + + if (stash.length > 0) { + // We're in \oiint or \oiiint. Overlay the oval. + // TODO: When font glyphs are available, delete this code. + var italic = base.italic; + var oval = buildCommon.staticSvg(stash + "Size" + (large ? "2" : "1"), options); + base = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: base, + shift: 0 + }, { + type: "elem", + elem: oval, + shift: large ? 0.08 : 0 + }] + }, options); + group.name = "\\" + stash; + base.classes.unshift("mop"); // $FlowFixMe + + base.italic = italic; + } + } else if (group.body) { + // If this is a list, compose that list. + var inner = buildExpression$1(group.body, options, true); + + if (inner.length === 1 && inner[0] instanceof SymbolNode) { + base = inner[0]; + base.classes[0] = "mop"; // replace old mclass + } else { + base = buildCommon.makeSpan(["mop"], inner, options); + } + } else { + // Otherwise, this is a text operator. Build the text from the + // operator's name. + var output = []; + + for (var i = 1; i < group.name.length; i++) { + output.push(buildCommon.mathsym(group.name[i], group.mode, options)); + } + + base = buildCommon.makeSpan(["mop"], output, options); + } // If content of op is a single symbol, shift it vertically. + + + var baseShift = 0; + var slant = 0; + + if ((base instanceof SymbolNode || group.name === "\\oiint" || group.name === "\\oiiint") && !group.suppressBaseShift) { + // We suppress the shift of the base of \overset and \underset. Otherwise, + // shift the symbol so its center lies on the axis (rule 13). It + // appears that our fonts have the centers of the symbols already + // almost on the axis, so these numbers are very small. Note we + // don't actually apply this here, but instead it is used either in + // the vlist creation or separately when there are no limits. + baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight; // The slant of the symbol is just its italic correction. + // $FlowFixMe + + slant = base.italic; + } + + if (hasLimits) { + return assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift); + } else { + if (baseShift) { + base.style.position = "relative"; + base.style.top = makeEm(baseShift); + } + + return base; + } +}; + +var mathmlBuilder$1 = (group, options) => { + var node; + + if (group.symbol) { + // This is a symbol. Just add the symbol. + node = new MathNode("mo", [makeText(group.name, group.mode)]); + + if (utils.contains(noSuccessor, group.name)) { + node.setAttribute("largeop", "false"); + } + } else if (group.body) { + // This is an operator with children. Add them. + node = new MathNode("mo", buildExpression(group.body, options)); + } else { + // This is a text operator. Add all of the characters from the + // operator's name. + node = new MathNode("mi", [new TextNode(group.name.slice(1))]); // Append an . + // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4 + + var operator = new MathNode("mo", [makeText("\u2061", "text")]); + + if (group.parentIsSupSub) { + node = new MathNode("mrow", [node, operator]); + } else { + node = newDocumentFragment([node, operator]); + } + } + + return node; +}; + +var singleCharBigOps = { + "\u220F": "\\prod", + "\u2210": "\\coprod", + "\u2211": "\\sum", + "\u22c0": "\\bigwedge", + "\u22c1": "\\bigvee", + "\u22c2": "\\bigcap", + "\u22c3": "\\bigcup", + "\u2a00": "\\bigodot", + "\u2a01": "\\bigoplus", + "\u2a02": "\\bigotimes", + "\u2a04": "\\biguplus", + "\u2a06": "\\bigsqcup" +}; +defineFunction({ + type: "op", + names: ["\\coprod", "\\bigvee", "\\bigwedge", "\\biguplus", "\\bigcap", "\\bigcup", "\\intop", "\\prod", "\\sum", "\\bigotimes", "\\bigoplus", "\\bigodot", "\\bigsqcup", "\\smallint", "\u220F", "\u2210", "\u2211", "\u22c0", "\u22c1", "\u22c2", "\u22c3", "\u2a00", "\u2a01", "\u2a02", "\u2a04", "\u2a06"], + props: { + numArgs: 0 + }, + handler: (_ref, args) => { + var { + parser, + funcName + } = _ref; + var fName = funcName; + + if (fName.length === 1) { + fName = singleCharBigOps[fName]; + } + + return { + type: "op", + mode: parser.mode, + limits: true, + parentIsSupSub: false, + symbol: true, + name: fName + }; + }, + htmlBuilder: htmlBuilder$2, + mathmlBuilder: mathmlBuilder$1 +}); // Note: calling defineFunction with a type that's already been defined only +// works because the same htmlBuilder and mathmlBuilder are being used. + +defineFunction({ + type: "op", + names: ["\\mathop"], + props: { + numArgs: 1, + primitive: true + }, + handler: (_ref2, args) => { + var { + parser + } = _ref2; + var body = args[0]; + return { + type: "op", + mode: parser.mode, + limits: false, + parentIsSupSub: false, + symbol: false, + body: ordargument(body) + }; + }, + htmlBuilder: htmlBuilder$2, + mathmlBuilder: mathmlBuilder$1 +}); // There are 2 flags for operators; whether they produce limits in +// displaystyle, and whether they are symbols and should grow in +// displaystyle. These four groups cover the four possible choices. + +var singleCharIntegrals = { + "\u222b": "\\int", + "\u222c": "\\iint", + "\u222d": "\\iiint", + "\u222e": "\\oint", + "\u222f": "\\oiint", + "\u2230": "\\oiiint" +}; // No limits, not symbols + +defineFunction({ + type: "op", + names: ["\\arcsin", "\\arccos", "\\arctan", "\\arctg", "\\arcctg", "\\arg", "\\ch", "\\cos", "\\cosec", "\\cosh", "\\cot", "\\cotg", "\\coth", "\\csc", "\\ctg", "\\cth", "\\deg", "\\dim", "\\exp", "\\hom", "\\ker", "\\lg", "\\ln", "\\log", "\\sec", "\\sin", "\\sinh", "\\sh", "\\tan", "\\tanh", "\\tg", "\\th"], + props: { + numArgs: 0 + }, + + handler(_ref3) { + var { + parser, + funcName + } = _ref3; + return { + type: "op", + mode: parser.mode, + limits: false, + parentIsSupSub: false, + symbol: false, + name: funcName + }; + }, + + htmlBuilder: htmlBuilder$2, + mathmlBuilder: mathmlBuilder$1 +}); // Limits, not symbols + +defineFunction({ + type: "op", + names: ["\\det", "\\gcd", "\\inf", "\\lim", "\\max", "\\min", "\\Pr", "\\sup"], + props: { + numArgs: 0 + }, + + handler(_ref4) { + var { + parser, + funcName + } = _ref4; + return { + type: "op", + mode: parser.mode, + limits: true, + parentIsSupSub: false, + symbol: false, + name: funcName + }; + }, + + htmlBuilder: htmlBuilder$2, + mathmlBuilder: mathmlBuilder$1 +}); // No limits, symbols + +defineFunction({ + type: "op", + names: ["\\int", "\\iint", "\\iiint", "\\oint", "\\oiint", "\\oiiint", "\u222b", "\u222c", "\u222d", "\u222e", "\u222f", "\u2230"], + props: { + numArgs: 0 + }, + + handler(_ref5) { + var { + parser, + funcName + } = _ref5; + var fName = funcName; + + if (fName.length === 1) { + fName = singleCharIntegrals[fName]; + } + + return { + type: "op", + mode: parser.mode, + limits: false, + parentIsSupSub: false, + symbol: true, + name: fName + }; + }, + + htmlBuilder: htmlBuilder$2, + mathmlBuilder: mathmlBuilder$1 +}); + +// NOTE: Unlike most `htmlBuilder`s, this one handles not only +// "operatorname", but also "supsub" since \operatorname* can +// affect super/subscripting. +var htmlBuilder$1 = (grp, options) => { + // Operators are handled in the TeXbook pg. 443-444, rule 13(a). + var supGroup; + var subGroup; + var hasLimits = false; + var group; + + if (grp.type === "supsub") { + // If we have limits, supsub will pass us its group to handle. Pull + // out the superscript and subscript and set the group to the op in + // its base. + supGroup = grp.sup; + subGroup = grp.sub; + group = assertNodeType(grp.base, "operatorname"); + hasLimits = true; + } else { + group = assertNodeType(grp, "operatorname"); + } + + var base; + + if (group.body.length > 0) { + var body = group.body.map(child => { + // $FlowFixMe: Check if the node has a string `text` property. + var childText = child.text; + + if (typeof childText === "string") { + return { + type: "textord", + mode: child.mode, + text: childText + }; + } else { + return child; + } + }); // Consolidate function names into symbol characters. + + var expression = buildExpression$1(body, options.withFont("mathrm"), true); + + for (var i = 0; i < expression.length; i++) { + var child = expression[i]; + + if (child instanceof SymbolNode) { + // Per amsopn package, + // change minus to hyphen and \ast to asterisk + child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*"); + } + } + + base = buildCommon.makeSpan(["mop"], expression, options); + } else { + base = buildCommon.makeSpan(["mop"], [], options); + } + + if (hasLimits) { + return assembleSupSub(base, supGroup, subGroup, options, options.style, 0, 0); + } else { + return base; + } +}; + +var mathmlBuilder = (group, options) => { + // The steps taken here are similar to the html version. + var expression = buildExpression(group.body, options.withFont("mathrm")); // Is expression a string or has it something like a fraction? + + var isAllString = true; // default + + for (var i = 0; i < expression.length; i++) { + var node = expression[i]; + + if (node instanceof mathMLTree.SpaceNode) ; else if (node instanceof mathMLTree.MathNode) { + switch (node.type) { + case "mi": + case "mn": + case "ms": + case "mspace": + case "mtext": + break; + // Do nothing yet. + + case "mo": + { + var child = node.children[0]; + + if (node.children.length === 1 && child instanceof mathMLTree.TextNode) { + child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*"); + } else { + isAllString = false; + } + + break; + } + + default: + isAllString = false; + } + } else { + isAllString = false; + } + } + + if (isAllString) { + // Write a single TextNode instead of multiple nested tags. + var word = expression.map(node => node.toText()).join(""); + expression = [new mathMLTree.TextNode(word)]; + } + + var identifier = new mathMLTree.MathNode("mi", expression); + identifier.setAttribute("mathvariant", "normal"); // \u2061 is the same as ⁡ + // ref: https://www.w3schools.com/charsets/ref_html_entities_a.asp + + var operator = new mathMLTree.MathNode("mo", [makeText("\u2061", "text")]); + + if (group.parentIsSupSub) { + return new mathMLTree.MathNode("mrow", [identifier, operator]); + } else { + return mathMLTree.newDocumentFragment([identifier, operator]); + } +}; // \operatorname +// amsopn.dtx: \mathop{#1\kern\z@\operator@font#3}\newmcodes@ + + +defineFunction({ + type: "operatorname", + names: ["\\operatorname@", "\\operatornamewithlimits"], + props: { + numArgs: 1 + }, + handler: (_ref, args) => { + var { + parser, + funcName + } = _ref; + var body = args[0]; + return { + type: "operatorname", + mode: parser.mode, + body: ordargument(body), + alwaysHandleSupSub: funcName === "\\operatornamewithlimits", + limits: false, + parentIsSupSub: false + }; + }, + htmlBuilder: htmlBuilder$1, + mathmlBuilder +}); +defineMacro("\\operatorname", "\\@ifstar\\operatornamewithlimits\\operatorname@"); + +defineFunctionBuilders({ + type: "ordgroup", + + htmlBuilder(group, options) { + if (group.semisimple) { + return buildCommon.makeFragment(buildExpression$1(group.body, options, false)); + } + + return buildCommon.makeSpan(["mord"], buildExpression$1(group.body, options, true), options); + }, + + mathmlBuilder(group, options) { + return buildExpressionRow(group.body, options, true); + } + +}); + +defineFunction({ + type: "overline", + names: ["\\overline"], + props: { + numArgs: 1 + }, + + handler(_ref, args) { + var { + parser + } = _ref; + var body = args[0]; + return { + type: "overline", + mode: parser.mode, + body + }; + }, + + htmlBuilder(group, options) { + // Overlines are handled in the TeXbook pg 443, Rule 9. + // Build the inner group in the cramped style. + var innerGroup = buildGroup$1(group.body, options.havingCrampedStyle()); // Create the line above the body + + var line = buildCommon.makeLineSpan("overline-line", options); // Generate the vlist, with the appropriate kerns + + var defaultRuleThickness = options.fontMetrics().defaultRuleThickness; + var vlist = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: innerGroup + }, { + type: "kern", + size: 3 * defaultRuleThickness + }, { + type: "elem", + elem: line + }, { + type: "kern", + size: defaultRuleThickness + }] + }, options); + return buildCommon.makeSpan(["mord", "overline"], [vlist], options); + }, + + mathmlBuilder(group, options) { + var operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\u203e")]); + operator.setAttribute("stretchy", "true"); + var node = new mathMLTree.MathNode("mover", [buildGroup(group.body, options), operator]); + node.setAttribute("accent", "true"); + return node; + } + +}); + +defineFunction({ + type: "phantom", + names: ["\\phantom"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: (_ref, args) => { + var { + parser + } = _ref; + var body = args[0]; + return { + type: "phantom", + mode: parser.mode, + body: ordargument(body) + }; + }, + htmlBuilder: (group, options) => { + var elements = buildExpression$1(group.body, options.withPhantom(), false); // \phantom isn't supposed to affect the elements it contains. + // See "color" for more details. + + return buildCommon.makeFragment(elements); + }, + mathmlBuilder: (group, options) => { + var inner = buildExpression(group.body, options); + return new mathMLTree.MathNode("mphantom", inner); + } +}); +defineFunction({ + type: "hphantom", + names: ["\\hphantom"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: (_ref2, args) => { + var { + parser + } = _ref2; + var body = args[0]; + return { + type: "hphantom", + mode: parser.mode, + body + }; + }, + htmlBuilder: (group, options) => { + var node = buildCommon.makeSpan([], [buildGroup$1(group.body, options.withPhantom())]); + node.height = 0; + node.depth = 0; + + if (node.children) { + for (var i = 0; i < node.children.length; i++) { + node.children[i].height = 0; + node.children[i].depth = 0; + } + } // See smash for comment re: use of makeVList + + + node = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: node + }] + }, options); // For spacing, TeX treats \smash as a math group (same spacing as ord). + + return buildCommon.makeSpan(["mord"], [node], options); + }, + mathmlBuilder: (group, options) => { + var inner = buildExpression(ordargument(group.body), options); + var phantom = new mathMLTree.MathNode("mphantom", inner); + var node = new mathMLTree.MathNode("mpadded", [phantom]); + node.setAttribute("height", "0px"); + node.setAttribute("depth", "0px"); + return node; + } +}); +defineFunction({ + type: "vphantom", + names: ["\\vphantom"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: (_ref3, args) => { + var { + parser + } = _ref3; + var body = args[0]; + return { + type: "vphantom", + mode: parser.mode, + body + }; + }, + htmlBuilder: (group, options) => { + var inner = buildCommon.makeSpan(["inner"], [buildGroup$1(group.body, options.withPhantom())]); + var fix = buildCommon.makeSpan(["fix"], []); + return buildCommon.makeSpan(["mord", "rlap"], [inner, fix], options); + }, + mathmlBuilder: (group, options) => { + var inner = buildExpression(ordargument(group.body), options); + var phantom = new mathMLTree.MathNode("mphantom", inner); + var node = new mathMLTree.MathNode("mpadded", [phantom]); + node.setAttribute("width", "0px"); + return node; + } +}); + +defineFunction({ + type: "raisebox", + names: ["\\raisebox"], + props: { + numArgs: 2, + argTypes: ["size", "hbox"], + allowedInText: true + }, + + handler(_ref, args) { + var { + parser + } = _ref; + var amount = assertNodeType(args[0], "size").value; + var body = args[1]; + return { + type: "raisebox", + mode: parser.mode, + dy: amount, + body + }; + }, + + htmlBuilder(group, options) { + var body = buildGroup$1(group.body, options); + var dy = calculateSize(group.dy, options); + return buildCommon.makeVList({ + positionType: "shift", + positionData: -dy, + children: [{ + type: "elem", + elem: body + }] + }, options); + }, + + mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mpadded", [buildGroup(group.body, options)]); + var dy = group.dy.number + group.dy.unit; + node.setAttribute("voffset", dy); + return node; + } + +}); + +defineFunction({ + type: "internal", + names: ["\\relax"], + props: { + numArgs: 0, + allowedInText: true + }, + + handler(_ref) { + var { + parser + } = _ref; + return { + type: "internal", + mode: parser.mode + }; + } + +}); + +defineFunction({ + type: "rule", + names: ["\\rule"], + props: { + numArgs: 2, + numOptionalArgs: 1, + argTypes: ["size", "size", "size"] + }, + + handler(_ref, args, optArgs) { + var { + parser + } = _ref; + var shift = optArgs[0]; + var width = assertNodeType(args[0], "size"); + var height = assertNodeType(args[1], "size"); + return { + type: "rule", + mode: parser.mode, + shift: shift && assertNodeType(shift, "size").value, + width: width.value, + height: height.value + }; + }, + + htmlBuilder(group, options) { + // Make an empty span for the rule + var rule = buildCommon.makeSpan(["mord", "rule"], [], options); // Calculate the shift, width, and height of the rule, and account for units + + var width = calculateSize(group.width, options); + var height = calculateSize(group.height, options); + var shift = group.shift ? calculateSize(group.shift, options) : 0; // Style the rule to the right size + + rule.style.borderRightWidth = makeEm(width); + rule.style.borderTopWidth = makeEm(height); + rule.style.bottom = makeEm(shift); // Record the height and width + + rule.width = width; + rule.height = height + shift; + rule.depth = -shift; // Font size is the number large enough that the browser will + // reserve at least `absHeight` space above the baseline. + // The 1.125 factor was empirically determined + + rule.maxFontSize = height * 1.125 * options.sizeMultiplier; + return rule; + }, + + mathmlBuilder(group, options) { + var width = calculateSize(group.width, options); + var height = calculateSize(group.height, options); + var shift = group.shift ? calculateSize(group.shift, options) : 0; + var color = options.color && options.getColor() || "black"; + var rule = new mathMLTree.MathNode("mspace"); + rule.setAttribute("mathbackground", color); + rule.setAttribute("width", makeEm(width)); + rule.setAttribute("height", makeEm(height)); + var wrapper = new mathMLTree.MathNode("mpadded", [rule]); + + if (shift >= 0) { + wrapper.setAttribute("height", makeEm(shift)); + } else { + wrapper.setAttribute("height", makeEm(shift)); + wrapper.setAttribute("depth", makeEm(-shift)); + } + + wrapper.setAttribute("voffset", makeEm(shift)); + return wrapper; + } + +}); + +function sizingGroup(value, options, baseOptions) { + var inner = buildExpression$1(value, options, false); + var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; // Add size-resetting classes to the inner list and set maxFontSize + // manually. Handle nested size changes. + + for (var i = 0; i < inner.length; i++) { + var pos = inner[i].classes.indexOf("sizing"); + + if (pos < 0) { + Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions)); + } else if (inner[i].classes[pos + 1] === "reset-size" + options.size) { + // This is a nested size change: e.g., inner[i] is the "b" in + // `\Huge a \small b`. Override the old size (the `reset-` class) + // but not the new size. + inner[i].classes[pos + 1] = "reset-size" + baseOptions.size; + } + + inner[i].height *= multiplier; + inner[i].depth *= multiplier; + } + + return buildCommon.makeFragment(inner); +} +var sizeFuncs = ["\\tiny", "\\sixptsize", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"]; +var htmlBuilder = (group, options) => { + // Handle sizing operators like \Huge. Real TeX doesn't actually allow + // these functions inside of math expressions, so we do some special + // handling. + var newOptions = options.havingSize(group.size); + return sizingGroup(group.body, newOptions, options); +}; +defineFunction({ + type: "sizing", + names: sizeFuncs, + props: { + numArgs: 0, + allowedInText: true + }, + handler: (_ref, args) => { + var { + breakOnTokenText, + funcName, + parser + } = _ref; + var body = parser.parseExpression(false, breakOnTokenText); + return { + type: "sizing", + mode: parser.mode, + // Figure out what size to use based on the list of functions above + size: sizeFuncs.indexOf(funcName) + 1, + body + }; + }, + htmlBuilder, + mathmlBuilder: (group, options) => { + var newOptions = options.havingSize(group.size); + var inner = buildExpression(group.body, newOptions); + var node = new mathMLTree.MathNode("mstyle", inner); // TODO(emily): This doesn't produce the correct size for nested size + // changes, because we don't keep state of what style we're currently + // in, so we can't reset the size to normal before changing it. Now + // that we're passing an options parameter we should be able to fix + // this. + + node.setAttribute("mathsize", makeEm(newOptions.sizeMultiplier)); + return node; + } +}); + +// smash, with optional [tb], as in AMS +defineFunction({ + type: "smash", + names: ["\\smash"], + props: { + numArgs: 1, + numOptionalArgs: 1, + allowedInText: true + }, + handler: (_ref, args, optArgs) => { + var { + parser + } = _ref; + var smashHeight = false; + var smashDepth = false; + var tbArg = optArgs[0] && assertNodeType(optArgs[0], "ordgroup"); + + if (tbArg) { + // Optional [tb] argument is engaged. + // ref: amsmath: \renewcommand{\smash}[1][tb]{% + // def\mb@t{\ht}\def\mb@b{\dp}\def\mb@tb{\ht\z@\z@\dp}% + var letter = ""; + + for (var i = 0; i < tbArg.body.length; ++i) { + var node = tbArg.body[i]; // $FlowFixMe: Not every node type has a `text` property. + + letter = node.text; + + if (letter === "t") { + smashHeight = true; + } else if (letter === "b") { + smashDepth = true; + } else { + smashHeight = false; + smashDepth = false; + break; + } + } + } else { + smashHeight = true; + smashDepth = true; + } + + var body = args[0]; + return { + type: "smash", + mode: parser.mode, + body, + smashHeight, + smashDepth + }; + }, + htmlBuilder: (group, options) => { + var node = buildCommon.makeSpan([], [buildGroup$1(group.body, options)]); + + if (!group.smashHeight && !group.smashDepth) { + return node; + } + + if (group.smashHeight) { + node.height = 0; // In order to influence makeVList, we have to reset the children. + + if (node.children) { + for (var i = 0; i < node.children.length; i++) { + node.children[i].height = 0; + } + } + } + + if (group.smashDepth) { + node.depth = 0; + + if (node.children) { + for (var _i = 0; _i < node.children.length; _i++) { + node.children[_i].depth = 0; + } + } + } // At this point, we've reset the TeX-like height and depth values. + // But the span still has an HTML line height. + // makeVList applies "display: table-cell", which prevents the browser + // from acting on that line height. So we'll call makeVList now. + + + var smashedNode = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: node + }] + }, options); // For spacing, TeX treats \hphantom as a math group (same spacing as ord). + + return buildCommon.makeSpan(["mord"], [smashedNode], options); + }, + mathmlBuilder: (group, options) => { + var node = new mathMLTree.MathNode("mpadded", [buildGroup(group.body, options)]); + + if (group.smashHeight) { + node.setAttribute("height", "0px"); + } + + if (group.smashDepth) { + node.setAttribute("depth", "0px"); + } + + return node; + } +}); + +defineFunction({ + type: "sqrt", + names: ["\\sqrt"], + props: { + numArgs: 1, + numOptionalArgs: 1 + }, + + handler(_ref, args, optArgs) { + var { + parser + } = _ref; + var index = optArgs[0]; + var body = args[0]; + return { + type: "sqrt", + mode: parser.mode, + body, + index + }; + }, + + htmlBuilder(group, options) { + // Square roots are handled in the TeXbook pg. 443, Rule 11. + // First, we do the same steps as in overline to build the inner group + // and line + var inner = buildGroup$1(group.body, options.havingCrampedStyle()); + + if (inner.height === 0) { + // Render a small surd. + inner.height = options.fontMetrics().xHeight; + } // Some groups can return document fragments. Handle those by wrapping + // them in a span. + + + inner = buildCommon.wrapFragment(inner, options); // Calculate the minimum size for the \surd delimiter + + var metrics = options.fontMetrics(); + var theta = metrics.defaultRuleThickness; + var phi = theta; + + if (options.style.id < Style$1.TEXT.id) { + phi = options.fontMetrics().xHeight; + } // Calculate the clearance between the body and line + + + var lineClearance = theta + phi / 4; + var minDelimiterHeight = inner.height + inner.depth + lineClearance + theta; // Create a sqrt SVG of the required minimum size + + var { + span: img, + ruleWidth, + advanceWidth + } = delimiter.sqrtImage(minDelimiterHeight, options); + var delimDepth = img.height - ruleWidth; // Adjust the clearance based on the delimiter size + + if (delimDepth > inner.height + inner.depth + lineClearance) { + lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2; + } // Shift the sqrt image + + + var imgShift = img.height - inner.height - lineClearance - ruleWidth; + inner.style.paddingLeft = makeEm(advanceWidth); // Overlay the image and the argument. + + var body = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: inner, + wrapperClasses: ["svg-align"] + }, { + type: "kern", + size: -(inner.height + imgShift) + }, { + type: "elem", + elem: img + }, { + type: "kern", + size: ruleWidth + }] + }, options); + + if (!group.index) { + return buildCommon.makeSpan(["mord", "sqrt"], [body], options); + } else { + // Handle the optional root index + // The index is always in scriptscript style + var newOptions = options.havingStyle(Style$1.SCRIPTSCRIPT); + var rootm = buildGroup$1(group.index, newOptions, options); // The amount the index is shifted by. This is taken from the TeX + // source, in the definition of `\r@@t`. + + var toShift = 0.6 * (body.height - body.depth); // Build a VList with the superscript shifted up correctly + + var rootVList = buildCommon.makeVList({ + positionType: "shift", + positionData: -toShift, + children: [{ + type: "elem", + elem: rootm + }] + }, options); // Add a class surrounding it so we can add on the appropriate + // kerning + + var rootVListWrap = buildCommon.makeSpan(["root"], [rootVList]); + return buildCommon.makeSpan(["mord", "sqrt"], [rootVListWrap, body], options); + } + }, + + mathmlBuilder(group, options) { + var { + body, + index + } = group; + return index ? new mathMLTree.MathNode("mroot", [buildGroup(body, options), buildGroup(index, options)]) : new mathMLTree.MathNode("msqrt", [buildGroup(body, options)]); + } + +}); + +var styleMap = { + "display": Style$1.DISPLAY, + "text": Style$1.TEXT, + "script": Style$1.SCRIPT, + "scriptscript": Style$1.SCRIPTSCRIPT +}; +defineFunction({ + type: "styling", + names: ["\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"], + props: { + numArgs: 0, + allowedInText: true, + primitive: true + }, + + handler(_ref, args) { + var { + breakOnTokenText, + funcName, + parser + } = _ref; + // parse out the implicit body + var body = parser.parseExpression(true, breakOnTokenText); // TODO: Refactor to avoid duplicating styleMap in multiple places (e.g. + // here and in buildHTML and de-dupe the enumeration of all the styles). + // $FlowFixMe: The names above exactly match the styles. + + var style = funcName.slice(1, funcName.length - 5); + return { + type: "styling", + mode: parser.mode, + // Figure out what style to use by pulling out the style from + // the function name + style, + body + }; + }, + + htmlBuilder(group, options) { + // Style changes are handled in the TeXbook on pg. 442, Rule 3. + var newStyle = styleMap[group.style]; + var newOptions = options.havingStyle(newStyle).withFont(''); + return sizingGroup(group.body, newOptions, options); + }, + + mathmlBuilder(group, options) { + // Figure out what style we're changing to. + var newStyle = styleMap[group.style]; + var newOptions = options.havingStyle(newStyle); + var inner = buildExpression(group.body, newOptions); + var node = new mathMLTree.MathNode("mstyle", inner); + var styleAttributes = { + "display": ["0", "true"], + "text": ["0", "false"], + "script": ["1", "false"], + "scriptscript": ["2", "false"] + }; + var attr = styleAttributes[group.style]; + node.setAttribute("scriptlevel", attr[0]); + node.setAttribute("displaystyle", attr[1]); + return node; + } + +}); + +/** + * Sometimes, groups perform special rules when they have superscripts or + * subscripts attached to them. This function lets the `supsub` group know that + * Sometimes, groups perform special rules when they have superscripts or + * its inner element should handle the superscripts and subscripts instead of + * handling them itself. + */ +var htmlBuilderDelegate = function htmlBuilderDelegate(group, options) { + var base = group.base; + + if (!base) { + return null; + } else if (base.type === "op") { + // Operators handle supsubs differently when they have limits + // (e.g. `\displaystyle\sum_2^3`) + var delegate = base.limits && (options.style.size === Style$1.DISPLAY.size || base.alwaysHandleSupSub); + return delegate ? htmlBuilder$2 : null; + } else if (base.type === "operatorname") { + var _delegate = base.alwaysHandleSupSub && (options.style.size === Style$1.DISPLAY.size || base.limits); + + return _delegate ? htmlBuilder$1 : null; + } else if (base.type === "accent") { + return utils.isCharacterBox(base.base) ? htmlBuilder$a : null; + } else if (base.type === "horizBrace") { + var isSup = !group.sub; + return isSup === base.isOver ? htmlBuilder$3 : null; + } else { + return null; + } +}; // Super scripts and subscripts, whose precise placement can depend on other +// functions that precede them. + + +defineFunctionBuilders({ + type: "supsub", + + htmlBuilder(group, options) { + // Superscript and subscripts are handled in the TeXbook on page + // 445-446, rules 18(a-f). + // Here is where we defer to the inner group if it should handle + // superscripts and subscripts itself. + var builderDelegate = htmlBuilderDelegate(group, options); + + if (builderDelegate) { + return builderDelegate(group, options); + } + + var { + base: valueBase, + sup: valueSup, + sub: valueSub + } = group; + var base = buildGroup$1(valueBase, options); + var supm; + var subm; + var metrics = options.fontMetrics(); // Rule 18a + + var supShift = 0; + var subShift = 0; + var isCharacterBox = valueBase && utils.isCharacterBox(valueBase); + + if (valueSup) { + var newOptions = options.havingStyle(options.style.sup()); + supm = buildGroup$1(valueSup, newOptions, options); + + if (!isCharacterBox) { + supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options.sizeMultiplier; + } + } + + if (valueSub) { + var _newOptions = options.havingStyle(options.style.sub()); + + subm = buildGroup$1(valueSub, _newOptions, options); + + if (!isCharacterBox) { + subShift = base.depth + _newOptions.fontMetrics().subDrop * _newOptions.sizeMultiplier / options.sizeMultiplier; + } + } // Rule 18c + + + var minSupShift; + + if (options.style === Style$1.DISPLAY) { + minSupShift = metrics.sup1; + } else if (options.style.cramped) { + minSupShift = metrics.sup3; + } else { + minSupShift = metrics.sup2; + } // scriptspace is a font-size-independent size, so scale it + // appropriately for use as the marginRight. + + + var multiplier = options.sizeMultiplier; + var marginRight = makeEm(0.5 / metrics.ptPerEm / multiplier); + var marginLeft = null; + + if (subm) { + // Subscripts shouldn't be shifted by the base's italic correction. + // Account for that by shifting the subscript back the appropriate + // amount. Note we only do this when the base is a single symbol. + var isOiint = group.base && group.base.type === "op" && group.base.name && (group.base.name === "\\oiint" || group.base.name === "\\oiiint"); + + if (base instanceof SymbolNode || isOiint) { + // $FlowFixMe + marginLeft = makeEm(-base.italic); + } + } + + var supsub; + + if (supm && subm) { + supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight); + subShift = Math.max(subShift, metrics.sub2); + var ruleWidth = metrics.defaultRuleThickness; // Rule 18e + + var maxWidth = 4 * ruleWidth; + + if (supShift - supm.depth - (subm.height - subShift) < maxWidth) { + subShift = maxWidth - (supShift - supm.depth) + subm.height; + var psi = 0.8 * metrics.xHeight - (supShift - supm.depth); + + if (psi > 0) { + supShift += psi; + subShift -= psi; + } + } + + var vlistElem = [{ + type: "elem", + elem: subm, + shift: subShift, + marginRight, + marginLeft + }, { + type: "elem", + elem: supm, + shift: -supShift, + marginRight + }]; + supsub = buildCommon.makeVList({ + positionType: "individualShift", + children: vlistElem + }, options); + } else if (subm) { + // Rule 18b + subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight); + var _vlistElem = [{ + type: "elem", + elem: subm, + marginLeft, + marginRight + }]; + supsub = buildCommon.makeVList({ + positionType: "shift", + positionData: subShift, + children: _vlistElem + }, options); + } else if (supm) { + // Rule 18c, d + supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight); + supsub = buildCommon.makeVList({ + positionType: "shift", + positionData: -supShift, + children: [{ + type: "elem", + elem: supm, + marginRight + }] + }, options); + } else { + throw new Error("supsub must have either sup or sub."); + } // Wrap the supsub vlist in a span.msupsub to reset text-align. + + + var mclass = getTypeOfDomTree(base, "right") || "mord"; + return buildCommon.makeSpan([mclass], [base, buildCommon.makeSpan(["msupsub"], [supsub])], options); + }, + + mathmlBuilder(group, options) { + // Is the inner group a relevant horizonal brace? + var isBrace = false; + var isOver; + var isSup; + + if (group.base && group.base.type === "horizBrace") { + isSup = !!group.sup; + + if (isSup === group.base.isOver) { + isBrace = true; + isOver = group.base.isOver; + } + } + + if (group.base && (group.base.type === "op" || group.base.type === "operatorname")) { + group.base.parentIsSupSub = true; + } + + var children = [buildGroup(group.base, options)]; + + if (group.sub) { + children.push(buildGroup(group.sub, options)); + } + + if (group.sup) { + children.push(buildGroup(group.sup, options)); + } + + var nodeType; + + if (isBrace) { + nodeType = isOver ? "mover" : "munder"; + } else if (!group.sub) { + var base = group.base; + + if (base && base.type === "op" && base.limits && (options.style === Style$1.DISPLAY || base.alwaysHandleSupSub)) { + nodeType = "mover"; + } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (base.limits || options.style === Style$1.DISPLAY)) { + nodeType = "mover"; + } else { + nodeType = "msup"; + } + } else if (!group.sup) { + var _base = group.base; + + if (_base && _base.type === "op" && _base.limits && (options.style === Style$1.DISPLAY || _base.alwaysHandleSupSub)) { + nodeType = "munder"; + } else if (_base && _base.type === "operatorname" && _base.alwaysHandleSupSub && (_base.limits || options.style === Style$1.DISPLAY)) { + nodeType = "munder"; + } else { + nodeType = "msub"; + } + } else { + var _base2 = group.base; + + if (_base2 && _base2.type === "op" && _base2.limits && options.style === Style$1.DISPLAY) { + nodeType = "munderover"; + } else if (_base2 && _base2.type === "operatorname" && _base2.alwaysHandleSupSub && (options.style === Style$1.DISPLAY || _base2.limits)) { + nodeType = "munderover"; + } else { + nodeType = "msubsup"; + } + } + + return new mathMLTree.MathNode(nodeType, children); + } + +}); + +defineFunctionBuilders({ + type: "atom", + + htmlBuilder(group, options) { + return buildCommon.mathsym(group.text, group.mode, options, ["m" + group.family]); + }, + + mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mo", [makeText(group.text, group.mode)]); + + if (group.family === "bin") { + var variant = getVariant(group, options); + + if (variant === "bold-italic") { + node.setAttribute("mathvariant", variant); + } + } else if (group.family === "punct") { + node.setAttribute("separator", "true"); + } else if (group.family === "open" || group.family === "close") { + // Delims built here should not stretch vertically. + // See delimsizing.js for stretchy delims. + node.setAttribute("stretchy", "false"); + } + + return node; + } + +}); + +// "mathord" and "textord" ParseNodes created in Parser.js from symbol Groups in +// src/symbols.js. +var defaultVariant = { + "mi": "italic", + "mn": "normal", + "mtext": "normal" +}; +defineFunctionBuilders({ + type: "mathord", + + htmlBuilder(group, options) { + return buildCommon.makeOrd(group, options, "mathord"); + }, + + mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mi", [makeText(group.text, group.mode, options)]); + var variant = getVariant(group, options) || "italic"; + + if (variant !== defaultVariant[node.type]) { + node.setAttribute("mathvariant", variant); + } + + return node; + } + +}); +defineFunctionBuilders({ + type: "textord", + + htmlBuilder(group, options) { + return buildCommon.makeOrd(group, options, "textord"); + }, + + mathmlBuilder(group, options) { + var text = makeText(group.text, group.mode, options); + var variant = getVariant(group, options) || "normal"; + var node; + + if (group.mode === 'text') { + node = new mathMLTree.MathNode("mtext", [text]); + } else if (/[0-9]/.test(group.text)) { + node = new mathMLTree.MathNode("mn", [text]); + } else if (group.text === "\\prime") { + node = new mathMLTree.MathNode("mo", [text]); + } else { + node = new mathMLTree.MathNode("mi", [text]); + } + + if (variant !== defaultVariant[node.type]) { + node.setAttribute("mathvariant", variant); + } + + return node; + } + +}); + +var cssSpace = { + "\\nobreak": "nobreak", + "\\allowbreak": "allowbreak" +}; // A lookup table to determine whether a spacing function/symbol should be +// treated like a regular space character. If a symbol or command is a key +// in this table, then it should be a regular space character. Furthermore, +// the associated value may have a `className` specifying an extra CSS class +// to add to the created `span`. + +var regularSpace = { + " ": {}, + "\\ ": {}, + "~": { + className: "nobreak" + }, + "\\space": {}, + "\\nobreakspace": { + className: "nobreak" + } +}; // ParseNode<"spacing"> created in Parser.js from the "spacing" symbol Groups in +// src/symbols.js. + +defineFunctionBuilders({ + type: "spacing", + + htmlBuilder(group, options) { + if (regularSpace.hasOwnProperty(group.text)) { + var className = regularSpace[group.text].className || ""; // Spaces are generated by adding an actual space. Each of these + // things has an entry in the symbols table, so these will be turned + // into appropriate outputs. + + if (group.mode === "text") { + var ord = buildCommon.makeOrd(group, options, "textord"); + ord.classes.push(className); + return ord; + } else { + return buildCommon.makeSpan(["mspace", className], [buildCommon.mathsym(group.text, group.mode, options)], options); + } + } else if (cssSpace.hasOwnProperty(group.text)) { + // Spaces based on just a CSS class. + return buildCommon.makeSpan(["mspace", cssSpace[group.text]], [], options); + } else { + throw new ParseError("Unknown type of space \"" + group.text + "\""); + } + }, + + mathmlBuilder(group, options) { + var node; + + if (regularSpace.hasOwnProperty(group.text)) { + node = new mathMLTree.MathNode("mtext", [new mathMLTree.TextNode("\u00a0")]); + } else if (cssSpace.hasOwnProperty(group.text)) { + // CSS-based MathML spaces (\nobreak, \allowbreak) are ignored + return new mathMLTree.MathNode("mspace"); + } else { + throw new ParseError("Unknown type of space \"" + group.text + "\""); + } + + return node; + } + +}); + +var pad = () => { + var padNode = new mathMLTree.MathNode("mtd", []); + padNode.setAttribute("width", "50%"); + return padNode; +}; + +defineFunctionBuilders({ + type: "tag", + + mathmlBuilder(group, options) { + var table = new mathMLTree.MathNode("mtable", [new mathMLTree.MathNode("mtr", [pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.body, options)]), pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.tag, options)])])]); + table.setAttribute("width", "100%"); + return table; // TODO: Left-aligned tags. + // Currently, the group and options passed here do not contain + // enough info to set tag alignment. `leqno` is in Settings but it is + // not passed to Options. On the HTML side, leqno is + // set by a CSS class applied in buildTree.js. That would have worked + // in MathML if browsers supported . Since they don't, we + // need to rewrite the way this function is called. + } + +}); + +var textFontFamilies = { + "\\text": undefined, + "\\textrm": "textrm", + "\\textsf": "textsf", + "\\texttt": "texttt", + "\\textnormal": "textrm" +}; +var textFontWeights = { + "\\textbf": "textbf", + "\\textmd": "textmd" +}; +var textFontShapes = { + "\\textit": "textit", + "\\textup": "textup" +}; + +var optionsWithFont = (group, options) => { + var font = group.font; // Checks if the argument is a font family or a font style. + + if (!font) { + return options; + } else if (textFontFamilies[font]) { + return options.withTextFontFamily(textFontFamilies[font]); + } else if (textFontWeights[font]) { + return options.withTextFontWeight(textFontWeights[font]); + } else { + return options.withTextFontShape(textFontShapes[font]); + } +}; + +defineFunction({ + type: "text", + names: [// Font families + "\\text", "\\textrm", "\\textsf", "\\texttt", "\\textnormal", // Font weights + "\\textbf", "\\textmd", // Font Shapes + "\\textit", "\\textup"], + props: { + numArgs: 1, + argTypes: ["text"], + allowedInArgument: true, + allowedInText: true + }, + + handler(_ref, args) { + var { + parser, + funcName + } = _ref; + var body = args[0]; + return { + type: "text", + mode: parser.mode, + body: ordargument(body), + font: funcName + }; + }, + + htmlBuilder(group, options) { + var newOptions = optionsWithFont(group, options); + var inner = buildExpression$1(group.body, newOptions, true); + return buildCommon.makeSpan(["mord", "text"], inner, newOptions); + }, + + mathmlBuilder(group, options) { + var newOptions = optionsWithFont(group, options); + return buildExpressionRow(group.body, newOptions); + } + +}); + +defineFunction({ + type: "underline", + names: ["\\underline"], + props: { + numArgs: 1, + allowedInText: true + }, + + handler(_ref, args) { + var { + parser + } = _ref; + return { + type: "underline", + mode: parser.mode, + body: args[0] + }; + }, + + htmlBuilder(group, options) { + // Underlines are handled in the TeXbook pg 443, Rule 10. + // Build the inner group. + var innerGroup = buildGroup$1(group.body, options); // Create the line to go below the body + + var line = buildCommon.makeLineSpan("underline-line", options); // Generate the vlist, with the appropriate kerns + + var defaultRuleThickness = options.fontMetrics().defaultRuleThickness; + var vlist = buildCommon.makeVList({ + positionType: "top", + positionData: innerGroup.height, + children: [{ + type: "kern", + size: defaultRuleThickness + }, { + type: "elem", + elem: line + }, { + type: "kern", + size: 3 * defaultRuleThickness + }, { + type: "elem", + elem: innerGroup + }] + }, options); + return buildCommon.makeSpan(["mord", "underline"], [vlist], options); + }, + + mathmlBuilder(group, options) { + var operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\u203e")]); + operator.setAttribute("stretchy", "true"); + var node = new mathMLTree.MathNode("munder", [buildGroup(group.body, options), operator]); + node.setAttribute("accentunder", "true"); + return node; + } + +}); + +defineFunction({ + type: "vcenter", + names: ["\\vcenter"], + props: { + numArgs: 1, + argTypes: ["original"], + // In LaTeX, \vcenter can act only on a box. + allowedInText: false + }, + + handler(_ref, args) { + var { + parser + } = _ref; + return { + type: "vcenter", + mode: parser.mode, + body: args[0] + }; + }, + + htmlBuilder(group, options) { + var body = buildGroup$1(group.body, options); + var axisHeight = options.fontMetrics().axisHeight; + var dy = 0.5 * (body.height - axisHeight - (body.depth + axisHeight)); + return buildCommon.makeVList({ + positionType: "shift", + positionData: dy, + children: [{ + type: "elem", + elem: body + }] + }, options); + }, + + mathmlBuilder(group, options) { + // There is no way to do this in MathML. + // Write a class as a breadcrumb in case some post-processor wants + // to perform a vcenter adjustment. + return new mathMLTree.MathNode("mpadded", [buildGroup(group.body, options)], ["vcenter"]); + } + +}); + +defineFunction({ + type: "verb", + names: ["\\verb"], + props: { + numArgs: 0, + allowedInText: true + }, + + handler(context, args, optArgs) { + // \verb and \verb* are dealt with directly in Parser.js. + // If we end up here, it's because of a failure to match the two delimiters + // in the regex in Lexer.js. LaTeX raises the following error when \verb is + // terminated by end of line (or file). + throw new ParseError("\\verb ended by end of line instead of matching delimiter"); + }, + + htmlBuilder(group, options) { + var text = makeVerb(group); + var body = []; // \verb enters text mode and therefore is sized like \textstyle + + var newOptions = options.havingStyle(options.style.text()); + + for (var i = 0; i < text.length; i++) { + var c = text[i]; + + if (c === '~') { + c = '\\textasciitilde'; + } + + body.push(buildCommon.makeSymbol(c, "Typewriter-Regular", group.mode, newOptions, ["mord", "texttt"])); + } + + return buildCommon.makeSpan(["mord", "text"].concat(newOptions.sizingClasses(options)), buildCommon.tryCombineChars(body), newOptions); + }, + + mathmlBuilder(group, options) { + var text = new mathMLTree.TextNode(makeVerb(group)); + var node = new mathMLTree.MathNode("mtext", [text]); + node.setAttribute("mathvariant", "monospace"); + return node; + } + +}); +/** + * Converts verb group into body string. + * + * \verb* replaces each space with an open box \u2423 + * \verb replaces each space with a no-break space \xA0 + */ + +var makeVerb = group => group.body.replace(/ /g, group.star ? '\u2423' : '\xA0'); + +/** Include this to ensure that all functions are defined. */ +var functions = _functions; + +/** + * The Lexer class handles tokenizing the input in various ways. Since our + * parser expects us to be able to backtrack, the lexer allows lexing from any + * given starting point. + * + * Its main exposed function is the `lex` function, which takes a position to + * lex from and a type of token to lex. It defers to the appropriate `_innerLex` + * function. + * + * The various `_innerLex` functions perform the actual lexing of different + * kinds. + */ + +/* The following tokenRegex + * - matches typical whitespace (but not NBSP etc.) using its first group + * - does not match any control character \x00-\x1f except whitespace + * - does not match a bare backslash + * - matches any ASCII character except those just mentioned + * - does not match the BMP private use area \uE000-\uF8FF + * - does not match bare surrogate code units + * - matches any BMP character except for those just described + * - matches any valid Unicode surrogate pair + * - matches a backslash followed by one or more whitespace characters + * - matches a backslash followed by one or more letters then whitespace + * - matches a backslash followed by any BMP character + * Capturing groups: + * [1] regular whitespace + * [2] backslash followed by whitespace + * [3] anything else, which may include: + * [4] left character of \verb* + * [5] left character of \verb + * [6] backslash followed by word, excluding any trailing whitespace + * Just because the Lexer matches something doesn't mean it's valid input: + * If there is no matching function or symbol definition, the Parser will + * still reject the input. + */ +var spaceRegexString = "[ \r\n\t]"; +var controlWordRegexString = "\\\\[a-zA-Z@]+"; +var controlSymbolRegexString = "\\\\[^\uD800-\uDFFF]"; +var controlWordWhitespaceRegexString = "(" + controlWordRegexString + ")" + spaceRegexString + "*"; +var controlSpaceRegexString = "\\\\(\n|[ \r\t]+\n?)[ \r\t]*"; +var combiningDiacriticalMarkString = "[\u0300-\u036f]"; +var combiningDiacriticalMarksEndRegex = new RegExp(combiningDiacriticalMarkString + "+$"); +var tokenRegexString = "(" + spaceRegexString + "+)|" + ( // whitespace +controlSpaceRegexString + "|") + // \whitespace +"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + ( // single codepoint +combiningDiacriticalMarkString + "*") + // ...plus accents +"|[\uD800-\uDBFF][\uDC00-\uDFFF]" + ( // surrogate pair +combiningDiacriticalMarkString + "*") + // ...plus accents +"|\\\\verb\\*([^]).*?\\4" + // \verb* +"|\\\\verb([^*a-zA-Z]).*?\\5" + ( // \verb unstarred +"|" + controlWordWhitespaceRegexString) + ( // \macroName + spaces +"|" + controlSymbolRegexString + ")"); // \\, \', etc. + +/** Main Lexer class */ + +class Lexer { + // Category codes. The lexer only supports comment characters (14) for now. + // MacroExpander additionally distinguishes active (13). + constructor(input, settings) { + this.input = void 0; + this.settings = void 0; + this.tokenRegex = void 0; + this.catcodes = void 0; + // Separate accents from characters + this.input = input; + this.settings = settings; + this.tokenRegex = new RegExp(tokenRegexString, 'g'); + this.catcodes = { + "%": 14, + // comment character + "~": 13 // active character + + }; + } + + setCatcode(char, code) { + this.catcodes[char] = code; + } + /** + * This function lexes a single token. + */ + + + lex() { + var input = this.input; + var pos = this.tokenRegex.lastIndex; + + if (pos === input.length) { + return new Token("EOF", new SourceLocation(this, pos, pos)); + } + + var match = this.tokenRegex.exec(input); + + if (match === null || match.index !== pos) { + throw new ParseError("Unexpected character: '" + input[pos] + "'", new Token(input[pos], new SourceLocation(this, pos, pos + 1))); + } + + var text = match[6] || match[3] || (match[2] ? "\\ " : " "); + + if (this.catcodes[text] === 14) { + // comment character + var nlIndex = input.indexOf('\n', this.tokenRegex.lastIndex); + + if (nlIndex === -1) { + this.tokenRegex.lastIndex = input.length; // EOF + + this.settings.reportNonstrict("commentAtEnd", "% comment has no terminating newline; LaTeX would " + "fail because of commenting the end of math mode (e.g. $)"); + } else { + this.tokenRegex.lastIndex = nlIndex + 1; + } + + return this.lex(); + } + + return new Token(text, new SourceLocation(this, pos, this.tokenRegex.lastIndex)); + } + +} + +/** + * A `Namespace` refers to a space of nameable things like macros or lengths, + * which can be `set` either globally or local to a nested group, using an + * undo stack similar to how TeX implements this functionality. + * Performance-wise, `get` and local `set` take constant time, while global + * `set` takes time proportional to the depth of group nesting. + */ +class Namespace { + /** + * Both arguments are optional. The first argument is an object of + * built-in mappings which never change. The second argument is an object + * of initial (global-level) mappings, which will constantly change + * according to any global/top-level `set`s done. + */ + constructor(builtins, globalMacros) { + if (builtins === void 0) { + builtins = {}; + } + + if (globalMacros === void 0) { + globalMacros = {}; + } + + this.current = void 0; + this.builtins = void 0; + this.undefStack = void 0; + this.current = globalMacros; + this.builtins = builtins; + this.undefStack = []; + } + /** + * Start a new nested group, affecting future local `set`s. + */ + + + beginGroup() { + this.undefStack.push({}); + } + /** + * End current nested group, restoring values before the group began. + */ + + + endGroup() { + if (this.undefStack.length === 0) { + throw new ParseError("Unbalanced namespace destruction: attempt " + "to pop global namespace; please report this as a bug"); + } + + var undefs = this.undefStack.pop(); + + for (var undef in undefs) { + if (undefs.hasOwnProperty(undef)) { + if (undefs[undef] == null) { + delete this.current[undef]; + } else { + this.current[undef] = undefs[undef]; + } + } + } + } + /** + * Ends all currently nested groups (if any), restoring values before the + * groups began. Useful in case of an error in the middle of parsing. + */ + + + endGroups() { + while (this.undefStack.length > 0) { + this.endGroup(); + } + } + /** + * Detect whether `name` has a definition. Equivalent to + * `get(name) != null`. + */ + + + has(name) { + return this.current.hasOwnProperty(name) || this.builtins.hasOwnProperty(name); + } + /** + * Get the current value of a name, or `undefined` if there is no value. + * + * Note: Do not use `if (namespace.get(...))` to detect whether a macro + * is defined, as the definition may be the empty string which evaluates + * to `false` in JavaScript. Use `if (namespace.get(...) != null)` or + * `if (namespace.has(...))`. + */ + + + get(name) { + if (this.current.hasOwnProperty(name)) { + return this.current[name]; + } else { + return this.builtins[name]; + } + } + /** + * Set the current value of a name, and optionally set it globally too. + * Local set() sets the current value and (when appropriate) adds an undo + * operation to the undo stack. Global set() may change the undo + * operation at every level, so takes time linear in their number. + * A value of undefined means to delete existing definitions. + */ + + + set(name, value, global) { + if (global === void 0) { + global = false; + } + + if (global) { + // Global set is equivalent to setting in all groups. Simulate this + // by destroying any undos currently scheduled for this name, + // and adding an undo with the *new* value (in case it later gets + // locally reset within this environment). + for (var i = 0; i < this.undefStack.length; i++) { + delete this.undefStack[i][name]; + } + + if (this.undefStack.length > 0) { + this.undefStack[this.undefStack.length - 1][name] = value; + } + } else { + // Undo this set at end of this group (possibly to `undefined`), + // unless an undo is already in place, in which case that older + // value is the correct one. + var top = this.undefStack[this.undefStack.length - 1]; + + if (top && !top.hasOwnProperty(name)) { + top[name] = this.current[name]; + } + } + + if (value == null) { + delete this.current[name]; + } else { + this.current[name] = value; + } + } + +} + +/** + * Predefined macros for KaTeX. + * This can be used to define some commands in terms of others. + */ +var macros = _macros; +// macro tools + +defineMacro("\\noexpand", function (context) { + // The expansion is the token itself; but that token is interpreted + // as if its meaning were ‘\relax’ if it is a control sequence that + // would ordinarily be expanded by TeX’s expansion rules. + var t = context.popToken(); + + if (context.isExpandable(t.text)) { + t.noexpand = true; + t.treatAsRelax = true; + } + + return { + tokens: [t], + numArgs: 0 + }; +}); +defineMacro("\\expandafter", function (context) { + // TeX first reads the token that comes immediately after \expandafter, + // without expanding it; let’s call this token t. Then TeX reads the + // token that comes after t (and possibly more tokens, if that token + // has an argument), replacing it by its expansion. Finally TeX puts + // t back in front of that expansion. + var t = context.popToken(); + context.expandOnce(true); // expand only an expandable token + + return { + tokens: [t], + numArgs: 0 + }; +}); // LaTeX's \@firstoftwo{#1}{#2} expands to #1, skipping #2 +// TeX source: \long\def\@firstoftwo#1#2{#1} + +defineMacro("\\@firstoftwo", function (context) { + var args = context.consumeArgs(2); + return { + tokens: args[0], + numArgs: 0 + }; +}); // LaTeX's \@secondoftwo{#1}{#2} expands to #2, skipping #1 +// TeX source: \long\def\@secondoftwo#1#2{#2} + +defineMacro("\\@secondoftwo", function (context) { + var args = context.consumeArgs(2); + return { + tokens: args[1], + numArgs: 0 + }; +}); // LaTeX's \@ifnextchar{#1}{#2}{#3} looks ahead to the next (unexpanded) +// symbol that isn't a space, consuming any spaces but not consuming the +// first nonspace character. If that nonspace character matches #1, then +// the macro expands to #2; otherwise, it expands to #3. + +defineMacro("\\@ifnextchar", function (context) { + var args = context.consumeArgs(3); // symbol, if, else + + context.consumeSpaces(); + var nextToken = context.future(); + + if (args[0].length === 1 && args[0][0].text === nextToken.text) { + return { + tokens: args[1], + numArgs: 0 + }; + } else { + return { + tokens: args[2], + numArgs: 0 + }; + } +}); // LaTeX's \@ifstar{#1}{#2} looks ahead to the next (unexpanded) symbol. +// If it is `*`, then it consumes the symbol, and the macro expands to #1; +// otherwise, the macro expands to #2 (without consuming the symbol). +// TeX source: \def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}} + +defineMacro("\\@ifstar", "\\@ifnextchar *{\\@firstoftwo{#1}}"); // LaTeX's \TextOrMath{#1}{#2} expands to #1 in text mode, #2 in math mode + +defineMacro("\\TextOrMath", function (context) { + var args = context.consumeArgs(2); + + if (context.mode === 'text') { + return { + tokens: args[0], + numArgs: 0 + }; + } else { + return { + tokens: args[1], + numArgs: 0 + }; + } +}); // Lookup table for parsing numbers in base 8 through 16 + +var digitToNumber = { + "0": 0, + "1": 1, + "2": 2, + "3": 3, + "4": 4, + "5": 5, + "6": 6, + "7": 7, + "8": 8, + "9": 9, + "a": 10, + "A": 10, + "b": 11, + "B": 11, + "c": 12, + "C": 12, + "d": 13, + "D": 13, + "e": 14, + "E": 14, + "f": 15, + "F": 15 +}; // TeX \char makes a literal character (catcode 12) using the following forms: +// (see The TeXBook, p. 43) +// \char123 -- decimal +// \char'123 -- octal +// \char"123 -- hex +// \char`x -- character that can be written (i.e. isn't active) +// \char`\x -- character that cannot be written (e.g. %) +// These all refer to characters from the font, so we turn them into special +// calls to a function \@char dealt with in the Parser. + +defineMacro("\\char", function (context) { + var token = context.popToken(); + var base; + var number = ''; + + if (token.text === "'") { + base = 8; + token = context.popToken(); + } else if (token.text === '"') { + base = 16; + token = context.popToken(); + } else if (token.text === "`") { + token = context.popToken(); + + if (token.text[0] === "\\") { + number = token.text.charCodeAt(1); + } else if (token.text === "EOF") { + throw new ParseError("\\char` missing argument"); + } else { + number = token.text.charCodeAt(0); + } + } else { + base = 10; + } + + if (base) { + // Parse a number in the given base, starting with first `token`. + number = digitToNumber[token.text]; + + if (number == null || number >= base) { + throw new ParseError("Invalid base-" + base + " digit " + token.text); + } + + var digit; + + while ((digit = digitToNumber[context.future().text]) != null && digit < base) { + number *= base; + number += digit; + context.popToken(); + } + } + + return "\\@char{" + number + "}"; +}); // \newcommand{\macro}[args]{definition} +// \renewcommand{\macro}[args]{definition} +// TODO: Optional arguments: \newcommand{\macro}[args][default]{definition} + +var newcommand = (context, existsOK, nonexistsOK) => { + var arg = context.consumeArg().tokens; + + if (arg.length !== 1) { + throw new ParseError("\\newcommand's first argument must be a macro name"); + } + + var name = arg[0].text; + var exists = context.isDefined(name); + + if (exists && !existsOK) { + throw new ParseError("\\newcommand{" + name + "} attempting to redefine " + (name + "; use \\renewcommand")); + } + + if (!exists && !nonexistsOK) { + throw new ParseError("\\renewcommand{" + name + "} when command " + name + " " + "does not yet exist; use \\newcommand"); + } + + var numArgs = 0; + arg = context.consumeArg().tokens; + + if (arg.length === 1 && arg[0].text === "[") { + var argText = ''; + var token = context.expandNextToken(); + + while (token.text !== "]" && token.text !== "EOF") { + // TODO: Should properly expand arg, e.g., ignore {}s + argText += token.text; + token = context.expandNextToken(); + } + + if (!argText.match(/^\s*[0-9]+\s*$/)) { + throw new ParseError("Invalid number of arguments: " + argText); + } + + numArgs = parseInt(argText); + arg = context.consumeArg().tokens; + } // Final arg is the expansion of the macro + + + context.macros.set(name, { + tokens: arg, + numArgs + }); + return ''; +}; + +defineMacro("\\newcommand", context => newcommand(context, false, true)); +defineMacro("\\renewcommand", context => newcommand(context, true, false)); +defineMacro("\\providecommand", context => newcommand(context, true, true)); // terminal (console) tools + +defineMacro("\\message", context => { + var arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console + + console.log(arg.reverse().map(token => token.text).join("")); + return ''; +}); +defineMacro("\\errmessage", context => { + var arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console + + console.error(arg.reverse().map(token => token.text).join("")); + return ''; +}); +defineMacro("\\show", context => { + var tok = context.popToken(); + var name = tok.text; // eslint-disable-next-line no-console + + console.log(tok, context.macros.get(name), functions[name], symbols.math[name], symbols.text[name]); + return ''; +}); ////////////////////////////////////////////////////////////////////// +// Grouping +// \let\bgroup={ \let\egroup=} + +defineMacro("\\bgroup", "{"); +defineMacro("\\egroup", "}"); // Symbols from latex.ltx: +// \def~{\nobreakspace{}} +// \def\lq{`} +// \def\rq{'} +// \def \aa {\r a} +// \def \AA {\r A} + +defineMacro("~", "\\nobreakspace"); +defineMacro("\\lq", "`"); +defineMacro("\\rq", "'"); +defineMacro("\\aa", "\\r a"); +defineMacro("\\AA", "\\r A"); // Copyright (C) and registered (R) symbols. Use raw symbol in MathML. +// \DeclareTextCommandDefault{\textcopyright}{\textcircled{c}} +// \DeclareTextCommandDefault{\textregistered}{\textcircled{% +// \check@mathfonts\fontsize\sf@size\z@\math@fontsfalse\selectfont R}} +// \DeclareRobustCommand{\copyright}{% +// \ifmmode{\nfss@text{\textcopyright}}\else\textcopyright\fi} + +defineMacro("\\textcopyright", "\\html@mathml{\\textcircled{c}}{\\char`©}"); +defineMacro("\\copyright", "\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}"); +defineMacro("\\textregistered", "\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}"); // Characters omitted from Unicode range 1D400–1D7FF + +defineMacro("\u212C", "\\mathscr{B}"); // script + +defineMacro("\u2130", "\\mathscr{E}"); +defineMacro("\u2131", "\\mathscr{F}"); +defineMacro("\u210B", "\\mathscr{H}"); +defineMacro("\u2110", "\\mathscr{I}"); +defineMacro("\u2112", "\\mathscr{L}"); +defineMacro("\u2133", "\\mathscr{M}"); +defineMacro("\u211B", "\\mathscr{R}"); +defineMacro("\u212D", "\\mathfrak{C}"); // Fraktur + +defineMacro("\u210C", "\\mathfrak{H}"); +defineMacro("\u2128", "\\mathfrak{Z}"); // Define \Bbbk with a macro that works in both HTML and MathML. + +defineMacro("\\Bbbk", "\\Bbb{k}"); // Unicode middle dot +// The KaTeX fonts do not contain U+00B7. Instead, \cdotp displays +// the dot at U+22C5 and gives it punct spacing. + +defineMacro("\u00b7", "\\cdotp"); // \llap and \rlap render their contents in text mode + +defineMacro("\\llap", "\\mathllap{\\textrm{#1}}"); +defineMacro("\\rlap", "\\mathrlap{\\textrm{#1}}"); +defineMacro("\\clap", "\\mathclap{\\textrm{#1}}"); // \mathstrut from the TeXbook, p 360 + +defineMacro("\\mathstrut", "\\vphantom{(}"); // \underbar from TeXbook p 353 + +defineMacro("\\underbar", "\\underline{\\text{#1}}"); // \not is defined by base/fontmath.ltx via +// \DeclareMathSymbol{\not}{\mathrel}{symbols}{"36} +// It's thus treated like a \mathrel, but defined by a symbol that has zero +// width but extends to the right. We use \rlap to get that spacing. +// For MathML we write U+0338 here. buildMathML.js will then do the overlay. + +defineMacro("\\not", '\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'); // Negated symbols from base/fontmath.ltx: +// \def\neq{\not=} \let\ne=\neq +// \DeclareRobustCommand +// \notin{\mathrel{\m@th\mathpalette\c@ncel\in}} +// \def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}} + +defineMacro("\\neq", "\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}"); +defineMacro("\\ne", "\\neq"); +defineMacro("\u2260", "\\neq"); +defineMacro("\\notin", "\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}" + "{\\mathrel{\\char`∉}}"); +defineMacro("\u2209", "\\notin"); // Unicode stacked relations + +defineMacro("\u2258", "\\html@mathml{" + "\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}" + "}{\\mathrel{\\char`\u2258}}"); +defineMacro("\u2259", "\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}"); +defineMacro("\u225A", "\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}"); +defineMacro("\u225B", "\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}" + "{\\mathrel{\\char`\u225B}}"); +defineMacro("\u225D", "\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}" + "{\\mathrel{\\char`\u225D}}"); +defineMacro("\u225E", "\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}" + "{\\mathrel{\\char`\u225E}}"); +defineMacro("\u225F", "\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}"); // Misc Unicode + +defineMacro("\u27C2", "\\perp"); +defineMacro("\u203C", "\\mathclose{!\\mkern-0.8mu!}"); +defineMacro("\u220C", "\\notni"); +defineMacro("\u231C", "\\ulcorner"); +defineMacro("\u231D", "\\urcorner"); +defineMacro("\u231E", "\\llcorner"); +defineMacro("\u231F", "\\lrcorner"); +defineMacro("\u00A9", "\\copyright"); +defineMacro("\u00AE", "\\textregistered"); +defineMacro("\uFE0F", "\\textregistered"); // The KaTeX fonts have corners at codepoints that don't match Unicode. +// For MathML purposes, use the Unicode code point. + +defineMacro("\\ulcorner", "\\html@mathml{\\@ulcorner}{\\mathop{\\char\"231c}}"); +defineMacro("\\urcorner", "\\html@mathml{\\@urcorner}{\\mathop{\\char\"231d}}"); +defineMacro("\\llcorner", "\\html@mathml{\\@llcorner}{\\mathop{\\char\"231e}}"); +defineMacro("\\lrcorner", "\\html@mathml{\\@lrcorner}{\\mathop{\\char\"231f}}"); ////////////////////////////////////////////////////////////////////// +// LaTeX_2ε +// \vdots{\vbox{\baselineskip4\p@ \lineskiplimit\z@ +// \kern6\p@\hbox{.}\hbox{.}\hbox{.}}} +// We'll call \varvdots, which gets a glyph from symbols.js. +// The zero-width rule gets us an equivalent to the vertical 6pt kern. + +defineMacro("\\vdots", "\\mathord{\\varvdots\\rule{0pt}{15pt}}"); +defineMacro("\u22ee", "\\vdots"); ////////////////////////////////////////////////////////////////////// +// amsmath.sty +// http://mirrors.concertpass.com/tex-archive/macros/latex/required/amsmath/amsmath.pdf +// Italic Greek capital letters. AMS defines these with \DeclareMathSymbol, +// but they are equivalent to \mathit{\Letter}. + +defineMacro("\\varGamma", "\\mathit{\\Gamma}"); +defineMacro("\\varDelta", "\\mathit{\\Delta}"); +defineMacro("\\varTheta", "\\mathit{\\Theta}"); +defineMacro("\\varLambda", "\\mathit{\\Lambda}"); +defineMacro("\\varXi", "\\mathit{\\Xi}"); +defineMacro("\\varPi", "\\mathit{\\Pi}"); +defineMacro("\\varSigma", "\\mathit{\\Sigma}"); +defineMacro("\\varUpsilon", "\\mathit{\\Upsilon}"); +defineMacro("\\varPhi", "\\mathit{\\Phi}"); +defineMacro("\\varPsi", "\\mathit{\\Psi}"); +defineMacro("\\varOmega", "\\mathit{\\Omega}"); //\newcommand{\substack}[1]{\subarray{c}#1\endsubarray} + +defineMacro("\\substack", "\\begin{subarray}{c}#1\\end{subarray}"); // \renewcommand{\colon}{\nobreak\mskip2mu\mathpunct{}\nonscript +// \mkern-\thinmuskip{:}\mskip6muplus1mu\relax} + +defineMacro("\\colon", "\\nobreak\\mskip2mu\\mathpunct{}" + "\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax"); // \newcommand{\boxed}[1]{\fbox{\m@th$\displaystyle#1$}} + +defineMacro("\\boxed", "\\fbox{$\\displaystyle{#1}$}"); // \def\iff{\DOTSB\;\Longleftrightarrow\;} +// \def\implies{\DOTSB\;\Longrightarrow\;} +// \def\impliedby{\DOTSB\;\Longleftarrow\;} + +defineMacro("\\iff", "\\DOTSB\\;\\Longleftrightarrow\\;"); +defineMacro("\\implies", "\\DOTSB\\;\\Longrightarrow\\;"); +defineMacro("\\impliedby", "\\DOTSB\\;\\Longleftarrow\\;"); // AMSMath's automatic \dots, based on \mdots@@ macro. + +var dotsByToken = { + ',': '\\dotsc', + '\\not': '\\dotsb', + // \keybin@ checks for the following: + '+': '\\dotsb', + '=': '\\dotsb', + '<': '\\dotsb', + '>': '\\dotsb', + '-': '\\dotsb', + '*': '\\dotsb', + ':': '\\dotsb', + // Symbols whose definition starts with \DOTSB: + '\\DOTSB': '\\dotsb', + '\\coprod': '\\dotsb', + '\\bigvee': '\\dotsb', + '\\bigwedge': '\\dotsb', + '\\biguplus': '\\dotsb', + '\\bigcap': '\\dotsb', + '\\bigcup': '\\dotsb', + '\\prod': '\\dotsb', + '\\sum': '\\dotsb', + '\\bigotimes': '\\dotsb', + '\\bigoplus': '\\dotsb', + '\\bigodot': '\\dotsb', + '\\bigsqcup': '\\dotsb', + '\\And': '\\dotsb', + '\\longrightarrow': '\\dotsb', + '\\Longrightarrow': '\\dotsb', + '\\longleftarrow': '\\dotsb', + '\\Longleftarrow': '\\dotsb', + '\\longleftrightarrow': '\\dotsb', + '\\Longleftrightarrow': '\\dotsb', + '\\mapsto': '\\dotsb', + '\\longmapsto': '\\dotsb', + '\\hookrightarrow': '\\dotsb', + '\\doteq': '\\dotsb', + // Symbols whose definition starts with \mathbin: + '\\mathbin': '\\dotsb', + // Symbols whose definition starts with \mathrel: + '\\mathrel': '\\dotsb', + '\\relbar': '\\dotsb', + '\\Relbar': '\\dotsb', + '\\xrightarrow': '\\dotsb', + '\\xleftarrow': '\\dotsb', + // Symbols whose definition starts with \DOTSI: + '\\DOTSI': '\\dotsi', + '\\int': '\\dotsi', + '\\oint': '\\dotsi', + '\\iint': '\\dotsi', + '\\iiint': '\\dotsi', + '\\iiiint': '\\dotsi', + '\\idotsint': '\\dotsi', + // Symbols whose definition starts with \DOTSX: + '\\DOTSX': '\\dotsx' +}; +defineMacro("\\dots", function (context) { + // TODO: If used in text mode, should expand to \textellipsis. + // However, in KaTeX, \textellipsis and \ldots behave the same + // (in text mode), and it's unlikely we'd see any of the math commands + // that affect the behavior of \dots when in text mode. So fine for now + // (until we support \ifmmode ... \else ... \fi). + var thedots = '\\dotso'; + var next = context.expandAfterFuture().text; + + if (next in dotsByToken) { + thedots = dotsByToken[next]; + } else if (next.slice(0, 4) === '\\not') { + thedots = '\\dotsb'; + } else if (next in symbols.math) { + if (utils.contains(['bin', 'rel'], symbols.math[next].group)) { + thedots = '\\dotsb'; + } + } + + return thedots; +}); +var spaceAfterDots = { + // \rightdelim@ checks for the following: + ')': true, + ']': true, + '\\rbrack': true, + '\\}': true, + '\\rbrace': true, + '\\rangle': true, + '\\rceil': true, + '\\rfloor': true, + '\\rgroup': true, + '\\rmoustache': true, + '\\right': true, + '\\bigr': true, + '\\biggr': true, + '\\Bigr': true, + '\\Biggr': true, + // \extra@ also tests for the following: + '$': true, + // \extrap@ checks for the following: + ';': true, + '.': true, + ',': true +}; +defineMacro("\\dotso", function (context) { + var next = context.future().text; + + if (next in spaceAfterDots) { + return "\\ldots\\,"; + } else { + return "\\ldots"; + } +}); +defineMacro("\\dotsc", function (context) { + var next = context.future().text; // \dotsc uses \extra@ but not \extrap@, instead specially checking for + // ';' and '.', but doesn't check for ','. + + if (next in spaceAfterDots && next !== ',') { + return "\\ldots\\,"; + } else { + return "\\ldots"; + } +}); +defineMacro("\\cdots", function (context) { + var next = context.future().text; + + if (next in spaceAfterDots) { + return "\\@cdots\\,"; + } else { + return "\\@cdots"; + } +}); +defineMacro("\\dotsb", "\\cdots"); +defineMacro("\\dotsm", "\\cdots"); +defineMacro("\\dotsi", "\\!\\cdots"); // amsmath doesn't actually define \dotsx, but \dots followed by a macro +// starting with \DOTSX implies \dotso, and then \extra@ detects this case +// and forces the added `\,`. + +defineMacro("\\dotsx", "\\ldots\\,"); // \let\DOTSI\relax +// \let\DOTSB\relax +// \let\DOTSX\relax + +defineMacro("\\DOTSI", "\\relax"); +defineMacro("\\DOTSB", "\\relax"); +defineMacro("\\DOTSX", "\\relax"); // Spacing, based on amsmath.sty's override of LaTeX defaults +// \DeclareRobustCommand{\tmspace}[3]{% +// \ifmmode\mskip#1#2\else\kern#1#3\fi\relax} + +defineMacro("\\tmspace", "\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"); // \renewcommand{\,}{\tmspace+\thinmuskip{.1667em}} +// TODO: math mode should use \thinmuskip + +defineMacro("\\,", "\\tmspace+{3mu}{.1667em}"); // \let\thinspace\, + +defineMacro("\\thinspace", "\\,"); // \def\>{\mskip\medmuskip} +// \renewcommand{\:}{\tmspace+\medmuskip{.2222em}} +// TODO: \> and math mode of \: should use \medmuskip = 4mu plus 2mu minus 4mu + +defineMacro("\\>", "\\mskip{4mu}"); +defineMacro("\\:", "\\tmspace+{4mu}{.2222em}"); // \let\medspace\: + +defineMacro("\\medspace", "\\:"); // \renewcommand{\;}{\tmspace+\thickmuskip{.2777em}} +// TODO: math mode should use \thickmuskip = 5mu plus 5mu + +defineMacro("\\;", "\\tmspace+{5mu}{.2777em}"); // \let\thickspace\; + +defineMacro("\\thickspace", "\\;"); // \renewcommand{\!}{\tmspace-\thinmuskip{.1667em}} +// TODO: math mode should use \thinmuskip + +defineMacro("\\!", "\\tmspace-{3mu}{.1667em}"); // \let\negthinspace\! + +defineMacro("\\negthinspace", "\\!"); // \newcommand{\negmedspace}{\tmspace-\medmuskip{.2222em}} +// TODO: math mode should use \medmuskip + +defineMacro("\\negmedspace", "\\tmspace-{4mu}{.2222em}"); // \newcommand{\negthickspace}{\tmspace-\thickmuskip{.2777em}} +// TODO: math mode should use \thickmuskip + +defineMacro("\\negthickspace", "\\tmspace-{5mu}{.277em}"); // \def\enspace{\kern.5em } + +defineMacro("\\enspace", "\\kern.5em "); // \def\enskip{\hskip.5em\relax} + +defineMacro("\\enskip", "\\hskip.5em\\relax"); // \def\quad{\hskip1em\relax} + +defineMacro("\\quad", "\\hskip1em\\relax"); // \def\qquad{\hskip2em\relax} + +defineMacro("\\qquad", "\\hskip2em\\relax"); // \tag@in@display form of \tag + +defineMacro("\\tag", "\\@ifstar\\tag@literal\\tag@paren"); +defineMacro("\\tag@paren", "\\tag@literal{({#1})}"); +defineMacro("\\tag@literal", context => { + if (context.macros.get("\\df@tag")) { + throw new ParseError("Multiple \\tag"); + } + + return "\\gdef\\df@tag{\\text{#1}}"; +}); // \renewcommand{\bmod}{\nonscript\mskip-\medmuskip\mkern5mu\mathbin +// {\operator@font mod}\penalty900 +// \mkern5mu\nonscript\mskip-\medmuskip} +// \newcommand{\pod}[1]{\allowbreak +// \if@display\mkern18mu\else\mkern8mu\fi(#1)} +// \renewcommand{\pmod}[1]{\pod{{\operator@font mod}\mkern6mu#1}} +// \newcommand{\mod}[1]{\allowbreak\if@display\mkern18mu +// \else\mkern12mu\fi{\operator@font mod}\,\,#1} +// TODO: math mode should use \medmuskip = 4mu plus 2mu minus 4mu + +defineMacro("\\bmod", "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}" + "\\mathbin{\\rm mod}" + "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"); +defineMacro("\\pod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"); +defineMacro("\\pmod", "\\pod{{\\rm mod}\\mkern6mu#1}"); +defineMacro("\\mod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}" + "{\\rm mod}\\,\\,#1"); ////////////////////////////////////////////////////////////////////// +// LaTeX source2e +// \expandafter\let\expandafter\@normalcr +// \csname\expandafter\@gobble\string\\ \endcsname +// \DeclareRobustCommand\newline{\@normalcr\relax} + +defineMacro("\\newline", "\\\\\\relax"); // \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\@} +// TODO: Doesn't normally work in math mode because \@ fails. KaTeX doesn't +// support \@ yet, so that's omitted, and we add \text so that the result +// doesn't look funny in math mode. + +defineMacro("\\TeX", "\\textrm{\\html@mathml{" + "T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX" + "}{TeX}}"); // \DeclareRobustCommand{\LaTeX}{L\kern-.36em% +// {\sbox\z@ T% +// \vbox to\ht\z@{\hbox{\check@mathfonts +// \fontsize\sf@size\z@ +// \math@fontsfalse\selectfont +// A}% +// \vss}% +// }% +// \kern-.15em% +// \TeX} +// This code aligns the top of the A with the T (from the perspective of TeX's +// boxes, though visually the A appears to extend above slightly). +// We compute the corresponding \raisebox when A is rendered in \normalsize +// \scriptstyle, which has a scale factor of 0.7 (see Options.js). + +var latexRaiseA = makeEm(fontMetricsData['Main-Regular']["T".charCodeAt(0)][1] - 0.7 * fontMetricsData['Main-Regular']["A".charCodeAt(0)][1]); +defineMacro("\\LaTeX", "\\textrm{\\html@mathml{" + ("L\\kern-.36em\\raisebox{" + latexRaiseA + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{LaTeX}}"); // New KaTeX logo based on tweaking LaTeX logo + +defineMacro("\\KaTeX", "\\textrm{\\html@mathml{" + ("K\\kern-.17em\\raisebox{" + latexRaiseA + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{KaTeX}}"); // \DeclareRobustCommand\hspace{\@ifstar\@hspacer\@hspace} +// \def\@hspace#1{\hskip #1\relax} +// \def\@hspacer#1{\vrule \@width\z@\nobreak +// \hskip #1\hskip \z@skip} + +defineMacro("\\hspace", "\\@ifstar\\@hspacer\\@hspace"); +defineMacro("\\@hspace", "\\hskip #1\\relax"); +defineMacro("\\@hspacer", "\\rule{0pt}{0pt}\\hskip #1\\relax"); ////////////////////////////////////////////////////////////////////// +// mathtools.sty +//\providecommand\ordinarycolon{:} + +defineMacro("\\ordinarycolon", ":"); //\def\vcentcolon{\mathrel{\mathop\ordinarycolon}} +//TODO(edemaine): Not yet centered. Fix via \raisebox or #726 + +defineMacro("\\vcentcolon", "\\mathrel{\\mathop\\ordinarycolon}"); // \providecommand*\dblcolon{\vcentcolon\mathrel{\mkern-.9mu}\vcentcolon} + +defineMacro("\\dblcolon", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}" + "{\\mathop{\\char\"2237}}"); // \providecommand*\coloneqq{\vcentcolon\mathrel{\mkern-1.2mu}=} + +defineMacro("\\coloneqq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2254}}"); // ≔ +// \providecommand*\Coloneqq{\dblcolon\mathrel{\mkern-1.2mu}=} + +defineMacro("\\Coloneqq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2237\\char\"3d}}"); // \providecommand*\coloneq{\vcentcolon\mathrel{\mkern-1.2mu}\mathrel{-}} + +defineMacro("\\coloneq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"3a\\char\"2212}}"); // \providecommand*\Coloneq{\dblcolon\mathrel{\mkern-1.2mu}\mathrel{-}} + +defineMacro("\\Coloneq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"2237\\char\"2212}}"); // \providecommand*\eqqcolon{=\mathrel{\mkern-1.2mu}\vcentcolon} + +defineMacro("\\eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2255}}"); // ≕ +// \providecommand*\Eqqcolon{=\mathrel{\mkern-1.2mu}\dblcolon} + +defineMacro("\\Eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"3d\\char\"2237}}"); // \providecommand*\eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\vcentcolon} + +defineMacro("\\eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2239}}"); // \providecommand*\Eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\dblcolon} + +defineMacro("\\Eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"2212\\char\"2237}}"); // \providecommand*\colonapprox{\vcentcolon\mathrel{\mkern-1.2mu}\approx} + +defineMacro("\\colonapprox", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"3a\\char\"2248}}"); // \providecommand*\Colonapprox{\dblcolon\mathrel{\mkern-1.2mu}\approx} + +defineMacro("\\Colonapprox", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"2237\\char\"2248}}"); // \providecommand*\colonsim{\vcentcolon\mathrel{\mkern-1.2mu}\sim} + +defineMacro("\\colonsim", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"3a\\char\"223c}}"); // \providecommand*\Colonsim{\dblcolon\mathrel{\mkern-1.2mu}\sim} + +defineMacro("\\Colonsim", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"2237\\char\"223c}}"); // Some Unicode characters are implemented with macros to mathtools functions. + +defineMacro("\u2237", "\\dblcolon"); // :: + +defineMacro("\u2239", "\\eqcolon"); // -: + +defineMacro("\u2254", "\\coloneqq"); // := + +defineMacro("\u2255", "\\eqqcolon"); // =: + +defineMacro("\u2A74", "\\Coloneqq"); // ::= +////////////////////////////////////////////////////////////////////// +// colonequals.sty +// Alternate names for mathtools's macros: + +defineMacro("\\ratio", "\\vcentcolon"); +defineMacro("\\coloncolon", "\\dblcolon"); +defineMacro("\\colonequals", "\\coloneqq"); +defineMacro("\\coloncolonequals", "\\Coloneqq"); +defineMacro("\\equalscolon", "\\eqqcolon"); +defineMacro("\\equalscoloncolon", "\\Eqqcolon"); +defineMacro("\\colonminus", "\\coloneq"); +defineMacro("\\coloncolonminus", "\\Coloneq"); +defineMacro("\\minuscolon", "\\eqcolon"); +defineMacro("\\minuscoloncolon", "\\Eqcolon"); // \colonapprox name is same in mathtools and colonequals. + +defineMacro("\\coloncolonapprox", "\\Colonapprox"); // \colonsim name is same in mathtools and colonequals. + +defineMacro("\\coloncolonsim", "\\Colonsim"); // Additional macros, implemented by analogy with mathtools definitions: + +defineMacro("\\simcolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"); +defineMacro("\\simcoloncolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"); +defineMacro("\\approxcolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"); +defineMacro("\\approxcoloncolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"); // Present in newtxmath, pxfonts and txfonts + +defineMacro("\\notni", "\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}"); +defineMacro("\\limsup", "\\DOTSB\\operatorname*{lim\\,sup}"); +defineMacro("\\liminf", "\\DOTSB\\operatorname*{lim\\,inf}"); ////////////////////////////////////////////////////////////////////// +// From amsopn.sty + +defineMacro("\\injlim", "\\DOTSB\\operatorname*{inj\\,lim}"); +defineMacro("\\projlim", "\\DOTSB\\operatorname*{proj\\,lim}"); +defineMacro("\\varlimsup", "\\DOTSB\\operatorname*{\\overline{lim}}"); +defineMacro("\\varliminf", "\\DOTSB\\operatorname*{\\underline{lim}}"); +defineMacro("\\varinjlim", "\\DOTSB\\operatorname*{\\underrightarrow{lim}}"); +defineMacro("\\varprojlim", "\\DOTSB\\operatorname*{\\underleftarrow{lim}}"); ////////////////////////////////////////////////////////////////////// +// MathML alternates for KaTeX glyphs in the Unicode private area + +defineMacro("\\gvertneqq", "\\html@mathml{\\@gvertneqq}{\u2269}"); +defineMacro("\\lvertneqq", "\\html@mathml{\\@lvertneqq}{\u2268}"); +defineMacro("\\ngeqq", "\\html@mathml{\\@ngeqq}{\u2271}"); +defineMacro("\\ngeqslant", "\\html@mathml{\\@ngeqslant}{\u2271}"); +defineMacro("\\nleqq", "\\html@mathml{\\@nleqq}{\u2270}"); +defineMacro("\\nleqslant", "\\html@mathml{\\@nleqslant}{\u2270}"); +defineMacro("\\nshortmid", "\\html@mathml{\\@nshortmid}{∤}"); +defineMacro("\\nshortparallel", "\\html@mathml{\\@nshortparallel}{∦}"); +defineMacro("\\nsubseteqq", "\\html@mathml{\\@nsubseteqq}{\u2288}"); +defineMacro("\\nsupseteqq", "\\html@mathml{\\@nsupseteqq}{\u2289}"); +defineMacro("\\varsubsetneq", "\\html@mathml{\\@varsubsetneq}{⊊}"); +defineMacro("\\varsubsetneqq", "\\html@mathml{\\@varsubsetneqq}{⫋}"); +defineMacro("\\varsupsetneq", "\\html@mathml{\\@varsupsetneq}{⊋}"); +defineMacro("\\varsupsetneqq", "\\html@mathml{\\@varsupsetneqq}{⫌}"); +defineMacro("\\imath", "\\html@mathml{\\@imath}{\u0131}"); +defineMacro("\\jmath", "\\html@mathml{\\@jmath}{\u0237}"); ////////////////////////////////////////////////////////////////////// +// stmaryrd and semantic +// The stmaryrd and semantic packages render the next four items by calling a +// glyph. Those glyphs do not exist in the KaTeX fonts. Hence the macros. + +defineMacro("\\llbracket", "\\html@mathml{" + "\\mathopen{[\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u27e6}}"); +defineMacro("\\rrbracket", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu]}}" + "{\\mathclose{\\char`\u27e7}}"); +defineMacro("\u27e6", "\\llbracket"); // blackboard bold [ + +defineMacro("\u27e7", "\\rrbracket"); // blackboard bold ] + +defineMacro("\\lBrace", "\\html@mathml{" + "\\mathopen{\\{\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u2983}}"); +defineMacro("\\rBrace", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu\\}}}" + "{\\mathclose{\\char`\u2984}}"); +defineMacro("\u2983", "\\lBrace"); // blackboard bold { + +defineMacro("\u2984", "\\rBrace"); // blackboard bold } +// TODO: Create variable sized versions of the last two items. I believe that +// will require new font glyphs. +// The stmaryrd function `\minuso` provides a "Plimsoll" symbol that +// superimposes the characters \circ and \mathminus. Used in chemistry. + +defineMacro("\\minuso", "\\mathbin{\\html@mathml{" + "{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}" + "{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}" + "{\\char`⦵}}"); +defineMacro("⦵", "\\minuso"); ////////////////////////////////////////////////////////////////////// +// texvc.sty +// The texvc package contains macros available in mediawiki pages. +// We omit the functions deprecated at +// https://en.wikipedia.org/wiki/Help:Displaying_a_formula#Deprecated_syntax +// We also omit texvc's \O, which conflicts with \text{\O} + +defineMacro("\\darr", "\\downarrow"); +defineMacro("\\dArr", "\\Downarrow"); +defineMacro("\\Darr", "\\Downarrow"); +defineMacro("\\lang", "\\langle"); +defineMacro("\\rang", "\\rangle"); +defineMacro("\\uarr", "\\uparrow"); +defineMacro("\\uArr", "\\Uparrow"); +defineMacro("\\Uarr", "\\Uparrow"); +defineMacro("\\N", "\\mathbb{N}"); +defineMacro("\\R", "\\mathbb{R}"); +defineMacro("\\Z", "\\mathbb{Z}"); +defineMacro("\\alef", "\\aleph"); +defineMacro("\\alefsym", "\\aleph"); +defineMacro("\\Alpha", "\\mathrm{A}"); +defineMacro("\\Beta", "\\mathrm{B}"); +defineMacro("\\bull", "\\bullet"); +defineMacro("\\Chi", "\\mathrm{X}"); +defineMacro("\\clubs", "\\clubsuit"); +defineMacro("\\cnums", "\\mathbb{C}"); +defineMacro("\\Complex", "\\mathbb{C}"); +defineMacro("\\Dagger", "\\ddagger"); +defineMacro("\\diamonds", "\\diamondsuit"); +defineMacro("\\empty", "\\emptyset"); +defineMacro("\\Epsilon", "\\mathrm{E}"); +defineMacro("\\Eta", "\\mathrm{H}"); +defineMacro("\\exist", "\\exists"); +defineMacro("\\harr", "\\leftrightarrow"); +defineMacro("\\hArr", "\\Leftrightarrow"); +defineMacro("\\Harr", "\\Leftrightarrow"); +defineMacro("\\hearts", "\\heartsuit"); +defineMacro("\\image", "\\Im"); +defineMacro("\\infin", "\\infty"); +defineMacro("\\Iota", "\\mathrm{I}"); +defineMacro("\\isin", "\\in"); +defineMacro("\\Kappa", "\\mathrm{K}"); +defineMacro("\\larr", "\\leftarrow"); +defineMacro("\\lArr", "\\Leftarrow"); +defineMacro("\\Larr", "\\Leftarrow"); +defineMacro("\\lrarr", "\\leftrightarrow"); +defineMacro("\\lrArr", "\\Leftrightarrow"); +defineMacro("\\Lrarr", "\\Leftrightarrow"); +defineMacro("\\Mu", "\\mathrm{M}"); +defineMacro("\\natnums", "\\mathbb{N}"); +defineMacro("\\Nu", "\\mathrm{N}"); +defineMacro("\\Omicron", "\\mathrm{O}"); +defineMacro("\\plusmn", "\\pm"); +defineMacro("\\rarr", "\\rightarrow"); +defineMacro("\\rArr", "\\Rightarrow"); +defineMacro("\\Rarr", "\\Rightarrow"); +defineMacro("\\real", "\\Re"); +defineMacro("\\reals", "\\mathbb{R}"); +defineMacro("\\Reals", "\\mathbb{R}"); +defineMacro("\\Rho", "\\mathrm{P}"); +defineMacro("\\sdot", "\\cdot"); +defineMacro("\\sect", "\\S"); +defineMacro("\\spades", "\\spadesuit"); +defineMacro("\\sub", "\\subset"); +defineMacro("\\sube", "\\subseteq"); +defineMacro("\\supe", "\\supseteq"); +defineMacro("\\Tau", "\\mathrm{T}"); +defineMacro("\\thetasym", "\\vartheta"); // TODO: defineMacro("\\varcoppa", "\\\mbox{\\coppa}"); + +defineMacro("\\weierp", "\\wp"); +defineMacro("\\Zeta", "\\mathrm{Z}"); ////////////////////////////////////////////////////////////////////// +// statmath.sty +// https://ctan.math.illinois.edu/macros/latex/contrib/statmath/statmath.pdf + +defineMacro("\\argmin", "\\DOTSB\\operatorname*{arg\\,min}"); +defineMacro("\\argmax", "\\DOTSB\\operatorname*{arg\\,max}"); +defineMacro("\\plim", "\\DOTSB\\mathop{\\operatorname{plim}}\\limits"); ////////////////////////////////////////////////////////////////////// +// braket.sty +// http://ctan.math.washington.edu/tex-archive/macros/latex/contrib/braket/braket.pdf + +defineMacro("\\bra", "\\mathinner{\\langle{#1}|}"); +defineMacro("\\ket", "\\mathinner{|{#1}\\rangle}"); +defineMacro("\\braket", "\\mathinner{\\langle{#1}\\rangle}"); +defineMacro("\\Bra", "\\left\\langle#1\\right|"); +defineMacro("\\Ket", "\\left|#1\\right\\rangle"); + +var braketHelper = one => context => { + var left = context.consumeArg().tokens; + var middle = context.consumeArg().tokens; + var middleDouble = context.consumeArg().tokens; + var right = context.consumeArg().tokens; + var oldMiddle = context.macros.get("|"); + var oldMiddleDouble = context.macros.get("\\|"); + context.macros.beginGroup(); + + var midMacro = double => context => { + if (one) { + // Only modify the first instance of | or \| + context.macros.set("|", oldMiddle); + + if (middleDouble.length) { + context.macros.set("\\|", oldMiddleDouble); + } + } + + var doubled = double; + + if (!double && middleDouble.length) { + // Mimic \@ifnextchar + var nextToken = context.future(); + + if (nextToken.text === "|") { + context.popToken(); + doubled = true; + } + } + + return { + tokens: doubled ? middleDouble : middle, + numArgs: 0 + }; + }; + + context.macros.set("|", midMacro(false)); + + if (middleDouble.length) { + context.macros.set("\\|", midMacro(true)); + } + + var arg = context.consumeArg().tokens; + var expanded = context.expandTokens([...right, ...arg, ...left // reversed + ]); + context.macros.endGroup(); + return { + tokens: expanded.reverse(), + numArgs: 0 + }; +}; + +defineMacro("\\bra@ket", braketHelper(false)); +defineMacro("\\bra@set", braketHelper(true)); +defineMacro("\\Braket", "\\bra@ket{\\left\\langle}" + "{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}"); +defineMacro("\\Set", "\\bra@set{\\left\\{\\:}" + "{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}"); +defineMacro("\\set", "\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}"); // has no support for special || or \| +////////////////////////////////////////////////////////////////////// +// actuarialangle.dtx + +defineMacro("\\angln", "{\\angl n}"); // Custom Khan Academy colors, should be moved to an optional package + +defineMacro("\\blue", "\\textcolor{##6495ed}{#1}"); +defineMacro("\\orange", "\\textcolor{##ffa500}{#1}"); +defineMacro("\\pink", "\\textcolor{##ff00af}{#1}"); +defineMacro("\\red", "\\textcolor{##df0030}{#1}"); +defineMacro("\\green", "\\textcolor{##28ae7b}{#1}"); +defineMacro("\\gray", "\\textcolor{gray}{#1}"); +defineMacro("\\purple", "\\textcolor{##9d38bd}{#1}"); +defineMacro("\\blueA", "\\textcolor{##ccfaff}{#1}"); +defineMacro("\\blueB", "\\textcolor{##80f6ff}{#1}"); +defineMacro("\\blueC", "\\textcolor{##63d9ea}{#1}"); +defineMacro("\\blueD", "\\textcolor{##11accd}{#1}"); +defineMacro("\\blueE", "\\textcolor{##0c7f99}{#1}"); +defineMacro("\\tealA", "\\textcolor{##94fff5}{#1}"); +defineMacro("\\tealB", "\\textcolor{##26edd5}{#1}"); +defineMacro("\\tealC", "\\textcolor{##01d1c1}{#1}"); +defineMacro("\\tealD", "\\textcolor{##01a995}{#1}"); +defineMacro("\\tealE", "\\textcolor{##208170}{#1}"); +defineMacro("\\greenA", "\\textcolor{##b6ffb0}{#1}"); +defineMacro("\\greenB", "\\textcolor{##8af281}{#1}"); +defineMacro("\\greenC", "\\textcolor{##74cf70}{#1}"); +defineMacro("\\greenD", "\\textcolor{##1fab54}{#1}"); +defineMacro("\\greenE", "\\textcolor{##0d923f}{#1}"); +defineMacro("\\goldA", "\\textcolor{##ffd0a9}{#1}"); +defineMacro("\\goldB", "\\textcolor{##ffbb71}{#1}"); +defineMacro("\\goldC", "\\textcolor{##ff9c39}{#1}"); +defineMacro("\\goldD", "\\textcolor{##e07d10}{#1}"); +defineMacro("\\goldE", "\\textcolor{##a75a05}{#1}"); +defineMacro("\\redA", "\\textcolor{##fca9a9}{#1}"); +defineMacro("\\redB", "\\textcolor{##ff8482}{#1}"); +defineMacro("\\redC", "\\textcolor{##f9685d}{#1}"); +defineMacro("\\redD", "\\textcolor{##e84d39}{#1}"); +defineMacro("\\redE", "\\textcolor{##bc2612}{#1}"); +defineMacro("\\maroonA", "\\textcolor{##ffbde0}{#1}"); +defineMacro("\\maroonB", "\\textcolor{##ff92c6}{#1}"); +defineMacro("\\maroonC", "\\textcolor{##ed5fa6}{#1}"); +defineMacro("\\maroonD", "\\textcolor{##ca337c}{#1}"); +defineMacro("\\maroonE", "\\textcolor{##9e034e}{#1}"); +defineMacro("\\purpleA", "\\textcolor{##ddd7ff}{#1}"); +defineMacro("\\purpleB", "\\textcolor{##c6b9fc}{#1}"); +defineMacro("\\purpleC", "\\textcolor{##aa87ff}{#1}"); +defineMacro("\\purpleD", "\\textcolor{##7854ab}{#1}"); +defineMacro("\\purpleE", "\\textcolor{##543b78}{#1}"); +defineMacro("\\mintA", "\\textcolor{##f5f9e8}{#1}"); +defineMacro("\\mintB", "\\textcolor{##edf2df}{#1}"); +defineMacro("\\mintC", "\\textcolor{##e0e5cc}{#1}"); +defineMacro("\\grayA", "\\textcolor{##f6f7f7}{#1}"); +defineMacro("\\grayB", "\\textcolor{##f0f1f2}{#1}"); +defineMacro("\\grayC", "\\textcolor{##e3e5e6}{#1}"); +defineMacro("\\grayD", "\\textcolor{##d6d8da}{#1}"); +defineMacro("\\grayE", "\\textcolor{##babec2}{#1}"); +defineMacro("\\grayF", "\\textcolor{##888d93}{#1}"); +defineMacro("\\grayG", "\\textcolor{##626569}{#1}"); +defineMacro("\\grayH", "\\textcolor{##3b3e40}{#1}"); +defineMacro("\\grayI", "\\textcolor{##21242c}{#1}"); +defineMacro("\\kaBlue", "\\textcolor{##314453}{#1}"); +defineMacro("\\kaGreen", "\\textcolor{##71B307}{#1}"); + +/** + * This file contains the “gullet” where macros are expanded + * until only non-macro tokens remain. + */ +// List of commands that act like macros but aren't defined as a macro, +// function, or symbol. Used in `isDefined`. +var implicitCommands = { + "^": true, + // Parser.js + "_": true, + // Parser.js + "\\limits": true, + // Parser.js + "\\nolimits": true // Parser.js + +}; +class MacroExpander { + constructor(input, settings, mode) { + this.settings = void 0; + this.expansionCount = void 0; + this.lexer = void 0; + this.macros = void 0; + this.stack = void 0; + this.mode = void 0; + this.settings = settings; + this.expansionCount = 0; + this.feed(input); // Make new global namespace + + this.macros = new Namespace(macros, settings.macros); + this.mode = mode; + this.stack = []; // contains tokens in REVERSE order + } + /** + * Feed a new input string to the same MacroExpander + * (with existing macros etc.). + */ + + + feed(input) { + this.lexer = new Lexer(input, this.settings); + } + /** + * Switches between "text" and "math" modes. + */ + + + switchMode(newMode) { + this.mode = newMode; + } + /** + * Start a new group nesting within all namespaces. + */ + + + beginGroup() { + this.macros.beginGroup(); + } + /** + * End current group nesting within all namespaces. + */ + + + endGroup() { + this.macros.endGroup(); + } + /** + * Ends all currently nested groups (if any), restoring values before the + * groups began. Useful in case of an error in the middle of parsing. + */ + + + endGroups() { + this.macros.endGroups(); + } + /** + * Returns the topmost token on the stack, without expanding it. + * Similar in behavior to TeX's `\futurelet`. + */ + + + future() { + if (this.stack.length === 0) { + this.pushToken(this.lexer.lex()); + } + + return this.stack[this.stack.length - 1]; + } + /** + * Remove and return the next unexpanded token. + */ + + + popToken() { + this.future(); // ensure non-empty stack + + return this.stack.pop(); + } + /** + * Add a given token to the token stack. In particular, this get be used + * to put back a token returned from one of the other methods. + */ + + + pushToken(token) { + this.stack.push(token); + } + /** + * Append an array of tokens to the token stack. + */ + + + pushTokens(tokens) { + this.stack.push(...tokens); + } + /** + * Find an macro argument without expanding tokens and append the array of + * tokens to the token stack. Uses Token as a container for the result. + */ + + + scanArgument(isOptional) { + var start; + var end; + var tokens; + + if (isOptional) { + this.consumeSpaces(); // \@ifnextchar gobbles any space following it + + if (this.future().text !== "[") { + return null; + } + + start = this.popToken(); // don't include [ in tokens + + ({ + tokens, + end + } = this.consumeArg(["]"])); + } else { + ({ + tokens, + start, + end + } = this.consumeArg()); + } // indicate the end of an argument + + + this.pushToken(new Token("EOF", end.loc)); + this.pushTokens(tokens); + return start.range(end, ""); + } + /** + * Consume all following space tokens, without expansion. + */ + + + consumeSpaces() { + for (;;) { + var token = this.future(); + + if (token.text === " ") { + this.stack.pop(); + } else { + break; + } + } + } + /** + * Consume an argument from the token stream, and return the resulting array + * of tokens and start/end token. + */ + + + consumeArg(delims) { + // The argument for a delimited parameter is the shortest (possibly + // empty) sequence of tokens with properly nested {...} groups that is + // followed ... by this particular list of non-parameter tokens. + // The argument for an undelimited parameter is the next nonblank + // token, unless that token is ‘{’, when the argument will be the + // entire {...} group that follows. + var tokens = []; + var isDelimited = delims && delims.length > 0; + + if (!isDelimited) { + // Ignore spaces between arguments. As the TeXbook says: + // "After you have said ‘\def\row#1#2{...}’, you are allowed to + // put spaces between the arguments (e.g., ‘\row x n’), because + // TeX doesn’t use single spaces as undelimited arguments." + this.consumeSpaces(); + } + + var start = this.future(); + var tok; + var depth = 0; + var match = 0; + + do { + tok = this.popToken(); + tokens.push(tok); + + if (tok.text === "{") { + ++depth; + } else if (tok.text === "}") { + --depth; + + if (depth === -1) { + throw new ParseError("Extra }", tok); + } + } else if (tok.text === "EOF") { + throw new ParseError("Unexpected end of input in a macro argument" + ", expected '" + (delims && isDelimited ? delims[match] : "}") + "'", tok); + } + + if (delims && isDelimited) { + if ((depth === 0 || depth === 1 && delims[match] === "{") && tok.text === delims[match]) { + ++match; + + if (match === delims.length) { + // don't include delims in tokens + tokens.splice(-match, match); + break; + } + } else { + match = 0; + } + } + } while (depth !== 0 || isDelimited); // If the argument found ... has the form ‘{}’, + // ... the outermost braces enclosing the argument are removed + + + if (start.text === "{" && tokens[tokens.length - 1].text === "}") { + tokens.pop(); + tokens.shift(); + } + + tokens.reverse(); // to fit in with stack order + + return { + tokens, + start, + end: tok + }; + } + /** + * Consume the specified number of (delimited) arguments from the token + * stream and return the resulting array of arguments. + */ + + + consumeArgs(numArgs, delimiters) { + if (delimiters) { + if (delimiters.length !== numArgs + 1) { + throw new ParseError("The length of delimiters doesn't match the number of args!"); + } + + var delims = delimiters[0]; + + for (var i = 0; i < delims.length; i++) { + var tok = this.popToken(); + + if (delims[i] !== tok.text) { + throw new ParseError("Use of the macro doesn't match its definition", tok); + } + } + } + + var args = []; + + for (var _i = 0; _i < numArgs; _i++) { + args.push(this.consumeArg(delimiters && delimiters[_i + 1]).tokens); + } + + return args; + } + /** + * Increment `expansionCount` by the specified amount. + * Throw an error if it exceeds `maxExpand`. + */ + + + countExpansion(amount) { + this.expansionCount += amount; + + if (this.expansionCount > this.settings.maxExpand) { + throw new ParseError("Too many expansions: infinite loop or " + "need to increase maxExpand setting"); + } + } + /** + * Expand the next token only once if possible. + * + * If the token is expanded, the resulting tokens will be pushed onto + * the stack in reverse order, and the number of such tokens will be + * returned. This number might be zero or positive. + * + * If not, the return value is `false`, and the next token remains at the + * top of the stack. + * + * In either case, the next token will be on the top of the stack, + * or the stack will be empty (in case of empty expansion + * and no other tokens). + * + * Used to implement `expandAfterFuture` and `expandNextToken`. + * + * If expandableOnly, only expandable tokens are expanded and + * an undefined control sequence results in an error. + */ + + + expandOnce(expandableOnly) { + var topToken = this.popToken(); + var name = topToken.text; + var expansion = !topToken.noexpand ? this._getExpansion(name) : null; + + if (expansion == null || expandableOnly && expansion.unexpandable) { + if (expandableOnly && expansion == null && name[0] === "\\" && !this.isDefined(name)) { + throw new ParseError("Undefined control sequence: " + name); + } + + this.pushToken(topToken); + return false; + } + + this.countExpansion(1); + var tokens = expansion.tokens; + var args = this.consumeArgs(expansion.numArgs, expansion.delimiters); + + if (expansion.numArgs) { + // paste arguments in place of the placeholders + tokens = tokens.slice(); // make a shallow copy + + for (var i = tokens.length - 1; i >= 0; --i) { + var tok = tokens[i]; + + if (tok.text === "#") { + if (i === 0) { + throw new ParseError("Incomplete placeholder at end of macro body", tok); + } + + tok = tokens[--i]; // next token on stack + + if (tok.text === "#") { + // ## → # + tokens.splice(i + 1, 1); // drop first # + } else if (/^[1-9]$/.test(tok.text)) { + // replace the placeholder with the indicated argument + tokens.splice(i, 2, ...args[+tok.text - 1]); + } else { + throw new ParseError("Not a valid argument number", tok); + } + } + } + } // Concatenate expansion onto top of stack. + + + this.pushTokens(tokens); + return tokens.length; + } + /** + * Expand the next token only once (if possible), and return the resulting + * top token on the stack (without removing anything from the stack). + * Similar in behavior to TeX's `\expandafter\futurelet`. + * Equivalent to expandOnce() followed by future(). + */ + + + expandAfterFuture() { + this.expandOnce(); + return this.future(); + } + /** + * Recursively expand first token, then return first non-expandable token. + */ + + + expandNextToken() { + for (;;) { + if (this.expandOnce() === false) { + // fully expanded + var token = this.stack.pop(); // the token after \noexpand is interpreted as if its meaning + // were ‘\relax’ + + if (token.treatAsRelax) { + token.text = "\\relax"; + } + + return token; + } + } // Flow unable to figure out that this pathway is impossible. + // https://github.com/facebook/flow/issues/4808 + + + throw new Error(); // eslint-disable-line no-unreachable + } + /** + * Fully expand the given macro name and return the resulting list of + * tokens, or return `undefined` if no such macro is defined. + */ + + + expandMacro(name) { + return this.macros.has(name) ? this.expandTokens([new Token(name)]) : undefined; + } + /** + * Fully expand the given token stream and return the resulting list of + * tokens. Note that the input tokens are in reverse order, but the + * output tokens are in forward order. + */ + + + expandTokens(tokens) { + var output = []; + var oldStackLength = this.stack.length; + this.pushTokens(tokens); + + while (this.stack.length > oldStackLength) { + // Expand only expandable tokens + if (this.expandOnce(true) === false) { + // fully expanded + var token = this.stack.pop(); + + if (token.treatAsRelax) { + // the expansion of \noexpand is the token itself + token.noexpand = false; + token.treatAsRelax = false; + } + + output.push(token); + } + } // Count all of these tokens as additional expansions, to prevent + // exponential blowup from linearly many \edef's. + + + this.countExpansion(output.length); + return output; + } + /** + * Fully expand the given macro name and return the result as a string, + * or return `undefined` if no such macro is defined. + */ + + + expandMacroAsText(name) { + var tokens = this.expandMacro(name); + + if (tokens) { + return tokens.map(token => token.text).join(""); + } else { + return tokens; + } + } + /** + * Returns the expanded macro as a reversed array of tokens and a macro + * argument count. Or returns `null` if no such macro. + */ + + + _getExpansion(name) { + var definition = this.macros.get(name); + + if (definition == null) { + // mainly checking for undefined here + return definition; + } // If a single character has an associated catcode other than 13 + // (active character), then don't expand it. + + + if (name.length === 1) { + var catcode = this.lexer.catcodes[name]; + + if (catcode != null && catcode !== 13) { + return; + } + } + + var expansion = typeof definition === "function" ? definition(this) : definition; + + if (typeof expansion === "string") { + var numArgs = 0; + + if (expansion.indexOf("#") !== -1) { + var stripped = expansion.replace(/##/g, ""); + + while (stripped.indexOf("#" + (numArgs + 1)) !== -1) { + ++numArgs; + } + } + + var bodyLexer = new Lexer(expansion, this.settings); + var tokens = []; + var tok = bodyLexer.lex(); + + while (tok.text !== "EOF") { + tokens.push(tok); + tok = bodyLexer.lex(); + } + + tokens.reverse(); // to fit in with stack using push and pop + + var expanded = { + tokens, + numArgs + }; + return expanded; + } + + return expansion; + } + /** + * Determine whether a command is currently "defined" (has some + * functionality), meaning that it's a macro (in the current group), + * a function, a symbol, or one of the special commands listed in + * `implicitCommands`. + */ + + + isDefined(name) { + return this.macros.has(name) || functions.hasOwnProperty(name) || symbols.math.hasOwnProperty(name) || symbols.text.hasOwnProperty(name) || implicitCommands.hasOwnProperty(name); + } + /** + * Determine whether a command is expandable. + */ + + + isExpandable(name) { + var macro = this.macros.get(name); + return macro != null ? typeof macro === "string" || typeof macro === "function" || !macro.unexpandable : functions.hasOwnProperty(name) && !functions[name].primitive; + } + +} + +// Helpers for Parser.js handling of Unicode (sub|super)script characters. +var unicodeSubRegEx = /^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/; +var uSubsAndSups = Object.freeze({ + '₊': '+', + '₋': '-', + '₌': '=', + '₍': '(', + '₎': ')', + '₀': '0', + '₁': '1', + '₂': '2', + '₃': '3', + '₄': '4', + '₅': '5', + '₆': '6', + '₇': '7', + '₈': '8', + '₉': '9', + '\u2090': 'a', + '\u2091': 'e', + '\u2095': 'h', + '\u1D62': 'i', + '\u2C7C': 'j', + '\u2096': 'k', + '\u2097': 'l', + '\u2098': 'm', + '\u2099': 'n', + '\u2092': 'o', + '\u209A': 'p', + '\u1D63': 'r', + '\u209B': 's', + '\u209C': 't', + '\u1D64': 'u', + '\u1D65': 'v', + '\u2093': 'x', + '\u1D66': 'β', + '\u1D67': 'γ', + '\u1D68': 'ρ', + '\u1D69': '\u03d5', + '\u1D6A': 'χ', + '⁺': '+', + '⁻': '-', + '⁼': '=', + '⁽': '(', + '⁾': ')', + '⁰': '0', + '¹': '1', + '²': '2', + '³': '3', + '⁴': '4', + '⁵': '5', + '⁶': '6', + '⁷': '7', + '⁸': '8', + '⁹': '9', + '\u1D2C': 'A', + '\u1D2E': 'B', + '\u1D30': 'D', + '\u1D31': 'E', + '\u1D33': 'G', + '\u1D34': 'H', + '\u1D35': 'I', + '\u1D36': 'J', + '\u1D37': 'K', + '\u1D38': 'L', + '\u1D39': 'M', + '\u1D3A': 'N', + '\u1D3C': 'O', + '\u1D3E': 'P', + '\u1D3F': 'R', + '\u1D40': 'T', + '\u1D41': 'U', + '\u2C7D': 'V', + '\u1D42': 'W', + '\u1D43': 'a', + '\u1D47': 'b', + '\u1D9C': 'c', + '\u1D48': 'd', + '\u1D49': 'e', + '\u1DA0': 'f', + '\u1D4D': 'g', + '\u02B0': 'h', + '\u2071': 'i', + '\u02B2': 'j', + '\u1D4F': 'k', + '\u02E1': 'l', + '\u1D50': 'm', + '\u207F': 'n', + '\u1D52': 'o', + '\u1D56': 'p', + '\u02B3': 'r', + '\u02E2': 's', + '\u1D57': 't', + '\u1D58': 'u', + '\u1D5B': 'v', + '\u02B7': 'w', + '\u02E3': 'x', + '\u02B8': 'y', + '\u1DBB': 'z', + '\u1D5D': 'β', + '\u1D5E': 'γ', + '\u1D5F': 'δ', + '\u1D60': '\u03d5', + '\u1D61': 'χ', + '\u1DBF': 'θ' +}); + +/* eslint no-constant-condition:0 */ + +var unicodeAccents = { + "́": { + "text": "\\'", + "math": "\\acute" + }, + "̀": { + "text": "\\`", + "math": "\\grave" + }, + "̈": { + "text": "\\\"", + "math": "\\ddot" + }, + "̃": { + "text": "\\~", + "math": "\\tilde" + }, + "̄": { + "text": "\\=", + "math": "\\bar" + }, + "̆": { + "text": "\\u", + "math": "\\breve" + }, + "̌": { + "text": "\\v", + "math": "\\check" + }, + "̂": { + "text": "\\^", + "math": "\\hat" + }, + "̇": { + "text": "\\.", + "math": "\\dot" + }, + "̊": { + "text": "\\r", + "math": "\\mathring" + }, + "̋": { + "text": "\\H" + }, + "̧": { + "text": "\\c" + } +}; +var unicodeSymbols = { + "á": "á", + "à": "à", + "ä": "ä", + "ǟ": "ǟ", + "ã": "ã", + "ā": "ā", + "ă": "ă", + "ắ": "ắ", + "ằ": "ằ", + "ẵ": "ẵ", + "ǎ": "ǎ", + "â": "â", + "ấ": "ấ", + "ầ": "ầ", + "ẫ": "ẫ", + "ȧ": "ȧ", + "ǡ": "ǡ", + "å": "å", + "ǻ": "ǻ", + "ḃ": "ḃ", + "ć": "ć", + "ḉ": "ḉ", + "č": "č", + "ĉ": "ĉ", + "ċ": "ċ", + "ç": "ç", + "ď": "ď", + "ḋ": "ḋ", + "ḑ": "ḑ", + "é": "é", + "è": "è", + "ë": "ë", + "ẽ": "ẽ", + "ē": "ē", + "ḗ": "ḗ", + "ḕ": "ḕ", + "ĕ": "ĕ", + "ḝ": "ḝ", + "ě": "ě", + "ê": "ê", + "ế": "ế", + "ề": "ề", + "ễ": "ễ", + "ė": "ė", + "ȩ": "ȩ", + "ḟ": "ḟ", + "ǵ": "ǵ", + "ḡ": "ḡ", + "ğ": "ğ", + "ǧ": "ǧ", + "ĝ": "ĝ", + "ġ": "ġ", + "ģ": "ģ", + "ḧ": "ḧ", + "ȟ": "ȟ", + "ĥ": "ĥ", + "ḣ": "ḣ", + "ḩ": "ḩ", + "í": "í", + "ì": "ì", + "ï": "ï", + "ḯ": "ḯ", + "ĩ": "ĩ", + "ī": "ī", + "ĭ": "ĭ", + "ǐ": "ǐ", + "î": "î", + "ǰ": "ǰ", + "ĵ": "ĵ", + "ḱ": "ḱ", + "ǩ": "ǩ", + "ķ": "ķ", + "ĺ": "ĺ", + "ľ": "ľ", + "ļ": "ļ", + "ḿ": "ḿ", + "ṁ": "ṁ", + "ń": "ń", + "ǹ": "ǹ", + "ñ": "ñ", + "ň": "ň", + "ṅ": "ṅ", + "ņ": "ņ", + "ó": "ó", + "ò": "ò", + "ö": "ö", + "ȫ": "ȫ", + "õ": "õ", + "ṍ": "ṍ", + "ṏ": "ṏ", + "ȭ": "ȭ", + "ō": "ō", + "ṓ": "ṓ", + "ṑ": "ṑ", + "ŏ": "ŏ", + "ǒ": "ǒ", + "ô": "ô", + "ố": "ố", + "ồ": "ồ", + "ỗ": "ỗ", + "ȯ": "ȯ", + "ȱ": "ȱ", + "ő": "ő", + "ṕ": "ṕ", + "ṗ": "ṗ", + "ŕ": "ŕ", + "ř": "ř", + "ṙ": "ṙ", + "ŗ": "ŗ", + "ś": "ś", + "ṥ": "ṥ", + "š": "š", + "ṧ": "ṧ", + "ŝ": "ŝ", + "ṡ": "ṡ", + "ş": "ş", + "ẗ": "ẗ", + "ť": "ť", + "ṫ": "ṫ", + "ţ": "ţ", + "ú": "ú", + "ù": "ù", + "ü": "ü", + "ǘ": "ǘ", + "ǜ": "ǜ", + "ǖ": "ǖ", + "ǚ": "ǚ", + "ũ": "ũ", + "ṹ": "ṹ", + "ū": "ū", + "ṻ": "ṻ", + "ŭ": "ŭ", + "ǔ": "ǔ", + "û": "û", + "ů": "ů", + "ű": "ű", + "ṽ": "ṽ", + "ẃ": "ẃ", + "ẁ": "ẁ", + "ẅ": "ẅ", + "ŵ": "ŵ", + "ẇ": "ẇ", + "ẘ": "ẘ", + "ẍ": "ẍ", + "ẋ": "ẋ", + "ý": "ý", + "ỳ": "ỳ", + "ÿ": "ÿ", + "ỹ": "ỹ", + "ȳ": "ȳ", + "ŷ": "ŷ", + "ẏ": "ẏ", + "ẙ": "ẙ", + "ź": "ź", + "ž": "ž", + "ẑ": "ẑ", + "ż": "ż", + "Á": "Á", + "À": "À", + "Ä": "Ä", + "Ǟ": "Ǟ", + "Ã": "Ã", + "Ā": "Ā", + "Ă": "Ă", + "Ắ": "Ắ", + "Ằ": "Ằ", + "Ẵ": "Ẵ", + "Ǎ": "Ǎ", + "Â": "Â", + "Ấ": "Ấ", + "Ầ": "Ầ", + "Ẫ": "Ẫ", + "Ȧ": "Ȧ", + "Ǡ": "Ǡ", + "Å": "Å", + "Ǻ": "Ǻ", + "Ḃ": "Ḃ", + "Ć": "Ć", + "Ḉ": "Ḉ", + "Č": "Č", + "Ĉ": "Ĉ", + "Ċ": "Ċ", + "Ç": "Ç", + "Ď": "Ď", + "Ḋ": "Ḋ", + "Ḑ": "Ḑ", + "É": "É", + "È": "È", + "Ë": "Ë", + "Ẽ": "Ẽ", + "Ē": "Ē", + "Ḗ": "Ḗ", + "Ḕ": "Ḕ", + "Ĕ": "Ĕ", + "Ḝ": "Ḝ", + "Ě": "Ě", + "Ê": "Ê", + "Ế": "Ế", + "Ề": "Ề", + "Ễ": "Ễ", + "Ė": "Ė", + "Ȩ": "Ȩ", + "Ḟ": "Ḟ", + "Ǵ": "Ǵ", + "Ḡ": "Ḡ", + "Ğ": "Ğ", + "Ǧ": "Ǧ", + "Ĝ": "Ĝ", + "Ġ": "Ġ", + "Ģ": "Ģ", + "Ḧ": "Ḧ", + "Ȟ": "Ȟ", + "Ĥ": "Ĥ", + "Ḣ": "Ḣ", + "Ḩ": "Ḩ", + "Í": "Í", + "Ì": "Ì", + "Ï": "Ï", + "Ḯ": "Ḯ", + "Ĩ": "Ĩ", + "Ī": "Ī", + "Ĭ": "Ĭ", + "Ǐ": "Ǐ", + "Î": "Î", + "İ": "İ", + "Ĵ": "Ĵ", + "Ḱ": "Ḱ", + "Ǩ": "Ǩ", + "Ķ": "Ķ", + "Ĺ": "Ĺ", + "Ľ": "Ľ", + "Ļ": "Ļ", + "Ḿ": "Ḿ", + "Ṁ": "Ṁ", + "Ń": "Ń", + "Ǹ": "Ǹ", + "Ñ": "Ñ", + "Ň": "Ň", + "Ṅ": "Ṅ", + "Ņ": "Ņ", + "Ó": "Ó", + "Ò": "Ò", + "Ö": "Ö", + "Ȫ": "Ȫ", + "Õ": "Õ", + "Ṍ": "Ṍ", + "Ṏ": "Ṏ", + "Ȭ": "Ȭ", + "Ō": "Ō", + "Ṓ": "Ṓ", + "Ṑ": "Ṑ", + "Ŏ": "Ŏ", + "Ǒ": "Ǒ", + "Ô": "Ô", + "Ố": "Ố", + "Ồ": "Ồ", + "Ỗ": "Ỗ", + "Ȯ": "Ȯ", + "Ȱ": "Ȱ", + "Ő": "Ő", + "Ṕ": "Ṕ", + "Ṗ": "Ṗ", + "Ŕ": "Ŕ", + "Ř": "Ř", + "Ṙ": "Ṙ", + "Ŗ": "Ŗ", + "Ś": "Ś", + "Ṥ": "Ṥ", + "Š": "Š", + "Ṧ": "Ṧ", + "Ŝ": "Ŝ", + "Ṡ": "Ṡ", + "Ş": "Ş", + "Ť": "Ť", + "Ṫ": "Ṫ", + "Ţ": "Ţ", + "Ú": "Ú", + "Ù": "Ù", + "Ü": "Ü", + "Ǘ": "Ǘ", + "Ǜ": "Ǜ", + "Ǖ": "Ǖ", + "Ǚ": "Ǚ", + "Ũ": "Ũ", + "Ṹ": "Ṹ", + "Ū": "Ū", + "Ṻ": "Ṻ", + "Ŭ": "Ŭ", + "Ǔ": "Ǔ", + "Û": "Û", + "Ů": "Ů", + "Ű": "Ű", + "Ṽ": "Ṽ", + "Ẃ": "Ẃ", + "Ẁ": "Ẁ", + "Ẅ": "Ẅ", + "Ŵ": "Ŵ", + "Ẇ": "Ẇ", + "Ẍ": "Ẍ", + "Ẋ": "Ẋ", + "Ý": "Ý", + "Ỳ": "Ỳ", + "Ÿ": "Ÿ", + "Ỹ": "Ỹ", + "Ȳ": "Ȳ", + "Ŷ": "Ŷ", + "Ẏ": "Ẏ", + "Ź": "Ź", + "Ž": "Ž", + "Ẑ": "Ẑ", + "Ż": "Ż", + "ά": "ά", + "ὰ": "ὰ", + "ᾱ": "ᾱ", + "ᾰ": "ᾰ", + "έ": "έ", + "ὲ": "ὲ", + "ή": "ή", + "ὴ": "ὴ", + "ί": "ί", + "ὶ": "ὶ", + "ϊ": "ϊ", + "ΐ": "ΐ", + "ῒ": "ῒ", + "ῑ": "ῑ", + "ῐ": "ῐ", + "ό": "ό", + "ὸ": "ὸ", + "ύ": "ύ", + "ὺ": "ὺ", + "ϋ": "ϋ", + "ΰ": "ΰ", + "ῢ": "ῢ", + "ῡ": "ῡ", + "ῠ": "ῠ", + "ώ": "ώ", + "ὼ": "ὼ", + "Ύ": "Ύ", + "Ὺ": "Ὺ", + "Ϋ": "Ϋ", + "Ῡ": "Ῡ", + "Ῠ": "Ῠ", + "Ώ": "Ώ", + "Ὼ": "Ὼ" +}; + +/** + * This file contains the parser used to parse out a TeX expression from the + * input. Since TeX isn't context-free, standard parsers don't work particularly + * well. + * + * The strategy of this parser is as such: + * + * The main functions (the `.parse...` ones) take a position in the current + * parse string to parse tokens from. The lexer (found in Lexer.js, stored at + * this.gullet.lexer) also supports pulling out tokens at arbitrary places. When + * individual tokens are needed at a position, the lexer is called to pull out a + * token, which is then used. + * + * The parser has a property called "mode" indicating the mode that + * the parser is currently in. Currently it has to be one of "math" or + * "text", which denotes whether the current environment is a math-y + * one or a text-y one (e.g. inside \text). Currently, this serves to + * limit the functions which can be used in text mode. + * + * The main functions then return an object which contains the useful data that + * was parsed at its given point, and a new position at the end of the parsed + * data. The main functions can call each other and continue the parsing by + * using the returned position as a new starting point. + * + * There are also extra `.handle...` functions, which pull out some reused + * functionality into self-contained functions. + * + * The functions return ParseNodes. + */ +class Parser { + constructor(input, settings) { + this.mode = void 0; + this.gullet = void 0; + this.settings = void 0; + this.leftrightDepth = void 0; + this.nextToken = void 0; + // Start in math mode + this.mode = "math"; // Create a new macro expander (gullet) and (indirectly via that) also a + // new lexer (mouth) for this parser (stomach, in the language of TeX) + + this.gullet = new MacroExpander(input, settings, this.mode); // Store the settings for use in parsing + + this.settings = settings; // Count leftright depth (for \middle errors) + + this.leftrightDepth = 0; + } + /** + * Checks a result to make sure it has the right type, and throws an + * appropriate error otherwise. + */ + + + expect(text, consume) { + if (consume === void 0) { + consume = true; + } + + if (this.fetch().text !== text) { + throw new ParseError("Expected '" + text + "', got '" + this.fetch().text + "'", this.fetch()); + } + + if (consume) { + this.consume(); + } + } + /** + * Discards the current lookahead token, considering it consumed. + */ + + + consume() { + this.nextToken = null; + } + /** + * Return the current lookahead token, or if there isn't one (at the + * beginning, or if the previous lookahead token was consume()d), + * fetch the next token as the new lookahead token and return it. + */ + + + fetch() { + if (this.nextToken == null) { + this.nextToken = this.gullet.expandNextToken(); + } + + return this.nextToken; + } + /** + * Switches between "text" and "math" modes. + */ + + + switchMode(newMode) { + this.mode = newMode; + this.gullet.switchMode(newMode); + } + /** + * Main parsing function, which parses an entire input. + */ + + + parse() { + if (!this.settings.globalGroup) { + // Create a group namespace for the math expression. + // (LaTeX creates a new group for every $...$, $$...$$, \[...\].) + this.gullet.beginGroup(); + } // Use old \color behavior (same as LaTeX's \textcolor) if requested. + // We do this within the group for the math expression, so it doesn't + // pollute settings.macros. + + + if (this.settings.colorIsTextColor) { + this.gullet.macros.set("\\color", "\\textcolor"); + } + + try { + // Try to parse the input + var parse = this.parseExpression(false); // If we succeeded, make sure there's an EOF at the end + + this.expect("EOF"); // End the group namespace for the expression + + if (!this.settings.globalGroup) { + this.gullet.endGroup(); + } + + return parse; // Close any leftover groups in case of a parse error. + } finally { + this.gullet.endGroups(); + } + } + /** + * Fully parse a separate sequence of tokens as a separate job. + * Tokens should be specified in reverse order, as in a MacroDefinition. + */ + + + subparse(tokens) { + // Save the next token from the current job. + var oldToken = this.nextToken; + this.consume(); // Run the new job, terminating it with an excess '}' + + this.gullet.pushToken(new Token("}")); + this.gullet.pushTokens(tokens); + var parse = this.parseExpression(false); + this.expect("}"); // Restore the next token from the current job. + + this.nextToken = oldToken; + return parse; + } + + /** + * Parses an "expression", which is a list of atoms. + * + * `breakOnInfix`: Should the parsing stop when we hit infix nodes? This + * happens when functions have higher precedence han infix + * nodes in implicit parses. + * + * `breakOnTokenText`: The text of the token that the expression should end + * with, or `null` if something else should end the + * expression. + */ + parseExpression(breakOnInfix, breakOnTokenText) { + var body = []; // Keep adding atoms to the body until we can't parse any more atoms (either + // we reached the end, a }, or a \right) + + while (true) { + // Ignore spaces in math mode + if (this.mode === "math") { + this.consumeSpaces(); + } + + var lex = this.fetch(); + + if (Parser.endOfExpression.indexOf(lex.text) !== -1) { + break; + } + + if (breakOnTokenText && lex.text === breakOnTokenText) { + break; + } + + if (breakOnInfix && functions[lex.text] && functions[lex.text].infix) { + break; + } + + var atom = this.parseAtom(breakOnTokenText); + + if (!atom) { + break; + } else if (atom.type === "internal") { + continue; + } + + body.push(atom); + } + + if (this.mode === "text") { + this.formLigatures(body); + } + + return this.handleInfixNodes(body); + } + /** + * Rewrites infix operators such as \over with corresponding commands such + * as \frac. + * + * There can only be one infix operator per group. If there's more than one + * then the expression is ambiguous. This can be resolved by adding {}. + */ + + + handleInfixNodes(body) { + var overIndex = -1; + var funcName; + + for (var i = 0; i < body.length; i++) { + if (body[i].type === "infix") { + if (overIndex !== -1) { + throw new ParseError("only one infix operator per group", body[i].token); + } + + overIndex = i; + funcName = body[i].replaceWith; + } + } + + if (overIndex !== -1 && funcName) { + var numerNode; + var denomNode; + var numerBody = body.slice(0, overIndex); + var denomBody = body.slice(overIndex + 1); + + if (numerBody.length === 1 && numerBody[0].type === "ordgroup") { + numerNode = numerBody[0]; + } else { + numerNode = { + type: "ordgroup", + mode: this.mode, + body: numerBody + }; + } + + if (denomBody.length === 1 && denomBody[0].type === "ordgroup") { + denomNode = denomBody[0]; + } else { + denomNode = { + type: "ordgroup", + mode: this.mode, + body: denomBody + }; + } + + var node; + + if (funcName === "\\\\abovefrac") { + node = this.callFunction(funcName, [numerNode, body[overIndex], denomNode], []); + } else { + node = this.callFunction(funcName, [numerNode, denomNode], []); + } + + return [node]; + } else { + return body; + } + } + /** + * Handle a subscript or superscript with nice errors. + */ + + + handleSupSubscript(name // For error reporting. + ) { + var symbolToken = this.fetch(); + var symbol = symbolToken.text; + this.consume(); + this.consumeSpaces(); // ignore spaces before sup/subscript argument + + var group = this.parseGroup(name); + + if (!group) { + throw new ParseError("Expected group after '" + symbol + "'", symbolToken); + } + + return group; + } + /** + * Converts the textual input of an unsupported command into a text node + * contained within a color node whose color is determined by errorColor + */ + + + formatUnsupportedCmd(text) { + var textordArray = []; + + for (var i = 0; i < text.length; i++) { + textordArray.push({ + type: "textord", + mode: "text", + text: text[i] + }); + } + + var textNode = { + type: "text", + mode: this.mode, + body: textordArray + }; + var colorNode = { + type: "color", + mode: this.mode, + color: this.settings.errorColor, + body: [textNode] + }; + return colorNode; + } + /** + * Parses a group with optional super/subscripts. + */ + + + parseAtom(breakOnTokenText) { + // The body of an atom is an implicit group, so that things like + // \left(x\right)^2 work correctly. + var base = this.parseGroup("atom", breakOnTokenText); // In text mode, we don't have superscripts or subscripts + + if (this.mode === "text") { + return base; + } // Note that base may be empty (i.e. null) at this point. + + + var superscript; + var subscript; + + while (true) { + // Guaranteed in math mode, so eat any spaces first. + this.consumeSpaces(); // Lex the first token + + var lex = this.fetch(); + + if (lex.text === "\\limits" || lex.text === "\\nolimits") { + // We got a limit control + if (base && base.type === "op") { + var limits = lex.text === "\\limits"; + base.limits = limits; + base.alwaysHandleSupSub = true; + } else if (base && base.type === "operatorname") { + if (base.alwaysHandleSupSub) { + base.limits = lex.text === "\\limits"; + } + } else { + throw new ParseError("Limit controls must follow a math operator", lex); + } + + this.consume(); + } else if (lex.text === "^") { + // We got a superscript start + if (superscript) { + throw new ParseError("Double superscript", lex); + } + + superscript = this.handleSupSubscript("superscript"); + } else if (lex.text === "_") { + // We got a subscript start + if (subscript) { + throw new ParseError("Double subscript", lex); + } + + subscript = this.handleSupSubscript("subscript"); + } else if (lex.text === "'") { + // We got a prime + if (superscript) { + throw new ParseError("Double superscript", lex); + } + + var prime = { + type: "textord", + mode: this.mode, + text: "\\prime" + }; // Many primes can be grouped together, so we handle this here + + var primes = [prime]; + this.consume(); // Keep lexing tokens until we get something that's not a prime + + while (this.fetch().text === "'") { + // For each one, add another prime to the list + primes.push(prime); + this.consume(); + } // If there's a superscript following the primes, combine that + // superscript in with the primes. + + + if (this.fetch().text === "^") { + primes.push(this.handleSupSubscript("superscript")); + } // Put everything into an ordgroup as the superscript + + + superscript = { + type: "ordgroup", + mode: this.mode, + body: primes + }; + } else if (uSubsAndSups[lex.text]) { + // A Unicode subscript or superscript character. + // We treat these similarly to the unicode-math package. + // So we render a string of Unicode (sub|super)scripts the + // same as a (sub|super)script of regular characters. + var isSub = unicodeSubRegEx.test(lex.text); + var subsupTokens = []; + subsupTokens.push(new Token(uSubsAndSups[lex.text])); + this.consume(); // Continue fetching tokens to fill out the string. + + while (true) { + var token = this.fetch().text; + + if (!uSubsAndSups[token]) { + break; + } + + if (unicodeSubRegEx.test(token) !== isSub) { + break; + } + + subsupTokens.unshift(new Token(uSubsAndSups[token])); + this.consume(); + } // Now create a (sub|super)script. + + + var body = this.subparse(subsupTokens); + + if (isSub) { + subscript = { + type: "ordgroup", + mode: "math", + body + }; + } else { + superscript = { + type: "ordgroup", + mode: "math", + body + }; + } + } else { + // If it wasn't ^, _, or ', stop parsing super/subscripts + break; + } + } // Base must be set if superscript or subscript are set per logic above, + // but need to check here for type check to pass. + + + if (superscript || subscript) { + // If we got either a superscript or subscript, create a supsub + return { + type: "supsub", + mode: this.mode, + base: base, + sup: superscript, + sub: subscript + }; + } else { + // Otherwise return the original body + return base; + } + } + /** + * Parses an entire function, including its base and all of its arguments. + */ + + + parseFunction(breakOnTokenText, name // For determining its context + ) { + var token = this.fetch(); + var func = token.text; + var funcData = functions[func]; + + if (!funcData) { + return null; + } + + this.consume(); // consume command token + + if (name && name !== "atom" && !funcData.allowedInArgument) { + throw new ParseError("Got function '" + func + "' with no arguments" + (name ? " as " + name : ""), token); + } else if (this.mode === "text" && !funcData.allowedInText) { + throw new ParseError("Can't use function '" + func + "' in text mode", token); + } else if (this.mode === "math" && funcData.allowedInMath === false) { + throw new ParseError("Can't use function '" + func + "' in math mode", token); + } + + var { + args, + optArgs + } = this.parseArguments(func, funcData); + return this.callFunction(func, args, optArgs, token, breakOnTokenText); + } + /** + * Call a function handler with a suitable context and arguments. + */ + + + callFunction(name, args, optArgs, token, breakOnTokenText) { + var context = { + funcName: name, + parser: this, + token, + breakOnTokenText + }; + var func = functions[name]; + + if (func && func.handler) { + return func.handler(context, args, optArgs); + } else { + throw new ParseError("No function handler for " + name); + } + } + /** + * Parses the arguments of a function or environment + */ + + + parseArguments(func, // Should look like "\name" or "\begin{name}". + funcData) { + var totalArgs = funcData.numArgs + funcData.numOptionalArgs; + + if (totalArgs === 0) { + return { + args: [], + optArgs: [] + }; + } + + var args = []; + var optArgs = []; + + for (var i = 0; i < totalArgs; i++) { + var argType = funcData.argTypes && funcData.argTypes[i]; + var isOptional = i < funcData.numOptionalArgs; + + if (funcData.primitive && argType == null || // \sqrt expands into primitive if optional argument doesn't exist + funcData.type === "sqrt" && i === 1 && optArgs[0] == null) { + argType = "primitive"; + } + + var arg = this.parseGroupOfType("argument to '" + func + "'", argType, isOptional); + + if (isOptional) { + optArgs.push(arg); + } else if (arg != null) { + args.push(arg); + } else { + // should be unreachable + throw new ParseError("Null argument, please report this as a bug"); + } + } + + return { + args, + optArgs + }; + } + /** + * Parses a group when the mode is changing. + */ + + + parseGroupOfType(name, type, optional) { + switch (type) { + case "color": + return this.parseColorGroup(optional); + + case "size": + return this.parseSizeGroup(optional); + + case "url": + return this.parseUrlGroup(optional); + + case "math": + case "text": + return this.parseArgumentGroup(optional, type); + + case "hbox": + { + // hbox argument type wraps the argument in the equivalent of + // \hbox, which is like \text but switching to \textstyle size. + var group = this.parseArgumentGroup(optional, "text"); + return group != null ? { + type: "styling", + mode: group.mode, + body: [group], + style: "text" // simulate \textstyle + + } : null; + } + + case "raw": + { + var token = this.parseStringGroup("raw", optional); + return token != null ? { + type: "raw", + mode: "text", + string: token.text + } : null; + } + + case "primitive": + { + if (optional) { + throw new ParseError("A primitive argument cannot be optional"); + } + + var _group = this.parseGroup(name); + + if (_group == null) { + throw new ParseError("Expected group as " + name, this.fetch()); + } + + return _group; + } + + case "original": + case null: + case undefined: + return this.parseArgumentGroup(optional); + + default: + throw new ParseError("Unknown group type as " + name, this.fetch()); + } + } + /** + * Discard any space tokens, fetching the next non-space token. + */ + + + consumeSpaces() { + while (this.fetch().text === " ") { + this.consume(); + } + } + /** + * Parses a group, essentially returning the string formed by the + * brace-enclosed tokens plus some position information. + */ + + + parseStringGroup(modeName, // Used to describe the mode in error messages. + optional) { + var argToken = this.gullet.scanArgument(optional); + + if (argToken == null) { + return null; + } + + var str = ""; + var nextToken; + + while ((nextToken = this.fetch()).text !== "EOF") { + str += nextToken.text; + this.consume(); + } + + this.consume(); // consume the end of the argument + + argToken.text = str; + return argToken; + } + /** + * Parses a regex-delimited group: the largest sequence of tokens + * whose concatenated strings match `regex`. Returns the string + * formed by the tokens plus some position information. + */ + + + parseRegexGroup(regex, modeName // Used to describe the mode in error messages. + ) { + var firstToken = this.fetch(); + var lastToken = firstToken; + var str = ""; + var nextToken; + + while ((nextToken = this.fetch()).text !== "EOF" && regex.test(str + nextToken.text)) { + lastToken = nextToken; + str += lastToken.text; + this.consume(); + } + + if (str === "") { + throw new ParseError("Invalid " + modeName + ": '" + firstToken.text + "'", firstToken); + } + + return firstToken.range(lastToken, str); + } + /** + * Parses a color description. + */ + + + parseColorGroup(optional) { + var res = this.parseStringGroup("color", optional); + + if (res == null) { + return null; + } + + var match = /^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(res.text); + + if (!match) { + throw new ParseError("Invalid color: '" + res.text + "'", res); + } + + var color = match[0]; + + if (/^[0-9a-f]{6}$/i.test(color)) { + // We allow a 6-digit HTML color spec without a leading "#". + // This follows the xcolor package's HTML color model. + // Predefined color names are all missed by this RegEx pattern. + color = "#" + color; + } + + return { + type: "color-token", + mode: this.mode, + color + }; + } + /** + * Parses a size specification, consisting of magnitude and unit. + */ + + + parseSizeGroup(optional) { + var res; + var isBlank = false; // don't expand before parseStringGroup + + this.gullet.consumeSpaces(); + + if (!optional && this.gullet.future().text !== "{") { + res = this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/, "size"); + } else { + res = this.parseStringGroup("size", optional); + } + + if (!res) { + return null; + } + + if (!optional && res.text.length === 0) { + // Because we've tested for what is !optional, this block won't + // affect \kern, \hspace, etc. It will capture the mandatory arguments + // to \genfrac and \above. + res.text = "0pt"; // Enable \above{} + + isBlank = true; // This is here specifically for \genfrac + } + + var match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(res.text); + + if (!match) { + throw new ParseError("Invalid size: '" + res.text + "'", res); + } + + var data = { + number: +(match[1] + match[2]), + // sign + magnitude, cast to number + unit: match[3] + }; + + if (!validUnit(data)) { + throw new ParseError("Invalid unit: '" + data.unit + "'", res); + } + + return { + type: "size", + mode: this.mode, + value: data, + isBlank + }; + } + /** + * Parses an URL, checking escaped letters and allowed protocols, + * and setting the catcode of % as an active character (as in \hyperref). + */ + + + parseUrlGroup(optional) { + this.gullet.lexer.setCatcode("%", 13); // active character + + this.gullet.lexer.setCatcode("~", 12); // other character + + var res = this.parseStringGroup("url", optional); + this.gullet.lexer.setCatcode("%", 14); // comment character + + this.gullet.lexer.setCatcode("~", 13); // active character + + if (res == null) { + return null; + } // hyperref package allows backslashes alone in href, but doesn't + // generate valid links in such cases; we interpret this as + // "undefined" behaviour, and keep them as-is. Some browser will + // replace backslashes with forward slashes. + + + var url = res.text.replace(/\\([#$%&~_^{}])/g, '$1'); + return { + type: "url", + mode: this.mode, + url + }; + } + /** + * Parses an argument with the mode specified. + */ + + + parseArgumentGroup(optional, mode) { + var argToken = this.gullet.scanArgument(optional); + + if (argToken == null) { + return null; + } + + var outerMode = this.mode; + + if (mode) { + // Switch to specified mode + this.switchMode(mode); + } + + this.gullet.beginGroup(); + var expression = this.parseExpression(false, "EOF"); // TODO: find an alternative way to denote the end + + this.expect("EOF"); // expect the end of the argument + + this.gullet.endGroup(); + var result = { + type: "ordgroup", + mode: this.mode, + loc: argToken.loc, + body: expression + }; + + if (mode) { + // Switch mode back + this.switchMode(outerMode); + } + + return result; + } + /** + * Parses an ordinary group, which is either a single nucleus (like "x") + * or an expression in braces (like "{x+y}") or an implicit group, a group + * that starts at the current position, and ends right before a higher explicit + * group ends, or at EOF. + */ + + + parseGroup(name, // For error reporting. + breakOnTokenText) { + var firstToken = this.fetch(); + var text = firstToken.text; + var result; // Try to parse an open brace or \begingroup + + if (text === "{" || text === "\\begingroup") { + this.consume(); + var groupEnd = text === "{" ? "}" : "\\endgroup"; + this.gullet.beginGroup(); // If we get a brace, parse an expression + + var expression = this.parseExpression(false, groupEnd); + var lastToken = this.fetch(); + this.expect(groupEnd); // Check that we got a matching closing brace + + this.gullet.endGroup(); + result = { + type: "ordgroup", + mode: this.mode, + loc: SourceLocation.range(firstToken, lastToken), + body: expression, + // A group formed by \begingroup...\endgroup is a semi-simple group + // which doesn't affect spacing in math mode, i.e., is transparent. + // https://tex.stackexchange.com/questions/1930/when-should-one- + // use-begingroup-instead-of-bgroup + semisimple: text === "\\begingroup" || undefined + }; + } else { + // If there exists a function with this name, parse the function. + // Otherwise, just return a nucleus + result = this.parseFunction(breakOnTokenText, name) || this.parseSymbol(); + + if (result == null && text[0] === "\\" && !implicitCommands.hasOwnProperty(text)) { + if (this.settings.throwOnError) { + throw new ParseError("Undefined control sequence: " + text, firstToken); + } + + result = this.formatUnsupportedCmd(text); + this.consume(); + } + } + + return result; + } + /** + * Form ligature-like combinations of characters for text mode. + * This includes inputs like "--", "---", "``" and "''". + * The result will simply replace multiple textord nodes with a single + * character in each value by a single textord node having multiple + * characters in its value. The representation is still ASCII source. + * The group will be modified in place. + */ + + + formLigatures(group) { + var n = group.length - 1; + + for (var i = 0; i < n; ++i) { + var a = group[i]; // $FlowFixMe: Not every node type has a `text` property. + + var v = a.text; + + if (v === "-" && group[i + 1].text === "-") { + if (i + 1 < n && group[i + 2].text === "-") { + group.splice(i, 3, { + type: "textord", + mode: "text", + loc: SourceLocation.range(a, group[i + 2]), + text: "---" + }); + n -= 2; + } else { + group.splice(i, 2, { + type: "textord", + mode: "text", + loc: SourceLocation.range(a, group[i + 1]), + text: "--" + }); + n -= 1; + } + } + + if ((v === "'" || v === "`") && group[i + 1].text === v) { + group.splice(i, 2, { + type: "textord", + mode: "text", + loc: SourceLocation.range(a, group[i + 1]), + text: v + v + }); + n -= 1; + } + } + } + /** + * Parse a single symbol out of the string. Here, we handle single character + * symbols and special functions like \verb. + */ + + + parseSymbol() { + var nucleus = this.fetch(); + var text = nucleus.text; + + if (/^\\verb[^a-zA-Z]/.test(text)) { + this.consume(); + var arg = text.slice(5); + var star = arg.charAt(0) === "*"; + + if (star) { + arg = arg.slice(1); + } // Lexer's tokenRegex is constructed to always have matching + // first/last characters. + + + if (arg.length < 2 || arg.charAt(0) !== arg.slice(-1)) { + throw new ParseError("\\verb assertion failed --\n please report what input caused this bug"); + } + + arg = arg.slice(1, -1); // remove first and last char + + return { + type: "verb", + mode: "text", + body: arg, + star + }; + } // At this point, we should have a symbol, possibly with accents. + // First expand any accented base symbol according to unicodeSymbols. + + + if (unicodeSymbols.hasOwnProperty(text[0]) && !symbols[this.mode][text[0]]) { + // This behavior is not strict (XeTeX-compatible) in math mode. + if (this.settings.strict && this.mode === "math") { + this.settings.reportNonstrict("unicodeTextInMathMode", "Accented Unicode text character \"" + text[0] + "\" used in " + "math mode", nucleus); + } + + text = unicodeSymbols[text[0]] + text.slice(1); + } // Strip off any combining characters + + + var match = combiningDiacriticalMarksEndRegex.exec(text); + + if (match) { + text = text.substring(0, match.index); + + if (text === 'i') { + text = '\u0131'; // dotless i, in math and text mode + } else if (text === 'j') { + text = '\u0237'; // dotless j, in math and text mode + } + } // Recognize base symbol + + + var symbol; + + if (symbols[this.mode][text]) { + if (this.settings.strict && this.mode === 'math' && extraLatin.indexOf(text) >= 0) { + this.settings.reportNonstrict("unicodeTextInMathMode", "Latin-1/Unicode text character \"" + text[0] + "\" used in " + "math mode", nucleus); + } + + var group = symbols[this.mode][text].group; + var loc = SourceLocation.range(nucleus); + var s; + + if (ATOMS.hasOwnProperty(group)) { + // $FlowFixMe + var family = group; + s = { + type: "atom", + mode: this.mode, + family, + loc, + text + }; + } else { + // $FlowFixMe + s = { + type: group, + mode: this.mode, + loc, + text + }; + } // $FlowFixMe + + + symbol = s; + } else if (text.charCodeAt(0) >= 0x80) { + // no symbol for e.g. ^ + if (this.settings.strict) { + if (!supportedCodepoint(text.charCodeAt(0))) { + this.settings.reportNonstrict("unknownSymbol", "Unrecognized Unicode character \"" + text[0] + "\"" + (" (" + text.charCodeAt(0) + ")"), nucleus); + } else if (this.mode === "math") { + this.settings.reportNonstrict("unicodeTextInMathMode", "Unicode text character \"" + text[0] + "\" used in math mode", nucleus); + } + } // All nonmathematical Unicode characters are rendered as if they + // are in text mode (wrapped in \text) because that's what it + // takes to render them in LaTeX. Setting `mode: this.mode` is + // another natural choice (the user requested math mode), but + // this makes it more difficult for getCharacterMetrics() to + // distinguish Unicode characters without metrics and those for + // which we want to simulate the letter M. + + + symbol = { + type: "textord", + mode: "text", + loc: SourceLocation.range(nucleus), + text + }; + } else { + return null; // EOF, ^, _, {, }, etc. + } + + this.consume(); // Transform combining characters into accents + + if (match) { + for (var i = 0; i < match[0].length; i++) { + var accent = match[0][i]; + + if (!unicodeAccents[accent]) { + throw new ParseError("Unknown accent ' " + accent + "'", nucleus); + } + + var command = unicodeAccents[accent][this.mode] || unicodeAccents[accent].text; + + if (!command) { + throw new ParseError("Accent " + accent + " unsupported in " + this.mode + " mode", nucleus); + } + + symbol = { + type: "accent", + mode: this.mode, + loc: SourceLocation.range(nucleus), + label: command, + isStretchy: false, + isShifty: true, + // $FlowFixMe + base: symbol + }; + } + } // $FlowFixMe + + + return symbol; + } + +} +Parser.endOfExpression = ["}", "\\endgroup", "\\end", "\\right", "&"]; + +/** + * Provides a single function for parsing an expression using a Parser + * TODO(emily): Remove this + */ + +/** + * Parses an expression using a Parser, then returns the parsed result. + */ +var parseTree = function parseTree(toParse, settings) { + if (!(typeof toParse === 'string' || toParse instanceof String)) { + throw new TypeError('KaTeX can only parse string typed expression'); + } + + var parser = new Parser(toParse, settings); // Blank out any \df@tag to avoid spurious "Duplicate \tag" errors + + delete parser.gullet.macros.current["\\df@tag"]; + var tree = parser.parse(); // Prevent a color definition from persisting between calls to katex.render(). + + delete parser.gullet.macros.current["\\current@color"]; + delete parser.gullet.macros.current["\\color"]; // If the input used \tag, it will set the \df@tag macro to the tag. + // In this case, we separately parse the tag and wrap the tree. + + if (parser.gullet.macros.get("\\df@tag")) { + if (!settings.displayMode) { + throw new ParseError("\\tag works only in display equations"); + } + + tree = [{ + type: "tag", + mode: "text", + body: tree, + tag: parser.subparse([new Token("\\df@tag")]) + }]; + } + + return tree; +}; + +/* eslint no-console:0 */ + +/** + * Parse and build an expression, and place that expression in the DOM node + * given. + */ +var render = function render(expression, baseNode, options) { + baseNode.textContent = ""; + var node = renderToDomTree(expression, options).toNode(); + baseNode.appendChild(node); +}; // KaTeX's styles don't work properly in quirks mode. Print out an error, and +// disable rendering. + + +if (typeof document !== "undefined") { + if (document.compatMode !== "CSS1Compat") { + typeof console !== "undefined" && console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your " + "website has a suitable doctype."); + + render = function render() { + throw new ParseError("KaTeX doesn't work in quirks mode."); + }; + } +} +/** + * Parse and build an expression, and return the markup for that. + */ + + +var renderToString = function renderToString(expression, options) { + var markup = renderToDomTree(expression, options).toMarkup(); + return markup; +}; +/** + * Parse an expression and return the parse tree. + */ + + +var generateParseTree = function generateParseTree(expression, options) { + var settings = new Settings(options); + return parseTree(expression, settings); +}; +/** + * If the given error is a KaTeX ParseError and options.throwOnError is false, + * renders the invalid LaTeX as a span with hover title giving the KaTeX + * error message. Otherwise, simply throws the error. + */ + + +var renderError = function renderError(error, expression, options) { + if (options.throwOnError || !(error instanceof ParseError)) { + throw error; + } + + var node = buildCommon.makeSpan(["katex-error"], [new SymbolNode(expression)]); + node.setAttribute("title", error.toString()); + node.setAttribute("style", "color:" + options.errorColor); + return node; +}; +/** + * Generates and returns the katex build tree. This is used for advanced + * use cases (like rendering to custom output). + */ + + +var renderToDomTree = function renderToDomTree(expression, options) { + var settings = new Settings(options); + + try { + var tree = parseTree(expression, settings); + return buildTree(tree, expression, settings); + } catch (error) { + return renderError(error, expression, settings); + } +}; +/** + * Generates and returns the katex build tree, with just HTML (no MathML). + * This is used for advanced use cases (like rendering to custom output). + */ + + +var renderToHTMLTree = function renderToHTMLTree(expression, options) { + var settings = new Settings(options); + + try { + var tree = parseTree(expression, settings); + return buildHTMLTree(tree, expression, settings); + } catch (error) { + return renderError(error, expression, settings); + } +}; + +var katex = { + /** + * Current KaTeX version + */ + version: "0.16.10", + + /** + * Renders the given LaTeX into an HTML+MathML combination, and adds + * it as a child to the specified DOM node. + */ + render, + + /** + * Renders the given LaTeX into an HTML+MathML combination string, + * for sending to the client. + */ + renderToString, + + /** + * KaTeX error, usually during parsing. + */ + ParseError, + + /** + * The shema of Settings + */ + SETTINGS_SCHEMA, + + /** + * Parses the given LaTeX into KaTeX's internal parse tree structure, + * without rendering to HTML or MathML. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __parse: generateParseTree, + + /** + * Renders the given LaTeX into an HTML+MathML internal DOM tree + * representation, without flattening that representation to a string. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __renderToDomTree: renderToDomTree, + + /** + * Renders the given LaTeX into an HTML internal DOM tree representation, + * without MathML and without flattening that representation to a string. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __renderToHTMLTree: renderToHTMLTree, + + /** + * extends internal font metrics object with a new object + * each key in the new object represents a font name + */ + __setFontMetrics: setFontMetrics, + + /** + * adds a new symbol to builtin symbols table + */ + __defineSymbol: defineSymbol, + + /** + * adds a new function to builtin function list, + * which directly produce parse tree elements + * and have their own html/mathml builders + */ + __defineFunction: defineFunction, + + /** + * adds a new macro to builtin macro list + */ + __defineMacro: defineMacro, + + /** + * Expose the dom tree node types, which can be useful for type checking nodes. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __domTree: { + Span, + Anchor, + SymbolNode, + SvgNode, + PathNode, + LineNode + } +}; + + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/1303.2eab4989.js b/assets/js/1303.2eab4989.js new file mode 100644 index 0000000000..ac88a90f9b --- /dev/null +++ b/assets/js/1303.2eab4989.js @@ -0,0 +1,2 @@ +/*! For license information please see 1303.2eab4989.js.LICENSE.txt */ +(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1303],{87799:function(e,t,n){var r;r=function(e){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.i=function(e){return e},n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=7)}([function(t,n){t.exports=e},function(e,t,n){"use strict";var r=n(0).FDLayoutConstants;function i(){}for(var a in r)i[a]=r[a];i.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,i.DEFAULT_RADIAL_SEPARATION=r.DEFAULT_EDGE_LENGTH,i.DEFAULT_COMPONENT_SEPERATION=60,i.TILE=!0,i.TILING_PADDING_VERTICAL=10,i.TILING_PADDING_HORIZONTAL=10,i.TREE_REDUCTION_ON_INCREMENTAL=!1,e.exports=i},function(e,t,n){"use strict";var r=n(0).FDLayoutEdge;function i(e,t,n){r.call(this,e,t,n)}for(var a in i.prototype=Object.create(r.prototype),r)i[a]=r[a];e.exports=i},function(e,t,n){"use strict";var r=n(0).LGraph;function i(e,t,n){r.call(this,e,t,n)}for(var a in i.prototype=Object.create(r.prototype),r)i[a]=r[a];e.exports=i},function(e,t,n){"use strict";var r=n(0).LGraphManager;function i(e){r.call(this,e)}for(var a in i.prototype=Object.create(r.prototype),r)i[a]=r[a];e.exports=i},function(e,t,n){"use strict";var r=n(0).FDLayoutNode,i=n(0).IMath;function a(e,t,n,i){r.call(this,e,t,n,i)}for(var o in a.prototype=Object.create(r.prototype),r)a[o]=r[o];a.prototype.move=function(){var e=this.graphManager.getLayout();this.displacementX=e.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY=e.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren,Math.abs(this.displacementX)>e.coolingFactor*e.maxNodeDisplacement&&(this.displacementX=e.coolingFactor*e.maxNodeDisplacement*i.sign(this.displacementX)),Math.abs(this.displacementY)>e.coolingFactor*e.maxNodeDisplacement&&(this.displacementY=e.coolingFactor*e.maxNodeDisplacement*i.sign(this.displacementY)),null==this.child||0==this.child.getNodes().length?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),e.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},a.prototype.propogateDisplacementToChildren=function(e,t){for(var n,r=this.getChild().getNodes(),i=0;i0)this.positionNodesRadially(e);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var t=new Set(this.getAllNodes()),n=this.nodesWithGravity.filter((function(e){return t.has(e)}));this.graphManager.setAllNodesToApplyGravitation(n),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},m.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished){if(!(this.prunedNodesAll.length>0))return!0;this.isTreeGrowing=!0}if(this.totalIterations%u.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged()){if(!(this.prunedNodesAll.length>0))return!0;this.isTreeGrowing=!0}this.coolingCycle++,0==this.layoutQuality?this.coolingAdjuster=this.coolingCycle:1==this.layoutQuality&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var e=new Set(this.getAllNodes()),t=this.nodesWithGravity.filter((function(t){return e.has(t)}));this.graphManager.setAllNodesToApplyGravitation(t),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=u.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=u.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var n=!this.isTreeGrowing&&!this.isGrowthFinished,r=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(n,r),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},m.prototype.getPositionsData=function(){for(var e=this.graphManager.getAllNodes(),t={},n=0;n1)for(s=0;sr&&(r=Math.floor(o.y)),a=Math.floor(o.x+l.DEFAULT_COMPONENT_SEPERATION)}this.transform(new d(c.WORLD_CENTER_X-o.x/2,c.WORLD_CENTER_Y-o.y/2))},m.radialLayout=function(e,t,n){var r=Math.max(this.maxDiagonalInTree(e),l.DEFAULT_RADIAL_SEPARATION);m.branchRadialLayout(t,null,0,359,0,r);var i=v.calculateBounds(e),a=new y;a.setDeviceOrgX(i.getMinX()),a.setDeviceOrgY(i.getMinY()),a.setWorldOrgX(n.x),a.setWorldOrgY(n.y);for(var o=0;o1;){var y=v[0];v.splice(0,1);var b=c.indexOf(y);b>=0&&c.splice(b,1),g--,h--}d=null!=t?(c.indexOf(v[0])+1)%g:0;for(var x=Math.abs(r-n)/h,w=d;p!=h;w=++w%g){var E=c[w].getOtherEnd(e);if(E!=t){var _=(n+p*x)%360,T=(_+x)%360;m.branchRadialLayout(E,e,_,T,i+a,a),p++}}},m.maxDiagonalInTree=function(e){for(var t=g.MIN_VALUE,n=0;nt&&(t=r)}return t},m.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},m.prototype.groupZeroDegreeMembers=function(){var e=this,t={};this.memberGroups={},this.idToDummyNode={};for(var n=[],r=this.graphManager.getAllNodes(),i=0;i1){var r="DummyCompound_"+n;e.memberGroups[r]=t[n];var i=t[n][0].getParent(),a=new o(e.graphManager);a.id=r,a.paddingLeft=i.paddingLeft||0,a.paddingRight=i.paddingRight||0,a.paddingBottom=i.paddingBottom||0,a.paddingTop=i.paddingTop||0,e.idToDummyNode[r]=a;var s=e.getGraphManager().add(e.newGraph(),a),l=i.getChild();l.add(a);for(var u=0;u=0;e--){var t=this.compoundOrder[e],n=t.id,r=t.paddingLeft,i=t.paddingTop;this.adjustLocations(this.tiledMemberPack[n],t.rect.x,t.rect.y,r,i)}},m.prototype.repopulateZeroDegreeMembers=function(){var e=this,t=this.tiledZeroDegreePack;Object.keys(t).forEach((function(n){var r=e.idToDummyNode[n],i=r.paddingLeft,a=r.paddingTop;e.adjustLocations(t[n],r.rect.x,r.rect.y,i,a)}))},m.prototype.getToBeTiled=function(e){var t=e.id;if(null!=this.toBeTiled[t])return this.toBeTiled[t];var n=e.getChild();if(null==n)return this.toBeTiled[t]=!1,!1;for(var r=n.getNodes(),i=0;i0)return this.toBeTiled[t]=!1,!1;if(null!=a.getChild()){if(!this.getToBeTiled(a))return this.toBeTiled[t]=!1,!1}else this.toBeTiled[a.id]=!1}return this.toBeTiled[t]=!0,!0},m.prototype.getNodeDegree=function(e){e.id;for(var t=e.getEdges(),n=0,r=0;rl&&(l=c.rect.height)}n+=l+e.verticalPadding}},m.prototype.tileCompoundMembers=function(e,t){var n=this;this.tiledMemberPack=[],Object.keys(e).forEach((function(r){var i=t[r];n.tiledMemberPack[r]=n.tileNodes(e[r],i.paddingLeft+i.paddingRight),i.rect.width=n.tiledMemberPack[r].width,i.rect.height=n.tiledMemberPack[r].height}))},m.prototype.tileNodes=function(e,t){var n={rows:[],rowWidth:[],rowHeight:[],width:0,height:t,verticalPadding:l.TILING_PADDING_VERTICAL,horizontalPadding:l.TILING_PADDING_HORIZONTAL};e.sort((function(e,t){return e.rect.width*e.rect.height>t.rect.width*t.rect.height?-1:e.rect.width*e.rect.height0&&(a+=e.horizontalPadding),e.rowWidth[n]=a,e.width0&&(o+=e.verticalPadding);var s=0;o>e.rowHeight[n]&&(s=e.rowHeight[n],e.rowHeight[n]=o,s=e.rowHeight[n]-s),e.height+=s,e.rows[n].push(t)},m.prototype.getShortestRowIndex=function(e){for(var t=-1,n=Number.MAX_VALUE,r=0;rn&&(t=r,n=e.rowWidth[r]);return t},m.prototype.canAddHorizontal=function(e,t,n){var r=this.getShortestRowIndex(e);if(r<0)return!0;var i=e.rowWidth[r];if(i+e.horizontalPadding+t<=e.width)return!0;var a,o,s=0;return e.rowHeight[r]0&&(s=n+e.verticalPadding-e.rowHeight[r]),a=e.width-i>=t+e.horizontalPadding?(e.height+s)/(i+t+e.horizontalPadding):(e.height+s)/e.width,s=n+e.verticalPadding,(o=e.widtha&&t!=n){r.splice(-1,1),e.rows[n].push(i),e.rowWidth[t]=e.rowWidth[t]-a,e.rowWidth[n]=e.rowWidth[n]+a,e.width=e.rowWidth[instance.getLongestRowIndex(e)];for(var o=Number.MIN_VALUE,s=0;so&&(o=r[s].height);t>0&&(o+=e.verticalPadding);var l=e.rowHeight[t]+e.rowHeight[n];e.rowHeight[t]=o,e.rowHeight[n]0)for(var c=i;c<=a;c++)l[0]+=this.grid[c][o-1].length+this.grid[c][o].length-1;if(a0)for(c=o;c<=s;c++)l[3]+=this.grid[i-1][c].length+this.grid[i][c].length-1;for(var h,d,p=g.MAX_VALUE,f=0;f0&&(o=n.getGraphManager().add(n.newGraph(),a),this.processChildrenList(o,h,n))}},h.prototype.stop=function(){return this.stopped=!0,this};var p=function(e){e("layout","cose-bilkent",h)};"undefined"!=typeof cytoscape&&p(cytoscape),e.exports=p}])},e.exports=r(n(87799))},23143:function(e){var t;t=function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.i=function(e){return e},n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=26)}([function(e,t,n){"use strict";function r(){}r.QUALITY=1,r.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,r.DEFAULT_INCREMENTAL=!1,r.DEFAULT_ANIMATION_ON_LAYOUT=!0,r.DEFAULT_ANIMATION_DURING_LAYOUT=!1,r.DEFAULT_ANIMATION_PERIOD=50,r.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,r.DEFAULT_GRAPH_MARGIN=15,r.NODE_DIMENSIONS_INCLUDE_LABELS=!1,r.SIMPLE_NODE_SIZE=40,r.SIMPLE_NODE_HALF_SIZE=r.SIMPLE_NODE_SIZE/2,r.EMPTY_COMPOUND_NODE_SIZE=40,r.MIN_EDGE_LENGTH=1,r.WORLD_BOUNDARY=1e6,r.INITIAL_WORLD_BOUNDARY=r.WORLD_BOUNDARY/1e3,r.WORLD_CENTER_X=1200,r.WORLD_CENTER_Y=900,e.exports=r},function(e,t,n){"use strict";var r=n(2),i=n(8),a=n(9);function o(e,t,n){r.call(this,n),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=n,this.bendpoints=[],this.source=e,this.target=t}for(var s in o.prototype=Object.create(r.prototype),r)o[s]=r[s];o.prototype.getSource=function(){return this.source},o.prototype.getTarget=function(){return this.target},o.prototype.isInterGraph=function(){return this.isInterGraph},o.prototype.getLength=function(){return this.length},o.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},o.prototype.getBendpoints=function(){return this.bendpoints},o.prototype.getLca=function(){return this.lca},o.prototype.getSourceInLca=function(){return this.sourceInLca},o.prototype.getTargetInLca=function(){return this.targetInLca},o.prototype.getOtherEnd=function(e){if(this.source===e)return this.target;if(this.target===e)return this.source;throw"Node is not incident with this edge"},o.prototype.getOtherEndInGraph=function(e,t){for(var n=this.getOtherEnd(e),r=t.getGraphManager().getRoot();;){if(n.getOwner()==t)return n;if(n.getOwner()==r)break;n=n.getOwner().getParent()}return null},o.prototype.updateLength=function(){var e=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),e),this.isOverlapingSourceAndTarget||(this.lengthX=e[0]-e[2],this.lengthY=e[1]-e[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},o.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},e.exports=o},function(e,t,n){"use strict";e.exports=function(e){this.vGraphObject=e}},function(e,t,n){"use strict";var r=n(2),i=n(10),a=n(13),o=n(0),s=n(16),l=n(4);function u(e,t,n,o){null==n&&null==o&&(o=t),r.call(this,o),null!=e.graphManager&&(e=e.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=o,this.edges=[],this.graphManager=e,this.rect=null!=n&&null!=t?new a(t.x,t.y,n.width,n.height):new a}for(var c in u.prototype=Object.create(r.prototype),r)u[c]=r[c];u.prototype.getEdges=function(){return this.edges},u.prototype.getChild=function(){return this.child},u.prototype.getOwner=function(){return this.owner},u.prototype.getWidth=function(){return this.rect.width},u.prototype.setWidth=function(e){this.rect.width=e},u.prototype.getHeight=function(){return this.rect.height},u.prototype.setHeight=function(e){this.rect.height=e},u.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},u.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},u.prototype.getCenter=function(){return new l(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},u.prototype.getLocation=function(){return new l(this.rect.x,this.rect.y)},u.prototype.getRect=function(){return this.rect},u.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},u.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},u.prototype.setRect=function(e,t){this.rect.x=e.x,this.rect.y=e.y,this.rect.width=t.width,this.rect.height=t.height},u.prototype.setCenter=function(e,t){this.rect.x=e-this.rect.width/2,this.rect.y=t-this.rect.height/2},u.prototype.setLocation=function(e,t){this.rect.x=e,this.rect.y=t},u.prototype.moveBy=function(e,t){this.rect.x+=e,this.rect.y+=t},u.prototype.getEdgeListToNode=function(e){var t=[],n=this;return n.edges.forEach((function(r){if(r.target==e){if(r.source!=n)throw"Incorrect edge source!";t.push(r)}})),t},u.prototype.getEdgesBetween=function(e){var t=[],n=this;return n.edges.forEach((function(r){if(r.source!=n&&r.target!=n)throw"Incorrect edge source and/or target";r.target!=e&&r.source!=e||t.push(r)})),t},u.prototype.getNeighborsList=function(){var e=new Set,t=this;return t.edges.forEach((function(n){if(n.source==t)e.add(n.target);else{if(n.target!=t)throw"Incorrect incidency!";e.add(n.source)}})),e},u.prototype.withChildren=function(){var e=new Set;if(e.add(this),null!=this.child)for(var t=this.child.getNodes(),n=0;nt&&(this.rect.x-=(this.labelWidth-t)/2,this.setWidth(this.labelWidth)),this.labelHeight>n&&("center"==this.labelPos?this.rect.y-=(this.labelHeight-n)/2:"top"==this.labelPos&&(this.rect.y-=this.labelHeight-n),this.setHeight(this.labelHeight))}}},u.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},u.prototype.transform=function(e){var t=this.rect.x;t>o.WORLD_BOUNDARY?t=o.WORLD_BOUNDARY:t<-o.WORLD_BOUNDARY&&(t=-o.WORLD_BOUNDARY);var n=this.rect.y;n>o.WORLD_BOUNDARY?n=o.WORLD_BOUNDARY:n<-o.WORLD_BOUNDARY&&(n=-o.WORLD_BOUNDARY);var r=new l(t,n),i=e.inverseTransformPoint(r);this.setLocation(i.x,i.y)},u.prototype.getLeft=function(){return this.rect.x},u.prototype.getRight=function(){return this.rect.x+this.rect.width},u.prototype.getTop=function(){return this.rect.y},u.prototype.getBottom=function(){return this.rect.y+this.rect.height},u.prototype.getParent=function(){return null==this.owner?null:this.owner.getParent()},e.exports=u},function(e,t,n){"use strict";function r(e,t){null==e&&null==t?(this.x=0,this.y=0):(this.x=e,this.y=t)}r.prototype.getX=function(){return this.x},r.prototype.getY=function(){return this.y},r.prototype.setX=function(e){this.x=e},r.prototype.setY=function(e){this.y=e},r.prototype.getDifference=function(e){return new DimensionD(this.x-e.x,this.y-e.y)},r.prototype.getCopy=function(){return new r(this.x,this.y)},r.prototype.translate=function(e){return this.x+=e.width,this.y+=e.height,this},e.exports=r},function(e,t,n){"use strict";var r=n(2),i=n(10),a=n(0),o=n(6),s=n(3),l=n(1),u=n(13),c=n(12),h=n(11);function d(e,t,n){r.call(this,n),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=e,null!=t&&t instanceof o?this.graphManager=t:null!=t&&t instanceof Layout&&(this.graphManager=t.graphManager)}for(var p in d.prototype=Object.create(r.prototype),r)d[p]=r[p];d.prototype.getNodes=function(){return this.nodes},d.prototype.getEdges=function(){return this.edges},d.prototype.getGraphManager=function(){return this.graphManager},d.prototype.getParent=function(){return this.parent},d.prototype.getLeft=function(){return this.left},d.prototype.getRight=function(){return this.right},d.prototype.getTop=function(){return this.top},d.prototype.getBottom=function(){return this.bottom},d.prototype.isConnected=function(){return this.isConnected},d.prototype.add=function(e,t,n){if(null==t&&null==n){var r=e;if(null==this.graphManager)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(r)>-1)throw"Node already in graph!";return r.owner=this,this.getNodes().push(r),r}var i=e;if(!(this.getNodes().indexOf(t)>-1&&this.getNodes().indexOf(n)>-1))throw"Source or target not in graph!";if(t.owner!=n.owner||t.owner!=this)throw"Both owners must be this graph!";return t.owner!=n.owner?null:(i.source=t,i.target=n,i.isInterGraph=!1,this.getEdges().push(i),t.edges.push(i),n!=t&&n.edges.push(i),i)},d.prototype.remove=function(e){var t=e;if(e instanceof s){if(null==t)throw"Node is null!";if(null==t.owner||t.owner!=this)throw"Owner graph is invalid!";if(null==this.graphManager)throw"Owner graph manager is invalid!";for(var n=t.edges.slice(),r=n.length,i=0;i-1&&c>-1))throw"Source and/or target doesn't know this edge!";if(a.source.edges.splice(u,1),a.target!=a.source&&a.target.edges.splice(c,1),-1==(o=a.source.owner.getEdges().indexOf(a)))throw"Not in owner's edge list!";a.source.owner.getEdges().splice(o,1)}},d.prototype.updateLeftTop=function(){for(var e,t,n,r=i.MAX_VALUE,a=i.MAX_VALUE,o=this.getNodes(),s=o.length,l=0;l(e=u.getTop())&&(r=e),a>(t=u.getLeft())&&(a=t)}return r==i.MAX_VALUE?null:(n=null!=o[0].getParent().paddingLeft?o[0].getParent().paddingLeft:this.margin,this.left=a-n,this.top=r-n,new c(this.left,this.top))},d.prototype.updateBounds=function(e){for(var t,n,r,a,o,s=i.MAX_VALUE,l=-i.MAX_VALUE,c=i.MAX_VALUE,h=-i.MAX_VALUE,d=this.nodes,p=d.length,g=0;g(t=f.getLeft())&&(s=t),l<(n=f.getRight())&&(l=n),c>(r=f.getTop())&&(c=r),h<(a=f.getBottom())&&(h=a)}var v=new u(s,c,l-s,h-c);s==i.MAX_VALUE&&(this.left=this.parent.getLeft(),this.right=this.parent.getRight(),this.top=this.parent.getTop(),this.bottom=this.parent.getBottom()),o=null!=d[0].getParent().paddingLeft?d[0].getParent().paddingLeft:this.margin,this.left=v.x-o,this.right=v.x+v.width+o,this.top=v.y-o,this.bottom=v.y+v.height+o},d.calculateBounds=function(e){for(var t,n,r,a,o=i.MAX_VALUE,s=-i.MAX_VALUE,l=i.MAX_VALUE,c=-i.MAX_VALUE,h=e.length,d=0;d(t=p.getLeft())&&(o=t),s<(n=p.getRight())&&(s=n),l>(r=p.getTop())&&(l=r),c<(a=p.getBottom())&&(c=a)}return new u(o,l,s-o,c-l)},d.prototype.getInclusionTreeDepth=function(){return this==this.graphManager.getRoot()?1:this.parent.getInclusionTreeDepth()},d.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},d.prototype.calcEstimatedSize=function(){for(var e=0,t=this.nodes,n=t.length,r=0;r=this.nodes.length){var l=0;i.forEach((function(t){t.owner==e&&l++})),l==this.nodes.length&&(this.isConnected=!0)}}else this.isConnected=!0},e.exports=d},function(e,t,n){"use strict";var r,i=n(1);function a(e){r=n(5),this.layout=e,this.graphs=[],this.edges=[]}a.prototype.addRoot=function(){var e=this.layout.newGraph(),t=this.layout.newNode(null),n=this.add(e,t);return this.setRootGraph(n),this.rootGraph},a.prototype.add=function(e,t,n,r,i){if(null==n&&null==r&&null==i){if(null==e)throw"Graph is null!";if(null==t)throw"Parent node is null!";if(this.graphs.indexOf(e)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(e),null!=e.parent)throw"Already has a parent!";if(null!=t.child)throw"Already has a child!";return e.parent=t,t.child=e,e}i=n,n=e;var a=(r=t).getOwner(),o=i.getOwner();if(null==a||a.getGraphManager()!=this)throw"Source not in this graph mgr!";if(null==o||o.getGraphManager()!=this)throw"Target not in this graph mgr!";if(a==o)return n.isInterGraph=!1,a.add(n,r,i);if(n.isInterGraph=!0,n.source=r,n.target=i,this.edges.indexOf(n)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(n),null==n.source||null==n.target)throw"Edge source and/or target is null!";if(-1!=n.source.edges.indexOf(n)||-1!=n.target.edges.indexOf(n))throw"Edge already in source and/or target incidency list!";return n.source.edges.push(n),n.target.edges.push(n),n},a.prototype.remove=function(e){if(e instanceof r){var t=e;if(t.getGraphManager()!=this)throw"Graph not in this graph mgr";if(t!=this.rootGraph&&(null==t.parent||t.parent.graphManager!=this))throw"Invalid parent node!";for(var n,a=[],o=(a=a.concat(t.getEdges())).length,s=0;s=t.getRight()?n[0]+=Math.min(t.getX()-e.getX(),e.getRight()-t.getRight()):t.getX()<=e.getX()&&t.getRight()>=e.getRight()&&(n[0]+=Math.min(e.getX()-t.getX(),t.getRight()-e.getRight())),e.getY()<=t.getY()&&e.getBottom()>=t.getBottom()?n[1]+=Math.min(t.getY()-e.getY(),e.getBottom()-t.getBottom()):t.getY()<=e.getY()&&t.getBottom()>=e.getBottom()&&(n[1]+=Math.min(e.getY()-t.getY(),t.getBottom()-e.getBottom()));var a=Math.abs((t.getCenterY()-e.getCenterY())/(t.getCenterX()-e.getCenterX()));t.getCenterY()===e.getCenterY()&&t.getCenterX()===e.getCenterX()&&(a=1);var o=a*n[0],s=n[1]/a;n[0]o)return n[0]=r,n[1]=l,n[2]=a,n[3]=b,!1;if(ia)return n[0]=s,n[1]=i,n[2]=y,n[3]=o,!1;if(ra?(n[0]=c,n[1]=h,_=!0):(n[0]=u,n[1]=l,_=!0):D===N&&(r>a?(n[0]=s,n[1]=l,_=!0):(n[0]=d,n[1]=h,_=!0)),-C===N?a>r?(n[2]=m,n[3]=b,T=!0):(n[2]=y,n[3]=v,T=!0):C===N&&(a>r?(n[2]=f,n[3]=v,T=!0):(n[2]=x,n[3]=b,T=!0)),_&&T)return!1;if(r>a?i>o?(A=this.getCardinalDirection(D,N,4),L=this.getCardinalDirection(C,N,2)):(A=this.getCardinalDirection(-D,N,3),L=this.getCardinalDirection(-C,N,1)):i>o?(A=this.getCardinalDirection(-D,N,1),L=this.getCardinalDirection(-C,N,3)):(A=this.getCardinalDirection(D,N,2),L=this.getCardinalDirection(C,N,4)),!_)switch(A){case 1:S=l,k=r+-g/N,n[0]=k,n[1]=S;break;case 2:k=d,S=i+p*N,n[0]=k,n[1]=S;break;case 3:S=h,k=r+g/N,n[0]=k,n[1]=S;break;case 4:k=c,S=i+-p*N,n[0]=k,n[1]=S}if(!T)switch(L){case 1:I=v,M=a+-E/N,n[2]=M,n[3]=I;break;case 2:M=x,I=o+w*N,n[2]=M,n[3]=I;break;case 3:I=b,M=a+E/N,n[2]=M,n[3]=I;break;case 4:M=m,I=o+-w*N,n[2]=M,n[3]=I}}return!1},i.getCardinalDirection=function(e,t,n){return e>t?n:1+n%4},i.getIntersection=function(e,t,n,i){if(null==i)return this.getIntersection2(e,t,n);var a,o,s,l,u,c,h,d=e.x,p=e.y,g=t.x,f=t.y,v=n.x,y=n.y,m=i.x,b=i.y;return 0==(h=(a=f-p)*(l=v-m)-(o=b-y)*(s=d-g))?null:new r((s*(c=m*y-v*b)-l*(u=g*p-d*f))/h,(o*u-a*c)/h)},i.angleOfVector=function(e,t,n,r){var i=void 0;return e!==n?(i=Math.atan((r-t)/(n-e)),n0?1:e<0?-1:0},r.floor=function(e){return e<0?Math.ceil(e):Math.floor(e)},r.ceil=function(e){return e<0?Math.floor(e):Math.ceil(e)},e.exports=r},function(e,t,n){"use strict";function r(){}r.MAX_VALUE=2147483647,r.MIN_VALUE=-2147483648,e.exports=r},function(e,t,n){"use strict";var r=function(){function e(e,t){for(var n=0;n0&&t;){for(s.push(u[0]);s.length>0&&t;){var c=s[0];s.splice(0,1),o.add(c);var h=c.getEdges();for(a=0;a-1&&u.splice(f,1)}o=new Set,l=new Map}else e=[]}return e},d.prototype.createDummyNodesForBendpoints=function(e){for(var t=[],n=e.source,r=this.graphManager.calcLowestCommonAncestor(e.source,e.target),i=0;i0){for(var i=this.edgeToDummyNodes.get(n),a=0;a=0&&t.splice(h,1),c.getNeighborsList().forEach((function(e){if(n.indexOf(e)<0){var t=r.get(e)-1;1==t&&l.push(e),r.set(e,t)}}))}n=n.concat(l),1!=t.length&&2!=t.length||(i=!0,a=t[0])}return a},d.prototype.setGraphManager=function(e){this.graphManager=e},e.exports=d},function(e,t,n){"use strict";function r(){}r.seed=1,r.x=0,r.nextDouble=function(){return r.x=1e4*Math.sin(r.seed++),r.x-Math.floor(r.x)},e.exports=r},function(e,t,n){"use strict";var r=n(4);function i(e,t){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(e){this.lworldOrgX=e},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(e){this.lworldOrgY=e},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(e){this.lworldExtX=e},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(e){this.lworldExtY=e},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(e){this.ldeviceOrgX=e},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(e){this.ldeviceOrgY=e},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(e){this.ldeviceExtX=e},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(e){this.ldeviceExtY=e},i.prototype.transformX=function(e){var t=0,n=this.lworldExtX;return 0!=n&&(t=this.ldeviceOrgX+(e-this.lworldOrgX)*this.ldeviceExtX/n),t},i.prototype.transformY=function(e){var t=0,n=this.lworldExtY;return 0!=n&&(t=this.ldeviceOrgY+(e-this.lworldOrgY)*this.ldeviceExtY/n),t},i.prototype.inverseTransformX=function(e){var t=0,n=this.ldeviceExtX;return 0!=n&&(t=this.lworldOrgX+(e-this.ldeviceOrgX)*this.lworldExtX/n),t},i.prototype.inverseTransformY=function(e){var t=0,n=this.ldeviceExtY;return 0!=n&&(t=this.lworldOrgY+(e-this.ldeviceOrgY)*this.lworldExtY/n),t},i.prototype.inverseTransformPoint=function(e){return new r(this.inverseTransformX(e.x),this.inverseTransformY(e.y))},e.exports=i},function(e,t,n){"use strict";var r=n(15),i=n(7),a=n(0),o=n(8),s=n(9);function l(){r.call(this),this.useSmartIdealEdgeLengthCalculation=i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.idealEdgeLength=i.DEFAULT_EDGE_LENGTH,this.springConstant=i.DEFAULT_SPRING_STRENGTH,this.repulsionConstant=i.DEFAULT_REPULSION_STRENGTH,this.gravityConstant=i.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=i.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=i.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.displacementThresholdPerNode=3*i.DEFAULT_EDGE_LENGTH/100,this.coolingFactor=i.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.initialCoolingFactor=i.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.totalDisplacement=0,this.oldTotalDisplacement=0,this.maxIterations=i.MAX_ITERATIONS}for(var u in l.prototype=Object.create(r.prototype),r)l[u]=r[u];l.prototype.initParameters=function(){r.prototype.initParameters.call(this,arguments),this.totalIterations=0,this.notAnimatedIterations=0,this.useFRGridVariant=i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION,this.grid=[]},l.prototype.calcIdealEdgeLengths=function(){for(var e,t,n,r,o,s,l=this.getGraphManager().getAllEdges(),u=0;ui.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*i.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(e-i.ADAPTATION_LOWER_NODE_LIMIT)/(i.ADAPTATION_UPPER_NODE_LIMIT-i.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-i.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=i.MAX_NODE_DISPLACEMENT_INCREMENTAL):(e>i.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(i.COOLING_ADAPTATION_FACTOR,1-(e-i.ADAPTATION_LOWER_NODE_LIMIT)/(i.ADAPTATION_UPPER_NODE_LIMIT-i.ADAPTATION_LOWER_NODE_LIMIT)*(1-i.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=i.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(5*this.getAllNodes().length,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},l.prototype.calcSpringForces=function(){for(var e,t=this.getAllEdges(),n=0;n0&&void 0!==arguments[0])||arguments[0],s=arguments.length>1&&void 0!==arguments[1]&&arguments[1],l=this.getAllNodes();if(this.useFRGridVariant)for(this.totalIterations%i.GRID_CALCULATION_CHECK_PERIOD==1&&o&&this.updateGrid(),a=new Set,e=0;e(l=t.getEstimatedSize()*this.gravityRangeFactor)||s>l)&&(e.gravitationForceX=-this.gravityConstant*i,e.gravitationForceY=-this.gravityConstant*a):(o>(l=t.getEstimatedSize()*this.compoundGravityRangeFactor)||s>l)&&(e.gravitationForceX=-this.gravityConstant*i*this.compoundGravityConstant,e.gravitationForceY=-this.gravityConstant*a*this.compoundGravityConstant)},l.prototype.isConverged=function(){var e,t=!1;return this.totalIterations>this.maxIterations/3&&(t=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),e=this.totalDisplacement=s.length||u>=s[0].length))for(var c=0;ce}}]),e}();e.exports=a},function(e,t,n){"use strict";var r=function(){function e(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:1,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:-1,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:-1;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.sequence1=t,this.sequence2=n,this.match_score=r,this.mismatch_penalty=i,this.gap_penalty=a,this.iMax=t.length+1,this.jMax=n.length+1,this.grid=new Array(this.iMax);for(var o=0;o=0;n--){var r=this.listeners[n];r.event===e&&r.callback===t&&this.listeners.splice(n,1)}},i.emit=function(e,t){for(var n=0;n{"use strict";n.d(t,{diagram:()=>ch});var r=n(99702);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);nt?1:0},X=null!=Object.assign?Object.assign.bind(Object):function(e){for(var t=arguments,n=1;n255)return;t.push(Math.floor(a))}var o=r[1]||r[2]||r[3],s=r[1]&&r[2]&&r[3];if(o&&!s)return;var l=n[4];if(void 0!==l){if((l=parseFloat(l))<0||l>1)return;t.push(l)}}return t}(e)||function(e){var t,n,r,i,a,o,s,l;function u(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var c=new RegExp("^"+G+"$").exec(e);if(c){if((n=parseInt(c[1]))<0?n=(360- -1*n%360)%360:n>360&&(n%=360),n/=360,(r=parseFloat(c[2]))<0||r>100)return;if(r/=100,(i=parseFloat(c[3]))<0||i>100)return;if(i/=100,void 0!==(a=c[4])&&((a=parseFloat(a))<0||a>1))return;if(0===r)o=s=l=Math.round(255*i);else{var h=i<.5?i*(1+r):i+r-i*r,d=2*i-h;o=Math.round(255*u(d,h,n+1/3)),s=Math.round(255*u(d,h,n)),l=Math.round(255*u(d,h,n-1/3))}t=[o,s,l,a]}return t}(e)},j={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},q=function(e){for(var t=e.map,n=e.keys,r=n.length,i=0;i=t||n<0||h&&e-u>=a}function f(){var e=J();if(g(e))return v(e);s=setTimeout(f,function(e){var n=t-(e-l);return h?Ee(n,a-(e-u)):n}(e))}function v(e){return s=void 0,d&&r?p(e):(r=i=void 0,o)}function y(){var e=J(),n=g(e);if(r=arguments,i=this,l=e,n){if(void 0===s)return function(e){return u=e,s=setTimeout(f,t),c?p(e):o}(l);if(h)return clearTimeout(s),s=setTimeout(f,t),p(l)}return void 0===s&&(s=setTimeout(f,t)),o}return t=xe(t)||0,W(n)&&(c=!!n.leading,a=(h="maxWait"in n)?we(xe(n.maxWait)||0,t):a,d="trailing"in n?!!n.trailing:d),y.cancel=function(){void 0!==s&&clearTimeout(s),u=0,r=l=i=s=void 0},y.flush=function(){return void 0===s?o:v(J())},y},Te=d?d.performance:null,De=Te&&Te.now?function(){return Te.now()}:function(){return Date.now()},Ce=function(){if(d){if(d.requestAnimationFrame)return function(e){d.requestAnimationFrame(e)};if(d.mozRequestAnimationFrame)return function(e){d.mozRequestAnimationFrame(e)};if(d.webkitRequestAnimationFrame)return function(e){d.webkitRequestAnimationFrame(e)};if(d.msRequestAnimationFrame)return function(e){d.msRequestAnimationFrame(e)}}return function(e){e&&setTimeout((function(){e(De())}),1e3/60)}}(),Ne=function(e){return Ce(e)},Ae=De,Le=9261,ke=5381,Se=function(e){for(var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Le;!(t=e.next()).done;)n=65599*n+t.value|0;return n},Me=function(e){return 65599*(arguments.length>1&&void 0!==arguments[1]?arguments[1]:Le)+e|0},Ie=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ke;return(t<<5)+t+e|0},Oe=function(e){return 2097152*e[0]+e[1]},Pe=function(e,t){return[Me(e[0],t[0]),Ie(e[1],t[1])]},Re=function(e,t){var n={value:0,done:!1},r=0,i=e.length;return Se({next:function(){return r=0&&(e[r]!==t||(e.splice(r,1),!n));r--);},nt=function(e){e.splice(0,e.length)},rt=function(e,t,n){return n&&(t=P(n,t)),e[t]},it=function(e,t,n,r){n&&(t=P(n,t)),e[t]=r},at="undefined"!=typeof Map?Map:function(){function e(){a(this,e),this._obj={}}return s(e,[{key:"set",value:function(e,t){return this._obj[e]=t,this}},{key:"delete",value:function(e){return this._obj[e]=void 0,this}},{key:"clear",value:function(){this._obj={}}},{key:"has",value:function(e){return void 0!==this._obj[e]}},{key:"get",value:function(e){return this._obj[e]}}]),e}(),ot=function(){function e(t){if(a(this,e),this._obj=Object.create(null),this.size=0,null!=t){var n;n=null!=t.instanceString&&t.instanceString()===this.instanceString()?t.toArray():t;for(var r=0;r2&&void 0!==arguments[2])||arguments[2];if(void 0!==e&&void 0!==t&&A(e)){var r=t.group;if(null==r&&(r=t.data&&null!=t.data.source&&null!=t.data.target?"edges":"nodes"),"nodes"===r||"edges"===r){this.length=1,this[0]=this;var i=this._private={cy:e,single:!0,data:t.data||{},position:t.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:r,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!t.selected,selectable:void 0===t.selectable||!!t.selectable,locked:!!t.locked,grabbed:!1,grabbable:void 0===t.grabbable||!!t.grabbable,pannable:void 0===t.pannable?"edges"===r:!!t.pannable,active:!1,classes:new st,animation:{current:[],queue:[]},rscratch:{},scratch:t.scratch||{},edges:[],children:[],parent:t.parent&&t.parent.isNode()?t.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(null==i.position.x&&(i.position.x=0),null==i.position.y&&(i.position.y=0),t.renderedPosition){var a=t.renderedPosition,o=e.pan(),s=e.zoom();i.position={x:(a.x-o.x)/s,y:(a.y-o.y)/s}}var l=[];w(t.classes)?l=t.classes:b(t.classes)&&(l=t.classes.split(/\s+/));for(var u=0,c=l.length;ut?1:0},u=function(e,t,i,a,o){var s;if(null==i&&(i=0),null==o&&(o=n),i<0)throw new Error("lo must be non-negative");for(null==a&&(a=e.length);in;0<=n?t++:t--)u.push(t);return u}.apply(this).reverse()).length;af;0<=f?++d:--d)v.push(a(e,r));return v},g=function(e,t,r,i){var a,o,s;for(null==i&&(i=n),a=e[r];r>t&&i(a,o=e[s=r-1>>1])<0;)e[r]=o,r=s;return e[r]=a},f=function(e,t,r){var i,a,o,s,l;for(null==r&&(r=n),a=e.length,l=t,o=e[t],i=2*t+1;i0;){var _=y.pop(),T=f(_),D=_.id();if(h[D]=T,T!==1/0)for(var C=_.neighborhood().intersect(p),N=0;N0)for(n.unshift(t);c[i];){var a=c[i];n.unshift(a.edge),n.unshift(a.node),i=(r=a.node).id()}return o.spawn(n)}}}},ft={kruskal:function(e){e=e||function(e){return 1};for(var t=this.byGroup(),n=t.nodes,r=t.edges,i=n.length,a=new Array(i),o=n,s=function(e){for(var t=0;t0;){if(l=f.pop(),u=l.id(),v.delete(u),w++,u===h){for(var E=[],_=i,T=h,D=m[T];E.unshift(_),null!=D&&E.unshift(D),null!=(_=y[T]);)D=m[T=_.id()];return{found:!0,distance:d[u],path:this.spawn(E),steps:w}}g[u]=!0;for(var C=l._private.edges,N=0;NN&&(p[C]=N,y[C]=D,m[C]=w),!i){var A=D*u+T;!i&&p[A]>N&&(p[A]=N,y[A]=T,m[A]=w)}}}for(var L=0;L1&&void 0!==arguments[1]?arguments[1]:a,r=[],i=m(e);;){if(null==i)return t.spawn();var o=y(i),l=o.edge,u=o.pred;if(r.unshift(i[0]),i.same(n)&&r.length>0)break;null!=l&&r.unshift(l),i=u}return s.spawn(r)},hasNegativeWeightCycle:g,negativeWeightCycles:f}}},Et=Math.sqrt(2),_t=function(e,t,n){0===n.length&&He("Karger-Stein must be run on a connected (sub)graph");for(var r=n[e],i=r[1],a=r[2],o=t[i],s=t[a],l=n,u=l.length-1;u>=0;u--){var c=l[u],h=c[1],d=c[2];(t[h]===o&&t[d]===s||t[h]===s&&t[d]===o)&&l.splice(u,1)}for(var p=0;pr;){var i=Math.floor(Math.random()*t.length);t=_t(i,e,t),n--}return t},Dt={kargerStein:function(){var e=this,t=this.byGroup(),n=t.nodes,r=t.edges;r.unmergeBy((function(e){return e.isLoop()}));var i=n.length,a=r.length,o=Math.ceil(Math.pow(Math.log(i)/Math.LN2,2)),s=Math.floor(i/Et);if(!(i<2)){for(var l=[],u=0;u0?1:e<0?-1:0},Mt=function(e,t){return Math.sqrt(It(e,t))},It=function(e,t){var n=t.x-e.x,r=t.y-e.y;return n*n+r*r},Ot=function(e){for(var t=e.length,n=0,r=0;r=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(null!=e.w&&null!=e.h&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},zt=function(e,t){e.x1=Math.min(e.x1,t.x1),e.x2=Math.max(e.x2,t.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,t.y1),e.y2=Math.max(e.y2,t.y2),e.h=e.y2-e.y1},Gt=function(e,t,n){e.x1=Math.min(e.x1,t),e.x2=Math.max(e.x2,t),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,n),e.y2=Math.max(e.y2,n),e.h=e.y2-e.y1},Yt=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return e.x1-=t,e.x2+=t,e.y1-=t,e.y2+=t,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},Vt=function(e){var t,n,r,i,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0];if(1===a.length)t=n=r=i=a[0];else if(2===a.length)t=r=a[0],i=n=a[1];else if(4===a.length){var o=u(a,4);t=o[0],n=o[1],r=o[2],i=o[3]}return e.x1-=i,e.x2+=n,e.y1-=t,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},Xt=function(e,t){e.x1=t.x1,e.y1=t.y1,e.x2=t.x2,e.y2=t.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},Ut=function(e,t){return!(e.x1>t.x2)&&(!(t.x1>e.x2)&&(!(e.x2t.y2)&&!(t.y1>e.y2)))))))},jt=function(e,t,n){return e.x1<=t&&t<=e.x2&&e.y1<=n&&n<=e.y2},qt=function(e,t){return jt(e,t.x1,t.y1)&&jt(e,t.x2,t.y2)},Ht=function(e,t,n,r,i,a,o){var s,l,u=arguments.length>7&&void 0!==arguments[7]?arguments[7]:"auto",c="auto"===u?dn(i,a):u,h=i/2,d=a/2,p=(c=Math.min(c,h,d))!==h,g=c!==d;if(p){var f=r-d-o;if((s=on(e,t,n,r,n-h+c-o,f,n+h-c+o,f,!1)).length>0)return s}if(g){var v=n+h+o;if((s=on(e,t,n,r,v,r-d+c-o,v,r+d-c+o,!1)).length>0)return s}if(p){var y=r+d+o;if((s=on(e,t,n,r,n-h+c-o,y,n+h-c+o,y,!1)).length>0)return s}if(g){var m=n-h-o;if((s=on(e,t,n,r,m,r-d+c-o,m,r+d-c+o,!1)).length>0)return s}var b=n-h+c,x=r-d+c;if((l=rn(e,t,n,r,b,x,c+o)).length>0&&l[0]<=b&&l[1]<=x)return[l[0],l[1]];var w=n+h-c,E=r-d+c;if((l=rn(e,t,n,r,w,E,c+o)).length>0&&l[0]>=w&&l[1]<=E)return[l[0],l[1]];var _=n+h-c,T=r+d-c;if((l=rn(e,t,n,r,_,T,c+o)).length>0&&l[0]>=_&&l[1]>=T)return[l[0],l[1]];var D=n-h+c,C=r+d-c;return(l=rn(e,t,n,r,D,C,c+o)).length>0&&l[0]<=D&&l[1]>=C?[l[0],l[1]]:[]},Wt=function(e,t,n,r,i,a,o){var s=o,l=Math.min(n,i),u=Math.max(n,i),c=Math.min(r,a),h=Math.max(r,a);return l-s<=e&&e<=u+s&&c-s<=t&&t<=h+s},$t=function(e,t,n,r,i,a,o,s,l){var u=Math.min(n,o,i)-l,c=Math.max(n,o,i)+l,h=Math.min(r,s,a)-l,d=Math.max(r,s,a)+l;return!(ec||td)},Kt=function(e,t,n,r,i,a,o,s){var l=[];!function(e,t,n,r,i){var a,o,s,l,u,c,h,d;0===e&&(e=1e-5),s=-27*(r/=e)+(t/=e)*(9*(n/=e)-t*t*2),a=(o=(3*n-t*t)/9)*o*o+(s/=54)*s,i[1]=0,h=t/3,a>0?(u=(u=s+Math.sqrt(a))<0?-Math.pow(-u,1/3):Math.pow(u,1/3),c=(c=s-Math.sqrt(a))<0?-Math.pow(-c,1/3):Math.pow(c,1/3),i[0]=-h+u+c,h+=(u+c)/2,i[4]=i[2]=-h,h=Math.sqrt(3)*(-c+u)/2,i[3]=h,i[5]=-h):(i[5]=i[3]=0,0===a?(d=s<0?-Math.pow(-s,1/3):Math.pow(s,1/3),i[0]=2*d-h,i[4]=i[2]=-(d+h)):(l=(o=-o)*o*o,l=Math.acos(s/Math.sqrt(l)),d=2*Math.sqrt(o),i[0]=-h+d*Math.cos(l/3),i[2]=-h+d*Math.cos((l+2*Math.PI)/3),i[4]=-h+d*Math.cos((l+4*Math.PI)/3)))}(1*n*n-4*n*i+2*n*o+4*i*i-4*i*o+o*o+r*r-4*r*a+2*r*s+4*a*a-4*a*s+s*s,9*n*i-3*n*n-3*n*o-6*i*i+3*i*o+9*r*a-3*r*r-3*r*s-6*a*a+3*a*s,3*n*n-6*n*i+n*o-n*e+2*i*i+2*i*e-o*e+3*r*r-6*r*a+r*s-r*t+2*a*a+2*a*t-s*t,1*n*i-n*n+n*e-i*e+r*a-r*r+r*t-a*t,l);for(var u=[],c=0;c<6;c+=2)Math.abs(l[c+1])<1e-7&&l[c]>=0&&l[c]<=1&&u.push(l[c]);u.push(1),u.push(0);for(var h,d,p,g=-1,f=0;f=0?pl?(e-i)*(e-i)+(t-a)*(t-a):u-h},Qt=function(e,t,n){for(var r,i,a,o,s=0,l=0;l=e&&e>=a||r<=e&&e<=a))continue;(e-r)/(a-r)*(o-i)+i>t&&s++}return s%2!=0},Jt=function(e,t,n,r,i,a,o,s,l){var u,c=new Array(n.length);null!=s[0]?(u=Math.atan(s[1]/s[0]),s[0]<0?u+=Math.PI/2:u=-u-Math.PI/2):u=s;for(var h,d=Math.cos(-u),p=Math.sin(-u),g=0;g0){var f=tn(c,-l);h=en(f)}else h=c;return Qt(e,t,h)},en=function(e){for(var t,n,r,i,a,o,s,l,u=new Array(e.length/2),c=0;c=0&&g<=1&&v.push(g),f>=0&&f<=1&&v.push(f),0===v.length)return[];var y=v[0]*s[0]+e,m=v[0]*s[1]+t;return v.length>1?v[0]==v[1]?[y,m]:[y,m,v[1]*s[0]+e,v[1]*s[1]+t]:[y,m]},an=function(e,t,n){return t<=e&&e<=n||n<=e&&e<=t?e:e<=t&&t<=n||n<=t&&t<=e?t:n},on=function(e,t,n,r,i,a,o,s,l){var u=e-i,c=n-e,h=o-i,d=t-a,p=r-t,g=s-a,f=h*d-g*u,v=c*d-p*u,y=g*c-h*p;if(0!==y){var m=f/y,b=v/y,x=-.001;return x<=m&&m<=1.001&&x<=b&&b<=1.001||l?[e+m*c,t+m*p]:[]}return 0===f||0===v?an(e,n,o)===o?[o,s]:an(e,n,i)===i?[i,a]:an(i,o,n)===n?[n,r]:[]:[]},sn=function(e,t,n,r,i,a,o,s){var l,u,c,h,d,p,g=[],f=new Array(n.length),v=!0;if(null==a&&(v=!1),v){for(var y=0;y0){var m=tn(f,-s);u=en(m)}else u=f}else u=n;for(var b=0;bu&&(u=t)},h=function(e){return l[e]},d=0;d0?b.edgesTo(m)[0]:m.edgesTo(b)[0];var w=r(x);m=m.id(),d[m]>d[v]+w&&(d[m]=d[v]+w,p.nodes.indexOf(m)<0?p.push(m):p.updateItem(m),u[m]=0,l[m]=[]),d[m]==d[v]+w&&(u[m]=u[m]+u[v],l[m].push(v))}else for(var E=0;E0;){for(var C=n.pop(),N=0;N0&&o.push(n[s]);0!==o.length&&i.push(r.collection(o))}return i}(c,l,t,r);return b=function(e){for(var t=0;t5&&void 0!==arguments[5]?arguments[5]:In,o=r,s=0;s=2?zn(e,t,n,0,Rn,Bn):zn(e,t,n,0,Pn)},squaredEuclidean:function(e,t,n){return zn(e,t,n,0,Rn)},manhattan:function(e,t,n){return zn(e,t,n,0,Pn)},max:function(e,t,n){return zn(e,t,n,-1/0,Fn)}};function Yn(e,t,n,r,i,a){var o;return o=x(e)?e:Gn[e]||Gn.euclidean,0===t&&x(e)?o(i,a):o(t,n,r,i,a)}Gn["squared-euclidean"]=Gn.squaredEuclidean,Gn.squaredeuclidean=Gn.squaredEuclidean;var Vn=et({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),Xn=function(e){return Vn(e)},Un=function(e,t,n,r,i){var a="kMedoids"!==i?function(e){return n[e]}:function(e){return r[e](n)},o=n,s=t;return Yn(e,r.length,a,(function(e){return r[e](t)}),o,s)},jn=function(e,t,n){for(var r=n.length,i=new Array(r),a=new Array(r),o=new Array(t),s=null,l=0;ln)return!1}return!0},Kn=function(e,t,n){for(var r=0;ri&&(i=t[l][u],a=u);o[a].push(e[l])}for(var c=0;c=i.threshold||"dendrogram"===i.mode&&1===e.length)return!1;var p,g=t[o],f=t[r[o]];p="dendrogram"===i.mode?{left:g,right:f,key:g.key}:{value:g.value.concat(f.value),key:g.key},e[g.index]=p,e.splice(f.index,1),t[g.key]=p;for(var v=0;vn[f.key][y.key]&&(a=n[f.key][y.key])):"max"===i.linkage?(a=n[g.key][y.key],n[g.key][y.key]1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],i=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];arguments.length>3&&void 0!==arguments[3]&&!arguments[3]?(n0&&e.splice(0,t)):e=e.slice(t,n);for(var a=0,o=e.length-1;o>=0;o--){var s=e[o];i?isFinite(s)||(e[o]=-1/0,a++):e.splice(o,1)}r&&e.sort((function(e,t){return e-t}));var l=e.length,u=Math.floor(l/2);return l%2!=0?e[u+1+a]:(e[u-1+a]+e[u+a])/2}(e):"mean"===t?function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=0,i=0,a=t;a1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=1/0,i=t;i1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=-1/0,i=t;io&&(a=l,o=t[i*e+l])}a>0&&r.push(a)}for(var u=0;u=N?(A=N,N=k,L=S):k>A&&(A=k);for(var M=0;M0?1:0;T[E%u.minIterations*t+F]=z,B+=z}if(B>0&&(E>=u.minIterations-1||E==u.maxIterations-1)){for(var G=0,Y=0;Y0&&r.push(i);return r}(t,a,o),U=function(e,t,n){for(var r=gr(e,t,n),i=0;il&&(s=u,l=c)}n[i]=a[s]}return gr(e,t,n)}(t,r,X),j={},q=0;q1||o>1)&&(u=!0),c[t]=[],e.outgoers().forEach((function(e){e.isEdge()&&c[t].push(e.id())}))}else h[t]=[void 0,e.target().id()]})):l.forEach((function(e){var t=e.id();e.isNode()?(e.degree(!0)%2&&(n?r?u=!0:r=t:n=t),c[t]=[],e.connectedEdges().forEach((function(e){return c[t].push(e.id())}))):h[t]=[e.source().id(),e.target().id()]}));var d={found:!1,trail:void 0};if(u)return d;if(r&&n)if(s){if(i&&r!=i)return d;i=r}else{if(i&&r!=i&&n!=i)return d;i||(i=r)}else i||(i=l[0].id());var p=function(e){for(var t,n,r,i=e,a=[e];c[i].length;)t=c[i].shift(),n=h[t][0],i!=(r=h[t][1])?(c[r]=c[r].filter((function(e){return e!=t})),i=r):s||i==n||(c[n]=c[n].filter((function(e){return e!=t})),i=n),a.unshift(t),a.unshift(i);return a},g=[],f=[];for(f=p(i);1!=f.length;)0==c[f[0]].length?(g.unshift(l.getElementById(f.shift())),g.unshift(l.getElementById(f.shift()))):f=p(f.shift()).concat(f);for(var v in g.unshift(l.getElementById(f.shift())),c)if(c[v].length)return d;return d.found=!0,d.trail=this.spawn(g,!0),d}},br=function(){var e=this,t={},n=0,r=0,i=[],a=[],o={},s=function s(l,u,c){l===c&&(r+=1),t[u]={id:n,low:n++,cutVertex:!1};var h,d,p,g,f=e.getElementById(u).connectedEdges().intersection(e);0===f.size()?i.push(e.spawn(e.getElementById(u))):f.forEach((function(n){h=n.source().id(),d=n.target().id(),(p=h===u?d:h)!==c&&(g=n.id(),o[g]||(o[g]=!0,a.push({x:u,y:p,edge:n})),p in t?t[u].low=Math.min(t[u].low,t[p].id):(s(l,p,u),t[u].low=Math.min(t[u].low,t[p].low),t[u].id<=t[p].low&&(t[u].cutVertex=!0,function(n,r){for(var o=a.length-1,s=[],l=e.spawn();a[o].x!=n||a[o].y!=r;)s.push(a.pop().edge),o--;s.push(a.pop().edge),s.forEach((function(n){var r=n.connectedNodes().intersection(e);l.merge(n),r.forEach((function(n){var r=n.id(),i=n.connectedEdges().intersection(e);l.merge(n),t[r].cutVertex?l.merge(i.filter((function(e){return e.isLoop()}))):l.merge(i)}))})),i.push(l)}(u,p))))}))};e.forEach((function(e){if(e.isNode()){var n=e.id();n in t||(r=0,s(n,n),t[n].cutVertex=r>1)}}));var l=Object.keys(t).filter((function(e){return t[e].cutVertex})).map((function(t){return e.getElementById(t)}));return{cut:e.spawn(l),components:i}},xr=function(){var e=this,t={},n=0,r=[],i=[],a=e.spawn(e),o=function o(s){if(i.push(s),t[s]={index:n,low:n++,explored:!1},e.getElementById(s).connectedEdges().intersection(e).forEach((function(e){var n=e.target().id();n!==s&&(n in t||o(n),t[n].explored||(t[s].low=Math.min(t[s].low,t[n].low)))})),t[s].index===t[s].low){for(var l=e.spawn();;){var u=i.pop();if(l.merge(e.getElementById(u)),t[u].low=t[s].index,t[u].explored=!0,u===s)break}var c=l.edgesWith(l),h=l.merge(c);r.push(h),a=a.difference(h)}};return e.forEach((function(e){if(e.isNode()){var n=e.id();n in t||o(n)}})),{cut:a,components:r}},wr={};[ct,gt,ft,yt,bt,wt,Dt,vn,mn,xn,En,Mn,nr,cr,vr,mr,{hopcroftTarjanBiconnected:br,htbc:br,htb:br,hopcroftTarjanBiconnectedComponents:br},{tarjanStronglyConnected:xr,tsc:xr,tscc:xr,tarjanStronglyConnectedComponents:xr}].forEach((function(e){X(wr,e)}));var Er=function e(t){if(!(this instanceof e))return new e(t);this.id="Thenable/1.0.7",this.state=0,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},"function"==typeof t&&t.call(this,this.fulfill.bind(this),this.reject.bind(this))};Er.prototype={fulfill:function(e){return _r(this,1,"fulfillValue",e)},reject:function(e){return _r(this,2,"rejectReason",e)},then:function(e,t){var n=this,r=new Er;return n.onFulfilled.push(Cr(e,r,"fulfill")),n.onRejected.push(Cr(t,r,"reject")),Tr(n),r.proxy}};var _r=function(e,t,n,r){return 0===e.state&&(e.state=t,e[n]=r,Tr(e)),e},Tr=function(e){1===e.state?Dr(e,"onFulfilled",e.fulfillValue):2===e.state&&Dr(e,"onRejected",e.rejectReason)},Dr=function(e,t,n){if(0!==e[t].length){var r=e[t];e[t]=[];var i=function(){for(var e=0;e0:void 0}},clearQueue:function(){return function(){var e=this,t=void 0!==e.length?e:[e];if(!(this._private.cy||this).styleEnabled())return this;for(var n=0;n-1};var fi=function(e,t){var n=this.__data__,r=ci(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this};function vi(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t-1&&e%1==0&&e0&&this.spawn(r).updateStyle().emit("class"),t},addClass:function(e){return this.toggleClass(e,!0)},hasClass:function(e){var t=this[0];return null!=t&&t._private.classes.has(e)},toggleClass:function(e,t){w(e)||(e=e.match(/\S+/g)||[]);for(var n=this,r=void 0===t,i=[],a=0,o=n.length;a0&&this.spawn(i).updateStyle().emit("class"),n},removeClass:function(e){return this.toggleClass(e,!1)},flashClass:function(e,t){var n=this;if(null==t)t=250;else if(0===t)return n;return n.addClass(e),setTimeout((function(){n.removeClass(e)}),t),n}};ia.className=ia.classNames=ia.classes;var aa={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:"\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'",number:B,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};aa.variable="(?:[\\w-.]|(?:\\\\"+aa.metaChar+"))+",aa.className="(?:[\\w-]|(?:\\\\"+aa.metaChar+"))+",aa.value=aa.string+"|"+aa.number,aa.id=aa.variable,function(){var e,t,n;for(e=aa.comparatorOp.split("|"),n=0;n=0||"="!==t&&(aa.comparatorOp+="|\\!"+t)}();var oa=0,sa=1,la=2,ua=3,ca=4,ha=5,da=6,pa=7,ga=8,fa=9,va=10,ya=11,ma=12,ba=13,xa=14,wa=15,Ea=16,_a=17,Ta=18,Da=19,Ca=20,Na=[{selector:":selected",matches:function(e){return e.selected()}},{selector:":unselected",matches:function(e){return!e.selected()}},{selector:":selectable",matches:function(e){return e.selectable()}},{selector:":unselectable",matches:function(e){return!e.selectable()}},{selector:":locked",matches:function(e){return e.locked()}},{selector:":unlocked",matches:function(e){return!e.locked()}},{selector:":visible",matches:function(e){return e.visible()}},{selector:":hidden",matches:function(e){return!e.visible()}},{selector:":transparent",matches:function(e){return e.transparent()}},{selector:":grabbed",matches:function(e){return e.grabbed()}},{selector:":free",matches:function(e){return!e.grabbed()}},{selector:":removed",matches:function(e){return e.removed()}},{selector:":inside",matches:function(e){return!e.removed()}},{selector:":grabbable",matches:function(e){return e.grabbable()}},{selector:":ungrabbable",matches:function(e){return!e.grabbable()}},{selector:":animated",matches:function(e){return e.animated()}},{selector:":unanimated",matches:function(e){return!e.animated()}},{selector:":parent",matches:function(e){return e.isParent()}},{selector:":childless",matches:function(e){return e.isChildless()}},{selector:":child",matches:function(e){return e.isChild()}},{selector:":orphan",matches:function(e){return e.isOrphan()}},{selector:":nonorphan",matches:function(e){return e.isChild()}},{selector:":compound",matches:function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()}},{selector:":loop",matches:function(e){return e.isLoop()}},{selector:":simple",matches:function(e){return e.isSimple()}},{selector:":active",matches:function(e){return e.active()}},{selector:":inactive",matches:function(e){return!e.active()}},{selector:":backgrounding",matches:function(e){return e.backgrounding()}},{selector:":nonbackgrounding",matches:function(e){return!e.backgrounding()}}].sort((function(e,t){return function(e,t){return-1*V(e,t)}(e.selector,t.selector)})),Aa=function(){for(var e,t={},n=0;n0&&u.edgeCount>0)return $e("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(u.edgeCount>1)return $e("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;1===u.edgeCount&&$e("The selector `"+e+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},toString:function(){if(null!=this.toStringCache)return this.toStringCache;for(var e=function(e){return null==e?"":e},t=function(t){return b(t)?'"'+t+'"':e(t)},n=function(e){return" "+e+" "},r=function(r,a){var o=r.type,s=r.value;switch(o){case oa:var l=e(s);return l.substring(0,l.length-1);case ua:var u=r.field,c=r.operator;return"["+u+n(e(c))+t(s)+"]";case ha:var h=r.operator,d=r.field;return"["+e(h)+d+"]";case ca:return"["+r.field+"]";case da:var p=r.operator;return"[["+r.field+n(e(p))+t(s)+"]]";case pa:return s;case ga:return"#"+s;case fa:return"."+s;case _a:case wa:return i(r.parent,a)+n(">")+i(r.child,a);case Ta:case Ea:return i(r.ancestor,a)+" "+i(r.descendant,a);case Da:var g=i(r.left,a),f=i(r.subject,a),v=i(r.right,a);return g+(g.length>0?" ":"")+f+v;case Ca:return""}},i=function(e,t){return e.checks.reduce((function(n,i,a){return n+(t===e&&0===a?"$":"")+r(i,t)}),"")},a="",o=0;o1&&o=0&&(t=t.replace("!",""),c=!0),t.indexOf("@")>=0&&(t=t.replace("@",""),u=!0),(o||l||u)&&(i=o||s?""+e:"",a=""+n),u&&(e=i=i.toLowerCase(),n=a=a.toLowerCase()),t){case"*=":r=i.indexOf(a)>=0;break;case"$=":r=i.indexOf(a,i.length-a.length)>=0;break;case"^=":r=0===i.indexOf(a);break;case"=":r=e===n;break;case">":h=!0,r=e>n;break;case">=":h=!0,r=e>=n;break;case"<":h=!0,r=e0;){var u=i.shift();t(u),a.add(u.id()),o&&r(i,a,u)}return e}function Wa(e,t,n){if(n.isParent())for(var r=n._private.children,i=0;i1&&void 0!==arguments[1])||arguments[1],Wa)},qa.forEachUp=function(e){return Ha(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],$a)},qa.forEachUpAndDown=function(e){return Ha(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],Ka)},qa.ancestors=qa.parents,(Xa=Ua={data:na.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:na.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:na.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:na.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:na.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:na.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var e=this[0];if(e)return e._private.data.id}}).attr=Xa.data,Xa.removeAttr=Xa.removeData;var Za,Qa,Ja=Ua,eo={};function to(e){return function(t){var n=this;if(void 0===t&&(t=!0),0!==n.length&&n.isNode()&&!n.removed()){for(var r=0,i=n[0],a=i._private.edges,o=0;ot})),minIndegree:no("indegree",(function(e,t){return et})),minOutdegree:no("outdegree",(function(e,t){return et}))}),X(eo,{totalDegree:function(e){for(var t=0,n=this.nodes(),r=0;r0,c=u;u&&(l=l[0]);var h=c?l.position():{x:0,y:0};return i={x:s.x-h.x,y:s.y-h.y},void 0===e?i:i[e]}for(var d=0;d0,v=f;f&&(g=g[0]);var y=v?g.position():{x:0,y:0};void 0!==t?p.position(e,t+y[e]):void 0!==i&&p.position({x:i.x+y.x,y:i.y+y.y})}}else if(!a)return;return this}},Za.modelPosition=Za.point=Za.position,Za.modelPositions=Za.points=Za.positions,Za.renderedPoint=Za.renderedPosition,Za.relativePoint=Za.relativePosition;var ao,oo,so=Qa;ao=oo={},oo.renderedBoundingBox=function(e){var t=this.boundingBox(e),n=this.cy(),r=n.zoom(),i=n.pan(),a=t.x1*r+i.x,o=t.x2*r+i.x,s=t.y1*r+i.y,l=t.y2*r+i.y;return{x1:a,x2:o,y1:s,y2:l,w:o-a,h:l-s}},oo.dirtyCompoundBoundsCache=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.cy();return t.styleEnabled()&&t.hasCompoundNodes()?(this.forEachUp((function(t){if(t.isParent()){var n=t._private;n.compoundBoundsClean=!1,n.bbCache=null,e||t.emitAndNotify("bounds")}})),this):this},oo.updateCompoundBounds=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.cy();if(!t.styleEnabled()||!t.hasCompoundNodes())return this;if(!e&&t.batching())return this;function n(e){if(e.isParent()){var t=e._private,n=e.children(),r="include"===e.pstyle("compound-sizing-wrt-labels").value,i={width:{val:e.pstyle("min-width").pfValue,left:e.pstyle("min-width-bias-left"),right:e.pstyle("min-width-bias-right")},height:{val:e.pstyle("min-height").pfValue,top:e.pstyle("min-height-bias-top"),bottom:e.pstyle("min-height-bias-bottom")}},a=n.boundingBox({includeLabels:r,includeOverlays:!1,useCache:!1}),o=t.position;0!==a.w&&0!==a.h||((a={w:e.pstyle("width").pfValue,h:e.pstyle("height").pfValue}).x1=o.x-a.w/2,a.x2=o.x+a.w/2,a.y1=o.y-a.h/2,a.y2=o.y+a.h/2);var s=i.width.left.value;"px"===i.width.left.units&&i.width.val>0&&(s=100*s/i.width.val);var l=i.width.right.value;"px"===i.width.right.units&&i.width.val>0&&(l=100*l/i.width.val);var u=i.height.top.value;"px"===i.height.top.units&&i.height.val>0&&(u=100*u/i.height.val);var c=i.height.bottom.value;"px"===i.height.bottom.units&&i.height.val>0&&(c=100*c/i.height.val);var h=y(i.width.val-a.w,s,l),d=h.biasDiff,p=h.biasComplementDiff,g=y(i.height.val-a.h,u,c),f=g.biasDiff,v=g.biasComplementDiff;t.autoPadding=function(e,t,n,r){if("%"!==n.units)return"px"===n.units?n.pfValue:0;switch(r){case"width":return e>0?n.pfValue*e:0;case"height":return t>0?n.pfValue*t:0;case"average":return e>0&&t>0?n.pfValue*(e+t)/2:0;case"min":return e>0&&t>0?e>t?n.pfValue*t:n.pfValue*e:0;case"max":return e>0&&t>0?e>t?n.pfValue*e:n.pfValue*t:0;default:return 0}}(a.w,a.h,e.pstyle("padding"),e.pstyle("padding-relative-to").value),t.autoWidth=Math.max(a.w,i.width.val),o.x=(-d+a.x1+a.x2+p)/2,t.autoHeight=Math.max(a.h,i.height.val),o.y=(-f+a.y1+a.y2+v)/2}function y(e,t,n){var r=0,i=0,a=t+n;return e>0&&a>0&&(r=t/a*e,i=n/a*e),{biasDiff:r,biasComplementDiff:i}}}for(var r=0;re.x2?r:e.x2,e.y1=ne.y2?i:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},co=function(e,t){return null==t?e:uo(e,t.x1,t.y1,t.x2,t.y2)},ho=function(e,t,n){return rt(e,t,n)},po=function(e,t,n){if(!t.cy().headless()){var r,i,a=t._private,o=a.rstyle,s=o.arrowWidth/2;if("none"!==t.pstyle(n+"-arrow-shape").value){"source"===n?(r=o.srcX,i=o.srcY):"target"===n?(r=o.tgtX,i=o.tgtY):(r=o.midX,i=o.midY);var l=a.arrowBounds=a.arrowBounds||{},u=l[n]=l[n]||{};u.x1=r-s,u.y1=i-s,u.x2=r+s,u.y2=i+s,u.w=u.x2-u.x1,u.h=u.y2-u.y1,Yt(u,1),uo(e,u.x1,u.y1,u.x2,u.y2)}}},go=function(e,t,n){if(!t.cy().headless()){var r;r=n?n+"-":"";var i=t._private,a=i.rstyle;if(t.pstyle(r+"label").strValue){var o,s,l,u,c=t.pstyle("text-halign"),h=t.pstyle("text-valign"),d=ho(a,"labelWidth",n),p=ho(a,"labelHeight",n),g=ho(a,"labelX",n),f=ho(a,"labelY",n),v=t.pstyle(r+"text-margin-x").pfValue,y=t.pstyle(r+"text-margin-y").pfValue,m=t.isEdge(),b=t.pstyle(r+"text-rotation"),x=t.pstyle("text-outline-width").pfValue,w=t.pstyle("text-border-width").pfValue/2,E=t.pstyle("text-background-padding").pfValue,_=p,T=d,D=T/2,C=_/2;if(m)o=g-D,s=g+D,l=f-C,u=f+C;else{switch(c.value){case"left":o=g-T,s=g;break;case"center":o=g-D,s=g+D;break;case"right":o=g,s=g+T}switch(h.value){case"top":l=f-_,u=f;break;case"center":l=f-C,u=f+C;break;case"bottom":l=f,u=f+_}}o+=v-Math.max(x,w)-E-2,s+=v+Math.max(x,w)+E+2,l+=y-Math.max(x,w)-E-2,u+=y+Math.max(x,w)+E+2;var N=n||"main",A=i.labelBounds,L=A[N]=A[N]||{};L.x1=o,L.y1=l,L.x2=s,L.y2=u,L.w=s-o,L.h=u-l;var k=m&&"autorotate"===b.strValue,S=null!=b.pfValue&&0!==b.pfValue;if(k||S){var M=k?ho(i.rstyle,"labelAngle",n):b.pfValue,I=Math.cos(M),O=Math.sin(M),P=(o+s)/2,R=(l+u)/2;if(!m){switch(c.value){case"left":P=s;break;case"right":P=o}switch(h.value){case"top":R=u;break;case"bottom":R=l}}var B=function(e,t){return{x:(e-=P)*I-(t-=R)*O+P,y:e*O+t*I+R}},F=B(o,l),z=B(o,u),G=B(s,l),Y=B(s,u);o=Math.min(F.x,z.x,G.x,Y.x),s=Math.max(F.x,z.x,G.x,Y.x),l=Math.min(F.y,z.y,G.y,Y.y),u=Math.max(F.y,z.y,G.y,Y.y)}var V=N+"Rot",X=A[V]=A[V]||{};X.x1=o,X.y1=l,X.x2=s,X.y2=u,X.w=s-o,X.h=u-l,uo(e,o,l,s,u),uo(i.labelBounds.all,o,l,s,u)}return e}},fo=function(e,t){var n,r,i,a,o,s,l,u=e._private.cy,c=u.styleEnabled(),h=u.headless(),d=Ft(),p=e._private,g=e.isNode(),f=e.isEdge(),v=p.rstyle,y=g&&c?e.pstyle("bounds-expansion").pfValue:[0],m=function(e){return"none"!==e.pstyle("display").value},b=!c||m(e)&&(!f||m(e.source())&&m(e.target()));if(b){var x=0;c&&t.includeOverlays&&0!==e.pstyle("overlay-opacity").value&&(x=e.pstyle("overlay-padding").value);var w=0;c&&t.includeUnderlays&&0!==e.pstyle("underlay-opacity").value&&(w=e.pstyle("underlay-padding").value);var E=Math.max(x,w),_=0;if(c&&(_=e.pstyle("width").pfValue/2),g&&t.includeNodes){var T=e.position();o=T.x,s=T.y;var D=e.outerWidth()/2,C=e.outerHeight()/2;uo(d,n=o-D,i=s-C,r=o+D,a=s+C),c&&t.includeOutlines&&function(e,t){if(!t.cy().headless()){var n,r,i,a=t.pstyle("outline-opacity").value,o=t.pstyle("outline-width").value;if(a>0&&o>0){var s=t.pstyle("outline-offset").value,l=t.pstyle("shape").value,u=o+s,c=(e.w+2*u)/e.w,h=(e.h+2*u)/e.h,d=0;["diamond","pentagon","round-triangle"].includes(l)?(c=(e.w+2.4*u)/e.w,d=-u/3.6):["concave-hexagon","rhomboid","right-rhomboid"].includes(l)?c=(e.w+2.4*u)/e.w:"star"===l?(c=(e.w+2.8*u)/e.w,h=(e.h+2.6*u)/e.h,d=-u/3.8):"triangle"===l?(c=(e.w+2.8*u)/e.w,h=(e.h+2.4*u)/e.h,d=-u/1.4):"vee"===l&&(c=(e.w+4.4*u)/e.w,h=(e.h+3.8*u)/e.h,d=.5*-u);var p=e.h*h-e.h,g=e.w*c-e.w;if(Vt(e,[Math.ceil(p/2),Math.ceil(g/2)]),0!==d){var f=(r=0,i=d,{x1:(n=e).x1+r,x2:n.x2+r,y1:n.y1+i,y2:n.y2+i,w:n.w,h:n.h});zt(e,f)}}}}(d,e)}else if(f&&t.includeEdges)if(c&&!h){var N=e.pstyle("curve-style").strValue;if(n=Math.min(v.srcX,v.midX,v.tgtX),r=Math.max(v.srcX,v.midX,v.tgtX),i=Math.min(v.srcY,v.midY,v.tgtY),a=Math.max(v.srcY,v.midY,v.tgtY),uo(d,n-=_,i-=_,r+=_,a+=_),"haystack"===N){var A=v.haystackPts;if(A&&2===A.length){if(n=A[0].x,i=A[0].y,n>(r=A[1].x)){var L=n;n=r,r=L}if(i>(a=A[1].y)){var k=i;i=a,a=k}uo(d,n-_,i-_,r+_,a+_)}}else if("bezier"===N||"unbundled-bezier"===N||N.endsWith("segments")||N.endsWith("taxi")){var S;switch(N){case"bezier":case"unbundled-bezier":S=v.bezierPts;break;case"segments":case"taxi":case"round-segments":case"round-taxi":S=v.linePts}if(null!=S)for(var M=0;M(r=P.x)){var R=n;n=r,r=R}if((i=O.y)>(a=P.y)){var B=i;i=a,a=B}uo(d,n-=_,i-=_,r+=_,a+=_)}if(c&&t.includeEdges&&f&&(po(d,e,"mid-source"),po(d,e,"mid-target"),po(d,e,"source"),po(d,e,"target")),c)if("yes"===e.pstyle("ghost").value){var F=e.pstyle("ghost-offset-x").pfValue,z=e.pstyle("ghost-offset-y").pfValue;uo(d,d.x1+F,d.y1+z,d.x2+F,d.y2+z)}var G=p.bodyBounds=p.bodyBounds||{};Xt(G,d),Vt(G,y),Yt(G,1),c&&(n=d.x1,r=d.x2,i=d.y1,a=d.y2,uo(d,n-E,i-E,r+E,a+E));var Y=p.overlayBounds=p.overlayBounds||{};Xt(Y,d),Vt(Y,y),Yt(Y,1);var V=p.labelBounds=p.labelBounds||{};null!=V.all?((l=V.all).x1=1/0,l.y1=1/0,l.x2=-1/0,l.y2=-1/0,l.w=0,l.h=0):V.all=Ft(),c&&t.includeLabels&&(t.includeMainLabels&&go(d,e,null),f&&(t.includeSourceLabels&&go(d,e,"source"),t.includeTargetLabels&&go(d,e,"target")))}return d.x1=lo(d.x1),d.y1=lo(d.y1),d.x2=lo(d.x2),d.y2=lo(d.y2),d.w=lo(d.x2-d.x1),d.h=lo(d.y2-d.y1),d.w>0&&d.h>0&&b&&(Vt(d,y),Yt(d,1)),d},vo=function(e){var t=0,n=function(e){return(e?1:0)<0&&void 0!==arguments[0]?arguments[0]:Ro,t=arguments.length>1?arguments[1]:void 0,n=0;n=0;s--)o(s);return this},Fo.removeAllListeners=function(){return this.removeListener("*")},Fo.emit=Fo.trigger=function(e,t,n){var r=this.listeners,i=r.length;return this.emitting++,w(t)||(t=[t]),Yo(this,(function(e,a){null!=n&&(r=[{event:a.event,type:a.type,namespace:a.namespace,callback:n}],i=r.length);for(var o=function(n){var i=r[n];if(i.type===a.type&&(!i.namespace||i.namespace===a.namespace||".*"===i.namespace)&&e.eventMatches(e.context,i,a)){var o=[a];null!=t&&function(e,t){for(var n=0;n1&&!r){var i=this.length-1,a=this[i],o=a._private.data.id;this[i]=void 0,this[e]=a,n.set(o,{ele:a,index:e})}return this.length--,this},unmergeOne:function(e){e=e[0];var t=this._private,n=e._private.data.id,r=t.map.get(n);if(!r)return this;var i=r.index;return this.unmergeAt(i),this},unmerge:function(e){var t=this._private.cy;if(!e)return this;if(e&&b(e)){var n=e;e=t.mutableElements().filter(n)}for(var r=0;r=0;t--){e(this[t])&&this.unmergeAt(t)}return this},map:function(e,t){for(var n=[],r=this,i=0;ir&&(r=s,n=o)}return{value:r,ele:n}},min:function(e,t){for(var n,r=1/0,i=this,a=0;a=0&&i1&&void 0!==arguments[1])||arguments[1],n=this[0],r=n.cy();if(r.styleEnabled()&&n){this.cleanStyle();var i=n._private.style[e];return null!=i?i:t?r.style().getDefaultProperty(e):null}},numericStyle:function(e){var t=this[0];if(t.cy().styleEnabled()&&t){var n=t.pstyle(e);return void 0!==n.pfValue?n.pfValue:n.value}},numericStyleUnits:function(e){var t=this[0];if(t.cy().styleEnabled())return t?t.pstyle(e).units:void 0},renderedStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=this[0];return n?t.style().getRenderedStyle(n,e):void 0},style:function(e,t){var n=this.cy();if(!n.styleEnabled())return this;var r=!1,i=n.style();if(E(e)){var a=e;i.applyBypass(this,a,r),this.emitAndNotify("style")}else if(b(e)){if(void 0===t){var o=this[0];return o?i.getStylePropertyValue(o,e):void 0}i.applyBypass(this,e,t,r),this.emitAndNotify("style")}else if(void 0===e){var s=this[0];return s?i.getRawStyle(s):void 0}return this},removeStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=!1,r=t.style(),i=this;if(void 0===e)for(var a=0;a0&&t.push(c[0]),t.push(s[0])}return this.spawn(t,!0).filter(e)}),"neighborhood"),closedNeighborhood:function(e){return this.neighborhood().add(this).filter(e)},openNeighborhood:function(e){return this.neighborhood(e)}}),ds.neighbourhood=ds.neighborhood,ds.closedNeighbourhood=ds.closedNeighborhood,ds.openNeighbourhood=ds.openNeighborhood,X(ds,{source:ja((function(e){var t,n=this[0];return n&&(t=n._private.source||n.cy().collection()),t&&e?t.filter(e):t}),"source"),target:ja((function(e){var t,n=this[0];return n&&(t=n._private.target||n.cy().collection()),t&&e?t.filter(e):t}),"target"),sources:vs({attr:"source"}),targets:vs({attr:"target"})}),X(ds,{edgesWith:ja(ys(),"edgesWith"),edgesTo:ja(ys({thisIsSrc:!0}),"edgesTo")}),X(ds,{connectedEdges:ja((function(e){for(var t=[],n=0;n0);return a},component:function(){var e=this[0];return e.cy().mutableElements().components(e)[0]}}),ds.componentsOf=ds.components;var bs=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(void 0!==e){var i=new at,a=!1;if(t){if(t.length>0&&E(t[0])&&!C(t[0])){a=!0;for(var o=[],s=new st,l=0,u=t.length;l0&&void 0!==arguments[0])||arguments[0],r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this,a=i.cy(),o=a._private,s=[],l=[],u=0,c=i.length;u0){for(var B=e.length===i.length?i:new bs(a,e),F=0;F0&&void 0!==arguments[0])||arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this,r=[],i={},a=n._private.cy;function o(e){var n=i[e.id()];t&&e.removed()||n||(i[e.id()]=!0,e.isNode()?(r.push(e),function(e){for(var t=e._private.edges,n=0;n0&&(e?_.emitAndNotify("remove"):t&&_.emit("remove"));for(var T=0;T=.001?function(t,r){for(var a=0;a0?i=l:r=l}while(Math.abs(s)>a&&++uh&&Math.abs(s.v)>h;);return a?function(e){return u[e*(u.length-1)|0]}:c}}(),Ts=function(e,t,n,r){var i=Es(e,t,n,r);return function(e,t,n){return e+(t-e)*i(n)}},Ds={linear:function(e,t,n){return e+(t-e)*n},ease:Ts(.25,.1,.25,1),"ease-in":Ts(.42,0,1,1),"ease-out":Ts(0,0,.58,1),"ease-in-out":Ts(.42,0,.58,1),"ease-in-sine":Ts(.47,0,.745,.715),"ease-out-sine":Ts(.39,.575,.565,1),"ease-in-out-sine":Ts(.445,.05,.55,.95),"ease-in-quad":Ts(.55,.085,.68,.53),"ease-out-quad":Ts(.25,.46,.45,.94),"ease-in-out-quad":Ts(.455,.03,.515,.955),"ease-in-cubic":Ts(.55,.055,.675,.19),"ease-out-cubic":Ts(.215,.61,.355,1),"ease-in-out-cubic":Ts(.645,.045,.355,1),"ease-in-quart":Ts(.895,.03,.685,.22),"ease-out-quart":Ts(.165,.84,.44,1),"ease-in-out-quart":Ts(.77,0,.175,1),"ease-in-quint":Ts(.755,.05,.855,.06),"ease-out-quint":Ts(.23,1,.32,1),"ease-in-out-quint":Ts(.86,0,.07,1),"ease-in-expo":Ts(.95,.05,.795,.035),"ease-out-expo":Ts(.19,1,.22,1),"ease-in-out-expo":Ts(1,0,0,1),"ease-in-circ":Ts(.6,.04,.98,.335),"ease-out-circ":Ts(.075,.82,.165,1),"ease-in-out-circ":Ts(.785,.135,.15,.86),spring:function(e,t,n){if(0===n)return Ds.linear;var r=_s(e,t,n);return function(e,t,n){return e+(t-e)*r(n)}},"cubic-bezier":Ts};function Cs(e,t,n,r,i){if(1===r)return n;if(t===n)return n;var a=i(t,n,r);return null==e||((e.roundValue||e.color)&&(a=Math.round(a)),void 0!==e.min&&(a=Math.max(a,e.min)),void 0!==e.max&&(a=Math.min(a,e.max))),a}function Ns(e,t){return null!=e.pfValue||null!=e.value?null==e.pfValue||null!=t&&"%"===t.type.units?e.value:e.pfValue:e}function As(e,t,n,r,i){var a=null!=i?i.type:null;n<0?n=0:n>1&&(n=1);var o=Ns(e,i),s=Ns(t,i);if(_(o)&&_(s))return Cs(a,o,s,n,r);if(w(o)&&w(s)){for(var l=[],u=0;u0?("spring"===h&&d.push(o.duration),o.easingImpl=Ds[h].apply(null,d)):o.easingImpl=Ds[h]}var p,g=o.easingImpl;if(p=0===o.duration?1:(n-l)/o.duration,o.applying&&(p=o.progress),p<0?p=0:p>1&&(p=1),null==o.delay){var f=o.startPosition,v=o.position;if(v&&i&&!e.locked()){var y={};ks(f.x,v.x)&&(y.x=As(f.x,v.x,p,g)),ks(f.y,v.y)&&(y.y=As(f.y,v.y,p,g)),e.position(y)}var m=o.startPan,x=o.pan,w=a.pan,E=null!=x&&r;E&&(ks(m.x,x.x)&&(w.x=As(m.x,x.x,p,g)),ks(m.y,x.y)&&(w.y=As(m.y,x.y,p,g)),e.emit("pan"));var _=o.startZoom,T=o.zoom,D=null!=T&&r;D&&(ks(_,T)&&(a.zoom=Bt(a.minZoom,As(_,T,p,g),a.maxZoom)),e.emit("zoom")),(E||D)&&e.emit("viewport");var C=o.style;if(C&&C.length>0&&i){for(var N=0;N=0;t--){(0,e[t])()}e.splice(0,e.length)},c=a.length-1;c>=0;c--){var h=a[c],d=h._private;d.stopped?(a.splice(c,1),d.hooked=!1,d.playing=!1,d.started=!1,u(d.frames)):(d.playing||d.applying)&&(d.playing&&d.applying&&(d.applying=!1),d.started||Ss(0,h,e),Ls(t,h,e,n),d.applying&&(d.applying=!1),u(d.frames),null!=d.step&&d.step(e),h.completed()&&(a.splice(c,1),d.hooked=!1,d.playing=!1,d.started=!1,u(d.completes)),s=!0)}return n||0!==a.length||0!==o.length||r.push(t),s}for(var a=!1,o=0;o0?t.notify("draw",n):t.notify("draw")),n.unmerge(r),t.emit("step")}var Is={animate:na.animate(),animation:na.animation(),animated:na.animated(),clearQueue:na.clearQueue(),delay:na.delay(),delayAnimation:na.delayAnimation(),stop:na.stop(),addToAnimationPool:function(e){this.styleEnabled()&&this._private.aniEles.merge(e)},stopAnimationLoop:function(){this._private.animationsRunning=!1},startAnimationLoop:function(){var e=this;if(e._private.animationsRunning=!0,e.styleEnabled()){var t=e.renderer();t&&t.beforeRender?t.beforeRender((function(t,n){Ms(n,e)}),t.beforeRenderPriorities.animations):function t(){e._private.animationsRunning&&Ne((function(n){Ms(n,e),t()}))}()}}},Os={qualifierCompare:function(e,t){return null==e||null==t?null==e&&null==t:e.sameText(t)},eventMatches:function(e,t,n){var r=t.qualifier;return null==r||e!==n.target&&C(n.target)&&r.matches(n.target)},addEventFields:function(e,t){t.cy=e,t.target=e},callbackContext:function(e,t,n){return null!=t.qualifier?n.target:e}},Ps=function(e){return b(e)?new Ga(e):e},Rs={createEmitter:function(){var e=this._private;return e.emitter||(e.emitter=new Bo(Os,this)),this},emitter:function(){return this._private.emitter},on:function(e,t,n){return this.emitter().on(e,Ps(t),n),this},removeListener:function(e,t,n){return this.emitter().removeListener(e,Ps(t),n),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(e,t,n){return this.emitter().one(e,Ps(t),n),this},once:function(e,t,n){return this.emitter().one(e,Ps(t),n),this},emit:function(e,t){return this.emitter().emit(e,t),this},emitAndNotify:function(e,t){return this.emit(e),this.notify(e,t),this}};na.eventAliasesOn(Rs);var Bs={png:function(e){return e=e||{},this._private.renderer.png(e)},jpg:function(e){var t=this._private.renderer;return(e=e||{}).bg=e.bg||"#fff",t.jpg(e)}};Bs.jpeg=Bs.jpg;var Fs={layout:function(e){var t=this;if(null!=e)if(null!=e.name){var n=e.name,r=t.extension("layout",n);if(null!=r){var i;i=b(e.eles)?t.$(e.eles):null!=e.eles?e.eles:t.$();var a=new r(X({},e,{cy:t,eles:i}));return a}He("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?")}else He("A `name` must be specified to make a layout");else He("Layout options must be specified to make a layout")}};Fs.createLayout=Fs.makeLayout=Fs.layout;var zs={notify:function(e,t){var n=this._private;if(this.batching()){n.batchNotifications=n.batchNotifications||{};var r=n.batchNotifications[e]=n.batchNotifications[e]||this.collection();null!=t&&r.merge(t)}else if(n.notificationsEnabled){var i=this.renderer();!this.destroyed()&&i&&i.notify(e,t)}},notifications:function(e){var t=this._private;return void 0===e?t.notificationsEnabled:(t.notificationsEnabled=!!e,this)},noNotifications:function(e){this.notifications(!1),e(),this.notifications(!0)},batching:function(){return this._private.batchCount>0},startBatch:function(){var e=this._private;return null==e.batchCount&&(e.batchCount=0),0===e.batchCount&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},endBatch:function(){var e=this._private;if(0===e.batchCount)return this;if(e.batchCount--,0===e.batchCount){e.batchStyleEles.updateStyle();var t=this.renderer();Object.keys(e.batchNotifications).forEach((function(n){var r=e.batchNotifications[n];r.empty()?t.notify(n):t.notify(n,r)}))}return this},batch:function(e){return this.startBatch(),e(),this.endBatch(),this},batchData:function(e){var t=this;return this.batch((function(){for(var n=Object.keys(e),r=0;r0;)t.removeChild(t.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach((function(e){var t=e._private;t.rscratch={},t.rstyle={},t.animation.current=[],t.animation.queue=[]}))},onRender:function(e){return this.on("render",e)},offRender:function(e){return this.off("render",e)}};Ys.invalidateDimensions=Ys.resize;var Vs={collection:function(e,t){return b(e)?this.$(e):D(e)?e.collection():w(e)?(t||(t={}),new bs(this,e,t.unique,t.removed)):new bs(this)},nodes:function(e){var t=this.$((function(e){return e.isNode()}));return e?t.filter(e):t},edges:function(e){var t=this.$((function(e){return e.isEdge()}));return e?t.filter(e):t},$:function(e){var t=this._private.elements;return e?t.filter(e):t.spawnSelf()},mutableElements:function(){return this._private.elements}};Vs.elements=Vs.filter=Vs.$;var Xs={},Us="t";Xs.apply=function(e){for(var t=this,n=t._private.cy.collection(),r=0;r0;if(d||h&&p){var g=void 0;d&&p||d?g=u.properties:p&&(g=u.mappedProperties);for(var f=0;f1&&(v=1),s.color){var w=i.valueMin[0],E=i.valueMax[0],T=i.valueMin[1],D=i.valueMax[1],C=i.valueMin[2],N=i.valueMax[2],A=null==i.valueMin[3]?1:i.valueMin[3],L=null==i.valueMax[3]?1:i.valueMax[3],k=[Math.round(w+(E-w)*v),Math.round(T+(D-T)*v),Math.round(C+(N-C)*v),Math.round(A+(L-A)*v)];n={bypass:i.bypass,name:i.name,value:k,strValue:"rgb("+k[0]+", "+k[1]+", "+k[2]+")"}}else{if(!s.number)return!1;var S=i.valueMin+(i.valueMax-i.valueMin)*v;n=this.parse(i.name,S,i.bypass,d)}if(!n)return f(),!1;n.mapping=i,i=n;break;case o.data:for(var M=i.field.split("."),I=h.data,O=0;O0&&a>0){for(var s={},l=!1,u=0;u0?e.delayAnimation(o).play().promise().then(t):t()})).then((function(){return e.animation({style:s,duration:a,easing:e.pstyle("transition-timing-function").value,queue:!1}).play().promise()})).then((function(){n.removeBypasses(e,i),e.emitAndNotify("style"),r.transitioning=!1}))}else r.transitioning&&(this.removeBypasses(e,i),e.emitAndNotify("style"),r.transitioning=!1)},Xs.checkTrigger=function(e,t,n,r,i,a){var o=this.properties[t],s=i(o);null!=s&&s(n,r)&&a(o)},Xs.checkZOrderTrigger=function(e,t,n,r){var i=this;this.checkTrigger(e,t,n,r,(function(e){return e.triggersZOrder}),(function(){i._private.cy.notify("zorder",e)}))},Xs.checkBoundsTrigger=function(e,t,n,r){this.checkTrigger(e,t,n,r,(function(e){return e.triggersBounds}),(function(i){e.dirtyCompoundBoundsCache(),e.dirtyBoundingBoxCache(),!i.triggersBoundsOfParallelBeziers||"curve-style"!==t||"bezier"!==n&&"bezier"!==r||e.parallelEdges().forEach((function(e){e.isBundledBezier()&&e.dirtyBoundingBoxCache()})),!i.triggersBoundsOfConnectedEdges||"display"!==t||"none"!==n&&"none"!==r||e.connectedEdges().forEach((function(e){e.dirtyBoundingBoxCache()}))}))},Xs.checkTriggers=function(e,t,n,r){e.dirtyStyleCache(),this.checkZOrderTrigger(e,t,n,r),this.checkBoundsTrigger(e,t,n,r)};var js={applyBypass:function(e,t,n,r){var i=[];if("*"===t||"**"===t){if(void 0!==n)for(var a=0;at.length?a.substr(t.length):""}function s(){n=n.length>r.length?n.substr(r.length):""}for(a=a.replace(/[/][*](\s|.)+?[*][/]/g,"");;){if(a.match(/^\s*$/))break;var l=a.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!l){$e("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+a);break}t=l[0];var u=l[1];if("core"!==u)if(new Ga(u).invalid){$e("Skipping parsing of block: Invalid selector found in string stylesheet: "+u),o();continue}var c=l[2],h=!1;n=c;for(var d=[];;){if(n.match(/^\s*$/))break;var p=n.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!p){$e("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+c),h=!0;break}r=p[0];var g=p[1],f=p[2];if(this.properties[g])i.parse(g,f)?(d.push({name:g,val:f}),s()):($e("Skipping property: Invalid property definition in: "+r),s());else $e("Skipping property: Invalid property name in: "+r),s()}if(h){o();break}i.selector(u);for(var v=0;v=7&&"d"===t[0]&&(u=new RegExp(s.data.regex).exec(t))){if(n)return!1;var d=s.data;return{name:e,value:u,strValue:""+t,mapped:d,field:u[1],bypass:n}}if(t.length>=10&&"m"===t[0]&&(c=new RegExp(s.mapData.regex).exec(t))){if(n)return!1;if(h.multiple)return!1;var p=s.mapData;if(!h.color&&!h.number)return!1;var g=this.parse(e,c[4]);if(!g||g.mapped)return!1;var f=this.parse(e,c[5]);if(!f||f.mapped)return!1;if(g.pfValue===f.pfValue||g.strValue===f.strValue)return $e("`"+e+": "+t+"` is not a valid mapper because the output range is zero; converting to `"+e+": "+g.strValue+"`"),this.parse(e,g.strValue);if(h.color){var v=g.value,y=f.value;if(!(v[0]!==y[0]||v[1]!==y[1]||v[2]!==y[2]||v[3]!==y[3]&&(null!=v[3]&&1!==v[3]||null!=y[3]&&1!==y[3])))return!1}return{name:e,value:c,strValue:""+t,mapped:p,field:c[1],fieldMin:parseFloat(c[2]),fieldMax:parseFloat(c[3]),valueMin:g.value,valueMax:f.value,bypass:n}}}if(h.multiple&&"multiple"!==r){var m;if(m=l?t.split(/\s+/):w(t)?t:[t],h.evenMultiple&&m.length%2!=0)return null;for(var E=[],T=[],D=[],C="",N=!1,A=0;A0?" ":"")+L.strValue}return h.validate&&!h.validate(E,T)?null:h.singleEnum&&N?1===E.length&&b(E[0])?{name:e,value:E[0],strValue:E[0],bypass:n}:null:{name:e,value:E,pfValue:D,strValue:C,bypass:n,units:T}}var k,S,M=function(){for(var r=0;rh.max||h.strictMax&&t===h.max))return null;var z={name:e,value:t,strValue:""+t+(O||""),units:O,bypass:n};return h.unitless||"px"!==O&&"em"!==O?z.pfValue=t:z.pfValue="px"!==O&&O?this.getEmSizeInPixels()*t:t,"ms"!==O&&"s"!==O||(z.pfValue="ms"===O?t:1e3*t),"deg"!==O&&"rad"!==O||(z.pfValue="rad"===O?t:(k=t,Math.PI*k/180)),"%"===O&&(z.pfValue=t/100),z}if(h.propList){var G=[],Y=""+t;if("none"===Y);else{for(var V=Y.split(/\s*,\s*|\s+/),X=0;X0&&l>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0)return{zoom:o=(o=(o=Math.min((s-2*t)/n.w,(l-2*t)/n.h))>this._private.maxZoom?this._private.maxZoom:o)=n.minZoom&&(n.maxZoom=t),this},minZoom:function(e){return void 0===e?this._private.minZoom:this.zoomRange({min:e})},maxZoom:function(e){return void 0===e?this._private.maxZoom:this.zoomRange({max:e})},getZoomedViewport:function(e){var t,n,r=this._private,i=r.pan,a=r.zoom,o=!1;if(r.zoomingEnabled||(o=!0),_(e)?n=e:E(e)&&(n=e.level,null!=e.position?t=Ct(e.position,a,i):null!=e.renderedPosition&&(t=e.renderedPosition),null==t||r.panningEnabled||(o=!0)),n=(n=n>r.maxZoom?r.maxZoom:n)t.maxZoom||!t.zoomingEnabled?a=!0:(t.zoom=s,i.push("zoom"))}if(r&&(!a||!e.cancelOnFailedZoom)&&t.panningEnabled){var l=e.pan;_(l.x)&&(t.pan.x=l.x,o=!1),_(l.y)&&(t.pan.y=l.y,o=!1),o||i.push("pan")}return i.length>0&&(i.push("viewport"),this.emit(i.join(" ")),this.notify("viewport")),this},center:function(e){var t=this.getCenterPan(e);return t&&(this._private.pan=t,this.emit("pan viewport"),this.notify("viewport")),this},getCenterPan:function(e,t){if(this._private.panningEnabled){if(b(e)){var n=e;e=this.mutableElements().filter(n)}else D(e)||(e=this.mutableElements());if(0!==e.length){var r=e.boundingBox(),i=this.width(),a=this.height();return{x:(i-(t=void 0===t?this._private.zoom:t)*(r.x1+r.x2))/2,y:(a-t*(r.y1+r.y2))/2}}}},reset:function(){return this._private.panningEnabled&&this._private.zoomingEnabled?(this.viewport({pan:{x:0,y:0},zoom:1}),this):this},invalidateSize:function(){this._private.sizeCache=null},size:function(){var e,t,n=this._private,r=n.container,i=this;return n.sizeCache=n.sizeCache||(r?(e=i.window().getComputedStyle(r),t=function(t){return parseFloat(e.getPropertyValue(t))},{width:r.clientWidth-t("padding-left")-t("padding-right"),height:r.clientHeight-t("padding-top")-t("padding-bottom")}):{width:1,height:1})},width:function(){return this.size().width},height:function(){return this.size().height},extent:function(){var e=this._private.pan,t=this._private.zoom,n=this.renderedExtent(),r={x1:(n.x1-e.x)/t,x2:(n.x2-e.x)/t,y1:(n.y1-e.y)/t,y2:(n.y2-e.y)/t};return r.w=r.x2-r.x1,r.h=r.y2-r.y1,r},renderedExtent:function(){var e=this.width(),t=this.height();return{x1:0,y1:0,x2:e,y2:t,w:e,h:t}},multiClickDebounceTime:function(e){return e?(this._private.multiClickDebounceTime=e,this):this._private.multiClickDebounceTime}};tl.centre=tl.center,tl.autolockNodes=tl.autolock,tl.autoungrabifyNodes=tl.autoungrabify;var nl={data:na.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:na.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:na.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:na.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};nl.attr=nl.data,nl.removeAttr=nl.removeData;var rl=function(e){var t=this,n=(e=X({},e)).container;n&&!T(n)&&T(n[0])&&(n=n[0]);var r=n?n._cyreg:null;(r=r||{})&&r.cy&&(r.cy.destroy(),r={});var i=r.readies=r.readies||[];n&&(n._cyreg=r),r.cy=t;var a=void 0!==d&&void 0!==n&&!e.headless,o=e;o.layout=X({name:a?"grid":"null"},o.layout),o.renderer=X({name:a?"canvas":"null"},o.renderer);var s=function(e,t,n){return void 0!==t?t:void 0!==n?n:e},l=this._private={container:n,ready:!1,options:o,elements:new bs(this),listeners:[],aniEles:new bs(this),data:o.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:s(!0,o.zoomingEnabled),userZoomingEnabled:s(!0,o.userZoomingEnabled),panningEnabled:s(!0,o.panningEnabled),userPanningEnabled:s(!0,o.userPanningEnabled),boxSelectionEnabled:s(!0,o.boxSelectionEnabled),autolock:s(!1,o.autolock,o.autolockNodes),autoungrabify:s(!1,o.autoungrabify,o.autoungrabifyNodes),autounselectify:s(!1,o.autounselectify),styleEnabled:void 0===o.styleEnabled?a:o.styleEnabled,zoom:_(o.zoom)?o.zoom:1,pan:{x:E(o.pan)&&_(o.pan.x)?o.pan.x:0,y:E(o.pan)&&_(o.pan.y)?o.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:s(250,o.multiClickDebounceTime)};this.createEmitter(),this.selectionType(o.selectionType),this.zoomRange({min:o.minZoom,max:o.maxZoom});l.styleEnabled&&t.setStyle([]);var u=X({},o,o.renderer);t.initRenderer(u);!function(e,t){if(e.some(S))return Ar.all(e).then(t);t(e)}([o.style,o.elements],(function(e){var n=e[0],a=e[1];l.styleEnabled&&t.style().append(n),function(e,n,r){t.notifications(!1);var i=t.mutableElements();i.length>0&&i.remove(),null!=e&&(E(e)||w(e))&&t.add(e),t.one("layoutready",(function(e){t.notifications(!0),t.emit(e),t.one("load",n),t.emitAndNotify("load")})).one("layoutstop",(function(){t.one("done",r),t.emit("done")}));var a=X({},t._private.options.layout);a.eles=t.elements(),t.layout(a).run()}(a,(function(){t.startAnimationLoop(),l.ready=!0,x(o.ready)&&t.on("ready",o.ready);for(var e=0;e0,u=Ft(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(D(n.roots))e=n.roots;else if(w(n.roots)){for(var c=[],h=0;h0;){var M=L.shift(),I=A(M,k);if(I)M.outgoers().filter((function(e){return e.isNode()&&i.has(e)})).forEach(S);else if(null===I){$e("Detected double maximal shift for node `"+M.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}N();var O=0;if(n.avoidOverlap)for(var P=0;P0&&y[0].length<=3?l/2:0),h=2*Math.PI/y[r].length*i;return 0===r&&1===y[0].length&&(c=1),{x:W+c*Math.cos(h),y:$+c*Math.sin(h)}}return{x:W+(i+1-(a+1)/2)*o,y:(r+1)*s}})),this};var cl={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function hl(e){this.options=X({},cl,e)}hl.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,i=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,a=r.nodes().not(":parent");t.sort&&(a=a.sort(t.sort));for(var o,s=Ft(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),l=s.x1+s.w/2,u=s.y1+s.h/2,c=(void 0===t.sweep?2*Math.PI-2*Math.PI/a.length:t.sweep)/Math.max(1,a.length-1),h=0,d=0;d1&&t.avoidOverlap){h*=1.75;var v=Math.cos(c)-Math.cos(0),y=Math.sin(c)-Math.sin(0),m=Math.sqrt(h*h/(v*v+y*y));o=Math.max(m,o)}return r.nodes().layoutPositions(this,t,(function(e,n){var r=t.startAngle+n*c*(i?1:-1),a=o*Math.cos(r),s=o*Math.sin(r);return{x:l+a,y:u+s}})),this};var dl,pl={fit:!0,padding:30,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:function(e){return e.degree()},levelWidth:function(e){return e.maxDegree()/4},animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function gl(e){this.options=X({},pl,e)}gl.prototype.run=function(){for(var e=this.options,t=e,n=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,r=e.cy,i=t.eles,a=i.nodes().not(":parent"),o=Ft(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),s=o.x1+o.w/2,l=o.y1+o.h/2,u=[],c=0,h=0;h0)Math.abs(m[0].value-x.value)>=v&&(m=[],y.push(m));m.push(x)}var w=c+t.minNodeSpacing;if(!t.avoidOverlap){var E=y.length>0&&y[0].length>1,_=(Math.min(o.w,o.h)/2-w)/(y.length+E?1:0);w=Math.min(w,_)}for(var T=0,D=0;D1&&t.avoidOverlap){var L=Math.cos(A)-Math.cos(0),k=Math.sin(A)-Math.sin(0),S=Math.sqrt(w*w/(L*L+k*k));T=Math.max(S,T)}C.r=T,T+=w}if(t.equidistant){for(var M=0,I=0,O=0;O=e.numIter)&&(_l(r,e),r.temperature=r.temperature*e.coolingFactor,!(r.temperature=e.animationThreshold&&a(),Ne(t)):(Pl(r,e),s())}()}else{for(;u;)u=o(l),l++;Pl(r,e),s()}return this},vl.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this},vl.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var yl=function(e,t,n){for(var r=n.eles.edges(),i=n.eles.nodes(),a=Ft(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),o={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:i.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:r.size(),temperature:n.initialTemp,clientWidth:a.w,clientHeight:a.h,boundingBox:a},s=n.eles.components(),l={},u=0;u0){o.graphSet.push(E);for(u=0;ur.count?0:r.graph},bl=function e(t,n,r,i){var a=i.graphSet[r];if(-10)var s=(u=r.nodeOverlap*o)*i/(f=Math.sqrt(i*i+a*a)),l=u*a/f;else{var u,c=Al(e,i,a),h=Al(t,-1*i,-1*a),d=h.x-c.x,p=h.y-c.y,g=d*d+p*p,f=Math.sqrt(g);s=(u=(e.nodeRepulsion+t.nodeRepulsion)/g)*d/f,l=u*p/f}e.isLocked||(e.offsetX-=s,e.offsetY-=l),t.isLocked||(t.offsetX+=s,t.offsetY+=l)}},Nl=function(e,t,n,r){if(n>0)var i=e.maxX-t.minX;else i=t.maxX-e.minX;if(r>0)var a=e.maxY-t.minY;else a=t.maxY-e.minY;return i>=0&&a>=0?Math.sqrt(i*i+a*a):0},Al=function(e,t,n){var r=e.positionX,i=e.positionY,a=e.height||1,o=e.width||1,s=n/t,l=a/o,u={};return 0===t&&0n?(u.x=r,u.y=i+a/2,u):0t&&-1*l<=s&&s<=l?(u.x=r-o/2,u.y=i-o*n/2/t,u):0=l)?(u.x=r+a*t/2/n,u.y=i+a/2,u):0>n&&(s<=-1*l||s>=l)?(u.x=r-a*t/2/n,u.y=i-a/2,u):u},Ll=function(e,t){for(var n=0;n1){var g=t.gravity*h/p,f=t.gravity*d/p;c.offsetX+=g,c.offsetY+=f}}}}},Sl=function(e,t){var n=[],r=0,i=-1;for(n.push.apply(n,e.graphSet[0]),i+=e.graphSet[0].length;r<=i;){var a=n[r++],o=e.idToIndex[a],s=e.layoutNodes[o],l=s.children;if(0n)var i={x:n*e/r,y:n*t/r};else i={x:e,y:t};return i},Ol=function e(t,n){var r=t.parentId;if(null!=r){var i=n.layoutNodes[n.idToIndex[r]],a=!1;return(null==i.maxX||t.maxX+i.padRight>i.maxX)&&(i.maxX=t.maxX+i.padRight,a=!0),(null==i.minX||t.minX-i.padLefti.maxY)&&(i.maxY=t.maxY+i.padBottom,a=!0),(null==i.minY||t.minY-i.padTopg&&(h+=p+t.componentSpacing,c=0,d=0,p=0)}}},Rl={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:function(e){},sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function Bl(e){this.options=X({},Rl,e)}Bl.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,i=r.nodes().not(":parent");t.sort&&(i=i.sort(t.sort));var a=Ft(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()});if(0===a.h||0===a.w)r.nodes().layoutPositions(this,t,(function(e){return{x:a.x1,y:a.y1}}));else{var o=i.size(),s=Math.sqrt(o*a.h/a.w),l=Math.round(s),u=Math.round(a.w/a.h*s),c=function(e){if(null==e)return Math.min(l,u);Math.min(l,u)==l?l=e:u=e},h=function(e){if(null==e)return Math.max(l,u);Math.max(l,u)==l?l=e:u=e},d=t.rows,p=null!=t.cols?t.cols:t.columns;if(null!=d&&null!=p)l=d,u=p;else if(null!=d&&null==p)l=d,u=Math.ceil(o/l);else if(null==d&&null!=p)u=p,l=Math.ceil(o/u);else if(u*l>o){var g=c(),f=h();(g-1)*f>=o?c(g-1):(f-1)*g>=o&&h(f-1)}else for(;u*l=o?h(y+1):c(v+1)}var m=a.w/u,b=a.h/l;if(t.condense&&(m=0,b=0),t.avoidOverlap)for(var x=0;x=u&&(S=0,k++)},I={},O=0;O(r=Zt(e,t,x[w],x[w+1],x[w+2],x[w+3])))return v(n,r),!0}else if("bezier"===a.edgeType||"multibezier"===a.edgeType||"self"===a.edgeType||"compound"===a.edgeType)for(x=a.allpts,w=0;w+5(r=Kt(e,t,x[w],x[w+1],x[w+2],x[w+3],x[w+4],x[w+5])))return v(n,r),!0;m=m||i.source,b=b||i.target;var E=o.getArrowWidth(l,c),_=[{name:"source",x:a.arrowStartX,y:a.arrowStartY,angle:a.srcArrowAngle},{name:"target",x:a.arrowEndX,y:a.arrowEndY,angle:a.tgtArrowAngle},{name:"mid-source",x:a.midX,y:a.midY,angle:a.midsrcArrowAngle},{name:"mid-target",x:a.midX,y:a.midY,angle:a.midtgtArrowAngle}];for(w=0;w<_.length;w++){var T=_[w],D=s.arrowShapes[n.pstyle(T.name+"-arrow-shape").value],C=n.pstyle("width").pfValue;if(D.roughCollide(e,t,E,T.angle,{x:T.x,y:T.y},C,d)&&D.collide(e,t,E,T.angle,{x:T.x,y:T.y},C,d))return v(n),!0}h&&u.length>0&&(y(m),y(b))}function b(e,t,n){return rt(e,t,n)}function x(n,r){var i,a=n._private,o=g;i=r?r+"-":"",n.boundingBox();var s=a.labelBounds[r||"main"],l=n.pstyle(i+"label").value;if("yes"===n.pstyle("text-events").strValue&&l){var u=b(a.rscratch,"labelX",r),c=b(a.rscratch,"labelY",r),h=b(a.rscratch,"labelAngle",r),d=n.pstyle(i+"text-margin-x").pfValue,p=n.pstyle(i+"text-margin-y").pfValue,f=s.x1-o-d,y=s.x2+o-d,m=s.y1-o-p,x=s.y2+o-p;if(h){var w=Math.cos(h),E=Math.sin(h),_=function(e,t){return{x:(e-=u)*w-(t-=c)*E+u,y:e*E+t*w+c}},T=_(f,m),D=_(f,x),C=_(y,m),N=_(y,x),A=[T.x+d,T.y+p,C.x+d,C.y+p,N.x+d,N.y+p,D.x+d,D.y+p];if(Qt(e,t,A))return v(n),!0}else if(jt(s,e,t))return v(n),!0}}n&&(l=l.interactive);for(var w=l.length-1;w>=0;w--){var E=l[w];E.isNode()?y(E)||x(E):m(E)||x(E)||x(E,"source")||x(E,"target")}return u},getAllInBox:function(e,t,n,r){for(var i,a,o=this.getCachedZSortedEles().interactive,s=[],l=Math.min(e,n),u=Math.max(e,n),c=Math.min(t,r),h=Math.max(t,r),d=Ft({x1:e=l,y1:t=c,x2:n=u,y2:r=h}),p=0;p0?-(Math.PI-a.ang):Math.PI+a.ang),vu(t,n,fu),Jl=gu.nx*fu.ny-gu.ny*fu.nx,eu=gu.nx*fu.nx-gu.ny*-fu.ny,ru=Math.asin(Math.max(-1,Math.min(1,Jl))),Math.abs(ru)<1e-6)return Zl=t.x,Ql=t.y,void(au=su=0);tu=1,nu=!1,eu<0?ru<0?ru=Math.PI+ru:(ru=Math.PI-ru,tu=-1,nu=!0):ru>0&&(tu=-1,nu=!0),su=void 0!==t.radius?t.radius:r,iu=ru/2,lu=Math.min(gu.len/2,fu.len/2),i?(ou=Math.abs(Math.cos(iu)*su/Math.sin(iu)))>lu?(ou=lu,au=Math.abs(ou*Math.sin(iu)/Math.cos(iu))):au=su:(ou=Math.min(lu,su),au=Math.abs(ou*Math.sin(iu)/Math.cos(iu))),hu=t.x+fu.nx*ou,du=t.y+fu.ny*ou,Zl=hu-fu.ny*au*tu,Ql=du+fu.nx*au*tu,uu=t.x+gu.nx*ou,cu=t.y+gu.ny*ou,pu=t};function mu(e,t){0===t.radius?e.lineTo(t.cx,t.cy):e.arc(t.cx,t.cy,t.radius,t.startAngle,t.endAngle,t.counterClockwise)}function bu(e,t,n,r){var i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];return 0===r||0===t.radius?{cx:t.x,cy:t.y,radius:0,startX:t.x,startY:t.y,stopX:t.x,stopY:t.y,startAngle:void 0,endAngle:void 0,counterClockwise:void 0}:(yu(e,t,n,r,i),{cx:Zl,cy:Ql,radius:au,startX:uu,startY:cu,stopX:hu,stopY:du,startAngle:gu.ang+Math.PI/2*tu,endAngle:fu.ang-Math.PI/2*tu,counterClockwise:nu})}var xu={};function wu(e){var t=[];if(null!=e){for(var n=0;n0?Math.max(e-t,0):Math.min(e+t,0)},N=C(T,E),A=C(D,_),L=!1;"auto"===v?f=Math.abs(N)>Math.abs(A)?i:r:v===l||v===s?(f=r,L=!0):v!==a&&v!==o||(f=i,L=!0);var k,S=f===r,M=S?A:N,I=S?D:T,O=St(I),P=!1;(L&&(m||x)||!(v===s&&I<0||v===l&&I>0||v===a&&I>0||v===o&&I<0)||(M=(O*=-1)*Math.abs(M),P=!0),m)?k=(b<0?1+b:b)*M:k=(b<0?M:0)+b*O;var R=function(e){return Math.abs(e)=Math.abs(M)},B=R(k),F=R(Math.abs(M)-Math.abs(k));if((B||F)&&!P)if(S){var z=Math.abs(I)<=h/2,G=Math.abs(T)<=d/2;if(z){var Y=(u.x1+u.x2)/2,V=u.y1,X=u.y2;n.segpts=[Y,V,Y,X]}else if(G){var U=(u.y1+u.y2)/2,j=u.x1,q=u.x2;n.segpts=[j,U,q,U]}else n.segpts=[u.x1,u.y2]}else{var H=Math.abs(I)<=c/2,W=Math.abs(D)<=p/2;if(H){var $=(u.y1+u.y2)/2,K=u.x1,Z=u.x2;n.segpts=[K,$,Z,$]}else if(W){var Q=(u.x1+u.x2)/2,J=u.y1,ee=u.y2;n.segpts=[Q,J,Q,ee]}else n.segpts=[u.x2,u.y1]}else if(S){var te=u.y1+k+(g?h/2*O:0),ne=u.x1,re=u.x2;n.segpts=[ne,te,re,te]}else{var ie=u.x1+k+(g?c/2*O:0),ae=u.y1,oe=u.y2;n.segpts=[ie,ae,ie,oe]}if(n.isRound){var se=e.pstyle("taxi-radius").value,le="arc-radius"===e.pstyle("radius-type").value[0];n.radii=new Array(n.segpts.length/2).fill(se),n.isArcRadius=new Array(n.segpts.length/2).fill(le)}},xu.tryToCorrectInvalidPoints=function(e,t){var n=e._private.rscratch;if("bezier"===n.edgeType){var r=t.srcPos,i=t.tgtPos,a=t.srcW,o=t.srcH,s=t.tgtW,l=t.tgtH,u=t.srcShape,c=t.tgtShape,h=t.srcCornerRadius,d=t.tgtCornerRadius,p=t.srcRs,g=t.tgtRs,f=!_(n.startX)||!_(n.startY),v=!_(n.arrowStartX)||!_(n.arrowStartY),y=!_(n.endX)||!_(n.endY),m=!_(n.arrowEndX)||!_(n.arrowEndY),b=3*(this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth),x=Mt({x:n.ctrlpts[0],y:n.ctrlpts[1]},{x:n.startX,y:n.startY}),w=xd.poolIndex()){var p=h;h=d,d=p}var g=s.srcPos=h.position(),f=s.tgtPos=d.position(),v=s.srcW=h.outerWidth(),y=s.srcH=h.outerHeight(),m=s.tgtW=d.outerWidth(),b=s.tgtH=d.outerHeight(),x=s.srcShape=n.nodeShapes[t.getNodeShape(h)],w=s.tgtShape=n.nodeShapes[t.getNodeShape(d)],E=s.srcCornerRadius="auto"===h.pstyle("corner-radius").value?"auto":h.pstyle("corner-radius").pfValue,T=s.tgtCornerRadius="auto"===d.pstyle("corner-radius").value?"auto":d.pstyle("corner-radius").pfValue,D=s.tgtRs=d._private.rscratch,C=s.srcRs=h._private.rscratch;s.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var N=0;N0){var q=u,H=It(q,At(t)),W=It(q,At(j)),$=H;if(W2)It(q,{x:j[2],y:j[3]})<$&&(t=[j[2],j[3]])}}var K=ln(t,n,o.arrowShapes[h].spacing(e)+p),Z=ln(t,n,o.arrowShapes[h].gap(e)+p);if(m.endX=Z[0],m.endY=Z[1],m.arrowEndX=K[0],m.arrowEndY=K[1],"inside-to-node"===L)t=[u.x,u.y];else if(A.units)t=this.manualEndptToPx(s,A);else if("outside-to-line"===L)t=m.srcIntn;else if("outside-to-node"===L||"outside-to-node-or-label"===L?a=r:"outside-to-line"!==L&&"outside-to-line-or-label"!==L||(a=[c.x,c.y]),t=o.nodeShapes[this.getNodeShape(s)].intersectLine(u.x,u.y,s.outerWidth(),s.outerHeight(),a[0],a[1],0,k,f),"outside-to-node-or-label"===L||"outside-to-line-or-label"===L){var Q=s._private.rscratch,J=Q.labelWidth,ee=Q.labelHeight,te=Q.labelX,ne=Q.labelY,re=J/2,ie=ee/2,ae=s.pstyle("text-valign").value;"top"===ae?ne-=ie:"bottom"===ae&&(ne+=ie);var oe=s.pstyle("text-halign").value;"left"===oe?te-=re:"right"===oe&&(te+=re);var se=sn(a[0],a[1],[te-re,ne-ie,te+re,ne-ie,te+re,ne+ie,te-re,ne+ie],u.x,u.y);if(se.length>0){var le=c,ue=It(le,At(t)),ce=It(le,At(se)),he=ue;if(ce2)It(le,{x:se[2],y:se[3]})=u||m){c={cp:f,segment:y};break}}if(c)break}var b=c.cp,x=c.segment,w=(u-d)/x.length,E=x.t1-x.t0,_=s?x.t0+E*w:x.t1-E*w;_=Bt(0,_,1),t=Rt(b.p0,b.p1,b.p2,_),i=function(e,t,n,r){var i=Bt(0,r-.001,1),a=Bt(0,r+.001,1),o=Rt(e,t,n,i),s=Rt(e,t,n,a);return Nu(o,s)}(b.p0,b.p1,b.p2,_);break;case"straight":case"segments":case"haystack":for(var T,D,C,N,A=0,L=r.allpts.length,k=0;k+3=u));k+=2);var S=(u-D)/T;S=Bt(0,S,1),t=function(e,t,n,r){var i=t.x-e.x,a=t.y-e.y,o=Mt(e,t),s=i/o,l=a/o;return n=null==n?0:n,r=null!=r?r:n*o,{x:e.x+s*r,y:e.y+l*r}}(C,N,S),i=Nu(C,N)}o("labelX",n,t.x),o("labelY",n,t.y),o("labelAutoAngle",n,i)}};u("source"),u("target"),this.applyLabelDimensions(e)}},Du.applyLabelDimensions=function(e){this.applyPrefixedLabelDimensions(e),e.isEdge()&&(this.applyPrefixedLabelDimensions(e,"source"),this.applyPrefixedLabelDimensions(e,"target"))},Du.applyPrefixedLabelDimensions=function(e,t){var n=e._private,r=this.getLabelText(e,t),i=this.calculateLabelDimensions(e,r),a=e.pstyle("line-height").pfValue,o=e.pstyle("text-wrap").strValue,s=rt(n.rscratch,"labelWrapCachedLines",t)||[],l="wrap"!==o?1:Math.max(s.length,1),u=i.height/l,c=u*a,h=i.width,d=i.height+(l-1)*(a-1)*u;it(n.rstyle,"labelWidth",t,h),it(n.rscratch,"labelWidth",t,h),it(n.rstyle,"labelHeight",t,d),it(n.rscratch,"labelHeight",t,d),it(n.rscratch,"labelLineHeight",t,c)},Du.getLabelText=function(e,t){var n=e._private,r=t?t+"-":"",i=e.pstyle(r+"label").strValue,a=e.pstyle("text-transform").value,o=function(e,r){return r?(it(n.rscratch,e,t,r),r):rt(n.rscratch,e,t)};if(!i)return"";"none"==a||("uppercase"==a?i=i.toUpperCase():"lowercase"==a&&(i=i.toLowerCase()));var s=e.pstyle("text-wrap").value;if("wrap"===s){var l=o("labelKey");if(null!=l&&o("labelWrapKey")===l)return o("labelWrapCachedText");for(var u=i.split("\n"),c=e.pstyle("text-max-width").pfValue,h="anywhere"===e.pstyle("text-overflow-wrap").value,d=[],p=/[\s\u200b]+/,g=h?"":" ",f=0;fc){for(var b=v.split(p),x="",w=0;wT)break;D+=i[N],N===i.length-1&&(C=!0)}return C||(D+="\u2026"),D}return i},Du.getLabelJustification=function(e){var t=e.pstyle("text-justification").strValue,n=e.pstyle("text-halign").strValue;if("auto"!==t)return t;if(!e.isNode())return"center";switch(n){case"left":return"right";case"right":return"left";default:return"center"}},Du.calculateLabelDimensions=function(e,t){var n=Re(t,e._private.labelDimsKey),r=this.labelDimCache||(this.labelDimCache=[]),i=r[n];if(null!=i)return i;var a=e.pstyle("font-style").strValue,o=e.pstyle("font-size").pfValue,s=e.pstyle("font-family").strValue,l=e.pstyle("font-weight").strValue,u=this.labelCalcCanvas,c=this.labelCalcCanvasContext;if(!u){u=this.labelCalcCanvas=document.createElement("canvas"),c=this.labelCalcCanvasContext=u.getContext("2d");var h=u.style;h.position="absolute",h.left="-9999px",h.top="-9999px",h.zIndex="-1",h.visibility="hidden",h.pointerEvents="none"}c.font="".concat(a," ").concat(l," ").concat(o,"px ").concat(s);for(var d=0,p=0,g=t.split("\n"),f=0;f1&&void 0!==arguments[1])||arguments[1];if(t.merge(e),n)for(var r=0;r=e.desktopTapThreshold2}var N=i(t);v&&(e.hoverData.tapholdCancelled=!0);n=!0,r(f,["mousemove","vmousemove","tapdrag"],t,{x:c[0],y:c[1]});var A=function(){e.data.bgActivePosistion=void 0,e.hoverData.selecting||o.emit({originalEvent:t,type:"boxstart",position:{x:c[0],y:c[1]}}),g[4]=1,e.hoverData.selecting=!0,e.redrawHint("select",!0),e.redraw()};if(3===e.hoverData.which){if(v){var L={originalEvent:t,type:"cxtdrag",position:{x:c[0],y:c[1]}};m?m.emit(L):o.emit(L),e.hoverData.cxtDragged=!0,e.hoverData.cxtOver&&f===e.hoverData.cxtOver||(e.hoverData.cxtOver&&e.hoverData.cxtOver.emit({originalEvent:t,type:"cxtdragout",position:{x:c[0],y:c[1]}}),e.hoverData.cxtOver=f,f&&f.emit({originalEvent:t,type:"cxtdragover",position:{x:c[0],y:c[1]}}))}}else if(e.hoverData.dragging){if(n=!0,o.panningEnabled()&&o.userPanningEnabled()){var k;if(e.hoverData.justStartedPan){var S=e.hoverData.mdownPos;k={x:(c[0]-S[0])*s,y:(c[1]-S[1])*s},e.hoverData.justStartedPan=!1}else k={x:b[0]*s,y:b[1]*s};o.panBy(k),o.emit("dragpan"),e.hoverData.dragged=!0}c=e.projectIntoViewport(t.clientX,t.clientY)}else if(1!=g[4]||null!=m&&!m.pannable()){if(m&&m.pannable()&&m.active()&&m.unactivate(),m&&m.grabbed()||f==y||(y&&r(y,["mouseout","tapdragout"],t,{x:c[0],y:c[1]}),f&&r(f,["mouseover","tapdragover"],t,{x:c[0],y:c[1]}),e.hoverData.last=f),m)if(v){if(o.boxSelectionEnabled()&&N)m&&m.grabbed()&&(h(x),m.emit("freeon"),x.emit("free"),e.dragData.didDrag&&(m.emit("dragfreeon"),x.emit("dragfree"))),A();else if(m&&m.grabbed()&&e.nodeIsDraggable(m)){var M=!e.dragData.didDrag;M&&e.redrawHint("eles",!0),e.dragData.didDrag=!0,e.hoverData.draggingEles||u(x,{inDragLayer:!0});var I={x:0,y:0};if(_(b[0])&&_(b[1])&&(I.x+=b[0],I.y+=b[1],M)){var O=e.hoverData.dragDelta;O&&_(O[0])&&_(O[1])&&(I.x+=O[0],I.y+=O[1])}e.hoverData.draggingEles=!0,x.silentShift(I).emit("position drag"),e.redrawHint("drag",!0),e.redraw()}}else!function(){var t=e.hoverData.dragDelta=e.hoverData.dragDelta||[];0===t.length?(t.push(b[0]),t.push(b[1])):(t[0]+=b[0],t[1]+=b[1])}();n=!0}else if(v){if(e.hoverData.dragging||!o.boxSelectionEnabled()||!N&&o.panningEnabled()&&o.userPanningEnabled()){if(!e.hoverData.selecting&&o.panningEnabled()&&o.userPanningEnabled()){a(m,e.hoverData.downs)&&(e.hoverData.dragging=!0,e.hoverData.justStartedPan=!0,g[4]=0,e.data.bgActivePosistion=At(d),e.redrawHint("select",!0),e.redraw())}}else A();m&&m.pannable()&&m.active()&&m.unactivate()}return g[2]=c[0],g[3]=c[1],n?(t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),!1):void 0}}),!1),e.registerBinding(t,"mouseup",(function(t){if(e.hoverData.capture){e.hoverData.capture=!1;var a=e.cy,o=e.projectIntoViewport(t.clientX,t.clientY),s=e.selection,l=e.findNearestElement(o[0],o[1],!0,!1),u=e.dragData.possibleDragElements,c=e.hoverData.down,d=i(t);if(e.data.bgActivePosistion&&(e.redrawHint("select",!0),e.redraw()),e.hoverData.tapholdCancelled=!0,e.data.bgActivePosistion=void 0,c&&c.unactivate(),3===e.hoverData.which){var p={originalEvent:t,type:"cxttapend",position:{x:o[0],y:o[1]}};if(c?c.emit(p):a.emit(p),!e.hoverData.cxtDragged){var g={originalEvent:t,type:"cxttap",position:{x:o[0],y:o[1]}};c?c.emit(g):a.emit(g)}e.hoverData.cxtDragged=!1,e.hoverData.which=null}else if(1===e.hoverData.which){if(r(l,["mouseup","tapend","vmouseup"],t,{x:o[0],y:o[1]}),e.dragData.didDrag||e.hoverData.dragged||e.hoverData.selecting||e.hoverData.isOverThresholdDrag||(r(c,["click","tap","vclick"],t,{x:o[0],y:o[1]}),b=!1,t.timeStamp-x<=a.multiClickDebounceTime()?(m&&clearTimeout(m),b=!0,x=null,r(c,["dblclick","dbltap","vdblclick"],t,{x:o[0],y:o[1]})):(m=setTimeout((function(){b||r(c,["oneclick","onetap","voneclick"],t,{x:o[0],y:o[1]})}),a.multiClickDebounceTime()),x=t.timeStamp)),null!=c||e.dragData.didDrag||e.hoverData.selecting||e.hoverData.dragged||i(t)||(a.$(n).unselect(["tapunselect"]),u.length>0&&e.redrawHint("eles",!0),e.dragData.possibleDragElements=u=a.collection()),l!=c||e.dragData.didDrag||e.hoverData.selecting||null!=l&&l._private.selectable&&(e.hoverData.dragging||("additive"===a.selectionType()||d?l.selected()?l.unselect(["tapunselect"]):l.select(["tapselect"]):d||(a.$(n).unmerge(l).unselect(["tapunselect"]),l.select(["tapselect"]))),e.redrawHint("eles",!0)),e.hoverData.selecting){var f=a.collection(e.getAllInBox(s[0],s[1],s[2],s[3]));e.redrawHint("select",!0),f.length>0&&e.redrawHint("eles",!0),a.emit({type:"boxend",originalEvent:t,position:{x:o[0],y:o[1]}});var v=function(e){return e.selectable()&&!e.selected()};"additive"===a.selectionType()||d||a.$(n).unmerge(f).unselect(),f.emit("box").stdFilter(v).select().emit("boxselect"),e.redraw()}if(e.hoverData.dragging&&(e.hoverData.dragging=!1,e.redrawHint("select",!0),e.redrawHint("eles",!0),e.redraw()),!s[4]){e.redrawHint("drag",!0),e.redrawHint("eles",!0);var y=c&&c.grabbed();h(u),y&&(c.emit("freeon"),u.emit("free"),e.dragData.didDrag&&(c.emit("dragfreeon"),u.emit("dragfree")))}}s[4]=0,e.hoverData.down=null,e.hoverData.cxtStarted=!1,e.hoverData.draggingEles=!1,e.hoverData.selecting=!1,e.hoverData.isOverThresholdDrag=!1,e.dragData.didDrag=!1,e.hoverData.dragged=!1,e.hoverData.dragDelta=[],e.hoverData.mdownPos=null,e.hoverData.mdownGPos=null}}),!1);var E,T,D,C,N,A,L,k,S,M,I,O,P,R=function(t){if(!e.scrollingPage){var n=e.cy,r=n.zoom(),i=n.pan(),a=e.projectIntoViewport(t.clientX,t.clientY),o=[a[0]*r+i.x,a[1]*r+i.y];if(e.hoverData.draggingEles||e.hoverData.dragging||e.hoverData.cxtStarted||0!==e.selection[4])t.preventDefault();else if(n.panningEnabled()&&n.userPanningEnabled()&&n.zoomingEnabled()&&n.userZoomingEnabled()){var s;t.preventDefault(),e.data.wheelZooming=!0,clearTimeout(e.data.wheelTimeout),e.data.wheelTimeout=setTimeout((function(){e.data.wheelZooming=!1,e.redrawHint("eles",!0),e.redraw()}),150),s=null!=t.deltaY?t.deltaY/-250:null!=t.wheelDeltaY?t.wheelDeltaY/1e3:t.wheelDelta/1e3,s*=e.wheelSensitivity,1===t.deltaMode&&(s*=33);var l=n.zoom()*Math.pow(10,s);"gesturechange"===t.type&&(l=e.gestureStartZoom*t.scale),n.zoom({level:l,renderedPosition:{x:o[0],y:o[1]}}),n.emit("gesturechange"===t.type?"pinchzoom":"scrollzoom")}}};e.registerBinding(e.container,"wheel",R,!0),e.registerBinding(t,"scroll",(function(t){e.scrollingPage=!0,clearTimeout(e.scrollingPageTimeout),e.scrollingPageTimeout=setTimeout((function(){e.scrollingPage=!1}),250)}),!0),e.registerBinding(e.container,"gesturestart",(function(t){e.gestureStartZoom=e.cy.zoom(),e.hasTouchStarted||t.preventDefault()}),!0),e.registerBinding(e.container,"gesturechange",(function(t){e.hasTouchStarted||R(t)}),!0),e.registerBinding(e.container,"mouseout",(function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseout",position:{x:n[0],y:n[1]}})}),!1),e.registerBinding(e.container,"mouseover",(function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseover",position:{x:n[0],y:n[1]}})}),!1);var B,F,z,G,Y,V,X,U=function(e,t,n,r){return Math.sqrt((n-e)*(n-e)+(r-t)*(r-t))},j=function(e,t,n,r){return(n-e)*(n-e)+(r-t)*(r-t)};if(e.registerBinding(e.container,"touchstart",B=function(t){if(e.hasTouchStarted=!0,w(t)){p(),e.touchData.capture=!0,e.data.bgActivePosistion=void 0;var n=e.cy,i=e.touchData.now,a=e.touchData.earlier;if(t.touches[0]){var o=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);i[0]=o[0],i[1]=o[1]}if(t.touches[1]){o=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);i[2]=o[0],i[3]=o[1]}if(t.touches[2]){o=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);i[4]=o[0],i[5]=o[1]}if(t.touches[1]){e.touchData.singleTouchMoved=!0,h(e.dragData.touchDragEles);var l=e.findContainerClientCoords();S=l[0],M=l[1],I=l[2],O=l[3],E=t.touches[0].clientX-S,T=t.touches[0].clientY-M,D=t.touches[1].clientX-S,C=t.touches[1].clientY-M,P=0<=E&&E<=I&&0<=D&&D<=I&&0<=T&&T<=O&&0<=C&&C<=O;var d=n.pan(),g=n.zoom();N=U(E,T,D,C),A=j(E,T,D,C),k=[((L=[(E+D)/2,(T+C)/2])[0]-d.x)/g,(L[1]-d.y)/g];if(A<4e4&&!t.touches[2]){var f=e.findNearestElement(i[0],i[1],!0,!0),v=e.findNearestElement(i[2],i[3],!0,!0);return f&&f.isNode()?(f.activate().emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start=f):v&&v.isNode()?(v.activate().emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start=v):n.emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!0,e.touchData.cxtDragged=!1,e.data.bgActivePosistion=void 0,void e.redraw()}}if(t.touches[2])n.boxSelectionEnabled()&&t.preventDefault();else if(t.touches[1]);else if(t.touches[0]){var y=e.findNearestElements(i[0],i[1],!0,!0),m=y[0];if(null!=m&&(m.activate(),e.touchData.start=m,e.touchData.starts=y,e.nodeIsGrabbable(m))){var b=e.dragData.touchDragEles=n.collection(),x=null;e.redrawHint("eles",!0),e.redrawHint("drag",!0),m.selected()?(x=n.$((function(t){return t.selected()&&e.nodeIsGrabbable(t)})),u(x,{addToList:b})):c(m,{addToList:b}),s(m);var _=function(e){return{originalEvent:t,type:e,position:{x:i[0],y:i[1]}}};m.emit(_("grabon")),x?x.forEach((function(e){e.emit(_("grab"))})):m.emit(_("grab"))}r(m,["touchstart","tapstart","vmousedown"],t,{x:i[0],y:i[1]}),null==m&&(e.data.bgActivePosistion={x:o[0],y:o[1]},e.redrawHint("select",!0),e.redraw()),e.touchData.singleTouchMoved=!1,e.touchData.singleTouchStartTime=+new Date,clearTimeout(e.touchData.tapholdTimeout),e.touchData.tapholdTimeout=setTimeout((function(){!1!==e.touchData.singleTouchMoved||e.pinching||e.touchData.selecting||r(e.touchData.start,["taphold"],t,{x:i[0],y:i[1]})}),e.tapholdDuration)}if(t.touches.length>=1){for(var R=e.touchData.startPosition=[null,null,null,null,null,null],B=0;B=e.touchTapThreshold2}if(n&&e.touchData.cxt){t.preventDefault();var x=t.touches[0].clientX-S,L=t.touches[0].clientY-M,I=t.touches[1].clientX-S,O=t.touches[1].clientY-M,R=j(x,L,I,O);if(R/A>=2.25||R>=22500){e.touchData.cxt=!1,e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var B={originalEvent:t,type:"cxttapend",position:{x:s[0],y:s[1]}};e.touchData.start?(e.touchData.start.unactivate().emit(B),e.touchData.start=null):o.emit(B)}}if(n&&e.touchData.cxt){B={originalEvent:t,type:"cxtdrag",position:{x:s[0],y:s[1]}};e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.touchData.start?e.touchData.start.emit(B):o.emit(B),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxtDragged=!0;var F=e.findNearestElement(s[0],s[1],!0,!0);e.touchData.cxtOver&&F===e.touchData.cxtOver||(e.touchData.cxtOver&&e.touchData.cxtOver.emit({originalEvent:t,type:"cxtdragout",position:{x:s[0],y:s[1]}}),e.touchData.cxtOver=F,F&&F.emit({originalEvent:t,type:"cxtdragover",position:{x:s[0],y:s[1]}}))}else if(n&&t.touches[2]&&o.boxSelectionEnabled())t.preventDefault(),e.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,e.touchData.selecting||o.emit({originalEvent:t,type:"boxstart",position:{x:s[0],y:s[1]}}),e.touchData.selecting=!0,e.touchData.didSelect=!0,i[4]=1,i&&0!==i.length&&void 0!==i[0]?(i[2]=(s[0]+s[2]+s[4])/3,i[3]=(s[1]+s[3]+s[5])/3):(i[0]=(s[0]+s[2]+s[4])/3,i[1]=(s[1]+s[3]+s[5])/3,i[2]=(s[0]+s[2]+s[4])/3+1,i[3]=(s[1]+s[3]+s[5])/3+1),e.redrawHint("select",!0),e.redraw();else if(n&&t.touches[1]&&!e.touchData.didSelect&&o.zoomingEnabled()&&o.panningEnabled()&&o.userZoomingEnabled()&&o.userPanningEnabled()){if(t.preventDefault(),e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),ee=e.dragData.touchDragEles){e.redrawHint("drag",!0);for(var z=0;z0&&!e.hoverData.draggingEles&&!e.swipePanning&&null!=e.data.bgActivePosistion&&(e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.redraw())}},!1),e.registerBinding(t,"touchcancel",z=function(t){var n=e.touchData.start;e.touchData.capture=!1,n&&n.unactivate()}),e.registerBinding(t,"touchend",G=function(t){var i=e.touchData.start;if(e.touchData.capture){0===t.touches.length&&(e.touchData.capture=!1),t.preventDefault();var a=e.selection;e.swipePanning=!1,e.hoverData.draggingEles=!1;var o,s=e.cy,l=s.zoom(),u=e.touchData.now,c=e.touchData.earlier;if(t.touches[0]){var d=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);u[0]=d[0],u[1]=d[1]}if(t.touches[1]){d=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);u[2]=d[0],u[3]=d[1]}if(t.touches[2]){d=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);u[4]=d[0],u[5]=d[1]}if(i&&i.unactivate(),e.touchData.cxt){if(o={originalEvent:t,type:"cxttapend",position:{x:u[0],y:u[1]}},i?i.emit(o):s.emit(o),!e.touchData.cxtDragged){var p={originalEvent:t,type:"cxttap",position:{x:u[0],y:u[1]}};i?i.emit(p):s.emit(p)}return e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!1,e.touchData.start=null,void e.redraw()}if(!t.touches[2]&&s.boxSelectionEnabled()&&e.touchData.selecting){e.touchData.selecting=!1;var g=s.collection(e.getAllInBox(a[0],a[1],a[2],a[3]));a[0]=void 0,a[1]=void 0,a[2]=void 0,a[3]=void 0,a[4]=0,e.redrawHint("select",!0),s.emit({type:"boxend",originalEvent:t,position:{x:u[0],y:u[1]}});g.emit("box").stdFilter((function(e){return e.selectable()&&!e.selected()})).select().emit("boxselect"),g.nonempty()&&e.redrawHint("eles",!0),e.redraw()}if(null!=i&&i.unactivate(),t.touches[2])e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);else if(t.touches[1]);else if(t.touches[0]);else if(!t.touches[0]){e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var f=e.dragData.touchDragEles;if(null!=i){var v=i._private.grabbed;h(f),e.redrawHint("drag",!0),e.redrawHint("eles",!0),v&&(i.emit("freeon"),f.emit("free"),e.dragData.didDrag&&(i.emit("dragfreeon"),f.emit("dragfree"))),r(i,["touchend","tapend","vmouseup","tapdragout"],t,{x:u[0],y:u[1]}),i.unactivate(),e.touchData.start=null}else{var y=e.findNearestElement(u[0],u[1],!0,!0);r(y,["touchend","tapend","vmouseup","tapdragout"],t,{x:u[0],y:u[1]})}var m=e.touchData.startPosition[0]-u[0],b=m*m,x=e.touchData.startPosition[1]-u[1],w=(b+x*x)*l*l;e.touchData.singleTouchMoved||(i||s.$(":selected").unselect(["tapunselect"]),r(i,["tap","vclick"],t,{x:u[0],y:u[1]}),Y=!1,t.timeStamp-X<=s.multiClickDebounceTime()?(V&&clearTimeout(V),Y=!0,X=null,r(i,["dbltap","vdblclick"],t,{x:u[0],y:u[1]})):(V=setTimeout((function(){Y||r(i,["onetap","voneclick"],t,{x:u[0],y:u[1]})}),s.multiClickDebounceTime()),X=t.timeStamp)),null!=i&&!e.dragData.didDrag&&i._private.selectable&&w2){for(var p=[c[0],c[1]],g=Math.pow(p[0]-e,2)+Math.pow(p[1]-t,2),f=1;f0)return f[0]}return null},p=Object.keys(h),g=0;g0?u:Ht(i,a,e,t,n,r,o,s)},checkPoint:function(e,t,n,r,i,a,o,s){var l=2*(s="auto"===s?dn(r,i):s);if(Jt(e,t,this.points,a,o,r,i-l,[0,-1],n))return!0;if(Jt(e,t,this.points,a,o,r-l,i,[0,-1],n))return!0;var u=r/2+2*n,c=i/2+2*n;return!!Qt(e,t,[a-u,o-c,a-u,o,a+u,o,a+u,o-c])||(!!nn(e,t,l,l,a+r/2-s,o+i/2-s,n)||!!nn(e,t,l,l,a-r/2+s,o+i/2-s,n))}}},Pu.registerNodeShapes=function(){var e=this.nodeShapes={},t=this;this.generateEllipse(),this.generatePolygon("triangle",un(3,0)),this.generateRoundPolygon("round-triangle",un(3,0)),this.generatePolygon("rectangle",un(4,0)),e.square=e.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();var n=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",n),this.generateRoundPolygon("round-diamond",n),this.generatePolygon("pentagon",un(5,0)),this.generateRoundPolygon("round-pentagon",un(5,0)),this.generatePolygon("hexagon",un(6,0)),this.generateRoundPolygon("round-hexagon",un(6,0)),this.generatePolygon("heptagon",un(7,0)),this.generateRoundPolygon("round-heptagon",un(7,0)),this.generatePolygon("octagon",un(8,0)),this.generateRoundPolygon("round-octagon",un(8,0));var r=new Array(20),i=hn(5,0),a=hn(5,Math.PI/5),o=.5*(3-Math.sqrt(5));o*=1.57;for(var s=0;s=e.deqFastCost*f)break}else if(i){if(p>=e.deqCost*l||p>=e.deqAvgCost*s)break}else if(g>=e.deqNoDrawCost*Gu)break;var v=e.deq(t,h,c);if(!(v.length>0))break;for(var y=0;y0&&(e.onDeqd(t,u),!i&&e.shouldRedraw(t,u,h,c)&&r())}),i(t))}}},Vu=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Ue;a(this,e),this.idsByKey=new at,this.keyForId=new at,this.cachesByLvl=new at,this.lvls=[],this.getKey=t,this.doesEleInvalidateKey=n}return s(e,[{key:"getIdsFor",value:function(e){null==e&&He("Can not get id list for null key");var t=this.idsByKey,n=this.idsByKey.get(e);return n||(n=new st,t.set(e,n)),n}},{key:"addIdForKey",value:function(e,t){null!=e&&this.getIdsFor(e).add(t)}},{key:"deleteIdForKey",value:function(e,t){null!=e&&this.getIdsFor(e).delete(t)}},{key:"getNumberOfIdsForKey",value:function(e){return null==e?0:this.getIdsFor(e).size}},{key:"updateKeyMappingFor",value:function(e){var t=e.id(),n=this.keyForId.get(t),r=this.getKey(e);this.deleteIdForKey(n,t),this.addIdForKey(r,t),this.keyForId.set(t,r)}},{key:"deleteKeyMappingFor",value:function(e){var t=e.id(),n=this.keyForId.get(t);this.deleteIdForKey(n,t),this.keyForId.delete(t)}},{key:"keyHasChangedFor",value:function(e){var t=e.id();return this.keyForId.get(t)!==this.getKey(e)}},{key:"isInvalid",value:function(e){return this.keyHasChangedFor(e)||this.doesEleInvalidateKey(e)}},{key:"getCachesAt",value:function(e){var t=this.cachesByLvl,n=this.lvls,r=t.get(e);return r||(r=new at,t.set(e,r),n.push(e)),r}},{key:"getCache",value:function(e,t){return this.getCachesAt(t).get(e)}},{key:"get",value:function(e,t){var n=this.getKey(e),r=this.getCache(n,t);return null!=r&&this.updateKeyMappingFor(e),r}},{key:"getForCachedKey",value:function(e,t){var n=this.keyForId.get(e.id());return this.getCache(n,t)}},{key:"hasCache",value:function(e,t){return this.getCachesAt(t).has(e)}},{key:"has",value:function(e,t){var n=this.getKey(e);return this.hasCache(n,t)}},{key:"setCache",value:function(e,t,n){n.key=e,this.getCachesAt(t).set(e,n)}},{key:"set",value:function(e,t,n){var r=this.getKey(e);this.setCache(r,t,n),this.updateKeyMappingFor(e)}},{key:"deleteCache",value:function(e,t){this.getCachesAt(t).delete(e)}},{key:"delete",value:function(e,t){var n=this.getKey(e);this.deleteCache(n,t)}},{key:"invalidateKey",value:function(e){var t=this;this.lvls.forEach((function(n){return t.deleteCache(e,n)}))}},{key:"invalidate",value:function(e){var t=e.id(),n=this.keyForId.get(t);this.deleteKeyMappingFor(e);var r=this.doesEleInvalidateKey(e);return r&&this.invalidateKey(n),r||0===this.getNumberOfIdsForKey(n)}}]),e}(),Xu={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},Uu=et({getKey:null,doesEleInvalidateKey:Ue,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:Xe,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),ju=function(e,t){var n=this;n.renderer=e,n.onDequeues=[];var r=Uu(t);X(n,r),n.lookup=new Vu(r.getKey,r.doesEleInvalidateKey),n.setupDequeueing()},qu=ju.prototype;qu.reasons=Xu,qu.getTextureQueue=function(e){var t=this;return t.eleImgCaches=t.eleImgCaches||{},t.eleImgCaches[e]=t.eleImgCaches[e]||[]},qu.getRetiredTextureQueue=function(e){var t=this.eleImgCaches.retired=this.eleImgCaches.retired||{};return t[e]=t[e]||[]},qu.getElementQueue=function(){return this.eleCacheQueue=this.eleCacheQueue||new dt((function(e,t){return t.reqs-e.reqs}))},qu.getElementKeyToQueue=function(){return this.eleKeyToCacheQueue=this.eleKeyToCacheQueue||{}},qu.getElement=function(e,t,n,r,i){var a=this,o=this.renderer,s=o.cy.zoom(),l=this.lookup;if(!t||0===t.w||0===t.h||isNaN(t.w)||isNaN(t.h)||!e.visible()||e.removed())return null;if(!a.allowEdgeTxrCaching&&e.isEdge()||!a.allowParentTxrCaching&&e.isParent())return null;if(null==r&&(r=Math.ceil(kt(s*n))),r<-4)r=-4;else if(s>=7.99||r>3)return null;var u=Math.pow(2,r),c=t.h*u,h=t.w*u,d=o.eleTextBiggerThanMin(e,u);if(!this.isVisible(e,d))return null;var p,g=l.get(e,r);if(g&&g.invalidated&&(g.invalidated=!1,g.texture.invalidatedWidth-=g.width),g)return g;if(p=c<=25?25:c<=50?50:50*Math.ceil(c/50),c>1024||h>1024)return null;var f=a.getTextureQueue(p),v=f[f.length-2],y=function(){return a.recycleTexture(p,h)||a.addTexture(p,h)};v||(v=f[f.length-1]),v||(v=y()),v.width-v.usedWidthr;N--)D=a.getElement(e,t,n,N,Xu.downscale);C()}else{var A;if(!x&&!w&&!E)for(var L=r-1;L>=-4;L--){var k=l.get(e,L);if(k){A=k;break}}if(b(A))return a.queueElement(e,r),A;v.context.translate(v.usedWidth,0),v.context.scale(u,u),this.drawElement(v.context,e,t,d,!1),v.context.scale(1/u,1/u),v.context.translate(-v.usedWidth,0)}return g={x:v.usedWidth,texture:v,level:r,scale:u,width:h,height:c,scaledLabelShown:d},v.usedWidth+=Math.ceil(h+8),v.eleCaches.push(g),l.set(e,r,g),a.checkTextureFullness(v),g},qu.invalidateElements=function(e){for(var t=0;t=.2*e.width&&this.retireTexture(e)},qu.checkTextureFullness=function(e){var t=this.getTextureQueue(e.height);e.usedWidth/e.width>.8&&e.fullnessChecks>=10?tt(t,e):e.fullnessChecks++},qu.retireTexture=function(e){var t=e.height,n=this.getTextureQueue(t),r=this.lookup;tt(n,e),e.retired=!0;for(var i=e.eleCaches,a=0;a=t)return a.retired=!1,a.usedWidth=0,a.invalidatedWidth=0,a.fullnessChecks=0,nt(a.eleCaches),a.context.setTransform(1,0,0,1,0,0),a.context.clearRect(0,0,a.width,a.height),tt(r,a),n.push(a),a}},qu.queueElement=function(e,t){var n=this.getElementQueue(),r=this.getElementKeyToQueue(),i=this.getKey(e),a=r[i];if(a)a.level=Math.max(a.level,t),a.eles.merge(e),a.reqs++,n.updateItem(a);else{var o={eles:e.spawn().merge(e),level:t,reqs:1,key:i};n.push(o),r[i]=o}},qu.dequeue=function(e){for(var t=this,n=t.getElementQueue(),r=t.getElementKeyToQueue(),i=[],a=t.lookup,o=0;o<1&&n.size()>0;o++){var s=n.pop(),l=s.key,u=s.eles[0],c=a.hasCache(u,s.level);if(r[l]=null,!c){i.push(s);var h=t.getBoundingBox(u);t.getElement(u,h,e,s.level,Xu.dequeue)}}return i},qu.removeFromQueue=function(e){var t=this.getElementQueue(),n=this.getElementKeyToQueue(),r=this.getKey(e),i=n[r];null!=i&&(1===i.eles.length?(i.reqs=Ve,t.updateItem(i),t.pop(),n[r]=null):i.eles.unmerge(e))},qu.onDequeue=function(e){this.onDequeues.push(e)},qu.offDequeue=function(e){tt(this.onDequeues,e)},qu.setupDequeueing=Yu({deqRedrawThreshold:100,deqCost:.15,deqAvgCost:.1,deqNoDrawCost:.9,deqFastCost:.9,deq:function(e,t,n){return e.dequeue(t,n)},onDeqd:function(e,t){for(var n=0;n=3.99||n>2)return null;r.validateLayersElesOrdering(n,e);var o,s,l=r.layersByLevel,u=Math.pow(2,n),c=l[n]=l[n]||[];if(r.levelIsComplete(n,e))return c;!function(){var t=function(t){if(r.validateLayersElesOrdering(t,e),r.levelIsComplete(t,e))return s=l[t],!0},i=function(e){if(!s)for(var r=n+e;-4<=r&&r<=2&&!t(r);r+=e);};i(1),i(-1);for(var a=c.length-1;a>=0;a--){var o=c[a];o.invalid&&tt(c,o)}}();var h=function(t){var i=(t=t||{}).after;if(function(){if(!o){o=Ft();for(var t=0;t16e6)return null;var a=r.makeLayer(o,n);if(null!=i){var s=c.indexOf(i)+1;c.splice(s,0,a)}else(void 0===t.insert||t.insert)&&c.unshift(a);return a};if(r.skipping&&!a)return null;for(var d=null,p=e.length/1,g=!a,f=0;f=p||!qt(d.bb,v.boundingBox()))&&!(d=h({insert:!0,after:d})))return null;s||g?r.queueLayer(d,v):r.drawEleInLayer(d,v,n,t),d.eles.push(v),m[n]=d}}return s||(g?null:c)},Wu.getEleLevelForLayerLevel=function(e,t){return e},Wu.drawEleInLayer=function(e,t,n,r){var i=this.renderer,a=e.context,o=t.boundingBox();0!==o.w&&0!==o.h&&t.visible()&&(n=this.getEleLevelForLayerLevel(n,r),i.setImgSmoothing(a,!1),i.drawCachedElement(a,t,null,null,n,true),i.setImgSmoothing(a,!0))},Wu.levelIsComplete=function(e,t){var n=this.layersByLevel[e];if(!n||0===n.length)return!1;for(var r=0,i=0;i0)return!1;if(a.invalid)return!1;r+=a.eles.length}return r===t.length},Wu.validateLayersElesOrdering=function(e,t){var n=this.layersByLevel[e];if(n)for(var r=0;r0){e=!0;break}}return e},Wu.invalidateElements=function(e){var t=this;0!==e.length&&(t.lastInvalidationTime=Ae(),0!==e.length&&t.haveLayers()&&t.updateElementsInLayers(e,(function(e,n,r){t.invalidateLayer(e)})))},Wu.invalidateLayer=function(e){if(this.lastInvalidationTime=Ae(),!e.invalid){var t=e.level,n=e.eles,r=this.layersByLevel[t];tt(r,e),e.elesQueue=[],e.invalid=!0,e.replacement&&(e.replacement.invalid=!0);for(var i=0;i3&&void 0!==arguments[3])||arguments[3],i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],o=this,s=t._private.rscratch;if((!a||t.visible())&&!s.badLine&&null!=s.allpts&&!isNaN(s.allpts[0])){var l;n&&(l=n,e.translate(-l.x1,-l.y1));var u=a?t.pstyle("opacity").value:1,c=a?t.pstyle("line-opacity").value:1,h=t.pstyle("curve-style").value,d=t.pstyle("line-style").value,p=t.pstyle("width").pfValue,g=t.pstyle("line-cap").value,f=u*c,v=u*c,y=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:f;"straight-triangle"===h?(o.eleStrokeStyle(e,t,n),o.drawEdgeTrianglePath(t,e,s.allpts)):(e.lineWidth=p,e.lineCap=g,o.eleStrokeStyle(e,t,n),o.drawEdgePath(t,e,s.allpts,d),e.lineCap="butt")},m=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:v;o.drawArrowheads(e,t,n)};if(e.lineJoin="round","yes"===t.pstyle("ghost").value){var b=t.pstyle("ghost-offset-x").pfValue,x=t.pstyle("ghost-offset-y").pfValue,w=t.pstyle("ghost-opacity").value,E=f*w;e.translate(b,x),y(E),m(E),e.translate(-b,-x)}i&&o.drawEdgeUnderlay(e,t),y(),m(),i&&o.drawEdgeOverlay(e,t),o.drawElementText(e,t,null,r),n&&e.translate(l.x1,l.y1)}}},dc=function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(t,n){if(n.visible()){var r=n.pstyle("".concat(e,"-opacity")).value;if(0!==r){var i=this,a=i.usePaths(),o=n._private.rscratch,s=2*n.pstyle("".concat(e,"-padding")).pfValue,l=n.pstyle("".concat(e,"-color")).value;t.lineWidth=s,"self"!==o.edgeType||a?t.lineCap="round":t.lineCap="butt",i.colorStrokeStyle(t,l[0],l[1],l[2],r),i.drawEdgePath(n,t,o.allpts,"solid")}}}};hc.drawEdgeOverlay=dc("overlay"),hc.drawEdgeUnderlay=dc("underlay"),hc.drawEdgePath=function(e,t,n,r){var i,a=e._private.rscratch,o=t,s=!1,l=this.usePaths(),u=e.pstyle("line-dash-pattern").pfValue,h=e.pstyle("line-dash-offset").pfValue;if(l){var d=n.join("$");a.pathCacheKey&&a.pathCacheKey===d?(i=t=a.pathCache,s=!0):(i=t=new Path2D,a.pathCacheKey=d,a.pathCache=i)}if(o.setLineDash)switch(r){case"dotted":o.setLineDash([1,1]);break;case"dashed":o.setLineDash(u),o.lineDashOffset=h;break;case"solid":o.setLineDash([])}if(!s&&!a.badLine)switch(t.beginPath&&t.beginPath(),t.moveTo(n[0],n[1]),a.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var p=2;p+3=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}(a.roundCorners);try{for(v.s();!(f=v.n()).done;){mu(t,f.value)}}catch(m){v.e(m)}finally{v.f()}t.lineTo(n[n.length-2],n[n.length-1])}else for(var y=2;y+15&&void 0!==arguments[5]?arguments[5]:5,o=arguments.length>6?arguments[6]:void 0;e.beginPath(),e.moveTo(t+a,n),e.lineTo(t+r-a,n),e.quadraticCurveTo(t+r,n,t+r,n+a),e.lineTo(t+r,n+i-a),e.quadraticCurveTo(t+r,n+i,t+r-a,n+i),e.lineTo(t+a,n+i),e.quadraticCurveTo(t,n+i,t,n+i-a),e.lineTo(t,n+a),e.quadraticCurveTo(t,n,t+a,n),e.closePath(),o?e.stroke():e.fill()}gc.eleTextBiggerThanMin=function(e,t){if(!t){var n=e.cy().zoom(),r=this.getPixelRatio(),i=Math.ceil(kt(n*r));t=Math.pow(2,i)}return!(e.pstyle("font-size").pfValue*t5&&void 0!==arguments[5])||arguments[5],o=this;if(null==r){if(a&&!o.eleTextBiggerThanMin(t))return}else if(!1===r)return;if(t.isNode()){var s=t.pstyle("label");if(!s||!s.value)return;var l=o.getLabelJustification(t);e.textAlign=l,e.textBaseline="bottom"}else{var u=t.element()._private.rscratch.badLine,c=t.pstyle("label"),h=t.pstyle("source-label"),d=t.pstyle("target-label");if(u||(!c||!c.value)&&(!h||!h.value)&&(!d||!d.value))return;e.textAlign="center",e.textBaseline="bottom"}var p,g=!n;n&&(p=n,e.translate(-p.x1,-p.y1)),null==i?(o.drawText(e,t,null,g,a),t.isEdge()&&(o.drawText(e,t,"source",g,a),o.drawText(e,t,"target",g,a))):o.drawText(e,t,i,g,a),n&&e.translate(p.x1,p.y1)},gc.getFontCache=function(e){var t;this.fontCaches=this.fontCaches||[];for(var n=0;n2&&void 0!==arguments[2])||arguments[2],r=t.pstyle("font-style").strValue,i=t.pstyle("font-size").pfValue+"px",a=t.pstyle("font-family").strValue,o=t.pstyle("font-weight").strValue,s=n?t.effectiveOpacity()*t.pstyle("text-opacity").value:1,l=t.pstyle("text-outline-opacity").value*s,u=t.pstyle("color").value,c=t.pstyle("text-outline-color").value;e.font=r+" "+o+" "+i+" "+a,e.lineJoin="round",this.colorFillStyle(e,u[0],u[1],u[2],s),this.colorStrokeStyle(e,c[0],c[1],c[2],l)},gc.getTextAngle=function(e,t){var n=e._private.rscratch,r=t?t+"-":"",i=e.pstyle(r+"text-rotation"),a=rt(n,"labelAngle",t);return"autorotate"===i.strValue?e.isEdge()?a:0:"none"===i.strValue?0:i.pfValue},gc.drawText=function(e,t,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=t._private.rscratch,o=i?t.effectiveOpacity():1;if(!i||0!==o&&0!==t.pstyle("text-opacity").value){"main"===n&&(n=null);var s,l,u=rt(a,"labelX",n),c=rt(a,"labelY",n),h=this.getLabelText(t,n);if(null!=h&&""!==h&&!isNaN(u)&&!isNaN(c)){this.setupTextStyle(e,t,i);var d,p=n?n+"-":"",g=rt(a,"labelWidth",n),f=rt(a,"labelHeight",n),v=t.pstyle(p+"text-margin-x").pfValue,y=t.pstyle(p+"text-margin-y").pfValue,m=t.isEdge(),b=t.pstyle("text-halign").value,x=t.pstyle("text-valign").value;switch(m&&(b="center",x="center"),u+=v,c+=y,0!==(d=r?this.getTextAngle(t,n):0)&&(s=u,l=c,e.translate(s,l),e.rotate(d),u=0,c=0),x){case"top":break;case"center":c+=f/2;break;case"bottom":c+=f}var w=t.pstyle("text-background-opacity").value,E=t.pstyle("text-border-opacity").value,_=t.pstyle("text-border-width").pfValue,T=t.pstyle("text-background-padding").pfValue,D=0===t.pstyle("text-background-shape").strValue.indexOf("round");if(w>0||_>0&&E>0){var C=u-T;switch(b){case"left":C-=g;break;case"center":C-=g/2}var N=c-f-T,A=g+2*T,L=f+2*T;if(w>0){var k=e.fillStyle,S=t.pstyle("text-background-color").value;e.fillStyle="rgba("+S[0]+","+S[1]+","+S[2]+","+w*o+")",D?fc(e,C,N,A,L,2):e.fillRect(C,N,A,L),e.fillStyle=k}if(_>0&&E>0){var M=e.strokeStyle,I=e.lineWidth,O=t.pstyle("text-border-color").value,P=t.pstyle("text-border-style").value;if(e.strokeStyle="rgba("+O[0]+","+O[1]+","+O[2]+","+E*o+")",e.lineWidth=_,e.setLineDash)switch(P){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"double":e.lineWidth=_/4,e.setLineDash([]);break;case"solid":e.setLineDash([])}if(D?fc(e,C,N,A,L,2,"stroke"):e.strokeRect(C,N,A,L),"double"===P){var R=_/2;D?fc(e,C+R,N+R,A-2*R,L-2*R,2,"stroke"):e.strokeRect(C+R,N+R,A-2*R,L-2*R)}e.setLineDash&&e.setLineDash([]),e.lineWidth=I,e.strokeStyle=M}}var B=2*t.pstyle("text-outline-width").pfValue;if(B>0&&(e.lineWidth=B),"wrap"===t.pstyle("text-wrap").value){var F=rt(a,"labelWrapCachedLines",n),z=rt(a,"labelLineHeight",n),G=g/2,Y=this.getLabelJustification(t);switch("auto"===Y||("left"===b?"left"===Y?u+=-g:"center"===Y&&(u+=-G):"center"===b?"left"===Y?u+=-G:"right"===Y&&(u+=G):"right"===b&&("center"===Y?u+=G:"right"===Y&&(u+=g))),x){case"top":case"center":case"bottom":c-=(F.length-1)*z}for(var V=0;V0&&e.strokeText(F[V],u,c),e.fillText(F[V],u,c),c+=z}else B>0&&e.strokeText(h,u,c),e.fillText(h,u,c);0!==d&&(e.rotate(-d),e.translate(-s,-l))}}};var vc={drawNode:function(e,t,n){var r,i,a=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],l=this,u=t._private,c=u.rscratch,h=t.position();if(_(h.x)&&_(h.y)&&(!s||t.visible())){var d,p,g=s?t.effectiveOpacity():1,f=l.usePaths(),v=!1,y=t.padding();r=t.width()+2*y,i=t.height()+2*y,n&&(p=n,e.translate(-p.x1,-p.y1));for(var m=t.pstyle("background-image").value,b=new Array(m.length),x=new Array(m.length),w=0,E=0;E0&&void 0!==arguments[0]?arguments[0]:A;l.eleFillStyle(e,t,n)},U=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:R;l.colorStrokeStyle(e,L[0],L[1],L[2],t)},j=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:G;l.colorStrokeStyle(e,F[0],F[1],F[2],t)},q=function(e,t,n,r){var i,a=l.nodePathCache=l.nodePathCache||[],o=Be("polygon"===n?n+","+r.join(","):n,""+t,""+e,""+V),s=a[o],u=!1;return null!=s?(i=s,u=!0,c.pathCache=i):(i=new Path2D,a[o]=c.pathCache=i),{path:i,cacheHit:u}},H=t.pstyle("shape").strValue,W=t.pstyle("shape-polygon-points").pfValue;if(f){e.translate(h.x,h.y);var $=q(r,i,H,W);d=$.path,v=$.cacheHit}var K=function(){if(!v){var n=h;f&&(n={x:0,y:0}),l.nodeShapes[l.getNodeShape(t)].draw(d||e,n.x,n.y,r,i,V,c)}f?e.fill(d):e.fill()},Z=function(){for(var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:g,r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=u.backgrounding,a=0,o=0;o0&&void 0!==arguments[0]&&arguments[0],a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:g;l.hasPie(t)&&(l.drawPie(e,t,a),n&&(f||l.nodeShapes[l.getNodeShape(t)].draw(e,h.x,h.y,r,i,V,c)))},J=function(){var t=(C>0?C:-C)*(arguments.length>0&&void 0!==arguments[0]?arguments[0]:g),n=C>0?0:255;0!==C&&(l.colorFillStyle(e,n,n,n,t),f?e.fill(d):e.fill())},ee=function(){if(N>0){if(e.lineWidth=N,e.lineCap=M,e.lineJoin=S,e.setLineDash)switch(k){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash(O),e.lineDashOffset=P;break;case"solid":case"double":e.setLineDash([])}if("center"!==I){if(e.save(),e.lineWidth*=2,"inside"===I)f?e.clip(d):e.clip();else{var t=new Path2D;t.rect(-r/2-N,-i/2-N,r+2*N,i+2*N),t.addPath(d),e.clip(t,"evenodd")}f?e.stroke(d):e.stroke(),e.restore()}else f?e.stroke(d):e.stroke();if("double"===k){e.lineWidth=N/3;var n=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",f?e.stroke(d):e.stroke(),e.globalCompositeOperation=n}e.setLineDash&&e.setLineDash([])}},te=function(){if(B>0){if(e.lineWidth=B,e.lineCap="butt",e.setLineDash)switch(z){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"solid":case"double":e.setLineDash([])}var n=h;f&&(n={x:0,y:0});var a=l.getNodeShape(t),o=N;"inside"===I&&(o=0),"outside"===I&&(o*=2);var s,u=(r+o+(B+Y))/r,c=(i+o+(B+Y))/i,d=r*u,p=i*c,g=l.nodeShapes[a].points;if(f)s=q(d,p,a,g).path;if("ellipse"===a)l.drawEllipsePath(s||e,n.x,n.y,d,p);else if(["round-diamond","round-heptagon","round-hexagon","round-octagon","round-pentagon","round-polygon","round-triangle","round-tag"].includes(a)){var v=0,y=0,m=0;"round-diamond"===a?v=1.4*(o+Y+B):"round-heptagon"===a?(v=1.075*(o+Y+B),m=-(o/2+Y+B)/35):"round-hexagon"===a?v=1.12*(o+Y+B):"round-pentagon"===a?(v=1.13*(o+Y+B),m=-(o/2+Y+B)/15):"round-tag"===a?(v=1.12*(o+Y+B),y=.07*(o/2+B+Y)):"round-triangle"===a&&(v=(o+Y+B)*(Math.PI/2),m=-(o+Y/2+B)/Math.PI),0!==v&&(d=r*(u=(r+v)/r),["round-hexagon","round-tag"].includes(a)||(p=i*(c=(i+v)/i)));for(var b=d/2,x=p/2,w=(V="auto"===V?pn(d,p):V)+(o+B+Y)/2,E=new Array(g.length/2),_=new Array(g.length/2),T=0;T0){if(r=r||n.position(),null==i||null==a){var h=n.padding();i=n.width()+2*h,a=n.height()+2*h}this.colorFillStyle(t,l[0],l[1],l[2],s),this.nodeShapes[u].draw(t,r.x,r.y,i+2*o,a+2*o,c),t.fill()}}}};vc.drawNodeOverlay=yc("overlay"),vc.drawNodeUnderlay=yc("underlay"),vc.hasPie=function(e){return(e=e[0])._private.hasPie},vc.drawPie=function(e,t,n,r){t=t[0],r=r||t.position();var i=t.cy().style(),a=t.pstyle("pie-size"),o=r.x,s=r.y,l=t.width(),u=t.height(),c=Math.min(l,u)/2,h=0;this.usePaths()&&(o=0,s=0),"%"===a.units?c*=a.pfValue:void 0!==a.pfValue&&(c=a.pfValue/2);for(var d=1;d<=i.pieBackgroundN;d++){var p=t.pstyle("pie-"+d+"-background-size").value,g=t.pstyle("pie-"+d+"-background-color").value,f=t.pstyle("pie-"+d+"-background-opacity").value*n,v=p/100;v+h>1&&(v=1-h);var y=1.5*Math.PI+2*Math.PI*h,m=y+2*Math.PI*v;0===p||h>=1||h+v>1||(e.beginPath(),e.moveTo(o,s),e.arc(o,s,c,y,m),e.closePath(),this.colorFillStyle(e,g[0],g[1],g[2],f),e.fill(),h+=v)}};var mc={};mc.getPixelRatio=function(){var e=this.data.contexts[0];if(null!=this.forcedPixelRatio)return this.forcedPixelRatio;var t=e.backingStorePixelRatio||e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1;return(window.devicePixelRatio||1)/t},mc.paintCache=function(e){for(var t,n=this.paintCaches=this.paintCaches||[],r=!0,i=0;io.minMbLowQualFrames&&(o.motionBlurPxRatio=o.mbPxRBlurry)),o.clearingMotionBlur&&(o.motionBlurPxRatio=1),o.textureDrawLastFrame&&!h&&(c[o.NODE]=!0,c[o.SELECT_BOX]=!0);var m=l.style(),b=l.zoom(),x=void 0!==i?i:b,w=l.pan(),E={x:w.x,y:w.y},_={zoom:b,pan:{x:w.x,y:w.y}},T=o.prevViewport;void 0===T||_.zoom!==T.zoom||_.pan.x!==T.pan.x||_.pan.y!==T.pan.y||f&&!g||(o.motionBlurPxRatio=1),a&&(E=a),x*=s,E.x*=s,E.y*=s;var D=o.getCachedZSortedEles();function C(e,t,n,r,i){var a=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",o.colorFillStyle(e,255,255,255,o.motionBlurTransparency),e.fillRect(t,n,r,i),e.globalCompositeOperation=a}function N(e,r){var s,l,c,h;o.clearingMotionBlur||e!==u.bufferContexts[o.MOTIONBLUR_BUFFER_NODE]&&e!==u.bufferContexts[o.MOTIONBLUR_BUFFER_DRAG]?(s=E,l=x,c=o.canvasWidth,h=o.canvasHeight):(s={x:w.x*p,y:w.y*p},l=b*p,c=o.canvasWidth*p,h=o.canvasHeight*p),e.setTransform(1,0,0,1,0,0),"motionBlur"===r?C(e,0,0,c,h):t||void 0!==r&&!r||e.clearRect(0,0,c,h),n||(e.translate(s.x,s.y),e.scale(l,l)),a&&e.translate(a.x,a.y),i&&e.scale(i,i)}if(h||(o.textureDrawLastFrame=!1),h){if(o.textureDrawLastFrame=!0,!o.textureCache){o.textureCache={},o.textureCache.bb=l.mutableElements().boundingBox(),o.textureCache.texture=o.data.bufferCanvases[o.TEXTURE_BUFFER];var A=o.data.bufferContexts[o.TEXTURE_BUFFER];A.setTransform(1,0,0,1,0,0),A.clearRect(0,0,o.canvasWidth*o.textureMult,o.canvasHeight*o.textureMult),o.render({forcedContext:A,drawOnlyNodeLayer:!0,forcedPxRatio:s*o.textureMult}),(_=o.textureCache.viewport={zoom:l.zoom(),pan:l.pan(),width:o.canvasWidth,height:o.canvasHeight}).mpan={x:(0-_.pan.x)/_.zoom,y:(0-_.pan.y)/_.zoom}}c[o.DRAG]=!1,c[o.NODE]=!1;var L=u.contexts[o.NODE],k=o.textureCache.texture;_=o.textureCache.viewport;L.setTransform(1,0,0,1,0,0),d?C(L,0,0,_.width,_.height):L.clearRect(0,0,_.width,_.height);var S=m.core("outside-texture-bg-color").value,M=m.core("outside-texture-bg-opacity").value;o.colorFillStyle(L,S[0],S[1],S[2],M),L.fillRect(0,0,_.width,_.height);b=l.zoom();N(L,!1),L.clearRect(_.mpan.x,_.mpan.y,_.width/_.zoom/s,_.height/_.zoom/s),L.drawImage(k,_.mpan.x,_.mpan.y,_.width/_.zoom/s,_.height/_.zoom/s)}else o.textureOnViewport&&!t&&(o.textureCache=null);var I=l.extent(),O=o.pinching||o.hoverData.dragging||o.swipePanning||o.data.wheelZooming||o.hoverData.draggingEles||o.cy.animated(),P=o.hideEdgesOnViewport&&O,R=[];if(R[o.NODE]=!c[o.NODE]&&d&&!o.clearedForMotionBlur[o.NODE]||o.clearingMotionBlur,R[o.NODE]&&(o.clearedForMotionBlur[o.NODE]=!0),R[o.DRAG]=!c[o.DRAG]&&d&&!o.clearedForMotionBlur[o.DRAG]||o.clearingMotionBlur,R[o.DRAG]&&(o.clearedForMotionBlur[o.DRAG]=!0),c[o.NODE]||n||r||R[o.NODE]){var B=d&&!R[o.NODE]&&1!==p;N(L=t||(B?o.data.bufferContexts[o.MOTIONBLUR_BUFFER_NODE]:u.contexts[o.NODE]),d&&!B?"motionBlur":void 0),P?o.drawCachedNodes(L,D.nondrag,s,I):o.drawLayeredElements(L,D.nondrag,s,I),o.debug&&o.drawDebugPoints(L,D.nondrag),n||d||(c[o.NODE]=!1)}if(!r&&(c[o.DRAG]||n||R[o.DRAG])){B=d&&!R[o.DRAG]&&1!==p;N(L=t||(B?o.data.bufferContexts[o.MOTIONBLUR_BUFFER_DRAG]:u.contexts[o.DRAG]),d&&!B?"motionBlur":void 0),P?o.drawCachedNodes(L,D.drag,s,I):o.drawCachedElements(L,D.drag,s,I),o.debug&&o.drawDebugPoints(L,D.drag),n||d||(c[o.DRAG]=!1)}if(o.showFps||!r&&c[o.SELECT_BOX]&&!n){if(N(L=t||u.contexts[o.SELECT_BOX]),1==o.selection[4]&&(o.hoverData.selecting||o.touchData.selecting)){b=o.cy.zoom();var F=m.core("selection-box-border-width").value/b;L.lineWidth=F,L.fillStyle="rgba("+m.core("selection-box-color").value[0]+","+m.core("selection-box-color").value[1]+","+m.core("selection-box-color").value[2]+","+m.core("selection-box-opacity").value+")",L.fillRect(o.selection[0],o.selection[1],o.selection[2]-o.selection[0],o.selection[3]-o.selection[1]),F>0&&(L.strokeStyle="rgba("+m.core("selection-box-border-color").value[0]+","+m.core("selection-box-border-color").value[1]+","+m.core("selection-box-border-color").value[2]+","+m.core("selection-box-opacity").value+")",L.strokeRect(o.selection[0],o.selection[1],o.selection[2]-o.selection[0],o.selection[3]-o.selection[1]))}if(u.bgActivePosistion&&!o.hoverData.selecting){b=o.cy.zoom();var z=u.bgActivePosistion;L.fillStyle="rgba("+m.core("active-bg-color").value[0]+","+m.core("active-bg-color").value[1]+","+m.core("active-bg-color").value[2]+","+m.core("active-bg-opacity").value+")",L.beginPath(),L.arc(z.x,z.y,m.core("active-bg-size").pfValue/b,0,2*Math.PI),L.fill()}var G=o.lastRedrawTime;if(o.showFps&&G){G=Math.round(G);var Y=Math.round(1e3/G);L.setTransform(1,0,0,1,0,0),L.fillStyle="rgba(255, 0, 0, 0.75)",L.strokeStyle="rgba(255, 0, 0, 0.75)",L.lineWidth=1,L.fillText("1 frame = "+G+" ms = "+Y+" fps",0,20);L.strokeRect(0,30,250,20),L.fillRect(0,30,250*Math.min(Y/60,1),20)}n||(c[o.SELECT_BOX]=!1)}if(d&&1!==p){var V=u.contexts[o.NODE],X=o.data.bufferCanvases[o.MOTIONBLUR_BUFFER_NODE],U=u.contexts[o.DRAG],j=o.data.bufferCanvases[o.MOTIONBLUR_BUFFER_DRAG],q=function(e,t,n){e.setTransform(1,0,0,1,0,0),n||!y?e.clearRect(0,0,o.canvasWidth,o.canvasHeight):C(e,0,0,o.canvasWidth,o.canvasHeight);var r=p;e.drawImage(t,0,0,o.canvasWidth*r,o.canvasHeight*r,0,0,o.canvasWidth,o.canvasHeight)};(c[o.NODE]||R[o.NODE])&&(q(V,X,R[o.NODE]),c[o.NODE]=!1),(c[o.DRAG]||R[o.DRAG])&&(q(U,j,R[o.DRAG]),c[o.DRAG]=!1)}o.prevViewport=_,o.clearingMotionBlur&&(o.clearingMotionBlur=!1,o.motionBlurCleared=!0,o.motionBlur=!0),d&&(o.motionBlurTimeout=setTimeout((function(){o.motionBlurTimeout=null,o.clearedForMotionBlur[o.NODE]=!1,o.clearedForMotionBlur[o.DRAG]=!1,o.motionBlur=!1,o.clearingMotionBlur=!h,o.mbFrames=0,c[o.NODE]=!0,c[o.DRAG]=!0,o.redraw()}),100)),t||l.emit("render")};for(var bc={drawPolygonPath:function(e,t,n,r,i,a){var o=r/2,s=i/2;e.beginPath&&e.beginPath(),e.moveTo(t+o*a[0],n+s*a[1]);for(var l=1;l0&&a>0){d.clearRect(0,0,i,a),d.globalCompositeOperation="source-over";var p=this.getCachedZSortedEles();if(e.full)d.translate(-n.x1*l,-n.y1*l),d.scale(l,l),this.drawElements(d,p),d.scale(1/l,1/l),d.translate(n.x1*l,n.y1*l);else{var g=t.pan(),f={x:g.x*l,y:g.y*l};l*=t.zoom(),d.translate(f.x,f.y),d.scale(l,l),this.drawElements(d,p),d.scale(1/l,1/l),d.translate(-f.x,-f.y)}e.bg&&(d.globalCompositeOperation="destination-over",d.fillStyle=e.bg,d.rect(0,0,i,a),d.fill())}return h},Cc.png=function(e){return Ac(e,this.bufferCanvasImage(e),"image/png")},Cc.jpg=function(e){return Ac(e,this.bufferCanvasImage(e),"image/jpeg")};var Lc={nodeShapeImpl:function(e,t,n,r,i,a,o,s){switch(e){case"ellipse":return this.drawEllipsePath(t,n,r,i,a);case"polygon":return this.drawPolygonPath(t,n,r,i,a,o);case"round-polygon":return this.drawRoundPolygonPath(t,n,r,i,a,o,s);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(t,n,r,i,a,s);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(t,n,r,i,a,o,s);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(t,n,r,i,a,s);case"barrel":return this.drawBarrelPath(t,n,r,i,a)}}},kc=Mc,Sc=Mc.prototype;function Mc(e){var t=this;t.data={canvases:new Array(Sc.CANVAS_LAYERS),contexts:new Array(Sc.CANVAS_LAYERS),canvasNeedsRedraw:new Array(Sc.CANVAS_LAYERS),bufferCanvases:new Array(Sc.BUFFER_COUNT),bufferContexts:new Array(Sc.CANVAS_LAYERS)};var n="-webkit-tap-highlight-color",r="rgba(0,0,0,0)";t.data.canvasContainer=document.createElement("div");var i=t.data.canvasContainer.style;t.data.canvasContainer.style[n]=r,i.position="relative",i.zIndex="0",i.overflow="hidden";var a=e.cy.container();a.appendChild(t.data.canvasContainer),a.style[n]=r;var o={"-webkit-user-select":"none","-moz-user-select":"-moz-none","user-select":"none","-webkit-tap-highlight-color":"rgba(0,0,0,0)","outline-style":"none"};p&&p.userAgent.match(/msie|trident|edge/i)&&(o["-ms-touch-action"]="none",o["touch-action"]="none");for(var s=0;s2&&_.push("'"+this.terminals_[x]+"'");C=h.showPosition?"Parse error on line "+(l+1)+":\n"+h.showPosition()+"\nExpecting "+_.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==v?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(C,{text:h.match,token:this.terminals_[v]||v,line:h.yylineno,loc:g,expected:_})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+y+", token: "+v);switch(m[0]){case 1:n.push(v),i.push(h.yytext),a.push(h.yylloc),n.push(m[1]),v=null,u=h.yyleng,s=h.yytext,l=h.yylineno,g=h.yylloc;break;case 2:if(w=this.productions_[m[1]][1],D.$=i[i.length-w],D._$={first_line:a[a.length-(w||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(w||1)].first_column,last_column:a[a.length-1].last_column},f&&(D._$.range=[a[a.length-(w||1)].range[0],a[a.length-1].range[1]]),void 0!==(b=this.performAction.apply(D,[s,u,l,d.yy,m[1],i,a].concat(c))))return b;w&&(n=n.slice(0,-1*w*2),i=i.slice(0,-1*w),a=a.slice(0,-1*w)),n.push(this.productions_[m[1]][0]),i.push(D.$),a.push(D._$),E=o[n[n.length-2]][n[n.length-1]],n.push(E);break;case 3:return!0}}return!0}},b=(e={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;at[0].length)){if(t=n,r=a,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,i[a])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,i[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,n,r){switch(n){case 0:return e.getLogger().trace("Found comment",t.yytext),6;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;case 4:case 23:case 26:this.popState();break;case 5:e.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return e.getLogger().trace("SPACELINE"),6;case 7:return 7;case 8:return 15;case 9:e.getLogger().trace("end icon"),this.popState();break;case 10:return e.getLogger().trace("Exploding node"),this.begin("NODE"),19;case 11:return e.getLogger().trace("Cloud"),this.begin("NODE"),19;case 12:return e.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;case 13:return e.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;case 14:case 15:case 16:case 17:return this.begin("NODE"),19;case 18:return 13;case 19:return 22;case 20:return 11;case 21:this.begin("NSTR2");break;case 22:return"NODE_DESCR";case 24:e.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return e.getLogger().trace("description:",t.yytext),"NODE_DESCR";case 27:return this.popState(),e.getLogger().trace("node end ))"),"NODE_DEND";case 28:return this.popState(),e.getLogger().trace("node end )"),"NODE_DEND";case 29:return this.popState(),e.getLogger().trace("node end ...",t.yytext),"NODE_DEND";case 30:case 33:case 34:return this.popState(),e.getLogger().trace("node end (("),"NODE_DEND";case 31:case 32:return this.popState(),e.getLogger().trace("node end (-"),"NODE_DEND";case 35:case 36:return e.getLogger().trace("Long description:",t.yytext),20}},rules:[/^(?:\s*%%.*)/i,/^(?:mindmap\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR2:{rules:[22,23],inclusive:!1},NSTR:{rules:[25,26],inclusive:!1},NODE:{rules:[21,24,27,28,29,30,31,32,33,34,35,36],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}},e);function x(){this.yy={}}return m.lexer=b,x.prototype=m,m.Parser=x,new x}());Zc.parser=Zc;const Qc=Zc;let Jc=[],eh=0,th={};const nh={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},rh={clear:()=>{Jc=[],eh=0,th={}},addNode:(e,t,n,i)=>{var a,o;r.l.info("addNode",e,t,n,i);const s=(0,r.c)();let l=(null==(a=s.mindmap)?void 0:a.padding)??r.B.mindmap.padding;switch(i){case nh.ROUNDED_RECT:case nh.RECT:case nh.HEXAGON:l*=2}const u={id:eh++,nodeId:(0,r.d)(t,s),level:e,descr:(0,r.d)(n,s),type:i,children:[],width:(null==(o=s.mindmap)?void 0:o.maxNodeWidth)??r.B.mindmap.maxNodeWidth,padding:l},c=function(e){for(let t=Jc.length-1;t>=0;t--)if(Jc[t].levelJc.length>0?Jc[0]:null,nodeType:nh,getType:(e,t)=>{switch(r.l.debug("In get type",e,t),e){case"[":return nh.RECT;case"(":return")"===t?nh.ROUNDED_RECT:nh.CLOUD;case"((":return nh.CIRCLE;case")":return nh.CLOUD;case"))":return nh.BANG;case"{{":return nh.HEXAGON;default:return nh.DEFAULT}},setElementForId:(e,t)=>{th[e]=t},decorateNode:e=>{if(!e)return;const t=(0,r.c)(),n=Jc[Jc.length-1];e.icon&&(n.icon=(0,r.d)(e.icon,t)),e.class&&(n.class=(0,r.d)(e.class,t))},type2Str:e=>{switch(e){case nh.DEFAULT:return"no-border";case nh.RECT:return"rect";case nh.ROUNDED_RECT:return"rounded-rect";case nh.CIRCLE:return"circle";case nh.CLOUD:return"cloud";case nh.BANG:return"bang";case nh.HEXAGON:return"hexgon";default:return"no-border"}},getLogger:()=>r.l,getElementById:e=>th[e]},ih=rh;function ah(e,t,n,i,a){!function(e,t,n,i,a){const o=a.htmlLabels,s=i%11,l=t.append("g");n.section=s;let u="section-"+s;s<0&&(u+=" section-root"),l.attr("class",(n.class?n.class+" ":"")+"mindmap-node "+u);const c=l.append("g"),h=l.append("g"),d=n.descr.replace(/()/g,"\n");(0,Hc.a)(h,d,{useHtmlLabels:o,width:n.width,classes:"mindmap-node-label"}),o||h.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle");const p=h.node().getBBox(),[g]=(0,r.D)(a.fontSize);if(n.height=p.height+1.1*g*.5+n.padding,n.width=p.width+2*n.padding,n.icon)if(n.type===e.nodeType.CIRCLE)n.height+=50,n.width+=50,l.append("foreignObject").attr("height","50px").attr("width",n.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+s+" "+n.icon),h.attr("transform","translate("+n.width/2+", "+(n.height/2-1.5*n.padding)+")");else{n.width+=50;const e=n.height;n.height=Math.max(e,60);const t=Math.abs(n.height-e);l.append("foreignObject").attr("width","60px").attr("height",n.height).attr("style","text-align: center;margin-top:"+t/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+s+" "+n.icon),h.attr("transform","translate("+(25+n.width/2)+", "+(t/2+n.padding/2)+")")}else if(o){const e=(n.width-p.width)/2,t=(n.height-p.height)/2;h.attr("transform","translate("+e+", "+t+")")}else{const e=n.width/2,t=n.padding/2;h.attr("transform","translate("+e+", "+t+")")}switch(n.type){case e.nodeType.DEFAULT:!function(e,t,n,r){t.append("path").attr("id","node-"+n.id).attr("class","node-bkg node-"+e.type2Str(n.type)).attr("d",`M0 ${n.height-5} v${10-n.height} q0,-5 5,-5 h${n.width-10} q5,0 5,5 v${n.height-5} H0 Z`),t.append("line").attr("class","node-line-"+r).attr("x1",0).attr("y1",n.height).attr("x2",n.width).attr("y2",n.height)}(e,c,n,s);break;case e.nodeType.ROUNDED_RECT:!function(e,t,n){t.append("rect").attr("id","node-"+n.id).attr("class","node-bkg node-"+e.type2Str(n.type)).attr("height",n.height).attr("rx",n.padding).attr("ry",n.padding).attr("width",n.width)}(e,c,n);break;case e.nodeType.RECT:!function(e,t,n){t.append("rect").attr("id","node-"+n.id).attr("class","node-bkg node-"+e.type2Str(n.type)).attr("height",n.height).attr("width",n.width)}(e,c,n);break;case e.nodeType.CIRCLE:c.attr("transform","translate("+n.width/2+", "+ +n.height/2+")"),function(e,t,n){t.append("circle").attr("id","node-"+n.id).attr("class","node-bkg node-"+e.type2Str(n.type)).attr("r",n.width/2)}(e,c,n);break;case e.nodeType.CLOUD:!function(e,t,n){const r=n.width,i=n.height,a=.15*r,o=.25*r,s=.35*r,l=.2*r;t.append("path").attr("id","node-"+n.id).attr("class","node-bkg node-"+e.type2Str(n.type)).attr("d",`M0 0 a${a},${a} 0 0,1 ${.25*r},${-1*r*.1}\n a${s},${s} 1 0,1 ${.4*r},${-1*r*.1}\n a${o},${o} 1 0,1 ${.35*r},${1*r*.2}\n\n a${a},${a} 1 0,1 ${.15*r},${1*i*.35}\n a${l},${l} 1 0,1 ${-1*r*.15},${1*i*.65}\n\n a${o},${a} 1 0,1 ${-1*r*.25},${.15*r}\n a${s},${s} 1 0,1 ${-1*r*.5},0\n a${a},${a} 1 0,1 ${-1*r*.25},${-1*r*.15}\n\n a${a},${a} 1 0,1 ${-1*r*.1},${-1*i*.35}\n a${l},${l} 1 0,1 ${.1*r},${-1*i*.65}\n\n H0 V0 Z`)}(e,c,n);break;case e.nodeType.BANG:!function(e,t,n){const r=n.width,i=n.height,a=.15*r;t.append("path").attr("id","node-"+n.id).attr("class","node-bkg node-"+e.type2Str(n.type)).attr("d",`M0 0 a${a},${a} 1 0,0 ${.25*r},${-1*i*.1}\n a${a},${a} 1 0,0 ${.25*r},0\n a${a},${a} 1 0,0 ${.25*r},0\n a${a},${a} 1 0,0 ${.25*r},${1*i*.1}\n\n a${a},${a} 1 0,0 ${.15*r},${1*i*.33}\n a${.8*a},${.8*a} 1 0,0 0,${1*i*.34}\n a${a},${a} 1 0,0 ${-1*r*.15},${1*i*.33}\n\n a${a},${a} 1 0,0 ${-1*r*.25},${.15*i}\n a${a},${a} 1 0,0 ${-1*r*.25},0\n a${a},${a} 1 0,0 ${-1*r*.25},0\n a${a},${a} 1 0,0 ${-1*r*.25},${-1*i*.15}\n\n a${a},${a} 1 0,0 ${-1*r*.1},${-1*i*.33}\n a${.8*a},${.8*a} 1 0,0 0,${-1*i*.34}\n a${a},${a} 1 0,0 ${.1*r},${-1*i*.33}\n\n H0 V0 Z`)}(e,c,n);break;case e.nodeType.HEXAGON:!function(e,t,n){const r=n.height,i=r/4,a=n.width-n.padding+2*i;!function(e,t,n,r,i){e.insert("polygon",":first-child").attr("points",r.map((function(e){return e.x+","+e.y})).join(" ")).attr("transform","translate("+(i.width-t)/2+", "+n+")")}(t,a,r,[{x:i,y:0},{x:a-i,y:0},{x:a,y:-r/2},{x:a-i,y:-r},{x:i,y:-r},{x:0,y:-r/2}],n)}(0,c,n)}e.setElementForId(n.id,l),n.height}(e,t,n,i,a),n.children&&n.children.forEach(((n,r)=>{ah(e,t,n,i<0?r:i,a)}))}function oh(e,t,n,r){t.add({group:"nodes",data:{id:e.id.toString(),labelText:e.descr,height:e.height,width:e.width,level:r,nodeId:e.id,padding:e.padding,type:e.type},position:{x:e.x,y:e.y}}),e.children&&e.children.forEach((i=>{oh(i,t,n,r+1),t.add({group:"edges",data:{id:`${e.id}_${i.id}`,source:e.id,target:i.id,depth:r,section:i.section}})}))}function sh(e,t){return new Promise((n=>{const i=(0,qc.Ltv)("body").append("div").attr("id","cy").attr("style","display:none"),a=Uc({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});i.remove(),oh(e,a,t,0),a.nodes().forEach((function(e){e.layoutDimensions=()=>{const t=e.data();return{w:t.width,h:t.height}}})),a.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),a.ready((e=>{r.l.info("Ready",e),n(a)}))}))}Uc.use(jc);const lh={draw:async(e,t,n,i)=>{var a,o;r.l.debug("Rendering mindmap diagram\n"+e);const s=i.db,l=s.getMindmap();if(!l)return;const u=(0,r.c)();u.htmlLabels=!1;const c=(0,r.A)(t),h=c.append("g");h.attr("class","mindmap-edges");const d=c.append("g");d.attr("class","mindmap-nodes"),ah(s,d,l,-1,u);const p=await sh(l,u);!function(e,t){t.edges().map(((t,n)=>{const i=t.data();if(t[0]._private.bodyBounds){const a=t[0]._private.rscratch;r.l.trace("Edge: ",n,i),e.insert("path").attr("d",`M ${a.startX},${a.startY} L ${a.midX},${a.midY} L${a.endX},${a.endY} `).attr("class","edge section-edge-"+i.section+" edge-depth-"+i.depth)}}))}(h,p),function(e,t){t.nodes().map(((t,n)=>{const i=t.data();i.x=t.position().x,i.y=t.position().y,function(e,t){const n=e.getElementById(t.id),r=t.x||0,i=t.y||0;n.attr("transform","translate("+r+","+i+")")}(e,i);const a=e.getElementById(i.nodeId);r.l.info("Id:",n,"Position: (",t.position().x,", ",t.position().y,")",i),a.attr("transform",`translate(${t.position().x-i.width/2}, ${t.position().y-i.height/2})`),a.attr("attr",`apa-${n})`)}))}(s,p),(0,r.o)(void 0,c,(null==(a=u.mindmap)?void 0:a.padding)??r.B.mindmap.padding,(null==(o=u.mindmap)?void 0:o.useMaxWidth)??r.B.mindmap.useMaxWidth)}},uh=e=>`\n .edge {\n stroke-width: 3;\n }\n ${(e=>{let t="";for(let n=0;n{a.d(e,{diagram:()=>b});var i=a(91245),n=a(26312),d=a(21176),r=a(697),s=a(99702);a(74353),a(16750),a(42838);const o={},c=(t,e)=>{o[t]=e},g=(t,e)=>{const a=t.append("text").attr("x",2*(0,s.c)().state.padding).attr("y",(0,s.c)().state.textHeight+1.3*(0,s.c)().state.padding).attr("font-size",(0,s.c)().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),i=a.height,n=t.append("text").attr("x",(0,s.c)().state.padding).attr("y",i+.4*(0,s.c)().state.padding+(0,s.c)().state.dividerMargin+(0,s.c)().state.textHeight).attr("class","state-description");let d=!0,r=!0;e.descriptions.forEach((function(t){d||(!function(t,e,a){const i=t.append("tspan").attr("x",2*(0,s.c)().state.padding).text(e);a||i.attr("dy",(0,s.c)().state.textHeight)}(n,t,r),r=!1),d=!1}));const o=t.append("line").attr("x1",(0,s.c)().state.padding).attr("y1",(0,s.c)().state.padding+i+(0,s.c)().state.dividerMargin/2).attr("y2",(0,s.c)().state.padding+i+(0,s.c)().state.dividerMargin/2).attr("class","descr-divider"),c=n.node().getBBox(),g=Math.max(c.width,a.width);return o.attr("x2",g+3*(0,s.c)().state.padding),t.insert("rect",":first-child").attr("x",(0,s.c)().state.padding).attr("y",(0,s.c)().state.padding).attr("width",g+2*(0,s.c)().state.padding).attr("height",c.height+i+2*(0,s.c)().state.padding).attr("rx",(0,s.c)().state.radius),t},p=(t,e,a)=>{const i=(0,s.c)().state.padding,n=2*(0,s.c)().state.padding,d=t.node().getBBox(),r=d.width,o=d.x,c=t.append("text").attr("x",0).attr("y",(0,s.c)().state.titleShift).attr("font-size",(0,s.c)().state.fontSize).attr("class","state-title").text(e.id),g=c.node().getBBox().width+n;let p,h=Math.max(g,r);h===r&&(h+=n);const l=t.node().getBBox();e.doc,p=o-i,g>r&&(p=(r-h)/2+i),Math.abs(o-l.x)r&&(p=o-(g-r)/2);const x=1-(0,s.c)().state.textHeight;return t.insert("rect",":first-child").attr("x",p).attr("y",x).attr("class",a?"alt-composit":"composit").attr("width",h).attr("height",l.height+(0,s.c)().state.textHeight+(0,s.c)().state.titleShift+1).attr("rx","0"),c.attr("x",p+i),g<=r&&c.attr("x",o+(h-n)/2-g/2+i),t.insert("rect",":first-child").attr("x",p).attr("y",(0,s.c)().state.titleShift-(0,s.c)().state.textHeight-(0,s.c)().state.padding).attr("width",h).attr("height",3*(0,s.c)().state.textHeight).attr("rx",(0,s.c)().state.radius),t.insert("rect",":first-child").attr("x",p).attr("y",(0,s.c)().state.titleShift-(0,s.c)().state.textHeight-(0,s.c)().state.padding).attr("width",h).attr("height",l.height+3+2*(0,s.c)().state.textHeight).attr("rx",(0,s.c)().state.radius),t},h=(t,e)=>{e.attr("class","state-note");const a=e.append("rect").attr("x",0).attr("y",(0,s.c)().state.padding),i=e.append("g"),{textWidth:n,textHeight:d}=((t,e,a,i)=>{let n=0;const d=i.append("text");d.style("text-anchor","start"),d.attr("class","noteText");let r=t.replace(/\r\n/g,"
    ");r=r.replace(/\n/g,"
    ");const o=r.split(s.e.lineBreakRegex);let c=1.25*(0,s.c)().state.noteMargin;for(const g of o){const t=g.trim();if(t.length>0){const i=d.append("tspan");i.text(t),0===c&&(c+=i.node().getBBox().height),n+=c,i.attr("x",e+(0,s.c)().state.noteMargin),i.attr("y",a+n+1.25*(0,s.c)().state.noteMargin)}}return{textWidth:d.node().getBBox().width,textHeight:n}})(t,0,0,i);return a.attr("height",d+2*(0,s.c)().state.noteMargin),a.attr("width",n+2*(0,s.c)().state.noteMargin),a},l=function(t,e){const a=e.id,i={id:a,label:e.id,width:0,height:0},n=t.append("g").attr("id",a).attr("class","stateGroup");"start"===e.type&&(t=>{t.append("circle").attr("class","start-state").attr("r",(0,s.c)().state.sizeUnit).attr("cx",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit).attr("cy",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit)})(n),"end"===e.type&&(t=>{t.append("circle").attr("class","end-state-outer").attr("r",(0,s.c)().state.sizeUnit+(0,s.c)().state.miniPadding).attr("cx",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit+(0,s.c)().state.miniPadding).attr("cy",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit+(0,s.c)().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",(0,s.c)().state.sizeUnit).attr("cx",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit+2).attr("cy",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit+2)})(n),"fork"!==e.type&&"join"!==e.type||((t,e)=>{let a=(0,s.c)().state.forkWidth,i=(0,s.c)().state.forkHeight;if(e.parentId){let t=a;a=i,i=t}t.append("rect").style("stroke","black").style("fill","black").attr("width",a).attr("height",i).attr("x",(0,s.c)().state.padding).attr("y",(0,s.c)().state.padding)})(n,e),"note"===e.type&&h(e.note.text,n),"divider"===e.type&&(t=>{t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",(0,s.c)().state.textHeight).attr("class","divider").attr("x2",2*(0,s.c)().state.textHeight).attr("y1",0).attr("y2",0)})(n),"default"===e.type&&0===e.descriptions.length&&((t,e)=>{const a=t.append("text").attr("x",2*(0,s.c)().state.padding).attr("y",(0,s.c)().state.textHeight+2*(0,s.c)().state.padding).attr("font-size",(0,s.c)().state.fontSize).attr("class","state-title").text(e.id),i=a.node().getBBox();t.insert("rect",":first-child").attr("x",(0,s.c)().state.padding).attr("y",(0,s.c)().state.padding).attr("width",i.width+2*(0,s.c)().state.padding).attr("height",i.height+2*(0,s.c)().state.padding).attr("rx",(0,s.c)().state.radius)})(n,e),"default"===e.type&&e.descriptions.length>0&&g(n,e);const d=n.node().getBBox();return i.width=d.width+2*(0,s.c)().state.padding,i.height=d.height+2*(0,s.c)().state.padding,c(a,i),i};let x=0;let u;const f={},y=(t,e,a,o,c,g,h)=>{const w=new r.T({compound:!0,multigraph:!0});let b,m=!0;for(b=0;b{const e=t.parentElement;let a=0,i=0;e&&(e.parentElement&&(a=e.parentElement.getBBox().width),i=parseInt(e.getAttribute("data-x-shift"),10),Number.isNaN(i)&&(i=0)),t.setAttribute("x1",0-i+8),t.setAttribute("x2",a-i-8)}))}else s.l.debug("No Node "+t+": "+JSON.stringify(w.node(t)))}));let M=v.getBBox();w.edges().forEach((function(t){void 0!==t&&void 0!==w.edge(t)&&(s.l.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(w.edge(t))),function(t,e,a){e.points=e.points.filter((t=>!Number.isNaN(t.y)));const d=e.points,r=(0,n.n8j)().x((function(t){return t.x})).y((function(t){return t.y})).curve(n.qrM),o=t.append("path").attr("d",r(d)).attr("id","edge"+x).attr("class","transition");let c="";if((0,s.c)().state.arrowMarkerAbsolute&&(c=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,c=c.replace(/\(/g,"\\("),c=c.replace(/\)/g,"\\)")),o.attr("marker-end","url("+c+"#"+function(t){switch(t){case i.d.relationType.AGGREGATION:return"aggregation";case i.d.relationType.EXTENSION:return"extension";case i.d.relationType.COMPOSITION:return"composition";case i.d.relationType.DEPENDENCY:return"dependency"}}(i.d.relationType.DEPENDENCY)+"End)"),void 0!==a.title){const i=t.append("g").attr("class","stateLabel"),{x:n,y:d}=s.u.calcLabelPosition(e.points),r=s.e.getRows(a.title);let o=0;const c=[];let g=0,p=0;for(let t=0;t<=r.length;t++){const e=i.append("text").attr("text-anchor","middle").text(r[t]).attr("x",n).attr("y",d+o),a=e.node().getBBox();if(g=Math.max(g,a.width),p=Math.min(p,a.x),s.l.info(a.x,n,d+o),0===o){const t=e.node().getBBox();o=t.height,s.l.info("Title height",o,d)}c.push(e)}let h=o*r.length;if(r.length>1){const t=(r.length-1)*o*.5;c.forEach(((e,a)=>e.attr("y",d+a*o-t))),h=o*r.length}const l=i.node().getBBox();i.insert("rect",":first-child").attr("class","box").attr("x",n-g/2-(0,s.c)().state.padding/2).attr("y",d-h/2-(0,s.c)().state.padding/2-3.5).attr("width",g+(0,s.c)().state.padding).attr("height",h+(0,s.c)().state.padding),s.l.info(l)}x++}(e,w.edge(t),w.edge(t).relation))})),M=v.getBBox();const S={id:a||"root",label:a||"root",width:0,height:0};return S.width=M.width+2*u.padding,S.height=M.height+2*u.padding,s.l.debug("Doc rendered",S,w),S},w={setConf:function(){},draw:function(t,e,a,i){u=(0,s.c)().state;const d=(0,s.c)().securityLevel;let r;"sandbox"===d&&(r=(0,n.Ltv)("#i"+e));const o="sandbox"===d?(0,n.Ltv)(r.nodes()[0].contentDocument.body):(0,n.Ltv)("body"),c="sandbox"===d?r.nodes()[0].contentDocument:document;s.l.debug("Rendering diagram "+t);const g=o.select(`[id='${e}']`);g.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z");const p=i.db.getRootDoc();y(p,g,void 0,!1,o,c,i);const h=u.padding,l=g.node().getBBox(),x=l.width+2*h,f=l.height+2*h,w=1.75*x;(0,s.i)(g,f,w,u.useMaxWidth),g.attr("viewBox",`${l.x-u.padding} ${l.y-u.padding} `+x+" "+f)}},b={parser:i.p,db:i.d,renderer:w,styles:i.s,init:t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute,i.d.clear()}}}}]); \ No newline at end of file diff --git a/assets/js/138e0e15.7676a675.js b/assets/js/138e0e15.7676a675.js new file mode 100644 index 0000000000..35a3a2fb8b --- /dev/null +++ b/assets/js/138e0e15.7676a675.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4921],{41597:e=>{e.exports=JSON.parse('{"name":"@easyops-cn/docusaurus-search-local","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/1398.a24173c3.js b/assets/js/1398.a24173c3.js new file mode 100644 index 0000000000..11bcde48be --- /dev/null +++ b/assets/js/1398.a24173c3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1398],{31398:(t,e,r)=>{r.d(e,{diagram:()=>D});var i=r(99702),a=r(697),n=r(26312),s=r(21176);const o=[];for(let S=0;S<256;++S)o.push((S+256).toString(16).slice(1));function c(t,e=0){return o[t[e+0]]+o[t[e+1]]+o[t[e+2]]+o[t[e+3]]+"-"+o[t[e+4]]+o[t[e+5]]+"-"+o[t[e+6]]+o[t[e+7]]+"-"+o[t[e+8]]+o[t[e+9]]+"-"+o[t[e+10]]+o[t[e+11]]+o[t[e+12]]+o[t[e+13]]+o[t[e+14]]+o[t[e+15]]}const l=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;const h=function(t){return"string"==typeof t&&l.test(t)};const d=function(t){if(!h(t))throw TypeError("Invalid UUID");let e;const r=new Uint8Array(16);return r[0]=(e=parseInt(t.slice(0,8),16))>>>24,r[1]=e>>>16&255,r[2]=e>>>8&255,r[3]=255&e,r[4]=(e=parseInt(t.slice(9,13),16))>>>8,r[5]=255&e,r[6]=(e=parseInt(t.slice(14,18),16))>>>8,r[7]=255&e,r[8]=(e=parseInt(t.slice(19,23),16))>>>8,r[9]=255&e,r[10]=(e=parseInt(t.slice(24,36),16))/1099511627776&255,r[11]=e/4294967296&255,r[12]=e>>>24&255,r[13]=e>>>16&255,r[14]=e>>>8&255,r[15]=255&e,r};function y(t,e,r,i){switch(t){case 0:return e&r^~e&i;case 1:case 3:return e^r^i;case 2:return e&r^e&i^r&i}}function u(t,e){return t<>>32-e}const p=function(t,e,r){function i(t,i,a,n){var s;if("string"==typeof t&&(t=function(t){t=unescape(encodeURIComponent(t));const e=[];for(let r=0;r>>0;l=c,c=o,o=u(a,30)>>>0,a=i,i=s}r[0]=r[0]+i>>>0,r[1]=r[1]+a>>>0,r[2]=r[2]+o>>>0,r[3]=r[3]+c>>>0,r[4]=r[4]+l>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,255&r[0],r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,255&r[1],r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,255&r[2],r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,255&r[3],r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,255&r[4]]}));r(74353),r(16750),r(42838);var _=function(){var t=function(t,e,r,i){for(r=r||{},i=t.length;i--;r[t[i]]=e);return r},e=[6,8,10,20,22,24,26,27,28],r=[1,10],i=[1,11],a=[1,12],n=[1,13],s=[1,14],o=[1,15],c=[1,21],l=[1,22],h=[1,23],d=[1,24],y=[1,25],u=[6,8,10,13,15,18,19,20,22,24,26,27,28,41,42,43,44,45],p=[1,34],_=[27,28,46,47],f=[41,42,43,44,45],m=[17,34],E=[1,54],g=[1,53],O=[17,34,36,38],b={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,":":13,role:14,BLOCK_START:15,attributes:16,BLOCK_STOP:17,SQS:18,SQE:19,title:20,title_value:21,acc_title:22,acc_title_value:23,acc_descr:24,acc_descr_value:25,acc_descr_multiline_value:26,ALPHANUM:27,ENTITY_NAME:28,attribute:29,attributeType:30,attributeName:31,attributeKeyTypeList:32,attributeComment:33,ATTRIBUTE_WORD:34,attributeKeyType:35,COMMA:36,ATTRIBUTE_KEY:37,COMMENT:38,cardinality:39,relType:40,ZERO_OR_ONE:41,ZERO_OR_MORE:42,ONE_OR_MORE:43,ONLY_ONE:44,MD_PARENT:45,NON_IDENTIFYING:46,IDENTIFYING:47,WORD:48,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:":",15:"BLOCK_START",17:"BLOCK_STOP",18:"SQS",19:"SQE",20:"title",21:"title_value",22:"acc_title",23:"acc_title_value",24:"acc_descr",25:"acc_descr_value",26:"acc_descr_multiline_value",27:"ALPHANUM",28:"ENTITY_NAME",34:"ATTRIBUTE_WORD",36:"COMMA",37:"ATTRIBUTE_KEY",38:"COMMENT",41:"ZERO_OR_ONE",42:"ZERO_OR_MORE",43:"ONE_OR_MORE",44:"ONLY_ONE",45:"MD_PARENT",46:"NON_IDENTIFYING",47:"IDENTIFYING",48:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,4],[9,3],[9,1],[9,7],[9,6],[9,4],[9,2],[9,2],[9,2],[9,1],[11,1],[11,1],[16,1],[16,2],[29,2],[29,3],[29,3],[29,4],[30,1],[31,1],[32,1],[32,3],[35,1],[33,1],[12,3],[39,1],[39,1],[39,1],[39,1],[39,1],[40,1],[40,1],[14,1],[14,1],[14,1]],performAction:function(t,e,r,i,a,n,s){var o=n.length-1;switch(a){case 1:break;case 2:case 6:case 7:this.$=[];break;case 3:n[o-1].push(n[o]),this.$=n[o-1];break;case 4:case 5:case 19:case 43:case 27:case 28:case 31:this.$=n[o];break;case 8:i.addEntity(n[o-4]),i.addEntity(n[o-2]),i.addRelationship(n[o-4],n[o],n[o-2],n[o-3]);break;case 9:i.addEntity(n[o-3]),i.addAttributes(n[o-3],n[o-1]);break;case 10:i.addEntity(n[o-2]);break;case 11:i.addEntity(n[o]);break;case 12:i.addEntity(n[o-6],n[o-4]),i.addAttributes(n[o-6],n[o-1]);break;case 13:i.addEntity(n[o-5],n[o-3]);break;case 14:i.addEntity(n[o-3],n[o-1]);break;case 15:case 16:this.$=n[o].trim(),i.setAccTitle(this.$);break;case 17:case 18:this.$=n[o].trim(),i.setAccDescription(this.$);break;case 20:case 41:case 42:case 32:this.$=n[o].replace(/"/g,"");break;case 21:case 29:this.$=[n[o]];break;case 22:n[o].push(n[o-1]),this.$=n[o];break;case 23:this.$={attributeType:n[o-1],attributeName:n[o]};break;case 24:this.$={attributeType:n[o-2],attributeName:n[o-1],attributeKeyTypeList:n[o]};break;case 25:this.$={attributeType:n[o-2],attributeName:n[o-1],attributeComment:n[o]};break;case 26:this.$={attributeType:n[o-3],attributeName:n[o-2],attributeKeyTypeList:n[o-1],attributeComment:n[o]};break;case 30:n[o-2].push(n[o]),this.$=n[o-2];break;case 33:this.$={cardA:n[o],relType:n[o-1],cardB:n[o-2]};break;case 34:this.$=i.Cardinality.ZERO_OR_ONE;break;case 35:this.$=i.Cardinality.ZERO_OR_MORE;break;case 36:this.$=i.Cardinality.ONE_OR_MORE;break;case 37:this.$=i.Cardinality.ONLY_ONE;break;case 38:this.$=i.Cardinality.MD_PARENT;break;case 39:this.$=i.Identification.NON_IDENTIFYING;break;case 40:this.$=i.Identification.IDENTIFYING}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,20:r,22:i,24:a,26:n,27:s,28:o},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:16,11:9,20:r,22:i,24:a,26:n,27:s,28:o},t(e,[2,5]),t(e,[2,6]),t(e,[2,11],{12:17,39:20,15:[1,18],18:[1,19],41:c,42:l,43:h,44:d,45:y}),{21:[1,26]},{23:[1,27]},{25:[1,28]},t(e,[2,18]),t(u,[2,19]),t(u,[2,20]),t(e,[2,4]),{11:29,27:s,28:o},{16:30,17:[1,31],29:32,30:33,34:p},{11:35,27:s,28:o},{40:36,46:[1,37],47:[1,38]},t(_,[2,34]),t(_,[2,35]),t(_,[2,36]),t(_,[2,37]),t(_,[2,38]),t(e,[2,15]),t(e,[2,16]),t(e,[2,17]),{13:[1,39]},{17:[1,40]},t(e,[2,10]),{16:41,17:[2,21],29:32,30:33,34:p},{31:42,34:[1,43]},{34:[2,27]},{19:[1,44]},{39:45,41:c,42:l,43:h,44:d,45:y},t(f,[2,39]),t(f,[2,40]),{14:46,27:[1,49],28:[1,48],48:[1,47]},t(e,[2,9]),{17:[2,22]},t(m,[2,23],{32:50,33:51,35:52,37:E,38:g}),t([17,34,37,38],[2,28]),t(e,[2,14],{15:[1,55]}),t([27,28],[2,33]),t(e,[2,8]),t(e,[2,41]),t(e,[2,42]),t(e,[2,43]),t(m,[2,24],{33:56,36:[1,57],38:g}),t(m,[2,25]),t(O,[2,29]),t(m,[2,32]),t(O,[2,31]),{16:58,17:[1,59],29:32,30:33,34:p},t(m,[2,26]),{35:60,37:E},{17:[1,61]},t(e,[2,13]),t(O,[2,30]),t(e,[2,12])],defaultActions:{34:[2,27],41:[2,22]},parseError:function(t,e){if(!e.recoverable){var r=new Error(t);throw r.hash=e,r}this.trace(t)},parse:function(t){var e=this,r=[0],i=[],a=[null],n=[],s=this.table,o="",c=0,l=0,h=n.slice.call(arguments,1),d=Object.create(this.lexer),y={yy:{}};for(var u in this.yy)Object.prototype.hasOwnProperty.call(this.yy,u)&&(y.yy[u]=this.yy[u]);d.setInput(t,y.yy),y.yy.lexer=d,y.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var p=d.yylloc;n.push(p);var _=d.options&&d.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,m,E,g,O,b,k,R,N,T={};;){if(m=r[r.length-1],this.defaultActions[m]?E=this.defaultActions[m]:(null==f&&(N=void 0,"number"!=typeof(N=i.pop()||d.lex()||1)&&(N instanceof Array&&(N=(i=N).pop()),N=e.symbols_[N]||N),f=N),E=s[m]&&s[m][f]),void 0===E||!E.length||!E[0]){var x="";for(O in R=[],s[m])this.terminals_[O]&&O>2&&R.push("'"+this.terminals_[O]+"'");x=d.showPosition?"Parse error on line "+(c+1)+":\n"+d.showPosition()+"\nExpecting "+R.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(x,{text:d.match,token:this.terminals_[f]||f,line:d.yylineno,loc:p,expected:R})}if(E[0]instanceof Array&&E.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+f);switch(E[0]){case 1:r.push(f),a.push(d.yytext),n.push(d.yylloc),r.push(E[1]),f=null,l=d.yyleng,o=d.yytext,c=d.yylineno,p=d.yylloc;break;case 2:if(b=this.productions_[E[1]][1],T.$=a[a.length-b],T._$={first_line:n[n.length-(b||1)].first_line,last_line:n[n.length-1].last_line,first_column:n[n.length-(b||1)].first_column,last_column:n[n.length-1].last_column},_&&(T._$.range=[n[n.length-(b||1)].range[0],n[n.length-1].range[1]]),void 0!==(g=this.performAction.apply(T,[o,l,c,y.yy,E[1],a,n].concat(h))))return g;b&&(r=r.slice(0,-1*b*2),a=a.slice(0,-1*b),n=n.slice(0,-1*b)),r.push(this.productions_[E[1]][0]),a.push(T.$),n.push(T._$),k=s[r[r.length-2]][r[r.length-1]],r.push(k);break;case 3:return!0}}return!0}},k={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,r=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),r.length-1&&(this.yylineno-=r.length-1);var a=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:r?(r.length===i.length?this.yylloc.first_column:0)+i[i.length-r.length].length-r[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[a[0],a[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var r,i,a;if(this.options.backtrack_lexer&&(a={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(a.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],r=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var n in a)this[n]=a[n];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,r,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var a=this._currentRules(),n=0;ne[0].length)){if(e=r,i=n,this.options.backtrack_lexer){if(!1!==(t=this.test_match(r,a[n])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,a[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,r,i){switch(r){case 0:return this.begin("acc_title"),22;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),24;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 10;case 8:case 15:case 20:break;case 9:return 8;case 10:return 28;case 11:return 48;case 12:return 4;case 13:return this.begin("block"),15;case 14:return 36;case 16:return 37;case 17:case 18:return 34;case 19:return 38;case 21:return this.popState(),17;case 22:case 54:return e.yytext[0];case 23:return 18;case 24:return 19;case 25:case 29:case 30:case 43:return 41;case 26:case 27:case 28:case 36:case 38:case 45:return 43;case 31:case 32:case 33:case 34:case 35:case 37:case 44:return 42;case 39:case 40:case 41:case 42:return 44;case 46:return 45;case 47:case 50:case 51:case 52:return 46;case 48:case 49:return 47;case 53:return 27;case 55:return 6}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:,)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:(.*?)[~](.*?)*[~])/i,/^(?:[\*A-Za-z_][A-Za-z0-9\-_\[\]\(\)]*)/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:1\b)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\s*u\b)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z_][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},block:{rules:[14,15,16,17,18,19,20,21,22],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55],inclusive:!0}}};function R(){this.yy={}}return b.lexer=k,R.prototype=b,b.Parser=R,new R}();_.parser=_;const f=_;let m={},E=[];const g=function(t,e=void 0){return void 0===m[t]?(m[t]={attributes:[],alias:e},i.l.info("Added new entity :",t)):m[t]&&!m[t].alias&&e&&(m[t].alias=e,i.l.info(`Add alias '${e}' to entity '${t}'`)),m[t]},O={Cardinality:{ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE",MD_PARENT:"MD_PARENT"},Identification:{NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},getConfig:()=>(0,i.c)().er,addEntity:g,addAttributes:function(t,e){let r,a=g(t);for(r=e.length-1;r>=0;r--)a.attributes.push(e[r]),i.l.debug("Added attribute ",e[r].attributeName)},getEntities:()=>m,addRelationship:function(t,e,r,a){let n={entityA:t,roleA:e,entityB:r,relSpec:a};E.push(n),i.l.debug("Added new relationship :",n)},getRelationships:()=>E,clear:function(){m={},E=[],(0,i.v)()},setAccTitle:i.s,getAccTitle:i.g,setAccDescription:i.b,getAccDescription:i.a,setDiagramTitle:i.q,getDiagramTitle:i.t},b={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END",MD_PARENT_END:"MD_PARENT_END",MD_PARENT_START:"MD_PARENT_START"},k=b,R=function(t,e){let r;t.append("defs").append("marker").attr("id",b.MD_PARENT_START).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",b.MD_PARENT_END).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",b.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",b.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),r=t.append("defs").append("marker").attr("id",b.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18"),r=t.append("defs").append("marker").attr("id",b.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,0 L21,18"),t.append("defs").append("marker").attr("id",b.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",b.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),r=t.append("defs").append("marker").attr("id",b.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),r=t.append("defs").append("marker").attr("id",b.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},N=/[^\dA-Za-z](\W)*/g;let T={},x=new Map;const A=function(t,e,r){let a;return Object.keys(e).forEach((function(n){const s=function(t="",e=""){const r=t.replace(N,"");return`${v(e)}${v(r)}${p(t,I)}`}(n,"entity");x.set(n,s);const o=t.append("g").attr("id",s);a=void 0===a?s:a;const c="text-"+s,l=o.append("text").classed("er entityLabel",!0).attr("id",c).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","middle").style("font-family",(0,i.c)().fontFamily).style("font-size",T.fontSize+"px").text(e[n].alias??n),{width:h,height:d}=((t,e,r)=>{const a=T.entityPadding/3,n=T.entityPadding/3,s=.85*T.fontSize,o=e.node().getBBox(),c=[];let l=!1,h=!1,d=0,y=0,u=0,p=0,_=o.height+2*a,f=1;r.forEach((t=>{void 0!==t.attributeKeyTypeList&&t.attributeKeyTypeList.length>0&&(l=!0),void 0!==t.attributeComment&&(h=!0)})),r.forEach((r=>{const n=`${e.node().id}-attr-${f}`;let o=0;const m=(0,i.x)(r.attributeType),E=t.append("text").classed("er entityLabel",!0).attr("id",`${n}-type`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",(0,i.c)().fontFamily).style("font-size",s+"px").text(m),g=t.append("text").classed("er entityLabel",!0).attr("id",`${n}-name`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",(0,i.c)().fontFamily).style("font-size",s+"px").text(r.attributeName),O={};O.tn=E,O.nn=g;const b=E.node().getBBox(),k=g.node().getBBox();if(d=Math.max(d,b.width),y=Math.max(y,k.width),o=Math.max(b.height,k.height),l){const e=void 0!==r.attributeKeyTypeList?r.attributeKeyTypeList.join(","):"",a=t.append("text").classed("er entityLabel",!0).attr("id",`${n}-key`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",(0,i.c)().fontFamily).style("font-size",s+"px").text(e);O.kn=a;const c=a.node().getBBox();u=Math.max(u,c.width),o=Math.max(o,c.height)}if(h){const e=t.append("text").classed("er entityLabel",!0).attr("id",`${n}-comment`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",(0,i.c)().fontFamily).style("font-size",s+"px").text(r.attributeComment||"");O.cn=e;const a=e.node().getBBox();p=Math.max(p,a.width),o=Math.max(o,a.height)}O.height=o,c.push(O),_+=o+2*a,f+=1}));let m=4;l&&(m+=2),h&&(m+=2);const E=d+y+u+p,g={width:Math.max(T.minEntityWidth,Math.max(o.width+2*T.entityPadding,E+n*m)),height:r.length>0?_:Math.max(T.minEntityHeight,o.height+2*T.entityPadding)};if(r.length>0){const r=Math.max(0,(g.width-E-n*m)/(m/2));e.attr("transform","translate("+g.width/2+","+(a+o.height/2)+")");let i=o.height+2*a,s="attributeBoxOdd";c.forEach((e=>{const o=i+a+e.height/2;e.tn.attr("transform","translate("+n+","+o+")");const c=t.insert("rect","#"+e.tn.node().id).classed(`er ${s}`,!0).attr("x",0).attr("y",i).attr("width",d+2*n+r).attr("height",e.height+2*a),_=parseFloat(c.attr("x"))+parseFloat(c.attr("width"));e.nn.attr("transform","translate("+(_+n)+","+o+")");const f=t.insert("rect","#"+e.nn.node().id).classed(`er ${s}`,!0).attr("x",_).attr("y",i).attr("width",y+2*n+r).attr("height",e.height+2*a);let m=parseFloat(f.attr("x"))+parseFloat(f.attr("width"));if(l){e.kn.attr("transform","translate("+(m+n)+","+o+")");const c=t.insert("rect","#"+e.kn.node().id).classed(`er ${s}`,!0).attr("x",m).attr("y",i).attr("width",u+2*n+r).attr("height",e.height+2*a);m=parseFloat(c.attr("x"))+parseFloat(c.attr("width"))}h&&(e.cn.attr("transform","translate("+(m+n)+","+o+")"),t.insert("rect","#"+e.cn.node().id).classed(`er ${s}`,"true").attr("x",m).attr("y",i).attr("width",p+2*n+r).attr("height",e.height+2*a)),i+=e.height+2*a,s="attributeBoxOdd"===s?"attributeBoxEven":"attributeBoxOdd"}))}else g.height=Math.max(T.minEntityHeight,_),e.attr("transform","translate("+g.width/2+","+g.height/2+")");return g})(o,l,e[n].attributes),y=o.insert("rect","#"+c).classed("er entityBox",!0).attr("x",0).attr("y",0).attr("width",h).attr("height",d).node().getBBox();r.setNode(s,{width:y.width,height:y.height,shape:"rect",id:s})})),a},M=function(t){return(t.entityA+t.roleA+t.entityB).replace(/\s/g,"")};let w=0;const I="28e9f9db-3c8d-5aa5-9faf-44286ae5937c";function v(t=""){return t.length>0?`${t}-`:""}const D={parser:f,db:O,renderer:{setConf:function(t){const e=Object.keys(t);for(const r of e)T[r]=t[r]},draw:function(t,e,r,o){T=(0,i.c)().er,i.l.info("Drawing ER diagram");const c=(0,i.c)().securityLevel;let l;"sandbox"===c&&(l=(0,n.Ltv)("#i"+e));const h=("sandbox"===c?(0,n.Ltv)(l.nodes()[0].contentDocument.body):(0,n.Ltv)("body")).select(`[id='${e}']`);let d;R(h,T),d=new a.T({multigraph:!0,directed:!0,compound:!1}).setGraph({rankdir:T.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel((function(){return{}}));const y=A(h,o.db.getEntities(),d),u=function(t,e){return t.forEach((function(t){e.setEdge(x.get(t.entityA),x.get(t.entityB),{relationship:t},M(t))})),t}(o.db.getRelationships(),d);var p,_;(0,s.Zp)(d),p=h,(_=d).nodes().forEach((function(t){void 0!==t&&void 0!==_.node(t)&&p.select("#"+t).attr("transform","translate("+(_.node(t).x-_.node(t).width/2)+","+(_.node(t).y-_.node(t).height/2)+" )")})),u.forEach((function(t){!function(t,e,r,a,s){w++;const o=r.edge(x.get(e.entityA),x.get(e.entityB),M(e)),c=(0,n.n8j)().x((function(t){return t.x})).y((function(t){return t.y})).curve(n.qrM),l=t.insert("path","#"+a).classed("er relationshipLine",!0).attr("d",c(o.points)).style("stroke",T.stroke).style("fill","none");e.relSpec.relType===s.db.Identification.NON_IDENTIFYING&&l.attr("stroke-dasharray","8,8");let h="";switch(T.arrowMarkerAbsolute&&(h=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,h=h.replace(/\(/g,"\\("),h=h.replace(/\)/g,"\\)")),e.relSpec.cardA){case s.db.Cardinality.ZERO_OR_ONE:l.attr("marker-end","url("+h+"#"+k.ZERO_OR_ONE_END+")");break;case s.db.Cardinality.ZERO_OR_MORE:l.attr("marker-end","url("+h+"#"+k.ZERO_OR_MORE_END+")");break;case s.db.Cardinality.ONE_OR_MORE:l.attr("marker-end","url("+h+"#"+k.ONE_OR_MORE_END+")");break;case s.db.Cardinality.ONLY_ONE:l.attr("marker-end","url("+h+"#"+k.ONLY_ONE_END+")");break;case s.db.Cardinality.MD_PARENT:l.attr("marker-end","url("+h+"#"+k.MD_PARENT_END+")")}switch(e.relSpec.cardB){case s.db.Cardinality.ZERO_OR_ONE:l.attr("marker-start","url("+h+"#"+k.ZERO_OR_ONE_START+")");break;case s.db.Cardinality.ZERO_OR_MORE:l.attr("marker-start","url("+h+"#"+k.ZERO_OR_MORE_START+")");break;case s.db.Cardinality.ONE_OR_MORE:l.attr("marker-start","url("+h+"#"+k.ONE_OR_MORE_START+")");break;case s.db.Cardinality.ONLY_ONE:l.attr("marker-start","url("+h+"#"+k.ONLY_ONE_START+")");break;case s.db.Cardinality.MD_PARENT:l.attr("marker-start","url("+h+"#"+k.MD_PARENT_START+")")}const d=l.node().getTotalLength(),y=l.node().getPointAtLength(.5*d),u="rel"+w,p=t.append("text").classed("er relationshipLabel",!0).attr("id",u).attr("x",y.x).attr("y",y.y).style("text-anchor","middle").style("dominant-baseline","middle").style("font-family",(0,i.c)().fontFamily).style("font-size",T.fontSize+"px").text(e.roleA).node().getBBox();t.insert("rect","#"+u).classed("er relationshipLabelBox",!0).attr("x",y.x-p.width/2).attr("y",y.y-p.height/2).attr("width",p.width).attr("height",p.height)}(h,t,d,y,o)}));const f=T.diagramPadding;i.u.insertTitle(h,"entityTitleText",T.titleTopMargin,o.db.getDiagramTitle());const m=h.node().getBBox(),E=m.width+2*f,g=m.height+2*f;(0,i.i)(h,g,E,T.useMaxWidth),h.attr("viewBox",`${m.x-f} ${m.y-f} ${E} ${g}`)}},styles:t=>`\n .entityBox {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n }\n\n .attributeBoxOdd {\n fill: ${t.attributeBackgroundColorOdd};\n stroke: ${t.nodeBorder};\n }\n\n .attributeBoxEven {\n fill: ${t.attributeBackgroundColorEven};\n stroke: ${t.nodeBorder};\n }\n\n .relationshipLabelBox {\n fill: ${t.tertiaryColor};\n opacity: 0.7;\n background-color: ${t.tertiaryColor};\n rect {\n opacity: 0.5;\n }\n }\n\n .relationshipLine {\n stroke: ${t.lineColor};\n }\n\n .entityTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n } \n #MD_PARENT_START {\n fill: #f5f5f5 !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n }\n #MD_PARENT_END {\n fill: #f5f5f5 !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n }\n \n`}}}]); \ No newline at end of file diff --git a/assets/js/147b5d1b.11846856.js b/assets/js/147b5d1b.11846856.js new file mode 100644 index 0000000000..4717606465 --- /dev/null +++ b/assets/js/147b5d1b.11846856.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6101],{8923:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>R,frontMatter:()=>a,metadata:()=>i,toc:()=>E});var r=n(74848),t=n(28453);const a={},o="STAGES",i={id:"about/references/STAGES",title:"STAGES",description:"MODELS /",source:"@site/docs/about/references/STAGES.md",sourceDirName:"about/references",slug:"/about/references/STAGES",permalink:"/ecalc/docs/about/references/STAGES",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/STAGES.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"REGULARITY",permalink:"/ecalc/docs/about/references/REGULARITY"},next:{title:"START",permalink:"/ecalc/docs/about/references/START"}},c={},E=[{value:"Description",id:"description",level:2},{value:"General usage",id:"general-usage",level:2},{value:"Use in VARIABLE_SPEED_COMPRESSOR_TRAIN",id:"use-in-variable_speed_compressor_train",level:2},{value:"Format",id:"format",level:2},{value:"Use in VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES",id:"use-in-variable_speed_compressor_train_multiple_streams_and_pressures",level:2},{value:"Format",id:"format-1",level:3},{value:"Example",id:"example",level:3}];function l(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"stages",children:"STAGES"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/MODELS",children:"MODELS"})," /\n[...] /\n",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/STAGES",children:"STAGES"})]}),"\n",(0,r.jsx)(s.h2,{id:"description",children:"Description"}),"\n",(0,r.jsx)(s.p,{children:"This keyword is used to define each stage in a compression train model. This is to be defined for all compressor\nmodels types."}),"\n",(0,r.jsx)(s.h2,{id:"general-usage",children:"General usage"}),"\n",(0,r.jsxs)(s.p,{children:["It is required to define the ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/INLET_TEMPERATURE",children:"INLET_TEMPERATURE"})," and a\n",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/COMPRESSOR_CHART",children:"COMPRESSOR_CHART"})," for all compressor stages. It is also possible to\ndefine a ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/PRESSURE_DROP_AHEAD_OF_STAGE",children:"PRESSURE_DROP_AHEAD_OF_STAGE"})," for each compressor\nstage."]}),"\n",(0,r.jsxs)(s.h2,{id:"use-in-variable_speed_compressor_train",children:["Use in ",(0,r.jsx)(s.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN"})]}),"\n",(0,r.jsxs)(s.p,{children:["For variable speed compressor stages it is also possible to define a\n",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/CONTROL_MARGIN",children:"CONTROL_MARGIN"})," and a\n",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/CONTROL_MARGIN_UNIT",children:"CONTROL_MARGIN_UNIT"})]}),"\n",(0,r.jsxs)(s.p,{children:["A compressor stage in a ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"}),"\ncan also have one or more fluid streams attached to it using the ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/STREAM",children:"STREAM"})," keyword,\nor have an intermediate pressure target attached to itself using the ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/INTERSTAGE_CONTROL_PRESSURE",children:"INTERSTAGE_CONTROL_PRESSURE"})," keyword."]}),"\n",(0,r.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: \n ...\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: \n COMPRESSOR_CHART: \n PRESSURE_DROP_AHEAD_OF_STAGE: \n ....\n"})}),"\n",(0,r.jsxs)(s.h2,{id:"use-in-variable_speed_compressor_train_multiple_streams_and_pressures",children:["Use in ",(0,r.jsx)(s.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})]}),"\n",(0,r.jsxs)(s.p,{children:["A compressor stage in a ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"}),"\ncan also have one or more fluid streams attached to it using the ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/STREAM",children:"STREAM"})," keyword,\nor have an intermediate pressure target attached to itself using the ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/INTERSTAGE_CONTROL_PRESSURE",children:"INTERSTAGE_CONTROL_PRESSURE"})," keyword."]}),"\n",(0,r.jsx)(s.admonition,{title:"Warning",type:"warning",children:(0,r.jsx)(s.p,{children:"Note that COMPRESSOR_TRAIN is not used for VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES.\nSTAGES is a list of all the stages in the compressor train. STREAMS is a list of all the fluid streams going in or out\nof the compressor train."})}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"For each stage, a temperature in Celsius must be defined. It is assumed that the gas is cooled down to this temperature ahead of the compression at this stage."}),"\n",(0,r.jsx)(s.li,{children:"A reference to a compressor chart needs to be specified for each stage."}),"\n",(0,r.jsxs)(s.li,{children:["For the first stage, it is required to have ",(0,r.jsx)(s.strong,{children:"at least"})," one stream of INGOING type. In addition, ",(0,r.jsx)(s.code,{children:"INTERSTAGE_CONTROL_PRESSURE"})," cannot be used on the first stage."]}),"\n",(0,r.jsx)(s.li,{children:"Stages 2, ..., N may have a stream defined and it may be in- or outgoing. If an ingoing stream is defined, this stream\nwill be mixed with the outlet stream of the previous stage, obtaining a composition for the mixed fluid based on the\nmolar fractions and rate for each of them. If an outgoing stream is defined, the rate continuing to the next stage, will\nbe subtracted the rate of the outgoing stream."}),"\n"]}),"\n",(0,r.jsx)(s.h3,{id:"format-1",children:"Format"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ....\n STAGES:\n - INLET_TEMPERATURE: \n COMPRESSOR_CHART: \n STREAM: \n CONTROL_MARGIN: \n PRESSURE_DROP_AHEAD_OF_STAGE: \n CONTROL_MARGIN_UNIT: \n - ...\n - INLET_TEMPERATURE: \n COMPRESSOR_CHART: \n STREAM: \n - \n - \n CONTROL_MARGIN: \n CONTROL_MARGIN_UNIT: \n PRESSURE_DROP_AHEAD_OF_STAGE: \n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: \n DOWNSTREAM_PRESSURE_CONTROL: \n - ...\n"})}),"\n",(0,r.jsx)(s.h3,{id:"example",children:"Example"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ....\n STAGES:\n - COMPRESSOR_CHART: 1_stage_chart\n INLET_TEMPERATURE: 20\n STREAM: \n - 1_stage_inlet\n - COMPRESSOR_CHART: 2_stage_chart \n INLET_TEMPERATURE: 30\n - COMPRESSOR_CHART: 3_stage_chart \n INLET_TEMPERATURE: 35\n STREAM: \n - 2_stage_outlet\n - 3_stage_inlet\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #1st and 2nd stage\n DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #3rd and 4th stage\n - COMPRESSOR_CHART: 4_stage_chart \n INLET_TEMPERATURE: 15\n"})})]})}function R(e={}){const{wrapper:s}={...(0,t.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},28453:(e,s,n)=>{n.d(s,{R:()=>o,x:()=>i});var r=n(96540);const t={},a=r.createContext(t);function o(e){const s=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),r.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/14eb3368.450e3902.js b/assets/js/14eb3368.450e3902.js new file mode 100644 index 0000000000..2948463967 --- /dev/null +++ b/assets/js/14eb3368.450e3902.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6969],{71243:(e,t,n)=>{n.d(t,{A:()=>g});n(96540);var s=n(34164),r=n(17559),i=n(81754),a=n(99169),l=n(28774),o=n(21312),c=n(86025),d=n(74848);function u(e){return(0,d.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,d.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}const m={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function h(){const e=(0,c.Ay)("/");return(0,d.jsx)("li",{className:"breadcrumbs__item",children:(0,d.jsx)(l.A,{"aria-label":(0,o.T)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,d.jsx)(u,{className:m.breadcrumbHomeIcon})})})}const b={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function x(e){let{children:t,href:n,isLast:s}=e;const r="breadcrumbs__link";return s?(0,d.jsx)("span",{className:r,itemProp:"name",children:t}):n?(0,d.jsx)(l.A,{className:r,href:n,itemProp:"item",children:(0,d.jsx)("span",{itemProp:"name",children:t})}):(0,d.jsx)("span",{className:r,children:t})}function p(e){let{children:t,active:n,index:r,addMicrodata:i}=e;return(0,d.jsxs)("li",{...i&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,s.A)("breadcrumbs__item",{"breadcrumbs__item--active":n}),children:[t,(0,d.jsx)("meta",{itemProp:"position",content:String(r+1)})]})}function g(){const e=(0,i.OF)(),t=(0,a.Dt)();return e?(0,d.jsx)("nav",{className:(0,s.A)(r.G.docs.docBreadcrumbs,b.breadcrumbsContainer),"aria-label":(0,o.T)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,d.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[t&&(0,d.jsx)(h,{}),e.map(((t,n)=>{const s=n===e.length-1,r="category"===t.type&&t.linkUnlisted?void 0:t.href;return(0,d.jsx)(p,{active:s,index:n,addMicrodata:!!r,children:(0,d.jsx)(x,{href:r,isLast:s,children:t.label})},n)}))]})}):null}},34136:(e,t,n)=>{n.r(t),n.d(t,{default:()=>w});n(96540);var s=n(1003),r=n(81754),i=n(86025),a=n(34164),l=n(28774),o=n(53465),c=n(16654),d=n(21312),u=n(51107);const m={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};var h=n(74848);function b(e){let{href:t,children:n}=e;return(0,h.jsx)(l.A,{href:t,className:(0,a.A)("card padding--lg",m.cardContainer),children:n})}function x(e){let{href:t,icon:n,title:s,description:r}=e;return(0,h.jsxs)(b,{href:t,children:[(0,h.jsxs)(u.A,{as:"h2",className:(0,a.A)("text--truncate",m.cardTitle),title:s,children:[n," ",s]}),r&&(0,h.jsx)("p",{className:(0,a.A)("text--truncate",m.cardDescription),title:r,children:r})]})}function p(e){let{item:t}=e;const n=(0,r.Nr)(t),s=function(){const{selectMessage:e}=(0,o.W)();return t=>e(t,(0,d.T)({message:"1 item|{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t}))}();return n?(0,h.jsx)(x,{href:n,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:t.description??s(t.items.length)}):null}function g(e){let{item:t}=e;const n=(0,c.A)(t.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",s=(0,r.cC)(t.docId??void 0);return(0,h.jsx)(x,{href:t.href,icon:n,title:t.label,description:t.description??s?.description})}function v(e){let{item:t}=e;switch(t.type){case"link":return(0,h.jsx)(g,{item:t});case"category":return(0,h.jsx)(p,{item:t});default:throw new Error(`unknown item type ${JSON.stringify(t)}`)}}function f(e){let{className:t}=e;const n=(0,r.$S)();return(0,h.jsx)(j,{items:n.items,className:t})}function j(e){const{items:t,className:n}=e;if(!t)return(0,h.jsx)(f,{...e});const s=(0,r.d1)(t);return(0,h.jsx)("section",{className:(0,a.A)("row",n),children:s.map(((e,t)=>(0,h.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,h.jsx)(v,{item:e})},t)))})}var A=n(86929),N=n(51878),T=n(4267),L=n(71243);const _={generatedIndexPage:"generatedIndexPage_vN6x",list:"list_eTzJ",title:"title_kItE"};function k(e){let{categoryGeneratedIndex:t}=e;return(0,h.jsx)(s.be,{title:t.title,description:t.description,keywords:t.keywords,image:(0,i.Ay)(t.image)})}function y(e){let{categoryGeneratedIndex:t}=e;const n=(0,r.$S)();return(0,h.jsxs)("div",{className:_.generatedIndexPage,children:[(0,h.jsx)(N.A,{}),(0,h.jsx)(L.A,{}),(0,h.jsx)(T.A,{}),(0,h.jsxs)("header",{children:[(0,h.jsx)(u.A,{as:"h1",className:_.title,children:t.title}),t.description&&(0,h.jsx)("p",{children:t.description})]}),(0,h.jsx)("article",{className:"margin-top--lg",children:(0,h.jsx)(j,{items:n.items,className:_.list})}),(0,h.jsx)("footer",{className:"margin-top--lg",children:(0,h.jsx)(A.A,{previous:t.navigation.previous,next:t.navigation.next})})]})}function w(e){return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(k,{...e}),(0,h.jsx)(y,{...e})]})}},86929:(e,t,n)=>{n.d(t,{A:()=>o});n(96540);var s=n(21312),r=n(34164),i=n(28774),a=n(74848);function l(e){const{permalink:t,title:n,subLabel:s,isNext:l}=e;return(0,a.jsxs)(i.A,{className:(0,r.A)("pagination-nav__link",l?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[s&&(0,a.jsx)("div",{className:"pagination-nav__sublabel",children:s}),(0,a.jsx)("div",{className:"pagination-nav__label",children:n})]})}function o(e){const{previous:t,next:n}=e;return(0,a.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,s.T)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[t&&(0,a.jsx)(l,{...t,subLabel:(0,a.jsx)(s.A,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),n&&(0,a.jsx)(l,{...n,subLabel:(0,a.jsx)(s.A,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}},4267:(e,t,n)=>{n.d(t,{A:()=>o});n(96540);var s=n(34164),r=n(21312),i=n(17559),a=n(32252),l=n(74848);function o(e){let{className:t}=e;const n=(0,a.r)();return n.badge?(0,l.jsx)("span",{className:(0,s.A)(t,i.G.docs.docVersionBadge,"badge badge--secondary"),children:(0,l.jsx)(r.A,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label},children:"Version: {versionLabel}"})}):null}},51878:(e,t,n)=>{n.d(t,{A:()=>p});n(96540);var s=n(34164),r=n(44586),i=n(28774),a=n(21312),l=n(44070),o=n(17559),c=n(55597),d=n(32252),u=n(74848);const m={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,u.jsx)(a.A,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:(0,u.jsx)("b",{children:n.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,u.jsx)(a.A,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:(0,u.jsx)("b",{children:n.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function h(e){const t=m[e.versionMetadata.banner];return(0,u.jsx)(t,{...e})}function b(e){let{versionLabel:t,to:n,onClick:s}=e;return(0,u.jsx)(a.A,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:(0,u.jsx)("b",{children:(0,u.jsx)(i.A,{to:n,onClick:s,children:(0,u.jsx)(a.A,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function x(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:i}}=(0,r.A)(),{pluginId:a}=(0,l.vT)({failfast:!0}),{savePreferredVersionName:d}=(0,c.g1)(a),{latestDocSuggestion:m,latestVersionSuggestion:x}=(0,l.HW)(a),p=m??(g=x).docs.find((e=>e.id===g.mainDocId));var g;return(0,u.jsxs)("div",{className:(0,s.A)(t,o.G.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,u.jsx)("div",{children:(0,u.jsx)(h,{siteTitle:i,versionMetadata:n})}),(0,u.jsx)("div",{className:"margin-top--md",children:(0,u.jsx)(b,{versionLabel:x.label,to:p.path,onClick:()=>d(x.name)})})]})}function p(e){let{className:t}=e;const n=(0,d.r)();return n.banner?(0,u.jsx)(x,{className:t,versionMetadata:n}):null}},53465:(e,t,n)=>{n.d(t,{W:()=>c});var s=n(96540),r=n(44586);const i=["zero","one","two","few","many","other"];function a(e){return i.filter((t=>e.includes(t)))}const l={locale:"en",pluralForms:a(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,r.A)();return(0,s.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:a(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),l}}),[e])}function c(){const e=o();return{selectMessage:(t,n)=>function(e,t,n){const s=e.split("|");if(1===s.length)return s[0];s.length>n.pluralForms.length&&console.error(`For locale=${n.locale}, a maximum of ${n.pluralForms.length} plural forms are expected (${n.pluralForms.join(",")}), but the message contains ${s.length}: ${e}`);const r=n.select(t),i=n.pluralForms.indexOf(r);return s[Math.min(i,s.length-1)]}(n,t,e)}}}}]); \ No newline at end of file diff --git a/assets/js/151edf84.14cd53fe.js b/assets/js/151edf84.14cd53fe.js new file mode 100644 index 0000000000..6a585ea2c0 --- /dev/null +++ b/assets/js/151edf84.14cd53fe.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3829],{63370:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>c,default:()=>m,frontMatter:()=>t,metadata:()=>s,toc:()=>r});var l=i(74848),a=i(28453);const t={},c="!include",s={id:"about/references/include",title:"!include",description:"Description",source:"@site/docs/about/references/include.md",sourceDirName:"about/references",slug:"/about/references/include",permalink:"/ecalc/docs/about/references/include",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/include.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CLI",permalink:"/ecalc/docs/about/references/cli_reference"},next:{title:"Migrating eCalc versions",permalink:"/ecalc/docs/about/migration_guides/"}},o={},r=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example 1 - include map/object into list item",id:"example-1---include-mapobject-into-list-item",level:2},{value:"Example 2 - include map/object into object value",id:"example-2---include-mapobject-into-object-value",level:2},{value:"Example 3 - include list into object value",id:"example-3---include-list-into-object-value",level:2}];function d(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,a.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(n.h1,{id:"include",children:"!include"}),"\n",(0,l.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,l.jsxs)(n.p,{children:["You can use ",(0,l.jsx)(n.code,{children:"!include"})," to separate your model into several files. ",(0,l.jsx)(n.code,{children:"!include"}),"\ncan be used as value in a ",(0,l.jsx)(n.code,{children:"KEY: VALUE"})," mapping, or as a value in a list."]}),"\n",(0,l.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",children:"!include \n"})}),"\n",(0,l.jsxs)(n.admonition,{type:"tip",children:[(0,l.jsxs)(n.p,{children:["You can use ",(0,l.jsx)(n.code,{children:"ecalc show yaml "})," to see the read yaml with ",(0,l.jsx)(n.code,{children:"!include"})," processed."]}),(0,l.jsx)(n.p,{children:"New in v7.2."})]}),"\n",(0,l.jsx)(n.h2,{id:"example-1---include-mapobject-into-list-item",children:"Example 1 - include map/object into list item"}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.code,{children:"!include"})," can be used to insert a map/object as a single list element"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="main.yaml" {2}',children:" INSTALLATIONS:\n - !include installationA.yaml\n - NAME: installationB\n ...\n"})}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="installationA.yaml"',children:" NAME: installationA\n ...\n\n"})}),"\n",(0,l.jsx)(n.p,{children:"This is the same as"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="main.yaml" {2,3}',children:" INSTALLATIONS:\n - NAME: installationA\n ...\n - NAME: installationB\n ...\n\n"})}),"\n",(0,l.jsx)(n.h2,{id:"example-2---include-mapobject-into-object-value",children:"Example 2 - include map/object into object value"}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.code,{children:"!include"})," can be used to insert a map/object as a value in a ",(0,l.jsx)(n.code,{children:"KEY: VALUE"})," mapping"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="main.yaml" {5}',children:" INSTALLATIONS:\n - NAME: installationA\n FUELCONSUMERS:\n - NAME: consumerB\n ENERGY_USAGE_MODEL: !include consumerB.yaml\n"})}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="consumerB.yaml"',children:" TYPE: COMPRESSOR\n ...\n\n"})}),"\n",(0,l.jsx)(n.p,{children:"This is the same as"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="main.yaml" {6,7}',children:" INSTALLATIONS:\n - NAME: installationA\n FUELCONSUMERS:\n - NAME: consumerB\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ...\n\n"})}),"\n",(0,l.jsx)(n.h2,{id:"example-3---include-list-into-object-value",children:"Example 3 - include list into object value"}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.code,{children:"!include"})," can be used to insert a list as a value in a ",(0,l.jsx)(n.code,{children:"KEY: VALUE"})," mapping"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="main.yaml" {1}',children:"INSTALLATIONS: !include installations.yaml\n\n"})}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="installations.yaml"',children:" - NAME: installationA\n ...\n - NAME: installationB\n ...\n\n"})}),"\n",(0,l.jsx)(n.p,{children:"This is the same as"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="main.yaml" {2-5}',children:" INSTALLATIONS:\n - NAME: installationA\n ...\n - NAME: installationB\n ...\n"})})]})}function m(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,l.jsx)(n,{...e,children:(0,l.jsx)(d,{...e})}):d(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>c,x:()=>s});var l=i(96540);const a={},t=l.createContext(a);function c(e){const n=l.useContext(t);return l.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:c(e.components),l.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/155359f6.f5f625c3.js b/assets/js/155359f6.f5f625c3.js new file mode 100644 index 0000000000..abd1d8895f --- /dev/null +++ b/assets/js/155359f6.f5f625c3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3283],{78317:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>E,frontMatter:()=>t,metadata:()=>i,toc:()=>l});var r=s(74848),c=s(28453);const t={},o="EFFICIENCY",i={id:"about/references/EFFICIENCY",title:"EFFICIENCY",description:"Description",source:"@site/docs/about/references/EFFICIENCY.md",sourceDirName:"about/references",slug:"/about/references/EFFICIENCY",permalink:"/ecalc/docs/about/references/EFFICIENCY",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/EFFICIENCY.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"DOWNSTREAM_PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/DOWNSTREAM_PRESSURE_CONTROL"},next:{title:"ELECTRICITY2FUEL",permalink:"/ecalc/docs/about/references/ELECTRICITY2FUEL"}},a={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"COMPRESSORS",id:"compressors",level:3},{value:"PUMPS",id:"pumps",level:3},{value:"Example",id:"example",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,c.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"efficiency",children:"EFFICIENCY"}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"EFFICIENCY"})," is a keyword that is used defining ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",children:"PUMP"})," and ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",children:"COMPRESSOR CHARTS"}),".\nEfficiency can either be given as a fraction or percentage."]}),"\n",(0,r.jsxs)(n.p,{children:["For compressors, it is used in two separate ways under the ",(0,r.jsx)(n.code,{children:"MODELS"})," or section:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Defining the ",(0,r.jsx)(n.code,{children:"UNITS"})," of ",(0,r.jsx)(n.code,{children:"EFFICIENCY"})]}),"\n",(0,r.jsxs)(n.li,{children:["Defining the set of values for ",(0,r.jsx)(n.code,{children:"EFFICIENCY"})," under ",(0,r.jsx)(n.code,{children:"CURVES"})," section. Here, this ",(0,r.jsx)(n.strong,{children:"must"})," be given as a set of values whose length (number of variables) match the correlating ",(0,r.jsx)(n.code,{children:"HEAD"})," and ",(0,r.jsx)(n.code,{children:"RATE"})," values."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["For pumps, it is defined under the ",(0,r.jsx)(n.code,{children:"FACILITY_INPUTS"})," section."]}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.h3,{id:"compressors",children:"COMPRESSORS"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: COMPRESSOR_CHART\n CHART_TYPE: \n UNITS:\n ...\n EFFICIENCY: \n CURVES:\n ...\n EFFICIENCY: \n"})}),"\n",(0,r.jsx)(n.h3,{id:"pumps",children:"PUMPS"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: \n FILE: \n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n ...\n EFFICIENCY: \n"})}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: FRACTION\n CURVES:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n"})})]})}function E(e={}){const{wrapper:n}={...(0,c.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>i});var r=s(96540);const c={},t=r.createContext(c);function o(e){const n=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:o(e.components),r.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/16059610.c4c04ce2.js b/assets/js/16059610.c4c04ce2.js new file mode 100644 index 0000000000..fa3a0f9f14 --- /dev/null +++ b/assets/js/16059610.c4c04ce2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3893],{55615:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>E,frontMatter:()=>s,metadata:()=>i,toc:()=>d});var r=t(74848),o=t(28453);const s={},c="TURBINE_MODEL",i={id:"about/references/TURBINE_MODEL",title:"TURBINE_MODEL",description:"Description",source:"@site/docs/about/references/TURBINE_MODEL.md",sourceDirName:"about/references",slug:"/about/references/TURBINE_MODEL",permalink:"/ecalc/docs/about/references/TURBINE_MODEL",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/TURBINE_MODEL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"TURBINE_LOADS",permalink:"/ecalc/docs/about/references/TURBINE_LOADS"},next:{title:"TYPE",permalink:"/ecalc/docs/about/references/TYPE"}},a={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"turbine_model",children:"TURBINE_MODEL"}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(n.p,{children:["When using a ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/turbine_modeling",children:"TURBINE"})," it is required for a ",(0,r.jsx)(n.code,{children:"TURBINE_MODEL"})," to be specified. This is done under the ",(0,r.jsx)(n.code,{children:"MODELS"})," section."]}),"\n",(0,r.jsxs)(n.p,{children:["A turbine model describes a gas-fired turbine that is coupled to a compressor or compression train. It is specified in a similar way to a ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/GENERATORSETS",children:"GENERATORSET"}),". ",(0,r.jsx)(n.code,{children:"TURBINE_LOAD"}),", ",(0,r.jsx)(n.code,{children:"TURBINE_EFFICIENCY"})," and ",(0,r.jsx)(n.code,{children:"LOWER_HEATING_VALUE"})," needs to be inputted here."]}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: TURBINE\n LOWER_HEATING_VALUE: \n TURBINE_LOADS: \n TURBINE_EFFICIENCIES: \n POWER_ADJUSTMENT_CONSTANT: \n"})}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_train_turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # MJ/Sm3\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]\n POWER_ADJUSTMENT_CONSTANT: 10\n"})})]})}function E(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>i});var r=t(96540);const o={},s=r.createContext(o);function c(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/162.ff070cda.js b/assets/js/162.ff070cda.js new file mode 100644 index 0000000000..ea5610d42f --- /dev/null +++ b/assets/js/162.ff070cda.js @@ -0,0 +1,20438 @@ +"use strict"; +exports.id = 162; +exports.ids = [162]; +exports.modules = { + +/***/ 73046: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + T: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(48585); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(39142); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(89610); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(27422); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(11662); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(66401); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(8058); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(69592); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(13588); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(24326); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(62062); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(25707); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.A)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(64099); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(39857); +;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(29959); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.A && (1 / (0,_setToArray/* default */.A)(new _Set/* default */.A([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.A(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.A)(set); + } + isCommon = false; + includes = _cacheHas/* default */.A; + seen = new _SetCache/* default */.A; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(53533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.A)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.A)(arrays, 1, isArrayLikeObject/* default */.A, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(38207); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(89463); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.A(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.A(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.A(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.A(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.A(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.A(newDefault)) { + newDefault = constant/* default */.A(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.A(this._nodes); + } + sources() { + var self = this; + return filter/* default */.A(this.nodes(), function (v) { + return isEmpty/* default */.A(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.A(this.nodes(), function (v) { + return isEmpty/* default */.A(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.A(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.A(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.A(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.A(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.A(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.A(keys/* default */.A(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.A(keys/* default */.A(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.A(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.A(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.A(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.A(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.A(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.A(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.A(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.A(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.A(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.A(newDefault)) { + newDefault = constant/* default */.A(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.A(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.A(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.A(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.A(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.A(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.A(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.A(inV); + if (!u) { + return edges; + } + return filter/* default */.A(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.A(outV); + if (!w) { + return edges; + } + return filter/* default */.A(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.A(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 697: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ T: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.T) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73046); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 75937: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _utils_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72453); +/* harmony import */ var _color_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74886); +/* IMPORT */ + + +/* MAIN */ +const channel = (color, channel) => { + return _utils_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.lang.round(_color_index_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A.parse(color)[channel]); +}; +/* EXPORT */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (channel); + + +/***/ }), + +/***/ 62062: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(29471); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.A; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 72641: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 2634: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 45572: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 76912: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 91641: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(11754); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(72641); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(52851); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(22031); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(27422); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.A)(source, (0,keys/* default */.A)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(77996); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.A)(source, (0,keysIn/* default */.A)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(80154); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(39759); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(14792); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.A)(source, (0,_getSymbols/* default */.A)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(76912); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(15647); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(13153); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.A : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.A)(result, (0,_getSymbols/* default */.A)(object)); + object = (0,_getPrototype/* default */.A)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.A)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(19042); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(33831); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.A)(object, keysIn/* default */.A, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(9779); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(90565); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.A)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(241); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(1801); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.A)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.A)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(18598); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(99912); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(53098); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.A)(value) && (0,_getTag/* default */.A)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(52789); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(64841); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.A && _nodeUtil/* default */.A.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.A)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(23149); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.A)(value) && (0,_getTag/* default */.A)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.A && _nodeUtil/* default */.A.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.A)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.A)(value)) { + return value; + } + var isArr = (0,isArray/* default */.A)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.A)(value, result); + } + } else { + var tag = (0,_getTag/* default */.A)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.A)(value)) { + return (0,_cloneBuffer/* default */.A)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.A)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.A); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.A) + : (isFlat ? keysIn/* default */.A : keys/* default */.A); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.A)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.A)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 6240: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(79841); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(38446); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.A)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.A); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 25707: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 13588: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(76912); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(241); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(52274); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.A ? _Symbol/* default */.A.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.A)(value) || (0,isArguments/* default */.A)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.A)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 79841: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4574); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27422); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 66318: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30901); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 33831: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76912); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 49574: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(11754); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(62062); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(64099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.A : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.A)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(241); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(43988); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(66984); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(29959); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.A(object), new _Uint8Array/* default */.A(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.A)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.A); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(19042); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.A)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.A)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(9779); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(99912); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(33858); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.A)(object), + othIsArr = (0,isArray/* default */.A)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.A)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.A)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.A)(object)) { + if (!(0,isBuffer/* default */.A)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.A); + return (objIsArr || (0,isTypedArray/* default */.A)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.A); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.A); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(53098); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.A)(value) && !(0,isObjectLike/* default */.A)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.A; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(23149); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.A)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(27422); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.A)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(66318); +;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.A)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(39188); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(86586); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(30901); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.A)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.A)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.A)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(29008); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(70805); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.A)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.A)(path) ? (0,_baseProperty/* default */.A)((0,_toKey/* default */.A)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.A; + } + if (typeof value == 'object') { + return (0,isArray/* default */.A)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 70805: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 64099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 99922: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(29008); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 7819: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(86586); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(46632); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.A)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(28894); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.A)(value)) { + return value; + } + return (0,_isKey/* default */.A)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.A)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 19042: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33831); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(14792); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27422); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 14792: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2634); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13153); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 85054: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(52274); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(92049); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(25353); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5254); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30901); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 86586: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(61882); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 29959: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 30901: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61882); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 50053: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseClone_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(91641); + + +/** Used to compose bitmasks for cloning. */ +var CLONE_SYMBOLS_FLAG = 4; + +/** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ +function clone(value) { + return (0,_baseClone_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value, CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (clone); + + +/***/ }), + +/***/ 11662: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(2634); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(6240); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.A)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(49574); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.A)(collection) ? _arrayFilter/* default */.A : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.A)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 8058: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72641); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6240); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99922); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 48585: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(85054); +;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.A)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 39188: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(85054); +;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.A)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 61882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88496); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(53098); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 69592: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 27422: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(83607); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(69471); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38446); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 89463: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(6240); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(49574); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.A)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.A)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.A); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 13153: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 28894: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(241); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(45572); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(61882); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.A)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.A)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.A)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 38207: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(45572); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.A)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(27422); +;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.A)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 14162: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(99702); +/* harmony import */ var lodash_es_clone_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(50053); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(75937); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(25582); +/* harmony import */ var _edges_066a5561_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(98055); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(697); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(26312); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(74353); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(16750); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99418); +var _a, _b; + + + + + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 7], $V1 = [1, 13], $V2 = [1, 14], $V3 = [1, 15], $V4 = [1, 19], $V5 = [1, 16], $V6 = [1, 17], $V7 = [1, 18], $V8 = [8, 30], $V9 = [8, 21, 28, 29, 30, 31, 32, 40, 44, 47], $Va = [1, 23], $Vb = [1, 24], $Vc = [8, 15, 16, 21, 28, 29, 30, 31, 32, 40, 44, 47], $Vd = [8, 15, 16, 21, 27, 28, 29, 30, 31, 32, 40, 44, 47], $Ve = [1, 49]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "spaceLines": 3, "SPACELINE": 4, "NL": 5, "separator": 6, "SPACE": 7, "EOF": 8, "start": 9, "BLOCK_DIAGRAM_KEY": 10, "document": 11, "stop": 12, "statement": 13, "link": 14, "LINK": 15, "START_LINK": 16, "LINK_LABEL": 17, "STR": 18, "nodeStatement": 19, "columnsStatement": 20, "SPACE_BLOCK": 21, "blockStatement": 22, "classDefStatement": 23, "cssClassStatement": 24, "styleStatement": 25, "node": 26, "SIZE": 27, "COLUMNS": 28, "id-block": 29, "end": 30, "block": 31, "NODE_ID": 32, "nodeShapeNLabel": 33, "dirList": 34, "DIR": 35, "NODE_DSTART": 36, "NODE_DEND": 37, "BLOCK_ARROW_START": 38, "BLOCK_ARROW_END": 39, "classDef": 40, "CLASSDEF_ID": 41, "CLASSDEF_STYLEOPTS": 42, "DEFAULT": 43, "class": 44, "CLASSENTITY_IDS": 45, "STYLECLASS": 46, "style": 47, "STYLE_ENTITY_IDS": 48, "STYLE_DEFINITION_DATA": 49, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "SPACELINE", 5: "NL", 7: "SPACE", 8: "EOF", 10: "BLOCK_DIAGRAM_KEY", 15: "LINK", 16: "START_LINK", 17: "LINK_LABEL", 18: "STR", 21: "SPACE_BLOCK", 27: "SIZE", 28: "COLUMNS", 29: "id-block", 30: "end", 31: "block", 32: "NODE_ID", 35: "DIR", 36: "NODE_DSTART", 37: "NODE_DEND", 38: "BLOCK_ARROW_START", 39: "BLOCK_ARROW_END", 40: "classDef", 41: "CLASSDEF_ID", 42: "CLASSDEF_STYLEOPTS", 43: "DEFAULT", 44: "class", 45: "CLASSENTITY_IDS", 46: "STYLECLASS", 47: "style", 48: "STYLE_ENTITY_IDS", 49: "STYLE_DEFINITION_DATA" }, + productions_: [0, [3, 1], [3, 2], [3, 2], [6, 1], [6, 1], [6, 1], [9, 3], [12, 1], [12, 1], [12, 2], [12, 2], [11, 1], [11, 2], [14, 1], [14, 4], [13, 1], [13, 1], [13, 1], [13, 1], [13, 1], [13, 1], [13, 1], [19, 3], [19, 2], [19, 1], [20, 1], [22, 4], [22, 3], [26, 1], [26, 2], [34, 1], [34, 2], [33, 3], [33, 4], [23, 3], [23, 3], [24, 3], [25, 3]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 4: + yy.getLogger().debug("Rule: separator (NL) "); + break; + case 5: + yy.getLogger().debug("Rule: separator (Space) "); + break; + case 6: + yy.getLogger().debug("Rule: separator (EOF) "); + break; + case 7: + yy.getLogger().debug("Rule: hierarchy: ", $$[$0 - 1]); + yy.setHierarchy($$[$0 - 1]); + break; + case 8: + yy.getLogger().debug("Stop NL "); + break; + case 9: + yy.getLogger().debug("Stop EOF "); + break; + case 10: + yy.getLogger().debug("Stop NL2 "); + break; + case 11: + yy.getLogger().debug("Stop EOF2 "); + break; + case 12: + yy.getLogger().debug("Rule: statement: ", $$[$0]); + typeof $$[$0].length === "number" ? this.$ = $$[$0] : this.$ = [$$[$0]]; + break; + case 13: + yy.getLogger().debug("Rule: statement #2: ", $$[$0 - 1]); + this.$ = [$$[$0 - 1]].concat($$[$0]); + break; + case 14: + yy.getLogger().debug("Rule: link: ", $$[$0], yytext); + this.$ = { edgeTypeStr: $$[$0], label: "" }; + break; + case 15: + yy.getLogger().debug("Rule: LABEL link: ", $$[$0 - 3], $$[$0 - 1], $$[$0]); + this.$ = { edgeTypeStr: $$[$0], label: $$[$0 - 1] }; + break; + case 18: + const num = parseInt($$[$0]); + const spaceId = yy.generateId(); + this.$ = { id: spaceId, type: "space", label: "", width: num, children: [] }; + break; + case 23: + yy.getLogger().debug("Rule: (nodeStatement link node) ", $$[$0 - 2], $$[$0 - 1], $$[$0], " typestr: ", $$[$0 - 1].edgeTypeStr); + const edgeData = yy.edgeStrToEdgeData($$[$0 - 1].edgeTypeStr); + this.$ = [ + { id: $$[$0 - 2].id, label: $$[$0 - 2].label, type: $$[$0 - 2].type, directions: $$[$0 - 2].directions }, + { id: $$[$0 - 2].id + "-" + $$[$0].id, start: $$[$0 - 2].id, end: $$[$0].id, label: $$[$0 - 1].label, type: "edge", directions: $$[$0].directions, arrowTypeEnd: edgeData, arrowTypeStart: "arrow_open" }, + { id: $$[$0].id, label: $$[$0].label, type: yy.typeStr2Type($$[$0].typeStr), directions: $$[$0].directions } + ]; + break; + case 24: + yy.getLogger().debug("Rule: nodeStatement (abc88 node size) ", $$[$0 - 1], $$[$0]); + this.$ = { id: $$[$0 - 1].id, label: $$[$0 - 1].label, type: yy.typeStr2Type($$[$0 - 1].typeStr), directions: $$[$0 - 1].directions, widthInColumns: parseInt($$[$0], 10) }; + break; + case 25: + yy.getLogger().debug("Rule: nodeStatement (node) ", $$[$0]); + this.$ = { id: $$[$0].id, label: $$[$0].label, type: yy.typeStr2Type($$[$0].typeStr), directions: $$[$0].directions, widthInColumns: 1 }; + break; + case 26: + yy.getLogger().debug("APA123", this ? this : "na"); + yy.getLogger().debug("COLUMNS: ", $$[$0]); + this.$ = { type: "column-setting", columns: $$[$0] === "auto" ? -1 : parseInt($$[$0]) }; + break; + case 27: + yy.getLogger().debug("Rule: id-block statement : ", $$[$0 - 2], $$[$0 - 1]); + yy.generateId(); + this.$ = { ...$$[$0 - 2], type: "composite", children: $$[$0 - 1] }; + break; + case 28: + yy.getLogger().debug("Rule: blockStatement : ", $$[$0 - 2], $$[$0 - 1], $$[$0]); + const id = yy.generateId(); + this.$ = { id, type: "composite", label: "", children: $$[$0 - 1] }; + break; + case 29: + yy.getLogger().debug("Rule: node (NODE_ID separator): ", $$[$0]); + this.$ = { id: $$[$0] }; + break; + case 30: + yy.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ", $$[$0 - 1], $$[$0]); + this.$ = { id: $$[$0 - 1], label: $$[$0].label, typeStr: $$[$0].typeStr, directions: $$[$0].directions }; + break; + case 31: + yy.getLogger().debug("Rule: dirList: ", $$[$0]); + this.$ = [$$[$0]]; + break; + case 32: + yy.getLogger().debug("Rule: dirList: ", $$[$0 - 1], $$[$0]); + this.$ = [$$[$0 - 1]].concat($$[$0]); + break; + case 33: + yy.getLogger().debug("Rule: nodeShapeNLabel: ", $$[$0 - 2], $$[$0 - 1], $$[$0]); + this.$ = { typeStr: $$[$0 - 2] + $$[$0], label: $$[$0 - 1] }; + break; + case 34: + yy.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ", $$[$0 - 3], $$[$0 - 2], " #3:", $$[$0 - 1], $$[$0]); + this.$ = { typeStr: $$[$0 - 3] + $$[$0], label: $$[$0 - 2], directions: $$[$0 - 1] }; + break; + case 35: + case 36: + this.$ = { type: "classDef", id: $$[$0 - 1].trim(), css: $$[$0].trim() }; + break; + case 37: + this.$ = { type: "applyClass", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() }; + break; + case 38: + this.$ = { type: "applyStyles", id: $$[$0 - 1].trim(), stylesStr: $$[$0].trim() }; + break; + } + }, + table: [{ 9: 1, 10: [1, 2] }, { 1: [3] }, { 11: 3, 13: 4, 19: 5, 20: 6, 21: $V0, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V1, 29: $V2, 31: $V3, 32: $V4, 40: $V5, 44: $V6, 47: $V7 }, { 8: [1, 20] }, o($V8, [2, 12], { 13: 4, 19: 5, 20: 6, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 11: 21, 21: $V0, 28: $V1, 29: $V2, 31: $V3, 32: $V4, 40: $V5, 44: $V6, 47: $V7 }), o($V9, [2, 16], { 14: 22, 15: $Va, 16: $Vb }), o($V9, [2, 17]), o($V9, [2, 18]), o($V9, [2, 19]), o($V9, [2, 20]), o($V9, [2, 21]), o($V9, [2, 22]), o($Vc, [2, 25], { 27: [1, 25] }), o($V9, [2, 26]), { 19: 26, 26: 12, 32: $V4 }, { 11: 27, 13: 4, 19: 5, 20: 6, 21: $V0, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V1, 29: $V2, 31: $V3, 32: $V4, 40: $V5, 44: $V6, 47: $V7 }, { 41: [1, 28], 43: [1, 29] }, { 45: [1, 30] }, { 48: [1, 31] }, o($Vd, [2, 29], { 33: 32, 36: [1, 33], 38: [1, 34] }), { 1: [2, 7] }, o($V8, [2, 13]), { 26: 35, 32: $V4 }, { 32: [2, 14] }, { 17: [1, 36] }, o($Vc, [2, 24]), { 11: 37, 13: 4, 14: 22, 15: $Va, 16: $Vb, 19: 5, 20: 6, 21: $V0, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V1, 29: $V2, 31: $V3, 32: $V4, 40: $V5, 44: $V6, 47: $V7 }, { 30: [1, 38] }, { 42: [1, 39] }, { 42: [1, 40] }, { 46: [1, 41] }, { 49: [1, 42] }, o($Vd, [2, 30]), { 18: [1, 43] }, { 18: [1, 44] }, o($Vc, [2, 23]), { 18: [1, 45] }, { 30: [1, 46] }, o($V9, [2, 28]), o($V9, [2, 35]), o($V9, [2, 36]), o($V9, [2, 37]), o($V9, [2, 38]), { 37: [1, 47] }, { 34: 48, 35: $Ve }, { 15: [1, 50] }, o($V9, [2, 27]), o($Vd, [2, 33]), { 39: [1, 51] }, { 34: 52, 35: $Ve, 39: [2, 31] }, { 32: [2, 15] }, o($Vd, [2, 34]), { 39: [2, 32] }], + defaultActions: { 20: [2, 7], 23: [2, 14], 50: [2, 15], 52: [2, 32] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: {}, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + return 10; + case 1: + yy.getLogger().debug("Found space-block"); + return 31; + case 2: + yy.getLogger().debug("Found nl-block"); + return 31; + case 3: + yy.getLogger().debug("Found space-block"); + return 29; + case 4: + yy.getLogger().debug(".", yy_.yytext); + break; + case 5: + yy.getLogger().debug("_", yy_.yytext); + break; + case 6: + return 5; + case 7: + yy_.yytext = -1; + return 28; + case 8: + yy_.yytext = yy_.yytext.replace(/columns\s+/, ""); + yy.getLogger().debug("COLUMNS (LEX)", yy_.yytext); + return 28; + case 9: + this.pushState("md_string"); + break; + case 10: + return "MD_STR"; + case 11: + this.popState(); + break; + case 12: + this.pushState("string"); + break; + case 13: + yy.getLogger().debug("LEX: POPPING STR:", yy_.yytext); + this.popState(); + break; + case 14: + yy.getLogger().debug("LEX: STR end:", yy_.yytext); + return "STR"; + case 15: + yy_.yytext = yy_.yytext.replace(/space\:/, ""); + yy.getLogger().debug("SPACE NUM (LEX)", yy_.yytext); + return 21; + case 16: + yy_.yytext = "1"; + yy.getLogger().debug("COLUMNS (LEX)", yy_.yytext); + return 21; + case 17: + return 43; + case 18: + return "LINKSTYLE"; + case 19: + return "INTERPOLATE"; + case 20: + this.pushState("CLASSDEF"); + return 40; + case 21: + this.popState(); + this.pushState("CLASSDEFID"); + return "DEFAULT_CLASSDEF_ID"; + case 22: + this.popState(); + this.pushState("CLASSDEFID"); + return 41; + case 23: + this.popState(); + return 42; + case 24: + this.pushState("CLASS"); + return 44; + case 25: + this.popState(); + this.pushState("CLASS_STYLE"); + return 45; + case 26: + this.popState(); + return 46; + case 27: + this.pushState("STYLE_STMNT"); + return 47; + case 28: + this.popState(); + this.pushState("STYLE_DEFINITION"); + return 48; + case 29: + this.popState(); + return 49; + case 30: + this.pushState("acc_title"); + return "acc_title"; + case 31: + this.popState(); + return "acc_title_value"; + case 32: + this.pushState("acc_descr"); + return "acc_descr"; + case 33: + this.popState(); + return "acc_descr_value"; + case 34: + this.pushState("acc_descr_multiline"); + break; + case 35: + this.popState(); + break; + case 36: + return "acc_descr_multiline_value"; + case 37: + return 30; + case 38: + this.popState(); + yy.getLogger().debug("Lex: (("); + return "NODE_DEND"; + case 39: + this.popState(); + yy.getLogger().debug("Lex: (("); + return "NODE_DEND"; + case 40: + this.popState(); + yy.getLogger().debug("Lex: ))"); + return "NODE_DEND"; + case 41: + this.popState(); + yy.getLogger().debug("Lex: (("); + return "NODE_DEND"; + case 42: + this.popState(); + yy.getLogger().debug("Lex: (("); + return "NODE_DEND"; + case 43: + this.popState(); + yy.getLogger().debug("Lex: (-"); + return "NODE_DEND"; + case 44: + this.popState(); + yy.getLogger().debug("Lex: -)"); + return "NODE_DEND"; + case 45: + this.popState(); + yy.getLogger().debug("Lex: (("); + return "NODE_DEND"; + case 46: + this.popState(); + yy.getLogger().debug("Lex: ]]"); + return "NODE_DEND"; + case 47: + this.popState(); + yy.getLogger().debug("Lex: ("); + return "NODE_DEND"; + case 48: + this.popState(); + yy.getLogger().debug("Lex: ])"); + return "NODE_DEND"; + case 49: + this.popState(); + yy.getLogger().debug("Lex: /]"); + return "NODE_DEND"; + case 50: + this.popState(); + yy.getLogger().debug("Lex: /]"); + return "NODE_DEND"; + case 51: + this.popState(); + yy.getLogger().debug("Lex: )]"); + return "NODE_DEND"; + case 52: + this.popState(); + yy.getLogger().debug("Lex: )"); + return "NODE_DEND"; + case 53: + this.popState(); + yy.getLogger().debug("Lex: ]>"); + return "NODE_DEND"; + case 54: + this.popState(); + yy.getLogger().debug("Lex: ]"); + return "NODE_DEND"; + case 55: + yy.getLogger().debug("Lexa: -)"); + this.pushState("NODE"); + return 36; + case 56: + yy.getLogger().debug("Lexa: (-"); + this.pushState("NODE"); + return 36; + case 57: + yy.getLogger().debug("Lexa: ))"); + this.pushState("NODE"); + return 36; + case 58: + yy.getLogger().debug("Lexa: )"); + this.pushState("NODE"); + return 36; + case 59: + yy.getLogger().debug("Lex: ((("); + this.pushState("NODE"); + return 36; + case 60: + yy.getLogger().debug("Lexa: )"); + this.pushState("NODE"); + return 36; + case 61: + yy.getLogger().debug("Lexa: )"); + this.pushState("NODE"); + return 36; + case 62: + yy.getLogger().debug("Lexa: )"); + this.pushState("NODE"); + return 36; + case 63: + yy.getLogger().debug("Lexc: >"); + this.pushState("NODE"); + return 36; + case 64: + yy.getLogger().debug("Lexa: (["); + this.pushState("NODE"); + return 36; + case 65: + yy.getLogger().debug("Lexa: )"); + this.pushState("NODE"); + return 36; + case 66: + this.pushState("NODE"); + return 36; + case 67: + this.pushState("NODE"); + return 36; + case 68: + this.pushState("NODE"); + return 36; + case 69: + this.pushState("NODE"); + return 36; + case 70: + this.pushState("NODE"); + return 36; + case 71: + this.pushState("NODE"); + return 36; + case 72: + this.pushState("NODE"); + return 36; + case 73: + yy.getLogger().debug("Lexa: ["); + this.pushState("NODE"); + return 36; + case 74: + this.pushState("BLOCK_ARROW"); + yy.getLogger().debug("LEX ARR START"); + return 38; + case 75: + yy.getLogger().debug("Lex: NODE_ID", yy_.yytext); + return 32; + case 76: + yy.getLogger().debug("Lex: EOF", yy_.yytext); + return 8; + case 77: + this.pushState("md_string"); + break; + case 78: + this.pushState("md_string"); + break; + case 79: + return "NODE_DESCR"; + case 80: + this.popState(); + break; + case 81: + yy.getLogger().debug("Lex: Starting string"); + this.pushState("string"); + break; + case 82: + yy.getLogger().debug("LEX ARR: Starting string"); + this.pushState("string"); + break; + case 83: + yy.getLogger().debug("LEX: NODE_DESCR:", yy_.yytext); + return "NODE_DESCR"; + case 84: + yy.getLogger().debug("LEX POPPING"); + this.popState(); + break; + case 85: + yy.getLogger().debug("Lex: =>BAE"); + this.pushState("ARROW_DIR"); + break; + case 86: + yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); + yy.getLogger().debug("Lex (right): dir:", yy_.yytext); + return "DIR"; + case 87: + yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); + yy.getLogger().debug("Lex (left):", yy_.yytext); + return "DIR"; + case 88: + yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); + yy.getLogger().debug("Lex (x):", yy_.yytext); + return "DIR"; + case 89: + yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); + yy.getLogger().debug("Lex (y):", yy_.yytext); + return "DIR"; + case 90: + yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); + yy.getLogger().debug("Lex (up):", yy_.yytext); + return "DIR"; + case 91: + yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); + yy.getLogger().debug("Lex (down):", yy_.yytext); + return "DIR"; + case 92: + yy_.yytext = "]>"; + yy.getLogger().debug("Lex (ARROW_DIR end):", yy_.yytext); + this.popState(); + this.popState(); + return "BLOCK_ARROW_END"; + case 93: + yy.getLogger().debug("Lex: LINK", "#" + yy_.yytext + "#"); + return 15; + case 94: + yy.getLogger().debug("Lex: LINK", yy_.yytext); + return 15; + case 95: + yy.getLogger().debug("Lex: LINK", yy_.yytext); + return 15; + case 96: + yy.getLogger().debug("Lex: LINK", yy_.yytext); + return 15; + case 97: + yy.getLogger().debug("Lex: START_LINK", yy_.yytext); + this.pushState("LLABEL"); + return 16; + case 98: + yy.getLogger().debug("Lex: START_LINK", yy_.yytext); + this.pushState("LLABEL"); + return 16; + case 99: + yy.getLogger().debug("Lex: START_LINK", yy_.yytext); + this.pushState("LLABEL"); + return 16; + case 100: + this.pushState("md_string"); + break; + case 101: + yy.getLogger().debug("Lex: Starting string"); + this.pushState("string"); + return "LINK_LABEL"; + case 102: + this.popState(); + yy.getLogger().debug("Lex: LINK", "#" + yy_.yytext + "#"); + return 15; + case 103: + this.popState(); + yy.getLogger().debug("Lex: LINK", yy_.yytext); + return 15; + case 104: + this.popState(); + yy.getLogger().debug("Lex: LINK", yy_.yytext); + return 15; + case 105: + yy.getLogger().debug("Lex: COLON", yy_.yytext); + yy_.yytext = yy_.yytext.slice(1); + return 27; + } + }, + rules: [/^(?:block-beta\b)/, /^(?:block\s+)/, /^(?:block\n+)/, /^(?:block:)/, /^(?:[\s]+)/, /^(?:[\n]+)/, /^(?:((\u000D\u000A)|(\u000A)))/, /^(?:columns\s+auto\b)/, /^(?:columns\s+[\d]+)/, /^(?:["][`])/, /^(?:[^`"]+)/, /^(?:[`]["])/, /^(?:["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:space[:]\d+)/, /^(?:space\b)/, /^(?:default\b)/, /^(?:linkStyle\b)/, /^(?:interpolate\b)/, /^(?:classDef\s+)/, /^(?:DEFAULT\s+)/, /^(?:\w+\s+)/, /^(?:[^\n]*)/, /^(?:class\s+)/, /^(?:(\w+)+((,\s*\w+)*))/, /^(?:[^\n]*)/, /^(?:style\s+)/, /^(?:(\w+)+((,\s*\w+)*))/, /^(?:[^\n]*)/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:end\b\s*)/, /^(?:\(\(\()/, /^(?:\)\)\))/, /^(?:[\)]\))/, /^(?:\}\})/, /^(?:\})/, /^(?:\(-)/, /^(?:-\))/, /^(?:\(\()/, /^(?:\]\])/, /^(?:\()/, /^(?:\]\))/, /^(?:\\\])/, /^(?:\/\])/, /^(?:\)\])/, /^(?:[\)])/, /^(?:\]>)/, /^(?:[\]])/, /^(?:-\))/, /^(?:\(-)/, /^(?:\)\))/, /^(?:\))/, /^(?:\(\(\()/, /^(?:\(\()/, /^(?:\{\{)/, /^(?:\{)/, /^(?:>)/, /^(?:\(\[)/, /^(?:\()/, /^(?:\[\[)/, /^(?:\[\|)/, /^(?:\[\()/, /^(?:\)\)\))/, /^(?:\[\\)/, /^(?:\[\/)/, /^(?:\[\\)/, /^(?:\[)/, /^(?:<\[)/, /^(?:[^\(\[\n\-\)\{\}\s\<\>:]+)/, /^(?:$)/, /^(?:["][`])/, /^(?:["][`])/, /^(?:[^`"]+)/, /^(?:[`]["])/, /^(?:["])/, /^(?:["])/, /^(?:[^"]+)/, /^(?:["])/, /^(?:\]>\s*\()/, /^(?:,?\s*right\s*)/, /^(?:,?\s*left\s*)/, /^(?:,?\s*x\s*)/, /^(?:,?\s*y\s*)/, /^(?:,?\s*up\s*)/, /^(?:,?\s*down\s*)/, /^(?:\)\s*)/, /^(?:\s*[xo<]?--+[-xo>]\s*)/, /^(?:\s*[xo<]?==+[=xo>]\s*)/, /^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/, /^(?:\s*~~[\~]+\s*)/, /^(?:\s*[xo<]?--\s*)/, /^(?:\s*[xo<]?==\s*)/, /^(?:\s*[xo<]?-\.\s*)/, /^(?:["][`])/, /^(?:["])/, /^(?:\s*[xo<]?--+[-xo>]\s*)/, /^(?:\s*[xo<]?==+[=xo>]\s*)/, /^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/, /^(?::\d+)/], + conditions: { "STYLE_DEFINITION": { "rules": [29], "inclusive": false }, "STYLE_STMNT": { "rules": [28], "inclusive": false }, "CLASSDEFID": { "rules": [23], "inclusive": false }, "CLASSDEF": { "rules": [21, 22], "inclusive": false }, "CLASS_STYLE": { "rules": [26], "inclusive": false }, "CLASS": { "rules": [25], "inclusive": false }, "LLABEL": { "rules": [100, 101, 102, 103, 104], "inclusive": false }, "ARROW_DIR": { "rules": [86, 87, 88, 89, 90, 91, 92], "inclusive": false }, "BLOCK_ARROW": { "rules": [77, 82, 85], "inclusive": false }, "NODE": { "rules": [38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 78, 81], "inclusive": false }, "md_string": { "rules": [10, 11, 79, 80], "inclusive": false }, "space": { "rules": [], "inclusive": false }, "string": { "rules": [13, 14, 83, 84], "inclusive": false }, "acc_descr_multiline": { "rules": [35, 36], "inclusive": false }, "acc_descr": { "rules": [33], "inclusive": false }, "acc_title": { "rules": [31], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 15, 16, 17, 18, 19, 20, 24, 27, 30, 32, 34, 37, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 93, 94, 95, 96, 97, 98, 99, 105], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +let blockDatabase = {}; +let edgeList = []; +let edgeCount = {}; +const COLOR_KEYWORD = "color"; +const FILL_KEYWORD = "fill"; +const BG_FILL = "bgFill"; +const STYLECLASS_SEP = ","; +const config = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.c)(); +let classes = {}; +const sanitizeText = (txt) => _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.e.sanitizeText(txt, config); +const addStyleClass = function(id, styleAttributes = "") { + if (classes[id] === void 0) { + classes[id] = { id, styles: [], textStyles: [] }; + } + const foundClass = classes[id]; + if (styleAttributes !== void 0 && styleAttributes !== null) { + styleAttributes.split(STYLECLASS_SEP).forEach((attrib) => { + const fixedAttrib = attrib.replace(/([^;]*);/, "$1").trim(); + if (attrib.match(COLOR_KEYWORD)) { + const newStyle1 = fixedAttrib.replace(FILL_KEYWORD, BG_FILL); + const newStyle2 = newStyle1.replace(COLOR_KEYWORD, FILL_KEYWORD); + foundClass.textStyles.push(newStyle2); + } + foundClass.styles.push(fixedAttrib); + }); + } +}; +const addStyle2Node = function(id, styles = "") { + const foundBlock = blockDatabase[id]; + if (styles !== void 0 && styles !== null) { + foundBlock.styles = styles.split(STYLECLASS_SEP); + } +}; +const setCssClass = function(itemIds, cssClassName) { + itemIds.split(",").forEach(function(id) { + let foundBlock = blockDatabase[id]; + if (foundBlock === void 0) { + const trimmedId = id.trim(); + blockDatabase[trimmedId] = { id: trimmedId, type: "na", children: [] }; + foundBlock = blockDatabase[trimmedId]; + } + if (!foundBlock.classes) { + foundBlock.classes = []; + } + foundBlock.classes.push(cssClassName); + }); +}; +const populateBlockDatabase = (_blockList, parent) => { + const blockList = _blockList.flat(); + const children = []; + for (const block of blockList) { + if (block.label) { + block.label = sanitizeText(block.label); + } + if (block.type === "classDef") { + addStyleClass(block.id, block.css); + continue; + } + if (block.type === "applyClass") { + setCssClass(block.id, (block == null ? void 0 : block.styleClass) || ""); + continue; + } + if (block.type === "applyStyles") { + if (block == null ? void 0 : block.stylesStr) { + addStyle2Node(block.id, block == null ? void 0 : block.stylesStr); + } + continue; + } + if (block.type === "column-setting") { + parent.columns = block.columns || -1; + } else if (block.type === "edge") { + if (edgeCount[block.id]) { + edgeCount[block.id]++; + } else { + edgeCount[block.id] = 1; + } + block.id = edgeCount[block.id] + "-" + block.id; + edgeList.push(block); + } else { + if (!block.label) { + if (block.type === "composite") { + block.label = ""; + } else { + block.label = block.id; + } + } + const newBlock = !blockDatabase[block.id]; + if (newBlock) { + blockDatabase[block.id] = block; + } else { + if (block.type !== "na") { + blockDatabase[block.id].type = block.type; + } + if (block.label !== block.id) { + blockDatabase[block.id].label = block.label; + } + } + if (block.children) { + populateBlockDatabase(block.children, block); + } + if (block.type === "space") { + const w = block.width || 1; + for (let j = 0; j < w; j++) { + const newBlock2 = (0,lodash_es_clone_js__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A)(block); + newBlock2.id = newBlock2.id + "-" + j; + blockDatabase[newBlock2.id] = newBlock2; + children.push(newBlock2); + } + } else if (newBlock) { + children.push(block); + } + } + } + parent.children = children; +}; +let blocks = []; +let rootBlock = { id: "root", type: "composite", children: [], columns: -1 }; +const clear = () => { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("Clear called"); + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.v)(); + rootBlock = { id: "root", type: "composite", children: [], columns: -1 }; + blockDatabase = { root: rootBlock }; + blocks = []; + classes = {}; + edgeList = []; + edgeCount = {}; +}; +function typeStr2Type(typeStr) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("typeStr2Type", typeStr); + switch (typeStr) { + case "[]": + return "square"; + case "()": + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("we have a round"); + return "round"; + case "(())": + return "circle"; + case ">]": + return "rect_left_inv_arrow"; + case "{}": + return "diamond"; + case "{{}}": + return "hexagon"; + case "([])": + return "stadium"; + case "[[]]": + return "subroutine"; + case "[()]": + return "cylinder"; + case "((()))": + return "doublecircle"; + case "[//]": + return "lean_right"; + case "[\\\\]": + return "lean_left"; + case "[/\\]": + return "trapezoid"; + case "[\\/]": + return "inv_trapezoid"; + case "<[]>": + return "block_arrow"; + default: + return "na"; + } +} +function edgeTypeStr2Type(typeStr) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("typeStr2Type", typeStr); + switch (typeStr) { + case "==": + return "thick"; + default: + return "normal"; + } +} +function edgeStrToEdgeData(typeStr) { + switch (typeStr.trim()) { + case "--x": + return "arrow_cross"; + case "--o": + return "arrow_circle"; + default: + return "arrow_point"; + } +} +let cnt = 0; +const generateId = () => { + cnt++; + return "id-" + Math.random().toString(36).substr(2, 12) + "-" + cnt; +}; +const setHierarchy = (block) => { + rootBlock.children = block; + populateBlockDatabase(block, rootBlock); + blocks = rootBlock.children; +}; +const getColumns = (blockId) => { + const block = blockDatabase[blockId]; + if (!block) { + return -1; + } + if (block.columns) { + return block.columns; + } + if (!block.children) { + return -1; + } + return block.children.length; +}; +const getBlocksFlat = () => { + return [...Object.values(blockDatabase)]; +}; +const getBlocks = () => { + return blocks || []; +}; +const getEdges = () => { + return edgeList; +}; +const getBlock = (id) => { + return blockDatabase[id]; +}; +const setBlock = (block) => { + blockDatabase[block.id] = block; +}; +const getLogger = () => console; +const getClasses$1 = function() { + return classes; +}; +const db = { + getConfig: () => (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.F)().block, + typeStr2Type, + edgeTypeStr2Type, + edgeStrToEdgeData, + getLogger, + getBlocksFlat, + getBlocks, + getEdges, + setHierarchy, + getBlock, + setBlock, + getColumns, + getClasses: getClasses$1, + clear, + generateId +}; +const db$1 = db; +const fade = (color, opacity) => { + const channel = khroma__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A; + const r = channel(color, "r"); + const g = channel(color, "g"); + const b = channel(color, "b"); + return khroma__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A(r, g, b, opacity); +}; +const getStyles = (options) => `.label { + font-family: ${options.fontFamily}; + color: ${options.nodeTextColor || options.textColor}; + } + .cluster-label text { + fill: ${options.titleColor}; + } + .cluster-label span,p { + color: ${options.titleColor}; + } + + + + .label text,span,p { + fill: ${options.nodeTextColor || options.textColor}; + color: ${options.nodeTextColor || options.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + stroke-width: 1px; + } + .flowchart-label text { + text-anchor: middle; + } + // .flowchart-label .text-outer-tspan { + // text-anchor: middle; + // } + // .flowchart-label .text-inner-tspan { + // text-anchor: start; + // } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${options.arrowheadColor}; + } + + .edgePath .path { + stroke: ${options.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${options.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${options.edgeLabelBackground}; + rect { + opacity: 0.5; + background-color: ${options.edgeLabelBackground}; + fill: ${options.edgeLabelBackground}; + } + text-align: center; + } + + /* For html labels only */ + .labelBkg { + background-color: ${fade(options.edgeLabelBackground, 0.5)}; + // background-color: + } + + .node .cluster { + // fill: ${fade(options.mainBkg, 0.5)}; + fill: ${fade(options.clusterBkg, 0.5)}; + stroke: ${fade(options.clusterBorder, 0.2)}; + box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; + stroke-width: 1px; + } + + .cluster text { + fill: ${options.titleColor}; + } + + .cluster span,p { + color: ${options.titleColor}; + } + /* .cluster div { + color: ${options.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${options.fontFamily}; + font-size: 12px; + background: ${options.tertiaryColor}; + border: 1px solid ${options.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; + } +`; +const flowStyles = getStyles; +function getNodeFromBlock(block, db2, positioned = false) { + var _a2, _b2, _c; + const vertex = block; + let classStr = "default"; + if ((((_a2 = vertex == null ? void 0 : vertex.classes) == null ? void 0 : _a2.length) || 0) > 0) { + classStr = ((vertex == null ? void 0 : vertex.classes) || []).join(" "); + } + classStr = classStr + " flowchart-label"; + let radius = 0; + let shape = ""; + let padding2; + switch (vertex.type) { + case "round": + radius = 5; + shape = "rect"; + break; + case "composite": + radius = 0; + shape = "composite"; + padding2 = 0; + break; + case "square": + shape = "rect"; + break; + case "diamond": + shape = "question"; + break; + case "hexagon": + shape = "hexagon"; + break; + case "block_arrow": + shape = "block_arrow"; + break; + case "odd": + shape = "rect_left_inv_arrow"; + break; + case "lean_right": + shape = "lean_right"; + break; + case "lean_left": + shape = "lean_left"; + break; + case "trapezoid": + shape = "trapezoid"; + break; + case "inv_trapezoid": + shape = "inv_trapezoid"; + break; + case "rect_left_inv_arrow": + shape = "rect_left_inv_arrow"; + break; + case "circle": + shape = "circle"; + break; + case "ellipse": + shape = "ellipse"; + break; + case "stadium": + shape = "stadium"; + break; + case "subroutine": + shape = "subroutine"; + break; + case "cylinder": + shape = "cylinder"; + break; + case "group": + shape = "rect"; + break; + case "doublecircle": + shape = "doublecircle"; + break; + default: + shape = "rect"; + } + const styles = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.k)((vertex == null ? void 0 : vertex.styles) || []); + const vertexText = vertex.label; + const bounds = vertex.size || { width: 0, height: 0, x: 0, y: 0 }; + const node = { + labelStyle: styles.labelStyle, + shape, + labelText: vertexText, + rx: radius, + ry: radius, + class: classStr, + style: styles.style, + id: vertex.id, + directions: vertex.directions, + width: bounds.width, + height: bounds.height, + x: bounds.x, + y: bounds.y, + positioned, + intersect: void 0, + type: vertex.type, + padding: padding2 ?? (((_c = (_b2 = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.F)()) == null ? void 0 : _b2.block) == null ? void 0 : _c.padding) || 0) + }; + return node; +} +async function calculateBlockSize(elem, block, db2) { + const node = getNodeFromBlock(block, db2, false); + if (node.type === "group") { + return; + } + const nodeEl = await (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_9__.e)(elem, node); + const boundingBox = nodeEl.node().getBBox(); + const obj = db2.getBlock(node.id); + obj.size = { width: boundingBox.width, height: boundingBox.height, x: 0, y: 0, node: nodeEl }; + db2.setBlock(obj); + nodeEl.remove(); +} +async function insertBlockPositioned(elem, block, db2) { + const node = getNodeFromBlock(block, db2, true); + const obj = db2.getBlock(node.id); + if (obj.type !== "space") { + await (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_9__.e)(elem, node); + block.intersect = node == null ? void 0 : node.intersect; + (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_9__.p)(node); + } +} +async function performOperations(elem, blocks2, db2, operation) { + for (const block of blocks2) { + await operation(elem, block, db2); + if (block.children) { + await performOperations(elem, block.children, db2, operation); + } + } +} +async function calculateBlockSizes(elem, blocks2, db2) { + await performOperations(elem, blocks2, db2, calculateBlockSize); +} +async function insertBlocks(elem, blocks2, db2) { + await performOperations(elem, blocks2, db2, insertBlockPositioned); +} +async function insertEdges(elem, edges, blocks2, db2, id) { + const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__/* .Graph */ .T({ + multigraph: true, + compound: true + }); + g.setGraph({ + rankdir: "TB", + nodesep: 10, + ranksep: 10, + marginx: 8, + marginy: 8 + }); + for (const block of blocks2) { + if (block.size) { + g.setNode(block.id, { + width: block.size.width, + height: block.size.height, + intersect: block.intersect + }); + } + } + for (const edge of edges) { + if (edge.start && edge.end) { + const startBlock = db2.getBlock(edge.start); + const endBlock = db2.getBlock(edge.end); + if ((startBlock == null ? void 0 : startBlock.size) && (endBlock == null ? void 0 : endBlock.size)) { + const start = startBlock.size; + const end = endBlock.size; + const points = [ + { x: start.x, y: start.y }, + { x: start.x + (end.x - start.x) / 2, y: start.y + (end.y - start.y) / 2 }, + { x: end.x, y: end.y } + ]; + await (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_9__.h)( + elem, + { v: edge.start, w: edge.end, name: edge.id }, + { + ...edge, + arrowTypeEnd: edge.arrowTypeEnd, + arrowTypeStart: edge.arrowTypeStart, + points, + classes: "edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1" + }, + void 0, + "block", + g, + id + ); + if (edge.label) { + await (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_9__.f)(elem, { + ...edge, + label: edge.label, + labelStyle: "stroke: #333; stroke-width: 1.5px;fill:none;", + arrowTypeEnd: edge.arrowTypeEnd, + arrowTypeStart: edge.arrowTypeStart, + points, + classes: "edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1" + }); + await (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_9__.j)( + { ...edge, x: points[1].x, y: points[1].y }, + { + originalPath: points + } + ); + } + } + } + } +} +const padding = ((_b = (_a = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.c)()) == null ? void 0 : _a.block) == null ? void 0 : _b.padding) || 8; +function calculateBlockPosition(columns, position) { + if (columns === 0 || !Number.isInteger(columns)) { + throw new Error("Columns must be an integer !== 0."); + } + if (position < 0 || !Number.isInteger(position)) { + throw new Error("Position must be a non-negative integer." + position); + } + if (columns < 0) { + return { px: position, py: 0 }; + } + if (columns === 1) { + return { px: 0, py: position }; + } + const px = position % columns; + const py = Math.floor(position / columns); + return { px, py }; +} +const getMaxChildSize = (block) => { + let maxWidth = 0; + let maxHeight = 0; + for (const child of block.children) { + const { width, height, x, y } = child.size || { width: 0, height: 0, x: 0, y: 0 }; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug( + "getMaxChildSize abc95 child:", + child.id, + "width:", + width, + "height:", + height, + "x:", + x, + "y:", + y, + child.type + ); + if (child.type === "space") { + continue; + } + if (width > maxWidth) { + maxWidth = width / (block.widthInColumns || 1); + } + if (height > maxHeight) { + maxHeight = height; + } + } + return { width: maxWidth, height: maxHeight }; +}; +function setBlockSizes(block, db2, siblingWidth = 0, siblingHeight = 0) { + var _a2, _b2, _c, _d, _e, _f, _g, _h, _i, _j, _k; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug( + "setBlockSizes abc95 (start)", + block.id, + (_a2 = block == null ? void 0 : block.size) == null ? void 0 : _a2.x, + "block width =", + block == null ? void 0 : block.size, + "sieblingWidth", + siblingWidth + ); + if (!((_b2 = block == null ? void 0 : block.size) == null ? void 0 : _b2.width)) { + block.size = { + width: siblingWidth, + height: siblingHeight, + x: 0, + y: 0 + }; + } + let maxWidth = 0; + let maxHeight = 0; + if (((_c = block.children) == null ? void 0 : _c.length) > 0) { + for (const child of block.children) { + setBlockSizes(child, db2); + } + const childSize = getMaxChildSize(block); + maxWidth = childSize.width; + maxHeight = childSize.height; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("setBlockSizes abc95 maxWidth of", block.id, ":s children is ", maxWidth, maxHeight); + for (const child of block.children) { + if (child.size) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug( + `abc95 Setting size of children of ${block.id} id=${child.id} ${maxWidth} ${maxHeight} ${child.size}` + ); + child.size.width = maxWidth * (child.widthInColumns || 1) + padding * ((child.widthInColumns || 1) - 1); + child.size.height = maxHeight; + child.size.x = 0; + child.size.y = 0; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug( + `abc95 updating size of ${block.id} children child:${child.id} maxWidth:${maxWidth} maxHeight:${maxHeight}` + ); + } + } + for (const child of block.children) { + setBlockSizes(child, db2, maxWidth, maxHeight); + } + const columns = block.columns || -1; + let numItems = 0; + for (const child of block.children) { + numItems += child.widthInColumns || 1; + } + let xSize = block.children.length; + if (columns > 0 && columns < numItems) { + xSize = columns; + } + block.widthInColumns || 1; + const ySize = Math.ceil(numItems / xSize); + let width = xSize * (maxWidth + padding) + padding; + let height = ySize * (maxHeight + padding) + padding; + if (width < siblingWidth) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug( + `Detected to small siebling: abc95 ${block.id} sieblingWidth ${siblingWidth} sieblingHeight ${siblingHeight} width ${width}` + ); + width = siblingWidth; + height = siblingHeight; + const childWidth = (siblingWidth - xSize * padding - padding) / xSize; + const childHeight = (siblingHeight - ySize * padding - padding) / ySize; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("Size indata abc88", block.id, "childWidth", childWidth, "maxWidth", maxWidth); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("Size indata abc88", block.id, "childHeight", childHeight, "maxHeight", maxHeight); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("Size indata abc88 xSize", xSize, "padding", padding); + for (const child of block.children) { + if (child.size) { + child.size.width = childWidth; + child.size.height = childHeight; + child.size.x = 0; + child.size.y = 0; + } + } + } + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug( + `abc95 (finale calc) ${block.id} xSize ${xSize} ySize ${ySize} columns ${columns}${block.children.length} width=${Math.max(width, ((_d = block.size) == null ? void 0 : _d.width) || 0)}` + ); + if (width < (((_e = block == null ? void 0 : block.size) == null ? void 0 : _e.width) || 0)) { + width = ((_f = block == null ? void 0 : block.size) == null ? void 0 : _f.width) || 0; + const num = columns > 0 ? Math.min(block.children.length, columns) : block.children.length; + if (num > 0) { + const childWidth = (width - num * padding - padding) / num; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("abc95 (growing to fit) width", block.id, width, (_g = block.size) == null ? void 0 : _g.width, childWidth); + for (const child of block.children) { + if (child.size) { + child.size.width = childWidth; + } + } + } + } + block.size = { + width, + height, + x: 0, + y: 0 + }; + } + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug( + "setBlockSizes abc94 (done)", + block.id, + (_h = block == null ? void 0 : block.size) == null ? void 0 : _h.x, + (_i = block == null ? void 0 : block.size) == null ? void 0 : _i.width, + (_j = block == null ? void 0 : block.size) == null ? void 0 : _j.y, + (_k = block == null ? void 0 : block.size) == null ? void 0 : _k.height + ); +} +function layoutBlocks(block, db2) { + var _a2, _b2, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug( + `abc85 layout blocks (=>layoutBlocks) ${block.id} x: ${(_a2 = block == null ? void 0 : block.size) == null ? void 0 : _a2.x} y: ${(_b2 = block == null ? void 0 : block.size) == null ? void 0 : _b2.y} width: ${(_c = block == null ? void 0 : block.size) == null ? void 0 : _c.width}` + ); + const columns = block.columns || -1; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("layoutBlocks columns abc95", block.id, "=>", columns, block); + if (block.children && // find max width of children + block.children.length > 0) { + const width = ((_e = (_d = block == null ? void 0 : block.children[0]) == null ? void 0 : _d.size) == null ? void 0 : _e.width) || 0; + const widthOfChildren = block.children.length * width + (block.children.length - 1) * padding; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("widthOfChildren 88", widthOfChildren, "posX"); + let columnPos = 0; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("abc91 block?.size?.x", block.id, (_f = block == null ? void 0 : block.size) == null ? void 0 : _f.x); + let startingPosX = ((_g = block == null ? void 0 : block.size) == null ? void 0 : _g.x) ? ((_h = block == null ? void 0 : block.size) == null ? void 0 : _h.x) + (-((_i = block == null ? void 0 : block.size) == null ? void 0 : _i.width) / 2 || 0) : -padding; + let rowPos = 0; + for (const child of block.children) { + const parent = block; + if (!child.size) { + continue; + } + const { width: width2, height } = child.size; + const { px, py } = calculateBlockPosition(columns, columnPos); + if (py != rowPos) { + rowPos = py; + startingPosX = ((_j = block == null ? void 0 : block.size) == null ? void 0 : _j.x) ? ((_k = block == null ? void 0 : block.size) == null ? void 0 : _k.x) + (-((_l = block == null ? void 0 : block.size) == null ? void 0 : _l.width) / 2 || 0) : -padding; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("New row in layout for block", block.id, " and child ", child.id, rowPos); + } + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug( + `abc89 layout blocks (child) id: ${child.id} Pos: ${columnPos} (px, py) ${px},${py} (${(_m = parent == null ? void 0 : parent.size) == null ? void 0 : _m.x},${(_n = parent == null ? void 0 : parent.size) == null ? void 0 : _n.y}) parent: ${parent.id} width: ${width2}${padding}` + ); + if (parent.size) { + const halfWidth = width2 / 2; + child.size.x = startingPosX + padding + halfWidth; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug( + `abc91 layout blocks (calc) px, pyid:${child.id} startingPos=X${startingPosX} new startingPosX${child.size.x} ${halfWidth} padding=${padding} width=${width2} halfWidth=${halfWidth} => x:${child.size.x} y:${child.size.y} ${child.widthInColumns} (width * (child?.w || 1)) / 2 ${width2 * ((child == null ? void 0 : child.widthInColumns) || 1) / 2}` + ); + startingPosX = child.size.x + halfWidth; + child.size.y = parent.size.y - parent.size.height / 2 + py * (height + padding) + height / 2 + padding; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug( + `abc88 layout blocks (calc) px, pyid:${child.id}startingPosX${startingPosX}${padding}${halfWidth}=>x:${child.size.x}y:${child.size.y}${child.widthInColumns}(width * (child?.w || 1)) / 2${width2 * ((child == null ? void 0 : child.widthInColumns) || 1) / 2}` + ); + } + if (child.children) { + layoutBlocks(child); + } + columnPos += (child == null ? void 0 : child.widthInColumns) || 1; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("abc88 columnsPos", child, columnPos); + } + } + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug( + `layout blocks (<==layoutBlocks) ${block.id} x: ${(_o = block == null ? void 0 : block.size) == null ? void 0 : _o.x} y: ${(_p = block == null ? void 0 : block.size) == null ? void 0 : _p.y} width: ${(_q = block == null ? void 0 : block.size) == null ? void 0 : _q.width}` + ); +} +function findBounds(block, { minX, minY, maxX, maxY } = { minX: 0, minY: 0, maxX: 0, maxY: 0 }) { + if (block.size && block.id !== "root") { + const { x, y, width, height } = block.size; + if (x - width / 2 < minX) { + minX = x - width / 2; + } + if (y - height / 2 < minY) { + minY = y - height / 2; + } + if (x + width / 2 > maxX) { + maxX = x + width / 2; + } + if (y + height / 2 > maxY) { + maxY = y + height / 2; + } + } + if (block.children) { + for (const child of block.children) { + ({ minX, minY, maxX, maxY } = findBounds(child, { minX, minY, maxX, maxY })); + } + } + return { minX, minY, maxX, maxY }; +} +function layout(db2) { + const root = db2.getBlock("root"); + if (!root) { + return; + } + setBlockSizes(root, db2, 0, 0); + layoutBlocks(root); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("getBlocks", JSON.stringify(root, null, 2)); + const { minX, minY, maxX, maxY } = findBounds(root); + const height = maxY - minY; + const width = maxX - minX; + return { x: minX, y: minY, width, height }; +} +const getClasses = function(text, diagObj) { + return diagObj.db.getClasses(); +}; +const draw = async function(text, id, _version, diagObj) { + const { securityLevel, block: conf } = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.F)(); + const db2 = diagObj.db; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ltv)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ltv)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ltv)("body"); + const svg = securityLevel === "sandbox" ? root.select(`[id="${id}"]`) : (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ltv)(`[id="${id}"]`); + const markers = ["point", "circle", "cross"]; + (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_9__.a)(svg, markers, diagObj.type, id); + const bl = db2.getBlocks(); + const blArr = db2.getBlocksFlat(); + const edges = db2.getEdges(); + const nodes = svg.insert("g").attr("class", "block"); + await calculateBlockSizes(nodes, bl, db2); + const bounds = layout(db2); + await insertBlocks(nodes, bl, db2); + await insertEdges(nodes, edges, blArr, db2, id); + if (bounds) { + const bounds2 = bounds; + const magicFactor = Math.max(1, Math.round(0.125 * (bounds2.width / bounds2.height))); + const height = bounds2.height + magicFactor + 10; + const width = bounds2.width + 10; + const { useMaxWidth } = conf; + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.i)(svg, height, width, !!useMaxWidth); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("Here Bounds", bounds, bounds2); + svg.attr( + "viewBox", + `${bounds2.x - 5} ${bounds2.y - 5} ${bounds2.width + 10} ${bounds2.height + 10}` + ); + } + (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .scaleOrdinal */ .UMr)(d3__WEBPACK_IMPORTED_MODULE_1__/* .schemeTableau10 */ .zt); +}; +const renderer = { + draw, + getClasses +}; +const diagram = { + parser: parser$1, + db: db$1, + renderer, + styles: flowStyles +}; + + + +/***/ }), + +/***/ 18897: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + a: () => (/* binding */ createText), + c: () => (/* binding */ computeDimensionOfText) +}); + +// NAMESPACE OBJECT: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js +var constructs_namespaceObject = {}; +__webpack_require__.r(constructs_namespaceObject); +__webpack_require__.d(constructs_namespaceObject, { + attentionMarkers: () => (attentionMarkers), + contentInitial: () => (contentInitial), + disable: () => (disable), + document: () => (constructs_document), + flow: () => (constructs_flow), + flowInitial: () => (flowInitial), + insideSpan: () => (insideSpan), + string: () => (constructs_string), + text: () => (constructs_text) +}); + +// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-6dc72991.js + 8 modules +var mermaid_6dc72991 = __webpack_require__(99702); +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-to-string/lib/index.js +/** + * @typedef {import('mdast').Root|import('mdast').Content} Node + * + * @typedef Options + * Configuration (optional). + * @property {boolean | null | undefined} [includeImageAlt=true] + * Whether to use `alt` for `image`s. + * @property {boolean | null | undefined} [includeHtml=true] + * Whether to use `value` of HTML. + */ + +/** @type {Options} */ +const emptyOptions = {} + +/** + * Get the text content of a node or list of nodes. + * + * Prefers the node’s plain-text fields, otherwise serializes its children, + * and if the given value is an array, serialize the nodes in it. + * + * @param {unknown} value + * Thing to serialize, typically `Node`. + * @param {Options | null | undefined} [options] + * Configuration (optional). + * @returns {string} + * Serialized `value`. + */ +function lib_toString(value, options) { + const settings = options || emptyOptions + const includeImageAlt = + typeof settings.includeImageAlt === 'boolean' + ? settings.includeImageAlt + : true + const includeHtml = + typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true + + return one(value, includeImageAlt, includeHtml) +} + +/** + * One node or several nodes. + * + * @param {unknown} value + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized node. + */ +function one(value, includeImageAlt, includeHtml) { + if (node(value)) { + if ('value' in value) { + return value.type === 'html' && !includeHtml ? '' : value.value + } + + if (includeImageAlt && 'alt' in value && value.alt) { + return value.alt + } + + if ('children' in value) { + return lib_all(value.children, includeImageAlt, includeHtml) + } + } + + if (Array.isArray(value)) { + return lib_all(value, includeImageAlt, includeHtml) + } + + return '' +} + +/** + * Serialize a list of nodes. + * + * @param {Array} values + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized nodes. + */ +function lib_all(values, includeImageAlt, includeHtml) { + /** @type {Array} */ + const result = [] + let index = -1 + + while (++index < values.length) { + result[index] = one(values[index], includeImageAlt, includeHtml) + } + + return result.join('') +} + +/** + * Check if `value` looks like a node. + * + * @param {unknown} value + * Thing. + * @returns {value is Node} + * Whether `value` is a node. + */ +function node(value) { + return Boolean(value && typeof value === 'object') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-chunked/index.js +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array} */ + let parameters + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start + } else { + start = start > end ? end : start + } + remove = remove > 0 ? remove : 0 + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < 10000) { + parameters = Array.from(items) + parameters.unshift(start, remove) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove) + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000) + parameters.unshift(start, 0) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + chunkStart += 10000 + start += 10000 + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array} list + * List to operate on. + * @param {Array} items + * Items to add to `list`. + * @returns {Array} + * Either `list` or `items`. + */ +function push(list, items) { + if (list.length > 0) { + splice(list, list.length, 0, items) + return list + } + return items +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-combine-extensions/index.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + * @typedef {import('micromark-util-types').Handles} Handles + * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension + * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension + */ + + + +const micromark_util_combine_extensions_hasOwnProperty = {}.hasOwnProperty + +/** + * Combine multiple syntax extensions into one. + * + * @param {Array} extensions + * List of syntax extensions. + * @returns {NormalizedExtension} + * A single combined extension. + */ +function combineExtensions(extensions) { + /** @type {NormalizedExtension} */ + const all = {} + let index = -1 + + while (++index < extensions.length) { + syntaxExtension(all, extensions[index]) + } + + return all +} + +/** + * Merge `extension` into `all`. + * + * @param {NormalizedExtension} all + * Extension to merge into. + * @param {Extension} extension + * Extension to merge. + * @returns {void} + */ +function syntaxExtension(all, extension) { + /** @type {keyof Extension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + /** @type {Record} */ + const left = maybe || (all[hook] = {}) + /** @type {Record | undefined} */ + const right = extension[hook] + /** @type {string} */ + let code + + if (right) { + for (code in right) { + if (!micromark_util_combine_extensions_hasOwnProperty.call(left, code)) left[code] = [] + const value = right[code] + constructs( + // @ts-expect-error Looks like a list. + left[code], + Array.isArray(value) ? value : value ? [value] : [] + ) + } + } + } +} + +/** + * Merge `list` into `existing` (both lists of constructs). + * Mutates `existing`. + * + * @param {Array} existing + * @param {Array} list + * @returns {void} + */ +function constructs(existing, list) { + let index = -1 + /** @type {Array} */ + const before = [] + + while (++index < list.length) { + // @ts-expect-error Looks like an object. + ;(list[index].add === 'after' ? existing : before).push(list[index]) + } + + splice(existing, 0, 0, before) +} + +/** + * Combine multiple HTML extensions into one. + * + * @param {Array} htmlExtensions + * List of HTML extensions. + * @returns {HtmlExtension} + * A single combined HTML extension. + */ +function combineHtmlExtensions(htmlExtensions) { + /** @type {HtmlExtension} */ + const handlers = {} + let index = -1 + + while (++index < htmlExtensions.length) { + htmlExtension(handlers, htmlExtensions[index]) + } + + return handlers +} + +/** + * Merge `extension` into `all`. + * + * @param {HtmlExtension} all + * Extension to merge into. + * @param {HtmlExtension} extension + * Extension to merge. + * @returns {void} + */ +function htmlExtension(all, extension) { + /** @type {keyof HtmlExtension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + const left = maybe || (all[hook] = {}) + const right = extension[hook] + /** @type {keyof Handles} */ + let type + + if (right) { + for (type in right) { + // @ts-expect-error assume document vs regular handler are managed correctly. + left[type] = right[type] + } + } + } +} + +;// CONCATENATED MODULE: ./node_modules/micromark-util-character/lib/unicode-punctuation-regex.js +// This module is generated by `script/`. +// +// CommonMark handles attention (emphasis, strong) markers based on what comes +// before or after them. +// One such difference is if those characters are Unicode punctuation. +// This script is generated from the Unicode data. + +/** + * Regular expression that matches a unicode punctuation character. + */ +const unicodePunctuationRegex = + /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/ + +;// CONCATENATED MODULE: ./node_modules/micromark-util-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + + +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlpha = regexCheck(/[A-Za-z]/) + +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) + +/** + * Check whether the character code represents an ASCII atext. + * + * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in + * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), + * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F + * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E + * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE + * (`{`) to U+007E TILDE (`~`). + * + * See: + * **\[RFC5322]**: + * [Internet Message Format](https://tools.ietf.org/html/rfc5322). + * P. Resnick. + * IETF. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) + +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function asciiControl(code) { + return ( + // Special whitespace codes (which have negative values), C0 and Control + // character DEL + code !== null && (code < 32 || code === 127) + ) +} + +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiDigit = regexCheck(/\d/) + +/** + * Check whether the character code represents an ASCII hex digit (`a` through + * `f`, case insensitive, or `0` through `9`). + * + * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex + * digit, or an ASCII lower hex digit. + * + * An **ASCII upper hex digit** is a character in the inclusive range U+0041 + * (`A`) to U+0046 (`F`). + * + * An **ASCII lower hex digit** is a character in the inclusive range U+0061 + * (`a`) to U+0066 (`f`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) + +/** + * Check whether the character code represents ASCII punctuation. + * + * An **ASCII punctuation** is a character in the inclusive ranges U+0021 + * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT + * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT + * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) + +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEnding(code) { + return code !== null && code < -2 +} + +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEndingOrSpace(code) { + return code !== null && (code < 0 || code === 32) +} + +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownSpace(code) { + return code === -2 || code === -1 || code === 32 +} + +// Size note: removing ASCII from the regex and using `asciiPunctuation` here +// In fact adds to the bundle size. +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodePunctuation = regexCheck(unicodePunctuationRegex) + +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodeWhitespace = regexCheck(/\s/) + +/** + * Create a code check from a regex. + * + * @param {RegExp} regex + * @returns {(code: Code) => boolean} + */ +function regexCheck(regex) { + return check + + /** + * Check whether a code matches the bound regex. + * + * @param {Code} code + * Character code. + * @returns {boolean} + * Whether the character code matches the bound regex. + */ + function check(code) { + return code !== null && regex.test(String.fromCharCode(code)) + } +} + +;// CONCATENATED MODULE: ./node_modules/micromark-factory-space/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * spaces in markdown are often optional, in which case this factory can be + * used and `ok` will be switched to whether spaces were found or not + * * one line ending or space can be detected with `markdownSpace(code)` right + * before using `factorySpace` + * + * ###### Examples + * + * Where `␉` represents a tab (plus how much it expands) and `␠` represents a + * single space. + * + * ```markdown + * ␉ + * ␠␠␠␠ + * ␉␠ + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {TokenType} type + * Type (`' \t'`). + * @param {number | undefined} [max=Infinity] + * Max (exclusive). + * @returns + * Start state. + */ +function factorySpace(effects, ok, type, max) { + const limit = max ? max - 1 : Number.POSITIVE_INFINITY + let size = 0 + return start + + /** @type {State} */ + function start(code) { + if (markdownSpace(code)) { + effects.enter(type) + return prefix(code) + } + return ok(code) + } + + /** @type {State} */ + function prefix(code) { + if (markdownSpace(code) && size++ < limit) { + effects.consume(code) + return prefix + } + effects.exit(type) + return ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/content.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + +/** @type {InitialConstruct} */ +const content = { + tokenize: initializeContent +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeContent(effects) { + const contentStart = effects.attempt( + this.parser.constructs.contentInitial, + afterContentStartConstruct, + paragraphInitial + ) + /** @type {Token} */ + let previous + return contentStart + + /** @type {State} */ + function afterContentStartConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, contentStart, 'linePrefix') + } + + /** @type {State} */ + function paragraphInitial(code) { + effects.enter('paragraph') + return lineStart(code) + } + + /** @type {State} */ + function lineStart(code) { + const token = effects.enter('chunkText', { + contentType: 'text', + previous + }) + if (previous) { + previous.next = token + } + previous = token + return data(code) + } + + /** @type {State} */ + function data(code) { + if (code === null) { + effects.exit('chunkText') + effects.exit('paragraph') + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + effects.exit('chunkText') + return lineStart + } + + // Data. + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/document.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + +/** + * @typedef {[Construct, ContainerState]} StackItem + */ + + + + +/** @type {InitialConstruct} */ +const document_document = { + tokenize: initializeDocument +} + +/** @type {Construct} */ +const containerConstruct = { + tokenize: tokenizeContainer +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeDocument(effects) { + const self = this + /** @type {Array} */ + const stack = [] + let continued = 0 + /** @type {TokenizeContext | undefined} */ + let childFlow + /** @type {Token | undefined} */ + let childToken + /** @type {number} */ + let lineStartOffset + return start + + /** @type {State} */ + function start(code) { + // First we iterate through the open blocks, starting with the root + // document, and descending through last children down to the last open + // block. + // Each block imposes a condition that the line must satisfy if the block is + // to remain open. + // For example, a block quote requires a `>` character. + // A paragraph requires a non-blank line. + // In this phase we may match all or just some of the open blocks. + // But we cannot close unmatched blocks yet, because we may have a lazy + // continuation line. + if (continued < stack.length) { + const item = stack[continued] + self.containerState = item[1] + return effects.attempt( + item[0].continuation, + documentContinue, + checkNewContainers + )(code) + } + + // Done. + return checkNewContainers(code) + } + + /** @type {State} */ + function documentContinue(code) { + continued++ + + // Note: this field is called `_closeFlow` but it also closes containers. + // Perhaps a good idea to rename it but it’s already used in the wild by + // extensions. + if (self.containerState._closeFlow) { + self.containerState._closeFlow = undefined + if (childFlow) { + closeFlow() + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when dealing with lazy lines in `writeToChild`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {Point | undefined} */ + let point + + // Find the flow chunk. + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + point = self.events[indexBeforeFlow][1].end + break + } + } + exitContainers(continued) + + // Fix positions. + let index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + return checkNewContainers(code) + } + return start(code) + } + + /** @type {State} */ + function checkNewContainers(code) { + // Next, after consuming the continuation markers for existing blocks, we + // look for new block starts (e.g. `>` for a block quote). + // If we encounter a new block start, we close any blocks unmatched in + // step 1 before creating the new block as a child of the last matched + // block. + if (continued === stack.length) { + // No need to `check` whether there’s a container, of `exitContainers` + // would be moot. + // We can instead immediately `attempt` to parse one. + if (!childFlow) { + return documentContinued(code) + } + + // If we have concrete content, such as block HTML or fenced code, + // we can’t have containers “pierce” into them, so we can immediately + // start. + if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { + return flowStart(code) + } + + // If we do have flow, it could still be a blank line, + // but we’d be interrupting it w/ a new container if there’s a current + // construct. + // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer + // needed in micromark-extension-gfm-table@1.0.6). + self.interrupt = Boolean( + childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack + ) + } + + // Check if there is a new container. + self.containerState = {} + return effects.check( + containerConstruct, + thereIsANewContainer, + thereIsNoNewContainer + )(code) + } + + /** @type {State} */ + function thereIsANewContainer(code) { + if (childFlow) closeFlow() + exitContainers(continued) + return documentContinued(code) + } + + /** @type {State} */ + function thereIsNoNewContainer(code) { + self.parser.lazy[self.now().line] = continued !== stack.length + lineStartOffset = self.now().offset + return flowStart(code) + } + + /** @type {State} */ + function documentContinued(code) { + // Try new containers. + self.containerState = {} + return effects.attempt( + containerConstruct, + containerContinue, + flowStart + )(code) + } + + /** @type {State} */ + function containerContinue(code) { + continued++ + stack.push([self.currentConstruct, self.containerState]) + // Try another. + return documentContinued(code) + } + + /** @type {State} */ + function flowStart(code) { + if (code === null) { + if (childFlow) closeFlow() + exitContainers(0) + effects.consume(code) + return + } + childFlow = childFlow || self.parser.flow(self.now()) + effects.enter('chunkFlow', { + contentType: 'flow', + previous: childToken, + _tokenizer: childFlow + }) + return flowContinue(code) + } + + /** @type {State} */ + function flowContinue(code) { + if (code === null) { + writeToChild(effects.exit('chunkFlow'), true) + exitContainers(0) + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + writeToChild(effects.exit('chunkFlow')) + // Get ready for the next line. + continued = 0 + self.interrupt = undefined + return start + } + effects.consume(code) + return flowContinue + } + + /** + * @param {Token} token + * @param {boolean | undefined} [eof] + * @returns {void} + */ + function writeToChild(token, eof) { + const stream = self.sliceStream(token) + if (eof) stream.push(null) + token.previous = childToken + if (childToken) childToken.next = token + childToken = token + childFlow.defineSkip(token.start) + childFlow.write(stream) + + // Alright, so we just added a lazy line: + // + // ```markdown + // > a + // b. + // + // Or: + // + // > ~~~c + // d + // + // Or: + // + // > | e | + // f + // ``` + // + // The construct in the second example (fenced code) does not accept lazy + // lines, so it marked itself as done at the end of its first line, and + // then the content construct parses `d`. + // Most constructs in markdown match on the first line: if the first line + // forms a construct, a non-lazy line can’t “unmake” it. + // + // The construct in the third example is potentially a GFM table, and + // those are *weird*. + // It *could* be a table, from the first line, if the following line + // matches a condition. + // In this case, that second line is lazy, which “unmakes” the first line + // and turns the whole into one content block. + // + // We’ve now parsed the non-lazy and the lazy line, and can figure out + // whether the lazy line started a new flow block. + // If it did, we exit the current containers between the two flow blocks. + if (self.parser.lazy[token.start.line]) { + let index = childFlow.events.length + while (index--) { + if ( + // The token starts before the line ending… + childFlow.events[index][1].start.offset < lineStartOffset && + // …and either is not ended yet… + (!childFlow.events[index][1].end || + // …or ends after it. + childFlow.events[index][1].end.offset > lineStartOffset) + ) { + // Exit: there’s still something open, which means it’s a lazy line + // part of something. + return + } + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when closing flow in `documentContinue`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {boolean | undefined} */ + let seen + /** @type {Point | undefined} */ + let point + + // Find the previous chunk (the one before the lazy line). + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + if (seen) { + point = self.events[indexBeforeFlow][1].end + break + } + seen = true + } + } + exitContainers(continued) + + // Fix positions. + index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + } + } + + /** + * @param {number} size + * @returns {void} + */ + function exitContainers(size) { + let index = stack.length + + // Exit open containers. + while (index-- > size) { + const entry = stack[index] + self.containerState = entry[1] + entry[0].exit.call(self, effects) + } + stack.length = size + } + function closeFlow() { + childFlow.write([null]) + childToken = undefined + childFlow = undefined + self.containerState._closeFlow = undefined + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContainer(effects, ok, nok) { + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(this.parser.constructs.document, ok, nok), + 'linePrefix', + this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + ) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/blank-line.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blankLine = { + tokenize: tokenizeBlankLine, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLine(effects, ok, nok) { + return start + + /** + * Start of blank line. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + return markdownSpace(code) + ? factorySpace(effects, after, 'linePrefix')(code) + : after(code) + } + + /** + * At eof/eol, after optional whitespace. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-subtokenize/index.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Token} Token + */ + + +/** + * Tokenize subcontent. + * + * @param {Array} events + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +function subtokenize(events) { + /** @type {Record} */ + const jumps = {} + let index = -1 + /** @type {Event} */ + let event + /** @type {number | undefined} */ + let lineIndex + /** @type {number} */ + let otherIndex + /** @type {Event} */ + let otherEvent + /** @type {Array} */ + let parameters + /** @type {Array} */ + let subevents + /** @type {boolean | undefined} */ + let more + while (++index < events.length) { + while (index in jumps) { + index = jumps[index] + } + event = events[index] + + // Add a hook for the GFM tasklist extension, which needs to know if text + // is in the first content of a list item. + if ( + index && + event[1].type === 'chunkFlow' && + events[index - 1][1].type === 'listItemPrefix' + ) { + subevents = event[1]._tokenizer.events + otherIndex = 0 + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'lineEndingBlank' + ) { + otherIndex += 2 + } + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'content' + ) { + while (++otherIndex < subevents.length) { + if (subevents[otherIndex][1].type === 'content') { + break + } + if (subevents[otherIndex][1].type === 'chunkText') { + subevents[otherIndex][1]._isInFirstContentOfListItem = true + otherIndex++ + } + } + } + } + + // Enter. + if (event[0] === 'enter') { + if (event[1].contentType) { + Object.assign(jumps, subcontent(events, index)) + index = jumps[index] + more = true + } + } + // Exit. + else if (event[1]._container) { + otherIndex = index + lineIndex = undefined + while (otherIndex--) { + otherEvent = events[otherIndex] + if ( + otherEvent[1].type === 'lineEnding' || + otherEvent[1].type === 'lineEndingBlank' + ) { + if (otherEvent[0] === 'enter') { + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + } + otherEvent[1].type = 'lineEnding' + lineIndex = otherIndex + } + } else { + break + } + } + if (lineIndex) { + // Fix position. + event[1].end = Object.assign({}, events[lineIndex][1].start) + + // Switch container exit w/ line endings. + parameters = events.slice(lineIndex, index) + parameters.unshift(event) + splice(events, lineIndex, index - lineIndex + 1, parameters) + } + } + } + return !more +} + +/** + * Tokenize embedded tokens. + * + * @param {Array} events + * @param {number} eventIndex + * @returns {Record} + */ +function subcontent(events, eventIndex) { + const token = events[eventIndex][1] + const context = events[eventIndex][2] + let startPosition = eventIndex - 1 + /** @type {Array} */ + const startPositions = [] + const tokenizer = + token._tokenizer || context.parser[token.contentType](token.start) + const childEvents = tokenizer.events + /** @type {Array<[number, number]>} */ + const jumps = [] + /** @type {Record} */ + const gaps = {} + /** @type {Array} */ + let stream + /** @type {Token | undefined} */ + let previous + let index = -1 + /** @type {Token | undefined} */ + let current = token + let adjust = 0 + let start = 0 + const breaks = [start] + + // Loop forward through the linked tokens to pass them in order to the + // subtokenizer. + while (current) { + // Find the position of the event for this token. + while (events[++startPosition][1] !== current) { + // Empty. + } + startPositions.push(startPosition) + if (!current._tokenizer) { + stream = context.sliceStream(current) + if (!current.next) { + stream.push(null) + } + if (previous) { + tokenizer.defineSkip(current.start) + } + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = true + } + tokenizer.write(stream) + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = undefined + } + } + + // Unravel the next token. + previous = current + current = current.next + } + + // Now, loop back through all events (and linked tokens), to figure out which + // parts belong where. + current = token + while (++index < childEvents.length) { + if ( + // Find a void token that includes a break. + childEvents[index][0] === 'exit' && + childEvents[index - 1][0] === 'enter' && + childEvents[index][1].type === childEvents[index - 1][1].type && + childEvents[index][1].start.line !== childEvents[index][1].end.line + ) { + start = index + 1 + breaks.push(start) + // Help GC. + current._tokenizer = undefined + current.previous = undefined + current = current.next + } + } + + // Help GC. + tokenizer.events = [] + + // If there’s one more token (which is the cases for lines that end in an + // EOF), that’s perfect: the last point we found starts it. + // If there isn’t then make sure any remaining content is added to it. + if (current) { + // Help GC. + current._tokenizer = undefined + current.previous = undefined + } else { + breaks.pop() + } + + // Now splice the events from the subtokenizer into the current events, + // moving back to front so that splice indices aren’t affected. + index = breaks.length + while (index--) { + const slice = childEvents.slice(breaks[index], breaks[index + 1]) + const start = startPositions.pop() + jumps.unshift([start, start + slice.length - 1]) + splice(events, start, 2, slice) + } + index = -1 + while (++index < jumps.length) { + gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] + adjust += jumps[index][1] - jumps[index][0] - 1 + } + return gaps +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/content.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** + * No name because it must not be turned off. + * @type {Construct} + */ +const content_content = { + tokenize: tokenizeContent, + resolve: resolveContent +} + +/** @type {Construct} */ +const continuationConstruct = { + tokenize: tokenizeContinuation, + partial: true +} + +/** + * Content is transparent: it’s parsed right now. That way, definitions are also + * parsed right now: before text in paragraphs (specifically, media) are parsed. + * + * @type {Resolver} + */ +function resolveContent(events) { + subtokenize(events) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContent(effects, ok) { + /** @type {Token | undefined} */ + let previous + return chunkStart + + /** + * Before a content chunk. + * + * ```markdown + * > | abc + * ^ + * ``` + * + * @type {State} + */ + function chunkStart(code) { + effects.enter('content') + previous = effects.enter('chunkContent', { + contentType: 'content' + }) + return chunkInside(code) + } + + /** + * In a content chunk. + * + * ```markdown + * > | abc + * ^^^ + * ``` + * + * @type {State} + */ + function chunkInside(code) { + if (code === null) { + return contentEnd(code) + } + + // To do: in `markdown-rs`, each line is parsed on its own, and everything + // is stitched together resolving. + if (markdownLineEnding(code)) { + return effects.check( + continuationConstruct, + contentContinue, + contentEnd + )(code) + } + + // Data. + effects.consume(code) + return chunkInside + } + + /** + * + * + * @type {State} + */ + function contentEnd(code) { + effects.exit('chunkContent') + effects.exit('content') + return ok(code) + } + + /** + * + * + * @type {State} + */ + function contentContinue(code) { + effects.consume(code) + effects.exit('chunkContent') + previous.next = effects.enter('chunkContent', { + contentType: 'content', + previous + }) + previous = previous.next + return chunkInside + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContinuation(effects, ok, nok) { + const self = this + return startLookahead + + /** + * + * + * @type {State} + */ + function startLookahead(code) { + effects.exit('chunkContent') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, prefixed, 'linePrefix') + } + + /** + * + * + * @type {State} + */ + function prefixed(code) { + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + + // Always populated by defaults. + + const tail = self.events[self.events.length - 1] + if ( + !self.parser.constructs.disable.null.includes('codeIndented') && + tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ) { + return ok(code) + } + return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/flow.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + + +/** @type {InitialConstruct} */ +const flow = { + tokenize: initializeFlow +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeFlow(effects) { + const self = this + const initial = effects.attempt( + // Try to parse a blank line. + blankLine, + atBlankEnding, + // Try to parse initial flow (essentially, only code). + effects.attempt( + this.parser.constructs.flowInitial, + afterConstruct, + factorySpace( + effects, + effects.attempt( + this.parser.constructs.flow, + afterConstruct, + effects.attempt(content_content, afterConstruct) + ), + 'linePrefix' + ) + ) + ) + return initial + + /** @type {State} */ + function atBlankEnding(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEndingBlank') + effects.consume(code) + effects.exit('lineEndingBlank') + self.currentConstruct = undefined + return initial + } + + /** @type {State} */ + function afterConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + self.currentConstruct = undefined + return initial + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +const resolver = { + resolveAll: createResolver() +} +const string = initializeFactory('string') +const text_text = initializeFactory('text') + +/** + * @param {'string' | 'text'} field + * @returns {InitialConstruct} + */ +function initializeFactory(field) { + return { + tokenize: initializeText, + resolveAll: createResolver( + field === 'text' ? resolveAllLineSuffixes : undefined + ) + } + + /** + * @this {TokenizeContext} + * @type {Initializer} + */ + function initializeText(effects) { + const self = this + const constructs = this.parser.constructs[field] + const text = effects.attempt(constructs, start, notText) + return start + + /** @type {State} */ + function start(code) { + return atBreak(code) ? text(code) : notText(code) + } + + /** @type {State} */ + function notText(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('data') + effects.consume(code) + return data + } + + /** @type {State} */ + function data(code) { + if (atBreak(code)) { + effects.exit('data') + return text(code) + } + + // Data. + effects.consume(code) + return data + } + + /** + * @param {Code} code + * @returns {boolean} + */ + function atBreak(code) { + if (code === null) { + return true + } + const list = constructs[code] + let index = -1 + if (list) { + // Always populated by defaults. + + while (++index < list.length) { + const item = list[index] + if (!item.previous || item.previous.call(self, self.previous)) { + return true + } + } + } + return false + } + } +} + +/** + * @param {Resolver | undefined} [extraResolver] + * @returns {Resolver} + */ +function createResolver(extraResolver) { + return resolveAllText + + /** @type {Resolver} */ + function resolveAllText(events, context) { + let index = -1 + /** @type {number | undefined} */ + let enter + + // A rather boring computation (to merge adjacent `data` events) which + // improves mm performance by 29%. + while (++index <= events.length) { + if (enter === undefined) { + if (events[index] && events[index][1].type === 'data') { + enter = index + index++ + } + } else if (!events[index] || events[index][1].type !== 'data') { + // Don’t do anything if there is one data token. + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + index = enter + 2 + } + enter = undefined + } + } + return extraResolver ? extraResolver(events, context) : events + } +} + +/** + * A rather ugly set of instructions which again looks at chunks in the input + * stream. + * The reason to do this here is that it is *much* faster to parse in reverse. + * And that we can’t hook into `null` to split the line suffix before an EOF. + * To do: figure out if we can make this into a clean utility, or even in core. + * As it will be useful for GFMs literal autolink extension (and maybe even + * tables?) + * + * @type {Resolver} + */ +function resolveAllLineSuffixes(events, context) { + let eventIndex = 0 // Skip first. + + while (++eventIndex <= events.length) { + if ( + (eventIndex === events.length || + events[eventIndex][1].type === 'lineEnding') && + events[eventIndex - 1][1].type === 'data' + ) { + const data = events[eventIndex - 1][1] + const chunks = context.sliceStream(data) + let index = chunks.length + let bufferIndex = -1 + let size = 0 + /** @type {boolean | undefined} */ + let tabs + while (index--) { + const chunk = chunks[index] + if (typeof chunk === 'string') { + bufferIndex = chunk.length + while (chunk.charCodeAt(bufferIndex - 1) === 32) { + size++ + bufferIndex-- + } + if (bufferIndex) break + bufferIndex = -1 + } + // Number + else if (chunk === -2) { + tabs = true + size++ + } else if (chunk === -1) { + // Empty + } else { + // Replacement character, exit. + index++ + break + } + } + if (size) { + const token = { + type: + eventIndex === events.length || tabs || size < 2 + ? 'lineSuffix' + : 'hardBreakTrailing', + start: { + line: data.end.line, + column: data.end.column - size, + offset: data.end.offset - size, + _index: data.start._index + index, + _bufferIndex: index + ? bufferIndex + : data.start._bufferIndex + bufferIndex + }, + end: Object.assign({}, data.end) + } + data.end = Object.assign({}, token.start) + if (data.start.offset === data.end.offset) { + Object.assign(data, token) + } else { + events.splice( + eventIndex, + 0, + ['enter', token, context], + ['exit', token, context] + ) + eventIndex += 2 + } + } + eventIndex++ + } + } + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-resolve-all/index.js +/** + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * Call all `resolveAll`s. + * + * @param {Array<{resolveAll?: Resolver | undefined}>} constructs + * List of constructs, optionally with `resolveAll`s. + * @param {Array} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array} + * Changed events. + */ +function resolveAll(constructs, events, context) { + /** @type {Array} */ + const called = [] + let index = -1 + + while (++index < constructs.length) { + const resolve = constructs[index].resolveAll + + if (resolve && !called.includes(resolve)) { + events = resolve(events, context) + called.push(resolve) + } + } + + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/create-tokenizer.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenType} TokenType + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * @callback Restore + * @returns {void} + * + * @typedef Info + * @property {Restore} restore + * @property {number} from + * + * @callback ReturnHandle + * Handle a successful run. + * @param {Construct} construct + * @param {Info} info + * @returns {void} + */ + + + + +/** + * Create a tokenizer. + * Tokenizers deal with one type of data (e.g., containers, flow, text). + * The parser is the object dealing with it all. + * `initialize` works like other constructs, except that only its `tokenize` + * function is used, in which case it doesn’t receive an `ok` or `nok`. + * `from` can be given to set the point before the first character, although + * when further lines are indented, they must be set with `defineSkip`. + * + * @param {ParseContext} parser + * @param {InitialConstruct} initialize + * @param {Omit | undefined} [from] + * @returns {TokenizeContext} + */ +function createTokenizer(parser, initialize, from) { + /** @type {Point} */ + let point = Object.assign( + from + ? Object.assign({}, from) + : { + line: 1, + column: 1, + offset: 0 + }, + { + _index: 0, + _bufferIndex: -1 + } + ) + /** @type {Record} */ + const columnStart = {} + /** @type {Array} */ + const resolveAllConstructs = [] + /** @type {Array} */ + let chunks = [] + /** @type {Array} */ + let stack = [] + /** @type {boolean | undefined} */ + let consumed = true + + /** + * Tools used for tokenizing. + * + * @type {Effects} + */ + const effects = { + consume, + enter, + exit, + attempt: constructFactory(onsuccessfulconstruct), + check: constructFactory(onsuccessfulcheck), + interrupt: constructFactory(onsuccessfulcheck, { + interrupt: true + }) + } + + /** + * State and tools for resolving and serializing. + * + * @type {TokenizeContext} + */ + const context = { + previous: null, + code: null, + containerState: {}, + events: [], + parser, + sliceStream, + sliceSerialize, + now, + defineSkip, + write + } + + /** + * The state function. + * + * @type {State | void} + */ + let state = initialize.tokenize.call(context, effects) + + /** + * Track which character we expect to be consumed, to catch bugs. + * + * @type {Code} + */ + let expectedCode + if (initialize.resolveAll) { + resolveAllConstructs.push(initialize) + } + return context + + /** @type {TokenizeContext['write']} */ + function write(slice) { + chunks = push(chunks, slice) + main() + + // Exit if we’re not done, resolve might change stuff. + if (chunks[chunks.length - 1] !== null) { + return [] + } + addResult(initialize, 0) + + // Otherwise, resolve, and exit. + context.events = resolveAll(resolveAllConstructs, context.events, context) + return context.events + } + + // + // Tools. + // + + /** @type {TokenizeContext['sliceSerialize']} */ + function sliceSerialize(token, expandTabs) { + return serializeChunks(sliceStream(token), expandTabs) + } + + /** @type {TokenizeContext['sliceStream']} */ + function sliceStream(token) { + return sliceChunks(chunks, token) + } + + /** @type {TokenizeContext['now']} */ + function now() { + // This is a hot path, so we clone manually instead of `Object.assign({}, point)` + const {line, column, offset, _index, _bufferIndex} = point + return { + line, + column, + offset, + _index, + _bufferIndex + } + } + + /** @type {TokenizeContext['defineSkip']} */ + function defineSkip(value) { + columnStart[value.line] = value.column + accountForPotentialSkip() + } + + // + // State management. + // + + /** + * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by + * `consume`). + * Here is where we walk through the chunks, which either include strings of + * several characters, or numerical character codes. + * The reason to do this in a loop instead of a call is so the stack can + * drain. + * + * @returns {void} + */ + function main() { + /** @type {number} */ + let chunkIndex + while (point._index < chunks.length) { + const chunk = chunks[point._index] + + // If we’re in a buffer chunk, loop through it. + if (typeof chunk === 'string') { + chunkIndex = point._index + if (point._bufferIndex < 0) { + point._bufferIndex = 0 + } + while ( + point._index === chunkIndex && + point._bufferIndex < chunk.length + ) { + go(chunk.charCodeAt(point._bufferIndex)) + } + } else { + go(chunk) + } + } + } + + /** + * Deal with one code. + * + * @param {Code} code + * @returns {void} + */ + function go(code) { + consumed = undefined + expectedCode = code + state = state(code) + } + + /** @type {Effects['consume']} */ + function consume(code) { + if (markdownLineEnding(code)) { + point.line++ + point.column = 1 + point.offset += code === -3 ? 2 : 1 + accountForPotentialSkip() + } else if (code !== -1) { + point.column++ + point.offset++ + } + + // Not in a string chunk. + if (point._bufferIndex < 0) { + point._index++ + } else { + point._bufferIndex++ + + // At end of string chunk. + // @ts-expect-error Points w/ non-negative `_bufferIndex` reference + // strings. + if (point._bufferIndex === chunks[point._index].length) { + point._bufferIndex = -1 + point._index++ + } + } + + // Expose the previous character. + context.previous = code + + // Mark as consumed. + consumed = true + } + + /** @type {Effects['enter']} */ + function enter(type, fields) { + /** @type {Token} */ + // @ts-expect-error Patch instead of assign required fields to help GC. + const token = fields || {} + token.type = type + token.start = now() + context.events.push(['enter', token, context]) + stack.push(token) + return token + } + + /** @type {Effects['exit']} */ + function exit(type) { + const token = stack.pop() + token.end = now() + context.events.push(['exit', token, context]) + return token + } + + /** + * Use results. + * + * @type {ReturnHandle} + */ + function onsuccessfulconstruct(construct, info) { + addResult(construct, info.from) + } + + /** + * Discard results. + * + * @type {ReturnHandle} + */ + function onsuccessfulcheck(_, info) { + info.restore() + } + + /** + * Factory to attempt/check/interrupt. + * + * @param {ReturnHandle} onreturn + * @param {{interrupt?: boolean | undefined} | undefined} [fields] + */ + function constructFactory(onreturn, fields) { + return hook + + /** + * Handle either an object mapping codes to constructs, a list of + * constructs, or a single construct. + * + * @param {Array | Construct | ConstructRecord} constructs + * @param {State} returnState + * @param {State | undefined} [bogusState] + * @returns {State} + */ + function hook(constructs, returnState, bogusState) { + /** @type {Array} */ + let listOfConstructs + /** @type {number} */ + let constructIndex + /** @type {Construct} */ + let currentConstruct + /** @type {Info} */ + let info + return Array.isArray(constructs) /* c8 ignore next 1 */ + ? handleListOfConstructs(constructs) + : 'tokenize' in constructs + ? // @ts-expect-error Looks like a construct. + handleListOfConstructs([constructs]) + : handleMapOfConstructs(constructs) + + /** + * Handle a list of construct. + * + * @param {ConstructRecord} map + * @returns {State} + */ + function handleMapOfConstructs(map) { + return start + + /** @type {State} */ + function start(code) { + const def = code !== null && map[code] + const all = code !== null && map.null + const list = [ + // To do: add more extension tests. + /* c8 ignore next 2 */ + ...(Array.isArray(def) ? def : def ? [def] : []), + ...(Array.isArray(all) ? all : all ? [all] : []) + ] + return handleListOfConstructs(list)(code) + } + } + + /** + * Handle a list of construct. + * + * @param {Array} list + * @returns {State} + */ + function handleListOfConstructs(list) { + listOfConstructs = list + constructIndex = 0 + if (list.length === 0) { + return bogusState + } + return handleConstruct(list[constructIndex]) + } + + /** + * Handle a single construct. + * + * @param {Construct} construct + * @returns {State} + */ + function handleConstruct(construct) { + return start + + /** @type {State} */ + function start(code) { + // To do: not needed to store if there is no bogus state, probably? + // Currently doesn’t work because `inspect` in document does a check + // w/o a bogus, which doesn’t make sense. But it does seem to help perf + // by not storing. + info = store() + currentConstruct = construct + if (!construct.partial) { + context.currentConstruct = construct + } + + // Always populated by defaults. + + if ( + construct.name && + context.parser.constructs.disable.null.includes(construct.name) + ) { + return nok(code) + } + return construct.tokenize.call( + // If we do have fields, create an object w/ `context` as its + // prototype. + // This allows a “live binding”, which is needed for `interrupt`. + fields ? Object.assign(Object.create(context), fields) : context, + effects, + ok, + nok + )(code) + } + } + + /** @type {State} */ + function ok(code) { + consumed = true + onreturn(currentConstruct, info) + return returnState + } + + /** @type {State} */ + function nok(code) { + consumed = true + info.restore() + if (++constructIndex < listOfConstructs.length) { + return handleConstruct(listOfConstructs[constructIndex]) + } + return bogusState + } + } + } + + /** + * @param {Construct} construct + * @param {number} from + * @returns {void} + */ + function addResult(construct, from) { + if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { + resolveAllConstructs.push(construct) + } + if (construct.resolve) { + splice( + context.events, + from, + context.events.length - from, + construct.resolve(context.events.slice(from), context) + ) + } + if (construct.resolveTo) { + context.events = construct.resolveTo(context.events, context) + } + } + + /** + * Store state. + * + * @returns {Info} + */ + function store() { + const startPoint = now() + const startPrevious = context.previous + const startCurrentConstruct = context.currentConstruct + const startEventsIndex = context.events.length + const startStack = Array.from(stack) + return { + restore, + from: startEventsIndex + } + + /** + * Restore state. + * + * @returns {void} + */ + function restore() { + point = startPoint + context.previous = startPrevious + context.currentConstruct = startCurrentConstruct + context.events.length = startEventsIndex + stack = startStack + accountForPotentialSkip() + } + } + + /** + * Move the current point a bit forward in the line when it’s on a column + * skip. + * + * @returns {void} + */ + function accountForPotentialSkip() { + if (point.line in columnStart && point.column < 2) { + point.column = columnStart[point.line] + point.offset += columnStart[point.line] - 1 + } + } +} + +/** + * Get the chunks from a slice of chunks in the range of a token. + * + * @param {Array} chunks + * @param {Pick} token + * @returns {Array} + */ +function sliceChunks(chunks, token) { + const startIndex = token.start._index + const startBufferIndex = token.start._bufferIndex + const endIndex = token.end._index + const endBufferIndex = token.end._bufferIndex + /** @type {Array} */ + let view + if (startIndex === endIndex) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)] + } else { + view = chunks.slice(startIndex, endIndex) + if (startBufferIndex > -1) { + const head = view[0] + if (typeof head === 'string') { + view[0] = head.slice(startBufferIndex) + } else { + view.shift() + } + } + if (endBufferIndex > 0) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view.push(chunks[endIndex].slice(0, endBufferIndex)) + } + } + return view +} + +/** + * Get the string value of a slice of chunks. + * + * @param {Array} chunks + * @param {boolean | undefined} [expandTabs=false] + * @returns {string} + */ +function serializeChunks(chunks, expandTabs) { + let index = -1 + /** @type {Array} */ + const result = [] + /** @type {boolean | undefined} */ + let atTab + while (++index < chunks.length) { + const chunk = chunks[index] + /** @type {string} */ + let value + if (typeof chunk === 'string') { + value = chunk + } else + switch (chunk) { + case -5: { + value = '\r' + break + } + case -4: { + value = '\n' + break + } + case -3: { + value = '\r' + '\n' + break + } + case -2: { + value = expandTabs ? ' ' : '\t' + break + } + case -1: { + if (!expandTabs && atTab) continue + value = ' ' + break + } + default: { + // Currently only replacement character. + value = String.fromCharCode(chunk) + } + } + atTab = chunk === -2 + result.push(value) + } + return result.join('') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/thematic-break.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const thematicBreak = { + name: 'thematicBreak', + tokenize: tokenizeThematicBreak +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeThematicBreak(effects, ok, nok) { + let size = 0 + /** @type {NonNullable} */ + let marker + return start + + /** + * Start of thematic break. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('thematicBreak') + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * After optional whitespace, at marker. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + marker = code + return atBreak(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.enter('thematicBreakSequence') + return sequence(code) + } + if (size >= 3 && (code === null || markdownLineEnding(code))) { + effects.exit('thematicBreak') + return ok(code) + } + return nok(code) + } + + /** + * In sequence. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function sequence(code) { + if (code === marker) { + effects.consume(code) + size++ + return sequence + } + effects.exit('thematicBreakSequence') + return markdownSpace(code) + ? factorySpace(effects, atBreak, 'whitespace')(code) + : atBreak(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/list.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + +/** @type {Construct} */ +const list = { + name: 'list', + tokenize: tokenizeListStart, + continuation: { + tokenize: tokenizeListContinuation + }, + exit: tokenizeListEnd +} + +/** @type {Construct} */ +const listItemPrefixWhitespaceConstruct = { + tokenize: tokenizeListItemPrefixWhitespace, + partial: true +} + +/** @type {Construct} */ +const indentConstruct = { + tokenize: tokenizeIndent, + partial: true +} + +// To do: `markdown-rs` parses list items on their own and later stitches them +// together. + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListStart(effects, ok, nok) { + const self = this + const tail = self.events[self.events.length - 1] + let initialSize = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + let size = 0 + return start + + /** @type {State} */ + function start(code) { + const kind = + self.containerState.type || + (code === 42 || code === 43 || code === 45 + ? 'listUnordered' + : 'listOrdered') + if ( + kind === 'listUnordered' + ? !self.containerState.marker || code === self.containerState.marker + : asciiDigit(code) + ) { + if (!self.containerState.type) { + self.containerState.type = kind + effects.enter(kind, { + _container: true + }) + } + if (kind === 'listUnordered') { + effects.enter('listItemPrefix') + return code === 42 || code === 45 + ? effects.check(thematicBreak, nok, atMarker)(code) + : atMarker(code) + } + if (!self.interrupt || code === 49) { + effects.enter('listItemPrefix') + effects.enter('listItemValue') + return inside(code) + } + } + return nok(code) + } + + /** @type {State} */ + function inside(code) { + if (asciiDigit(code) && ++size < 10) { + effects.consume(code) + return inside + } + if ( + (!self.interrupt || size < 2) && + (self.containerState.marker + ? code === self.containerState.marker + : code === 41 || code === 46) + ) { + effects.exit('listItemValue') + return atMarker(code) + } + return nok(code) + } + + /** + * @type {State} + **/ + function atMarker(code) { + effects.enter('listItemMarker') + effects.consume(code) + effects.exit('listItemMarker') + self.containerState.marker = self.containerState.marker || code + return effects.check( + blankLine, + // Can’t be empty when interrupting. + self.interrupt ? nok : onBlank, + effects.attempt( + listItemPrefixWhitespaceConstruct, + endOfPrefix, + otherPrefix + ) + ) + } + + /** @type {State} */ + function onBlank(code) { + self.containerState.initialBlankLine = true + initialSize++ + return endOfPrefix(code) + } + + /** @type {State} */ + function otherPrefix(code) { + if (markdownSpace(code)) { + effects.enter('listItemPrefixWhitespace') + effects.consume(code) + effects.exit('listItemPrefixWhitespace') + return endOfPrefix + } + return nok(code) + } + + /** @type {State} */ + function endOfPrefix(code) { + self.containerState.size = + initialSize + + self.sliceSerialize(effects.exit('listItemPrefix'), true).length + return ok(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListContinuation(effects, ok, nok) { + const self = this + self.containerState._closeFlow = undefined + return effects.check(blankLine, onBlank, notBlank) + + /** @type {State} */ + function onBlank(code) { + self.containerState.furtherBlankLines = + self.containerState.furtherBlankLines || + self.containerState.initialBlankLine + + // We have a blank line. + // Still, try to consume at most the items size. + return factorySpace( + effects, + ok, + 'listItemIndent', + self.containerState.size + 1 + )(code) + } + + /** @type {State} */ + function notBlank(code) { + if (self.containerState.furtherBlankLines || !markdownSpace(code)) { + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return notInCurrentItem(code) + } + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) + } + + /** @type {State} */ + function notInCurrentItem(code) { + // While we do continue, we signal that the flow should be closed. + self.containerState._closeFlow = true + // As we’re closing flow, we’re no longer interrupting. + self.interrupt = undefined + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(list, ok, nok), + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeIndent(effects, ok, nok) { + const self = this + return factorySpace( + effects, + afterPrefix, + 'listItemIndent', + self.containerState.size + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'listItemIndent' && + tail[2].sliceSerialize(tail[1], true).length === self.containerState.size + ? ok(code) + : nok(code) + } +} + +/** + * @type {Exiter} + * @this {TokenizeContext} + */ +function tokenizeListEnd(effects) { + effects.exit(this.containerState.type) +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListItemPrefixWhitespace(effects, ok, nok) { + const self = this + + // Always populated by defaults. + + return factorySpace( + effects, + afterPrefix, + 'listItemPrefixWhitespace', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return !markdownSpace(code) && + tail && + tail[1].type === 'listItemPrefixWhitespace' + ? ok(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/block-quote.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blockQuote = { + name: 'blockQuote', + tokenize: tokenizeBlockQuoteStart, + continuation: { + tokenize: tokenizeBlockQuoteContinuation + }, + exit +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteStart(effects, ok, nok) { + const self = this + return start + + /** + * Start of block quote. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 62) { + const state = self.containerState + if (!state.open) { + effects.enter('blockQuote', { + _container: true + }) + state.open = true + } + effects.enter('blockQuotePrefix') + effects.enter('blockQuoteMarker') + effects.consume(code) + effects.exit('blockQuoteMarker') + return after + } + return nok(code) + } + + /** + * After `>`, before optional whitespace. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownSpace(code)) { + effects.enter('blockQuotePrefixWhitespace') + effects.consume(code) + effects.exit('blockQuotePrefixWhitespace') + effects.exit('blockQuotePrefix') + return ok + } + effects.exit('blockQuotePrefix') + return ok(code) + } +} + +/** + * Start of block quote continuation. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteContinuation(effects, ok, nok) { + const self = this + return contStart + + /** + * Start of block quote continuation. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contStart(code) { + if (markdownSpace(code)) { + // Always populated by defaults. + + return factorySpace( + effects, + contBefore, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } + return contBefore(code) + } + + /** + * At `>`, after optional whitespace. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contBefore(code) { + return effects.attempt(blockQuote, ok, nok)(code) + } +} + +/** @type {Exiter} */ +function exit(effects) { + effects.exit('blockQuote') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-destination/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse destinations. + * + * ###### Examples + * + * ```markdown + * + * b> + * + * + * a + * a\)b + * a(b)c + * a(b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type for whole (`` or `b`). + * @param {TokenType} literalType + * Type when enclosed (``). + * @param {TokenType} literalMarkerType + * Type for enclosing (`<` and `>`). + * @param {TokenType} rawType + * Type when not enclosed (`b`). + * @param {TokenType} stringType + * Type for the value (`a` or `b`). + * @param {number | undefined} [max=Infinity] + * Depth of nested parens (inclusive). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryDestination( + effects, + ok, + nok, + type, + literalType, + literalMarkerType, + rawType, + stringType, + max +) { + const limit = max || Number.POSITIVE_INFINITY + let balance = 0 + return start + + /** + * Start of destination. + * + * ```markdown + * > | + * ^ + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 60) { + effects.enter(type) + effects.enter(literalType) + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + return enclosedBefore + } + + // ASCII control, space, closing paren. + if (code === null || code === 32 || code === 41 || asciiControl(code)) { + return nok(code) + } + effects.enter(type) + effects.enter(rawType) + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return raw(code) + } + + /** + * After `<`, at an enclosed destination. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function enclosedBefore(code) { + if (code === 62) { + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + effects.exit(literalType) + effects.exit(type) + return ok + } + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return enclosed(code) + } + + /** + * In enclosed destination. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function enclosed(code) { + if (code === 62) { + effects.exit('chunkString') + effects.exit(stringType) + return enclosedBefore(code) + } + if (code === null || code === 60 || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? enclosedEscape : enclosed + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function enclosedEscape(code) { + if (code === 60 || code === 62 || code === 92) { + effects.consume(code) + return enclosed + } + return enclosed(code) + } + + /** + * In raw destination. + * + * ```markdown + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function raw(code) { + if ( + !balance && + (code === null || code === 41 || markdownLineEndingOrSpace(code)) + ) { + effects.exit('chunkString') + effects.exit(stringType) + effects.exit(rawType) + effects.exit(type) + return ok(code) + } + if (balance < limit && code === 40) { + effects.consume(code) + balance++ + return raw + } + if (code === 41) { + effects.consume(code) + balance-- + return raw + } + + // ASCII control (but *not* `\0`) and space and `(`. + // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it + // doesn’t. + if (code === null || code === 32 || code === 40 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? rawEscape : raw + } + + /** + * After `\`, at special character. + * + * ```markdown + * > | a\*a + * ^ + * ``` + * + * @type {State} + */ + function rawEscape(code) { + if (code === 40 || code === 41 || code === 92) { + effects.consume(code) + return raw + } + return raw(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-label/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse labels. + * + * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. + * + * ###### Examples + * + * ```markdown + * [a] + * [a + * b] + * [a\]b] + * ``` + * + * @this {TokenizeContext} + * Tokenize context. + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole label (`[a]`). + * @param {TokenType} markerType + * Type for the markers (`[` and `]`). + * @param {TokenType} stringType + * Type for the identifier (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryLabel(effects, ok, nok, type, markerType, stringType) { + const self = this + let size = 0 + /** @type {boolean} */ + let seen + return start + + /** + * Start of label. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.enter(stringType) + return atBreak + } + + /** + * In label, at something, before something else. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if ( + size > 999 || + code === null || + code === 91 || + (code === 93 && !seen) || + // To do: remove in the future once we’ve switched from + // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, + // which doesn’t need this. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + (code === 94 && + !size && + '_hiddenFootnoteSupport' in self.parser.constructs) + ) { + return nok(code) + } + if (code === 93) { + effects.exit(stringType) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + + // To do: indent? Link chunks and EOLs together? + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return atBreak + } + effects.enter('chunkString', { + contentType: 'string' + }) + return labelInside(code) + } + + /** + * In label, in text. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function labelInside(code) { + if ( + code === null || + code === 91 || + code === 93 || + markdownLineEnding(code) || + size++ > 999 + ) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + if (!seen) seen = !markdownSpace(code) + return code === 92 ? labelEscape : labelInside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | [a\*a] + * ^ + * ``` + * + * @type {State} + */ + function labelEscape(code) { + if (code === 91 || code === 92 || code === 93) { + effects.consume(code) + size++ + return labelInside + } + return labelInside(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-title/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +/** + * Parse titles. + * + * ###### Examples + * + * ```markdown + * "a" + * 'b' + * (c) + * "a + * b" + * 'a + * b' + * (a\)b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole title (`"a"`, `'b'`, `(c)`). + * @param {TokenType} markerType + * Type for the markers (`"`, `'`, `(`, and `)`). + * @param {TokenType} stringType + * Type for the value (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryTitle(effects, ok, nok, type, markerType, stringType) { + /** @type {NonNullable} */ + let marker + return start + + /** + * Start of title. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 34 || code === 39 || code === 40) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + marker = code === 40 ? 41 : code + return begin + } + return nok(code) + } + + /** + * After opening marker. + * + * This is also used at the closing marker. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function begin(code) { + if (code === marker) { + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + effects.enter(stringType) + return atBreak(code) + } + + /** + * At something, before something else. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.exit(stringType) + return begin(marker) + } + if (code === null) { + return nok(code) + } + + // Note: blank lines can’t exist in content. + if (markdownLineEnding(code)) { + // To do: use `space_or_tab_eol_with_options`, connect. + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, atBreak, 'linePrefix') + } + effects.enter('chunkString', { + contentType: 'string' + }) + return inside(code) + } + + /** + * + * + * @type {State} + */ + function inside(code) { + if (code === marker || code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + return code === 92 ? escape : inside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | "a\*b" + * ^ + * ``` + * + * @type {State} + */ + function escape(code) { + if (code === marker || code === 92) { + effects.consume(code) + return inside + } + return inside(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-whitespace/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + */ + + + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * line endings or spaces in markdown are often optional, in which case this + * factory can be used and `ok` will be switched to whether spaces were found + * or not + * * one line ending or space can be detected with + * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @returns + * Start state. + */ +function factoryWhitespace(effects, ok) { + /** @type {boolean} */ + let seen + return start + + /** @type {State} */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + seen = true + return start + } + if (markdownSpace(code)) { + return factorySpace( + effects, + start, + seen ? 'linePrefix' : 'lineSuffix' + )(code) + } + return ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-normalize-identifier/index.js +/** + * Normalize an identifier (as found in references, definitions). + * + * Collapses markdown whitespace, trim, and then lower- and uppercase. + * + * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their + * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different + * uppercase character (U+0398 (`Θ`)). + * So, to get a canonical form, we perform both lower- and uppercase. + * + * Using uppercase last makes sure keys will never interact with default + * prototypal values (such as `constructor`): nothing in the prototype of + * `Object` is uppercase. + * + * @param {string} value + * Identifier to normalize. + * @returns {string} + * Normalized identifier. + */ +function normalizeIdentifier(value) { + return ( + value + // Collapse markdown whitespace. + .replace(/[\t\n\r ]+/g, ' ') + // Trim. + .replace(/^ | $/g, '') + // Some characters are considered “uppercase”, but if their lowercase + // counterpart is uppercased will result in a different uppercase + // character. + // Hence, to get that form, we perform both lower- and uppercase. + // Upper case makes sure keys will not interact with default prototypal + // methods: no method is uppercase. + .toLowerCase() + .toUpperCase() + ) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/definition.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + +/** @type {Construct} */ +const definition = { + name: 'definition', + tokenize: tokenizeDefinition +} + +/** @type {Construct} */ +const titleBefore = { + tokenize: tokenizeTitleBefore, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeDefinition(effects, ok, nok) { + const self = this + /** @type {string} */ + let identifier + return start + + /** + * At start of a definition. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Do not interrupt paragraphs (but do follow definitions). + // To do: do `interrupt` the way `markdown-rs` does. + // To do: parse whitespace the way `markdown-rs` does. + effects.enter('definition') + return before(code) + } + + /** + * After optional whitespace, at `[`. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + // To do: parse whitespace the way `markdown-rs` does. + + return factoryLabel.call( + self, + effects, + labelAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionLabel', + 'definitionLabelMarker', + 'definitionLabelString' + )(code) + } + + /** + * After label. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function labelAfter(code) { + identifier = normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + if (code === 58) { + effects.enter('definitionMarker') + effects.consume(code) + effects.exit('definitionMarker') + return markerAfter + } + return nok(code) + } + + /** + * After marker. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function markerAfter(code) { + // Note: whitespace is optional. + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, destinationBefore)(code) + : destinationBefore(code) + } + + /** + * Before destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationBefore(code) { + return factoryDestination( + effects, + destinationAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionDestination', + 'definitionDestinationLiteral', + 'definitionDestinationLiteralMarker', + 'definitionDestinationRaw', + 'definitionDestinationString' + )(code) + } + + /** + * After destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationAfter(code) { + return effects.attempt(titleBefore, after, after)(code) + } + + /** + * After definition. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return markdownSpace(code) + ? factorySpace(effects, afterWhitespace, 'whitespace')(code) + : afterWhitespace(code) + } + + /** + * After definition, after optional whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function afterWhitespace(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('definition') + + // Note: we don’t care about uniqueness. + // It’s likely that that doesn’t happen very frequently. + // It is more likely that it wastes precious time. + self.parser.defined.push(identifier) + + // To do: `markdown-rs` interrupt. + // // You’d be interrupting. + // tokenizer.interrupt = true + return ok(code) + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeTitleBefore(effects, ok, nok) { + return titleBefore + + /** + * After destination, at whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, beforeMarker)(code) + : nok(code) + } + + /** + * At title. + * + * ```markdown + * | [a]: b + * > | "c" + * ^ + * ``` + * + * @type {State} + */ + function beforeMarker(code) { + return factoryTitle( + effects, + titleAfter, + nok, + 'definitionTitle', + 'definitionTitleMarker', + 'definitionTitleString' + )(code) + } + + /** + * After title. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfter(code) { + return markdownSpace(code) + ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code) + : titleAfterOptionalWhitespace(code) + } + + /** + * After title, after optional whitespace. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfterOptionalWhitespace(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-indented.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const codeIndented = { + name: 'codeIndented', + tokenize: tokenizeCodeIndented +} + +/** @type {Construct} */ +const furtherStart = { + tokenize: tokenizeFurtherStart, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeIndented(effects, ok, nok) { + const self = this + return start + + /** + * Start of code (indented). + * + * > **Parsing note**: it is not needed to check if this first line is a + * > filled line (that it has a non-whitespace character), because blank lines + * > are parsed already, so we never run into that. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: manually check if interrupting like `markdown-rs`. + + effects.enter('codeIndented') + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? atBreak(code) + : nok(code) + } + + /** + * At a break. + * + * ```markdown + * > | aaa + * ^ ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === null) { + return after(code) + } + if (markdownLineEnding(code)) { + return effects.attempt(furtherStart, atBreak, after)(code) + } + effects.enter('codeFlowValue') + return inside(code) + } + + /** + * In code content. + * + * ```markdown + * > | aaa + * ^^^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return atBreak(code) + } + effects.consume(code) + return inside + } + + /** @type {State} */ + function after(code) { + effects.exit('codeIndented') + // To do: allow interrupting like `markdown-rs`. + // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeFurtherStart(effects, ok, nok) { + const self = this + return furtherStart + + /** + * At eol, trying to parse another indent. + * + * ```markdown + * > | aaa + * ^ + * | bbb + * ``` + * + * @type {State} + */ + function furtherStart(code) { + // To do: improve `lazy` / `pierce` handling. + // If this is a lazy line, it can’t be code. + if (self.parser.lazy[self.now().line]) { + return nok(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return furtherStart + } + + // To do: the code here in `micromark-js` is a bit different from + // `markdown-rs` because there it can attempt spaces. + // We can’t yet. + // + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? ok(code) + : markdownLineEnding(code) + ? furtherStart(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/heading-atx.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const headingAtx = { + name: 'headingAtx', + tokenize: tokenizeHeadingAtx, + resolve: resolveHeadingAtx +} + +/** @type {Resolver} */ +function resolveHeadingAtx(events, context) { + let contentEnd = events.length - 2 + let contentStart = 3 + /** @type {Token} */ + let content + /** @type {Token} */ + let text + + // Prefix whitespace, part of the opening. + if (events[contentStart][1].type === 'whitespace') { + contentStart += 2 + } + + // Suffix whitespace, part of the closing. + if ( + contentEnd - 2 > contentStart && + events[contentEnd][1].type === 'whitespace' + ) { + contentEnd -= 2 + } + if ( + events[contentEnd][1].type === 'atxHeadingSequence' && + (contentStart === contentEnd - 1 || + (contentEnd - 4 > contentStart && + events[contentEnd - 2][1].type === 'whitespace')) + ) { + contentEnd -= contentStart + 1 === contentEnd ? 2 : 4 + } + if (contentEnd > contentStart) { + content = { + type: 'atxHeadingText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end + } + text = { + type: 'chunkText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end, + contentType: 'text' + } + splice(events, contentStart, contentEnd - contentStart + 1, [ + ['enter', content, context], + ['enter', text, context], + ['exit', text, context], + ['exit', content, context] + ]) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHeadingAtx(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of a heading (atx). + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + effects.enter('atxHeading') + return before(code) + } + + /** + * After optional whitespace, at `#`. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('atxHeadingSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 35 && size++ < 6) { + effects.consume(code) + return sequenceOpen + } + + // Always at least one `#`. + if (code === null || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingSequence') + return atBreak(code) + } + return nok(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === 35) { + effects.enter('atxHeadingSequence') + return sequenceFurther(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('atxHeading') + // To do: interrupt like `markdown-rs`. + // // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } + if (markdownSpace(code)) { + return factorySpace(effects, atBreak, 'whitespace')(code) + } + + // To do: generate `data` tokens, add the `text` token later. + // Needs edit map, see: `markdown.rs`. + effects.enter('atxHeadingText') + return data(code) + } + + /** + * In further sequence (after whitespace). + * + * Could be normal “visible” hashes in the heading or a final sequence. + * + * ```markdown + * > | ## aa ## + * ^ + * ``` + * + * @type {State} + */ + function sequenceFurther(code) { + if (code === 35) { + effects.consume(code) + return sequenceFurther + } + effects.exit('atxHeadingSequence') + return atBreak(code) + } + + /** + * In text. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if (code === null || code === 35 || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingText') + return atBreak(code) + } + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/setext-underline.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const setextUnderline = { + name: 'setextUnderline', + tokenize: tokenizeSetextUnderline, + resolveTo: resolveToSetextUnderline +} + +/** @type {Resolver} */ +function resolveToSetextUnderline(events, context) { + // To do: resolve like `markdown-rs`. + let index = events.length + /** @type {number | undefined} */ + let content + /** @type {number | undefined} */ + let text + /** @type {number | undefined} */ + let definition + + // Find the opening of the content. + // It’ll always exist: we don’t tokenize if it isn’t there. + while (index--) { + if (events[index][0] === 'enter') { + if (events[index][1].type === 'content') { + content = index + break + } + if (events[index][1].type === 'paragraph') { + text = index + } + } + // Exit + else { + if (events[index][1].type === 'content') { + // Remove the content end (if needed we’ll add it later) + events.splice(index, 1) + } + if (!definition && events[index][1].type === 'definition') { + definition = index + } + } + } + const heading = { + type: 'setextHeading', + start: Object.assign({}, events[text][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + + // Change the paragraph to setext heading text. + events[text][1].type = 'setextHeadingText' + + // If we have definitions in the content, we’ll keep on having content, + // but we need move it. + if (definition) { + events.splice(text, 0, ['enter', heading, context]) + events.splice(definition + 1, 0, ['exit', events[content][1], context]) + events[content][1].end = Object.assign({}, events[definition][1].end) + } else { + events[content][1] = heading + } + + // Add the heading exit at the end. + events.push(['exit', heading, context]) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeSetextUnderline(effects, ok, nok) { + const self = this + /** @type {NonNullable} */ + let marker + return start + + /** + * At start of heading (setext) underline. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + let index = self.events.length + /** @type {boolean | undefined} */ + let paragraph + // Find an opening. + while (index--) { + // Skip enter/exit of line ending, line prefix, and content. + // We can now either have a definition or a paragraph. + if ( + self.events[index][1].type !== 'lineEnding' && + self.events[index][1].type !== 'linePrefix' && + self.events[index][1].type !== 'content' + ) { + paragraph = self.events[index][1].type === 'paragraph' + break + } + } + + // To do: handle lazy/pierce like `markdown-rs`. + // To do: parse indent like `markdown-rs`. + if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { + effects.enter('setextHeadingLine') + marker = code + return before(code) + } + return nok(code) + } + + /** + * After optional whitespace, at `-` or `=`. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('setextHeadingLineSequence') + return inside(code) + } + + /** + * In sequence. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + effects.exit('setextHeadingLineSequence') + return markdownSpace(code) + ? factorySpace(effects, after, 'lineSuffix')(code) + : after(code) + } + + /** + * After sequence, after optional whitespace. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('setextHeadingLine') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-html-tag-name/index.js +/** + * List of lowercase HTML “block” tag names. + * + * The list, when parsing HTML (flow), results in more relaxed rules (condition + * 6). + * Because they are known blocks, the HTML-like syntax doesn’t have to be + * strictly parsed. + * For tag names not in this list, a more strict algorithm (condition 7) is used + * to detect whether the HTML-like syntax is seen as HTML (flow) or not. + * + * This is copied from: + * . + * + * > 👉 **Note**: `search` was added in `CommonMark@0.31`. + */ +const htmlBlockNames = [ + 'address', + 'article', + 'aside', + 'base', + 'basefont', + 'blockquote', + 'body', + 'caption', + 'center', + 'col', + 'colgroup', + 'dd', + 'details', + 'dialog', + 'dir', + 'div', + 'dl', + 'dt', + 'fieldset', + 'figcaption', + 'figure', + 'footer', + 'form', + 'frame', + 'frameset', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'head', + 'header', + 'hr', + 'html', + 'iframe', + 'legend', + 'li', + 'link', + 'main', + 'menu', + 'menuitem', + 'nav', + 'noframes', + 'ol', + 'optgroup', + 'option', + 'p', + 'param', + 'search', + 'section', + 'summary', + 'table', + 'tbody', + 'td', + 'tfoot', + 'th', + 'thead', + 'title', + 'tr', + 'track', + 'ul' +] + +/** + * List of lowercase HTML “raw” tag names. + * + * The list, when parsing HTML (flow), results in HTML that can include lines + * without exiting, until a closing tag also in this list is found (condition + * 1). + * + * This module is copied from: + * . + * + * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. + */ +const htmlRawNames = ['pre', 'script', 'style', 'textarea'] + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-flow.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + +/** @type {Construct} */ +const htmlFlow = { + name: 'htmlFlow', + tokenize: tokenizeHtmlFlow, + resolveTo: resolveToHtmlFlow, + concrete: true +} + +/** @type {Construct} */ +const blankLineBefore = { + tokenize: tokenizeBlankLineBefore, + partial: true +} +const nonLazyContinuationStart = { + tokenize: tokenizeNonLazyContinuationStart, + partial: true +} + +/** @type {Resolver} */ +function resolveToHtmlFlow(events) { + let index = events.length + while (index--) { + if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { + break + } + } + if (index > 1 && events[index - 2][1].type === 'linePrefix') { + // Add the prefix start to the HTML token. + events[index][1].start = events[index - 2][1].start + // Add the prefix start to the HTML line token. + events[index + 1][1].start = events[index - 2][1].start + // Remove the line prefix. + events.splice(index - 2, 2) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlFlow(effects, ok, nok) { + const self = this + /** @type {number} */ + let marker + /** @type {boolean} */ + let closingTag + /** @type {string} */ + let buffer + /** @type {number} */ + let index + /** @type {Code} */ + let markerB + return start + + /** + * Start of HTML (flow). + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * At `<`, after optional whitespace. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('htmlFlow') + effects.enter('htmlFlowData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * > | + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + closingTag = true + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + marker = 3 + // To do: + // tokenizer.concrete = true + // To do: use `markdown-rs` style interrupt. + // While we’re in an instruction instead of a declaration, we’re on a `?` + // right now, so we do need to search for `>`, similar to declarations. + return self.interrupt ? ok : continuationDeclarationInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After ` | + * ^ + * > | + * ^ + * > | &<]]> + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + marker = 2 + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + marker = 5 + index = 0 + return cdataOpenInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + marker = 4 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After ` | + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After ` | &<]]> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + if (index === value.length) { + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return cdataOpenInside + } + return nok(code) + } + + /** + * After ` | + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * In tag name. + * + * ```markdown + * > | + * ^^ + * > | + * ^^ + * ``` + * + * @type {State} + */ + function tagName(code) { + if ( + code === null || + code === 47 || + code === 62 || + markdownLineEndingOrSpace(code) + ) { + const slash = code === 47 + const name = buffer.toLowerCase() + if (!slash && !closingTag && htmlRawNames.includes(name)) { + marker = 1 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + if (htmlBlockNames.includes(buffer.toLowerCase())) { + marker = 6 + if (slash) { + effects.consume(code) + return basicSelfClosing + } + + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + marker = 7 + // Do not support complete HTML when interrupting. + return self.interrupt && !self.parser.lazy[self.now().line] + ? nok(code) + : closingTag + ? completeClosingTagAfter(code) + : completeAttributeNameBefore(code) + } + + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + buffer += String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After closing slash of a basic tag name. + * + * ```markdown + * > |
    + * ^ + * ``` + * + * @type {State} + */ + function basicSelfClosing(code) { + if (code === 62) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return nok(code) + } + + /** + * After closing slash of a complete tag name. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeClosingTagAfter(code) { + if (markdownSpace(code)) { + effects.consume(code) + return completeClosingTagAfter + } + return completeEnd(code) + } + + /** + * At an attribute name. + * + * At first, this state is used after a complete tag name, after whitespace, + * where it expects optional attributes or the end of the tag. + * It is also reused after attributes, when expecting more optional + * attributes. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * > | + * ^ + * > | + * ^ + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameBefore(code) { + if (code === 47) { + effects.consume(code) + return completeEnd + } + + // ASCII alphanumerical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return completeAttributeName + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameBefore + } + return completeEnd(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeName(code) { + // ASCII alphanumerical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return completeAttributeName + } + return completeAttributeNameAfter(code) + } + + /** + * After attribute name, at an optional initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return completeAttributeValueBefore + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameAfter + } + return completeAttributeNameBefore(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + markerB = code + return completeAttributeValueQuoted + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeValueBefore + } + return completeAttributeValueUnquoted(code) + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuoted(code) { + if (code === markerB) { + effects.consume(code) + markerB = null + return completeAttributeValueQuotedAfter + } + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return completeAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 47 || + code === 60 || + code === 61 || + code === 62 || + code === 96 || + markdownLineEndingOrSpace(code) + ) { + return completeAttributeNameAfter(code) + } + effects.consume(code) + return completeAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the + * end of the tag. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownSpace(code)) { + return completeAttributeNameBefore(code) + } + return nok(code) + } + + /** + * In certain circumstances of a complete tag where only an `>` is allowed. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeEnd(code) { + if (code === 62) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * After `>` in a complete tag. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAfter(code) { + if (code === null || markdownLineEnding(code)) { + // // Do not form containers. + // tokenizer.concrete = true + return continuation(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * In continuation of any HTML kind. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function continuation(code) { + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationCommentInside + } + if (code === 60 && marker === 1) { + effects.consume(code) + return continuationRawTagOpen + } + if (code === 62 && marker === 4) { + effects.consume(code) + return continuationClose + } + if (code === 63 && marker === 3) { + effects.consume(code) + return continuationDeclarationInside + } + if (code === 93 && marker === 5) { + effects.consume(code) + return continuationCdataInside + } + if (markdownLineEnding(code) && (marker === 6 || marker === 7)) { + effects.exit('htmlFlowData') + return effects.check( + blankLineBefore, + continuationAfter, + continuationStart + )(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationStart(code) + } + effects.consume(code) + return continuation + } + + /** + * In continuation, at eol. + * + * ```markdown + * > | + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStart(code) { + return effects.check( + nonLazyContinuationStart, + continuationStartNonLazy, + continuationAfter + )(code) + } + + /** + * In continuation, at eol, before non-lazy content. + * + * ```markdown + * > | + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStartNonLazy(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return continuationBefore + } + + /** + * In continuation, before non-lazy content. + * + * ```markdown + * | + * > | asd + * ^ + * ``` + * + * @type {State} + */ + function continuationBefore(code) { + if (code === null || markdownLineEnding(code)) { + return continuationStart(code) + } + effects.enter('htmlFlowData') + return continuation(code) + } + + /** + * In comment continuation, after one `-`, expecting another. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function continuationCommentInside(code) { + if (code === 45) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In raw continuation, after `<`, at `/`. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function continuationRawTagOpen(code) { + if (code === 47) { + effects.consume(code) + buffer = '' + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In raw continuation, after ` | + * ^^^^^^ + * ``` + * + * @type {State} + */ + function continuationRawEndTag(code) { + if (code === 62) { + const name = buffer.toLowerCase() + if (htmlRawNames.includes(name)) { + effects.consume(code) + return continuationClose + } + return continuation(code) + } + if (asciiAlpha(code) && buffer.length < 8) { + effects.consume(code) + // @ts-expect-error: not null. + buffer += String.fromCharCode(code) + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In cdata continuation, after `]`, expecting `]>`. + * + * ```markdown + * > | &<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationCdataInside(code) { + if (code === 93) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In declaration or instruction continuation, at `>`. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * > | + * ^ + * > | + * ^ + * > | &<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationDeclarationInside(code) { + if (code === 62) { + effects.consume(code) + return continuationClose + } + + // More dashes. + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In closed continuation: everything we get until the eol/eof is part of it. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function continuationClose(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationAfter(code) + } + effects.consume(code) + return continuationClose + } + + /** + * Done. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function continuationAfter(code) { + effects.exit('htmlFlow') + // // Feel free to interrupt. + // tokenizer.interrupt = false + // // No longer concrete. + // tokenizer.concrete = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuationStart(effects, ok, nok) { + const self = this + return start + + /** + * At eol, before continuation. + * + * ```markdown + * > | * ```js + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return after + } + return nok(code) + } + + /** + * A continuation. + * + * ```markdown + * | * ```js + * > | b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLineBefore(effects, ok, nok) { + return start + + /** + * Before eol, expecting blank line. + * + * ```markdown + * > |
    + * ^ + * | + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return effects.attempt(blankLine, ok, nok) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-fenced.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const nonLazyContinuation = { + tokenize: tokenizeNonLazyContinuation, + partial: true +} + +/** @type {Construct} */ +const codeFenced = { + name: 'codeFenced', + tokenize: tokenizeCodeFenced, + concrete: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeFenced(effects, ok, nok) { + const self = this + /** @type {Construct} */ + const closeStart = { + tokenize: tokenizeCloseStart, + partial: true + } + let initialPrefix = 0 + let sizeOpen = 0 + /** @type {NonNullable} */ + let marker + return start + + /** + * Start of code. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse whitespace like `markdown-rs`. + return beforeSequenceOpen(code) + } + + /** + * In opening fence, after prefix, at sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeSequenceOpen(code) { + const tail = self.events[self.events.length - 1] + initialPrefix = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + marker = code + effects.enter('codeFenced') + effects.enter('codeFencedFence') + effects.enter('codeFencedFenceSequence') + return sequenceOpen(code) + } + + /** + * In opening fence sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === marker) { + sizeOpen++ + effects.consume(code) + return sequenceOpen + } + if (sizeOpen < 3) { + return nok(code) + } + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, infoBefore, 'whitespace')(code) + : infoBefore(code) + } + + /** + * In opening fence, after the sequence (and optional whitespace), before info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function infoBefore(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return self.interrupt + ? ok(code) + : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFencedFenceInfo') + effects.enter('chunkString', { + contentType: 'string' + }) + return info(code) + } + + /** + * In info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function info(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return infoBefore(code) + } + if (markdownSpace(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return factorySpace(effects, metaBefore, 'whitespace')(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return info + } + + /** + * In opening fence, after info and whitespace, before meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function metaBefore(code) { + if (code === null || markdownLineEnding(code)) { + return infoBefore(code) + } + effects.enter('codeFencedFenceMeta') + effects.enter('chunkString', { + contentType: 'string' + }) + return meta(code) + } + + /** + * In meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function meta(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceMeta') + return infoBefore(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return meta + } + + /** + * At eol/eof in code, before a non-lazy closing fence or content. + * + * ```markdown + * > | ~~~js + * ^ + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function atNonLazyBreak(code) { + return effects.attempt(closeStart, after, contentBefore)(code) + } + + /** + * Before code content, not a closing fence, at eol. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return contentStart + } + + /** + * Before code content, not a closing fence. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentStart(code) { + return initialPrefix > 0 && markdownSpace(code) + ? factorySpace( + effects, + beforeContentChunk, + 'linePrefix', + initialPrefix + 1 + )(code) + : beforeContentChunk(code) + } + + /** + * Before code content, after optional prefix. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeContentChunk(code) { + if (code === null || markdownLineEnding(code)) { + return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFlowValue') + return contentChunk(code) + } + + /** + * In code content. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^^^^^^^^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentChunk(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return beforeContentChunk(code) + } + effects.consume(code) + return contentChunk + } + + /** + * After code. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + effects.exit('codeFenced') + return ok(code) + } + + /** + * @this {TokenizeContext} + * @type {Tokenizer} + */ + function tokenizeCloseStart(effects, ok, nok) { + let size = 0 + return startBefore + + /** + * + * + * @type {State} + */ + function startBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return start + } + + /** + * Before closing fence, at optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Always populated by defaults. + + // To do: `enter` here or in next state? + effects.enter('codeFencedFence') + return markdownSpace(code) + ? factorySpace( + effects, + beforeSequenceClose, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : beforeSequenceClose(code) + } + + /** + * In closing fence, after optional whitespace, at sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function beforeSequenceClose(code) { + if (code === marker) { + effects.enter('codeFencedFenceSequence') + return sequenceClose(code) + } + return nok(code) + } + + /** + * In closing fence sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + if (code === marker) { + size++ + effects.consume(code) + return sequenceClose + } + if (size >= sizeOpen) { + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code) + : sequenceCloseAfter(code) + } + return nok(code) + } + + /** + * After closing fence sequence, after optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceCloseAfter(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return ok(code) + } + return nok(code) + } + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuation(effects, ok, nok) { + const self = this + return start + + /** + * + * + * @type {State} + */ + function start(code) { + if (code === null) { + return nok(code) + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineStart + } + + /** + * + * + * @type {State} + */ + function lineStart(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/character-entities/index.js +/** + * Map of named character references. + * + * @type {Record} + */ +const characterEntities = { + AElig: 'Æ', + AMP: '&', + Aacute: 'Á', + Abreve: 'Ă', + Acirc: 'Â', + Acy: 'А', + Afr: '𝔄', + Agrave: 'À', + Alpha: 'Α', + Amacr: 'Ā', + And: '⩓', + Aogon: 'Ą', + Aopf: '𝔸', + ApplyFunction: '⁡', + Aring: 'Å', + Ascr: '𝒜', + Assign: '≔', + Atilde: 'Ã', + Auml: 'Ä', + Backslash: '∖', + Barv: '⫧', + Barwed: '⌆', + Bcy: 'Б', + Because: '∵', + Bernoullis: 'ℬ', + Beta: 'Β', + Bfr: '𝔅', + Bopf: '𝔹', + Breve: '˘', + Bscr: 'ℬ', + Bumpeq: '≎', + CHcy: 'Ч', + COPY: '©', + Cacute: 'Ć', + Cap: '⋒', + CapitalDifferentialD: 'ⅅ', + Cayleys: 'ℭ', + Ccaron: 'Č', + Ccedil: 'Ç', + Ccirc: 'Ĉ', + Cconint: '∰', + Cdot: 'Ċ', + Cedilla: '¸', + CenterDot: '·', + Cfr: 'ℭ', + Chi: 'Χ', + CircleDot: '⊙', + CircleMinus: '⊖', + CirclePlus: '⊕', + CircleTimes: '⊗', + ClockwiseContourIntegral: '∲', + CloseCurlyDoubleQuote: '”', + CloseCurlyQuote: '’', + Colon: '∷', + Colone: '⩴', + Congruent: '≡', + Conint: '∯', + ContourIntegral: '∮', + Copf: 'ℂ', + Coproduct: '∐', + CounterClockwiseContourIntegral: '∳', + Cross: '⨯', + Cscr: '𝒞', + Cup: '⋓', + CupCap: '≍', + DD: 'ⅅ', + DDotrahd: '⤑', + DJcy: 'Ђ', + DScy: 'Ѕ', + DZcy: 'Џ', + Dagger: '‡', + Darr: '↡', + Dashv: '⫤', + Dcaron: 'Ď', + Dcy: 'Д', + Del: '∇', + Delta: 'Δ', + Dfr: '𝔇', + DiacriticalAcute: '´', + DiacriticalDot: '˙', + DiacriticalDoubleAcute: '˝', + DiacriticalGrave: '`', + DiacriticalTilde: '˜', + Diamond: '⋄', + DifferentialD: 'ⅆ', + Dopf: '𝔻', + Dot: '¨', + DotDot: '⃜', + DotEqual: '≐', + DoubleContourIntegral: '∯', + DoubleDot: '¨', + DoubleDownArrow: '⇓', + DoubleLeftArrow: '⇐', + DoubleLeftRightArrow: '⇔', + DoubleLeftTee: '⫤', + DoubleLongLeftArrow: '⟸', + DoubleLongLeftRightArrow: '⟺', + DoubleLongRightArrow: '⟹', + DoubleRightArrow: '⇒', + DoubleRightTee: '⊨', + DoubleUpArrow: '⇑', + DoubleUpDownArrow: '⇕', + DoubleVerticalBar: '∥', + DownArrow: '↓', + DownArrowBar: '⤓', + DownArrowUpArrow: '⇵', + DownBreve: '̑', + DownLeftRightVector: '⥐', + DownLeftTeeVector: '⥞', + DownLeftVector: '↽', + DownLeftVectorBar: '⥖', + DownRightTeeVector: '⥟', + DownRightVector: '⇁', + DownRightVectorBar: '⥗', + DownTee: '⊤', + DownTeeArrow: '↧', + Downarrow: '⇓', + Dscr: '𝒟', + Dstrok: 'Đ', + ENG: 'Ŋ', + ETH: 'Ð', + Eacute: 'É', + Ecaron: 'Ě', + Ecirc: 'Ê', + Ecy: 'Э', + Edot: 'Ė', + Efr: '𝔈', + Egrave: 'È', + Element: '∈', + Emacr: 'Ē', + EmptySmallSquare: '◻', + EmptyVerySmallSquare: '▫', + Eogon: 'Ę', + Eopf: '𝔼', + Epsilon: 'Ε', + Equal: '⩵', + EqualTilde: '≂', + Equilibrium: '⇌', + Escr: 'ℰ', + Esim: '⩳', + Eta: 'Η', + Euml: 'Ë', + Exists: '∃', + ExponentialE: 'ⅇ', + Fcy: 'Ф', + Ffr: '𝔉', + FilledSmallSquare: '◼', + FilledVerySmallSquare: '▪', + Fopf: '𝔽', + ForAll: '∀', + Fouriertrf: 'ℱ', + Fscr: 'ℱ', + GJcy: 'Ѓ', + GT: '>', + Gamma: 'Γ', + Gammad: 'Ϝ', + Gbreve: 'Ğ', + Gcedil: 'Ģ', + Gcirc: 'Ĝ', + Gcy: 'Г', + Gdot: 'Ġ', + Gfr: '𝔊', + Gg: '⋙', + Gopf: '𝔾', + GreaterEqual: '≥', + GreaterEqualLess: '⋛', + GreaterFullEqual: '≧', + GreaterGreater: '⪢', + GreaterLess: '≷', + GreaterSlantEqual: '⩾', + GreaterTilde: '≳', + Gscr: '𝒢', + Gt: '≫', + HARDcy: 'Ъ', + Hacek: 'ˇ', + Hat: '^', + Hcirc: 'Ĥ', + Hfr: 'ℌ', + HilbertSpace: 'ℋ', + Hopf: 'ℍ', + HorizontalLine: '─', + Hscr: 'ℋ', + Hstrok: 'Ħ', + HumpDownHump: '≎', + HumpEqual: '≏', + IEcy: 'Е', + IJlig: 'IJ', + IOcy: 'Ё', + Iacute: 'Í', + Icirc: 'Î', + Icy: 'И', + Idot: 'İ', + Ifr: 'ℑ', + Igrave: 'Ì', + Im: 'ℑ', + Imacr: 'Ī', + ImaginaryI: 'ⅈ', + Implies: '⇒', + Int: '∬', + Integral: '∫', + Intersection: '⋂', + InvisibleComma: '⁣', + InvisibleTimes: '⁢', + Iogon: 'Į', + Iopf: '𝕀', + Iota: 'Ι', + Iscr: 'ℐ', + Itilde: 'Ĩ', + Iukcy: 'І', + Iuml: 'Ï', + Jcirc: 'Ĵ', + Jcy: 'Й', + Jfr: '𝔍', + Jopf: '𝕁', + Jscr: '𝒥', + Jsercy: 'Ј', + Jukcy: 'Є', + KHcy: 'Х', + KJcy: 'Ќ', + Kappa: 'Κ', + Kcedil: 'Ķ', + Kcy: 'К', + Kfr: '𝔎', + Kopf: '𝕂', + Kscr: '𝒦', + LJcy: 'Љ', + LT: '<', + Lacute: 'Ĺ', + Lambda: 'Λ', + Lang: '⟪', + Laplacetrf: 'ℒ', + Larr: '↞', + Lcaron: 'Ľ', + Lcedil: 'Ļ', + Lcy: 'Л', + LeftAngleBracket: '⟨', + LeftArrow: '←', + LeftArrowBar: '⇤', + LeftArrowRightArrow: '⇆', + LeftCeiling: '⌈', + LeftDoubleBracket: '⟦', + LeftDownTeeVector: '⥡', + LeftDownVector: '⇃', + LeftDownVectorBar: '⥙', + LeftFloor: '⌊', + LeftRightArrow: '↔', + LeftRightVector: '⥎', + LeftTee: '⊣', + LeftTeeArrow: '↤', + LeftTeeVector: '⥚', + LeftTriangle: '⊲', + LeftTriangleBar: '⧏', + LeftTriangleEqual: '⊴', + LeftUpDownVector: '⥑', + LeftUpTeeVector: '⥠', + LeftUpVector: '↿', + LeftUpVectorBar: '⥘', + LeftVector: '↼', + LeftVectorBar: '⥒', + Leftarrow: '⇐', + Leftrightarrow: '⇔', + LessEqualGreater: '⋚', + LessFullEqual: '≦', + LessGreater: '≶', + LessLess: '⪡', + LessSlantEqual: '⩽', + LessTilde: '≲', + Lfr: '𝔏', + Ll: '⋘', + Lleftarrow: '⇚', + Lmidot: 'Ŀ', + LongLeftArrow: '⟵', + LongLeftRightArrow: '⟷', + LongRightArrow: '⟶', + Longleftarrow: '⟸', + Longleftrightarrow: '⟺', + Longrightarrow: '⟹', + Lopf: '𝕃', + LowerLeftArrow: '↙', + LowerRightArrow: '↘', + Lscr: 'ℒ', + Lsh: '↰', + Lstrok: 'Ł', + Lt: '≪', + Map: '⤅', + Mcy: 'М', + MediumSpace: ' ', + Mellintrf: 'ℳ', + Mfr: '𝔐', + MinusPlus: '∓', + Mopf: '𝕄', + Mscr: 'ℳ', + Mu: 'Μ', + NJcy: 'Њ', + Nacute: 'Ń', + Ncaron: 'Ň', + Ncedil: 'Ņ', + Ncy: 'Н', + NegativeMediumSpace: '​', + NegativeThickSpace: '​', + NegativeThinSpace: '​', + NegativeVeryThinSpace: '​', + NestedGreaterGreater: '≫', + NestedLessLess: '≪', + NewLine: '\n', + Nfr: '𝔑', + NoBreak: '⁠', + NonBreakingSpace: ' ', + Nopf: 'ℕ', + Not: '⫬', + NotCongruent: '≢', + NotCupCap: '≭', + NotDoubleVerticalBar: '∦', + NotElement: '∉', + NotEqual: '≠', + NotEqualTilde: '≂̸', + NotExists: '∄', + NotGreater: '≯', + NotGreaterEqual: '≱', + NotGreaterFullEqual: '≧̸', + NotGreaterGreater: '≫̸', + NotGreaterLess: '≹', + NotGreaterSlantEqual: '⩾̸', + NotGreaterTilde: '≵', + NotHumpDownHump: '≎̸', + NotHumpEqual: '≏̸', + NotLeftTriangle: '⋪', + NotLeftTriangleBar: '⧏̸', + NotLeftTriangleEqual: '⋬', + NotLess: '≮', + NotLessEqual: '≰', + NotLessGreater: '≸', + NotLessLess: '≪̸', + NotLessSlantEqual: '⩽̸', + NotLessTilde: '≴', + NotNestedGreaterGreater: '⪢̸', + NotNestedLessLess: '⪡̸', + NotPrecedes: '⊀', + NotPrecedesEqual: '⪯̸', + NotPrecedesSlantEqual: '⋠', + NotReverseElement: '∌', + NotRightTriangle: '⋫', + NotRightTriangleBar: '⧐̸', + NotRightTriangleEqual: '⋭', + NotSquareSubset: '⊏̸', + NotSquareSubsetEqual: '⋢', + NotSquareSuperset: '⊐̸', + NotSquareSupersetEqual: '⋣', + NotSubset: '⊂⃒', + NotSubsetEqual: '⊈', + NotSucceeds: '⊁', + NotSucceedsEqual: '⪰̸', + NotSucceedsSlantEqual: '⋡', + NotSucceedsTilde: '≿̸', + NotSuperset: '⊃⃒', + NotSupersetEqual: '⊉', + NotTilde: '≁', + NotTildeEqual: '≄', + NotTildeFullEqual: '≇', + NotTildeTilde: '≉', + NotVerticalBar: '∤', + Nscr: '𝒩', + Ntilde: 'Ñ', + Nu: 'Ν', + OElig: 'Œ', + Oacute: 'Ó', + Ocirc: 'Ô', + Ocy: 'О', + Odblac: 'Ő', + Ofr: '𝔒', + Ograve: 'Ò', + Omacr: 'Ō', + Omega: 'Ω', + Omicron: 'Ο', + Oopf: '𝕆', + OpenCurlyDoubleQuote: '“', + OpenCurlyQuote: '‘', + Or: '⩔', + Oscr: '𝒪', + Oslash: 'Ø', + Otilde: 'Õ', + Otimes: '⨷', + Ouml: 'Ö', + OverBar: '‾', + OverBrace: '⏞', + OverBracket: '⎴', + OverParenthesis: '⏜', + PartialD: '∂', + Pcy: 'П', + Pfr: '𝔓', + Phi: 'Φ', + Pi: 'Π', + PlusMinus: '±', + Poincareplane: 'ℌ', + Popf: 'ℙ', + Pr: '⪻', + Precedes: '≺', + PrecedesEqual: '⪯', + PrecedesSlantEqual: '≼', + PrecedesTilde: '≾', + Prime: '″', + Product: '∏', + Proportion: '∷', + Proportional: '∝', + Pscr: '𝒫', + Psi: 'Ψ', + QUOT: '"', + Qfr: '𝔔', + Qopf: 'ℚ', + Qscr: '𝒬', + RBarr: '⤐', + REG: '®', + Racute: 'Ŕ', + Rang: '⟫', + Rarr: '↠', + Rarrtl: '⤖', + Rcaron: 'Ř', + Rcedil: 'Ŗ', + Rcy: 'Р', + Re: 'ℜ', + ReverseElement: '∋', + ReverseEquilibrium: '⇋', + ReverseUpEquilibrium: '⥯', + Rfr: 'ℜ', + Rho: 'Ρ', + RightAngleBracket: '⟩', + RightArrow: '→', + RightArrowBar: '⇥', + RightArrowLeftArrow: '⇄', + RightCeiling: '⌉', + RightDoubleBracket: '⟧', + RightDownTeeVector: '⥝', + RightDownVector: '⇂', + RightDownVectorBar: '⥕', + RightFloor: '⌋', + RightTee: '⊢', + RightTeeArrow: '↦', + RightTeeVector: '⥛', + RightTriangle: '⊳', + RightTriangleBar: '⧐', + RightTriangleEqual: '⊵', + RightUpDownVector: '⥏', + RightUpTeeVector: '⥜', + RightUpVector: '↾', + RightUpVectorBar: '⥔', + RightVector: '⇀', + RightVectorBar: '⥓', + Rightarrow: '⇒', + Ropf: 'ℝ', + RoundImplies: '⥰', + Rrightarrow: '⇛', + Rscr: 'ℛ', + Rsh: '↱', + RuleDelayed: '⧴', + SHCHcy: 'Щ', + SHcy: 'Ш', + SOFTcy: 'Ь', + Sacute: 'Ś', + Sc: '⪼', + Scaron: 'Š', + Scedil: 'Ş', + Scirc: 'Ŝ', + Scy: 'С', + Sfr: '𝔖', + ShortDownArrow: '↓', + ShortLeftArrow: '←', + ShortRightArrow: '→', + ShortUpArrow: '↑', + Sigma: 'Σ', + SmallCircle: '∘', + Sopf: '𝕊', + Sqrt: '√', + Square: '□', + SquareIntersection: '⊓', + SquareSubset: '⊏', + SquareSubsetEqual: '⊑', + SquareSuperset: '⊐', + SquareSupersetEqual: '⊒', + SquareUnion: '⊔', + Sscr: '𝒮', + Star: '⋆', + Sub: '⋐', + Subset: '⋐', + SubsetEqual: '⊆', + Succeeds: '≻', + SucceedsEqual: '⪰', + SucceedsSlantEqual: '≽', + SucceedsTilde: '≿', + SuchThat: '∋', + Sum: '∑', + Sup: '⋑', + Superset: '⊃', + SupersetEqual: '⊇', + Supset: '⋑', + THORN: 'Þ', + TRADE: '™', + TSHcy: 'Ћ', + TScy: 'Ц', + Tab: '\t', + Tau: 'Τ', + Tcaron: 'Ť', + Tcedil: 'Ţ', + Tcy: 'Т', + Tfr: '𝔗', + Therefore: '∴', + Theta: 'Θ', + ThickSpace: '  ', + ThinSpace: ' ', + Tilde: '∼', + TildeEqual: '≃', + TildeFullEqual: '≅', + TildeTilde: '≈', + Topf: '𝕋', + TripleDot: '⃛', + Tscr: '𝒯', + Tstrok: 'Ŧ', + Uacute: 'Ú', + Uarr: '↟', + Uarrocir: '⥉', + Ubrcy: 'Ў', + Ubreve: 'Ŭ', + Ucirc: 'Û', + Ucy: 'У', + Udblac: 'Ű', + Ufr: '𝔘', + Ugrave: 'Ù', + Umacr: 'Ū', + UnderBar: '_', + UnderBrace: '⏟', + UnderBracket: '⎵', + UnderParenthesis: '⏝', + Union: '⋃', + UnionPlus: '⊎', + Uogon: 'Ų', + Uopf: '𝕌', + UpArrow: '↑', + UpArrowBar: '⤒', + UpArrowDownArrow: '⇅', + UpDownArrow: '↕', + UpEquilibrium: '⥮', + UpTee: '⊥', + UpTeeArrow: '↥', + Uparrow: '⇑', + Updownarrow: '⇕', + UpperLeftArrow: '↖', + UpperRightArrow: '↗', + Upsi: 'ϒ', + Upsilon: 'Υ', + Uring: 'Ů', + Uscr: '𝒰', + Utilde: 'Ũ', + Uuml: 'Ü', + VDash: '⊫', + Vbar: '⫫', + Vcy: 'В', + Vdash: '⊩', + Vdashl: '⫦', + Vee: '⋁', + Verbar: '‖', + Vert: '‖', + VerticalBar: '∣', + VerticalLine: '|', + VerticalSeparator: '❘', + VerticalTilde: '≀', + VeryThinSpace: ' ', + Vfr: '𝔙', + Vopf: '𝕍', + Vscr: '𝒱', + Vvdash: '⊪', + Wcirc: 'Ŵ', + Wedge: '⋀', + Wfr: '𝔚', + Wopf: '𝕎', + Wscr: '𝒲', + Xfr: '𝔛', + Xi: 'Ξ', + Xopf: '𝕏', + Xscr: '𝒳', + YAcy: 'Я', + YIcy: 'Ї', + YUcy: 'Ю', + Yacute: 'Ý', + Ycirc: 'Ŷ', + Ycy: 'Ы', + Yfr: '𝔜', + Yopf: '𝕐', + Yscr: '𝒴', + Yuml: 'Ÿ', + ZHcy: 'Ж', + Zacute: 'Ź', + Zcaron: 'Ž', + Zcy: 'З', + Zdot: 'Ż', + ZeroWidthSpace: '​', + Zeta: 'Ζ', + Zfr: 'ℨ', + Zopf: 'ℤ', + Zscr: '𝒵', + aacute: 'á', + abreve: 'ă', + ac: '∾', + acE: '∾̳', + acd: '∿', + acirc: 'â', + acute: '´', + acy: 'а', + aelig: 'æ', + af: '⁡', + afr: '𝔞', + agrave: 'à', + alefsym: 'ℵ', + aleph: 'ℵ', + alpha: 'α', + amacr: 'ā', + amalg: '⨿', + amp: '&', + and: '∧', + andand: '⩕', + andd: '⩜', + andslope: '⩘', + andv: '⩚', + ang: '∠', + ange: '⦤', + angle: '∠', + angmsd: '∡', + angmsdaa: '⦨', + angmsdab: '⦩', + angmsdac: '⦪', + angmsdad: '⦫', + angmsdae: '⦬', + angmsdaf: '⦭', + angmsdag: '⦮', + angmsdah: '⦯', + angrt: '∟', + angrtvb: '⊾', + angrtvbd: '⦝', + angsph: '∢', + angst: 'Å', + angzarr: '⍼', + aogon: 'ą', + aopf: '𝕒', + ap: '≈', + apE: '⩰', + apacir: '⩯', + ape: '≊', + apid: '≋', + apos: "'", + approx: '≈', + approxeq: '≊', + aring: 'å', + ascr: '𝒶', + ast: '*', + asymp: '≈', + asympeq: '≍', + atilde: 'ã', + auml: 'ä', + awconint: '∳', + awint: '⨑', + bNot: '⫭', + backcong: '≌', + backepsilon: '϶', + backprime: '‵', + backsim: '∽', + backsimeq: '⋍', + barvee: '⊽', + barwed: '⌅', + barwedge: '⌅', + bbrk: '⎵', + bbrktbrk: '⎶', + bcong: '≌', + bcy: 'б', + bdquo: '„', + becaus: '∵', + because: '∵', + bemptyv: '⦰', + bepsi: '϶', + bernou: 'ℬ', + beta: 'β', + beth: 'ℶ', + between: '≬', + bfr: '𝔟', + bigcap: '⋂', + bigcirc: '◯', + bigcup: '⋃', + bigodot: '⨀', + bigoplus: '⨁', + bigotimes: '⨂', + bigsqcup: '⨆', + bigstar: '★', + bigtriangledown: '▽', + bigtriangleup: '△', + biguplus: '⨄', + bigvee: '⋁', + bigwedge: '⋀', + bkarow: '⤍', + blacklozenge: '⧫', + blacksquare: '▪', + blacktriangle: '▴', + blacktriangledown: '▾', + blacktriangleleft: '◂', + blacktriangleright: '▸', + blank: '␣', + blk12: '▒', + blk14: '░', + blk34: '▓', + block: '█', + bne: '=⃥', + bnequiv: '≡⃥', + bnot: '⌐', + bopf: '𝕓', + bot: '⊥', + bottom: '⊥', + bowtie: '⋈', + boxDL: '╗', + boxDR: '╔', + boxDl: '╖', + boxDr: '╓', + boxH: '═', + boxHD: '╦', + boxHU: '╩', + boxHd: '╤', + boxHu: '╧', + boxUL: '╝', + boxUR: '╚', + boxUl: '╜', + boxUr: '╙', + boxV: '║', + boxVH: '╬', + boxVL: '╣', + boxVR: '╠', + boxVh: '╫', + boxVl: '╢', + boxVr: '╟', + boxbox: '⧉', + boxdL: '╕', + boxdR: '╒', + boxdl: '┐', + boxdr: '┌', + boxh: '─', + boxhD: '╥', + boxhU: '╨', + boxhd: '┬', + boxhu: '┴', + boxminus: '⊟', + boxplus: '⊞', + boxtimes: '⊠', + boxuL: '╛', + boxuR: '╘', + boxul: '┘', + boxur: '└', + boxv: '│', + boxvH: '╪', + boxvL: '╡', + boxvR: '╞', + boxvh: '┼', + boxvl: '┤', + boxvr: '├', + bprime: '‵', + breve: '˘', + brvbar: '¦', + bscr: '𝒷', + bsemi: '⁏', + bsim: '∽', + bsime: '⋍', + bsol: '\\', + bsolb: '⧅', + bsolhsub: '⟈', + bull: '•', + bullet: '•', + bump: '≎', + bumpE: '⪮', + bumpe: '≏', + bumpeq: '≏', + cacute: 'ć', + cap: '∩', + capand: '⩄', + capbrcup: '⩉', + capcap: '⩋', + capcup: '⩇', + capdot: '⩀', + caps: '∩︀', + caret: '⁁', + caron: 'ˇ', + ccaps: '⩍', + ccaron: 'č', + ccedil: 'ç', + ccirc: 'ĉ', + ccups: '⩌', + ccupssm: '⩐', + cdot: 'ċ', + cedil: '¸', + cemptyv: '⦲', + cent: '¢', + centerdot: '·', + cfr: '𝔠', + chcy: 'ч', + check: '✓', + checkmark: '✓', + chi: 'χ', + cir: '○', + cirE: '⧃', + circ: 'ˆ', + circeq: '≗', + circlearrowleft: '↺', + circlearrowright: '↻', + circledR: '®', + circledS: 'Ⓢ', + circledast: '⊛', + circledcirc: '⊚', + circleddash: '⊝', + cire: '≗', + cirfnint: '⨐', + cirmid: '⫯', + cirscir: '⧂', + clubs: '♣', + clubsuit: '♣', + colon: ':', + colone: '≔', + coloneq: '≔', + comma: ',', + commat: '@', + comp: '∁', + compfn: '∘', + complement: '∁', + complexes: 'ℂ', + cong: '≅', + congdot: '⩭', + conint: '∮', + copf: '𝕔', + coprod: '∐', + copy: '©', + copysr: '℗', + crarr: '↵', + cross: '✗', + cscr: '𝒸', + csub: '⫏', + csube: '⫑', + csup: '⫐', + csupe: '⫒', + ctdot: '⋯', + cudarrl: '⤸', + cudarrr: '⤵', + cuepr: '⋞', + cuesc: '⋟', + cularr: '↶', + cularrp: '⤽', + cup: '∪', + cupbrcap: '⩈', + cupcap: '⩆', + cupcup: '⩊', + cupdot: '⊍', + cupor: '⩅', + cups: '∪︀', + curarr: '↷', + curarrm: '⤼', + curlyeqprec: '⋞', + curlyeqsucc: '⋟', + curlyvee: '⋎', + curlywedge: '⋏', + curren: '¤', + curvearrowleft: '↶', + curvearrowright: '↷', + cuvee: '⋎', + cuwed: '⋏', + cwconint: '∲', + cwint: '∱', + cylcty: '⌭', + dArr: '⇓', + dHar: '⥥', + dagger: '†', + daleth: 'ℸ', + darr: '↓', + dash: '‐', + dashv: '⊣', + dbkarow: '⤏', + dblac: '˝', + dcaron: 'ď', + dcy: 'д', + dd: 'ⅆ', + ddagger: '‡', + ddarr: '⇊', + ddotseq: '⩷', + deg: '°', + delta: 'δ', + demptyv: '⦱', + dfisht: '⥿', + dfr: '𝔡', + dharl: '⇃', + dharr: '⇂', + diam: '⋄', + diamond: '⋄', + diamondsuit: '♦', + diams: '♦', + die: '¨', + digamma: 'ϝ', + disin: '⋲', + div: '÷', + divide: '÷', + divideontimes: '⋇', + divonx: '⋇', + djcy: 'ђ', + dlcorn: '⌞', + dlcrop: '⌍', + dollar: '$', + dopf: '𝕕', + dot: '˙', + doteq: '≐', + doteqdot: '≑', + dotminus: '∸', + dotplus: '∔', + dotsquare: '⊡', + doublebarwedge: '⌆', + downarrow: '↓', + downdownarrows: '⇊', + downharpoonleft: '⇃', + downharpoonright: '⇂', + drbkarow: '⤐', + drcorn: '⌟', + drcrop: '⌌', + dscr: '𝒹', + dscy: 'ѕ', + dsol: '⧶', + dstrok: 'đ', + dtdot: '⋱', + dtri: '▿', + dtrif: '▾', + duarr: '⇵', + duhar: '⥯', + dwangle: '⦦', + dzcy: 'џ', + dzigrarr: '⟿', + eDDot: '⩷', + eDot: '≑', + eacute: 'é', + easter: '⩮', + ecaron: 'ě', + ecir: '≖', + ecirc: 'ê', + ecolon: '≕', + ecy: 'э', + edot: 'ė', + ee: 'ⅇ', + efDot: '≒', + efr: '𝔢', + eg: '⪚', + egrave: 'è', + egs: '⪖', + egsdot: '⪘', + el: '⪙', + elinters: '⏧', + ell: 'ℓ', + els: '⪕', + elsdot: '⪗', + emacr: 'ē', + empty: '∅', + emptyset: '∅', + emptyv: '∅', + emsp13: ' ', + emsp14: ' ', + emsp: ' ', + eng: 'ŋ', + ensp: ' ', + eogon: 'ę', + eopf: '𝕖', + epar: '⋕', + eparsl: '⧣', + eplus: '⩱', + epsi: 'ε', + epsilon: 'ε', + epsiv: 'ϵ', + eqcirc: '≖', + eqcolon: '≕', + eqsim: '≂', + eqslantgtr: '⪖', + eqslantless: '⪕', + equals: '=', + equest: '≟', + equiv: '≡', + equivDD: '⩸', + eqvparsl: '⧥', + erDot: '≓', + erarr: '⥱', + escr: 'ℯ', + esdot: '≐', + esim: '≂', + eta: 'η', + eth: 'ð', + euml: 'ë', + euro: '€', + excl: '!', + exist: '∃', + expectation: 'ℰ', + exponentiale: 'ⅇ', + fallingdotseq: '≒', + fcy: 'ф', + female: '♀', + ffilig: 'ffi', + fflig: 'ff', + ffllig: 'ffl', + ffr: '𝔣', + filig: 'fi', + fjlig: 'fj', + flat: '♭', + fllig: 'fl', + fltns: '▱', + fnof: 'ƒ', + fopf: '𝕗', + forall: '∀', + fork: '⋔', + forkv: '⫙', + fpartint: '⨍', + frac12: '½', + frac13: '⅓', + frac14: '¼', + frac15: '⅕', + frac16: '⅙', + frac18: '⅛', + frac23: '⅔', + frac25: '⅖', + frac34: '¾', + frac35: '⅗', + frac38: '⅜', + frac45: '⅘', + frac56: '⅚', + frac58: '⅝', + frac78: '⅞', + frasl: '⁄', + frown: '⌢', + fscr: '𝒻', + gE: '≧', + gEl: '⪌', + gacute: 'ǵ', + gamma: 'γ', + gammad: 'ϝ', + gap: '⪆', + gbreve: 'ğ', + gcirc: 'ĝ', + gcy: 'г', + gdot: 'ġ', + ge: '≥', + gel: '⋛', + geq: '≥', + geqq: '≧', + geqslant: '⩾', + ges: '⩾', + gescc: '⪩', + gesdot: '⪀', + gesdoto: '⪂', + gesdotol: '⪄', + gesl: '⋛︀', + gesles: '⪔', + gfr: '𝔤', + gg: '≫', + ggg: '⋙', + gimel: 'ℷ', + gjcy: 'ѓ', + gl: '≷', + glE: '⪒', + gla: '⪥', + glj: '⪤', + gnE: '≩', + gnap: '⪊', + gnapprox: '⪊', + gne: '⪈', + gneq: '⪈', + gneqq: '≩', + gnsim: '⋧', + gopf: '𝕘', + grave: '`', + gscr: 'ℊ', + gsim: '≳', + gsime: '⪎', + gsiml: '⪐', + gt: '>', + gtcc: '⪧', + gtcir: '⩺', + gtdot: '⋗', + gtlPar: '⦕', + gtquest: '⩼', + gtrapprox: '⪆', + gtrarr: '⥸', + gtrdot: '⋗', + gtreqless: '⋛', + gtreqqless: '⪌', + gtrless: '≷', + gtrsim: '≳', + gvertneqq: '≩︀', + gvnE: '≩︀', + hArr: '⇔', + hairsp: ' ', + half: '½', + hamilt: 'ℋ', + hardcy: 'ъ', + harr: '↔', + harrcir: '⥈', + harrw: '↭', + hbar: 'ℏ', + hcirc: 'ĥ', + hearts: '♥', + heartsuit: '♥', + hellip: '…', + hercon: '⊹', + hfr: '𝔥', + hksearow: '⤥', + hkswarow: '⤦', + hoarr: '⇿', + homtht: '∻', + hookleftarrow: '↩', + hookrightarrow: '↪', + hopf: '𝕙', + horbar: '―', + hscr: '𝒽', + hslash: 'ℏ', + hstrok: 'ħ', + hybull: '⁃', + hyphen: '‐', + iacute: 'í', + ic: '⁣', + icirc: 'î', + icy: 'и', + iecy: 'е', + iexcl: '¡', + iff: '⇔', + ifr: '𝔦', + igrave: 'ì', + ii: 'ⅈ', + iiiint: '⨌', + iiint: '∭', + iinfin: '⧜', + iiota: '℩', + ijlig: 'ij', + imacr: 'ī', + image: 'ℑ', + imagline: 'ℐ', + imagpart: 'ℑ', + imath: 'ı', + imof: '⊷', + imped: 'Ƶ', + in: '∈', + incare: '℅', + infin: '∞', + infintie: '⧝', + inodot: 'ı', + int: '∫', + intcal: '⊺', + integers: 'ℤ', + intercal: '⊺', + intlarhk: '⨗', + intprod: '⨼', + iocy: 'ё', + iogon: 'į', + iopf: '𝕚', + iota: 'ι', + iprod: '⨼', + iquest: '¿', + iscr: '𝒾', + isin: '∈', + isinE: '⋹', + isindot: '⋵', + isins: '⋴', + isinsv: '⋳', + isinv: '∈', + it: '⁢', + itilde: 'ĩ', + iukcy: 'і', + iuml: 'ï', + jcirc: 'ĵ', + jcy: 'й', + jfr: '𝔧', + jmath: 'ȷ', + jopf: '𝕛', + jscr: '𝒿', + jsercy: 'ј', + jukcy: 'є', + kappa: 'κ', + kappav: 'ϰ', + kcedil: 'ķ', + kcy: 'к', + kfr: '𝔨', + kgreen: 'ĸ', + khcy: 'х', + kjcy: 'ќ', + kopf: '𝕜', + kscr: '𝓀', + lAarr: '⇚', + lArr: '⇐', + lAtail: '⤛', + lBarr: '⤎', + lE: '≦', + lEg: '⪋', + lHar: '⥢', + lacute: 'ĺ', + laemptyv: '⦴', + lagran: 'ℒ', + lambda: 'λ', + lang: '⟨', + langd: '⦑', + langle: '⟨', + lap: '⪅', + laquo: '«', + larr: '←', + larrb: '⇤', + larrbfs: '⤟', + larrfs: '⤝', + larrhk: '↩', + larrlp: '↫', + larrpl: '⤹', + larrsim: '⥳', + larrtl: '↢', + lat: '⪫', + latail: '⤙', + late: '⪭', + lates: '⪭︀', + lbarr: '⤌', + lbbrk: '❲', + lbrace: '{', + lbrack: '[', + lbrke: '⦋', + lbrksld: '⦏', + lbrkslu: '⦍', + lcaron: 'ľ', + lcedil: 'ļ', + lceil: '⌈', + lcub: '{', + lcy: 'л', + ldca: '⤶', + ldquo: '“', + ldquor: '„', + ldrdhar: '⥧', + ldrushar: '⥋', + ldsh: '↲', + le: '≤', + leftarrow: '←', + leftarrowtail: '↢', + leftharpoondown: '↽', + leftharpoonup: '↼', + leftleftarrows: '⇇', + leftrightarrow: '↔', + leftrightarrows: '⇆', + leftrightharpoons: '⇋', + leftrightsquigarrow: '↭', + leftthreetimes: '⋋', + leg: '⋚', + leq: '≤', + leqq: '≦', + leqslant: '⩽', + les: '⩽', + lescc: '⪨', + lesdot: '⩿', + lesdoto: '⪁', + lesdotor: '⪃', + lesg: '⋚︀', + lesges: '⪓', + lessapprox: '⪅', + lessdot: '⋖', + lesseqgtr: '⋚', + lesseqqgtr: '⪋', + lessgtr: '≶', + lesssim: '≲', + lfisht: '⥼', + lfloor: '⌊', + lfr: '𝔩', + lg: '≶', + lgE: '⪑', + lhard: '↽', + lharu: '↼', + lharul: '⥪', + lhblk: '▄', + ljcy: 'љ', + ll: '≪', + llarr: '⇇', + llcorner: '⌞', + llhard: '⥫', + lltri: '◺', + lmidot: 'ŀ', + lmoust: '⎰', + lmoustache: '⎰', + lnE: '≨', + lnap: '⪉', + lnapprox: '⪉', + lne: '⪇', + lneq: '⪇', + lneqq: '≨', + lnsim: '⋦', + loang: '⟬', + loarr: '⇽', + lobrk: '⟦', + longleftarrow: '⟵', + longleftrightarrow: '⟷', + longmapsto: '⟼', + longrightarrow: '⟶', + looparrowleft: '↫', + looparrowright: '↬', + lopar: '⦅', + lopf: '𝕝', + loplus: '⨭', + lotimes: '⨴', + lowast: '∗', + lowbar: '_', + loz: '◊', + lozenge: '◊', + lozf: '⧫', + lpar: '(', + lparlt: '⦓', + lrarr: '⇆', + lrcorner: '⌟', + lrhar: '⇋', + lrhard: '⥭', + lrm: '‎', + lrtri: '⊿', + lsaquo: '‹', + lscr: '𝓁', + lsh: '↰', + lsim: '≲', + lsime: '⪍', + lsimg: '⪏', + lsqb: '[', + lsquo: '‘', + lsquor: '‚', + lstrok: 'ł', + lt: '<', + ltcc: '⪦', + ltcir: '⩹', + ltdot: '⋖', + lthree: '⋋', + ltimes: '⋉', + ltlarr: '⥶', + ltquest: '⩻', + ltrPar: '⦖', + ltri: '◃', + ltrie: '⊴', + ltrif: '◂', + lurdshar: '⥊', + luruhar: '⥦', + lvertneqq: '≨︀', + lvnE: '≨︀', + mDDot: '∺', + macr: '¯', + male: '♂', + malt: '✠', + maltese: '✠', + map: '↦', + mapsto: '↦', + mapstodown: '↧', + mapstoleft: '↤', + mapstoup: '↥', + marker: '▮', + mcomma: '⨩', + mcy: 'м', + mdash: '—', + measuredangle: '∡', + mfr: '𝔪', + mho: '℧', + micro: 'µ', + mid: '∣', + midast: '*', + midcir: '⫰', + middot: '·', + minus: '−', + minusb: '⊟', + minusd: '∸', + minusdu: '⨪', + mlcp: '⫛', + mldr: '…', + mnplus: '∓', + models: '⊧', + mopf: '𝕞', + mp: '∓', + mscr: '𝓂', + mstpos: '∾', + mu: 'μ', + multimap: '⊸', + mumap: '⊸', + nGg: '⋙̸', + nGt: '≫⃒', + nGtv: '≫̸', + nLeftarrow: '⇍', + nLeftrightarrow: '⇎', + nLl: '⋘̸', + nLt: '≪⃒', + nLtv: '≪̸', + nRightarrow: '⇏', + nVDash: '⊯', + nVdash: '⊮', + nabla: '∇', + nacute: 'ń', + nang: '∠⃒', + nap: '≉', + napE: '⩰̸', + napid: '≋̸', + napos: 'ʼn', + napprox: '≉', + natur: '♮', + natural: '♮', + naturals: 'ℕ', + nbsp: ' ', + nbump: '≎̸', + nbumpe: '≏̸', + ncap: '⩃', + ncaron: 'ň', + ncedil: 'ņ', + ncong: '≇', + ncongdot: '⩭̸', + ncup: '⩂', + ncy: 'н', + ndash: '–', + ne: '≠', + neArr: '⇗', + nearhk: '⤤', + nearr: '↗', + nearrow: '↗', + nedot: '≐̸', + nequiv: '≢', + nesear: '⤨', + nesim: '≂̸', + nexist: '∄', + nexists: '∄', + nfr: '𝔫', + ngE: '≧̸', + nge: '≱', + ngeq: '≱', + ngeqq: '≧̸', + ngeqslant: '⩾̸', + nges: '⩾̸', + ngsim: '≵', + ngt: '≯', + ngtr: '≯', + nhArr: '⇎', + nharr: '↮', + nhpar: '⫲', + ni: '∋', + nis: '⋼', + nisd: '⋺', + niv: '∋', + njcy: 'њ', + nlArr: '⇍', + nlE: '≦̸', + nlarr: '↚', + nldr: '‥', + nle: '≰', + nleftarrow: '↚', + nleftrightarrow: '↮', + nleq: '≰', + nleqq: '≦̸', + nleqslant: '⩽̸', + nles: '⩽̸', + nless: '≮', + nlsim: '≴', + nlt: '≮', + nltri: '⋪', + nltrie: '⋬', + nmid: '∤', + nopf: '𝕟', + not: '¬', + notin: '∉', + notinE: '⋹̸', + notindot: '⋵̸', + notinva: '∉', + notinvb: '⋷', + notinvc: '⋶', + notni: '∌', + notniva: '∌', + notnivb: '⋾', + notnivc: '⋽', + npar: '∦', + nparallel: '∦', + nparsl: '⫽⃥', + npart: '∂̸', + npolint: '⨔', + npr: '⊀', + nprcue: '⋠', + npre: '⪯̸', + nprec: '⊀', + npreceq: '⪯̸', + nrArr: '⇏', + nrarr: '↛', + nrarrc: '⤳̸', + nrarrw: '↝̸', + nrightarrow: '↛', + nrtri: '⋫', + nrtrie: '⋭', + nsc: '⊁', + nsccue: '⋡', + nsce: '⪰̸', + nscr: '𝓃', + nshortmid: '∤', + nshortparallel: '∦', + nsim: '≁', + nsime: '≄', + nsimeq: '≄', + nsmid: '∤', + nspar: '∦', + nsqsube: '⋢', + nsqsupe: '⋣', + nsub: '⊄', + nsubE: '⫅̸', + nsube: '⊈', + nsubset: '⊂⃒', + nsubseteq: '⊈', + nsubseteqq: '⫅̸', + nsucc: '⊁', + nsucceq: '⪰̸', + nsup: '⊅', + nsupE: '⫆̸', + nsupe: '⊉', + nsupset: '⊃⃒', + nsupseteq: '⊉', + nsupseteqq: '⫆̸', + ntgl: '≹', + ntilde: 'ñ', + ntlg: '≸', + ntriangleleft: '⋪', + ntrianglelefteq: '⋬', + ntriangleright: '⋫', + ntrianglerighteq: '⋭', + nu: 'ν', + num: '#', + numero: '№', + numsp: ' ', + nvDash: '⊭', + nvHarr: '⤄', + nvap: '≍⃒', + nvdash: '⊬', + nvge: '≥⃒', + nvgt: '>⃒', + nvinfin: '⧞', + nvlArr: '⤂', + nvle: '≤⃒', + nvlt: '<⃒', + nvltrie: '⊴⃒', + nvrArr: '⤃', + nvrtrie: '⊵⃒', + nvsim: '∼⃒', + nwArr: '⇖', + nwarhk: '⤣', + nwarr: '↖', + nwarrow: '↖', + nwnear: '⤧', + oS: 'Ⓢ', + oacute: 'ó', + oast: '⊛', + ocir: '⊚', + ocirc: 'ô', + ocy: 'о', + odash: '⊝', + odblac: 'ő', + odiv: '⨸', + odot: '⊙', + odsold: '⦼', + oelig: 'œ', + ofcir: '⦿', + ofr: '𝔬', + ogon: '˛', + ograve: 'ò', + ogt: '⧁', + ohbar: '⦵', + ohm: 'Ω', + oint: '∮', + olarr: '↺', + olcir: '⦾', + olcross: '⦻', + oline: '‾', + olt: '⧀', + omacr: 'ō', + omega: 'ω', + omicron: 'ο', + omid: '⦶', + ominus: '⊖', + oopf: '𝕠', + opar: '⦷', + operp: '⦹', + oplus: '⊕', + or: '∨', + orarr: '↻', + ord: '⩝', + order: 'ℴ', + orderof: 'ℴ', + ordf: 'ª', + ordm: 'º', + origof: '⊶', + oror: '⩖', + orslope: '⩗', + orv: '⩛', + oscr: 'ℴ', + oslash: 'ø', + osol: '⊘', + otilde: 'õ', + otimes: '⊗', + otimesas: '⨶', + ouml: 'ö', + ovbar: '⌽', + par: '∥', + para: '¶', + parallel: '∥', + parsim: '⫳', + parsl: '⫽', + part: '∂', + pcy: 'п', + percnt: '%', + period: '.', + permil: '‰', + perp: '⊥', + pertenk: '‱', + pfr: '𝔭', + phi: 'φ', + phiv: 'ϕ', + phmmat: 'ℳ', + phone: '☎', + pi: 'π', + pitchfork: '⋔', + piv: 'ϖ', + planck: 'ℏ', + planckh: 'ℎ', + plankv: 'ℏ', + plus: '+', + plusacir: '⨣', + plusb: '⊞', + pluscir: '⨢', + plusdo: '∔', + plusdu: '⨥', + pluse: '⩲', + plusmn: '±', + plussim: '⨦', + plustwo: '⨧', + pm: '±', + pointint: '⨕', + popf: '𝕡', + pound: '£', + pr: '≺', + prE: '⪳', + prap: '⪷', + prcue: '≼', + pre: '⪯', + prec: '≺', + precapprox: '⪷', + preccurlyeq: '≼', + preceq: '⪯', + precnapprox: '⪹', + precneqq: '⪵', + precnsim: '⋨', + precsim: '≾', + prime: '′', + primes: 'ℙ', + prnE: '⪵', + prnap: '⪹', + prnsim: '⋨', + prod: '∏', + profalar: '⌮', + profline: '⌒', + profsurf: '⌓', + prop: '∝', + propto: '∝', + prsim: '≾', + prurel: '⊰', + pscr: '𝓅', + psi: 'ψ', + puncsp: ' ', + qfr: '𝔮', + qint: '⨌', + qopf: '𝕢', + qprime: '⁗', + qscr: '𝓆', + quaternions: 'ℍ', + quatint: '⨖', + quest: '?', + questeq: '≟', + quot: '"', + rAarr: '⇛', + rArr: '⇒', + rAtail: '⤜', + rBarr: '⤏', + rHar: '⥤', + race: '∽̱', + racute: 'ŕ', + radic: '√', + raemptyv: '⦳', + rang: '⟩', + rangd: '⦒', + range: '⦥', + rangle: '⟩', + raquo: '»', + rarr: '→', + rarrap: '⥵', + rarrb: '⇥', + rarrbfs: '⤠', + rarrc: '⤳', + rarrfs: '⤞', + rarrhk: '↪', + rarrlp: '↬', + rarrpl: '⥅', + rarrsim: '⥴', + rarrtl: '↣', + rarrw: '↝', + ratail: '⤚', + ratio: '∶', + rationals: 'ℚ', + rbarr: '⤍', + rbbrk: '❳', + rbrace: '}', + rbrack: ']', + rbrke: '⦌', + rbrksld: '⦎', + rbrkslu: '⦐', + rcaron: 'ř', + rcedil: 'ŗ', + rceil: '⌉', + rcub: '}', + rcy: 'р', + rdca: '⤷', + rdldhar: '⥩', + rdquo: '”', + rdquor: '”', + rdsh: '↳', + real: 'ℜ', + realine: 'ℛ', + realpart: 'ℜ', + reals: 'ℝ', + rect: '▭', + reg: '®', + rfisht: '⥽', + rfloor: '⌋', + rfr: '𝔯', + rhard: '⇁', + rharu: '⇀', + rharul: '⥬', + rho: 'ρ', + rhov: 'ϱ', + rightarrow: '→', + rightarrowtail: '↣', + rightharpoondown: '⇁', + rightharpoonup: '⇀', + rightleftarrows: '⇄', + rightleftharpoons: '⇌', + rightrightarrows: '⇉', + rightsquigarrow: '↝', + rightthreetimes: '⋌', + ring: '˚', + risingdotseq: '≓', + rlarr: '⇄', + rlhar: '⇌', + rlm: '‏', + rmoust: '⎱', + rmoustache: '⎱', + rnmid: '⫮', + roang: '⟭', + roarr: '⇾', + robrk: '⟧', + ropar: '⦆', + ropf: '𝕣', + roplus: '⨮', + rotimes: '⨵', + rpar: ')', + rpargt: '⦔', + rppolint: '⨒', + rrarr: '⇉', + rsaquo: '›', + rscr: '𝓇', + rsh: '↱', + rsqb: ']', + rsquo: '’', + rsquor: '’', + rthree: '⋌', + rtimes: '⋊', + rtri: '▹', + rtrie: '⊵', + rtrif: '▸', + rtriltri: '⧎', + ruluhar: '⥨', + rx: '℞', + sacute: 'ś', + sbquo: '‚', + sc: '≻', + scE: '⪴', + scap: '⪸', + scaron: 'š', + sccue: '≽', + sce: '⪰', + scedil: 'ş', + scirc: 'ŝ', + scnE: '⪶', + scnap: '⪺', + scnsim: '⋩', + scpolint: '⨓', + scsim: '≿', + scy: 'с', + sdot: '⋅', + sdotb: '⊡', + sdote: '⩦', + seArr: '⇘', + searhk: '⤥', + searr: '↘', + searrow: '↘', + sect: '§', + semi: ';', + seswar: '⤩', + setminus: '∖', + setmn: '∖', + sext: '✶', + sfr: '𝔰', + sfrown: '⌢', + sharp: '♯', + shchcy: 'щ', + shcy: 'ш', + shortmid: '∣', + shortparallel: '∥', + shy: '­', + sigma: 'σ', + sigmaf: 'ς', + sigmav: 'ς', + sim: '∼', + simdot: '⩪', + sime: '≃', + simeq: '≃', + simg: '⪞', + simgE: '⪠', + siml: '⪝', + simlE: '⪟', + simne: '≆', + simplus: '⨤', + simrarr: '⥲', + slarr: '←', + smallsetminus: '∖', + smashp: '⨳', + smeparsl: '⧤', + smid: '∣', + smile: '⌣', + smt: '⪪', + smte: '⪬', + smtes: '⪬︀', + softcy: 'ь', + sol: '/', + solb: '⧄', + solbar: '⌿', + sopf: '𝕤', + spades: '♠', + spadesuit: '♠', + spar: '∥', + sqcap: '⊓', + sqcaps: '⊓︀', + sqcup: '⊔', + sqcups: '⊔︀', + sqsub: '⊏', + sqsube: '⊑', + sqsubset: '⊏', + sqsubseteq: '⊑', + sqsup: '⊐', + sqsupe: '⊒', + sqsupset: '⊐', + sqsupseteq: '⊒', + squ: '□', + square: '□', + squarf: '▪', + squf: '▪', + srarr: '→', + sscr: '𝓈', + ssetmn: '∖', + ssmile: '⌣', + sstarf: '⋆', + star: '☆', + starf: '★', + straightepsilon: 'ϵ', + straightphi: 'ϕ', + strns: '¯', + sub: '⊂', + subE: '⫅', + subdot: '⪽', + sube: '⊆', + subedot: '⫃', + submult: '⫁', + subnE: '⫋', + subne: '⊊', + subplus: '⪿', + subrarr: '⥹', + subset: '⊂', + subseteq: '⊆', + subseteqq: '⫅', + subsetneq: '⊊', + subsetneqq: '⫋', + subsim: '⫇', + subsub: '⫕', + subsup: '⫓', + succ: '≻', + succapprox: '⪸', + succcurlyeq: '≽', + succeq: '⪰', + succnapprox: '⪺', + succneqq: '⪶', + succnsim: '⋩', + succsim: '≿', + sum: '∑', + sung: '♪', + sup1: '¹', + sup2: '²', + sup3: '³', + sup: '⊃', + supE: '⫆', + supdot: '⪾', + supdsub: '⫘', + supe: '⊇', + supedot: '⫄', + suphsol: '⟉', + suphsub: '⫗', + suplarr: '⥻', + supmult: '⫂', + supnE: '⫌', + supne: '⊋', + supplus: '⫀', + supset: '⊃', + supseteq: '⊇', + supseteqq: '⫆', + supsetneq: '⊋', + supsetneqq: '⫌', + supsim: '⫈', + supsub: '⫔', + supsup: '⫖', + swArr: '⇙', + swarhk: '⤦', + swarr: '↙', + swarrow: '↙', + swnwar: '⤪', + szlig: 'ß', + target: '⌖', + tau: 'τ', + tbrk: '⎴', + tcaron: 'ť', + tcedil: 'ţ', + tcy: 'т', + tdot: '⃛', + telrec: '⌕', + tfr: '𝔱', + there4: '∴', + therefore: '∴', + theta: 'θ', + thetasym: 'ϑ', + thetav: 'ϑ', + thickapprox: '≈', + thicksim: '∼', + thinsp: ' ', + thkap: '≈', + thksim: '∼', + thorn: 'þ', + tilde: '˜', + times: '×', + timesb: '⊠', + timesbar: '⨱', + timesd: '⨰', + tint: '∭', + toea: '⤨', + top: '⊤', + topbot: '⌶', + topcir: '⫱', + topf: '𝕥', + topfork: '⫚', + tosa: '⤩', + tprime: '‴', + trade: '™', + triangle: '▵', + triangledown: '▿', + triangleleft: '◃', + trianglelefteq: '⊴', + triangleq: '≜', + triangleright: '▹', + trianglerighteq: '⊵', + tridot: '◬', + trie: '≜', + triminus: '⨺', + triplus: '⨹', + trisb: '⧍', + tritime: '⨻', + trpezium: '⏢', + tscr: '𝓉', + tscy: 'ц', + tshcy: 'ћ', + tstrok: 'ŧ', + twixt: '≬', + twoheadleftarrow: '↞', + twoheadrightarrow: '↠', + uArr: '⇑', + uHar: '⥣', + uacute: 'ú', + uarr: '↑', + ubrcy: 'ў', + ubreve: 'ŭ', + ucirc: 'û', + ucy: 'у', + udarr: '⇅', + udblac: 'ű', + udhar: '⥮', + ufisht: '⥾', + ufr: '𝔲', + ugrave: 'ù', + uharl: '↿', + uharr: '↾', + uhblk: '▀', + ulcorn: '⌜', + ulcorner: '⌜', + ulcrop: '⌏', + ultri: '◸', + umacr: 'ū', + uml: '¨', + uogon: 'ų', + uopf: '𝕦', + uparrow: '↑', + updownarrow: '↕', + upharpoonleft: '↿', + upharpoonright: '↾', + uplus: '⊎', + upsi: 'υ', + upsih: 'ϒ', + upsilon: 'υ', + upuparrows: '⇈', + urcorn: '⌝', + urcorner: '⌝', + urcrop: '⌎', + uring: 'ů', + urtri: '◹', + uscr: '𝓊', + utdot: '⋰', + utilde: 'ũ', + utri: '▵', + utrif: '▴', + uuarr: '⇈', + uuml: 'ü', + uwangle: '⦧', + vArr: '⇕', + vBar: '⫨', + vBarv: '⫩', + vDash: '⊨', + vangrt: '⦜', + varepsilon: 'ϵ', + varkappa: 'ϰ', + varnothing: '∅', + varphi: 'ϕ', + varpi: 'ϖ', + varpropto: '∝', + varr: '↕', + varrho: 'ϱ', + varsigma: 'ς', + varsubsetneq: '⊊︀', + varsubsetneqq: '⫋︀', + varsupsetneq: '⊋︀', + varsupsetneqq: '⫌︀', + vartheta: 'ϑ', + vartriangleleft: '⊲', + vartriangleright: '⊳', + vcy: 'в', + vdash: '⊢', + vee: '∨', + veebar: '⊻', + veeeq: '≚', + vellip: '⋮', + verbar: '|', + vert: '|', + vfr: '𝔳', + vltri: '⊲', + vnsub: '⊂⃒', + vnsup: '⊃⃒', + vopf: '𝕧', + vprop: '∝', + vrtri: '⊳', + vscr: '𝓋', + vsubnE: '⫋︀', + vsubne: '⊊︀', + vsupnE: '⫌︀', + vsupne: '⊋︀', + vzigzag: '⦚', + wcirc: 'ŵ', + wedbar: '⩟', + wedge: '∧', + wedgeq: '≙', + weierp: '℘', + wfr: '𝔴', + wopf: '𝕨', + wp: '℘', + wr: '≀', + wreath: '≀', + wscr: '𝓌', + xcap: '⋂', + xcirc: '◯', + xcup: '⋃', + xdtri: '▽', + xfr: '𝔵', + xhArr: '⟺', + xharr: '⟷', + xi: 'ξ', + xlArr: '⟸', + xlarr: '⟵', + xmap: '⟼', + xnis: '⋻', + xodot: '⨀', + xopf: '𝕩', + xoplus: '⨁', + xotime: '⨂', + xrArr: '⟹', + xrarr: '⟶', + xscr: '𝓍', + xsqcup: '⨆', + xuplus: '⨄', + xutri: '△', + xvee: '⋁', + xwedge: '⋀', + yacute: 'ý', + yacy: 'я', + ycirc: 'ŷ', + ycy: 'ы', + yen: '¥', + yfr: '𝔶', + yicy: 'ї', + yopf: '𝕪', + yscr: '𝓎', + yucy: 'ю', + yuml: 'ÿ', + zacute: 'ź', + zcaron: 'ž', + zcy: 'з', + zdot: 'ż', + zeetrf: 'ℨ', + zeta: 'ζ', + zfr: '𝔷', + zhcy: 'ж', + zigrarr: '⇝', + zopf: '𝕫', + zscr: '𝓏', + zwj: '‍', + zwnj: '‌' +} + +;// CONCATENATED MODULE: ./node_modules/decode-named-character-reference/index.js + + +const own = {}.hasOwnProperty + +/** + * Decode a single character reference (without the `&` or `;`). + * You probably only need this when you’re building parsers yourself that follow + * different rules compared to HTML. + * This is optimized to be tiny in browsers. + * + * @param {string} value + * `notin` (named), `#123` (deci), `#x123` (hexa). + * @returns {string|false} + * Decoded reference. + */ +function decodeNamedCharacterReference(value) { + return own.call(characterEntities, value) ? characterEntities[value] : false +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-reference.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const characterReference = { + name: 'characterReference', + tokenize: tokenizeCharacterReference +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterReference(effects, ok, nok) { + const self = this + let size = 0 + /** @type {number} */ + let max + /** @type {(code: Code) => boolean} */ + let test + return start + + /** + * Start of character reference. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterReference') + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + return open + } + + /** + * After `&`, at `#` for numeric references or alphanumeric for named + * references. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 35) { + effects.enter('characterReferenceMarkerNumeric') + effects.consume(code) + effects.exit('characterReferenceMarkerNumeric') + return numeric + } + effects.enter('characterReferenceValue') + max = 31 + test = asciiAlphanumeric + return value(code) + } + + /** + * After `#`, at `x` for hexadecimals or digit for decimals. + * + * ```markdown + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function numeric(code) { + if (code === 88 || code === 120) { + effects.enter('characterReferenceMarkerHexadecimal') + effects.consume(code) + effects.exit('characterReferenceMarkerHexadecimal') + effects.enter('characterReferenceValue') + max = 6 + test = asciiHexDigit + return value + } + effects.enter('characterReferenceValue') + max = 7 + test = asciiDigit + return value(code) + } + + /** + * After markers (`&#x`, `&#`, or `&`), in value, before `;`. + * + * The character reference kind defines what and how many characters are + * allowed. + * + * ```markdown + * > | a&b + * ^^^ + * > | a{b + * ^^^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function value(code) { + if (code === 59 && size) { + const token = effects.exit('characterReferenceValue') + if ( + test === asciiAlphanumeric && + !decodeNamedCharacterReference(self.sliceSerialize(token)) + ) { + return nok(code) + } + + // To do: `markdown-rs` uses a different name: + // `CharacterReferenceMarkerSemi`. + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + effects.exit('characterReference') + return ok + } + if (test(code) && size++ < max) { + effects.consume(code) + return value + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const characterEscape = { + name: 'characterEscape', + tokenize: tokenizeCharacterEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterEscape(effects, ok, nok) { + return start + + /** + * Start of character escape. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterEscape') + effects.enter('escapeMarker') + effects.consume(code) + effects.exit('escapeMarker') + return inside + } + + /** + * After `\`, at punctuation. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + // ASCII punctuation. + if (asciiPunctuation(code)) { + effects.enter('characterEscapeValue') + effects.consume(code) + effects.exit('characterEscapeValue') + effects.exit('characterEscape') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/line-ending.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const lineEnding = { + name: 'lineEnding', + tokenize: tokenizeLineEnding +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLineEnding(effects, ok) { + return start + + /** @type {State} */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, ok, 'linePrefix') + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-end.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + + +/** @type {Construct} */ +const labelEnd = { + name: 'labelEnd', + tokenize: tokenizeLabelEnd, + resolveTo: resolveToLabelEnd, + resolveAll: resolveAllLabelEnd +} + +/** @type {Construct} */ +const resourceConstruct = { + tokenize: tokenizeResource +} +/** @type {Construct} */ +const referenceFullConstruct = { + tokenize: tokenizeReferenceFull +} +/** @type {Construct} */ +const referenceCollapsedConstruct = { + tokenize: tokenizeReferenceCollapsed +} + +/** @type {Resolver} */ +function resolveAllLabelEnd(events) { + let index = -1 + while (++index < events.length) { + const token = events[index][1] + if ( + token.type === 'labelImage' || + token.type === 'labelLink' || + token.type === 'labelEnd' + ) { + // Remove the marker. + events.splice(index + 1, token.type === 'labelImage' ? 4 : 2) + token.type = 'data' + index++ + } + } + return events +} + +/** @type {Resolver} */ +function resolveToLabelEnd(events, context) { + let index = events.length + let offset = 0 + /** @type {Token} */ + let token + /** @type {number | undefined} */ + let open + /** @type {number | undefined} */ + let close + /** @type {Array} */ + let media + + // Find an opening. + while (index--) { + token = events[index][1] + if (open) { + // If we see another link, or inactive link label, we’ve been here before. + if ( + token.type === 'link' || + (token.type === 'labelLink' && token._inactive) + ) { + break + } + + // Mark other link openings as inactive, as we can’t have links in + // links. + if (events[index][0] === 'enter' && token.type === 'labelLink') { + token._inactive = true + } + } else if (close) { + if ( + events[index][0] === 'enter' && + (token.type === 'labelImage' || token.type === 'labelLink') && + !token._balanced + ) { + open = index + if (token.type !== 'labelLink') { + offset = 2 + break + } + } + } else if (token.type === 'labelEnd') { + close = index + } + } + const group = { + type: events[open][1].type === 'labelLink' ? 'link' : 'image', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + const label = { + type: 'label', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[close][1].end) + } + const text = { + type: 'labelText', + start: Object.assign({}, events[open + offset + 2][1].end), + end: Object.assign({}, events[close - 2][1].start) + } + media = [ + ['enter', group, context], + ['enter', label, context] + ] + + // Opening marker. + media = push(media, events.slice(open + 1, open + offset + 3)) + + // Text open. + media = push(media, [['enter', text, context]]) + + // Always populated by defaults. + + // Between. + media = push( + media, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + offset + 4, close - 3), + context + ) + ) + + // Text close, marker close, label close. + media = push(media, [ + ['exit', text, context], + events[close - 2], + events[close - 1], + ['exit', label, context] + ]) + + // Reference, resource, or so. + media = push(media, events.slice(close + 1)) + + // Media close. + media = push(media, [['exit', group, context]]) + splice(events, open, events.length, media) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelEnd(effects, ok, nok) { + const self = this + let index = self.events.length + /** @type {Token} */ + let labelStart + /** @type {boolean} */ + let defined + + // Find an opening. + while (index--) { + if ( + (self.events[index][1].type === 'labelImage' || + self.events[index][1].type === 'labelLink') && + !self.events[index][1]._balanced + ) { + labelStart = self.events[index][1] + break + } + } + return start + + /** + * Start of label end. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ``` + * + * @type {State} + */ + function start(code) { + // If there is not an okay opening. + if (!labelStart) { + return nok(code) + } + + // If the corresponding label (link) start is marked as inactive, + // it means we’d be wrapping a link, like this: + // + // ```markdown + // > | a [b [c](d) e](f) g. + // ^ + // ``` + // + // We can’t have that, so it’s just balanced brackets. + if (labelStart._inactive) { + return labelEndNok(code) + } + defined = self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize({ + start: labelStart.end, + end: self.now() + }) + ) + ) + effects.enter('labelEnd') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelEnd') + return after + } + + /** + * After `]`. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + // Note: `markdown-rs` also parses GFM footnotes here, which for us is in + // an extension. + + // Resource (`[asd](fgh)`)? + if (code === 40) { + return effects.attempt( + resourceConstruct, + labelEndOk, + defined ? labelEndOk : labelEndNok + )(code) + } + + // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? + if (code === 91) { + return effects.attempt( + referenceFullConstruct, + labelEndOk, + defined ? referenceNotFull : labelEndNok + )(code) + } + + // Shortcut (`[asd]`) reference? + return defined ? labelEndOk(code) : labelEndNok(code) + } + + /** + * After `]`, at `[`, but not at a full reference. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function referenceNotFull(code) { + return effects.attempt( + referenceCollapsedConstruct, + labelEndOk, + labelEndNok + )(code) + } + + /** + * Done, we found something. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndOk(code) { + // Note: `markdown-rs` does a bunch of stuff here. + return ok(code) + } + + /** + * Done, it’s nothing. + * + * There was an okay opening, but we didn’t match anything. + * + * ```markdown + * > | [a](b c + * ^ + * > | [a][b c + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndNok(code) { + labelStart._balanced = true + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeResource(effects, ok, nok) { + return resourceStart + + /** + * At a resource. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceStart(code) { + effects.enter('resource') + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + return resourceBefore + } + + /** + * In resource, after `(`, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceOpen)(code) + : resourceOpen(code) + } + + /** + * In resource, after optional whitespace, at `)` or a destination. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceOpen(code) { + if (code === 41) { + return resourceEnd(code) + } + return factoryDestination( + effects, + resourceDestinationAfter, + resourceDestinationMissing, + 'resourceDestination', + 'resourceDestinationLiteral', + 'resourceDestinationLiteralMarker', + 'resourceDestinationRaw', + 'resourceDestinationString', + 32 + )(code) + } + + /** + * In resource, after destination, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceBetween)(code) + : resourceEnd(code) + } + + /** + * At invalid destination. + * + * ```markdown + * > | [a](<<) b + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationMissing(code) { + return nok(code) + } + + /** + * In resource, after destination and whitespace, at `(` or title. + * + * ```markdown + * > | [a](b ) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBetween(code) { + if (code === 34 || code === 39 || code === 40) { + return factoryTitle( + effects, + resourceTitleAfter, + nok, + 'resourceTitle', + 'resourceTitleMarker', + 'resourceTitleString' + )(code) + } + return resourceEnd(code) + } + + /** + * In resource, after title, at optional whitespace. + * + * ```markdown + * > | [a](b "c") d + * ^ + * ``` + * + * @type {State} + */ + function resourceTitleAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceEnd)(code) + : resourceEnd(code) + } + + /** + * In resource, at `)`. + * + * ```markdown + * > | [a](b) d + * ^ + * ``` + * + * @type {State} + */ + function resourceEnd(code) { + if (code === 41) { + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + effects.exit('resource') + return ok + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceFull(effects, ok, nok) { + const self = this + return referenceFull + + /** + * In a reference (full), at the `[`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFull(code) { + return factoryLabel.call( + self, + effects, + referenceFullAfter, + referenceFullMissing, + 'reference', + 'referenceMarker', + 'referenceString' + )(code) + } + + /** + * In a reference (full), after `]`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullAfter(code) { + return self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + ) + ? ok(code) + : nok(code) + } + + /** + * In reference (full) that was missing. + * + * ```markdown + * > | [a][b d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullMissing(code) { + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceCollapsed(effects, ok, nok) { + return referenceCollapsedStart + + /** + * In reference (collapsed), at `[`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedStart(code) { + // We only attempt a collapsed label if there’s a `[`. + + effects.enter('reference') + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + return referenceCollapsedOpen + } + + /** + * In reference (collapsed), at `]`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedOpen(code) { + if (code === 93) { + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + effects.exit('reference') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-image.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartImage = { + name: 'labelStartImage', + tokenize: tokenizeLabelStartImage, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartImage(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (image) start. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelImage') + effects.enter('labelImageMarker') + effects.consume(code) + effects.exit('labelImageMarker') + return open + } + + /** + * After `!`, at `[`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 91) { + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelImage') + return after + } + return nok(code) + } + + /** + * After `![`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * This is needed in because, when GFM footnotes are enabled, images never + * form when started with a `^`. + * Instead, links form: + * + * ```markdown + * ![^a](b) + * + * ![^a][b] + * + * [b]: c + * ``` + * + * ```html + *

    !^a

    + *

    !^a

    + * ``` + * + * @type {State} + */ + function after(code) { + // To do: use a new field to do this, this is still needed for + // `micromark-extension-gfm-footnote`, but the `label-start-link` + // behavior isn’t. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-classify-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + +/** + * Classify whether a code represents whitespace, punctuation, or something + * else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * > 👉 **Note**: eof (`null`) is seen as whitespace. + * + * @param {Code} code + * Code. + * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} + * Group. + */ +function classifyCharacter(code) { + if ( + code === null || + markdownLineEndingOrSpace(code) || + unicodeWhitespace(code) + ) { + return 1 + } + if (unicodePunctuation(code)) { + return 2 + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/attention.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const attention = { + name: 'attention', + tokenize: tokenizeAttention, + resolveAll: resolveAllAttention +} + +/** + * Take all events and resolve attention to emphasis or strong. + * + * @type {Resolver} + */ +function resolveAllAttention(events, context) { + let index = -1 + /** @type {number} */ + let open + /** @type {Token} */ + let group + /** @type {Token} */ + let text + /** @type {Token} */ + let openingSequence + /** @type {Token} */ + let closingSequence + /** @type {number} */ + let use + /** @type {Array} */ + let nextEvents + /** @type {number} */ + let offset + + // Walk through all events. + // + // Note: performance of this is fine on an mb of normal markdown, but it’s + // a bottleneck for malicious stuff. + while (++index < events.length) { + // Find a token that can close. + if ( + events[index][0] === 'enter' && + events[index][1].type === 'attentionSequence' && + events[index][1]._close + ) { + open = index + + // Now walk back to find an opener. + while (open--) { + // Find a token that can open the closer. + if ( + events[open][0] === 'exit' && + events[open][1].type === 'attentionSequence' && + events[open][1]._open && + // If the markers are the same: + context.sliceSerialize(events[open][1]).charCodeAt(0) === + context.sliceSerialize(events[index][1]).charCodeAt(0) + ) { + // If the opening can close or the closing can open, + // and the close size *is not* a multiple of three, + // but the sum of the opening and closing size *is* multiple of three, + // then don’t match. + if ( + (events[open][1]._close || events[index][1]._open) && + (events[index][1].end.offset - events[index][1].start.offset) % 3 && + !( + (events[open][1].end.offset - + events[open][1].start.offset + + events[index][1].end.offset - + events[index][1].start.offset) % + 3 + ) + ) { + continue + } + + // Number of markers to use from the sequence. + use = + events[open][1].end.offset - events[open][1].start.offset > 1 && + events[index][1].end.offset - events[index][1].start.offset > 1 + ? 2 + : 1 + const start = Object.assign({}, events[open][1].end) + const end = Object.assign({}, events[index][1].start) + movePoint(start, -use) + movePoint(end, use) + openingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start, + end: Object.assign({}, events[open][1].end) + } + closingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start: Object.assign({}, events[index][1].start), + end + } + text = { + type: use > 1 ? 'strongText' : 'emphasisText', + start: Object.assign({}, events[open][1].end), + end: Object.assign({}, events[index][1].start) + } + group = { + type: use > 1 ? 'strong' : 'emphasis', + start: Object.assign({}, openingSequence.start), + end: Object.assign({}, closingSequence.end) + } + events[open][1].end = Object.assign({}, openingSequence.start) + events[index][1].start = Object.assign({}, closingSequence.end) + nextEvents = [] + + // If there are more markers in the opening, add them before. + if (events[open][1].end.offset - events[open][1].start.offset) { + nextEvents = push(nextEvents, [ + ['enter', events[open][1], context], + ['exit', events[open][1], context] + ]) + } + + // Opening. + nextEvents = push(nextEvents, [ + ['enter', group, context], + ['enter', openingSequence, context], + ['exit', openingSequence, context], + ['enter', text, context] + ]) + + // Always populated by defaults. + + // Between. + nextEvents = push( + nextEvents, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + 1, index), + context + ) + ) + + // Closing. + nextEvents = push(nextEvents, [ + ['exit', text, context], + ['enter', closingSequence, context], + ['exit', closingSequence, context], + ['exit', group, context] + ]) + + // If there are more markers in the closing, add them after. + if (events[index][1].end.offset - events[index][1].start.offset) { + offset = 2 + nextEvents = push(nextEvents, [ + ['enter', events[index][1], context], + ['exit', events[index][1], context] + ]) + } else { + offset = 0 + } + splice(events, open - 1, index - open + 3, nextEvents) + index = open + nextEvents.length - offset - 2 + break + } + } + } + } + + // Remove remaining sequences. + index = -1 + while (++index < events.length) { + if (events[index][1].type === 'attentionSequence') { + events[index][1].type = 'data' + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAttention(effects, ok) { + const attentionMarkers = this.parser.constructs.attentionMarkers.null + const previous = this.previous + const before = classifyCharacter(previous) + + /** @type {NonNullable} */ + let marker + return start + + /** + * Before a sequence. + * + * ```markdown + * > | ** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + marker = code + effects.enter('attentionSequence') + return inside(code) + } + + /** + * In a sequence. + * + * ```markdown + * > | ** + * ^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + const token = effects.exit('attentionSequence') + + // To do: next major: move this to resolver, just like `markdown-rs`. + const after = classifyCharacter(code) + + // Always populated by defaults. + + const open = + !after || (after === 2 && before) || attentionMarkers.includes(code) + const close = + !before || (before === 2 && after) || attentionMarkers.includes(previous) + token._open = Boolean(marker === 42 ? open : open && (before || !close)) + token._close = Boolean(marker === 42 ? close : close && (after || !open)) + return ok(code) + } +} + +/** + * Move a point a bit. + * + * Note: `move` only works inside lines! It’s not possible to move past other + * chunks (replacement characters, tabs, or line endings). + * + * @param {Point} point + * @param {number} offset + * @returns {void} + */ +function movePoint(point, offset) { + point.column += offset + point.offset += offset + point._bufferIndex += offset +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/autolink.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const autolink = { + name: 'autolink', + tokenize: tokenizeAutolink +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAutolink(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of an autolink. + * + * ```markdown + * > | ab + * ^ + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('autolink') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.enter('autolinkProtocol') + return open + } + + /** + * After `<`, at protocol or atext. + * + * ```markdown + * > | ab + * ^ + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (asciiAlpha(code)) { + effects.consume(code) + return schemeOrEmailAtext + } + return emailAtext(code) + } + + /** + * At second byte of protocol or atext. + * + * ```markdown + * > | ab + * ^ + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function schemeOrEmailAtext(code) { + // ASCII alphanumeric and `+`, `-`, and `.`. + if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) { + // Count the previous alphabetical from `open` too. + size = 1 + return schemeInsideOrEmailAtext(code) + } + return emailAtext(code) + } + + /** + * In ambiguous protocol or atext. + * + * ```markdown + * > | ab + * ^ + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function schemeInsideOrEmailAtext(code) { + if (code === 58) { + effects.consume(code) + size = 0 + return urlInside + } + + // ASCII alphanumeric and `+`, `-`, and `.`. + if ( + (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && + size++ < 32 + ) { + effects.consume(code) + return schemeInsideOrEmailAtext + } + size = 0 + return emailAtext(code) + } + + /** + * After protocol, in URL. + * + * ```markdown + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function urlInside(code) { + if (code === 62) { + effects.exit('autolinkProtocol') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + + // ASCII control, space, or `<`. + if (code === null || code === 32 || code === 60 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return urlInside + } + + /** + * In email atext. + * + * ```markdown + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function emailAtext(code) { + if (code === 64) { + effects.consume(code) + return emailAtSignOrDot + } + if (asciiAtext(code)) { + effects.consume(code) + return emailAtext + } + return nok(code) + } + + /** + * In label, after at-sign or dot. + * + * ```markdown + * > | ab + * ^ ^ + * ``` + * + * @type {State} + */ + function emailAtSignOrDot(code) { + return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) + } + + /** + * In label, where `.` and `>` are allowed. + * + * ```markdown + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function emailLabel(code) { + if (code === 46) { + effects.consume(code) + size = 0 + return emailAtSignOrDot + } + if (code === 62) { + // Exit, then change the token type. + effects.exit('autolinkProtocol').type = 'autolinkEmail' + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + return emailValue(code) + } + + /** + * In label, where `.` and `>` are *not* allowed. + * + * Though, this is also used in `emailLabel` to parse other values. + * + * ```markdown + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function emailValue(code) { + // ASCII alphanumeric or `-`. + if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) { + const next = code === 45 ? emailValue : emailLabel + effects.consume(code) + return next + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const htmlText = { + name: 'htmlText', + tokenize: tokenizeHtmlText +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlText(effects, ok, nok) { + const self = this + /** @type {NonNullable | undefined} */ + let marker + /** @type {number} */ + let index + /** @type {State} */ + let returnState + return start + + /** + * Start of HTML (text). + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('htmlText') + effects.enter('htmlTextData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | a c + * ^ + * > | a c + * ^ + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + return instruction + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagOpen + } + return nok(code) + } + + /** + * After ` | a c + * ^ + * > | a c + * ^ + * > | a &<]]> c + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + index = 0 + return cdataOpenInside + } + if (asciiAlpha(code)) { + effects.consume(code) + return declaration + } + return nok(code) + } + + /** + * In a comment, after ` | a c + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return nok(code) + } + + /** + * In comment. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function comment(code) { + if (code === null) { + return nok(code) + } + if (code === 45) { + effects.consume(code) + return commentClose + } + if (markdownLineEnding(code)) { + returnState = comment + return lineEndingBefore(code) + } + effects.consume(code) + return comment + } + + /** + * In comment, after `-`. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function commentClose(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return comment(code) + } + + /** + * In comment, after `--`. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function commentEnd(code) { + return code === 62 + ? end(code) + : code === 45 + ? commentClose(code) + : comment(code) + } + + /** + * After ` | a &<]]> b + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + return index === value.length ? cdata : cdataOpenInside + } + return nok(code) + } + + /** + * In CDATA. + * + * ```markdown + * > | a &<]]> b + * ^^^ + * ``` + * + * @type {State} + */ + function cdata(code) { + if (code === null) { + return nok(code) + } + if (code === 93) { + effects.consume(code) + return cdataClose + } + if (markdownLineEnding(code)) { + returnState = cdata + return lineEndingBefore(code) + } + effects.consume(code) + return cdata + } + + /** + * In CDATA, after `]`, at another `]`. + * + * ```markdown + * > | a &<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataClose(code) { + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In CDATA, after `]]`, at `>`. + * + * ```markdown + * > | a &<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataEnd(code) { + if (code === 62) { + return end(code) + } + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In declaration. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function declaration(code) { + if (code === null || code === 62) { + return end(code) + } + if (markdownLineEnding(code)) { + returnState = declaration + return lineEndingBefore(code) + } + effects.consume(code) + return declaration + } + + /** + * In instruction. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function instruction(code) { + if (code === null) { + return nok(code) + } + if (code === 63) { + effects.consume(code) + return instructionClose + } + if (markdownLineEnding(code)) { + returnState = instruction + return lineEndingBefore(code) + } + effects.consume(code) + return instruction + } + + /** + * In instruction, after `?`, at `>`. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function instructionClose(code) { + return code === 62 ? end(code) : instruction(code) + } + + /** + * After ` | a c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagClose + } + return nok(code) + } + + /** + * After ` | a c + * ^ + * ``` + * + * @type {State} + */ + function tagClose(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagClose + } + return tagCloseBetween(code) + } + + /** + * In closing tag, after tag name. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseBetween(code) { + if (markdownLineEnding(code)) { + returnState = tagCloseBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagCloseBetween + } + return end(code) + } + + /** + * After ` | a c + * ^ + * ``` + * + * @type {State} + */ + function tagOpen(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagOpen + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In opening tag, after tag name. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function tagOpenBetween(code) { + if (code === 47) { + effects.consume(code) + return end + } + + // ASCII alphabetical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return tagOpenAttributeName + } + if (markdownLineEnding(code)) { + returnState = tagOpenBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenBetween + } + return end(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | a d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeName(code) { + // ASCII alphabetical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return tagOpenAttributeName + } + return tagOpenAttributeNameAfter(code) + } + + /** + * After attribute name, before initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | a d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeNameAfter + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeNameAfter + } + return tagOpenBetween(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | a e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + marker = code + return tagOpenAttributeValueQuoted + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueBefore + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | a e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuoted(code) { + if (code === marker) { + effects.consume(code) + marker = undefined + return tagOpenAttributeValueQuotedAfter + } + if (code === null) { + return nok(code) + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueQuoted + return lineEndingBefore(code) + } + effects.consume(code) + return tagOpenAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | a e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 60 || + code === 61 || + code === 96 + ) { + return nok(code) + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the end + * of the tag. + * + * ```markdown + * > | a e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In certain circumstances of a tag where only an `>` is allowed. + * + * ```markdown + * > | a e + * ^ + * ``` + * + * @type {State} + */ + function end(code) { + if (code === 62) { + effects.consume(code) + effects.exit('htmlTextData') + effects.exit('htmlText') + return ok + } + return nok(code) + } + + /** + * At eol. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * > | a + * ``` + * + * @type {State} + */ + function lineEndingBefore(code) { + effects.exit('htmlTextData') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineEndingAfter + } + + /** + * After eol, at optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfter(code) { + // Always populated by defaults. + + return markdownSpace(code) + ? factorySpace( + effects, + lineEndingAfterPrefix, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : lineEndingAfterPrefix(code) + } + + /** + * After eol, after optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfterPrefix(code) { + effects.enter('htmlTextData') + return returnState(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-link.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartLink = { + name: 'labelStartLink', + tokenize: tokenizeLabelStartLink, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartLink(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (link) start. + * + * ```markdown + * > | a [b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelLink') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelLink') + return after + } + + /** @type {State} */ + function after(code) { + // To do: this isn’t needed in `micromark-extension-gfm-footnote`, + // remove. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/hard-break-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const hardBreakEscape = { + name: 'hardBreakEscape', + tokenize: tokenizeHardBreakEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHardBreakEscape(effects, ok, nok) { + return start + + /** + * Start of a hard break (escape). + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('hardBreakEscape') + effects.consume(code) + return after + } + + /** + * After `\`, at eol. + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownLineEnding(code)) { + effects.exit('hardBreakEscape') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-text.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Previous} Previous + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const codeText = { + name: 'codeText', + tokenize: tokenizeCodeText, + resolve: resolveCodeText, + previous +} + +// To do: next major: don’t resolve, like `markdown-rs`. +/** @type {Resolver} */ +function resolveCodeText(events) { + let tailExitIndex = events.length - 4 + let headEnterIndex = 3 + /** @type {number} */ + let index + /** @type {number | undefined} */ + let enter + + // If we start and end with an EOL or a space. + if ( + (events[headEnterIndex][1].type === 'lineEnding' || + events[headEnterIndex][1].type === 'space') && + (events[tailExitIndex][1].type === 'lineEnding' || + events[tailExitIndex][1].type === 'space') + ) { + index = headEnterIndex + + // And we have data. + while (++index < tailExitIndex) { + if (events[index][1].type === 'codeTextData') { + // Then we have padding. + events[headEnterIndex][1].type = 'codeTextPadding' + events[tailExitIndex][1].type = 'codeTextPadding' + headEnterIndex += 2 + tailExitIndex -= 2 + break + } + } + } + + // Merge adjacent spaces and data. + index = headEnterIndex - 1 + tailExitIndex++ + while (++index <= tailExitIndex) { + if (enter === undefined) { + if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { + enter = index + } + } else if ( + index === tailExitIndex || + events[index][1].type === 'lineEnding' + ) { + events[enter][1].type = 'codeTextData' + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + tailExitIndex -= index - enter - 2 + index = enter + 2 + } + enter = undefined + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Previous} + */ +function previous(code) { + // If there is a previous code, there will always be a tail. + return ( + code !== 96 || + this.events[this.events.length - 1][1].type === 'characterEscape' + ) +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeText(effects, ok, nok) { + const self = this + let sizeOpen = 0 + /** @type {number} */ + let size + /** @type {Token} */ + let token + return start + + /** + * Start of code (text). + * + * ```markdown + * > | `a` + * ^ + * > | \`a` + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('codeText') + effects.enter('codeTextSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 96) { + effects.consume(code) + sizeOpen++ + return sequenceOpen + } + effects.exit('codeTextSequence') + return between(code) + } + + /** + * Between something and something else. + * + * ```markdown + * > | `a` + * ^^ + * ``` + * + * @type {State} + */ + function between(code) { + // EOF. + if (code === null) { + return nok(code) + } + + // To do: next major: don’t do spaces in resolve, but when compiling, + // like `markdown-rs`. + // Tabs don’t work, and virtual spaces don’t make sense. + if (code === 32) { + effects.enter('space') + effects.consume(code) + effects.exit('space') + return between + } + + // Closing fence? Could also be data. + if (code === 96) { + token = effects.enter('codeTextSequence') + size = 0 + return sequenceClose(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return between + } + + // Data. + effects.enter('codeTextData') + return data(code) + } + + /** + * In data. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if ( + code === null || + code === 32 || + code === 96 || + markdownLineEnding(code) + ) { + effects.exit('codeTextData') + return between(code) + } + effects.consume(code) + return data + } + + /** + * In closing sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + // More. + if (code === 96) { + effects.consume(code) + size++ + return sequenceClose + } + + // Done! + if (size === sizeOpen) { + effects.exit('codeTextSequence') + effects.exit('codeText') + return ok(code) + } + + // More or less accents: mark as data. + token.type = 'codeTextData' + return data(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + */ + + + + +/** @satisfies {Extension['document']} */ +const constructs_document = { + [42]: list, + [43]: list, + [45]: list, + [48]: list, + [49]: list, + [50]: list, + [51]: list, + [52]: list, + [53]: list, + [54]: list, + [55]: list, + [56]: list, + [57]: list, + [62]: blockQuote +} + +/** @satisfies {Extension['contentInitial']} */ +const contentInitial = { + [91]: definition +} + +/** @satisfies {Extension['flowInitial']} */ +const flowInitial = { + [-2]: codeIndented, + [-1]: codeIndented, + [32]: codeIndented +} + +/** @satisfies {Extension['flow']} */ +const constructs_flow = { + [35]: headingAtx, + [42]: thematicBreak, + [45]: [setextUnderline, thematicBreak], + [60]: htmlFlow, + [61]: setextUnderline, + [95]: thematicBreak, + [96]: codeFenced, + [126]: codeFenced +} + +/** @satisfies {Extension['string']} */ +const constructs_string = { + [38]: characterReference, + [92]: characterEscape +} + +/** @satisfies {Extension['text']} */ +const constructs_text = { + [-5]: lineEnding, + [-4]: lineEnding, + [-3]: lineEnding, + [33]: labelStartImage, + [38]: characterReference, + [42]: attention, + [60]: [autolink, htmlText], + [91]: labelStartLink, + [92]: [hardBreakEscape, characterEscape], + [93]: labelEnd, + [95]: attention, + [96]: codeText +} + +/** @satisfies {Extension['insideSpan']} */ +const insideSpan = { + null: [attention, resolver] +} + +/** @satisfies {Extension['attentionMarkers']} */ +const attentionMarkers = { + null: [42, 95] +} + +/** @satisfies {Extension['disable']} */ +const disable = { + null: [] +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/parse.js +/** + * @typedef {import('micromark-util-types').Create} Create + * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + */ + + + + + + + + + +/** + * @param {ParseOptions | null | undefined} [options] + * @returns {ParseContext} + */ +function parse(options) { + const settings = options || {} + const constructs = + /** @type {FullNormalizedExtension} */ + combineExtensions([constructs_namespaceObject, ...(settings.extensions || [])]) + + /** @type {ParseContext} */ + const parser = { + defined: [], + lazy: {}, + constructs, + content: create(content), + document: create(document_document), + flow: create(flow), + string: create(string), + text: create(text_text) + } + return parser + + /** + * @param {InitialConstruct} initial + */ + function create(initial) { + return creator + /** @type {Create} */ + function creator(from) { + return createTokenizer(parser, initial, from) + } + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/preprocess.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Value} Value + */ + +/** + * @callback Preprocessor + * @param {Value} value + * @param {Encoding | null | undefined} [encoding] + * @param {boolean | null | undefined} [end=false] + * @returns {Array} + */ + +const search = /[\0\t\n\r]/g + +/** + * @returns {Preprocessor} + */ +function preprocess() { + let column = 1 + let buffer = '' + /** @type {boolean | undefined} */ + let start = true + /** @type {boolean | undefined} */ + let atCarriageReturn + return preprocessor + + /** @type {Preprocessor} */ + function preprocessor(value, encoding, end) { + /** @type {Array} */ + const chunks = [] + /** @type {RegExpMatchArray | null} */ + let match + /** @type {number} */ + let next + /** @type {number} */ + let startPosition + /** @type {number} */ + let endPosition + /** @type {Code} */ + let code + + // @ts-expect-error `Buffer` does allow an encoding. + value = buffer + value.toString(encoding) + startPosition = 0 + buffer = '' + if (start) { + // To do: `markdown-rs` actually parses BOMs (byte order mark). + if (value.charCodeAt(0) === 65279) { + startPosition++ + } + start = undefined + } + while (startPosition < value.length) { + search.lastIndex = startPosition + match = search.exec(value) + endPosition = + match && match.index !== undefined ? match.index : value.length + code = value.charCodeAt(endPosition) + if (!match) { + buffer = value.slice(startPosition) + break + } + if (code === 10 && startPosition === endPosition && atCarriageReturn) { + chunks.push(-3) + atCarriageReturn = undefined + } else { + if (atCarriageReturn) { + chunks.push(-5) + atCarriageReturn = undefined + } + if (startPosition < endPosition) { + chunks.push(value.slice(startPosition, endPosition)) + column += endPosition - startPosition + } + switch (code) { + case 0: { + chunks.push(65533) + column++ + break + } + case 9: { + next = Math.ceil(column / 4) * 4 + chunks.push(-2) + while (column++ < next) chunks.push(-1) + break + } + case 10: { + chunks.push(-4) + column = 1 + break + } + default: { + atCarriageReturn = true + column = 1 + } + } + } + startPosition = endPosition + 1 + } + if (end) { + if (atCarriageReturn) chunks.push(-5) + if (buffer) chunks.push(buffer) + chunks.push(null) + } + return chunks + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/postprocess.js +/** + * @typedef {import('micromark-util-types').Event} Event + */ + + + +/** + * @param {Array} events + * @returns {Array} + */ +function postprocess(events) { + while (!subtokenize(events)) { + // Empty + } + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-numeric-character-reference/index.js +/** + * Turn the number (in string form as either hexa- or plain decimal) coming from + * a numeric character reference into a character. + * + * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes + * non-characters and control characters safe. + * + * @param {string} value + * Value to decode. + * @param {number} base + * Numeric base. + * @returns {string} + * Character. + */ +function decodeNumericCharacterReference(value, base) { + const code = Number.parseInt(value, base) + if ( + // C0 except for HT, LF, FF, CR, space. + code < 9 || + code === 11 || + (code > 13 && code < 32) || + // Control character (DEL) of C0, and C1 controls. + (code > 126 && code < 160) || + // Lone high surrogates and low surrogates. + (code > 55295 && code < 57344) || + // Noncharacters. + (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ || + (code & 65535) === 65535 || + (code & 65535) === 65534 /* eslint-enable no-bitwise */ || + // Out of range + code > 1114111 + ) { + return '\uFFFD' + } + return String.fromCharCode(code) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-string/index.js + + +const characterEscapeOrReference = + /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi + +/** + * Decode markdown strings (which occur in places such as fenced code info + * strings, destinations, labels, and titles). + * + * The “string” content type allows character escapes and -references. + * This decodes those. + * + * @param {string} value + * Value to decode. + * @returns {string} + * Decoded value. + */ +function decodeString(value) { + return value.replace(characterEscapeOrReference, decode) +} + +/** + * @param {string} $0 + * @param {string} $1 + * @param {string} $2 + * @returns {string} + */ +function decode($0, $1, $2) { + if ($1) { + // Escape. + return $1 + } + + // Reference. + const head = $2.charCodeAt(0) + if (head === 35) { + const head = $2.charCodeAt(1) + const hex = head === 120 || head === 88 + return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10) + } + return decodeNamedCharacterReference($2) || $0 +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/unist-util-stringify-position/lib/index.js +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Point} Point + * @typedef {import('unist').Position} Position + */ + +/** + * @typedef NodeLike + * @property {string} type + * @property {PositionLike | null | undefined} [position] + * + * @typedef PositionLike + * @property {PointLike | null | undefined} [start] + * @property {PointLike | null | undefined} [end] + * + * @typedef PointLike + * @property {number | null | undefined} [line] + * @property {number | null | undefined} [column] + * @property {number | null | undefined} [offset] + */ + +/** + * Serialize the positional info of a point, position (start and end points), + * or node. + * + * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] + * Node, position, or point. + * @returns {string} + * Pretty printed positional info of a node (`string`). + * + * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) + * or a point `l:c` (when given `point`), where `l` stands for line, `c` for + * column, `s` for `start`, and `e` for end. + * An empty string (`''`) is returned if the given value is neither `node`, + * `position`, nor `point`. + */ +function stringifyPosition(value) { + // Nothing. + if (!value || typeof value !== 'object') { + return '' + } + + // Node. + if ('position' in value || 'type' in value) { + return position(value.position) + } + + // Position. + if ('start' in value || 'end' in value) { + return position(value) + } + + // Point. + if ('line' in value || 'column' in value) { + return point(value) + } + + // ? + return '' +} + +/** + * @param {Point | PointLike | null | undefined} point + * @returns {string} + */ +function point(point) { + return index(point && point.line) + ':' + index(point && point.column) +} + +/** + * @param {Position | PositionLike | null | undefined} pos + * @returns {string} + */ +function position(pos) { + return point(pos && pos.start) + '-' + point(pos && pos.end) +} + +/** + * @param {number | null | undefined} value + * @returns {number} + */ +function index(value) { + return value && typeof value === 'number' ? value : 1 +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-from-markdown/lib/index.js +/** + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Value} Value + * + * @typedef {import('unist').Parent} UnistParent + * @typedef {import('unist').Point} Point + * + * @typedef {import('mdast').PhrasingContent} PhrasingContent + * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent + * @typedef {import('mdast').Content} Content + * @typedef {import('mdast').Break} Break + * @typedef {import('mdast').Blockquote} Blockquote + * @typedef {import('mdast').Code} Code + * @typedef {import('mdast').Definition} Definition + * @typedef {import('mdast').Emphasis} Emphasis + * @typedef {import('mdast').Heading} Heading + * @typedef {import('mdast').HTML} HTML + * @typedef {import('mdast').Image} Image + * @typedef {import('mdast').ImageReference} ImageReference + * @typedef {import('mdast').InlineCode} InlineCode + * @typedef {import('mdast').Link} Link + * @typedef {import('mdast').LinkReference} LinkReference + * @typedef {import('mdast').List} List + * @typedef {import('mdast').ListItem} ListItem + * @typedef {import('mdast').Paragraph} Paragraph + * @typedef {import('mdast').Root} Root + * @typedef {import('mdast').Strong} Strong + * @typedef {import('mdast').Text} Text + * @typedef {import('mdast').ThematicBreak} ThematicBreak + * @typedef {import('mdast').ReferenceType} ReferenceType + * @typedef {import('../index.js').CompileData} CompileData + */ + +/** + * @typedef {Root | Content} Node + * @typedef {Extract} Parent + * + * @typedef {Omit & {type: 'fragment', children: Array}} Fragment + */ + +/** + * @callback Transform + * Extra transform, to change the AST afterwards. + * @param {Root} tree + * Tree to transform. + * @returns {Root | undefined | null | void} + * New tree or nothing (in which case the current tree is used). + * + * @callback Handle + * Handle a token. + * @param {CompileContext} this + * Context. + * @param {Token} token + * Current token. + * @returns {void} + * Nothing. + * + * @typedef {Record} Handles + * Token types mapping to handles + * + * @callback OnEnterError + * Handle the case where the `right` token is open, but it is closed (by the + * `left` token) or because we reached the end of the document. + * @param {Omit} this + * Context. + * @param {Token | undefined} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @callback OnExitError + * Handle the case where the `right` token is open but it is closed by + * exiting the `left` token. + * @param {Omit} this + * Context. + * @param {Token} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @typedef {[Token, OnEnterError | undefined]} TokenTuple + * Open token on the stack, with an optional error handler for when + * that token isn’t closed properly. + */ + +/** + * @typedef Config + * Configuration. + * + * We have our defaults, but extensions will add more. + * @property {Array} canContainEols + * Token types where line endings are used. + * @property {Handles} enter + * Opening handles. + * @property {Handles} exit + * Closing handles. + * @property {Array} transforms + * Tree transforms. + * + * @typedef {Partial} Extension + * Change how markdown tokens from micromark are turned into mdast. + * + * @typedef CompileContext + * mdast compiler context. + * @property {Array} stack + * Stack of nodes. + * @property {Array} tokenStack + * Stack of tokens. + * @property {(key: Key) => CompileData[Key]} getData + * Get data from the key/value store. + * @property {(key: Key, value?: CompileData[Key]) => void} setData + * Set data into the key/value store. + * @property {(this: CompileContext) => void} buffer + * Capture some of the output data. + * @property {(this: CompileContext) => string} resume + * Stop capturing and access the output data. + * @property {(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter + * Enter a token. + * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit + * Exit a token. + * @property {TokenizeContext['sliceSerialize']} sliceSerialize + * Get the string value of a token. + * @property {Config} config + * Configuration. + * + * @typedef FromMarkdownOptions + * Configuration for how to build mdast. + * @property {Array> | null | undefined} [mdastExtensions] + * Extensions for this utility to change how tokens are turned into a tree. + * + * @typedef {ParseOptions & FromMarkdownOptions} Options + * Configuration. + */ + +// To do: micromark: create a registry of tokens? +// To do: next major: don’t return given `Node` from `enter`. +// To do: next major: remove setter/getter. + + + + + + + + + + +const lib_own = {}.hasOwnProperty + +/** + * @param value + * Markdown to parse. + * @param encoding + * Character encoding for when `value` is `Buffer`. + * @param options + * Configuration. + * @returns + * mdast tree. + */ +const fromMarkdown = + /** + * @type {( + * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) & + * ((value: Value, options?: Options | null | undefined) => Root) + * )} + */ + + /** + * @param {Value} value + * @param {Encoding | Options | null | undefined} [encoding] + * @param {Options | null | undefined} [options] + * @returns {Root} + */ + function (value, encoding, options) { + if (typeof encoding !== 'string') { + options = encoding + encoding = undefined + } + return compiler(options)( + postprocess( + parse(options).document().write(preprocess()(value, encoding, true)) + ) + ) + } + +/** + * Note this compiler only understand complete buffering, not streaming. + * + * @param {Options | null | undefined} [options] + */ +function compiler(options) { + /** @type {Config} */ + const config = { + transforms: [], + canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'], + enter: { + autolink: opener(link), + autolinkProtocol: onenterdata, + autolinkEmail: onenterdata, + atxHeading: opener(heading), + blockQuote: opener(blockQuote), + characterEscape: onenterdata, + characterReference: onenterdata, + codeFenced: opener(codeFlow), + codeFencedFenceInfo: buffer, + codeFencedFenceMeta: buffer, + codeIndented: opener(codeFlow, buffer), + codeText: opener(codeText, buffer), + codeTextData: onenterdata, + data: onenterdata, + codeFlowValue: onenterdata, + definition: opener(definition), + definitionDestinationString: buffer, + definitionLabelString: buffer, + definitionTitleString: buffer, + emphasis: opener(emphasis), + hardBreakEscape: opener(hardBreak), + hardBreakTrailing: opener(hardBreak), + htmlFlow: opener(html, buffer), + htmlFlowData: onenterdata, + htmlText: opener(html, buffer), + htmlTextData: onenterdata, + image: opener(image), + label: buffer, + link: opener(link), + listItem: opener(listItem), + listItemValue: onenterlistitemvalue, + listOrdered: opener(list, onenterlistordered), + listUnordered: opener(list), + paragraph: opener(paragraph), + reference: onenterreference, + referenceString: buffer, + resourceDestinationString: buffer, + resourceTitleString: buffer, + setextHeading: opener(heading), + strong: opener(strong), + thematicBreak: opener(thematicBreak) + }, + exit: { + atxHeading: closer(), + atxHeadingSequence: onexitatxheadingsequence, + autolink: closer(), + autolinkEmail: onexitautolinkemail, + autolinkProtocol: onexitautolinkprotocol, + blockQuote: closer(), + characterEscapeValue: onexitdata, + characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, + characterReferenceMarkerNumeric: onexitcharacterreferencemarker, + characterReferenceValue: onexitcharacterreferencevalue, + codeFenced: closer(onexitcodefenced), + codeFencedFence: onexitcodefencedfence, + codeFencedFenceInfo: onexitcodefencedfenceinfo, + codeFencedFenceMeta: onexitcodefencedfencemeta, + codeFlowValue: onexitdata, + codeIndented: closer(onexitcodeindented), + codeText: closer(onexitcodetext), + codeTextData: onexitdata, + data: onexitdata, + definition: closer(), + definitionDestinationString: onexitdefinitiondestinationstring, + definitionLabelString: onexitdefinitionlabelstring, + definitionTitleString: onexitdefinitiontitlestring, + emphasis: closer(), + hardBreakEscape: closer(onexithardbreak), + hardBreakTrailing: closer(onexithardbreak), + htmlFlow: closer(onexithtmlflow), + htmlFlowData: onexitdata, + htmlText: closer(onexithtmltext), + htmlTextData: onexitdata, + image: closer(onexitimage), + label: onexitlabel, + labelText: onexitlabeltext, + lineEnding: onexitlineending, + link: closer(onexitlink), + listItem: closer(), + listOrdered: closer(), + listUnordered: closer(), + paragraph: closer(), + referenceString: onexitreferencestring, + resourceDestinationString: onexitresourcedestinationstring, + resourceTitleString: onexitresourcetitlestring, + resource: onexitresource, + setextHeading: closer(onexitsetextheading), + setextHeadingLineSequence: onexitsetextheadinglinesequence, + setextHeadingText: onexitsetextheadingtext, + strong: closer(), + thematicBreak: closer() + } + } + configure(config, (options || {}).mdastExtensions || []) + + /** @type {CompileData} */ + const data = {} + return compile + + /** + * Turn micromark events into an mdast tree. + * + * @param {Array} events + * Events. + * @returns {Root} + * mdast tree. + */ + function compile(events) { + /** @type {Root} */ + let tree = { + type: 'root', + children: [] + } + /** @type {Omit} */ + const context = { + stack: [tree], + tokenStack: [], + config, + enter, + exit, + buffer, + resume, + setData, + getData + } + /** @type {Array} */ + const listStack = [] + let index = -1 + while (++index < events.length) { + // We preprocess lists to add `listItem` tokens, and to infer whether + // items the list itself are spread out. + if ( + events[index][1].type === 'listOrdered' || + events[index][1].type === 'listUnordered' + ) { + if (events[index][0] === 'enter') { + listStack.push(index) + } else { + const tail = listStack.pop() + index = prepareList(events, tail, index) + } + } + } + index = -1 + while (++index < events.length) { + const handler = config[events[index][0]] + if (lib_own.call(handler, events[index][1].type)) { + handler[events[index][1].type].call( + Object.assign( + { + sliceSerialize: events[index][2].sliceSerialize + }, + context + ), + events[index][1] + ) + } + } + + // Handle tokens still being open. + if (context.tokenStack.length > 0) { + const tail = context.tokenStack[context.tokenStack.length - 1] + const handler = tail[1] || defaultOnError + handler.call(context, undefined, tail[0]) + } + + // Figure out `root` position. + tree.position = { + start: lib_point( + events.length > 0 + ? events[0][1].start + : { + line: 1, + column: 1, + offset: 0 + } + ), + end: lib_point( + events.length > 0 + ? events[events.length - 2][1].end + : { + line: 1, + column: 1, + offset: 0 + } + ) + } + + // Call transforms. + index = -1 + while (++index < config.transforms.length) { + tree = config.transforms[index](tree) || tree + } + return tree + } + + /** + * @param {Array} events + * @param {number} start + * @param {number} length + * @returns {number} + */ + function prepareList(events, start, length) { + let index = start - 1 + let containerBalance = -1 + let listSpread = false + /** @type {Token | undefined} */ + let listItem + /** @type {number | undefined} */ + let lineIndex + /** @type {number | undefined} */ + let firstBlankLineIndex + /** @type {boolean | undefined} */ + let atMarker + while (++index <= length) { + const event = events[index] + if ( + event[1].type === 'listUnordered' || + event[1].type === 'listOrdered' || + event[1].type === 'blockQuote' + ) { + if (event[0] === 'enter') { + containerBalance++ + } else { + containerBalance-- + } + atMarker = undefined + } else if (event[1].type === 'lineEndingBlank') { + if (event[0] === 'enter') { + if ( + listItem && + !atMarker && + !containerBalance && + !firstBlankLineIndex + ) { + firstBlankLineIndex = index + } + atMarker = undefined + } + } else if ( + event[1].type === 'linePrefix' || + event[1].type === 'listItemValue' || + event[1].type === 'listItemMarker' || + event[1].type === 'listItemPrefix' || + event[1].type === 'listItemPrefixWhitespace' + ) { + // Empty. + } else { + atMarker = undefined + } + if ( + (!containerBalance && + event[0] === 'enter' && + event[1].type === 'listItemPrefix') || + (containerBalance === -1 && + event[0] === 'exit' && + (event[1].type === 'listUnordered' || + event[1].type === 'listOrdered')) + ) { + if (listItem) { + let tailIndex = index + lineIndex = undefined + while (tailIndex--) { + const tailEvent = events[tailIndex] + if ( + tailEvent[1].type === 'lineEnding' || + tailEvent[1].type === 'lineEndingBlank' + ) { + if (tailEvent[0] === 'exit') continue + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + listSpread = true + } + tailEvent[1].type = 'lineEnding' + lineIndex = tailIndex + } else if ( + tailEvent[1].type === 'linePrefix' || + tailEvent[1].type === 'blockQuotePrefix' || + tailEvent[1].type === 'blockQuotePrefixWhitespace' || + tailEvent[1].type === 'blockQuoteMarker' || + tailEvent[1].type === 'listItemIndent' + ) { + // Empty + } else { + break + } + } + if ( + firstBlankLineIndex && + (!lineIndex || firstBlankLineIndex < lineIndex) + ) { + listItem._spread = true + } + + // Fix position. + listItem.end = Object.assign( + {}, + lineIndex ? events[lineIndex][1].start : event[1].end + ) + events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]) + index++ + length++ + } + + // Create a new list item. + if (event[1].type === 'listItemPrefix') { + listItem = { + type: 'listItem', + _spread: false, + start: Object.assign({}, event[1].start), + // @ts-expect-error: we’ll add `end` in a second. + end: undefined + } + // @ts-expect-error: `listItem` is most definitely defined, TS... + events.splice(index, 0, ['enter', listItem, event[2]]) + index++ + length++ + firstBlankLineIndex = undefined + atMarker = true + } + } + } + events[start][1]._spread = listSpread + return length + } + + /** + * Set data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @param {CompileData[Key]} [value] + * New value. + * @returns {void} + * Nothing. + */ + function setData(key, value) { + data[key] = value + } + + /** + * Get data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @returns {CompileData[Key]} + * Value. + */ + function getData(key) { + return data[key] + } + + /** + * Create an opener handle. + * + * @param {(token: Token) => Node} create + * Create a node. + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function opener(create, and) { + return open + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function open(token) { + enter.call(this, create(token), token) + if (and) and.call(this, token) + } + } + + /** + * @this {CompileContext} + * @returns {void} + */ + function buffer() { + this.stack.push({ + type: 'fragment', + children: [] + }) + } + + /** + * @template {Node} Kind + * Node type. + * @this {CompileContext} + * Context. + * @param {Kind} node + * Node to enter. + * @param {Token} token + * Corresponding token. + * @param {OnEnterError | undefined} [errorHandler] + * Handle the case where this token is open, but it is closed by something else. + * @returns {Kind} + * The given node. + */ + function enter(node, token, errorHandler) { + const parent = this.stack[this.stack.length - 1] + // @ts-expect-error: Assume `Node` can exist as a child of `parent`. + parent.children.push(node) + this.stack.push(node) + this.tokenStack.push([token, errorHandler]) + // @ts-expect-error: `end` will be patched later. + node.position = { + start: lib_point(token.start) + } + return node + } + + /** + * Create a closer handle. + * + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function closer(and) { + return close + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function close(token) { + if (and) and.call(this, token) + exit.call(this, token) + } + } + + /** + * @this {CompileContext} + * Context. + * @param {Token} token + * Corresponding token. + * @param {OnExitError | undefined} [onExitError] + * Handle the case where another token is open. + * @returns {Node} + * The closed node. + */ + function exit(token, onExitError) { + const node = this.stack.pop() + const open = this.tokenStack.pop() + if (!open) { + throw new Error( + 'Cannot close `' + + token.type + + '` (' + + stringifyPosition({ + start: token.start, + end: token.end + }) + + '): it’s not open' + ) + } else if (open[0].type !== token.type) { + if (onExitError) { + onExitError.call(this, token, open[0]) + } else { + const handler = open[1] || defaultOnError + handler.call(this, token, open[0]) + } + } + node.position.end = lib_point(token.end) + return node + } + + /** + * @this {CompileContext} + * @returns {string} + */ + function resume() { + return lib_toString(this.stack.pop()) + } + + // + // Handlers. + // + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistordered() { + setData('expectingFirstListItemValue', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistitemvalue(token) { + if (getData('expectingFirstListItemValue')) { + const ancestor = this.stack[this.stack.length - 2] + ancestor.start = Number.parseInt(this.sliceSerialize(token), 10) + setData('expectingFirstListItemValue') + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfenceinfo() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.lang = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfencemeta() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.meta = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfence() { + // Exit if this is the closing fence. + if (getData('flowCodeInside')) return + this.buffer() + setData('flowCodeInside', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefenced() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, '') + setData('flowCodeInside') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodeindented() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/(\r?\n|\r)$/g, '') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitionlabelstring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + node.label = label + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiontitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiondestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitatxheadingsequence(token) { + const node = this.stack[this.stack.length - 1] + if (!node.depth) { + const depth = this.sliceSerialize(token).length + node.depth = depth + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadingtext() { + setData('setextHeadingSlurpLineEnding', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadinglinesequence(token) { + const node = this.stack[this.stack.length - 1] + node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2 + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheading() { + setData('setextHeadingSlurpLineEnding') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterdata(token) { + const node = this.stack[this.stack.length - 1] + let tail = node.children[node.children.length - 1] + if (!tail || tail.type !== 'text') { + // Add a new text node. + tail = text() + // @ts-expect-error: we’ll add `end` later. + tail.position = { + start: lib_point(token.start) + } + // @ts-expect-error: Assume `parent` accepts `text`. + node.children.push(tail) + } + this.stack.push(tail) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitdata(token) { + const tail = this.stack.pop() + tail.value += this.sliceSerialize(token) + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlineending(token) { + const context = this.stack[this.stack.length - 1] + // If we’re at a hard break, include the line ending in there. + if (getData('atHardBreak')) { + const tail = context.children[context.children.length - 1] + tail.position.end = lib_point(token.end) + setData('atHardBreak') + return + } + if ( + !getData('setextHeadingSlurpLineEnding') && + config.canContainEols.includes(context.type) + ) { + onenterdata.call(this, token) + onexitdata.call(this, token) + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithardbreak() { + setData('atHardBreak', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmlflow() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmltext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcodetext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlink() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitimage() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabeltext(token) { + const string = this.sliceSerialize(token) + const ancestor = this.stack[this.stack.length - 2] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + ancestor.label = decodeString(string) + // @ts-expect-error: same as above. + ancestor.identifier = normalizeIdentifier(string).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabel() { + const fragment = this.stack[this.stack.length - 1] + const value = this.resume() + const node = this.stack[this.stack.length - 1] + // Assume a reference. + setData('inReference', true) + if (node.type === 'link') { + /** @type {Array} */ + // @ts-expect-error: Assume static phrasing content. + const children = fragment.children + node.children = children + } else { + node.alt = value + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcedestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcetitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresource() { + setData('inReference') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterreference() { + setData('referenceType', 'collapsed') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitreferencestring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + node.label = label + // @ts-expect-error: same as above. + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + setData('referenceType', 'full') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcharacterreferencemarker(token) { + setData('characterReferenceType', token.type) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcharacterreferencevalue(token) { + const data = this.sliceSerialize(token) + const type = getData('characterReferenceType') + /** @type {string} */ + let value + if (type) { + value = decodeNumericCharacterReference( + data, + type === 'characterReferenceMarkerNumeric' ? 10 : 16 + ) + setData('characterReferenceType') + } else { + const result = decodeNamedCharacterReference(data) + value = result + } + const tail = this.stack.pop() + tail.value += value + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkprotocol(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = this.sliceSerialize(token) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkemail(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = 'mailto:' + this.sliceSerialize(token) + } + + // + // Creaters. + // + + /** @returns {Blockquote} */ + function blockQuote() { + return { + type: 'blockquote', + children: [] + } + } + + /** @returns {Code} */ + function codeFlow() { + return { + type: 'code', + lang: null, + meta: null, + value: '' + } + } + + /** @returns {InlineCode} */ + function codeText() { + return { + type: 'inlineCode', + value: '' + } + } + + /** @returns {Definition} */ + function definition() { + return { + type: 'definition', + identifier: '', + label: null, + title: null, + url: '' + } + } + + /** @returns {Emphasis} */ + function emphasis() { + return { + type: 'emphasis', + children: [] + } + } + + /** @returns {Heading} */ + function heading() { + // @ts-expect-error `depth` will be set later. + return { + type: 'heading', + depth: undefined, + children: [] + } + } + + /** @returns {Break} */ + function hardBreak() { + return { + type: 'break' + } + } + + /** @returns {HTML} */ + function html() { + return { + type: 'html', + value: '' + } + } + + /** @returns {Image} */ + function image() { + return { + type: 'image', + title: null, + url: '', + alt: null + } + } + + /** @returns {Link} */ + function link() { + return { + type: 'link', + title: null, + url: '', + children: [] + } + } + + /** + * @param {Token} token + * @returns {List} + */ + function list(token) { + return { + type: 'list', + ordered: token.type === 'listOrdered', + start: null, + spread: token._spread, + children: [] + } + } + + /** + * @param {Token} token + * @returns {ListItem} + */ + function listItem(token) { + return { + type: 'listItem', + spread: token._spread, + checked: null, + children: [] + } + } + + /** @returns {Paragraph} */ + function paragraph() { + return { + type: 'paragraph', + children: [] + } + } + + /** @returns {Strong} */ + function strong() { + return { + type: 'strong', + children: [] + } + } + + /** @returns {Text} */ + function text() { + return { + type: 'text', + value: '' + } + } + + /** @returns {ThematicBreak} */ + function thematicBreak() { + return { + type: 'thematicBreak' + } + } +} + +/** + * Copy a point-like value. + * + * @param {Point} d + * Point-like value. + * @returns {Point} + * unist point. + */ +function lib_point(d) { + return { + line: d.line, + column: d.column, + offset: d.offset + } +} + +/** + * @param {Config} combined + * @param {Array>} extensions + * @returns {void} + */ +function configure(combined, extensions) { + let index = -1 + while (++index < extensions.length) { + const value = extensions[index] + if (Array.isArray(value)) { + configure(combined, value) + } else { + extension(combined, value) + } + } +} + +/** + * @param {Config} combined + * @param {Extension} extension + * @returns {void} + */ +function extension(combined, extension) { + /** @type {keyof Extension} */ + let key + for (key in extension) { + if (lib_own.call(extension, key)) { + if (key === 'canContainEols') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'transforms') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'enter' || key === 'exit') { + const right = extension[key] + if (right) { + Object.assign(combined[key], right) + } + } + } + } +} + +/** @type {OnEnterError} */ +function defaultOnError(left, right) { + if (left) { + throw new Error( + 'Cannot close `' + + left.type + + '` (' + + stringifyPosition({ + start: left.start, + end: left.end + }) + + '): a different token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is open' + ) + } else { + throw new Error( + 'Cannot close document, a token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is still open' + ) + } +} + +// EXTERNAL MODULE: ./node_modules/ts-dedent/esm/index.js +var esm = __webpack_require__(60513); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/createText-ca0c5216.js + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = (0,esm/* dedent */.T)(withoutMultipleNewlines); + return withoutExtraSpaces; +} +function markdownToLines(markdown) { + const preprocessedMarkdown = preprocessMarkdown(markdown); + const { children } = fromMarkdown(preprocessedMarkdown); + const lines = [[]]; + let currentLine = 0; + function processNode(node, parentType = "normal") { + if (node.type === "text") { + const textLines = node.value.split("\n"); + textLines.forEach((textLine, index) => { + if (index !== 0) { + currentLine++; + lines.push([]); + } + textLine.split(" ").forEach((word) => { + if (word) { + lines[currentLine].push({ content: word, type: parentType }); + } + }); + }); + } else if (node.type === "strong" || node.type === "emphasis") { + node.children.forEach((contentNode) => { + processNode(contentNode, node.type); + }); + } + } + children.forEach((treeNode) => { + if (treeNode.type === "paragraph") { + treeNode.children.forEach((contentNode) => { + processNode(contentNode); + }); + } + }); + return lines; +} +function markdownToHTML(markdown) { + const { children } = fromMarkdown(markdown); + function output(node) { + if (node.type === "text") { + return node.value.replace(/\n/g, "
    "); + } else if (node.type === "strong") { + return `${node.children.map(output).join("")}`; + } else if (node.type === "emphasis") { + return `${node.children.map(output).join("")}`; + } else if (node.type === "paragraph") { + return `

    ${node.children.map(output).join("")}

    `; + } + return `Unsupported markdown: ${node.type}`; + } + return children.map(output).join(""); +} +function splitTextToChars(text) { + if (Intl.Segmenter) { + return [...new Intl.Segmenter().segment(text)].map((s) => s.segment); + } + return [...text]; +} +function splitWordToFitWidth(checkFit, word) { + const characters = splitTextToChars(word.content); + return splitWordToFitWidthRecursion(checkFit, [], characters, word.type); +} +function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) { + if (remainingChars.length === 0) { + return [ + { content: usedChars.join(""), type }, + { content: "", type } + ]; + } + const [nextChar, ...rest] = remainingChars; + const newWord = [...usedChars, nextChar]; + if (checkFit([{ content: newWord.join(""), type }])) { + return splitWordToFitWidthRecursion(checkFit, newWord, rest, type); + } + if (usedChars.length === 0 && nextChar) { + usedChars.push(nextChar); + remainingChars.shift(); + } + return [ + { content: usedChars.join(""), type }, + { content: remainingChars.join(""), type } + ]; +} +function splitLineToFitWidth(line, checkFit) { + if (line.some(({ content }) => content.includes("\n"))) { + throw new Error("splitLineToFitWidth does not support newlines in the line"); + } + return splitLineToFitWidthRecursion(line, checkFit); +} +function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) { + if (words.length === 0) { + if (newLine.length > 0) { + lines.push(newLine); + } + return lines.length > 0 ? lines : []; + } + let joiner = ""; + if (words[0].content === " ") { + joiner = " "; + words.shift(); + } + const nextWord = words.shift() ?? { content: " ", type: "normal" }; + const lineWithNextWord = [...newLine]; + if (joiner !== "") { + lineWithNextWord.push({ content: joiner, type: "normal" }); + } + lineWithNextWord.push(nextWord); + if (checkFit(lineWithNextWord)) { + return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord); + } + if (newLine.length > 0) { + lines.push(newLine); + words.unshift(nextWord); + } else if (nextWord.content) { + const [line, rest] = splitWordToFitWidth(checkFit, nextWord); + lines.push([line]); + if (rest.content) { + words.unshift(rest); + } + } + return splitLineToFitWidthRecursion(words, checkFit, lines); +} +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlSpan(element, node, width, classes, addBackground = false) { + const fo = element.append("foreignObject"); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + ` + " + label + "" + ); + applyStyle(div, node.labelStyle); + div.style("display", "table-cell"); + div.style("white-space", "nowrap"); + div.style("max-width", width + "px"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + if (addBackground) { + div.attr("class", "labelBkg"); + } + let bbox = div.node().getBoundingClientRect(); + if (bbox.width === width) { + div.style("display", "table"); + div.style("white-space", "break-spaces"); + div.style("width", width + "px"); + bbox = div.node().getBoundingClientRect(); + } + fo.style("width", bbox.width); + fo.style("height", bbox.height); + return fo.node(); +} +function createTspan(textElement, lineIndex, lineHeight) { + return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); +} +function computeWidthOfText(parentNode, lineHeight, line) { + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, line); + const textLength = testSpan.node().getComputedTextLength(); + testElement.remove(); + return textLength; +} +function computeDimensionOfText(parentNode, lineHeight, text) { + var _a; + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, [{ content: text, type: "normal" }]); + const textDimension = (_a = testSpan.node()) == null ? void 0 : _a.getBoundingClientRect(); + if (textDimension) { + testElement.remove(); + } + return textDimension; +} +function createFormattedText(width, g, structuredText, addBackground = false) { + const lineHeight = 1.1; + const labelGroup = g.append("g"); + const bkg = labelGroup.insert("rect").attr("class", "background"); + const textElement = labelGroup.append("text").attr("y", "-10.1"); + let lineIndex = 0; + for (const line of structuredText) { + const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width; + const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth); + for (const preparedLine of linesUnderWidth) { + const tspan = createTspan(textElement, lineIndex, lineHeight); + updateTextContentAndStyles(tspan, preparedLine); + lineIndex++; + } + } + if (addBackground) { + const bbox = textElement.node().getBBox(); + const padding = 2; + bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); + return labelGroup.node(); + } else { + return textElement.node(); + } +} +function updateTextContentAndStyles(tspan, wrappedLine) { + tspan.text(""); + wrappedLine.forEach((word, index) => { + const innerTspan = tspan.append("tspan").attr("font-style", word.type === "emphasis" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); + if (index === 0) { + innerTspan.text(word.content); + } else { + innerTspan.text(" " + word.content); + } + }); +} +const createText = (el, text = "", { + style = "", + isTitle = false, + classes = "", + useHtmlLabels = true, + isNode = true, + width = 200, + addSvgBackground = false +} = {}) => { + mermaid_6dc72991.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,mermaid_6dc72991.M)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + // cspell: disable-line + (s) => `` + ), + labelStyle: style.replace("fill:", "color:") + }; + const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground); + return vertexNode; + } else { + const structuredText = markdownToLines(text); + const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); + return svgLabel; + } +}; + + + +/***/ }), + +/***/ 98055: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ insertMarkers$1), +/* harmony export */ b: () => (/* binding */ clear$1), +/* harmony export */ c: () => (/* binding */ createLabel$1), +/* harmony export */ d: () => (/* binding */ clear), +/* harmony export */ e: () => (/* binding */ insertNode), +/* harmony export */ f: () => (/* binding */ insertEdgeLabel), +/* harmony export */ g: () => (/* binding */ getSubGraphTitleMargins), +/* harmony export */ h: () => (/* binding */ insertEdge), +/* harmony export */ i: () => (/* binding */ intersectRect$1), +/* harmony export */ j: () => (/* binding */ positionEdgeLabel), +/* harmony export */ k: () => (/* binding */ getLineFunctionsWithOffset), +/* harmony export */ l: () => (/* binding */ labelHelper), +/* harmony export */ m: () => (/* binding */ addEdgeMarkers), +/* harmony export */ p: () => (/* binding */ positionNode), +/* harmony export */ s: () => (/* binding */ setNodeElem), +/* harmony export */ u: () => (/* binding */ updateNodeBounds) +/* harmony export */ }); +/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99702); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); +/* harmony import */ var _createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(18897); + + + +const insertMarkers = (elem, markerArray, type, id) => { + markerArray.forEach((markerName) => { + markers[markerName](elem, type, id); + }); +}; +const extension = (elem, type, id) => { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Making markers for ", id); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionStart").attr("class", "marker extension " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionEnd").attr("class", "marker extension " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); +}; +const composition = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionStart").attr("class", "marker composition " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionEnd").attr("class", "marker composition " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const aggregation = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationStart").attr("class", "marker aggregation " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationEnd").attr("class", "marker aggregation " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const dependency = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyStart").attr("class", "marker dependency " + type).attr("refX", 6).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyEnd").attr("class", "marker dependency " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const lollipop = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopStart").attr("class", "marker lollipop " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopEnd").attr("class", "marker lollipop " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); +}; +const point = (elem, type, id) => { + elem.append("marker").attr("id", id + "_" + type + "-pointEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 6).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", id + "_" + type + "-pointStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 4.5).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const circle$1 = (elem, type, id) => { + elem.append("marker").attr("id", id + "_" + type + "-circleEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", id + "_" + type + "-circleStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const cross = (elem, type, id) => { + elem.append("marker").attr("id", id + "_" + type + "-crossEnd").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", id + "_" + type + "-crossStart").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); +}; +const barb = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); +}; +const markers = { + extension, + composition, + aggregation, + dependency, + lollipop, + point, + circle: circle$1, + cross, + barb +}; +const insertMarkers$1 = insertMarkers; +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlLabel(node) { + const fo = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + '" + label + "" + ); + applyStyle(div, node.labelStyle); + div.style("display", "inline-block"); + div.style("white-space", "nowrap"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + return fo.node(); +} +const createLabel = (_vertexText, style, isTitle, isNode) => { + let vertexText = _vertexText || ""; + if (typeof vertexText === "object") { + vertexText = vertexText[0]; + } + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + vertexText = vertexText.replace(/\\n|\n/g, "
    "); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("vertexText" + vertexText); + const node = { + isNode, + label: (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.M)(vertexText).replace( + /fa[blrs]?:fa-[\w-]+/g, + // cspell: disable-line + (s) => `` + ), + labelStyle: style.replace("fill:", "color:") + }; + let vertexNode = addHtmlLabel(node); + return vertexNode; + } else { + const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", style.replace("color:", "fill:")); + let rows = []; + if (typeof vertexText === "string") { + rows = vertexText.split(/\\n|\n|/gi); + } else if (Array.isArray(vertexText)) { + rows = vertexText; + } else { + rows = []; + } + for (const row of rows) { + const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "0"); + if (isTitle) { + tspan.setAttribute("class", "title-row"); + } else { + tspan.setAttribute("class", "row"); + } + tspan.textContent = row.trim(); + svgLabel.appendChild(tspan); + } + return svgLabel; + } +}; +const createLabel$1 = createLabel; +const labelHelper = async (parent, node, _classes, isNode) => { + let classes; + const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + if (!_classes) { + classes = "node default"; + } else { + classes = _classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const label = shapeSvg.insert("g").attr("class", "label").attr("style", node.labelStyle); + let labelText; + if (node.labelText === void 0) { + labelText = ""; + } else { + labelText = typeof node.labelText === "string" ? node.labelText : node.labelText[0]; + } + const textNode = label.node(); + let text; + if (node.labelType === "markdown") { + text = (0,_createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_2__.a)(label, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.M)(labelText), (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()), { + useHtmlLabels, + width: node.width || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.wrappingWidth, + classes: "markdown-node-label" + }); + } else { + text = textNode.appendChild( + createLabel$1( + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.M)(labelText), (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()), + node.labelStyle, + false, + isNode + ) + ); + } + let bbox = text.getBBox(); + const halfPadding = node.padding / 2; + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(text); + const images = div.getElementsByTagName("img"); + if (images) { + const noImgText = labelText.replace(/]*>/g, "").trim() === ""; + await Promise.all( + [...images].map( + (img) => new Promise((res) => { + function setupImage() { + img.style.display = "flex"; + img.style.flexDirection = "column"; + if (noImgText) { + const bodyFontSize = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize ? (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize : window.getComputedStyle(document.body).fontSize; + const enlargingFactor = 5; + const width = parseInt(bodyFontSize, 10) * enlargingFactor + "px"; + img.style.minWidth = width; + img.style.maxWidth = width; + } else { + img.style.width = "100%"; + } + res(img); + } + setTimeout(() => { + if (img.complete) { + setupImage(); + } + }); + img.addEventListener("error", setupImage); + img.addEventListener("load", setupImage); + }) + ) + ); + } + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (useHtmlLabels) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } else { + label.attr("transform", "translate(0, " + -bbox.height / 2 + ")"); + } + if (node.centerLabel) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } + label.insert("rect", ":first-child"); + return { shapeSvg, bbox, halfPadding, label }; +}; +const updateNodeBounds = (node, element) => { + const bbox = element.node().getBBox(); + node.width = bbox.width; + node.height = bbox.height; +}; +function insertPolygonShape(parent, w, h, points) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("class", "label-container").attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); +} +function intersectNode(node, point2) { + return node.intersect(point2); +} +function intersectEllipse(node, rx, ry, point2) { + var cx = node.x; + var cy = node.y; + var px = cx - point2.x; + var py = cy - point2.y; + var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); + var dx = Math.abs(rx * ry * px / det); + if (point2.x < cx) { + dx = -dx; + } + var dy = Math.abs(rx * ry * py / det); + if (point2.y < cy) { + dy = -dy; + } + return { x: cx + dx, y: cy + dy }; +} +function intersectCircle(node, rx, point2) { + return intersectEllipse(node, rx, rx, point2); +} +function intersectLine(p1, p2, q1, q2) { + var a1, a2, b1, b2, c1, c2; + var r1, r2, r3, r4; + var denom, offset, num; + var x, y; + a1 = p2.y - p1.y; + b1 = p1.x - p2.x; + c1 = p2.x * p1.y - p1.x * p2.y; + r3 = a1 * q1.x + b1 * q1.y + c1; + r4 = a1 * q2.x + b1 * q2.y + c1; + if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { + return; + } + a2 = q2.y - q1.y; + b2 = q1.x - q2.x; + c2 = q2.x * q1.y - q1.x * q2.y; + r1 = a2 * p1.x + b2 * p1.y + c2; + r2 = a2 * p2.x + b2 * p2.y + c2; + if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { + return; + } + denom = a1 * b2 - a2 * b1; + if (denom === 0) { + return; + } + offset = Math.abs(denom / 2); + num = b1 * c2 - b2 * c1; + x = num < 0 ? (num - offset) / denom : (num + offset) / denom; + num = a2 * c1 - a1 * c2; + y = num < 0 ? (num - offset) / denom : (num + offset) / denom; + return { x, y }; +} +function sameSign(r1, r2) { + return r1 * r2 > 0; +} +function intersectPolygon(node, polyPoints, point2) { + var x1 = node.x; + var y1 = node.y; + var intersections = []; + var minX = Number.POSITIVE_INFINITY; + var minY = Number.POSITIVE_INFINITY; + if (typeof polyPoints.forEach === "function") { + polyPoints.forEach(function(entry) { + minX = Math.min(minX, entry.x); + minY = Math.min(minY, entry.y); + }); + } else { + minX = Math.min(minX, polyPoints.x); + minY = Math.min(minY, polyPoints.y); + } + var left = x1 - node.width / 2 - minX; + var top = y1 - node.height / 2 - minY; + for (var i = 0; i < polyPoints.length; i++) { + var p1 = polyPoints[i]; + var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; + var intersect2 = intersectLine( + node, + point2, + { x: left + p1.x, y: top + p1.y }, + { x: left + p2.x, y: top + p2.y } + ); + if (intersect2) { + intersections.push(intersect2); + } + } + if (!intersections.length) { + return node; + } + if (intersections.length > 1) { + intersections.sort(function(p, q) { + var pdx = p.x - point2.x; + var pdy = p.y - point2.y; + var distp = Math.sqrt(pdx * pdx + pdy * pdy); + var qdx = q.x - point2.x; + var qdy = q.y - point2.y; + var distq = Math.sqrt(qdx * qdx + qdy * qdy); + return distp < distq ? -1 : distp === distq ? 0 : 1; + }); + } + return intersections[0]; +} +const intersectRect = (node, point2) => { + var x = node.x; + var y = node.y; + var dx = point2.x - x; + var dy = point2.y - y; + var w = node.width / 2; + var h = node.height / 2; + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + if (dy < 0) { + h = -h; + } + sx = dy === 0 ? 0 : h * dx / dy; + sy = h; + } else { + if (dx < 0) { + w = -w; + } + sx = w; + sy = dx === 0 ? 0 : w * dy / dx; + } + return { x: x + sx, y: y + sy }; +}; +const intersectRect$1 = intersectRect; +const intersect = { + node: intersectNode, + circle: intersectCircle, + ellipse: intersectEllipse, + polygon: intersectPolygon, + rect: intersectRect$1 +}; +const note = async (parent, node) => { + const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels; + if (!useHtmlLabels) { + node.centerLabel = true; + } + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes, + true + ); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Classes = ", node.classes); + const rect2 = shapeSvg.insert("rect", ":first-child"); + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const note$1 = note; +const expandAndDeduplicateDirections = (directions) => { + const uniqueDirections = /* @__PURE__ */ new Set(); + for (const direction of directions) { + switch (direction) { + case "x": + uniqueDirections.add("right"); + uniqueDirections.add("left"); + break; + case "y": + uniqueDirections.add("up"); + uniqueDirections.add("down"); + break; + default: + uniqueDirections.add(direction); + break; + } + } + return uniqueDirections; +}; +const getArrowPoints = (duplicatedDirections, bbox, node) => { + const directions = expandAndDeduplicateDirections(duplicatedDirections); + const f = 2; + const height = bbox.height + 2 * node.padding; + const midpoint = height / f; + const width = bbox.width + 2 * midpoint + node.padding; + const padding = node.padding / 2; + if (directions.has("right") && directions.has("left") && directions.has("up") && directions.has("down")) { + return [ + // Bottom + { x: 0, y: 0 }, + { x: midpoint, y: 0 }, + { x: width / 2, y: 2 * padding }, + { x: width - midpoint, y: 0 }, + { x: width, y: 0 }, + // Right + { x: width, y: -height / 3 }, + { x: width + 2 * padding, y: -height / 2 }, + { x: width, y: -2 * height / 3 }, + { x: width, y: -height }, + // Top + { x: width - midpoint, y: -height }, + { x: width / 2, y: -height - 2 * padding }, + { x: midpoint, y: -height }, + // Left + { x: 0, y: -height }, + { x: 0, y: -2 * height / 3 }, + { x: -2 * padding, y: -height / 2 }, + { x: 0, y: -height / 3 } + ]; + } + if (directions.has("right") && directions.has("left") && directions.has("up")) { + return [ + { x: midpoint, y: 0 }, + { x: width - midpoint, y: 0 }, + { x: width, y: -height / 2 }, + { x: width - midpoint, y: -height }, + { x: midpoint, y: -height }, + { x: 0, y: -height / 2 } + ]; + } + if (directions.has("right") && directions.has("left") && directions.has("down")) { + return [ + { x: 0, y: 0 }, + { x: midpoint, y: -height }, + { x: width - midpoint, y: -height }, + { x: width, y: 0 } + ]; + } + if (directions.has("right") && directions.has("up") && directions.has("down")) { + return [ + { x: 0, y: 0 }, + { x: width, y: -midpoint }, + { x: width, y: -height + midpoint }, + { x: 0, y: -height } + ]; + } + if (directions.has("left") && directions.has("up") && directions.has("down")) { + return [ + { x: width, y: 0 }, + { x: 0, y: -midpoint }, + { x: 0, y: -height + midpoint }, + { x: width, y: -height } + ]; + } + if (directions.has("right") && directions.has("left")) { + return [ + { x: midpoint, y: 0 }, + { x: midpoint, y: -padding }, + { x: width - midpoint, y: -padding }, + { x: width - midpoint, y: 0 }, + { x: width, y: -height / 2 }, + { x: width - midpoint, y: -height }, + { x: width - midpoint, y: -height + padding }, + { x: midpoint, y: -height + padding }, + { x: midpoint, y: -height }, + { x: 0, y: -height / 2 } + ]; + } + if (directions.has("up") && directions.has("down")) { + return [ + // Bottom center + { x: width / 2, y: 0 }, + // Left pont of bottom arrow + { x: 0, y: -padding }, + { x: midpoint, y: -padding }, + // Left top over vertical section + { x: midpoint, y: -height + padding }, + { x: 0, y: -height + padding }, + // Top of arrow + { x: width / 2, y: -height }, + { x: width, y: -height + padding }, + // Top of right vertical bar + { x: width - midpoint, y: -height + padding }, + { x: width - midpoint, y: -padding }, + { x: width, y: -padding } + ]; + } + if (directions.has("right") && directions.has("up")) { + return [ + { x: 0, y: 0 }, + { x: width, y: -midpoint }, + { x: 0, y: -height } + ]; + } + if (directions.has("right") && directions.has("down")) { + return [ + { x: 0, y: 0 }, + { x: width, y: 0 }, + { x: 0, y: -height } + ]; + } + if (directions.has("left") && directions.has("up")) { + return [ + { x: width, y: 0 }, + { x: 0, y: -midpoint }, + { x: width, y: -height } + ]; + } + if (directions.has("left") && directions.has("down")) { + return [ + { x: width, y: 0 }, + { x: 0, y: 0 }, + { x: width, y: -height } + ]; + } + if (directions.has("right")) { + return [ + { x: midpoint, y: -padding }, + { x: midpoint, y: -padding }, + { x: width - midpoint, y: -padding }, + { x: width - midpoint, y: 0 }, + { x: width, y: -height / 2 }, + { x: width - midpoint, y: -height }, + { x: width - midpoint, y: -height + padding }, + // top left corner of arrow + { x: midpoint, y: -height + padding }, + { x: midpoint, y: -height + padding } + ]; + } + if (directions.has("left")) { + return [ + { x: midpoint, y: 0 }, + { x: midpoint, y: -padding }, + // Two points, the right corners + { x: width - midpoint, y: -padding }, + { x: width - midpoint, y: -height + padding }, + { x: midpoint, y: -height + padding }, + { x: midpoint, y: -height }, + { x: 0, y: -height / 2 } + ]; + } + if (directions.has("up")) { + return [ + // Bottom center + { x: midpoint, y: -padding }, + // Left top over vertical section + { x: midpoint, y: -height + padding }, + { x: 0, y: -height + padding }, + // Top of arrow + { x: width / 2, y: -height }, + { x: width, y: -height + padding }, + // Top of right vertical bar + { x: width - midpoint, y: -height + padding }, + { x: width - midpoint, y: -padding } + ]; + } + if (directions.has("down")) { + return [ + // Bottom center + { x: width / 2, y: 0 }, + // Left pont of bottom arrow + { x: 0, y: -padding }, + { x: midpoint, y: -padding }, + // Left top over vertical section + { x: midpoint, y: -height + padding }, + { x: width - midpoint, y: -height + padding }, + { x: width - midpoint, y: -padding }, + { x: width, y: -padding } + ]; + } + return [{ x: 0, y: 0 }]; +}; +const formatClass = (str) => { + if (str) { + return " " + str; + } + return ""; +}; +const getClassesFromNode = (node, otherClasses) => { + return `${otherClasses ? otherClasses : "node default"}${formatClass(node.classes)} ${formatClass( + node.class + )}`; +}; +const question = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const s = w + h; + const points = [ + { x: s / 2, y: 0 }, + { x: s, y: -s / 2 }, + { x: s / 2, y: -s }, + { x: 0, y: -s / 2 } + ]; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Question main (Circle)"); + const questionElem = insertPolygonShape(shapeSvg, s, s, points); + questionElem.attr("style", node.style); + updateNodeBounds(node, questionElem); + node.intersect = function(point2) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("Intersect called"); + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const choice = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const s = 28; + const points = [ + { x: 0, y: s / 2 }, + { x: s / 2, y: 0 }, + { x: 0, y: -s / 2 }, + { x: -s / 2, y: 0 } + ]; + const choice2 = shapeSvg.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ); + choice2.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28); + node.width = 28; + node.height = 28; + node.intersect = function(point2) { + return intersect.circle(node, 14, point2); + }; + return shapeSvg; +}; +const hexagon = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const f = 4; + const h = bbox.height + node.padding; + const m = h / f; + const w = bbox.width + 2 * m + node.padding; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + const hex = insertPolygonShape(shapeSvg, w, h, points); + hex.attr("style", node.style); + updateNodeBounds(node, hex); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const block_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true); + const f = 2; + const h = bbox.height + 2 * node.padding; + const m = h / f; + const w = bbox.width + 2 * m + node.padding; + const points = getArrowPoints(node.directions, bbox, node); + const blockArrow = insertPolygonShape(shapeSvg, w, h, points); + blockArrow.attr("style", node.style); + updateNodeBounds(node, blockArrow); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_left_inv_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -h / 2, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: -h / 2, y: -h }, + { x: 0, y: -h / 2 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + node.width = w + h; + node.height = h; + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_right = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper(parent, node, getClassesFromNode(node), true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_left = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 2 * h / 6, y: 0 }, + { x: w + h / 6, y: 0 }, + { x: w - 2 * h / 6, y: -h }, + { x: -h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const trapezoid = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w + 2 * h / 6, y: 0 }, + { x: w - h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const inv_trapezoid = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: -2 * h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_right_inv_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w + h / 2, y: 0 }, + { x: w, y: -h / 2 }, + { x: w + h / 2, y: -h }, + { x: 0, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const cylinder = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const rx = w / 2; + const ry = rx / (2.5 + w / 50); + const h = bbox.height + ry + node.padding; + const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; + const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node.style).attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); + updateNodeBounds(node, el); + node.intersect = function(point2) { + const pos = intersect.rect(node, point2); + const x = pos.x - node.x; + if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { + let y = ry * ry * (1 - x * x / (rx * rx)); + if (y != 0) { + y = Math.sqrt(y); + } + y = ry - y; + if (point2.y - node.y > 0) { + y = -y; + } + pos.y += y; + } + return pos; + }; + return shapeSvg; +}; +const rect = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes + " " + node.class, + true + ); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = node.positioned ? node.width : bbox.width + node.padding; + const totalHeight = node.positioned ? node.height : bbox.height + node.padding; + const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; + const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; + rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const composite = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes, + true + ); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = node.positioned ? node.width : bbox.width + node.padding; + const totalHeight = node.positioned ? node.height : bbox.height + node.padding; + const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; + const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; + rect2.attr("class", "basic cluster composite label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const labelRect = async (parent, node) => { + const { shapeSvg } = await labelHelper(parent, node, "label", true); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Classes = ", node.class); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = 0; + const totalHeight = 0; + rect2.attr("width", totalWidth).attr("height", totalHeight); + shapeSvg.attr("class", "label edgeLabel"); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +function applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) { + const strokeDashArray = []; + const addBorder = (length) => { + strokeDashArray.push(length, 0); + }; + const skipBorder = (length) => { + strokeDashArray.push(0, length); + }; + if (borders.includes("t")) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("r")) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + if (borders.includes("b")) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("l")) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add left border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + rect2.attr("stroke-dasharray", strokeDashArray.join(" ")); +} +const rectWithTitle = (parent, node) => { + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const innerLine = shapeSvg.insert("line"); + const label = shapeSvg.insert("g").attr("class", "label"); + const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText; + let title = ""; + if (typeof text2 === "object") { + title = text2[0]; + } else { + title = text2; + } + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Label text abc79", title, text2, typeof text2 === "object"); + const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true)); + let bbox = { width: 0, height: 0 }; + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Text 2", text2); + const textRows = text2.slice(1, text2.length); + let titleBox = text.getBBox(); + const descr = label.node().appendChild( + createLabel$1(textRows.join ? textRows.join("
    ") : textRows, node.labelStyle, true, true) + ); + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = descr.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(descr); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const halfPadding = node.padding / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(descr).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")" + ); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(text).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", 0)" + ); + bbox = label.node().getBBox(); + label.attr( + "transform", + "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")" + ); + rect2.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const stadium = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const h = bbox.height + node.padding; + const w = bbox.width + h / 4 + node.padding; + const rect2 = shapeSvg.insert("rect", ":first-child").attr("style", node.style).attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const circle = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle intersect", node, bbox.width / 2 + halfPadding, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding, point2); + }; + return shapeSvg; +}; +const doublecircle = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const gap = 5; + const circleGroup = shapeSvg.insert("g", ":first-child"); + const outerCircle = circleGroup.insert("circle"); + const innerCircle = circleGroup.insert("circle"); + circleGroup.attr("class", node.class); + outerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node.padding + gap * 2).attr("height", bbox.height + node.padding + gap * 2); + innerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); + updateNodeBounds(node, outerCircle); + node.intersect = function(point2) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle intersect", node, bbox.width / 2 + halfPadding + gap, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2); + }; + return shapeSvg; +}; +const subroutine = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: 0, y: -h }, + { x: 0, y: 0 }, + { x: -8, y: 0 }, + { x: w + 8, y: 0 }, + { x: w + 8, y: -h }, + { x: -8, y: -h }, + { x: -8, y: 0 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const start = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const forkJoin = (parent, node, dir) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + let width = 70; + let height = 10; + if (dir === "LR") { + width = 10; + height = 70; + } + const shape = shapeSvg.append("rect").attr("x", -1 * width / 2).attr("y", -1 * height / 2).attr("width", width).attr("height", height).attr("class", "fork-join"); + updateNodeBounds(node, shape); + node.height = node.height + node.padding / 2; + node.width = node.width + node.padding / 2; + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const end = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const innerCircle = shapeSvg.insert("circle", ":first-child"); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const class_box = (parent, node) => { + const halfPadding = node.padding / 2; + const rowPadding = 4; + const lineHeight = 8; + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const topLine = shapeSvg.insert("line"); + const bottomLine = shapeSvg.insert("line"); + let maxWidth = 0; + let maxHeight = rowPadding; + const labelContainer = shapeSvg.insert("g").attr("class", "label"); + let verticalPos = 0; + const hasInterface = node.classData.annotations && node.classData.annotations[0]; + const interfaceLabelText = node.classData.annotations[0] ? "«" + node.classData.annotations[0] + "»" : ""; + const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true)); + let interfaceBBox = interfaceLabel.getBBox(); + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = interfaceLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(interfaceLabel); + interfaceBBox = div.getBoundingClientRect(); + dv.attr("width", interfaceBBox.width); + dv.attr("height", interfaceBBox.height); + } + if (node.classData.annotations[0]) { + maxHeight += interfaceBBox.height + rowPadding; + maxWidth += interfaceBBox.width; + } + let classTitleString = node.classData.label; + if (node.classData.type !== void 0 && node.classData.type !== "") { + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + classTitleString += "<" + node.classData.type + ">"; + } else { + classTitleString += "<" + node.classData.type + ">"; + } + } + const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true)); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(classTitleLabel).attr("class", "classTitle"); + let classTitleBBox = classTitleLabel.getBBox(); + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = classTitleLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(classTitleLabel); + classTitleBBox = div.getBoundingClientRect(); + dv.attr("width", classTitleBBox.width); + dv.attr("height", classTitleBBox.height); + } + maxHeight += classTitleBBox.height + rowPadding; + if (classTitleBBox.width > maxWidth) { + maxWidth = classTitleBBox.width; + } + const classAttributes = []; + node.classData.members.forEach((member) => { + const parsedInfo = member.getDisplayDetails(); + let parsedText = parsedInfo.displayText; + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + parsedText = parsedText.replace(//g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + parsedText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classAttributes.push(lbl); + }); + maxHeight += lineHeight; + const classMethods = []; + node.classData.methods.forEach((member) => { + const parsedInfo = member.getDisplayDetails(); + let displayText = parsedInfo.displayText; + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + displayText = displayText.replace(//g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + displayText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classMethods.push(lbl); + }); + maxHeight += lineHeight; + if (hasInterface) { + let diffX2 = (maxWidth - interfaceBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(interfaceLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")" + ); + verticalPos = interfaceBBox.height + rowPadding; + } + let diffX = (maxWidth - classTitleBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(classTitleLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + topLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classAttributes.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")" + ); + const memberBBox = lbl == null ? void 0 : lbl.getBBox(); + verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; + }); + verticalPos += lineHeight; + bottomLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classMethods.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + const memberBBox = lbl == null ? void 0 : lbl.getBBox(); + verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; + }); + rect2.attr("style", node.style).attr("class", "outer title-state").attr("x", -maxWidth / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth + node.padding).attr("height", maxHeight + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const shapes = { + rhombus: question, + composite, + question, + rect, + labelRect, + rectWithTitle, + choice, + circle, + doublecircle, + stadium, + hexagon, + block_arrow, + rect_left_inv_arrow, + lean_right, + lean_left, + trapezoid, + inv_trapezoid, + rect_right_inv_arrow, + cylinder, + start, + end, + note: note$1, + subroutine, + fork: forkJoin, + join: forkJoin, + class_box +}; +let nodeElems = {}; +const insertNode = async (elem, node, dir) => { + let newEl; + let el; + if (node.link) { + let target; + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel === "sandbox") { + target = "_top"; + } else if (node.linkTarget) { + target = node.linkTarget || "_blank"; + } + newEl = elem.insert("svg:a").attr("xlink:href", node.link).attr("target", target); + el = await shapes[node.shape](newEl, node, dir); + } else { + el = await shapes[node.shape](elem, node, dir); + newEl = el; + } + if (node.tooltip) { + el.attr("title", node.tooltip); + } + if (node.class) { + el.attr("class", "node default " + node.class); + } + newEl.attr("data-node", "true"); + newEl.attr("data-id", node.id); + nodeElems[node.id] = newEl; + if (node.haveCallback) { + nodeElems[node.id].attr("class", nodeElems[node.id].attr("class") + " clickable"); + } + return newEl; +}; +const setNodeElem = (elem, node) => { + nodeElems[node.id] = elem; +}; +const clear$1 = () => { + nodeElems = {}; +}; +const positionNode = (node) => { + const el = nodeElems[node.id]; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.trace( + "Transforming node", + node.diff, + node, + "translate(" + (node.x - node.width / 2 - 5) + ", " + node.width / 2 + ")" + ); + const padding = 8; + const diff = node.diff || 0; + if (node.clusterNode) { + el.attr( + "transform", + "translate(" + (node.x + diff - node.width / 2) + ", " + (node.y - node.height / 2 - padding) + ")" + ); + } else { + el.attr("transform", "translate(" + node.x + ", " + node.y + ")"); + } + return diff; +}; +const getSubGraphTitleMargins = ({ + flowchart +}) => { + var _a, _b; + const subGraphTitleTopMargin = ((_a = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _a.top) ?? 0; + const subGraphTitleBottomMargin = ((_b = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _b.bottom) ?? 0; + const subGraphTitleTotalMargin = subGraphTitleTopMargin + subGraphTitleBottomMargin; + return { + subGraphTitleTopMargin, + subGraphTitleBottomMargin, + subGraphTitleTotalMargin + }; +}; +const markerOffsets = { + aggregation: 18, + extension: 18, + composition: 18, + dependency: 6, + lollipop: 13.5, + arrow_point: 5.3 +}; +function calculateDeltaAndAngle(point1, point2) { + if (point1 === void 0 || point2 === void 0) { + return { angle: 0, deltaX: 0, deltaY: 0 }; + } + point1 = pointTransformer(point1); + point2 = pointTransformer(point2); + const [x1, y1] = [point1.x, point1.y]; + const [x2, y2] = [point2.x, point2.y]; + const deltaX = x2 - x1; + const deltaY = y2 - y1; + return { angle: Math.atan(deltaY / deltaX), deltaX, deltaY }; +} +const pointTransformer = (data) => { + if (Array.isArray(data)) { + return { x: data[0], y: data[1] }; + } + return data; +}; +const getLineFunctionsWithOffset = (edge) => { + return { + x: function(d, i, data) { + let offset = 0; + if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { + const { angle, deltaX } = calculateDeltaAndAngle(data[0], data[1]); + offset = markerOffsets[edge.arrowTypeStart] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); + } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { + const { angle, deltaX } = calculateDeltaAndAngle( + data[data.length - 1], + data[data.length - 2] + ); + offset = markerOffsets[edge.arrowTypeEnd] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); + } + return pointTransformer(d).x + offset; + }, + y: function(d, i, data) { + let offset = 0; + if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { + const { angle, deltaY } = calculateDeltaAndAngle(data[0], data[1]); + offset = markerOffsets[edge.arrowTypeStart] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); + } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { + const { angle, deltaY } = calculateDeltaAndAngle( + data[data.length - 1], + data[data.length - 2] + ); + offset = markerOffsets[edge.arrowTypeEnd] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); + } + return pointTransformer(d).y + offset; + } + }; +}; +const addEdgeMarkers = (svgPath, edge, url, id, diagramType) => { + if (edge.arrowTypeStart) { + addEdgeMarker(svgPath, "start", edge.arrowTypeStart, url, id, diagramType); + } + if (edge.arrowTypeEnd) { + addEdgeMarker(svgPath, "end", edge.arrowTypeEnd, url, id, diagramType); + } +}; +const arrowTypesMap = { + arrow_cross: "cross", + arrow_point: "point", + arrow_barb: "barb", + arrow_circle: "circle", + aggregation: "aggregation", + extension: "extension", + composition: "composition", + dependency: "dependency", + lollipop: "lollipop" +}; +const addEdgeMarker = (svgPath, position, arrowType, url, id, diagramType) => { + const endMarkerType = arrowTypesMap[arrowType]; + if (!endMarkerType) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown arrow type: ${arrowType}`); + return; + } + const suffix = position === "start" ? "Start" : "End"; + svgPath.attr(`marker-${position}`, `url(${url}#${id}_${diagramType}-${endMarkerType}${suffix})`); +}; +let edgeLabels = {}; +let terminalLabels = {}; +const clear = () => { + edgeLabels = {}; + terminalLabels = {}; +}; +const insertEdgeLabel = (elem, edge) => { + const useHtmlLabels = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + const labelElement = edge.labelType === "markdown" ? (0,_createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_2__.a)(elem, edge.label, { + style: edge.labelStyle, + useHtmlLabels, + addSvgBackground: true + }) : createLabel$1(edge.label, edge.labelStyle); + const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); + const label = edgeLabel.insert("g").attr("class", "label"); + label.node().appendChild(labelElement); + let bbox = labelElement.getBBox(); + if (useHtmlLabels) { + const div = labelElement.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(labelElement); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + edgeLabels[edge.id] = edgeLabel; + edge.width = bbox.width; + edge.height = bbox.height; + let fo; + if (edge.startLabelLeft) { + const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle); + const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startLeft = startEdgeLabelLeft; + setTerminalWidth(fo, edge.startLabelLeft); + } + if (edge.startLabelRight) { + const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle); + const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelRight.insert("g").attr("class", "inner"); + fo = startEdgeLabelRight.node().appendChild(startLabelElement); + inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startRight = startEdgeLabelRight; + setTerminalWidth(fo, edge.startLabelRight); + } + if (edge.endLabelLeft) { + const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle); + const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelLeft.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endLeft = endEdgeLabelLeft; + setTerminalWidth(fo, edge.endLabelLeft); + } + if (edge.endLabelRight) { + const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle); + const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelRight.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelRight.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endRight = endEdgeLabelRight; + setTerminalWidth(fo, edge.endLabelRight); + } + return labelElement; +}; +function setTerminalWidth(fo, value) { + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels && fo) { + fo.style.width = value.length * 9 + "px"; + fo.style.height = "12px"; + } +} +const positionEdgeLabel = (edge, paths) => { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Moving label abc88 ", edge.id, edge.label, edgeLabels[edge.id], paths); + let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; + const siteConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig); + if (edge.label) { + const el = edgeLabels[edge.id]; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug( + "Moving label " + edge.label + " from (", + x, + ",", + y, + ") to (", + pos.x, + ",", + pos.y, + ") abc88" + ); + if (paths.updatedPath) { + x = pos.x; + y = pos.y; + } + } + el.attr("transform", `translate(${x}, ${y + subGraphTitleTotalMargin / 2})`); + } + if (edge.startLabelLeft) { + const el = terminalLabels[edge.id].startLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } + if (edge.startLabelRight) { + const el = terminalLabels[edge.id].startRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition( + edge.arrowTypeStart ? 10 : 0, + "start_right", + path + ); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } + if (edge.endLabelLeft) { + const el = terminalLabels[edge.id].endLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } + if (edge.endLabelRight) { + const el = terminalLabels[edge.id].endRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } +}; +const outsideNode = (node, point2) => { + const x = node.x; + const y = node.y; + const dx = Math.abs(point2.x - x); + const dy = Math.abs(point2.y - y); + const w = node.width / 2; + const h = node.height / 2; + if (dx >= w || dy >= h) { + return true; + } + return false; +}; +const intersection = (node, outsidePoint, insidePoint) => { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(outsidePoint)} + insidePoint : ${JSON.stringify(insidePoint)} + node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`); + const x = node.x; + const y = node.y; + const dx = Math.abs(x - insidePoint.x); + const w = node.width / 2; + let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx; + const h = node.height / 2; + const Q = Math.abs(outsidePoint.y - insidePoint.y); + const R = Math.abs(outsidePoint.x - insidePoint.x); + if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { + let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; + r = R * q / Q; + const res = { + x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r, + y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q + }; + if (r === 0) { + res.x = outsidePoint.x; + res.y = outsidePoint.y; + } + if (R === 0) { + res.x = outsidePoint.x; + } + if (Q === 0) { + res.y = outsidePoint.y; + } + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); + return res; + } else { + if (insidePoint.x < outsidePoint.x) { + r = outsidePoint.x - w - x; + } else { + r = x - w - outsidePoint.x; + } + let q = Q * r / R; + let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r; + let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y }); + if (r === 0) { + _x = outsidePoint.x; + _y = outsidePoint.y; + } + if (R === 0) { + _x = outsidePoint.x; + } + if (Q === 0) { + _y = outsidePoint.y; + } + return { x: _x, y: _y }; + } +}; +const cutPathAtIntersect = (_points, boundaryNode) => { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 cutPathAtIntersect", _points, boundaryNode); + let points = []; + let lastPointOutside = _points[0]; + let isInside = false; + _points.forEach((point2) => { + if (!outsideNode(boundaryNode, point2) && !isInside) { + const inter = intersection(boundaryNode, lastPointOutside, point2); + let pointPresent = false; + points.forEach((p) => { + pointPresent = pointPresent || p.x === inter.x && p.y === inter.y; + }); + if (!points.some((e) => e.x === inter.x && e.y === inter.y)) { + points.push(inter); + } + isInside = true; + } else { + lastPointOutside = point2; + if (!isInside) { + points.push(point2); + } + } + }); + return points; +}; +const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph, id) { + let points = edge.points; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 InsertEdge: edge=", edge, "e=", e); + let pointsHasChanged = false; + const tail = graph.node(e.v); + var head = graph.node(e.w); + if ((head == null ? void 0 : head.intersect) && (tail == null ? void 0 : tail.intersect)) { + points = points.slice(1, edge.points.length - 1); + points.unshift(tail.intersect(points[0])); + points.push(head.intersect(points[points.length - 1])); + } + if (edge.toCluster) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("to cluster abc88", clusterDb[edge.toCluster]); + points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); + pointsHasChanged = true; + } + if (edge.fromCluster) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("from cluster abc88", clusterDb[edge.fromCluster]); + points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse(); + pointsHasChanged = true; + } + const lineData = points.filter((p) => !Number.isNaN(p.y)); + let curve = d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .qrM; + if (edge.curve && (diagramType === "graph" || diagramType === "flowchart")) { + curve = edge.curve; + } + const { x, y } = getLineFunctionsWithOffset(edge); + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .n8j)().x(x).y(y).curve(curve); + let strokeClasses; + switch (edge.thickness) { + case "normal": + strokeClasses = "edge-thickness-normal"; + break; + case "thick": + strokeClasses = "edge-thickness-thick"; + break; + case "invisible": + strokeClasses = "edge-thickness-thick"; + break; + default: + strokeClasses = ""; + } + switch (edge.pattern) { + case "solid": + strokeClasses += " edge-pattern-solid"; + break; + case "dotted": + strokeClasses += " edge-pattern-dotted"; + break; + case "dashed": + strokeClasses += " edge-pattern-dashed"; + break; + } + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style); + let url = ""; + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.arrowMarkerAbsolute || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().state.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + addEdgeMarkers(svgPath, edge, url, id, diagramType); + let paths = {}; + if (pointsHasChanged) { + paths.updatedPath = points; + } + paths.originalPath = edge.points; + return paths; +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/163041ea.6d64c70e.js b/assets/js/163041ea.6d64c70e.js new file mode 100644 index 0000000000..f145ad10d4 --- /dev/null +++ b/assets/js/163041ea.6d64c70e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[776],{14854:(e,s,o)=>{o.r(s),o.d(s,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>t,metadata:()=>l,toc:()=>a});var r=o(74848),n=o(28453);const t={title:"Single speed compressor train",sidebar_position:1},i=void 0,l={id:"about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",title:"Single speed compressor train",description:"The single speed compressor train model is modelling one or more single speed compressors mounted on a common shaft.",source:"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model.md",sourceDirName:"about/modelling/setup/models/compressor_modelling/compressor_models_types",slug:"/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Single speed compressor train",sidebar_position:1},sidebar:"about",previous:{title:"Compressor train types",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/"},next:{title:"Simplified variable speed compressor train",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model"}},c={},a=[{value:"Format",id:"format",level:2}];function d(e){const s={a:"a",code:"code",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,n.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.p,{children:"The single speed compressor train model is modelling one or more single speed compressors mounted on a common shaft.\nBeing single speed compressors on a common shaft means that all compressors will run at the exact same fixed speed, and\nthis shaft speed can not be varied. Since the shaft speed can not vary, the problem is overdefined given the rate,\nsuction pressure and discharge pressure. A method for controlling the pressure also needs to be defined, to be able\nto calculate the energy usage for given rates, suction pressures and discharge pressures."}),"\n",(0,r.jsx)(s.p,{children:"This means that a single speed compressor model needs the following to be defined:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"A polytropic compressor chart for every compressor stage in the compressor train. For single speed trains, eCalc\nonly supports user defined single speed compressor charts."}),"\n",(0,r.jsxs)(s.li,{children:["A ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/FLUID_MODEL",children:"FLUID_MODEL"}),"."]}),"\n",(0,r.jsxs)(s.li,{children:["A ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/PRESSURE_CONTROL",children:"PRESSURE_CONTROL"}),"."]}),"\n"]}),"\n",(0,r.jsx)(s.p,{children:"The following keywords are optional for a single speed compressor model:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/MAXIMUM_DISCHARGE_PRESSURE",children:"MAXIMUM_DISCHARGE_PRESSURE"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/POWER_ADJUSTMENT_CONSTANT",children:"POWER_ADJUSTMENT_CONSTANT"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/MAXIMUM_POWER",children:"MAXIMUM_POWER"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/CALCULATE_MAX_RATE",children:"CALCULATE_MAX_RATE"})}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:["The model is defined under the main keyword ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/MODELS",children:"MODELS"})," in the format"]}),"\n",(0,r.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: SINGLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: \n PRESSURE_CONTROL: \n MAXIMUM_DISCHARGE_PRESSURE: \n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: \n COMPRESSOR_CHART: \n PRESSURE_DROP_AHEAD_OF_STAGE: \n - INLET_TEMPERATURE: \n COMPRESSOR_CHART: \n PRESSURE_DROP_AHEAD_OF_STAGE: \n - ... and so forth for each stage in the train\n POWER_ADJUSTMENT_CONSTANT: \n MAXIMUM_POWER: \n CALCULATE_MAX_RATE: \n"})})]})}function m(e={}){const{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,s,o)=>{o.d(s,{R:()=>i,x:()=>l});var r=o(96540);const n={},t=r.createContext(n);function i(e){const s=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),r.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/17896441.41832d39.js b/assets/js/17896441.41832d39.js new file mode 100644 index 0000000000..cbbfa8a4ef --- /dev/null +++ b/assets/js/17896441.41832d39.js @@ -0,0 +1,2 @@ +/*! For license information please see 17896441.41832d39.js.LICENSE.txt */ +(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8401],{16750:(t,e)=>{"use strict";e.Jf=e.dz=void 0;var i=/^([^\w]*)(javascript|data|vbscript)/im,r=/&#(\w+)(^\w|;)?/g,n=/&(newline|tab);/gi,o=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,a=/^.+(:|:)/gim,s=[".","/"];e.dz="about:blank",e.Jf=function(t){if(!t)return e.dz;var l,c=(l=t,l.replace(o,"").replace(r,(function(t,e){return String.fromCharCode(e)}))).replace(n,"").replace(o,"").trim();if(!c)return e.dz;if(function(t){return s.indexOf(t[0])>-1}(c))return c;var h=c.match(a);if(!h)return c;var u=h[0];return i.test(u)?e.dz:c}},27293:(t,e,i)=>{"use strict";i.d(e,{A:()=>F});var r=i(96540),n=i(74848);function o(t){const{mdxAdmonitionTitle:e,rest:i}=function(t){const e=r.Children.toArray(t),i=e.find((t=>r.isValidElement(t)&&"mdxAdmonitionTitle"===t.type)),o=e.filter((t=>t!==i)),a=i?.props.children;return{mdxAdmonitionTitle:a,rest:o.length>0?(0,n.jsx)(n.Fragment,{children:o}):null}}(t.children),o=t.title??e;return{...t,...o&&{title:o},children:i}}var a=i(34164),s=i(21312),l=i(17559);const c={admonition:"admonition_xJq3",admonitionHeading:"admonitionHeading_Gvgb",admonitionIcon:"admonitionIcon_Rf37",admonitionContent:"admonitionContent_BuS1"};function h(t){let{type:e,className:i,children:r}=t;return(0,n.jsx)("div",{className:(0,a.A)(l.G.common.admonition,l.G.common.admonitionType(e),c.admonition,i),children:r})}function u(t){let{icon:e,title:i}=t;return(0,n.jsxs)("div",{className:c.admonitionHeading,children:[(0,n.jsx)("span",{className:c.admonitionIcon,children:e}),i]})}function d(t){let{children:e}=t;return e?(0,n.jsx)("div",{className:c.admonitionContent,children:e}):null}function f(t){const{type:e,icon:i,title:r,children:o,className:a}=t;return(0,n.jsxs)(h,{type:e,className:a,children:[r||i?(0,n.jsx)(u,{title:r,icon:i}):null,(0,n.jsx)(d,{children:o})]})}function p(t){return(0,n.jsx)("svg",{viewBox:"0 0 14 16",...t,children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})})}const g={icon:(0,n.jsx)(p,{}),title:(0,n.jsx)(s.A,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function m(t){return(0,n.jsx)(f,{...g,...t,className:(0,a.A)("alert alert--secondary",t.className),children:t.children})}function y(t){return(0,n.jsx)("svg",{viewBox:"0 0 12 16",...t,children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})})}const x={icon:(0,n.jsx)(y,{}),title:(0,n.jsx)(s.A,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function C(t){return(0,n.jsx)(f,{...x,...t,className:(0,a.A)("alert alert--success",t.className),children:t.children})}function b(t){return(0,n.jsx)("svg",{viewBox:"0 0 14 16",...t,children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})})}const _={icon:(0,n.jsx)(b,{}),title:(0,n.jsx)(s.A,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function v(t){return(0,n.jsx)(f,{..._,...t,className:(0,a.A)("alert alert--info",t.className),children:t.children})}function T(t){return(0,n.jsx)("svg",{viewBox:"0 0 16 16",...t,children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})})}const k={icon:(0,n.jsx)(T,{}),title:(0,n.jsx)(s.A,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function A(t){return(0,n.jsx)("svg",{viewBox:"0 0 12 16",...t,children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})})}const w={icon:(0,n.jsx)(A,{}),title:(0,n.jsx)(s.A,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const S={icon:(0,n.jsx)(T,{}),title:(0,n.jsx)(s.A,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const B={...{note:m,tip:C,info:v,warning:function(t){return(0,n.jsx)(f,{...k,...t,className:(0,a.A)("alert alert--warning",t.className),children:t.children})},danger:function(t){return(0,n.jsx)(f,{...w,...t,className:(0,a.A)("alert alert--danger",t.className),children:t.children})}},...{secondary:t=>(0,n.jsx)(m,{title:"secondary",...t}),important:t=>(0,n.jsx)(v,{title:"important",...t}),success:t=>(0,n.jsx)(C,{title:"success",...t}),caution:function(t){return(0,n.jsx)(f,{...S,...t,className:(0,a.A)("alert alert--warning",t.className),children:t.children})}}};function F(t){const e=o(t),i=(r=e.type,B[r]||(console.warn(`No admonition component found for admonition type "${r}". Using Info as fallback.`),B.info));var r;return(0,n.jsx)(i,{...e})}},71243:(t,e,i)=>{"use strict";i.d(e,{A:()=>y});i(96540);var r=i(34164),n=i(17559),o=i(81754),a=i(99169),s=i(28774),l=i(21312),c=i(86025),h=i(74848);function u(t){return(0,h.jsx)("svg",{viewBox:"0 0 24 24",...t,children:(0,h.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}const d={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function f(){const t=(0,c.Ay)("/");return(0,h.jsx)("li",{className:"breadcrumbs__item",children:(0,h.jsx)(s.A,{"aria-label":(0,l.T)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:t,children:(0,h.jsx)(u,{className:d.breadcrumbHomeIcon})})})}const p={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function g(t){let{children:e,href:i,isLast:r}=t;const n="breadcrumbs__link";return r?(0,h.jsx)("span",{className:n,itemProp:"name",children:e}):i?(0,h.jsx)(s.A,{className:n,href:i,itemProp:"item",children:(0,h.jsx)("span",{itemProp:"name",children:e})}):(0,h.jsx)("span",{className:n,children:e})}function m(t){let{children:e,active:i,index:n,addMicrodata:o}=t;return(0,h.jsxs)("li",{...o&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,r.A)("breadcrumbs__item",{"breadcrumbs__item--active":i}),children:[e,(0,h.jsx)("meta",{itemProp:"position",content:String(n+1)})]})}function y(){const t=(0,o.OF)(),e=(0,a.Dt)();return t?(0,h.jsx)("nav",{className:(0,r.A)(n.G.docs.docBreadcrumbs,p.breadcrumbsContainer),"aria-label":(0,l.T)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,h.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[e&&(0,h.jsx)(f,{}),t.map(((e,i)=>{const r=i===t.length-1,n="category"===e.type&&e.linkUnlisted?void 0:e.href;return(0,h.jsx)(m,{active:r,index:i,addMicrodata:!!n,children:(0,h.jsx)(g,{href:n,isLast:r,children:e.label})},i)}))]})}):null}},60447:(t,e,i)=>{"use strict";i.r(e),i.d(e,{default:()=>$t});var r=i(96540),n=i(1003),o=i(89532),a=i(74848);const s=r.createContext(null);function l(t){let{children:e,content:i}=t;const n=function(t){return(0,r.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,contentTitle:t.contentTitle,toc:t.toc})),[t])}(i);return(0,a.jsx)(s.Provider,{value:n,children:e})}function c(){const t=(0,r.useContext)(s);if(null===t)throw new o.dV("DocProvider");return t}function h(){const{metadata:t,frontMatter:e,assets:i}=c();return(0,a.jsx)(n.be,{title:t.title,description:t.description,keywords:e.keywords,image:i.image??e.image})}var u=i(34164),d=i(24581),f=i(86929);function p(){const{metadata:t}=c();return(0,a.jsx)(f.A,{previous:t.previous,next:t.next})}var g=i(51878),m=i(4267),y=i(17559),x=i(21312),C=i(56133);const b={tags:"tags_jXut",tag:"tag_QGVx"};function _(t){let{tags:e}=t;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("b",{children:(0,a.jsx)(x.A,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,a.jsx)("ul",{className:(0,u.A)(b.tags,"padding--none","margin-left--sm"),children:e.map((t=>(0,a.jsx)("li",{className:b.tag,children:(0,a.jsx)(C.A,{...t})},t.permalink)))})]})}var v=i(28774);const T={iconEdit:"iconEdit_Z9Sw"};function k(t){let{className:e,...i}=t;return(0,a.jsx)("svg",{fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,u.A)(T.iconEdit,e),"aria-hidden":"true",...i,children:(0,a.jsx)("g",{children:(0,a.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})})}function A(t){let{editUrl:e}=t;return(0,a.jsxs)(v.A,{to:e,className:y.G.common.editThisPage,children:[(0,a.jsx)(k,{}),(0,a.jsx)(x.A,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}var w=i(44586);function S(t){void 0===t&&(t={});const{i18n:{currentLocale:e}}=(0,w.A)(),i=function(){const{i18n:{currentLocale:t,localeConfigs:e}}=(0,w.A)();return e[t].calendar}();return new Intl.DateTimeFormat(e,{calendar:i,...t})}function B(t){let{lastUpdatedAt:e}=t;const i=new Date(e),r=S({day:"numeric",month:"short",year:"numeric",timeZone:"UTC"}).format(i);return(0,a.jsx)(x.A,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,a.jsx)("b",{children:(0,a.jsx)("time",{dateTime:i.toISOString(),itemProp:"dateModified",children:r})})},children:" on {date}"})}function F(t){let{lastUpdatedBy:e}=t;return(0,a.jsx)(x.A,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,a.jsx)("b",{children:e})},children:" by {user}"})}function L(t){let{lastUpdatedAt:e,lastUpdatedBy:i}=t;return(0,a.jsxs)("span",{className:y.G.common.lastUpdated,children:[(0,a.jsx)(x.A,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:e?(0,a.jsx)(B,{lastUpdatedAt:e}):"",byUser:i?(0,a.jsx)(F,{lastUpdatedBy:i}):""},children:"Last updated{atDate}{byUser}"}),!1]})}const M={lastUpdated:"lastUpdated_JAkA"};function E(t){let{className:e,editUrl:i,lastUpdatedAt:r,lastUpdatedBy:n}=t;return(0,a.jsxs)("div",{className:(0,u.A)("row",e),children:[(0,a.jsx)("div",{className:"col",children:i&&(0,a.jsx)(A,{editUrl:i})}),(0,a.jsx)("div",{className:(0,u.A)("col",M.lastUpdated),children:(r||n)&&(0,a.jsx)(L,{lastUpdatedAt:r,lastUpdatedBy:n})})]})}function N(){const{metadata:t}=c(),{editUrl:e,lastUpdatedAt:i,lastUpdatedBy:r,tags:n}=t,o=n.length>0,s=!!(e||i||r);return o||s?(0,a.jsxs)("footer",{className:(0,u.A)(y.G.docs.docFooter,"docusaurus-mt-lg"),children:[o&&(0,a.jsx)("div",{className:(0,u.A)("row margin-top--sm",y.G.docs.docFooterTagsRow),children:(0,a.jsx)("div",{className:"col",children:(0,a.jsx)(_,{tags:n})})}),s&&(0,a.jsx)(E,{className:(0,u.A)("margin-top--sm",y.G.docs.docFooterEditMetaRow),editUrl:e,lastUpdatedAt:i,lastUpdatedBy:r})]}):null}var j=i(41422),O=i(6342);function I(t){const e=t.map((t=>({...t,parentIndex:-1,children:[]}))),i=Array(7).fill(-1);e.forEach(((t,e)=>{const r=i.slice(2,t.level);t.parentIndex=Math.max(...r),i[t.level]=e}));const r=[];return e.forEach((t=>{const{parentIndex:i,...n}=t;i>=0?e[i].children.push(n):r.push(n)})),r}function D(t){let{toc:e,minHeadingLevel:i,maxHeadingLevel:r}=t;return e.flatMap((t=>{const e=D({toc:t.children,minHeadingLevel:i,maxHeadingLevel:r});return function(t){return t.level>=i&&t.level<=r}(t)?[{...t,children:e}]:e}))}function q(t){const e=t.getBoundingClientRect();return e.top===e.bottom?q(t.parentNode):e}function $(t,e){let{anchorTopOffset:i}=e;const r=t.find((t=>q(t).top>=i));if(r){return function(t){return t.top>0&&t.bottom{t.current=e?0:document.querySelector(".navbar").clientHeight}),[e]),t}function P(t){const e=(0,r.useRef)(void 0),i=z();(0,r.useEffect)((()=>{if(!t)return()=>{};const{linkClassName:r,linkActiveClassName:n,minHeadingLevel:o,maxHeadingLevel:a}=t;function s(){const t=function(t){return Array.from(document.getElementsByClassName(t))}(r),s=function(t){let{minHeadingLevel:e,maxHeadingLevel:i}=t;const r=[];for(let n=e;n<=i;n+=1)r.push(`h${n}.anchor`);return Array.from(document.querySelectorAll(r.join()))}({minHeadingLevel:o,maxHeadingLevel:a}),l=$(s,{anchorTopOffset:i.current}),c=t.find((t=>l&&l.id===function(t){return decodeURIComponent(t.href.substring(t.href.indexOf("#")+1))}(t)));t.forEach((t=>{!function(t,i){i?(e.current&&e.current!==t&&e.current.classList.remove(n),t.classList.add(n),e.current=t):t.classList.remove(n)}(t,t===c)}))}return document.addEventListener("scroll",s),document.addEventListener("resize",s),s(),()=>{document.removeEventListener("scroll",s),document.removeEventListener("resize",s)}}),[t,i])}function R(t){let{toc:e,className:i,linkClassName:r,isChild:n}=t;return e.length?(0,a.jsx)("ul",{className:n?void 0:i,children:e.map((t=>(0,a.jsxs)("li",{children:[(0,a.jsx)(v.A,{to:`#${t.id}`,className:r??void 0,dangerouslySetInnerHTML:{__html:t.value}}),(0,a.jsx)(R,{isChild:!0,toc:t.children,className:i,linkClassName:r})]},t.id)))}):null}const U=r.memo(R);function H(t){let{toc:e,className:i="table-of-contents table-of-contents__left-border",linkClassName:n="table-of-contents__link",linkActiveClassName:o,minHeadingLevel:s,maxHeadingLevel:l,...c}=t;const h=(0,O.p)(),u=s??h.tableOfContents.minHeadingLevel,d=l??h.tableOfContents.maxHeadingLevel,f=function(t){let{toc:e,minHeadingLevel:i,maxHeadingLevel:n}=t;return(0,r.useMemo)((()=>D({toc:I(e),minHeadingLevel:i,maxHeadingLevel:n})),[e,i,n])}({toc:e,minHeadingLevel:u,maxHeadingLevel:d});return P((0,r.useMemo)((()=>{if(n&&o)return{linkClassName:n,linkActiveClassName:o,minHeadingLevel:u,maxHeadingLevel:d}}),[n,o,u,d])),(0,a.jsx)(U,{toc:f,className:i,linkClassName:n,...c})}const W={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function Y(t){let{collapsed:e,...i}=t;return(0,a.jsx)("button",{type:"button",...i,className:(0,u.A)("clean-btn",W.tocCollapsibleButton,!e&&W.tocCollapsibleButtonExpanded,i.className),children:(0,a.jsx)(x.A,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})})}const V={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function G(t){let{toc:e,className:i,minHeadingLevel:r,maxHeadingLevel:n}=t;const{collapsed:o,toggleCollapsed:s}=(0,j.u)({initialState:!0});return(0,a.jsxs)("div",{className:(0,u.A)(V.tocCollapsible,!o&&V.tocCollapsibleExpanded,i),children:[(0,a.jsx)(Y,{collapsed:o,onClick:s}),(0,a.jsx)(j.N,{lazy:!0,className:V.tocCollapsibleContent,collapsed:o,children:(0,a.jsx)(H,{toc:e,minHeadingLevel:r,maxHeadingLevel:n})})]})}const X={tocMobile:"tocMobile_ITEo"};function Z(){const{toc:t,frontMatter:e}=c();return(0,a.jsx)(G,{toc:t,minHeadingLevel:e.toc_min_heading_level,maxHeadingLevel:e.toc_max_heading_level,className:(0,u.A)(y.G.docs.docTocMobile,X.tocMobile)})}const J={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"},Q="table-of-contents__link toc-highlight",K="table-of-contents__link--active";function tt(t){let{className:e,...i}=t;return(0,a.jsx)("div",{className:(0,u.A)(J.tableOfContents,"thin-scrollbar",e),children:(0,a.jsx)(H,{...i,linkClassName:Q,linkActiveClassName:K})})}function et(){const{toc:t,frontMatter:e}=c();return(0,a.jsx)(tt,{toc:t,minHeadingLevel:e.toc_min_heading_level,maxHeadingLevel:e.toc_max_heading_level,className:y.G.docs.docTocDesktop})}var it=i(51107),rt=i(28453),nt=i(5260),ot=i(21432);function at(t){return(0,a.jsx)("code",{...t})}var st=i(63427),lt=i(92303);const ct={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function ht(t){return!!t&&("SUMMARY"===t.tagName||ht(t.parentElement))}function ut(t,e){return!!t&&(t===e||ut(t.parentElement,e))}function dt(t){let{summary:e,children:i,...n}=t;(0,st.A)().collectAnchor(n.id);const o=(0,lt.A)(),s=(0,r.useRef)(null),{collapsed:l,setCollapsed:c}=(0,j.u)({initialState:!n.open}),[h,d]=(0,r.useState)(n.open),f=r.isValidElement(e)?e:(0,a.jsx)("summary",{children:e??"Details"});return(0,a.jsxs)("details",{...n,ref:s,open:h,"data-collapsed":l,className:(0,u.A)(ct.details,o&&ct.isBrowser,n.className),onMouseDown:t=>{ht(t.target)&&t.detail>1&&t.preventDefault()},onClick:t=>{t.stopPropagation();const e=t.target;ht(e)&&ut(e,s.current)&&(t.preventDefault(),l?(c(!1),d(!0)):c(!0))},children:[f,(0,a.jsx)(j.N,{lazy:!1,collapsed:l,disableSSRStyle:!0,onCollapseTransitionEnd:t=>{c(t),d(!t)},children:(0,a.jsx)("div",{className:ct.collapsibleContent,children:i})})]})}const ft={details:"details_b_Ee"},pt="alert alert--info";function gt(t){let{...e}=t;return(0,a.jsx)(dt,{...e,className:(0,u.A)(pt,ft.details,e.className)})}function mt(t){const e=r.Children.toArray(t.children),i=e.find((t=>r.isValidElement(t)&&"summary"===t.type)),n=(0,a.jsx)(a.Fragment,{children:e.filter((t=>t!==i))});return(0,a.jsx)(gt,{...t,summary:i,children:n})}function yt(t){return(0,a.jsx)(it.A,{...t})}const xt={containsTaskList:"containsTaskList_mC6p"};function Ct(t){if(void 0!==t)return(0,u.A)(t,t?.includes("contains-task-list")&&xt.containsTaskList)}const bt={img:"img_ev3q"};var _t=i(27293),vt=i(67489),Tt=i(12181),kt=i(95293),At=i(99702);const wt="docusaurus-mermaid-container";function St(){const{colorMode:t}=(0,kt.G)(),e=(0,O.p)().mermaid,i=e.theme[t],{options:n}=e;return(0,r.useMemo)((()=>({startOnLoad:!1,...n,theme:i})),[i,n])}function Bt(t){let{text:e,config:i}=t;const[n,o]=(0,r.useState)(null),a=(0,r.useRef)(`mermaid-svg-${Math.round(1e7*Math.random())}`).current,s=St(),l=i??s;return(0,r.useEffect)((()=>{(async function(t){let{id:e,text:i,config:r}=t;At.N.mermaidAPI.initialize(r);try{return await At.N.render(e,i)}catch(n){throw document.querySelector(`#d${e}`)?.remove(),n}})({id:a,text:e,config:l}).then(o).catch((t=>{o((()=>{throw t}))}))}),[a,e,l]),n}const Ft={container:"container_lyt7"};function Lt(t){let{renderResult:e}=t;const i=(0,r.useRef)(null);return(0,r.useEffect)((()=>{const t=i.current;e.bindFunctions?.(t)}),[e]),(0,a.jsx)("div",{ref:i,className:`${wt} ${Ft.container}`,dangerouslySetInnerHTML:{__html:e.svg}})}function Mt(t){let{value:e}=t;const i=Bt({text:e});return null===i?null:(0,a.jsx)(Lt,{renderResult:i})}const Et={Head:nt.A,details:mt,Details:mt,code:function(t){return function(t){return void 0!==t.children&&r.Children.toArray(t.children).every((t=>"string"==typeof t&&!t.includes("\n")))}(t)?(0,a.jsx)(at,{...t}):(0,a.jsx)(ot.A,{...t})},a:function(t){return(0,a.jsx)(v.A,{...t})},pre:function(t){return(0,a.jsx)(a.Fragment,{children:t.children})},ul:function(t){return(0,a.jsx)("ul",{...t,className:Ct(t.className)})},li:function(t){return(0,st.A)().collectAnchor(t.id),(0,a.jsx)("li",{...t})},img:function(t){return(0,a.jsx)("img",{decoding:"async",loading:"lazy",...t,className:(e=t.className,(0,u.A)(e,bt.img))});var e},h1:t=>(0,a.jsx)(yt,{as:"h1",...t}),h2:t=>(0,a.jsx)(yt,{as:"h2",...t}),h3:t=>(0,a.jsx)(yt,{as:"h3",...t}),h4:t=>(0,a.jsx)(yt,{as:"h4",...t}),h5:t=>(0,a.jsx)(yt,{as:"h5",...t}),h6:t=>(0,a.jsx)(yt,{as:"h6",...t}),admonition:_t.A,mermaid:function(t){return(0,a.jsx)(vt.A,{fallback:t=>(0,a.jsx)(Tt.MN,{...t}),children:(0,a.jsx)(Mt,{...t})})}};function Nt(t){let{children:e}=t;return(0,a.jsx)(rt.x,{components:Et,children:e})}function jt(t){let{children:e}=t;const i=function(){const{metadata:t,frontMatter:e,contentTitle:i}=c();return e.hide_title||void 0!==i?null:t.title}();return(0,a.jsxs)("div",{className:(0,u.A)(y.G.docs.docMarkdown,"markdown"),children:[i&&(0,a.jsx)("header",{children:(0,a.jsx)(it.A,{as:"h1",children:i})}),(0,a.jsx)(Nt,{children:e})]})}var Ot=i(71243),It=i(50996);const Dt={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function qt(t){let{children:e}=t;const i=function(){const{frontMatter:t,toc:e}=c(),i=(0,d.l)(),r=t.hide_table_of_contents,n=!r&&e.length>0;return{hidden:r,mobile:n?(0,a.jsx)(Z,{}):void 0,desktop:!n||"desktop"!==i&&"ssr"!==i?void 0:(0,a.jsx)(et,{})}}(),{metadata:{unlisted:r}}=c();return(0,a.jsxs)("div",{className:"row",children:[(0,a.jsxs)("div",{className:(0,u.A)("col",!i.hidden&&Dt.docItemCol),children:[r&&(0,a.jsx)(It.A,{}),(0,a.jsx)(g.A,{}),(0,a.jsxs)("div",{className:Dt.docItemContainer,children:[(0,a.jsxs)("article",{children:[(0,a.jsx)(Ot.A,{}),(0,a.jsx)(m.A,{}),i.mobile,(0,a.jsx)(jt,{children:e}),(0,a.jsx)(N,{})]}),(0,a.jsx)(p,{})]})]}),i.desktop&&(0,a.jsx)("div",{className:"col col--3",children:i.desktop})]})}function $t(t){const e=`docs-doc-id-${t.content.metadata.id}`,i=t.content;return(0,a.jsx)(l,{content:t.content,children:(0,a.jsxs)(n.e3,{className:e,children:[(0,a.jsx)(h,{}),(0,a.jsx)(qt,{children:(0,a.jsx)(i,{})})]})})}},86929:(t,e,i)=>{"use strict";i.d(e,{A:()=>l});i(96540);var r=i(21312),n=i(34164),o=i(28774),a=i(74848);function s(t){const{permalink:e,title:i,subLabel:r,isNext:s}=t;return(0,a.jsxs)(o.A,{className:(0,n.A)("pagination-nav__link",s?"pagination-nav__link--next":"pagination-nav__link--prev"),to:e,children:[r&&(0,a.jsx)("div",{className:"pagination-nav__sublabel",children:r}),(0,a.jsx)("div",{className:"pagination-nav__label",children:i})]})}function l(t){const{previous:e,next:i}=t;return(0,a.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,r.T)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[e&&(0,a.jsx)(s,{...e,subLabel:(0,a.jsx)(r.A,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),i&&(0,a.jsx)(s,{...i,subLabel:(0,a.jsx)(r.A,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}},4267:(t,e,i)=>{"use strict";i.d(e,{A:()=>l});i(96540);var r=i(34164),n=i(21312),o=i(17559),a=i(32252),s=i(74848);function l(t){let{className:e}=t;const i=(0,a.r)();return i.badge?(0,s.jsx)("span",{className:(0,r.A)(e,o.G.docs.docVersionBadge,"badge badge--secondary"),children:(0,s.jsx)(n.A,{id:"theme.docs.versionBadge.label",values:{versionLabel:i.label},children:"Version: {versionLabel}"})}):null}},51878:(t,e,i)=>{"use strict";i.d(e,{A:()=>m});i(96540);var r=i(34164),n=i(44586),o=i(28774),a=i(21312),s=i(44070),l=i(17559),c=i(55597),h=i(32252),u=i(74848);const d={unreleased:function(t){let{siteTitle:e,versionMetadata:i}=t;return(0,u.jsx)(a.A,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:e,versionLabel:(0,u.jsx)("b",{children:i.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function(t){let{siteTitle:e,versionMetadata:i}=t;return(0,u.jsx)(a.A,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:e,versionLabel:(0,u.jsx)("b",{children:i.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function f(t){const e=d[t.versionMetadata.banner];return(0,u.jsx)(e,{...t})}function p(t){let{versionLabel:e,to:i,onClick:r}=t;return(0,u.jsx)(a.A,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:e,latestVersionLink:(0,u.jsx)("b",{children:(0,u.jsx)(o.A,{to:i,onClick:r,children:(0,u.jsx)(a.A,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function g(t){let{className:e,versionMetadata:i}=t;const{siteConfig:{title:o}}=(0,n.A)(),{pluginId:a}=(0,s.vT)({failfast:!0}),{savePreferredVersionName:h}=(0,c.g1)(a),{latestDocSuggestion:d,latestVersionSuggestion:g}=(0,s.HW)(a),m=d??(y=g).docs.find((t=>t.id===y.mainDocId));var y;return(0,u.jsxs)("div",{className:(0,r.A)(e,l.G.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,u.jsx)("div",{children:(0,u.jsx)(f,{siteTitle:o,versionMetadata:i})}),(0,u.jsx)("div",{className:"margin-top--md",children:(0,u.jsx)(p,{versionLabel:g.label,to:m.path,onClick:()=>h(g.name)})})]})}function m(t){let{className:e}=t;const i=(0,h.r)();return i.banner?(0,u.jsx)(g,{className:e,versionMetadata:i}):null}},56133:(t,e,i)=>{"use strict";i.d(e,{A:()=>s});i(96540);var r=i(34164),n=i(28774);const o={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var a=i(74848);function s(t){let{permalink:e,label:i,count:s,description:l}=t;return(0,a.jsxs)(n.A,{href:e,title:l,className:(0,r.A)(o.tag,s?o.tagWithCount:o.tagRegular),children:[i,s&&(0,a.jsx)("span",{children:s})]})}},50996:(t,e,i)=>{"use strict";i.d(e,{A:()=>f});i(96540);var r=i(34164),n=i(21312),o=i(5260),a=i(74848);function s(){return(0,a.jsx)(n.A,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function l(){return(0,a.jsx)(n.A,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function c(){return(0,a.jsx)(o.A,{children:(0,a.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var h=i(17559),u=i(27293);function d(t){let{className:e}=t;return(0,a.jsx)(u.A,{type:"caution",title:(0,a.jsx)(s,{}),className:(0,r.A)(e,h.G.common.unlistedBanner),children:(0,a.jsx)(l,{})})}function f(t){return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(c,{}),(0,a.jsx)(d,{...t})]})}},74353:function(t){t.exports=function(){"use strict";var t=1e3,e=6e4,i=36e5,r="millisecond",n="second",o="minute",a="hour",s="day",l="week",c="month",h="quarter",u="year",d="date",f="Invalid Date",p=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,g=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,m={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],i=t%100;return"["+t+(e[(i-20)%10]||e[i]||e[0])+"]"}},y=function(t,e,i){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(i)+t},x={s:y,z:function(t){var e=-t.utcOffset(),i=Math.abs(e),r=Math.floor(i/60),n=i%60;return(e<=0?"+":"-")+y(r,2,"0")+":"+y(n,2,"0")},m:function t(e,i){if(e.date()1)return t(a[0])}else{var s=e.name;b[s]=e,n=s}return!r&&n&&(C=n),n||!r&&C},k=function(t,e){if(v(t))return t.clone();var i="object"==typeof e?e:{};return i.date=t,i.args=arguments,new w(i)},A=x;A.l=T,A.i=v,A.w=function(t,e){return k(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var w=function(){function m(t){this.$L=T(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[_]=!0}var y=m.prototype;return y.parse=function(t){this.$d=function(t){var e=t.date,i=t.utc;if(null===e)return new Date(NaN);if(A.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match(p);if(r){var n=r[2]-1||0,o=(r[7]||"0").substring(0,3);return i?new Date(Date.UTC(r[1],n,r[3]||1,r[4]||0,r[5]||0,r[6]||0,o)):new Date(r[1],n,r[3]||1,r[4]||0,r[5]||0,r[6]||0,o)}}return new Date(e)}(t),this.init()},y.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},y.$utils=function(){return A},y.isValid=function(){return!(this.$d.toString()===f)},y.isSame=function(t,e){var i=k(t);return this.startOf(e)<=i&&i<=this.endOf(e)},y.isAfter=function(t,e){return k(t)1?i-1:0),n=1;n2&&void 0!==arguments[2]?arguments[2]:f;e&&e(t,null);let o=r.length;for(;o--;){let e=r[o];if("string"==typeof e){const t=n(e);t!==e&&(i(r)||(r[o]=t),e=t)}t[e]=!0}return t}function A(t){for(let e=0;e/gm),P=a(/\${[\w\W]*}/gm),R=a(/^data-[\-\w.\u00B7-\uFFFF]/),U=a(/^aria-[\-\w]+$/),H=a(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),W=a(/^(?:\w+script|data):/i),Y=a(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),V=a(/^html$/i),G=a(/^[a-z][.\w]*(-[.\w]+)+$/i);var X=Object.freeze({__proto__:null,MUSTACHE_EXPR:$,ERB_EXPR:z,TMPLIT_EXPR:P,DATA_ATTR:R,ARIA_ATTR:U,IS_ALLOWED_URI:H,IS_SCRIPT_OR_DATA:W,ATTR_WHITESPACE:Y,DOCTYPE_NAME:V,CUSTOM_ELEMENT:G});const Z={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},J=function(){return"undefined"==typeof window?null:window},Q=function(t,e){if("object"!=typeof t||"function"!=typeof t.createPolicy)return null;let i=null;const r="data-tt-policy-suffix";e&&e.hasAttribute(r)&&(i=e.getAttribute(r));const n="dompurify"+(i?"#"+i:"");try{return t.createPolicy(n,{createHTML:t=>t,createScriptURL:t=>t})}catch(o){return console.warn("TrustedTypes policy "+n+" could not be created."),null}};function K(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:J();const i=t=>K(t);if(i.version="3.1.5",i.removed=[],!e||!e.document||e.document.nodeType!==Z.document)return i.isSupported=!1,i;let{document:r}=e;const n=r,a=n.currentScript,{DocumentFragment:l,HTMLTemplateElement:c,Node:v,Element:T,NodeFilter:A,NamedNodeMap:$=e.NamedNodeMap||e.MozNamedAttrMap,HTMLFormElement:z,DOMParser:P,trustedTypes:R}=e,U=T.prototype,W=S(U,"cloneNode"),Y=S(U,"nextSibling"),G=S(U,"childNodes"),tt=S(U,"parentNode");if("function"==typeof c){const t=r.createElement("template");t.content&&t.content.ownerDocument&&(r=t.content.ownerDocument)}let et,it="";const{implementation:rt,createNodeIterator:nt,createDocumentFragment:ot,getElementsByTagName:at}=r,{importNode:st}=n;let lt={};i.isSupported="function"==typeof t&&"function"==typeof tt&&rt&&void 0!==rt.createHTMLDocument;const{MUSTACHE_EXPR:ct,ERB_EXPR:ht,TMPLIT_EXPR:ut,DATA_ATTR:dt,ARIA_ATTR:ft,IS_SCRIPT_OR_DATA:pt,ATTR_WHITESPACE:gt,CUSTOM_ELEMENT:mt}=X;let{IS_ALLOWED_URI:yt}=X,xt=null;const Ct=k({},[...B,...F,...L,...E,...j]);let bt=null;const _t=k({},[...O,...I,...D,...q]);let vt=Object.seal(s(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Tt=null,kt=null,At=!0,wt=!0,St=!1,Bt=!0,Ft=!1,Lt=!0,Mt=!1,Et=!1,Nt=!1,jt=!1,Ot=!1,It=!1,Dt=!0,qt=!1;const $t="user-content-";let zt=!0,Pt=!1,Rt={},Ut=null;const Ht=k({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Wt=null;const Yt=k({},["audio","video","img","source","image","track"]);let Vt=null;const Gt=k({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Xt="http://www.w3.org/1998/Math/MathML",Zt="http://www.w3.org/2000/svg",Jt="http://www.w3.org/1999/xhtml";let Qt=Jt,Kt=!1,te=null;const ee=k({},[Xt,Zt,Jt],p);let ie=null;const re=["application/xhtml+xml","text/html"],ne="text/html";let oe=null,ae=null;const se=r.createElement("form"),le=function(t){return t instanceof RegExp||t instanceof Function},ce=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!ae||ae!==t){if(t&&"object"==typeof t||(t={}),t=w(t),ie=-1===re.indexOf(t.PARSER_MEDIA_TYPE)?ne:t.PARSER_MEDIA_TYPE,oe="application/xhtml+xml"===ie?p:f,xt=C(t,"ALLOWED_TAGS")?k({},t.ALLOWED_TAGS,oe):Ct,bt=C(t,"ALLOWED_ATTR")?k({},t.ALLOWED_ATTR,oe):_t,te=C(t,"ALLOWED_NAMESPACES")?k({},t.ALLOWED_NAMESPACES,p):ee,Vt=C(t,"ADD_URI_SAFE_ATTR")?k(w(Gt),t.ADD_URI_SAFE_ATTR,oe):Gt,Wt=C(t,"ADD_DATA_URI_TAGS")?k(w(Yt),t.ADD_DATA_URI_TAGS,oe):Yt,Ut=C(t,"FORBID_CONTENTS")?k({},t.FORBID_CONTENTS,oe):Ht,Tt=C(t,"FORBID_TAGS")?k({},t.FORBID_TAGS,oe):{},kt=C(t,"FORBID_ATTR")?k({},t.FORBID_ATTR,oe):{},Rt=!!C(t,"USE_PROFILES")&&t.USE_PROFILES,At=!1!==t.ALLOW_ARIA_ATTR,wt=!1!==t.ALLOW_DATA_ATTR,St=t.ALLOW_UNKNOWN_PROTOCOLS||!1,Bt=!1!==t.ALLOW_SELF_CLOSE_IN_ATTR,Ft=t.SAFE_FOR_TEMPLATES||!1,Lt=!1!==t.SAFE_FOR_XML,Mt=t.WHOLE_DOCUMENT||!1,jt=t.RETURN_DOM||!1,Ot=t.RETURN_DOM_FRAGMENT||!1,It=t.RETURN_TRUSTED_TYPE||!1,Nt=t.FORCE_BODY||!1,Dt=!1!==t.SANITIZE_DOM,qt=t.SANITIZE_NAMED_PROPS||!1,zt=!1!==t.KEEP_CONTENT,Pt=t.IN_PLACE||!1,yt=t.ALLOWED_URI_REGEXP||H,Qt=t.NAMESPACE||Jt,vt=t.CUSTOM_ELEMENT_HANDLING||{},t.CUSTOM_ELEMENT_HANDLING&&le(t.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(vt.tagNameCheck=t.CUSTOM_ELEMENT_HANDLING.tagNameCheck),t.CUSTOM_ELEMENT_HANDLING&&le(t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(vt.attributeNameCheck=t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),t.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(vt.allowCustomizedBuiltInElements=t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Ft&&(wt=!1),Ot&&(jt=!0),Rt&&(xt=k({},j),bt=[],!0===Rt.html&&(k(xt,B),k(bt,O)),!0===Rt.svg&&(k(xt,F),k(bt,I),k(bt,q)),!0===Rt.svgFilters&&(k(xt,L),k(bt,I),k(bt,q)),!0===Rt.mathMl&&(k(xt,E),k(bt,D),k(bt,q))),t.ADD_TAGS&&(xt===Ct&&(xt=w(xt)),k(xt,t.ADD_TAGS,oe)),t.ADD_ATTR&&(bt===_t&&(bt=w(bt)),k(bt,t.ADD_ATTR,oe)),t.ADD_URI_SAFE_ATTR&&k(Vt,t.ADD_URI_SAFE_ATTR,oe),t.FORBID_CONTENTS&&(Ut===Ht&&(Ut=w(Ut)),k(Ut,t.FORBID_CONTENTS,oe)),zt&&(xt["#text"]=!0),Mt&&k(xt,["html","head","body"]),xt.table&&(k(xt,["tbody"]),delete Tt.tbody),t.TRUSTED_TYPES_POLICY){if("function"!=typeof t.TRUSTED_TYPES_POLICY.createHTML)throw _('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof t.TRUSTED_TYPES_POLICY.createScriptURL)throw _('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');et=t.TRUSTED_TYPES_POLICY,it=et.createHTML("")}else void 0===et&&(et=Q(R,a)),null!==et&&"string"==typeof it&&(it=et.createHTML(""));o&&o(t),ae=t}},he=k({},["mi","mo","mn","ms","mtext"]),ue=k({},["foreignobject","annotation-xml"]),de=k({},["title","style","font","a","script"]),fe=k({},[...F,...L,...M]),pe=k({},[...E,...N]),ge=function(t){let e=tt(t);e&&e.tagName||(e={namespaceURI:Qt,tagName:"template"});const i=f(t.tagName),r=f(e.tagName);return!!te[t.namespaceURI]&&(t.namespaceURI===Zt?e.namespaceURI===Jt?"svg"===i:e.namespaceURI===Xt?"svg"===i&&("annotation-xml"===r||he[r]):Boolean(fe[i]):t.namespaceURI===Xt?e.namespaceURI===Jt?"math"===i:e.namespaceURI===Zt?"math"===i&&ue[r]:Boolean(pe[i]):t.namespaceURI===Jt?!(e.namespaceURI===Zt&&!ue[r])&&!(e.namespaceURI===Xt&&!he[r])&&!pe[i]&&(de[i]||!fe[i]):!("application/xhtml+xml"!==ie||!te[t.namespaceURI]))},me=function(t){d(i.removed,{element:t});try{t.parentNode.removeChild(t)}catch(e){t.remove()}},ye=function(t,e){try{d(i.removed,{attribute:e.getAttributeNode(t),from:e})}catch(r){d(i.removed,{attribute:null,from:e})}if(e.removeAttribute(t),"is"===t&&!bt[t])if(jt||Ot)try{me(e)}catch(r){}else try{e.setAttribute(t,"")}catch(r){}},xe=function(t){let e=null,i=null;if(Nt)t=""+t;else{const e=g(t,/^[\r\n\t ]+/);i=e&&e[0]}"application/xhtml+xml"===ie&&Qt===Jt&&(t=''+t+"");const n=et?et.createHTML(t):t;if(Qt===Jt)try{e=(new P).parseFromString(n,ie)}catch(a){}if(!e||!e.documentElement){e=rt.createDocument(Qt,"template",null);try{e.documentElement.innerHTML=Kt?it:n}catch(a){}}const o=e.body||e.documentElement;return t&&i&&o.insertBefore(r.createTextNode(i),o.childNodes[0]||null),Qt===Jt?at.call(e,Mt?"html":"body")[0]:Mt?e.documentElement:o},Ce=function(t){return nt.call(t.ownerDocument||t,t,A.SHOW_ELEMENT|A.SHOW_COMMENT|A.SHOW_TEXT|A.SHOW_PROCESSING_INSTRUCTION|A.SHOW_CDATA_SECTION,null)},be=function(t){return t instanceof z&&("string"!=typeof t.nodeName||"string"!=typeof t.textContent||"function"!=typeof t.removeChild||!(t.attributes instanceof $)||"function"!=typeof t.removeAttribute||"function"!=typeof t.setAttribute||"string"!=typeof t.namespaceURI||"function"!=typeof t.insertBefore||"function"!=typeof t.hasChildNodes)},_e=function(t){return"function"==typeof v&&t instanceof v},ve=function(t,e,r){lt[t]&&h(lt[t],(t=>{t.call(i,e,r,ae)}))},Te=function(t){let e=null;if(ve("beforeSanitizeElements",t,null),be(t))return me(t),!0;const r=oe(t.nodeName);if(ve("uponSanitizeElement",t,{tagName:r,allowedTags:xt}),t.hasChildNodes()&&!_e(t.firstElementChild)&&b(/<[/\w]/g,t.innerHTML)&&b(/<[/\w]/g,t.textContent))return me(t),!0;if(t.nodeType===Z.progressingInstruction)return me(t),!0;if(Lt&&t.nodeType===Z.comment&&b(/<[/\w]/g,t.data))return me(t),!0;if(!xt[r]||Tt[r]){if(!Tt[r]&&Ae(r)){if(vt.tagNameCheck instanceof RegExp&&b(vt.tagNameCheck,r))return!1;if(vt.tagNameCheck instanceof Function&&vt.tagNameCheck(r))return!1}if(zt&&!Ut[r]){const e=tt(t)||t.parentNode,i=G(t)||t.childNodes;if(i&&e)for(let r=i.length-1;r>=0;--r){const n=W(i[r],!0);n.__removalCount=(t.__removalCount||0)+1,e.insertBefore(n,Y(t))}}return me(t),!0}return t instanceof T&&!ge(t)?(me(t),!0):"noscript"!==r&&"noembed"!==r&&"noframes"!==r||!b(/<\/no(script|embed|frames)/i,t.innerHTML)?(Ft&&t.nodeType===Z.text&&(e=t.textContent,h([ct,ht,ut],(t=>{e=m(e,t," ")})),t.textContent!==e&&(d(i.removed,{element:t.cloneNode()}),t.textContent=e)),ve("afterSanitizeElements",t,null),!1):(me(t),!0)},ke=function(t,e,i){if(Dt&&("id"===e||"name"===e)&&(i in r||i in se))return!1;if(wt&&!kt[e]&&b(dt,e));else if(At&&b(ft,e));else if(!bt[e]||kt[e]){if(!(Ae(t)&&(vt.tagNameCheck instanceof RegExp&&b(vt.tagNameCheck,t)||vt.tagNameCheck instanceof Function&&vt.tagNameCheck(t))&&(vt.attributeNameCheck instanceof RegExp&&b(vt.attributeNameCheck,e)||vt.attributeNameCheck instanceof Function&&vt.attributeNameCheck(e))||"is"===e&&vt.allowCustomizedBuiltInElements&&(vt.tagNameCheck instanceof RegExp&&b(vt.tagNameCheck,i)||vt.tagNameCheck instanceof Function&&vt.tagNameCheck(i))))return!1}else if(Vt[e]);else if(b(yt,m(i,gt,"")));else if("src"!==e&&"xlink:href"!==e&&"href"!==e||"script"===t||0!==y(i,"data:")||!Wt[t])if(St&&!b(pt,m(i,gt,"")));else if(i)return!1;return!0},Ae=function(t){return"annotation-xml"!==t&&g(t,mt)},we=function(t){ve("beforeSanitizeAttributes",t,null);const{attributes:e}=t;if(!e)return;const r={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:bt};let n=e.length;for(;n--;){const a=e[n],{name:s,namespaceURI:l,value:c}=a,d=oe(s);let f="value"===s?c:x(c);if(r.attrName=d,r.attrValue=f,r.keepAttr=!0,r.forceKeepAttr=void 0,ve("uponSanitizeAttribute",t,r),f=r.attrValue,r.forceKeepAttr)continue;if(ye(s,t),!r.keepAttr)continue;if(!Bt&&b(/\/>/i,f)){ye(s,t);continue}if(Lt&&b(/((--!?|])>)|<\/(style|title)/i,f)){ye(s,t);continue}Ft&&h([ct,ht,ut],(t=>{f=m(f,t," ")}));const p=oe(t.nodeName);if(ke(p,d,f)){if(!qt||"id"!==d&&"name"!==d||(ye(s,t),f=$t+f),et&&"object"==typeof R&&"function"==typeof R.getAttributeType)if(l);else switch(R.getAttributeType(p,d)){case"TrustedHTML":f=et.createHTML(f);break;case"TrustedScriptURL":f=et.createScriptURL(f)}try{l?t.setAttributeNS(l,s,f):t.setAttribute(s,f),be(t)?me(t):u(i.removed)}catch(o){}}}ve("afterSanitizeAttributes",t,null)},Se=function t(e){let i=null;const r=Ce(e);for(ve("beforeSanitizeShadowDOM",e,null);i=r.nextNode();)ve("uponSanitizeShadowNode",i,null),Te(i)||(i.content instanceof l&&t(i.content),we(i));ve("afterSanitizeShadowDOM",e,null)};return i.sanitize=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=null,o=null,a=null,s=null;if(Kt=!t,Kt&&(t="\x3c!--\x3e"),"string"!=typeof t&&!_e(t)){if("function"!=typeof t.toString)throw _("toString is not a function");if("string"!=typeof(t=t.toString()))throw _("dirty is not a string, aborting")}if(!i.isSupported)return t;if(Et||ce(e),i.removed=[],"string"==typeof t&&(Pt=!1),Pt){if(t.nodeName){const e=oe(t.nodeName);if(!xt[e]||Tt[e])throw _("root node is forbidden and cannot be sanitized in-place")}}else if(t instanceof v)r=xe("\x3c!----\x3e"),o=r.ownerDocument.importNode(t,!0),o.nodeType===Z.element&&"BODY"===o.nodeName||"HTML"===o.nodeName?r=o:r.appendChild(o);else{if(!jt&&!Ft&&!Mt&&-1===t.indexOf("<"))return et&&It?et.createHTML(t):t;if(r=xe(t),!r)return jt?null:It?it:""}r&&Nt&&me(r.firstChild);const c=Ce(Pt?t:r);for(;a=c.nextNode();)Te(a)||(a.content instanceof l&&Se(a.content),we(a));if(Pt)return t;if(jt){if(Ot)for(s=ot.call(r.ownerDocument);r.firstChild;)s.appendChild(r.firstChild);else s=r;return(bt.shadowroot||bt.shadowrootmode)&&(s=st.call(n,s,!0)),s}let u=Mt?r.outerHTML:r.innerHTML;return Mt&&xt["!doctype"]&&r.ownerDocument&&r.ownerDocument.doctype&&r.ownerDocument.doctype.name&&b(V,r.ownerDocument.doctype.name)&&(u="\n"+u),Ft&&h([ct,ht,ut],(t=>{u=m(u,t," ")})),et&&It?et.createHTML(u):u},i.setConfig=function(){ce(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),Et=!0},i.clearConfig=function(){ae=null,Et=!1},i.isValidAttribute=function(t,e,i){ae||ce({});const r=oe(t),n=oe(e);return ke(r,n,i)},i.addHook=function(t,e){"function"==typeof e&&(lt[t]=lt[t]||[],d(lt[t],e))},i.removeHook=function(t){if(lt[t])return u(lt[t])},i.removeHooks=function(t){lt[t]&&(lt[t]=[])},i.removeAllHooks=function(){lt={}},i}return K()}()},60513:(t,e,i)=>{"use strict";function r(t){for(var e=[],i=1;ir})},26312:(t,e,i)=>{"use strict";function r(t,e){let i;if(void 0===e)for(const r of t)null!=r&&(i=r)&&(i=r);else{let r=-1;for(let n of t)null!=(n=e(n,++r,t))&&(i=n)&&(i=n)}return i}function n(t,e){let i;if(void 0===e)for(const r of t)null!=r&&(i>r||void 0===i&&r>=r)&&(i=r);else{let r=-1;for(let n of t)null!=(n=e(n,++r,t))&&(i>n||void 0===i&&n>=n)&&(i=n)}return i}function o(t){return t}i.d(e,{JLW:()=>cs,l78:()=>x,tlR:()=>y,qrM:()=>vs,Yu4:()=>ks,IA3:()=>ws,Wi0:()=>Bs,PGM:()=>Fs,OEq:()=>Ms,y8u:()=>js,olC:()=>Is,IrU:()=>qs,oDi:()=>Ps,Q7f:()=>Us,cVp:()=>Ws,lUB:()=>ds,Lx9:()=>Vs,nVG:()=>el,uxU:()=>il,Xf2:()=>ol,GZz:()=>sl,UPb:()=>cl,dyv:()=>ll,bEH:()=>pr,n8j:()=>gs,T9B:()=>r,jkA:()=>n,rLf:()=>xs,WH:()=>Tr,m4Y:()=>mn,UMr:()=>vr,w7C:()=>Na,zt:()=>ja,Ltv:()=>Oa,Ubm:()=>Ia,JWy:()=>Vi,UAC:()=>Nn,DCK:()=>uo,TUC:()=>Rn,Agd:()=>Mn,t6C:()=>Sn,wXd:()=>Fn,ABi:()=>qn,Ui6:()=>Qn,rGn:()=>Un,ucG:()=>Bn,YPH:()=>Dn,Mol:()=>Pn,PGu:()=>$n,GuW:()=>zn});var a=1,s=2,l=3,c=4,h=1e-6;function u(t){return"translate("+t+",0)"}function d(t){return"translate(0,"+t+")"}function f(t){return e=>+t(e)}function p(t,e){return e=Math.max(0,t.bandwidth()-2*e)/2,t.round()&&(e=Math.round(e)),i=>+t(i)+e}function g(){return!this.__axis}function m(t,e){var i=[],r=null,n=null,m=6,y=6,x=3,C="undefined"!=typeof window&&window.devicePixelRatio>1?0:.5,b=t===a||t===c?-1:1,_=t===c||t===s?"x":"y",v=t===a||t===l?u:d;function T(u){var d=null==r?e.ticks?e.ticks.apply(e,i):e.domain():r,T=null==n?e.tickFormat?e.tickFormat.apply(e,i):o:n,k=Math.max(m,0)+x,A=e.range(),w=+A[0]+C,S=+A[A.length-1]+C,B=(e.bandwidth?p:f)(e.copy(),C),F=u.selection?u.selection():u,L=F.selectAll(".domain").data([null]),M=F.selectAll(".tick").data(d,e).order(),E=M.exit(),N=M.enter().append("g").attr("class","tick"),j=M.select("line"),O=M.select("text");L=L.merge(L.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),M=M.merge(N),j=j.merge(N.append("line").attr("stroke","currentColor").attr(_+"2",b*m)),O=O.merge(N.append("text").attr("fill","currentColor").attr(_,b*k).attr("dy",t===a?"0em":t===l?"0.71em":"0.32em")),u!==F&&(L=L.transition(u),M=M.transition(u),j=j.transition(u),O=O.transition(u),E=E.transition(u).attr("opacity",h).attr("transform",(function(t){return isFinite(t=B(t))?v(t+C):this.getAttribute("transform")})),N.attr("opacity",h).attr("transform",(function(t){var e=this.parentNode.__axis;return v((e&&isFinite(e=e(t))?e:B(t))+C)}))),E.remove(),L.attr("d",t===c||t===s?y?"M"+b*y+","+w+"H"+C+"V"+S+"H"+b*y:"M"+C+","+w+"V"+S:y?"M"+w+","+b*y+"V"+C+"H"+S+"V"+b*y:"M"+w+","+C+"H"+S),M.attr("opacity",1).attr("transform",(function(t){return v(B(t)+C)})),j.attr(_+"2",b*m),O.attr(_,b*k).text(T),F.filter(g).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===s?"start":t===c?"end":"middle"),F.each((function(){this.__axis=B}))}return T.scale=function(t){return arguments.length?(e=t,T):e},T.ticks=function(){return i=Array.from(arguments),T},T.tickArguments=function(t){return arguments.length?(i=null==t?[]:Array.from(t),T):i.slice()},T.tickValues=function(t){return arguments.length?(r=null==t?null:Array.from(t),T):r&&r.slice()},T.tickFormat=function(t){return arguments.length?(n=t,T):n},T.tickSize=function(t){return arguments.length?(m=y=+t,T):m},T.tickSizeInner=function(t){return arguments.length?(m=+t,T):m},T.tickSizeOuter=function(t){return arguments.length?(y=+t,T):y},T.tickPadding=function(t){return arguments.length?(x=+t,T):x},T.offset=function(t){return arguments.length?(C=+t,T):C},T}function y(t){return m(a,t)}function x(t){return m(l,t)}function C(){}function b(t){return null==t?C:function(){return this.querySelector(t)}}function _(t){return null==t?[]:Array.isArray(t)?t:Array.from(t)}function v(){return[]}function T(t){return null==t?v:function(){return this.querySelectorAll(t)}}function k(t){return function(){return this.matches(t)}}function A(t){return function(e){return e.matches(t)}}var w=Array.prototype.find;function S(){return this.firstElementChild}var B=Array.prototype.filter;function F(){return Array.from(this.children)}function L(t){return new Array(t.length)}function M(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function E(t,e,i,r,n,o){for(var a,s=0,l=e.length,c=o.length;se?1:t>=e?0:NaN}M.prototype={constructor:M,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var D="http://www.w3.org/1999/xhtml";const q={svg:"http://www.w3.org/2000/svg",xhtml:D,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function $(t){var e=t+="",i=e.indexOf(":");return i>=0&&"xmlns"!==(e=t.slice(0,i))&&(t=t.slice(i+1)),q.hasOwnProperty(e)?{space:q[e],local:t}:t}function z(t){return function(){this.removeAttribute(t)}}function P(t){return function(){this.removeAttributeNS(t.space,t.local)}}function R(t,e){return function(){this.setAttribute(t,e)}}function U(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function H(t,e){return function(){var i=e.apply(this,arguments);null==i?this.removeAttribute(t):this.setAttribute(t,i)}}function W(t,e){return function(){var i=e.apply(this,arguments);null==i?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,i)}}function Y(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function V(t){return function(){this.style.removeProperty(t)}}function G(t,e,i){return function(){this.style.setProperty(t,e,i)}}function X(t,e,i){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,i)}}function Z(t,e){return t.style.getPropertyValue(e)||Y(t).getComputedStyle(t,null).getPropertyValue(e)}function J(t){return function(){delete this[t]}}function Q(t,e){return function(){this[t]=e}}function K(t,e){return function(){var i=e.apply(this,arguments);null==i?delete this[t]:this[t]=i}}function tt(t){return t.trim().split(/^|\s+/)}function et(t){return t.classList||new it(t)}function it(t){this._node=t,this._names=tt(t.getAttribute("class")||"")}function rt(t,e){for(var i=et(t),r=-1,n=e.length;++r=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var Bt=[null];function Ft(t,e){this._groups=t,this._parents=e}function Lt(){return new Ft([[document.documentElement]],Bt)}Ft.prototype=Lt.prototype={constructor:Ft,select:function(t){"function"!=typeof t&&(t=b(t));for(var e=this._groups,i=e.length,r=new Array(i),n=0;n=_&&(_=b+1);!(C=y[_])&&++_=0;)(r=n[o])&&(a&&4^r.compareDocumentPosition(a)&&a.parentNode.insertBefore(r,a),a=r);return this},sort:function(t){function e(e,i){return e&&i?t(e.__data__,i.__data__):!e-!i}t||(t=I);for(var i=this._groups,r=i.length,n=new Array(r),o=0;o1?this.each((null==e?V:"function"==typeof e?X:G)(t,e,null==i?"":i)):Z(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?J:"function"==typeof e?K:Q)(t,e)):this.node()[t]},classed:function(t,e){var i=tt(t+"");if(arguments.length<2){for(var r=et(this.node()),n=-1,o=i.length;++n=0&&(e=t.slice(i+1),t=t.slice(0,i)),{type:t,name:e}}))}(t+""),a=o.length;if(!(arguments.length<2)){for(s=e?kt:Tt,r=0;r{}};function Nt(){for(var t,e=0,i=arguments.length,r={};e=0&&(e=t.slice(i+1),t=t.slice(0,i)),t&&!r.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}}))),a=-1,s=o.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++a0)for(var i,r,n=new Array(i),o=0;o=0&&e._call.call(void 0,t),e=e._next;--zt}()}finally{zt=0,function(){var t,e,i=qt,r=1/0;for(;i;)i._call?(r>i._time&&(r=i._time),t=i,i=i._next):(e=i._next,i._next=null,i=t?t._next=e:qt=e);$t=t,ee(r)}(),Wt=0}}function te(){var t=Vt.now(),e=t-Ht;e>Ut&&(Yt-=e,Ht=t)}function ee(t){zt||(Pt&&(Pt=clearTimeout(Pt)),t-Wt>24?(t<1/0&&(Pt=setTimeout(Kt,t-Vt.now()-Yt)),Rt&&(Rt=clearInterval(Rt))):(Rt||(Ht=Vt.now(),Rt=setInterval(te,Ut)),zt=1,Gt(Kt)))}function ie(t,e,i){var r=new Jt;return e=null==e?0:+e,r.restart((i=>{r.stop(),t(i+e)}),e,i),r}Jt.prototype=Qt.prototype={constructor:Jt,restart:function(t,e,i){if("function"!=typeof t)throw new TypeError("callback is not a function");i=(null==i?Xt():+i)+(null==e?0:+e),this._next||$t===this||($t?$t._next=this:qt=this,$t=this),this._call=t,this._time=i,ee()},stop:function(){this._call&&(this._call=null,this._time=1/0,ee())}};var re=Dt("start","end","cancel","interrupt"),ne=[],oe=0,ae=1,se=2,le=3,ce=4,he=5,ue=6;function de(t,e,i,r,n,o){var a=t.__transition;if(a){if(i in a)return}else t.__transition={};!function(t,e,i){var r,n=t.__transition;function o(t){i.state=ae,i.timer.restart(a,i.delay,i.time),i.delay<=t&&a(t-i.delay)}function a(o){var c,h,u,d;if(i.state!==ae)return l();for(c in n)if((d=n[c]).name===i.name){if(d.state===le)return ie(a);d.state===ce?(d.state=ue,d.timer.stop(),d.on.call("interrupt",t,t.__data__,d.index,d.group),delete n[c]):+coe)throw new Error("too late; already scheduled");return i}function pe(t,e){var i=ge(t,e);if(i.state>le)throw new Error("too late; already running");return i}function ge(t,e){var i=t.__transition;if(!i||!(i=i[e]))throw new Error("transition not found");return i}function me(t,e){return t=+t,e=+e,function(i){return t*(1-i)+e*i}}var ye,xe=180/Math.PI,Ce={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function be(t,e,i,r,n,o){var a,s,l;return(a=Math.sqrt(t*t+e*e))&&(t/=a,e/=a),(l=t*i+e*r)&&(i-=t*l,r-=e*l),(s=Math.sqrt(i*i+r*r))&&(i/=s,r/=s,l/=s),t*r180?e+=360:e-t>180&&(t+=360),o.push({i:i.push(n(i)+"rotate(",null,r)-2,x:me(t,e)})):e&&i.push(n(i)+"rotate("+e+r)}(o.rotate,a.rotate,s,l),function(t,e,i,o){t!==e?o.push({i:i.push(n(i)+"skewX(",null,r)-2,x:me(t,e)}):e&&i.push(n(i)+"skewX("+e+r)}(o.skewX,a.skewX,s,l),function(t,e,i,r,o,a){if(t!==i||e!==r){var s=o.push(n(o)+"scale(",null,",",null,")");a.push({i:s-4,x:me(t,i)},{i:s-2,x:me(e,r)})}else 1===i&&1===r||o.push(n(o)+"scale("+i+","+r+")")}(o.scaleX,o.scaleY,a.scaleX,a.scaleY,s,l),o=a=null,function(t){for(var e,i=-1,r=l.length;++i>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===i?Ve(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===i?Ve(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=Ie.exec(t))?new Ze(e[1],e[2],e[3],1):(e=De.exec(t))?new Ze(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=qe.exec(t))?Ve(e[1],e[2],e[3],e[4]):(e=$e.exec(t))?Ve(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=ze.exec(t))?ii(e[1],e[2]/100,e[3]/100,1):(e=Pe.exec(t))?ii(e[1],e[2]/100,e[3]/100,e[4]):Re.hasOwnProperty(t)?Ye(Re[t]):"transparent"===t?new Ze(NaN,NaN,NaN,0):null}function Ye(t){return new Ze(t>>16&255,t>>8&255,255&t,1)}function Ve(t,e,i,r){return r<=0&&(t=e=i=NaN),new Ze(t,e,i,r)}function Ge(t){return t instanceof Fe||(t=We(t)),t?new Ze((t=t.rgb()).r,t.g,t.b,t.opacity):new Ze}function Xe(t,e,i,r){return 1===arguments.length?Ge(t):new Ze(t,e,i,null==r?1:r)}function Ze(t,e,i,r){this.r=+t,this.g=+e,this.b=+i,this.opacity=+r}function Je(){return`#${ei(this.r)}${ei(this.g)}${ei(this.b)}`}function Qe(){const t=Ke(this.opacity);return`${1===t?"rgb(":"rgba("}${ti(this.r)}, ${ti(this.g)}, ${ti(this.b)}${1===t?")":`, ${t})`}`}function Ke(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function ti(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function ei(t){return((t=ti(t))<16?"0":"")+t.toString(16)}function ii(t,e,i,r){return r<=0?t=e=i=NaN:i<=0||i>=1?t=e=NaN:e<=0&&(t=NaN),new ni(t,e,i,r)}function ri(t){if(t instanceof ni)return new ni(t.h,t.s,t.l,t.opacity);if(t instanceof Fe||(t=We(t)),!t)return new ni;if(t instanceof ni)return t;var e=(t=t.rgb()).r/255,i=t.g/255,r=t.b/255,n=Math.min(e,i,r),o=Math.max(e,i,r),a=NaN,s=o-n,l=(o+n)/2;return s?(a=e===o?(i-r)/s+6*(i0&&l<1?0:a,new ni(a,s,l,t.opacity)}function ni(t,e,i,r){this.h=+t,this.s=+e,this.l=+i,this.opacity=+r}function oi(t){return(t=(t||0)%360)<0?t+360:t}function ai(t){return Math.max(0,Math.min(1,t||0))}function si(t,e,i){return 255*(t<60?e+(i-e)*t/60:t<180?i:t<240?e+(i-e)*(240-t)/60:e)}function li(t,e,i,r,n){var o=t*t,a=o*t;return((1-3*t+3*o-a)*e+(4-6*o+3*a)*i+(1+3*t+3*o-3*a)*r+a*n)/6}Se(Fe,We,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:Ue,formatHex:Ue,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return ri(this).formatHsl()},formatRgb:He,toString:He}),Se(Ze,Xe,Be(Fe,{brighter(t){return t=null==t?Me:Math.pow(Me,t),new Ze(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=null==t?Le:Math.pow(Le,t),new Ze(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Ze(ti(this.r),ti(this.g),ti(this.b),Ke(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Je,formatHex:Je,formatHex8:function(){return`#${ei(this.r)}${ei(this.g)}${ei(this.b)}${ei(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:Qe,toString:Qe})),Se(ni,(function(t,e,i,r){return 1===arguments.length?ri(t):new ni(t,e,i,null==r?1:r)}),Be(Fe,{brighter(t){return t=null==t?Me:Math.pow(Me,t),new ni(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=null==t?Le:Math.pow(Le,t),new ni(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,i=this.l,r=i+(i<.5?i:1-i)*e,n=2*i-r;return new Ze(si(t>=240?t-240:t+120,n,r),si(t,n,r),si(t<120?t+240:t-120,n,r),this.opacity)},clamp(){return new ni(oi(this.h),ai(this.s),ai(this.l),Ke(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=Ke(this.opacity);return`${1===t?"hsl(":"hsla("}${oi(this.h)}, ${100*ai(this.s)}%, ${100*ai(this.l)}%${1===t?")":`, ${t})`}`}}));const ci=t=>()=>t;function hi(t,e){return function(i){return t+i*e}}function ui(t){return 1==(t=+t)?di:function(e,i){return i-e?function(t,e,i){return t=Math.pow(t,i),e=Math.pow(e,i)-t,i=1/i,function(r){return Math.pow(t+r*e,i)}}(e,i,t):ci(isNaN(e)?i:e)}}function di(t,e){var i=e-t;return i?hi(t,i):ci(isNaN(t)?e:t)}const fi=function t(e){var i=ui(e);function r(t,e){var r=i((t=Xe(t)).r,(e=Xe(e)).r),n=i(t.g,e.g),o=i(t.b,e.b),a=di(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=n(e),t.b=o(e),t.opacity=a(e),t+""}}return r.gamma=t,r}(1);function pi(t){return function(e){var i,r,n=e.length,o=new Array(n),a=new Array(n),s=new Array(n);for(i=0;i=1?(i=1,e-1):Math.floor(i*e),n=t[r],o=t[r+1],a=r>0?t[r-1]:2*n-o,s=ro&&(n=e.slice(o,n),s[a]?s[a]+=n:s[++a]=n),(i=i[0])===(r=r[0])?s[a]?s[a]+=r:s[++a]=r:(s[++a]=null,l.push({i:a,x:me(i,r)})),o=mi.lastIndex;return o=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?fe:pe;return function(){var a=o(this,t),s=a.on;s!==r&&(n=(r=s).copy()).on(e,i),a.on=n}}(i,t,e))},attr:function(t,e){var i=$(t),r="transform"===i?Te:xi;return this.attrTween(t,"function"==typeof e?(i.local?ki:Ti)(i,r,we(this,"attr."+t,e)):null==e?(i.local?bi:Ci)(i):(i.local?vi:_i)(i,r,e))},attrTween:function(t,e){var i="attr."+t;if(arguments.length<2)return(i=this.tween(i))&&i._value;if(null==e)return this.tween(i,null);if("function"!=typeof e)throw new Error;var r=$(t);return this.tween(i,(r.local?Ai:wi)(r,e))},style:function(t,e,i){var r="transform"==(t+="")?ve:xi;return null==e?this.styleTween(t,function(t,e){var i,r,n;return function(){var o=Z(this,t),a=(this.style.removeProperty(t),Z(this,t));return o===a?null:o===i&&a===r?n:n=e(i=o,r=a)}}(t,r)).on("end.style."+t,Ei(t)):"function"==typeof e?this.styleTween(t,function(t,e,i){var r,n,o;return function(){var a=Z(this,t),s=i(this),l=s+"";return null==s&&(this.style.removeProperty(t),l=s=Z(this,t)),a===l?null:a===r&&l===n?o:(n=l,o=e(r=a,s))}}(t,r,we(this,"style."+t,e))).each(function(t,e){var i,r,n,o,a="style."+e,s="end."+a;return function(){var l=pe(this,t),c=l.on,h=null==l.value[a]?o||(o=Ei(e)):void 0;c===i&&n===h||(r=(i=c).copy()).on(s,n=h),l.on=r}}(this._id,t)):this.styleTween(t,function(t,e,i){var r,n,o=i+"";return function(){var a=Z(this,t);return a===o?null:a===r?n:n=e(r=a,i)}}(t,r,e),i).on("end.style."+t,null)},styleTween:function(t,e,i){var r="style."+(t+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==e)return this.tween(r,null);if("function"!=typeof e)throw new Error;return this.tween(r,function(t,e,i){var r,n;function o(){var o=e.apply(this,arguments);return o!==n&&(r=(n=o)&&function(t,e,i){return function(r){this.style.setProperty(t,e.call(this,r),i)}}(t,o,i)),r}return o._value=e,o}(t,e,null==i?"":i))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var e=t(this);this.textContent=null==e?"":e}}(we(this,"text",t)):function(t){return function(){this.textContent=t}}(null==t?"":t+""))},textTween:function(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(null==t)return this.tween(e,null);if("function"!=typeof t)throw new Error;return this.tween(e,function(t){var e,i;function r(){var r=t.apply(this,arguments);return r!==i&&(e=(i=r)&&function(t){return function(e){this.textContent=t.call(this,e)}}(r)),e}return r._value=t,r}(t))},remove:function(){return this.on("end.remove",function(t){return function(){var e=this.parentNode;for(var i in this.__transition)if(+i!==t)return;e&&e.removeChild(this)}}(this._id))},tween:function(t,e){var i=this._id;if(t+="",arguments.length<2){for(var r,n=ge(this.node(),i).tween,o=0,a=n.length;ose&&i.statefunction(t,e){return fetch(t,e).then(Wi)}(e,i).then((e=>(new DOMParser).parseFromString(e,t)))}Yi("application/xml");Yi("text/html");var Vi=Yi("image/svg+xml");const Gi=Math.PI/180,Xi=180/Math.PI,Zi=.96422,Ji=1,Qi=.82521,Ki=4/29,tr=6/29,er=3*tr*tr,ir=tr*tr*tr;function rr(t){if(t instanceof nr)return new nr(t.l,t.a,t.b,t.opacity);if(t instanceof ur)return dr(t);t instanceof Ze||(t=Ge(t));var e,i,r=lr(t.r),n=lr(t.g),o=lr(t.b),a=or((.2225045*r+.7168786*n+.0606169*o)/Ji);return r===n&&n===o?e=i=a:(e=or((.4360747*r+.3850649*n+.1430804*o)/Zi),i=or((.0139322*r+.0971045*n+.7141733*o)/Qi)),new nr(116*a-16,500*(e-a),200*(a-i),t.opacity)}function nr(t,e,i,r){this.l=+t,this.a=+e,this.b=+i,this.opacity=+r}function or(t){return t>ir?Math.pow(t,1/3):t/er+Ki}function ar(t){return t>tr?t*t*t:er*(t-Ki)}function sr(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function lr(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function cr(t){if(t instanceof ur)return new ur(t.h,t.c,t.l,t.opacity);if(t instanceof nr||(t=rr(t)),0===t.a&&0===t.b)return new ur(NaN,0180||i<-180?i-360*Math.round(i/360):i):ci(isNaN(t)?e:t)}));fr(di);function gr(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}class mr extends Map{constructor(t,e=br){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const[i,r]of t)this.set(i,r)}get(t){return super.get(yr(this,t))}has(t){return super.has(yr(this,t))}set(t,e){return super.set(xr(this,t),e)}delete(t){return super.delete(Cr(this,t))}}Set;function yr({_intern:t,_key:e},i){const r=e(i);return t.has(r)?t.get(r):i}function xr({_intern:t,_key:e},i){const r=e(i);return t.has(r)?t.get(r):(t.set(r,i),i)}function Cr({_intern:t,_key:e},i){const r=e(i);return t.has(r)&&(i=t.get(r),t.delete(r)),i}function br(t){return null!==t&&"object"==typeof t?t.valueOf():t}const _r=Symbol("implicit");function vr(){var t=new mr,e=[],i=[],r=_r;function n(n){let o=t.get(n);if(void 0===o){if(r!==_r)return r;t.set(n,o=e.push(n)-1)}return i[o%i.length]}return n.domain=function(i){if(!arguments.length)return e.slice();e=[],t=new mr;for(const r of i)t.has(r)||t.set(r,e.push(r)-1);return n},n.range=function(t){return arguments.length?(i=Array.from(t),n):i.slice()},n.unknown=function(t){return arguments.length?(r=t,n):r},n.copy=function(){return vr(e,i).unknown(r)},gr.apply(n,arguments),n}function Tr(){var t,e,i=vr().unknown(void 0),r=i.domain,n=i.range,o=0,a=1,s=!1,l=0,c=0,h=.5;function u(){var i=r().length,u=a=kr?10:o>=Ar?5:o>=wr?2:1;let s,l,c;return n<0?(c=Math.pow(10,-n)/a,s=Math.round(t*c),l=Math.round(e*c),s/ce&&--l,c=-c):(c=Math.pow(10,n)*a,s=Math.round(t/c),l=Math.round(e/c),s*ce&&--l),le?1:t>=e?0:NaN}function Mr(t,e){return null==t||null==e?NaN:et?1:e>=t?0:NaN}function Er(t){let e,i,r;function n(t,r,n=0,o=t.length){if(n>>1;i(t[e],r)<0?n=e+1:o=e}while(nLr(t(e),i),r=(e,i)=>t(e)-i):(e=t===Lr||t===Mr?t:Nr,i=t,r=t),{left:n,center:function(t,e,i=0,o=t.length){const a=n(t,e,i,o-1);return a>i&&r(t[a-1],e)>-r(t[a],e)?a-1:a},right:function(t,r,n=0,o=t.length){if(n>>1;i(t[e],r)<=0?n=e+1:o=e}while(ne&&(i=t,t=e,e=i),c=function(i){return Math.max(t,Math.min(e,i))}),r=l>2?Gr:Vr,n=o=null,u}function u(e){return null==e||isNaN(e=+e)?i:(n||(n=r(a.map(t),s,l)))(t(c(e)))}return u.invert=function(i){return c(e((o||(o=r(s,a.map(t),me)))(i)))},u.domain=function(t){return arguments.length?(a=Array.from(t,Ur),h()):a.slice()},u.range=function(t){return arguments.length?(s=Array.from(t),h()):s.slice()},u.rangeRound=function(t){return s=Array.from(t),l=Rr,h()},u.clamp=function(t){return arguments.length?(c=!!t||Wr,h()):c!==Wr},u.interpolate=function(t){return arguments.length?(l=t,h()):l},u.unknown=function(t){return arguments.length?(i=t,u):i},function(i,r){return t=i,e=r,h()}}function Jr(){return Zr()(Wr,Wr)}var Qr,Kr=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function tn(t){if(!(e=Kr.exec(t)))throw new Error("invalid format: "+t);var e;return new en({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function en(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function rn(t,e){if((i=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var i,r=t.slice(0,i);return[r.length>1?r[0]+r.slice(2):r,+t.slice(i+1)]}function nn(t){return(t=rn(Math.abs(t)))?t[1]:NaN}function on(t,e){var i=rn(t,e);if(!i)return t+"";var r=i[0],n=i[1];return n<0?"0."+new Array(-n).join("0")+r:r.length>n+1?r.slice(0,n+1)+"."+r.slice(n+1):r+new Array(n-r.length+2).join("0")}tn.prototype=en.prototype,en.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};const an={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>on(100*t,e),r:on,s:function(t,e){var i=rn(t,e);if(!i)return t+"";var r=i[0],n=i[1],o=n-(Qr=3*Math.max(-8,Math.min(8,Math.floor(n/3))))+1,a=r.length;return o===a?r:o>a?r+new Array(o-a+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+rn(t,Math.max(0,e+o-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function sn(t){return t}var ln,cn,hn,un=Array.prototype.map,dn=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"];function fn(t){var e,i,r=void 0===t.grouping||void 0===t.thousands?sn:(e=un.call(t.grouping,Number),i=t.thousands+"",function(t,r){for(var n=t.length,o=[],a=0,s=e[0],l=0;n>0&&s>0&&(l+s+1>r&&(s=Math.max(1,r-l)),o.push(t.substring(n-=s,n+s)),!((l+=s+1)>r));)s=e[a=(a+1)%e.length];return o.reverse().join(i)}),n=void 0===t.currency?"":t.currency[0]+"",o=void 0===t.currency?"":t.currency[1]+"",a=void 0===t.decimal?".":t.decimal+"",s=void 0===t.numerals?sn:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(un.call(t.numerals,String)),l=void 0===t.percent?"%":t.percent+"",c=void 0===t.minus?"\u2212":t.minus+"",h=void 0===t.nan?"NaN":t.nan+"";function u(t){var e=(t=tn(t)).fill,i=t.align,u=t.sign,d=t.symbol,f=t.zero,p=t.width,g=t.comma,m=t.precision,y=t.trim,x=t.type;"n"===x?(g=!0,x="g"):an[x]||(void 0===m&&(m=12),y=!0,x="g"),(f||"0"===e&&"="===i)&&(f=!0,e="0",i="=");var C="$"===d?n:"#"===d&&/[boxX]/.test(x)?"0"+x.toLowerCase():"",b="$"===d?o:/[%p]/.test(x)?l:"",_=an[x],v=/[defgprs%]/.test(x);function T(t){var n,o,l,d=C,T=b;if("c"===x)T=_(t)+T,t="";else{var k=(t=+t)<0||1/t<0;if(t=isNaN(t)?h:_(Math.abs(t),m),y&&(t=function(t){t:for(var e,i=t.length,r=1,n=-1;r0&&(n=0)}return n>0?t.slice(0,n)+t.slice(e+1):t}(t)),k&&0==+t&&"+"!==u&&(k=!1),d=(k?"("===u?u:c:"-"===u||"("===u?"":u)+d,T=("s"===x?dn[8+Qr/3]:"")+T+(k&&"("===u?")":""),v)for(n=-1,o=t.length;++n(l=t.charCodeAt(n))||l>57){T=(46===l?a+t.slice(n+1):t.slice(n))+T,t=t.slice(0,n);break}}g&&!f&&(t=r(t,1/0));var A=d.length+t.length+T.length,w=A>1)+d+t+T+w.slice(A);break;default:t=w+d+t+T}return s(t)}return m=void 0===m?6:/[gprs]/.test(x)?Math.max(1,Math.min(21,m)):Math.max(0,Math.min(20,m)),T.toString=function(){return t+""},T}return{format:u,formatPrefix:function(t,e){var i=u(((t=tn(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(nn(e)/3))),n=Math.pow(10,-r),o=dn[8+r/3];return function(t){return i(n*t)+o}}}}function pn(t,e,i,r){var n,o=Fr(t,e,i);switch((r=tn(null==r?",f":r)).type){case"s":var a=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(n=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(nn(e)/3)))-nn(Math.abs(t)))}(o,a))||(r.precision=n),hn(r,a);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(n=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,nn(e)-nn(t))+1}(o,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=n-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(n=function(t){return Math.max(0,-nn(Math.abs(t)))}(o))||(r.precision=n-2*("%"===r.type))}return cn(r)}function gn(t){var e=t.domain;return t.ticks=function(t){var i=e();return function(t,e,i){if(!((i=+i)>0))return[];if((t=+t)==(e=+e))return[t];const r=e=n))return[];const s=o-n+1,l=new Array(s);if(r)if(a<0)for(let c=0;c0;){if((n=Br(l,c,i))===r)return o[a]=l,o[s]=c,e(o);if(n>0)l=Math.floor(l/n)*n,c=Math.ceil(c/n)*n;else{if(!(n<0))break;l=Math.ceil(l*n)/n,c=Math.floor(c*n)/n}r=n}return t},t}function mn(){var t=Jr();return t.copy=function(){return Xr(t,mn())},gr.apply(t,arguments),gn(t)}ln=fn({thousands:",",grouping:[3],currency:["$",""]}),cn=ln.format,hn=ln.formatPrefix;const yn=1e3,xn=6e4,Cn=36e5,bn=864e5,_n=6048e5,vn=2592e6,Tn=31536e6,kn=new Date,An=new Date;function wn(t,e,i,r){function n(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return n.floor=e=>(t(e=new Date(+e)),e),n.ceil=i=>(t(i=new Date(i-1)),e(i,1),t(i),i),n.round=t=>{const e=n(t),i=n.ceil(t);return t-e(e(t=new Date(+t),null==i?1:Math.floor(i)),t),n.range=(i,r,o)=>{const a=[];if(i=n.ceil(i),o=null==o?1:Math.floor(o),!(i0))return a;let s;do{a.push(s=new Date(+i)),e(i,o),t(i)}while(swn((e=>{if(e>=e)for(;t(e),!i(e);)e.setTime(e-1)}),((t,r)=>{if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!i(t););else for(;--r>=0;)for(;e(t,1),!i(t););})),i&&(n.count=(e,r)=>(kn.setTime(+e),An.setTime(+r),t(kn),t(An),Math.floor(i(kn,An))),n.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?n.filter(r?e=>r(e)%t==0:e=>n.count(0,e)%t==0):n:null)),n}const Sn=wn((()=>{}),((t,e)=>{t.setTime(+t+e)}),((t,e)=>e-t));Sn.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?wn((e=>{e.setTime(Math.floor(e/t)*t)}),((e,i)=>{e.setTime(+e+i*t)}),((e,i)=>(i-e)/t)):Sn:null);Sn.range;const Bn=wn((t=>{t.setTime(t-t.getMilliseconds())}),((t,e)=>{t.setTime(+t+e*yn)}),((t,e)=>(e-t)/yn),(t=>t.getUTCSeconds())),Fn=(Bn.range,wn((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*yn)}),((t,e)=>{t.setTime(+t+e*xn)}),((t,e)=>(e-t)/xn),(t=>t.getMinutes()))),Ln=(Fn.range,wn((t=>{t.setUTCSeconds(0,0)}),((t,e)=>{t.setTime(+t+e*xn)}),((t,e)=>(e-t)/xn),(t=>t.getUTCMinutes()))),Mn=(Ln.range,wn((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*yn-t.getMinutes()*xn)}),((t,e)=>{t.setTime(+t+e*Cn)}),((t,e)=>(e-t)/Cn),(t=>t.getHours()))),En=(Mn.range,wn((t=>{t.setUTCMinutes(0,0,0)}),((t,e)=>{t.setTime(+t+e*Cn)}),((t,e)=>(e-t)/Cn),(t=>t.getUTCHours()))),Nn=(En.range,wn((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*xn)/bn),(t=>t.getDate()-1))),jn=(Nn.range,wn((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/bn),(t=>t.getUTCDate()-1))),On=(jn.range,wn((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/bn),(t=>Math.floor(t/bn))));On.range;function In(t){return wn((e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),((t,e)=>{t.setDate(t.getDate()+7*e)}),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*xn)/_n))}const Dn=In(0),qn=In(1),$n=In(2),zn=In(3),Pn=In(4),Rn=In(5),Un=In(6);Dn.range,qn.range,$n.range,zn.range,Pn.range,Rn.range,Un.range;function Hn(t){return wn((e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+7*e)}),((t,e)=>(e-t)/_n))}const Wn=Hn(0),Yn=Hn(1),Vn=Hn(2),Gn=Hn(3),Xn=Hn(4),Zn=Hn(5),Jn=Hn(6),Qn=(Wn.range,Yn.range,Vn.range,Gn.range,Xn.range,Zn.range,Jn.range,wn((t=>{t.setDate(1),t.setHours(0,0,0,0)}),((t,e)=>{t.setMonth(t.getMonth()+e)}),((t,e)=>e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())),(t=>t.getMonth()))),Kn=(Qn.range,wn((t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)}),((t,e)=>e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())),(t=>t.getUTCMonth()))),to=(Kn.range,wn((t=>{t.setMonth(0,1),t.setHours(0,0,0,0)}),((t,e)=>{t.setFullYear(t.getFullYear()+e)}),((t,e)=>e.getFullYear()-t.getFullYear()),(t=>t.getFullYear())));to.every=t=>isFinite(t=Math.floor(t))&&t>0?wn((e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),((e,i)=>{e.setFullYear(e.getFullYear()+i*t)})):null;to.range;const eo=wn((t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)}),((t,e)=>e.getUTCFullYear()-t.getUTCFullYear()),(t=>t.getUTCFullYear()));eo.every=t=>isFinite(t=Math.floor(t))&&t>0?wn((e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),((e,i)=>{e.setUTCFullYear(e.getUTCFullYear()+i*t)})):null;eo.range;function io(t,e,i,r,n,o){const a=[[Bn,1,yn],[Bn,5,5e3],[Bn,15,15e3],[Bn,30,3e4],[o,1,xn],[o,5,3e5],[o,15,9e5],[o,30,18e5],[n,1,Cn],[n,3,108e5],[n,6,216e5],[n,12,432e5],[r,1,bn],[r,2,1728e5],[i,1,_n],[e,1,vn],[e,3,7776e6],[t,1,Tn]];function s(e,i,r){const n=Math.abs(i-e)/r,o=Er((([,,t])=>t)).right(a,n);if(o===a.length)return t.every(Fr(e/Tn,i/Tn,r));if(0===o)return Sn.every(Math.max(Fr(e,i,r),1));const[s,l]=a[n/a[o-1][2][t.toLowerCase(),e])))}function _o(t,e,i){var r=po.exec(e.slice(i,i+1));return r?(t.w=+r[0],i+r[0].length):-1}function vo(t,e,i){var r=po.exec(e.slice(i,i+1));return r?(t.u=+r[0],i+r[0].length):-1}function To(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.U=+r[0],i+r[0].length):-1}function ko(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.V=+r[0],i+r[0].length):-1}function Ao(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.W=+r[0],i+r[0].length):-1}function wo(t,e,i){var r=po.exec(e.slice(i,i+4));return r?(t.y=+r[0],i+r[0].length):-1}function So(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),i+r[0].length):-1}function Bo(t,e,i){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(i,i+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),i+r[0].length):-1}function Fo(t,e,i){var r=po.exec(e.slice(i,i+1));return r?(t.q=3*r[0]-3,i+r[0].length):-1}function Lo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.m=r[0]-1,i+r[0].length):-1}function Mo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.d=+r[0],i+r[0].length):-1}function Eo(t,e,i){var r=po.exec(e.slice(i,i+3));return r?(t.m=0,t.d=+r[0],i+r[0].length):-1}function No(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.H=+r[0],i+r[0].length):-1}function jo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.M=+r[0],i+r[0].length):-1}function Oo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.S=+r[0],i+r[0].length):-1}function Io(t,e,i){var r=po.exec(e.slice(i,i+3));return r?(t.L=+r[0],i+r[0].length):-1}function Do(t,e,i){var r=po.exec(e.slice(i,i+6));return r?(t.L=Math.floor(r[0]/1e3),i+r[0].length):-1}function qo(t,e,i){var r=go.exec(e.slice(i,i+1));return r?i+r[0].length:-1}function $o(t,e,i){var r=po.exec(e.slice(i));return r?(t.Q=+r[0],i+r[0].length):-1}function zo(t,e,i){var r=po.exec(e.slice(i));return r?(t.s=+r[0],i+r[0].length):-1}function Po(t,e){return yo(t.getDate(),e,2)}function Ro(t,e){return yo(t.getHours(),e,2)}function Uo(t,e){return yo(t.getHours()%12||12,e,2)}function Ho(t,e){return yo(1+Nn.count(to(t),t),e,3)}function Wo(t,e){return yo(t.getMilliseconds(),e,3)}function Yo(t,e){return Wo(t,e)+"000"}function Vo(t,e){return yo(t.getMonth()+1,e,2)}function Go(t,e){return yo(t.getMinutes(),e,2)}function Xo(t,e){return yo(t.getSeconds(),e,2)}function Zo(t){var e=t.getDay();return 0===e?7:e}function Jo(t,e){return yo(Dn.count(to(t)-1,t),e,2)}function Qo(t){var e=t.getDay();return e>=4||0===e?Pn(t):Pn.ceil(t)}function Ko(t,e){return t=Qo(t),yo(Pn.count(to(t),t)+(4===to(t).getDay()),e,2)}function ta(t){return t.getDay()}function ea(t,e){return yo(qn.count(to(t)-1,t),e,2)}function ia(t,e){return yo(t.getFullYear()%100,e,2)}function ra(t,e){return yo((t=Qo(t)).getFullYear()%100,e,2)}function na(t,e){return yo(t.getFullYear()%1e4,e,4)}function oa(t,e){var i=t.getDay();return yo((t=i>=4||0===i?Pn(t):Pn.ceil(t)).getFullYear()%1e4,e,4)}function aa(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+yo(e/60|0,"0",2)+yo(e%60,"0",2)}function sa(t,e){return yo(t.getUTCDate(),e,2)}function la(t,e){return yo(t.getUTCHours(),e,2)}function ca(t,e){return yo(t.getUTCHours()%12||12,e,2)}function ha(t,e){return yo(1+jn.count(eo(t),t),e,3)}function ua(t,e){return yo(t.getUTCMilliseconds(),e,3)}function da(t,e){return ua(t,e)+"000"}function fa(t,e){return yo(t.getUTCMonth()+1,e,2)}function pa(t,e){return yo(t.getUTCMinutes(),e,2)}function ga(t,e){return yo(t.getUTCSeconds(),e,2)}function ma(t){var e=t.getUTCDay();return 0===e?7:e}function ya(t,e){return yo(Wn.count(eo(t)-1,t),e,2)}function xa(t){var e=t.getUTCDay();return e>=4||0===e?Xn(t):Xn.ceil(t)}function Ca(t,e){return t=xa(t),yo(Xn.count(eo(t),t)+(4===eo(t).getUTCDay()),e,2)}function ba(t){return t.getUTCDay()}function _a(t,e){return yo(Yn.count(eo(t)-1,t),e,2)}function va(t,e){return yo(t.getUTCFullYear()%100,e,2)}function Ta(t,e){return yo((t=xa(t)).getUTCFullYear()%100,e,2)}function ka(t,e){return yo(t.getUTCFullYear()%1e4,e,4)}function Aa(t,e){var i=t.getUTCDay();return yo((t=i>=4||0===i?Xn(t):Xn.ceil(t)).getUTCFullYear()%1e4,e,4)}function wa(){return"+0000"}function Sa(){return"%"}function Ba(t){return+t}function Fa(t){return Math.floor(+t/1e3)}function La(t){return new Date(t)}function Ma(t){return t instanceof Date?+t:+new Date(+t)}function Ea(t,e,i,r,n,o,a,s,l,c){var h=Jr(),u=h.invert,d=h.domain,f=c(".%L"),p=c(":%S"),g=c("%I:%M"),m=c("%I %p"),y=c("%a %d"),x=c("%b %d"),C=c("%B"),b=c("%Y");function _(t){return(l(t)=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:Ba,s:Fa,S:Xo,u:Zo,U:Jo,V:Ko,w:ta,W:ea,x:null,X:null,y:ia,Y:na,Z:aa,"%":Sa},b={a:function(t){return a[t.getUTCDay()]},A:function(t){return o[t.getUTCDay()]},b:function(t){return l[t.getUTCMonth()]},B:function(t){return s[t.getUTCMonth()]},c:null,d:sa,e:sa,f:da,g:Ta,G:Aa,H:la,I:ca,j:ha,L:ua,m:fa,M:pa,p:function(t){return n[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:Ba,s:Fa,S:ga,u:ma,U:ya,V:Ca,w:ba,W:_a,x:null,X:null,y:va,Y:ka,Z:wa,"%":Sa},_={a:function(t,e,i){var r=f.exec(e.slice(i));return r?(t.w=p.get(r[0].toLowerCase()),i+r[0].length):-1},A:function(t,e,i){var r=u.exec(e.slice(i));return r?(t.w=d.get(r[0].toLowerCase()),i+r[0].length):-1},b:function(t,e,i){var r=y.exec(e.slice(i));return r?(t.m=x.get(r[0].toLowerCase()),i+r[0].length):-1},B:function(t,e,i){var r=g.exec(e.slice(i));return r?(t.m=m.get(r[0].toLowerCase()),i+r[0].length):-1},c:function(t,i,r){return k(t,e,i,r)},d:Mo,e:Mo,f:Do,g:So,G:wo,H:No,I:No,j:Eo,L:Io,m:Lo,M:jo,p:function(t,e,i){var r=c.exec(e.slice(i));return r?(t.p=h.get(r[0].toLowerCase()),i+r[0].length):-1},q:Fo,Q:$o,s:zo,S:Oo,u:vo,U:To,V:ko,w:_o,W:Ao,x:function(t,e,r){return k(t,i,e,r)},X:function(t,e,i){return k(t,r,e,i)},y:So,Y:wo,Z:Bo,"%":qo};function v(t,e){return function(i){var r,n,o,a=[],s=-1,l=0,c=t.length;for(i instanceof Date||(i=new Date(+i));++s53)return null;"w"in o||(o.w=1),"Z"in o?(n=(r=lo(co(o.y,0,1))).getUTCDay(),r=n>4||0===n?Yn.ceil(r):Yn(r),r=jn.offset(r,7*(o.V-1)),o.y=r.getUTCFullYear(),o.m=r.getUTCMonth(),o.d=r.getUTCDate()+(o.w+6)%7):(n=(r=so(co(o.y,0,1))).getDay(),r=n>4||0===n?qn.ceil(r):qn(r),r=Nn.offset(r,7*(o.V-1)),o.y=r.getFullYear(),o.m=r.getMonth(),o.d=r.getDate()+(o.w+6)%7)}else("W"in o||"U"in o)&&("w"in o||(o.w="u"in o?o.u%7:"W"in o?1:0),n="Z"in o?lo(co(o.y,0,1)).getUTCDay():so(co(o.y,0,1)).getDay(),o.m=0,o.d="W"in o?(o.w+6)%7+7*o.W-(n+5)%7:o.w+7*o.U-(n+6)%7);return"Z"in o?(o.H+=o.Z/100|0,o.M+=o.Z%100,lo(o)):so(o)}}function k(t,e,i,r){for(var n,o,a=0,s=e.length,l=i.length;a=l)return-1;if(37===(n=e.charCodeAt(a++))){if(n=e.charAt(a++),!(o=_[n in fo?e.charAt(a++):n])||(r=o(t,i,r))<0)return-1}else if(n!=i.charCodeAt(r++))return-1}return r}return C.x=v(i,C),C.X=v(r,C),C.c=v(e,C),b.x=v(i,b),b.X=v(r,b),b.c=v(e,b),{format:function(t){var e=v(t+="",C);return e.toString=function(){return t},e},parse:function(t){var e=T(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=v(t+="",b);return e.toString=function(){return t},e},utcParse:function(t){var e=T(t+="",!0);return e.toString=function(){return t},e}}}(t),uo=ho.format,ho.parse,ho.utcFormat,ho.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});const ja=function(t){for(var e=t.length/6|0,i=new Array(e),r=0;r=1?Va:t<=-1?-Va:Math.asin(t)}const Za=Math.PI,Ja=2*Za,Qa=1e-6,Ka=Ja-Qa;function ts(t){this._+=t[0];for(let e=1,i=t.length;e=0))throw new Error(`invalid digits: ${t}`);if(e>15)return ts;const i=10**e;return function(t){this._+=t[0];for(let e=1,r=t.length;eQa)if(Math.abs(h*s-l*c)>Qa&&n){let d=i-o,f=r-a,p=s*s+l*l,g=d*d+f*f,m=Math.sqrt(p),y=Math.sqrt(u),x=n*Math.tan((Za-Math.acos((p+u-g)/(2*m*y)))/2),C=x/y,b=x/m;Math.abs(C-1)>Qa&&this._append`L${t+C*c},${e+C*h}`,this._append`A${n},${n},0,0,${+(h*d>c*f)},${this._x1=t+b*s},${this._y1=e+b*l}`}else this._append`L${this._x1=t},${this._y1=e}`;else;}arc(t,e,i,r,n,o){if(t=+t,e=+e,o=!!o,(i=+i)<0)throw new Error(`negative radius: ${i}`);let a=i*Math.cos(r),s=i*Math.sin(r),l=t+a,c=e+s,h=1^o,u=o?r-n:n-r;null===this._x1?this._append`M${l},${c}`:(Math.abs(this._x1-l)>Qa||Math.abs(this._y1-c)>Qa)&&this._append`L${l},${c}`,i&&(u<0&&(u=u%Ja+Ja),u>Ka?this._append`A${i},${i},0,1,${h},${t-a},${e-s}A${i},${i},0,1,${h},${this._x1=l},${this._y1=c}`:u>Qa&&this._append`A${i},${i},0,${+(u>=Za)},${h},${this._x1=t+i*Math.cos(n)},${this._y1=e+i*Math.sin(n)}`)}rect(t,e,i,r){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}h${i=+i}v${+r}h${-i}Z`}toString(){return this._}}function is(t){let e=3;return t.digits=function(i){if(!arguments.length)return e;if(null==i)e=null;else{const t=Math.floor(i);if(!(t>=0))throw new RangeError(`invalid digits: ${i}`);e=t}return t},()=>new es(e)}function rs(t){return t.innerRadius}function ns(t){return t.outerRadius}function os(t){return t.startAngle}function as(t){return t.endAngle}function ss(t){return t&&t.padAngle}function ls(t,e,i,r,n,o,a){var s=t-i,l=e-r,c=(a?o:-o)/Ha(s*s+l*l),h=c*l,u=-c*s,d=t+h,f=e+u,p=i+h,g=r+u,m=(d+p)/2,y=(f+g)/2,x=p-d,C=g-f,b=x*x+C*C,_=n-o,v=d*g-p*f,T=(C<0?-1:1)*Ha(Pa(0,_*_*b-v*v)),k=(v*C-x*T)/b,A=(-v*x-C*T)/b,w=(v*C+x*T)/b,S=(-v*x+C*T)/b,B=k-m,F=A-y,L=w-m,M=S-y;return B*B+F*F>L*L+M*M&&(k=w,A=S),{cx:k,cy:A,x01:-h,y01:-u,x11:k*(n/_-1),y11:A*(n/_-1)}}function cs(){var t=rs,e=ns,i=Da(0),r=null,n=os,o=as,a=ss,s=null,l=is(c);function c(){var c,h,u,d=+t.apply(this,arguments),f=+e.apply(this,arguments),p=n.apply(this,arguments)-Va,g=o.apply(this,arguments)-Va,m=qa(g-p),y=g>p;if(s||(s=c=l()),fWa)if(m>Ga-Wa)s.moveTo(f*za(p),f*Ua(p)),s.arc(0,0,f,p,g,!y),d>Wa&&(s.moveTo(d*za(g),d*Ua(g)),s.arc(0,0,d,g,p,y));else{var x,C,b=p,_=g,v=p,T=g,k=m,A=m,w=a.apply(this,arguments)/2,S=w>Wa&&(r?+r.apply(this,arguments):Ha(d*d+f*f)),B=Ra(qa(f-d)/2,+i.apply(this,arguments)),F=B,L=B;if(S>Wa){var M=Xa(S/d*Ua(w)),E=Xa(S/f*Ua(w));(k-=2*M)>Wa?(v+=M*=y?1:-1,T-=M):(k=0,v=T=(p+g)/2),(A-=2*E)>Wa?(b+=E*=y?1:-1,_-=E):(A=0,b=_=(p+g)/2)}var N=f*za(b),j=f*Ua(b),O=d*za(T),I=d*Ua(T);if(B>Wa){var D,q=f*za(_),$=f*Ua(_),z=d*za(v),P=d*Ua(v);if(m1?0:u<-1?Ya:Math.acos(u))/2),V=Ha(D[0]*D[0]+D[1]*D[1]);F=Ra(B,(d-V)/(Y-1)),L=Ra(B,(f-V)/(Y+1))}else F=L=0}A>Wa?L>Wa?(x=ls(z,P,N,j,f,L,y),C=ls(q,$,O,I,f,L,y),s.moveTo(x.cx+x.x01,x.cy+x.y01),LWa&&k>Wa?F>Wa?(x=ls(O,I,q,$,d,-F,y),C=ls(N,j,z,P,d,-F,y),s.lineTo(x.cx+x.x01,x.cy+x.y01),Ft?1:e>=t?0:NaN}function ys(t){return t}function xs(){var t=ys,e=ms,i=null,r=Da(0),n=Da(Ga),o=Da(0);function a(a){var s,l,c,h,u,d=(a=hs(a)).length,f=0,p=new Array(d),g=new Array(d),m=+r.apply(this,arguments),y=Math.min(Ga,Math.max(-Ga,n.apply(this,arguments)-m)),x=Math.min(Math.abs(y)/d,o.apply(this,arguments)),C=x*(y<0?-1:1);for(s=0;s0&&(f+=u);for(null!=e?p.sort((function(t,i){return e(g[t],g[i])})):null!=i&&p.sort((function(t,e){return i(a[t],a[e])})),s=0,c=f?(y-d*C)/f:0;s0?u*c:0)+C,g[l]={data:a[l],index:s,value:u,startAngle:m,endAngle:h,padAngle:x};return g}return a.value=function(e){return arguments.length?(t="function"==typeof e?e:Da(+e),a):t},a.sortValues=function(t){return arguments.length?(e=t,i=null,a):e},a.sort=function(t){return arguments.length?(i=t,e=null,a):i},a.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:Da(+t),a):r},a.endAngle=function(t){return arguments.length?(n="function"==typeof t?t:Da(+t),a):n},a.padAngle=function(t){return arguments.length?(o="function"==typeof t?t:Da(+t),a):o},a}function Cs(){}function bs(t,e,i){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+i)/6)}function _s(t){this._context=t}function vs(t){return new _s(t)}function Ts(t){this._context=t}function ks(t){return new Ts(t)}function As(t){this._context=t}function ws(t){return new As(t)}us.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}},_s.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:bs(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:bs(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},Ts.prototype={areaStart:Cs,areaEnd:Cs,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:bs(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},As.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var i=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(i,r):this._context.moveTo(i,r);break;case 3:this._point=4;default:bs(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};class Ss{constructor(t,e){this._context=t,this._x=e}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line}point(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,e,t,e):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+e)/2,t,this._y0,t,e)}this._x0=t,this._y0=e}}function Bs(t){return new Ss(t,!0)}function Fs(t){return new Ss(t,!1)}function Ls(t,e){this._basis=new _s(t),this._beta=e}Ls.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,i=t.length-1;if(i>0)for(var r,n=t[0],o=e[0],a=t[i]-n,s=e[i]-o,l=-1;++l<=i;)r=l/i,this._basis.point(this._beta*t[l]+(1-this._beta)*(n+r*a),this._beta*e[l]+(1-this._beta)*(o+r*s));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};const Ms=function t(e){function i(t){return 1===e?new _s(t):new Ls(t,e)}return i.beta=function(e){return t(+e)},i}(.85);function Es(t,e,i){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-i),t._x2,t._y2)}function Ns(t,e){this._context=t,this._k=(1-e)/6}Ns.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Es(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:Es(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const js=function t(e){function i(t){return new Ns(t,e)}return i.tension=function(e){return t(+e)},i}(0);function Os(t,e){this._context=t,this._k=(1-e)/6}Os.prototype={areaStart:Cs,areaEnd:Cs,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Es(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Is=function t(e){function i(t){return new Os(t,e)}return i.tension=function(e){return t(+e)},i}(0);function Ds(t,e){this._context=t,this._k=(1-e)/6}Ds.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Es(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const qs=function t(e){function i(t){return new Ds(t,e)}return i.tension=function(e){return t(+e)},i}(0);function $s(t,e,i){var r=t._x1,n=t._y1,o=t._x2,a=t._y2;if(t._l01_a>Wa){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,l=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/l,n=(n*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/l}if(t._l23_a>Wa){var c=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,h=3*t._l23_a*(t._l23_a+t._l12_a);o=(o*c+t._x1*t._l23_2a-e*t._l12_2a)/h,a=(a*c+t._y1*t._l23_2a-i*t._l12_2a)/h}t._context.bezierCurveTo(r,n,o,a,t._x2,t._y2)}function zs(t,e){this._context=t,this._alpha=e}zs.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:$s(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Ps=function t(e){function i(t){return e?new zs(t,e):new Ns(t,0)}return i.alpha=function(e){return t(+e)},i}(.5);function Rs(t,e){this._context=t,this._alpha=e}Rs.prototype={areaStart:Cs,areaEnd:Cs,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:$s(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Us=function t(e){function i(t){return e?new Rs(t,e):new Os(t,0)}return i.alpha=function(e){return t(+e)},i}(.5);function Hs(t,e){this._context=t,this._alpha=e}Hs.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:$s(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Ws=function t(e){function i(t){return e?new Hs(t,e):new Ds(t,0)}return i.alpha=function(e){return t(+e)},i}(.5);function Ys(t){this._context=t}function Vs(t){return new Ys(t)}function Gs(t){return t<0?-1:1}function Xs(t,e,i){var r=t._x1-t._x0,n=e-t._x1,o=(t._y1-t._y0)/(r||n<0&&-0),a=(i-t._y1)/(n||r<0&&-0),s=(o*n+a*r)/(r+n);return(Gs(o)+Gs(a))*Math.min(Math.abs(o),Math.abs(a),.5*Math.abs(s))||0}function Zs(t,e){var i=t._x1-t._x0;return i?(3*(t._y1-t._y0)/i-e)/2:e}function Js(t,e,i){var r=t._x0,n=t._y0,o=t._x1,a=t._y1,s=(o-r)/3;t._context.bezierCurveTo(r+s,n+s*e,o-s,a-s*i,o,a)}function Qs(t){this._context=t}function Ks(t){this._context=new tl(t)}function tl(t){this._context=t}function el(t){return new Qs(t)}function il(t){return new Ks(t)}function rl(t){this._context=t}function nl(t){var e,i,r=t.length-1,n=new Array(r),o=new Array(r),a=new Array(r);for(n[0]=0,o[0]=2,a[0]=t[0]+2*t[1],e=1;e=0;--e)n[e]=(a[e]-n[e+1])/o[e];for(o[r-1]=(t[r]+n[r-1])/2,e=0;e=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var i=this._x*(1-this._t)+t*this._t;this._context.lineTo(i,this._y),this._context.lineTo(i,e)}}this._x=t,this._y=e}},hl.prototype={constructor:hl,scale:function(t){return 1===t?this:new hl(this.k*t,this.x,this.y)},translate:function(t,e){return 0===t&0===e?this:new hl(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};new hl(1,0,0);hl.prototype},93539:(t,e,i)=>{"use strict";i.d(e,{A:()=>a});var r=i(72453),n=i(63122);const o=class{constructor(){this.type=n.Z.ALL}get(){return this.type}set(t){if(this.type&&this.type!==t)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=t}reset(){this.type=n.Z.ALL}is(t){return this.type===t}};const a=new class{constructor(t,e){this.color=e,this.changed=!1,this.data=t,this.type=new o}set(t,e){return this.color=e,this.changed=!1,this.data=t,this.type.type=n.Z.ALL,this}_ensureHSL(){const t=this.data,{h:e,s:i,l:n}=t;void 0===e&&(t.h=r.A.channel.rgb2hsl(t,"h")),void 0===i&&(t.s=r.A.channel.rgb2hsl(t,"s")),void 0===n&&(t.l=r.A.channel.rgb2hsl(t,"l"))}_ensureRGB(){const t=this.data,{r:e,g:i,b:n}=t;void 0===e&&(t.r=r.A.channel.hsl2rgb(t,"r")),void 0===i&&(t.g=r.A.channel.hsl2rgb(t,"g")),void 0===n&&(t.b=r.A.channel.hsl2rgb(t,"b"))}get r(){const t=this.data,e=t.r;return this.type.is(n.Z.HSL)||void 0===e?(this._ensureHSL(),r.A.channel.hsl2rgb(t,"r")):e}get g(){const t=this.data,e=t.g;return this.type.is(n.Z.HSL)||void 0===e?(this._ensureHSL(),r.A.channel.hsl2rgb(t,"g")):e}get b(){const t=this.data,e=t.b;return this.type.is(n.Z.HSL)||void 0===e?(this._ensureHSL(),r.A.channel.hsl2rgb(t,"b")):e}get h(){const t=this.data,e=t.h;return this.type.is(n.Z.RGB)||void 0===e?(this._ensureRGB(),r.A.channel.rgb2hsl(t,"h")):e}get s(){const t=this.data,e=t.s;return this.type.is(n.Z.RGB)||void 0===e?(this._ensureRGB(),r.A.channel.rgb2hsl(t,"s")):e}get l(){const t=this.data,e=t.l;return this.type.is(n.Z.RGB)||void 0===e?(this._ensureRGB(),r.A.channel.rgb2hsl(t,"l")):e}get a(){return this.data.a}set r(t){this.type.set(n.Z.RGB),this.changed=!0,this.data.r=t}set g(t){this.type.set(n.Z.RGB),this.changed=!0,this.data.g=t}set b(t){this.type.set(n.Z.RGB),this.changed=!0,this.data.b=t}set h(t){this.type.set(n.Z.HSL),this.changed=!0,this.data.h=t}set s(t){this.type.set(n.Z.HSL),this.changed=!0,this.data.s=t}set l(t){this.type.set(n.Z.HSL),this.changed=!0,this.data.l=t}set a(t){this.changed=!0,this.data.a=t}}({r:0,g:0,b:0,a:0},"transparent")},74886:(t,e,i)=>{"use strict";i.d(e,{A:()=>g});var r=i(93539),n=i(63122);const o={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:t=>{if(35!==t.charCodeAt(0))return;const e=t.match(o.re);if(!e)return;const i=e[1],n=parseInt(i,16),a=i.length,s=a%4==0,l=a>4,c=l?1:17,h=l?8:4,u=s?0:-1,d=l?255:15;return r.A.set({r:(n>>h*(u+3)&d)*c,g:(n>>h*(u+2)&d)*c,b:(n>>h*(u+1)&d)*c,a:s?(n&d)*c/255:1},t)},stringify:t=>{const{r:e,g:i,b:r,a:o}=t;return o<1?`#${n.Y[Math.round(e)]}${n.Y[Math.round(i)]}${n.Y[Math.round(r)]}${n.Y[Math.round(255*o)]}`:`#${n.Y[Math.round(e)]}${n.Y[Math.round(i)]}${n.Y[Math.round(r)]}`}},a=o;var s=i(72453);const l={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:t=>{const e=t.match(l.hueRe);if(e){const[,t,i]=e;switch(i){case"grad":return s.A.channel.clamp.h(.9*parseFloat(t));case"rad":return s.A.channel.clamp.h(180*parseFloat(t)/Math.PI);case"turn":return s.A.channel.clamp.h(360*parseFloat(t))}}return s.A.channel.clamp.h(parseFloat(t))},parse:t=>{const e=t.charCodeAt(0);if(104!==e&&72!==e)return;const i=t.match(l.re);if(!i)return;const[,n,o,a,c,h]=i;return r.A.set({h:l._hue2deg(n),s:s.A.channel.clamp.s(parseFloat(o)),l:s.A.channel.clamp.l(parseFloat(a)),a:c?s.A.channel.clamp.a(h?parseFloat(c)/100:parseFloat(c)):1},t)},stringify:t=>{const{h:e,s:i,l:r,a:n}=t;return n<1?`hsla(${s.A.lang.round(e)}, ${s.A.lang.round(i)}%, ${s.A.lang.round(r)}%, ${n})`:`hsl(${s.A.lang.round(e)}, ${s.A.lang.round(i)}%, ${s.A.lang.round(r)}%)`}},c=l,h={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:t=>{t=t.toLowerCase();const e=h.colors[t];if(e)return a.parse(e)},stringify:t=>{const e=a.stringify(t);for(const i in h.colors)if(h.colors[i]===e)return i}},u=h,d={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:t=>{const e=t.charCodeAt(0);if(114!==e&&82!==e)return;const i=t.match(d.re);if(!i)return;const[,n,o,a,l,c,h,u,f]=i;return r.A.set({r:s.A.channel.clamp.r(o?2.55*parseFloat(n):parseFloat(n)),g:s.A.channel.clamp.g(l?2.55*parseFloat(a):parseFloat(a)),b:s.A.channel.clamp.b(h?2.55*parseFloat(c):parseFloat(c)),a:u?s.A.channel.clamp.a(f?parseFloat(u)/100:parseFloat(u)):1},t)},stringify:t=>{const{r:e,g:i,b:r,a:n}=t;return n<1?`rgba(${s.A.lang.round(e)}, ${s.A.lang.round(i)}, ${s.A.lang.round(r)}, ${s.A.lang.round(n)})`:`rgb(${s.A.lang.round(e)}, ${s.A.lang.round(i)}, ${s.A.lang.round(r)})`}},f=d,p={format:{keyword:h,hex:a,rgb:d,rgba:d,hsl:l,hsla:l},parse:t=>{if("string"!=typeof t)return t;const e=a.parse(t)||f.parse(t)||c.parse(t)||u.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},stringify:t=>!t.changed&&t.color?t.color:t.type.is(n.Z.HSL)||void 0===t.data.r?c.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?f.stringify(t):a.stringify(t)},g=p},63122:(t,e,i)=>{"use strict";i.d(e,{Y:()=>n,Z:()=>o});var r=i(72453);const n={};for(let a=0;a<=255;a++)n[a]=r.A.unit.dec2hex(a);const o={ALL:0,RGB:1,HSL:2}},95635:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});var r=i(72453),n=i(74886);const o=(t,e,i)=>{const o=n.A.parse(t),a=o[e],s=r.A.channel.clamp[e](a+i);return a!==s&&(o[e]=s),n.A.stringify(o)}},8232:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});var r=i(72453),n=i(74886);const o=(t,e)=>{const i=n.A.parse(t);for(const n in e)i[n]=r.A.channel.clamp[n](e[n]);return n.A.stringify(i)}},75263:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});var r=i(95635);const n=(t,e)=>(0,r.A)(t,"l",-e)},3219:(t,e,i)=>{"use strict";i.d(e,{A:()=>s});var r=i(72453),n=i(74886);const o=t=>{const{r:e,g:i,b:o}=n.A.parse(t),a=.2126*r.A.channel.toLinear(e)+.7152*r.A.channel.toLinear(i)+.0722*r.A.channel.toLinear(o);return r.A.lang.round(a)},a=t=>o(t)>=.5,s=t=>!a(t)},78041:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});var r=i(95635);const n=(t,e)=>(0,r.A)(t,"l",e)},25582:(t,e,i)=>{"use strict";i.d(e,{A:()=>s});var r=i(72453),n=i(93539),o=i(74886),a=i(8232);const s=(t,e,i=0,s=1)=>{if("number"!=typeof t)return(0,a.A)(t,{a:e});const l=n.A.set({r:r.A.channel.clamp.r(t),g:r.A.channel.clamp.g(e),b:r.A.channel.clamp.b(i),a:r.A.channel.clamp.a(s)});return o.A.stringify(l)}},72453:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});const r={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:t=>t>=255?255:t<0?0:t,g:t=>t>=255?255:t<0?0:t,b:t=>t>=255?255:t<0?0:t,h:t=>t%360,s:t=>t>=100?100:t<0?0:t,l:t=>t>=100?100:t<0?0:t,a:t=>t>=1?1:t<0?0:t},toLinear:t=>{const e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},hue2rgb:(t,e,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t),hsl2rgb:({h:t,s:e,l:i},n)=>{if(!e)return 2.55*i;t/=360,e/=100;const o=(i/=100)<.5?i*(1+e):i+e-i*e,a=2*i-o;switch(n){case"r":return 255*r.hue2rgb(a,o,t+1/3);case"g":return 255*r.hue2rgb(a,o,t);case"b":return 255*r.hue2rgb(a,o,t-1/3)}},rgb2hsl:({r:t,g:e,b:i},r)=>{t/=255,e/=255,i/=255;const n=Math.max(t,e,i),o=Math.min(t,e,i),a=(n+o)/2;if("l"===r)return 100*a;if(n===o)return 0;const s=n-o;if("s"===r)return 100*(a>.5?s/(2-n-o):s/(n+o));switch(n){case t:return 60*((e-i)/s+(ee>i?Math.min(e,Math.max(i,t)):Math.min(i,Math.max(e,t)),round:t=>Math.round(1e10*t)/1e10},unit:{dec2hex:t=>{const e=Math.round(t).toString(16);return e.length>1?e:`0${e}`}}}},80127:(t,e,i)=>{"use strict";i.d(e,{A:()=>d});const r=function(){this.__data__=[],this.size=0};var n=i(66984);const o=function(t,e){for(var i=t.length;i--;)if((0,n.A)(t[i][0],e))return i;return-1};var a=Array.prototype.splice;const s=function(t){var e=this.__data__,i=o(e,t);return!(i<0)&&(i==e.length-1?e.pop():a.call(e,i,1),--this.size,!0)};const l=function(t){var e=this.__data__,i=o(e,t);return i<0?void 0:e[i][1]};const c=function(t){return o(this.__data__,t)>-1};const h=function(t,e){var i=this.__data__,r=o(i,t);return r<0?(++this.size,i.push([t,e])):i[r][1]=e,this};function u(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e{"use strict";i.d(e,{A:()=>o});var r=i(18744),n=i(41917);const o=(0,r.A)(n.A,"Map")},29471:(t,e,i)=>{"use strict";i.d(e,{A:()=>T});const r=(0,i(18744).A)(Object,"create");const n=function(){this.__data__=r?r(null):{},this.size=0};const o=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e};var a=Object.prototype.hasOwnProperty;const s=function(t){var e=this.__data__;if(r){var i=e[t];return"__lodash_hash_undefined__"===i?void 0:i}return a.call(e,t)?e[t]:void 0};var l=Object.prototype.hasOwnProperty;const c=function(t){var e=this.__data__;return r?void 0!==e[t]:l.call(e,t)};const h=function(t,e){var i=this.__data__;return this.size+=this.has(t)?0:1,i[t]=r&&void 0===e?"__lodash_hash_undefined__":e,this};function u(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e{"use strict";i.d(e,{A:()=>o});var r=i(18744),n=i(41917);const o=(0,r.A)(n.A,"Set")},11754:(t,e,i)=>{"use strict";i.d(e,{A:()=>d});var r=i(80127);const n=function(){this.__data__=new r.A,this.size=0};const o=function(t){var e=this.__data__,i=e.delete(t);return this.size=e.size,i};const a=function(t){return this.__data__.get(t)};const s=function(t){return this.__data__.has(t)};var l=i(68335),c=i(29471);const h=function(t,e){var i=this.__data__;if(i instanceof r.A){var n=i.__data__;if(!l.A||n.length<199)return n.push([t,e]),this.size=++i.size,this;i=this.__data__=new c.A(n)}return i.set(t,e),this.size=i.size,this};function u(t){var e=this.__data__=new r.A(t);this.size=e.size}u.prototype.clear=n,u.prototype.delete=o,u.prototype.get=a,u.prototype.has=s,u.prototype.set=h;const d=u},241:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=i(41917).A.Symbol},43988:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=i(41917).A.Uint8Array},83607:(t,e,i)=>{"use strict";i.d(e,{A:()=>h});const r=function(t,e){for(var i=-1,r=Array(t);++i{"use strict";i.d(e,{A:()=>a});var r=i(52528),n=i(66984),o=Object.prototype.hasOwnProperty;const a=function(t,e,i){var a=t[e];o.call(t,e)&&(0,n.A)(a,i)&&(void 0!==i||e in t)||(0,r.A)(t,e,i)}},52528:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});var r=i(84171);const n=function(t,e,i){"__proto__"==e&&r.A?(0,r.A)(t,e,{configurable:!0,enumerable:!0,value:i,writable:!0}):t[e]=i}},4574:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t){return function(e,i,r){for(var n=-1,o=Object(e),a=r(e),s=a.length;s--;){var l=a[t?s:++n];if(!1===i(o[l],l,o))break}return e}}()},88496:(t,e,i)=>{"use strict";i.d(e,{A:()=>d});var r=i(241),n=Object.prototype,o=n.hasOwnProperty,a=n.toString,s=r.A?r.A.toStringTag:void 0;const l=function(t){var e=o.call(t,s),i=t[s];try{t[s]=void 0;var r=!0}catch(l){}var n=a.call(t);return r&&(e?t[s]=i:delete t[s]),n};var c=Object.prototype.toString;const h=function(t){return c.call(t)};var u=r.A?r.A.toStringTag:void 0;const d=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":u&&u in Object(t)?l(t):h(t)}},69471:(t,e,i)=>{"use strict";i.d(e,{A:()=>a});var r=i(97271);const n=(0,i(40367).A)(Object.keys,Object);var o=Object.prototype.hasOwnProperty;const a=function(t){if(!(0,r.A)(t))return n(t);var e=[];for(var i in Object(t))o.call(t,i)&&"constructor"!=i&&e.push(i);return e}},24326:(t,e,i)=>{"use strict";i.d(e,{A:()=>a});var r=i(29008),n=i(76875),o=i(67525);const a=function(t,e){return(0,o.A)((0,n.A)(t,e,r.A),t+"")}},52789:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t){return function(e){return t(e)}}},90565:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});var r=i(43988);const n=function(t){var e=new t.constructor(t.byteLength);return new r.A(e).set(new r.A(t)),e}},80154:(t,e,i)=>{"use strict";i.d(e,{A:()=>l});var r=i(41917),n="object"==typeof exports&&exports&&!exports.nodeType&&exports,o=n&&"object"==typeof module&&module&&!module.nodeType&&module,a=o&&o.exports===n?r.A.Buffer:void 0,s=a?a.allocUnsafe:void 0;const l=function(t,e){if(e)return t.slice();var i=t.length,r=s?s(i):new t.constructor(i);return t.copy(r),r}},1801:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});var r=i(90565);const n=function(t,e){var i=e?(0,r.A)(t.buffer):t.buffer;return new t.constructor(i,t.byteOffset,t.length)}},39759:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t,e){var i=-1,r=t.length;for(e||(e=Array(r));++i{"use strict";i.d(e,{A:()=>o});var r=i(52851),n=i(52528);const o=function(t,e,i,o){var a=!i;i||(i={});for(var s=-1,l=e.length;++s{"use strict";i.d(e,{A:()=>n});var r=i(18744);const n=function(){try{var t=(0,r.A)(Object,"defineProperty");return t({},"",{}),t}catch(e){}}()},72136:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r="object"==typeof global&&global&&global.Object===Object&&global},18744:(t,e,i)=>{"use strict";i.d(e,{A:()=>x});var r=i(89610);const n=i(41917).A["__core-js_shared__"];var o,a=(o=/[^.]+$/.exec(n&&n.keys&&n.keys.IE_PROTO||""))?"Symbol(src)_1."+o:"";const s=function(t){return!!a&&a in t};var l=i(23149),c=i(81121),h=/^\[object .+?Constructor\]$/,u=Function.prototype,d=Object.prototype,f=u.toString,p=d.hasOwnProperty,g=RegExp("^"+f.call(p).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");const m=function(t){return!(!(0,l.A)(t)||s(t))&&((0,r.A)(t)?g:h).test((0,c.A)(t))};const y=function(t,e){return null==t?void 0:t[e]};const x=function(t,e){var i=y(t,e);return m(i)?i:void 0}},15647:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=(0,i(40367).A)(Object.getPrototypeOf,Object)},9779:(t,e,i)=>{"use strict";i.d(e,{A:()=>T});var r=i(18744),n=i(41917);const o=(0,r.A)(n.A,"DataView");var a=i(68335);const s=(0,r.A)(n.A,"Promise");var l=i(39857);const c=(0,r.A)(n.A,"WeakMap");var h=i(88496),u=i(81121),d="[object Map]",f="[object Promise]",p="[object Set]",g="[object WeakMap]",m="[object DataView]",y=(0,u.A)(o),x=(0,u.A)(a.A),C=(0,u.A)(s),b=(0,u.A)(l.A),_=(0,u.A)(c),v=h.A;(o&&v(new o(new ArrayBuffer(1)))!=m||a.A&&v(new a.A)!=d||s&&v(s.resolve())!=f||l.A&&v(new l.A)!=p||c&&v(new c)!=g)&&(v=function(t){var e=(0,h.A)(t),i="[object Object]"==e?t.constructor:void 0,r=i?(0,u.A)(i):"";if(r)switch(r){case y:return m;case x:return d;case C:return f;case b:return p;case _:return g}return e});const T=v},18598:(t,e,i)=>{"use strict";i.d(e,{A:()=>l});var r=i(23149),n=Object.create;const o=function(){function t(){}return function(e){if(!(0,r.A)(e))return{};if(n)return n(e);t.prototype=e;var i=new t;return t.prototype=void 0,i}}();var a=i(15647),s=i(97271);const l=function(t){return"function"!=typeof t.constructor||(0,s.A)(t)?{}:o((0,a.A)(t))}},25353:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});var r=/^(?:0|[1-9]\d*)$/;const n=function(t,e){var i=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==i||"symbol"!=i&&r.test(t))&&t>-1&&t%1==0&&t{"use strict";i.d(e,{A:()=>s});var r=i(66984),n=i(38446),o=i(25353),a=i(23149);const s=function(t,e,i){if(!(0,a.A)(i))return!1;var s=typeof e;return!!("number"==s?(0,n.A)(i)&&(0,o.A)(e,i.length):"string"==s&&e in i)&&(0,r.A)(i[e],t)}},97271:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});var r=Object.prototype;const n=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||r)}},64841:(t,e,i)=>{"use strict";i.d(e,{A:()=>s});var r=i(72136),n="object"==typeof exports&&exports&&!exports.nodeType&&exports,o=n&&"object"==typeof module&&module&&!module.nodeType&&module,a=o&&o.exports===n&&r.A.process;const s=function(){try{var t=o&&o.require&&o.require("util").types;return t||a&&a.binding&&a.binding("util")}catch(e){}}()},40367:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t,e){return function(i){return t(e(i))}}},76875:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});const r=function(t,e,i){switch(i.length){case 0:return t.call(e);case 1:return t.call(e,i[0]);case 2:return t.call(e,i[0],i[1]);case 3:return t.call(e,i[0],i[1],i[2])}return t.apply(e,i)};var n=Math.max;const o=function(t,e,i){return e=n(void 0===e?t.length-1:e,0),function(){for(var o=arguments,a=-1,s=n(o.length-e,0),l=Array(s);++a{"use strict";i.d(e,{A:()=>o});var r=i(72136),n="object"==typeof self&&self&&self.Object===Object&&self;const o=r.A||n||Function("return this")()},67525:(t,e,i)=>{"use strict";i.d(e,{A:()=>l});var r=i(39142),n=i(84171),o=i(29008);const a=n.A?function(t,e){return(0,n.A)(t,"toString",{configurable:!0,enumerable:!1,value:(0,r.A)(e),writable:!0})}:o.A;var s=Date.now;const l=function(t){var e=0,i=0;return function(){var r=s(),n=16-(r-i);if(i=r,n>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(a)},81121:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});var r=Function.prototype.toString;const n=function(t){if(null!=t){try{return r.call(t)}catch(e){}try{return t+""}catch(e){}}return""}},39142:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t){return function(){return t}}},66984:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t,e){return t===e||t!=t&&e!=e}},29008:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t){return t}},52274:(t,e,i)=>{"use strict";i.d(e,{A:()=>c});var r=i(88496),n=i(53098);const o=function(t){return(0,n.A)(t)&&"[object Arguments]"==(0,r.A)(t)};var a=Object.prototype,s=a.hasOwnProperty,l=a.propertyIsEnumerable;const c=o(function(){return arguments}())?o:function(t){return(0,n.A)(t)&&s.call(t,"callee")&&!l.call(t,"callee")}},92049:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=Array.isArray},38446:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});var r=i(89610),n=i(5254);const o=function(t){return null!=t&&(0,n.A)(t.length)&&!(0,r.A)(t)}},53533:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});var r=i(38446),n=i(53098);const o=function(t){return(0,n.A)(t)&&(0,r.A)(t)}},99912:(t,e,i)=>{"use strict";i.d(e,{A:()=>l});var r=i(41917);const n=function(){return!1};var o="object"==typeof exports&&exports&&!exports.nodeType&&exports,a=o&&"object"==typeof module&&module&&!module.nodeType&&module,s=a&&a.exports===o?r.A.Buffer:void 0;const l=(s?s.isBuffer:void 0)||n},66401:(t,e,i)=>{"use strict";i.d(e,{A:()=>d});var r=i(69471),n=i(9779),o=i(52274),a=i(92049),s=i(38446),l=i(99912),c=i(97271),h=i(33858),u=Object.prototype.hasOwnProperty;const d=function(t){if(null==t)return!0;if((0,s.A)(t)&&((0,a.A)(t)||"string"==typeof t||"function"==typeof t.splice||(0,l.A)(t)||(0,h.A)(t)||(0,o.A)(t)))return!t.length;var e=(0,n.A)(t);if("[object Map]"==e||"[object Set]"==e)return!t.size;if((0,c.A)(t))return!(0,r.A)(t).length;for(var i in t)if(u.call(t,i))return!1;return!0}},89610:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});var r=i(88496),n=i(23149);const o=function(t){if(!(0,n.A)(t))return!1;var e=(0,r.A)(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},5254:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},23149:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},53098:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t){return null!=t&&"object"==typeof t}},34963:(t,e,i)=>{"use strict";i.d(e,{A:()=>u});var r=i(88496),n=i(15647),o=i(53098),a=Function.prototype,s=Object.prototype,l=a.toString,c=s.hasOwnProperty,h=l.call(Object);const u=function(t){if(!(0,o.A)(t)||"[object Object]"!=(0,r.A)(t))return!1;var e=(0,n.A)(t);if(null===e)return!0;var i=c.call(e,"constructor")&&e.constructor;return"function"==typeof i&&i instanceof i&&l.call(i)==h}},33858:(t,e,i)=>{"use strict";i.d(e,{A:()=>u});var r=i(88496),n=i(5254),o=i(53098),a={};a["[object Float32Array]"]=a["[object Float64Array]"]=a["[object Int8Array]"]=a["[object Int16Array]"]=a["[object Int32Array]"]=a["[object Uint8Array]"]=a["[object Uint8ClampedArray]"]=a["[object Uint16Array]"]=a["[object Uint32Array]"]=!0,a["[object Arguments]"]=a["[object Array]"]=a["[object ArrayBuffer]"]=a["[object Boolean]"]=a["[object DataView]"]=a["[object Date]"]=a["[object Error]"]=a["[object Function]"]=a["[object Map]"]=a["[object Number]"]=a["[object Object]"]=a["[object RegExp]"]=a["[object Set]"]=a["[object String]"]=a["[object WeakMap]"]=!1;const s=function(t){return(0,o.A)(t)&&(0,n.A)(t.length)&&!!a[(0,r.A)(t)]};var l=i(52789),c=i(64841),h=c.A&&c.A.isTypedArray;const u=h?(0,l.A)(h):s},77996:(t,e,i)=>{"use strict";i.d(e,{A:()=>h});var r=i(83607),n=i(23149),o=i(97271);const a=function(t){var e=[];if(null!=t)for(var i in Object(t))e.push(i);return e};var s=Object.prototype.hasOwnProperty;const l=function(t){if(!(0,n.A)(t))return a(t);var e=(0,o.A)(t),i=[];for(var r in t)("constructor"!=r||!e&&s.call(t,r))&&i.push(r);return i};var c=i(38446);const h=function(t){return(0,c.A)(t)?(0,r.A)(t,!0):l(t)}},46632:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});var r=i(29471);function n(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var i=function(){var r=arguments,n=e?e.apply(this,r):r[0],o=i.cache;if(o.has(n))return o.get(n);var a=t.apply(this,r);return i.cache=o.set(n,a)||o,a};return i.cache=new(n.Cache||r.A),i}n.Cache=r.A;const o=n},98879:(t,e,i)=>{"use strict";i.d(e,{A:()=>B});var r=i(11754),n=i(52528),o=i(66984);const a=function(t,e,i){(void 0!==i&&!(0,o.A)(t[e],i)||void 0===i&&!(e in t))&&(0,n.A)(t,e,i)};var s=i(4574),l=i(80154),c=i(1801),h=i(39759),u=i(18598),d=i(52274),f=i(92049),p=i(53533),g=i(99912),m=i(89610),y=i(23149),x=i(34963),C=i(33858);const b=function(t,e){if(("constructor"!==e||"function"!=typeof t[e])&&"__proto__"!=e)return t[e]};var _=i(22031),v=i(77996);const T=function(t){return(0,_.A)(t,(0,v.A)(t))};const k=function(t,e,i,r,n,o,s){var _=b(t,i),v=b(e,i),k=s.get(v);if(k)a(t,i,k);else{var A=o?o(_,v,i+"",t,e,s):void 0,w=void 0===A;if(w){var S=(0,f.A)(v),B=!S&&(0,g.A)(v),F=!S&&!B&&(0,C.A)(v);A=v,S||B||F?(0,f.A)(_)?A=_:(0,p.A)(_)?A=(0,h.A)(_):B?(w=!1,A=(0,l.A)(v,!0)):F?(w=!1,A=(0,c.A)(v,!0)):A=[]:(0,x.A)(v)||(0,d.A)(v)?(A=_,(0,d.A)(_)?A=T(_):(0,y.A)(_)&&!(0,m.A)(_)||(A=(0,u.A)(v))):w=!1}w&&(s.set(v,A),n(A,v,r,o,s),s.delete(v)),a(t,i,A)}};const A=function t(e,i,n,o,l){e!==i&&(0,s.A)(i,(function(s,c){if(l||(l=new r.A),(0,y.A)(s))k(e,i,c,n,t,o,l);else{var h=o?o(b(e,c),s,c+"",e,i,l):void 0;void 0===h&&(h=s),a(e,c,h)}}),v.A)};var w=i(24326),S=i(6832);const B=function(t){return(0,w.A)((function(e,i){var r=-1,n=i.length,o=n>1?i[n-1]:void 0,a=n>2?i[2]:void 0;for(o=t.length>3&&"function"==typeof o?(n--,o):void 0,a&&(0,S.A)(i[0],i[1],a)&&(o=n<3?void 0:o,n=1),e=Object(e);++r{"use strict";i.d(e,{A:()=>Wi,B:()=>Rt,C:()=>ve,D:()=>_e,E:()=>jt,F:()=>je,G:()=>kt,H:()=>At,I:()=>ue,J:()=>ht,K:()=>qi,L:()=>Ni,M:()=>ke,N:()=>co,Z:()=>ee,a:()=>Li,b:()=>Fi,c:()=>Ii,d:()=>pt,e:()=>St,f:()=>te,g:()=>Bi,h:()=>ye,i:()=>xi,j:()=>me,k:()=>ce,l:()=>st,m:()=>yt,n:()=>oe,o:()=>Ci,p:()=>Di,q:()=>Mi,r:()=>wt,s:()=>Si,t:()=>Ei,u:()=>Te,v:()=>wi,w:()=>pe,x:()=>xt,y:()=>de,z:()=>zi});var r=i(60513),n=i(74353),o=i(16750),a=i(26312),s=i(42838),l=i(74886),c=i(8232);const h=(t,e)=>{const i=l.A.parse(t),r={};for(const n in e)e[n]&&(r[n]=i[n]+e[n]);return(0,c.A)(t,r)};var u=i(25582);const d=(t,e,i=50)=>{const{r:r,g:n,b:o,a:a}=l.A.parse(t),{r:s,g:c,b:h,a:d}=l.A.parse(e),f=i/100,p=2*f-1,g=a-d,m=((p*g==-1?p:(p+g)/(1+p*g))+1)/2,y=1-m,x=r*m+s*y,C=n*m+c*y,b=o*m+h*y,_=a*f+d*(1-f);return(0,u.A)(x,C,b,_)},f=(t,e=100)=>{const i=l.A.parse(t);return i.r=255-i.r,i.g=255-i.g,i.b=255-i.b,d(i,t,e)};var p=i(75263),g=i(78041),m=i(3219),y=i(46632),x=i(98879),C="comm",b="rule",_="decl",v=Math.abs,T=String.fromCharCode;Object.assign;function k(t){return t.trim()}function A(t,e,i){return t.replace(e,i)}function w(t,e,i){return t.indexOf(e,i)}function S(t,e){return 0|t.charCodeAt(e)}function B(t,e,i){return t.slice(e,i)}function F(t){return t.length}function L(t,e){return e.push(t),t}function M(t,e){for(var i="",r=0;r0?S(q,--I):0,j--,10===D&&(j=1,N--),D}function P(){return D=I2||W(D)>3?"":" "}function Z(t,e){for(;--e&&P()&&!(D<48||D>102||D>57&&D<65||D>70&&D<97););return H(t,U()+(e<6&&32==R()&&32==P()))}function J(t){for(;P();)switch(D){case t:return I;case 34:case 39:34!==t&&39!==t&&J(D);break;case 40:41===t&&J(t);break;case 92:P()}return I}function Q(t,e){for(;P()&&t+D!==57&&(t+D!==84||47!==R()););return"/*"+H(e,I-1)+"*"+T(47===t?t:P())}function K(t){for(;!W(R());)P();return H(t,I)}function tt(t){return V(et("",null,null,null,[""],t=Y(t),0,[0],t))}function et(t,e,i,r,n,o,a,s,l){for(var c=0,h=0,u=a,d=0,f=0,p=0,g=1,m=1,y=1,x=0,C="",b=n,_=o,k=r,B=C;m;)switch(p=x,x=P()){case 40:if(108!=p&&58==S(B,u-1)){-1!=w(B+=A(G(x),"&","&\f"),"&\f",v(c?s[c-1]:0))&&(y=-1);break}case 34:case 39:case 91:B+=G(x);break;case 9:case 10:case 13:case 32:B+=X(p);break;case 92:B+=Z(U()-1,7);continue;case 47:switch(R()){case 42:case 47:L(rt(Q(P(),U()),e,i,l),l);break;default:B+="/"}break;case 123*g:s[c++]=F(B)*y;case 125*g:case 59:case 0:switch(x){case 0:case 125:m=0;case 59+h:-1==y&&(B=A(B,/\f/g,"")),f>0&&F(B)-u&&L(f>32?nt(B+";",r,i,u-1,l):nt(A(B," ","")+";",r,i,u-2,l),l);break;case 59:B+=";";default:if(L(k=it(B,e,i,c,h,n,s,C,b=[],_=[],u,o),o),123===x)if(0===h)et(B,e,k,k,b,o,u,s,_);else switch(99===d&&110===S(B,3)?100:d){case 100:case 108:case 109:case 115:et(t,k,k,r&&L(it(t,k,k,0,0,n,s,C,n,b=[],u,_),_),n,_,u,s,r?b:_);break;default:et(B,k,k,k,[""],_,0,s,_)}}c=h=f=0,g=y=1,C=B="",u=a;break;case 58:u=1+F(B),f=p;default:if(g<1)if(123==x)--g;else if(125==x&&0==g++&&125==z())continue;switch(B+=T(x),x*g){case 38:y=h>0?1:(B+="\f",-1);break;case 44:s[c++]=(F(B)-1)*y,y=1;break;case 64:45===R()&&(B+=G(P())),d=R(),h=u=F(C=B+=K(U())),x++;break;case 45:45===p&&2==F(B)&&(g=0)}}return o}function it(t,e,i,r,n,o,a,s,l,c,h,u){for(var d=n-1,f=0===n?o:[""],p=function(t){return t.length}(f),g=0,m=0,y=0;g0?f[x]+" "+C:A(C,/&\f/g,f[x])))&&(l[y++]=_);return $(t,e,i,0===n?b:s,l,c,h,u)}function rt(t,e,i,r){return $(t,e,i,C,T(D),B(t,2,-2),0,r)}function nt(t,e,i,r,n){return $(t,e,i,_,B(t,0,r),B(t,r+1,-1),r,n)}var ot=i(66401);const at={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},st={trace:(...t)=>{},debug:(...t)=>{},info:(...t)=>{},warn:(...t)=>{},error:(...t)=>{},fatal:(...t)=>{}},lt=function(t="fatal"){let e=at.fatal;"string"==typeof t?(t=t.toLowerCase())in at&&(e=at[t]):"number"==typeof t&&(e=t),st.trace=()=>{},st.debug=()=>{},st.info=()=>{},st.warn=()=>{},st.error=()=>{},st.fatal=()=>{},e<=at.fatal&&(st.fatal=console.error?console.error.bind(console,ct("FATAL"),"color: orange"):console.log.bind(console,"\x1b[35m",ct("FATAL"))),e<=at.error&&(st.error=console.error?console.error.bind(console,ct("ERROR"),"color: orange"):console.log.bind(console,"\x1b[31m",ct("ERROR"))),e<=at.warn&&(st.warn=console.warn?console.warn.bind(console,ct("WARN"),"color: orange"):console.log.bind(console,"\x1b[33m",ct("WARN"))),e<=at.info&&(st.info=console.info?console.info.bind(console,ct("INFO"),"color: lightblue"):console.log.bind(console,"\x1b[34m",ct("INFO"))),e<=at.debug&&(st.debug=console.debug?console.debug.bind(console,ct("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",ct("DEBUG"))),e<=at.trace&&(st.trace=console.debug?console.debug.bind(console,ct("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",ct("TRACE")))},ct=t=>`%c${n().format("ss.SSS")} : ${t} : `,ht=//gi,ut=(()=>{let t=!1;return()=>{t||(!function(){const t="data-temp-href-target";s.addHook("beforeSanitizeAttributes",(e=>{"A"===e.tagName&&e.hasAttribute("target")&&e.setAttribute(t,e.getAttribute("target")||"")})),s.addHook("afterSanitizeAttributes",(e=>{"A"===e.tagName&&e.hasAttribute(t)&&(e.setAttribute("target",e.getAttribute(t)||""),e.removeAttribute(t),"_blank"===e.getAttribute("target")&&e.setAttribute("rel","noopener"))}))}(),t=!0)}})();const dt=t=>{ut();return s.sanitize(t)},ft=(t,e)=>{var i;if(!1!==(null==(i=e.flowchart)?void 0:i.htmlLabels)){const i=e.securityLevel;"antiscript"===i||"strict"===i?t=dt(t):"loose"!==i&&(t=(t=(t=mt(t)).replace(//g,">")).replace(/=/g,"="),t=gt(t))}return t},pt=(t,e)=>t?t=e.dompurifyConfig?s.sanitize(ft(t,e),e.dompurifyConfig).toString():s.sanitize(ft(t,e),{FORBID_TAGS:["style"]}).toString():t,gt=t=>t.replace(/#br#/g,"
    "),mt=t=>t.replace(ht,"#br#"),yt=t=>!1!==t&&!["false","null","0"].includes(String(t).trim().toLowerCase()),xt=function(t){const e=t.split(/(,)/),i=[];for(let r=0;r0&&r+1Math.max(0,t.split(e).length-1),bt=(t,e)=>{const i=Ct(t,"~"),r=Ct(e,"~");return 1===i&&1===r},_t=t=>{const e=Ct(t,"~");let i=!1;if(e<=1)return t;e%2!=0&&t.startsWith("~")&&(t=t.substring(1),i=!0);const r=[...t];let n=r.indexOf("~"),o=r.lastIndexOf("~");for(;-1!==n&&-1!==o&&n!==o;)r[n]="<",r[o]=">",n=r.indexOf("~"),o=r.lastIndexOf("~");return i&&r.unshift("~"),r.join("")},vt=()=>void 0!==window.MathMLElement,Tt=/\$\$(.*)\$\$/g,kt=t=>{var e;return((null==(e=t.match(Tt))?void 0:e.length)??0)>0},At=async(t,e)=>{t=await wt(t,e);const i=document.createElement("div");i.innerHTML=t,i.id="katex-temp",i.style.visibility="hidden",i.style.position="absolute",i.style.top="0";const r=document.querySelector("body");null==r||r.insertAdjacentElement("beforeend",i);const n={width:i.clientWidth,height:i.clientHeight};return i.remove(),n},wt=async(t,e)=>{if(!kt(t))return t;if(!vt()&&!e.legacyMathML)return t.replace(Tt,"MathML is unsupported in this environment.");const{default:r}=await i.e(2130).then(i.bind(i,22130));return t.split(ht).map((t=>kt(t)?`\n
    \n ${t}\n
    \n `:`
    ${t}
    `)).join("").replace(Tt,((t,e)=>r.renderToString(e,{throwOnError:!0,displayMode:!0,output:vt()?"mathml":"htmlAndMathml"}).replace(/\n/g," ").replace(//g,"")))},St={getRows:t=>{if(!t)return[""];return mt(t).replace(/\\n/g,"#br#").split("#br#")},sanitizeText:pt,sanitizeTextOrArray:(t,e)=>"string"==typeof t?pt(t,e):t.flat().map((t=>pt(t,e))),hasBreaks:t=>ht.test(t),splitBreaks:t=>t.split(ht),lineBreakRegex:ht,removeScript:dt,getUrl:t=>{let e="";return t&&(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,e=e.replaceAll(/\(/g,"\\("),e=e.replaceAll(/\)/g,"\\)")),e},evaluate:yt,getMax:function(...t){const e=t.filter((t=>!isNaN(t)));return Math.max(...e)},getMin:function(...t){const e=t.filter((t=>!isNaN(t)));return Math.min(...e)}},Bt=(t,e)=>h(t,e?{s:-40,l:10}:{s:-40,l:-10}),Ft="#ffffff",Lt="#f2f2f2";let Mt=class{constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){var t,e,i,r,n,o,a,s,l,c,u;if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||h(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||h(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Bt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Bt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Bt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Bt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||f(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||f(this.tertiaryColor),this.lineColor=this.lineColor||f(this.background),this.arrowheadColor=this.arrowheadColor||f(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?(0,p.A)(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||"grey",this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||(0,p.A)(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||f(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||(0,g.A)(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||h(this.primaryColor,{h:30}),this.cScale4=this.cScale4||h(this.primaryColor,{h:60}),this.cScale5=this.cScale5||h(this.primaryColor,{h:90}),this.cScale6=this.cScale6||h(this.primaryColor,{h:120}),this.cScale7=this.cScale7||h(this.primaryColor,{h:150}),this.cScale8=this.cScale8||h(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||h(this.primaryColor,{h:270}),this.cScale10=this.cScale10||h(this.primaryColor,{h:300}),this.cScale11=this.cScale11||h(this.primaryColor,{h:330}),this.darkMode)for(let h=0;h{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};let Et=class{constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=(0,g.A)(this.primaryColor,16),this.tertiaryColor=h(this.primaryColor,{h:-160}),this.primaryBorderColor=f(this.background),this.secondaryBorderColor=Bt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Bt(this.tertiaryColor,this.darkMode),this.primaryTextColor=f(this.primaryColor),this.secondaryTextColor=f(this.secondaryColor),this.tertiaryTextColor=f(this.tertiaryColor),this.lineColor=f(this.background),this.textColor=f(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=(0,g.A)(f("#323D47"),10),this.lineColor="calculated",this.border1="#81B1DB",this.border2=(0,u.A)(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=(0,p.A)("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=(0,p.A)(this.sectionBkgColor,10),this.taskBorderColor=(0,u.A)(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=(0,u.A)(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){var t,e,i,r,n,o,a,s,l,c,u;this.secondBkg=(0,g.A)(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=(0,g.A)(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.mainContrastColor,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=(0,g.A)(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=h(this.primaryColor,{h:64}),this.fillType3=h(this.secondaryColor,{h:64}),this.fillType4=h(this.primaryColor,{h:-64}),this.fillType5=h(this.secondaryColor,{h:-64}),this.fillType6=h(this.primaryColor,{h:128}),this.fillType7=h(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||h(this.primaryColor,{h:30}),this.cScale4=this.cScale4||h(this.primaryColor,{h:60}),this.cScale5=this.cScale5||h(this.primaryColor,{h:90}),this.cScale6=this.cScale6||h(this.primaryColor,{h:120}),this.cScale7=this.cScale7||h(this.primaryColor,{h:150}),this.cScale8=this.cScale8||h(this.primaryColor,{h:210}),this.cScale9=this.cScale9||h(this.primaryColor,{h:270}),this.cScale10=this.cScale10||h(this.primaryColor,{h:300}),this.cScale11=this.cScale11||h(this.primaryColor,{h:330});for(let h=0;h{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};let Nt=class{constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=h(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=h(this.primaryColor,{h:-160}),this.primaryBorderColor=Bt(this.primaryColor,this.darkMode),this.secondaryBorderColor=Bt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Bt(this.tertiaryColor,this.darkMode),this.primaryTextColor=f(this.primaryColor),this.secondaryTextColor=f(this.secondaryColor),this.tertiaryTextColor=f(this.tertiaryColor),this.lineColor=f(this.background),this.textColor=f(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#e8e8e8",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.sectionBkgColor=(0,u.A)(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){var t,e,i,r,n,o,a,s,l,c,u;this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||h(this.primaryColor,{h:30}),this.cScale4=this.cScale4||h(this.primaryColor,{h:60}),this.cScale5=this.cScale5||h(this.primaryColor,{h:90}),this.cScale6=this.cScale6||h(this.primaryColor,{h:120}),this.cScale7=this.cScale7||h(this.primaryColor,{h:150}),this.cScale8=this.cScale8||h(this.primaryColor,{h:210}),this.cScale9=this.cScale9||h(this.primaryColor,{h:270}),this.cScale10=this.cScale10||h(this.primaryColor,{h:300}),this.cScale11=this.cScale11||h(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||(0,p.A)(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||(0,p.A)(this.tertiaryColor,40);for(let h=0;h{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};const jt=t=>{const e=new Nt;return e.calculate(t),e};let Ot=class{constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=(0,g.A)("#cde498",10),this.primaryBorderColor=Bt(this.primaryColor,this.darkMode),this.secondaryBorderColor=Bt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Bt(this.tertiaryColor,this.darkMode),this.primaryTextColor=f(this.primaryColor),this.secondaryTextColor=f(this.secondaryColor),this.tertiaryTextColor=f(this.primaryColor),this.lineColor=f(this.background),this.textColor=f(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var t,e,i,r,n,o,a,s,l,c,u;this.actorBorder=(0,p.A)(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||h(this.primaryColor,{h:30}),this.cScale4=this.cScale4||h(this.primaryColor,{h:60}),this.cScale5=this.cScale5||h(this.primaryColor,{h:90}),this.cScale6=this.cScale6||h(this.primaryColor,{h:120}),this.cScale7=this.cScale7||h(this.primaryColor,{h:150}),this.cScale8=this.cScale8||h(this.primaryColor,{h:210}),this.cScale9=this.cScale9||h(this.primaryColor,{h:270}),this.cScale10=this.cScale10||h(this.primaryColor,{h:300}),this.cScale11=this.cScale11||h(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||(0,p.A)(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||(0,p.A)(this.tertiaryColor,40);for(let h=0;h{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};class It{constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=(0,g.A)(this.contrast,55),this.background="#ffffff",this.tertiaryColor=h(this.primaryColor,{h:-160}),this.primaryBorderColor=Bt(this.primaryColor,this.darkMode),this.secondaryBorderColor=Bt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Bt(this.tertiaryColor,this.darkMode),this.primaryTextColor=f(this.primaryColor),this.secondaryTextColor=f(this.secondaryColor),this.tertiaryTextColor=f(this.tertiaryColor),this.lineColor=f(this.background),this.textColor=f(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var t,e,i,r,n,o,a,s,l,c,u;this.secondBkg=(0,g.A)(this.contrast,55),this.border2=this.contrast,this.actorBorder=(0,g.A)(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.lineColor,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let h=0;h{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}}const Dt={base:{getThemeVariables:t=>{const e=new Mt;return e.calculate(t),e}},dark:{getThemeVariables:t=>{const e=new Et;return e.calculate(t),e}},default:{getThemeVariables:jt},forest:{getThemeVariables:t=>{const e=new Ot;return e.calculate(t),e}},neutral:{getThemeVariables:t=>{const e=new It;return e.calculate(t),e}}},qt={flowchart:{useMaxWidth:!0,titleTopMargin:25,subGraphTitleMargin:{top:0,bottom:0},diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,parallelCommits:!1,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},block:{useMaxWidth:!0,padding:8},theme:"default",maxTextSize:5e4,maxEdges:500,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize","maxEdges"],legacyMathML:!1,deterministicIds:!1,fontSize:16},$t={...qt,deterministicIDSeed:void 0,themeCSS:void 0,themeVariables:Dt.default.getThemeVariables(),sequence:{...qt.sequence,messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},noteFont:function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},actorFont:function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}}},gantt:{...qt.gantt,tickInterval:void 0,useWidth:void 0},c4:{...qt.c4,useWidth:void 0,personFont:function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},external_personFont:function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},systemFont:function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},external_systemFont:function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},system_dbFont:function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},external_system_dbFont:function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},system_queueFont:function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},external_system_queueFont:function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},containerFont:function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},external_containerFont:function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},container_dbFont:function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},external_container_dbFont:function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},container_queueFont:function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},external_container_queueFont:function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},componentFont:function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},external_componentFont:function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},component_dbFont:function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},external_component_dbFont:function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},component_queueFont:function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},external_component_queueFont:function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},boundaryFont:function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}}},pie:{...qt.pie,useWidth:984},xyChart:{...qt.xyChart,useWidth:void 0},requirement:{...qt.requirement,useWidth:void 0},gitGraph:{...qt.gitGraph,useMaxWidth:!1},sankey:{...qt.sankey,useMaxWidth:!1}},zt=(t,e="")=>Object.keys(t).reduce(((i,r)=>Array.isArray(t[r])?i:"object"==typeof t[r]&&null!==t[r]?[...i,e+r,...zt(t[r],"")]:[...i,e+r]),[]),Pt=new Set(zt($t,"")),Rt=$t,Ut=t=>{if(st.debug("sanitizeDirective called with",t),"object"==typeof t&&null!=t)if(Array.isArray(t))t.forEach((t=>Ut(t)));else{for(const e of Object.keys(t)){if(st.debug("Checking key",e),e.startsWith("__")||e.includes("proto")||e.includes("constr")||!Pt.has(e)||null==t[e]){st.debug("sanitize deleting key: ",e),delete t[e];continue}if("object"==typeof t[e]){st.debug("sanitizing object",e),Ut(t[e]);continue}const i=["themeCSS","fontFamily","altFontFamily"];for(const r of i)e.includes(r)&&(st.debug("sanitizing css option",e),t[e]=Ht(t[e]))}if(t.themeVariables)for(const e of Object.keys(t.themeVariables)){const i=t.themeVariables[e];(null==i?void 0:i.match)&&!i.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[e]="")}st.debug("After sanitization",t)}},Ht=t=>{let e=0,i=0;for(const r of t){if(e{for(const{id:e,detector:i,loader:r}of t)Qt(e,i,r)},Qt=(t,e,i)=>{Xt[t]?st.error(`Detector with key ${t} already exists`):Xt[t]={detector:e,loader:i},st.debug(`Detector with key ${t} added${i?" with loader":""}`)},Kt=(t,e,{depth:i=2,clobber:r=!1}={})=>{const n={depth:i,clobber:r};return Array.isArray(e)&&!Array.isArray(t)?(e.forEach((e=>Kt(t,e,n))),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach((e=>{t.includes(e)||t.push(e)})),t):void 0===t||i<=0?null!=t&&"object"==typeof t&&"object"==typeof e?Object.assign(t,e):e:(void 0!==e&&"object"==typeof t&&"object"==typeof e&&Object.keys(e).forEach((n=>{"object"!=typeof e[n]||void 0!==t[n]&&"object"!=typeof t[n]?(r||"object"!=typeof t[n]&&"object"!=typeof e[n])&&(t[n]=e[n]):(void 0===t[n]&&(t[n]=Array.isArray(e[n])?[]:{}),t[n]=Kt(t[n],e[n],{depth:i-1,clobber:r}))})),t)},te=Kt,ee="\u200b",ie={curveBasis:a.qrM,curveBasisClosed:a.Yu4,curveBasisOpen:a.IA3,curveBumpX:a.Wi0,curveBumpY:a.PGM,curveBundle:a.OEq,curveCardinalClosed:a.olC,curveCardinalOpen:a.IrU,curveCardinal:a.y8u,curveCatmullRomClosed:a.Q7f,curveCatmullRomOpen:a.cVp,curveCatmullRom:a.oDi,curveLinear:a.lUB,curveLinearClosed:a.Lx9,curveMonotoneX:a.nVG,curveMonotoneY:a.uxU,curveNatural:a.Xf2,curveStep:a.GZz,curveStepAfter:a.UPb,curveStepBefore:a.dyv},re=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,ne=function(t,e=null){try{const i=new RegExp(`[%]{2}(?![{]${re.source})(?=[}][%]{2}).*\n`,"ig");let r;t=t.trim().replace(i,"").replace(/'/gm,'"'),st.debug(`Detecting diagram directive${null!==e?" type:"+e:""} based on the text:${t}`);const n=[];for(;null!==(r=Yt.exec(t));)if(r.index===Yt.lastIndex&&Yt.lastIndex++,r&&!e||e&&r[1]&&r[1].match(e)||e&&r[2]&&r[2].match(e)){const t=r[1]?r[1]:r[2],e=r[3]?r[3].trim():r[4]?JSON.parse(r[4].trim()):null;n.push({type:t,args:e})}return 0===n.length?{type:t,args:null}:1===n.length?n[0]:n}catch(i){return st.error(`ERROR: ${i.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}};function oe(t,e){if(!t)return e;const i=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return ie[i]??e}function ae(t,e){return t&&e?Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2)):0}const se=(t,e=2)=>{const i=Math.pow(10,e);return Math.round(t*i)/i},le=(t,e)=>{let i,r=e;for(const n of t){if(i){const t=ae(n,i);if(t=1)return{x:n.x,y:n.y};if(e>0&&e<1)return{x:se((1-e)*i.x+e*n.x,5),y:se((1-e)*i.y+e*n.y,5)}}}i=n}throw new Error("Could not find a suitable point for the given distance")};function ce(t){let e="",i="";for(const r of t)void 0!==r&&(r.startsWith("color:")||r.startsWith("text-align:")?i=i+r+";":e=e+r+";");return{style:e,labelStyle:i}}let he=0;const ue=()=>(he++,"id-"+Math.random().toString(36).substr(2,12)+"-"+he);const de=t=>function(t){let e="";const i="0123456789abcdef";for(let r=0;r{if(!t)return t;if(i=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"
    "},i),St.lineBreakRegex.test(t))return t;const r=t.split(" "),n=[];let o="";return r.forEach(((t,a)=>{const s=ye(`${t} `,i),l=ye(o,i);if(s>e){const{hyphenatedStrings:r,remainingWord:a}=ge(t,e,"-",i);n.push(o,...r),o=a}else l+s>=e?(n.push(o),o=t):o=[o,t].filter(Boolean).join(" ");a+1===r.length&&n.push(o)})),n.filter((t=>""!==t)).join(i.joinWith)}),((t,e,i)=>`${t}${e}${i.fontSize}${i.fontWeight}${i.fontFamily}${i.joinWith}`)),ge=(0,y.A)(((t,e,i="-",r)=>{r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},r);const n=[...t],o=[];let a="";return n.forEach(((t,s)=>{const l=`${a}${t}`;if(ye(l,r)>=e){const t=s+1,e=n.length===t,r=`${l}${i}`;o.push(e?l:r),a=""}else a=l})),{hyphenatedStrings:o,remainingWord:a}}),((t,e,i="-",r)=>`${t}${e}${i}${r.fontSize}${r.fontWeight}${r.fontFamily}`));function me(t,e){return xe(t,e).height}function ye(t,e){return xe(t,e).width}const xe=(0,y.A)(((t,e)=>{const{fontSize:i=12,fontFamily:r="Arial",fontWeight:n=400}=e;if(!t)return{width:0,height:0};const[,o]=_e(i),s=["sans-serif",r],l=t.split(St.lineBreakRegex),c=[],h=(0,a.Ltv)("body");if(!h.remove)return{width:0,height:0,lineHeight:0};const u=h.append("svg");for(const a of s){let t=0;const e={width:0,height:0,lineHeight:0};for(const i of l){const r={x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""};r.text=i||ee;const s=fe(u,r).style("font-size",o).style("font-weight",n).style("font-family",a),l=(s._groups||s)[0][0].getBBox();if(0===l.width&&0===l.height)throw new Error("svg element not in render tree");e.width=Math.round(Math.max(e.width,l.width)),t=Math.round(l.height),e.height+=t,e.lineHeight=Math.round(Math.max(e.lineHeight,t))}c.push(e)}u.remove();return c[isNaN(c[1].height)||isNaN(c[1].width)||isNaN(c[1].lineHeight)||c[0].height>c[1].height&&c[0].width>c[1].width&&c[0].lineHeight>c[1].lineHeight?0:1]}),((t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`));let Ce;function be(t){return"str"in t}const _e=t=>{if("number"==typeof t)return[t,t+"px"];const e=parseInt(t??"",10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]};function ve(t,e){return(0,x.A)({},t,e)}const Te={assignWithDepth:te,wrapLabel:pe,calculateTextHeight:me,calculateTextWidth:ye,calculateTextDimensions:xe,cleanAndMerge:ve,detectInit:function(t,e){const i=ne(t,/(?:init\b)|(?:initialize\b)/);let r={};if(Array.isArray(i)){const t=i.map((t=>t.args));Ut(t),r=te(r,[...t])}else r=i.args;if(!r)return;let n=Zt(t,e);const o="config";return void 0!==r[o]&&("flowchart-v2"===n&&(n="flowchart"),r[n]=r[o],delete r[o]),r},detectDirective:ne,isSubstringInArray:function(t,e){for(const[i,r]of e.entries())if(r.match(t))return i;return-1},interpolateToCurve:oe,calcLabelPosition:function(t){return 1===t.length?t[0]:function(t){let e,i=0;return t.forEach((t=>{i+=ae(t,e),e=t})),le(t,i/2)}(t)},calcCardinalityPosition:(t,e,i)=>{st.info(`our points ${JSON.stringify(e)}`),e[0]!==i&&(e=e.reverse());const r=le(e,25),n=t?10:5,o=Math.atan2(e[0].y-r.y,e[0].x-r.x),a={x:0,y:0};return a.x=Math.sin(o)*n+(e[0].x+r.x)/2,a.y=-Math.cos(o)*n+(e[0].y+r.y)/2,a},calcTerminalLabelPosition:function(t,e,i){const r=structuredClone(i);st.info("our points",r),"start_left"!==e&&"start_right"!==e&&r.reverse();const n=le(r,25+t),o=10+.5*t,a=Math.atan2(r[0].y-n.y,r[0].x-n.x),s={x:0,y:0};return"start_left"===e?(s.x=Math.sin(a+Math.PI)*o+(r[0].x+n.x)/2,s.y=-Math.cos(a+Math.PI)*o+(r[0].y+n.y)/2):"end_right"===e?(s.x=Math.sin(a-Math.PI)*o+(r[0].x+n.x)/2-5,s.y=-Math.cos(a-Math.PI)*o+(r[0].y+n.y)/2-5):"end_left"===e?(s.x=Math.sin(a)*o+(r[0].x+n.x)/2-5,s.y=-Math.cos(a)*o+(r[0].y+n.y)/2-5):(s.x=Math.sin(a)*o+(r[0].x+n.x)/2,s.y=-Math.cos(a)*o+(r[0].y+n.y)/2),s},formatUrl:function(t,e){const i=t.trim();if(i)return"loose"!==e.securityLevel?(0,o.Jf)(i):i},getStylesFromArray:ce,generateId:ue,random:de,runFunc:(t,...e)=>{const i=t.split("."),r=i.length-1,n=i[r];let o=window;for(let a=0;a{var n;if(!r)return;const o=null==(n=t.node())?void 0:n.getBBox();o&&t.append("text").text(r).attr("x",o.x+o.width/2).attr("y",-i).attr("class",e)},parseFontSize:_e,InitIDGenerator:class{constructor(t=!1,e){this.count=0,this.count=e?e.length:0,this.next=t?()=>this.count++:()=>Date.now()}}},ke=function(t){return t.replace(/\ufb02\xb0\xb0/g,"&#").replace(/\ufb02\xb0/g,"&").replace(/\xb6\xdf/g,";")},Ae="10.9.1",we=Object.freeze(Rt);let Se,Be=te({},we),Fe=[],Le=te({},we);const Me=(t,e)=>{let i=te({},t),r={};for(const n of e)Oe(n),r=te(r,n);if(i=te(i,r),r.theme&&r.theme in Dt){const t=te({},Se),e=te(t.themeVariables||{},r.themeVariables);i.theme&&i.theme in Dt&&(i.themeVariables=Dt[i.theme].getThemeVariables(e))}return Le=i,ze(Le),Le},Ee=()=>te({},Be),Ne=t=>(ze(t),te(Le,t),je()),je=()=>te({},Le),Oe=t=>{t&&(["secure",...Be.secure??[]].forEach((e=>{Object.hasOwn(t,e)&&(st.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])})),Object.keys(t).forEach((e=>{e.startsWith("__")&&delete t[e]})),Object.keys(t).forEach((e=>{"string"==typeof t[e]&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],"object"==typeof t[e]&&Oe(t[e])})))},Ie=t=>{Ut(t),!t.fontFamily||t.themeVariables&&t.themeVariables.fontFamily||(t.themeVariables={fontFamily:t.fontFamily}),Fe.push(t),Me(Be,Fe)},De=(t=Be)=>{Fe=[],Me(t,Fe)},qe={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},$e={},ze=t=>{var e;t&&((t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&($e[e="LAZY_LOAD_DEPRECATED"]||(st.warn(qe[e]),$e[e]=!0)))},Pe={id:"c4",detector:t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),loader:async()=>{const{diagram:t}=await i.e(1946).then(i.bind(i,31946));return{id:"c4",diagram:t}}},Re="flowchart",Ue={id:Re,detector:(t,e)=>{var i,r;return"dagre-wrapper"!==(null==(i=null==e?void 0:e.flowchart)?void 0:i.defaultRenderer)&&"elk"!==(null==(r=null==e?void 0:e.flowchart)?void 0:r.defaultRenderer)&&/^\s*graph/.test(t)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(8337),i.e(1176),i.e(8055),i.e(2983),i.e(2548),i.e(8810)]).then(i.bind(i,88810));return{id:Re,diagram:t}}},He="flowchart-v2",We={id:He,detector:(t,e)=>{var i,r,n;return"dagre-d3"!==(null==(i=null==e?void 0:e.flowchart)?void 0:i.defaultRenderer)&&"elk"!==(null==(r=null==e?void 0:e.flowchart)?void 0:r.defaultRenderer)&&(!(!/^\s*graph/.test(t)||"dagre-wrapper"!==(null==(n=null==e?void 0:e.flowchart)?void 0:n.defaultRenderer))||/^\s*flowchart/.test(t))},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(8337),i.e(1176),i.e(8055),i.e(2983),i.e(2548),i.e(2453)]).then(i.bind(i,22453));return{id:He,diagram:t}}},Ye={id:"er",detector:t=>/^\s*erDiagram/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(1176),i.e(1398)]).then(i.bind(i,31398));return{id:"er",diagram:t}}},Ve="gitGraph",Ge={id:Ve,detector:t=>/^\s*gitGraph/.test(t),loader:async()=>{const{diagram:t}=await i.e(4943).then(i.bind(i,74943));return{id:Ve,diagram:t}}},Xe="gantt",Ze={id:Xe,detector:t=>/^\s*gantt/.test(t),loader:async()=>{const{diagram:t}=await i.e(8869).then(i.bind(i,8869));return{id:Xe,diagram:t}}},Je="info",Qe={id:Je,detector:t=>/^\s*info/.test(t),loader:async()=>{const{diagram:t}=await i.e(2843).then(i.bind(i,22843));return{id:Je,diagram:t}}},Ke={id:"pie",detector:t=>/^\s*pie/.test(t),loader:async()=>{const{diagram:t}=await i.e(6803).then(i.bind(i,76803));return{id:"pie",diagram:t}}},ti="quadrantChart",ei={id:ti,detector:t=>/^\s*quadrantChart/.test(t),loader:async()=>{const{diagram:t}=await i.e(8478).then(i.bind(i,8478));return{id:ti,diagram:t}}},ii="xychart",ri={id:ii,detector:t=>/^\s*xychart-beta/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(8337),i.e(2925)]).then(i.bind(i,32925));return{id:ii,diagram:t}}},ni="requirement",oi={id:ni,detector:t=>/^\s*requirement(Diagram)?/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(1176),i.e(3706)]).then(i.bind(i,43706));return{id:ni,diagram:t}}},ai="sequence",si={id:ai,detector:t=>/^\s*sequenceDiagram/.test(t),loader:async()=>{const{diagram:t}=await i.e(9689).then(i.bind(i,79689));return{id:ai,diagram:t}}},li="class",ci={id:li,detector:(t,e)=>{var i;return"dagre-wrapper"!==(null==(i=null==e?void 0:e.class)?void 0:i.defaultRenderer)&&/^\s*classDiagram/.test(t)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(1176),i.e(3626),i.e(7426)]).then(i.bind(i,87426));return{id:li,diagram:t}}},hi="classDiagram",ui={id:hi,detector:(t,e)=>{var i;return!(!/^\s*classDiagram/.test(t)||"dagre-wrapper"!==(null==(i=null==e?void 0:e.class)?void 0:i.defaultRenderer))||/^\s*classDiagram-v2/.test(t)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(8337),i.e(1176),i.e(8055),i.e(2983),i.e(3626),i.e(8635)]).then(i.bind(i,18635));return{id:hi,diagram:t}}},di="state",fi={id:di,detector:(t,e)=>{var i;return"dagre-wrapper"!==(null==(i=null==e?void 0:e.state)?void 0:i.defaultRenderer)&&/^\s*stateDiagram/.test(t)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(1176),i.e(1245),i.e(1331)]).then(i.bind(i,31331));return{id:di,diagram:t}}},pi="stateDiagram",gi={id:pi,detector:(t,e)=>{var i;return!!/^\s*stateDiagram-v2/.test(t)||!(!/^\s*stateDiagram/.test(t)||"dagre-wrapper"!==(null==(i=null==e?void 0:e.state)?void 0:i.defaultRenderer))},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(8337),i.e(1176),i.e(8055),i.e(2983),i.e(1245),i.e(3068)]).then(i.bind(i,3068));return{id:pi,diagram:t}}},mi="journey",yi={id:mi,detector:t=>/^\s*journey/.test(t),loader:async()=>{const{diagram:t}=await i.e(6420).then(i.bind(i,26420));return{id:mi,diagram:t}}},xi=function(t,e,i,r){const n=function(t,e,i){let r=new Map;return i?(r.set("width","100%"),r.set("style",`max-width: ${e}px;`)):(r.set("height",t),r.set("width",e)),r}(e,i,r);!function(t,e){for(let i of e)t.attr(i[0],i[1])}(t,n)},Ci=function(t,e,i,r){const n=e.node().getBBox(),o=n.width,a=n.height;st.info(`SVG bounds: ${o}x${a}`,n);let s=0,l=0;st.info(`Graph bounds: ${s}x${l}`,t),s=o+2*i,l=a+2*i,st.info(`Calculated bounds: ${s}x${l}`),xi(e,l,s,r);const c=`${n.x-i} ${n.y-i} ${n.width+2*i} ${n.height+2*i}`;e.attr("viewBox",c)},bi={},_i=(t,e,i)=>{let r="";return t in bi&&bi[t]?r=bi[t](i):st.warn(`No theme found for ${t}`),` & {\n font-family: ${i.fontFamily};\n font-size: ${i.fontSize};\n fill: ${i.textColor}\n }\n\n /* Classes common for multiple diagrams */\n\n & .error-icon {\n fill: ${i.errorBkgColor};\n }\n & .error-text {\n fill: ${i.errorTextColor};\n stroke: ${i.errorTextColor};\n }\n\n & .edge-thickness-normal {\n stroke-width: 2px;\n }\n & .edge-thickness-thick {\n stroke-width: 3.5px\n }\n & .edge-pattern-solid {\n stroke-dasharray: 0;\n }\n\n & .edge-pattern-dashed{\n stroke-dasharray: 3;\n }\n .edge-pattern-dotted {\n stroke-dasharray: 2;\n }\n\n & .marker {\n fill: ${i.lineColor};\n stroke: ${i.lineColor};\n }\n & .marker.cross {\n stroke: ${i.lineColor};\n }\n\n & svg {\n font-family: ${i.fontFamily};\n font-size: ${i.fontSize};\n }\n\n ${r}\n\n ${e}\n`};let vi="",Ti="",ki="";const Ai=t=>pt(t,je()),wi=()=>{vi="",ki="",Ti=""},Si=t=>{vi=Ai(t).replace(/^\s+/g,"")},Bi=()=>vi,Fi=t=>{ki=Ai(t).replace(/\n\s+/g,"\n")},Li=()=>ki,Mi=t=>{Ti=Ai(t)},Ei=()=>Ti,Ni=Object.freeze(Object.defineProperty({__proto__:null,clear:wi,getAccDescription:Li,getAccTitle:Bi,getDiagramTitle:Ei,setAccDescription:Fi,setAccTitle:Si,setDiagramTitle:Mi},Symbol.toStringTag,{value:"Module"})),ji=st,Oi=lt,Ii=je,Di=Ne,qi=we,$i=t=>pt(t,Ii()),zi=Ci,Pi={},Ri=(t,e,i)=>{var r,n,o;if(Pi[t])throw new Error(`Diagram ${t} already registered.`);Pi[t]=e,i&&Qt(t,i),n=t,void 0!==(o=e.styles)&&(bi[n]=o),null==(r=e.injectUtils)||r.call(e,ji,Oi,Ii,$i,zi,Ni,(()=>{}))},Ui=t=>{if(t in Pi)return Pi[t];throw new Hi(t)};class Hi extends Error{constructor(t){super(`Diagram ${t} not found.`)}}const Wi=t=>{var e;const{securityLevel:i}=Ii();let r=(0,a.Ltv)("body");if("sandbox"===i){const i=(null==(e=(0,a.Ltv)(`#i${t}`).node())?void 0:e.contentDocument)??document;r=(0,a.Ltv)(i.body)}return r.select(`#${t}`)},Yi={draw:(t,e,i)=>{st.debug("rendering svg for syntax error\n");const r=Wi(e),n=r.append("g");r.attr("viewBox","0 0 2412 512"),xi(r,100,512,!0),n.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),n.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),n.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),n.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),n.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),n.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),n.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),n.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${i}`)}},Vi=Yi,Gi={db:{},renderer:Yi,parser:{parser:{yy:{}},parse:()=>{}}},Xi="flowchart-elk",Zi={id:Xi,detector:(t,e)=>{var i;return!!(/^\s*flowchart-elk/.test(t)||/^\s*flowchart|graph/.test(t)&&"elk"===(null==(i=null==e?void 0:e.flowchart)?void 0:i.defaultRenderer))},loader:async()=>{const{diagram:t}=await Promise.all([i.e(8337),i.e(8055),i.e(2548),i.e(4741)]).then(i.bind(i,74741));return{id:Xi,diagram:t}}},Ji="timeline",Qi={id:Ji,detector:t=>/^\s*timeline/.test(t),loader:async()=>{const{diagram:t}=await i.e(2376).then(i.bind(i,42376));return{id:Ji,diagram:t}}},Ki="mindmap",tr={id:Ki,detector:t=>/^\s*mindmap/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(8337),i.e(1303)]).then(i.bind(i,31303));return{id:Ki,diagram:t}}},er="sankey",ir={id:er,detector:t=>/^\s*sankey-beta/.test(t),loader:async()=>{const{diagram:t}=await i.e(6788).then(i.bind(i,16788));return{id:er,diagram:t}}},rr="block",nr={id:rr,detector:t=>/^\s*block-beta/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(8337),i.e(8055),i.e(4162)]).then(i.bind(i,14162));return{id:rr,diagram:t}}};let or=!1;const ar=()=>{or||(or=!0,Ri("error",Gi,(t=>"error"===t.toLowerCase().trim())),Ri("---",{db:{clear:()=>{}},styles:{},renderer:{draw:()=>{}},parser:{parser:{yy:{}},parse:()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")}},init:()=>null},(t=>t.toLowerCase().trimStart().startsWith("---"))),Jt(Pe,ui,ci,Ye,Ze,Qe,Ke,oi,si,Zi,We,Ue,tr,Qi,Ge,gi,fi,yi,ei,ir,ri,nr))};class sr{constructor(t,e={}){this.text=t,this.metadata=e,this.type="graph",this.text=function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,(function(t){return t.substring(0,t.length-1)})),e=e.replace(/classDef.*:\S*#.*;/g,(function(t){return t.substring(0,t.length-1)})),e=e.replace(/#\w+;/g,(function(t){const e=t.substring(1,t.length-1);return/^\+?\d+$/.test(e)?"\ufb02\xb0\xb0"+e+"\xb6\xdf":"\ufb02\xb0"+e+"\xb6\xdf"})),e}(t),this.text+="\n";const i=je();try{this.type=Zt(t,i)}catch(n){this.type="error",this.detectError=n}const r=Ui(this.type);st.debug("Type "+this.type),this.db=r.db,this.renderer=r.renderer,this.parser=r.parser,this.parser.parser.yy=this.db,this.init=r.init,this.parse()}parse(){var t,e,i,r,n;if(this.detectError)throw this.detectError;null==(e=(t=this.db).clear)||e.call(t);const o=je();null==(i=this.init)||i.call(this,o),this.metadata.title&&(null==(n=(r=this.db).setDiagramTitle)||n.call(r,this.metadata.title)),this.parser.parse(this.text)}async render(t,e){await this.renderer.draw(this.text,t,e,this)}getParser(){return this.parser}getType(){return this.type}}const lr=async(t,e={})=>{const i=Zt(t,je());try{Ui(i)}catch(r){const t=Xt[i].loader;if(!t)throw new Gt(`Diagram ${i} not found.`);const{id:e,diagram:n}=await t();Ri(e,n)}return new sr(t,e)};let cr=[];const hr="graphics-document document";const ur=t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart();function dr(t){return null==t}var fr={isNothing:dr,isObject:function(t){return"object"==typeof t&&null!==t},toArray:function(t){return Array.isArray(t)?t:dr(t)?[]:[t]},repeat:function(t,e){var i,r="";for(i=0;is&&(e=r-s+(o=" ... ").length),i-r>s&&(i=r+s-(a=" ...").length),{str:o+t.slice(e,i).replace(/\t/g,"\u2192")+a,pos:r-e+o.length}}function xr(t,e){return fr.repeat(" ",e-t.length)+t}var Cr=function(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),"number"!=typeof e.indent&&(e.indent=1),"number"!=typeof e.linesBefore&&(e.linesBefore=3),"number"!=typeof e.linesAfter&&(e.linesAfter=2);for(var i,r=/\r?\n|\r|\0/g,n=[0],o=[],a=-1;i=r.exec(t.buffer);)o.push(i.index),n.push(i.index+i[0].length),t.position<=i.index&&a<0&&(a=n.length-2);a<0&&(a=n.length-1);var s,l,c="",h=Math.min(t.line+e.linesAfter,o.length).toString().length,u=e.maxLength-(e.indent+h+3);for(s=1;s<=e.linesBefore&&!(a-s<0);s++)l=yr(t.buffer,n[a-s],o[a-s],t.position-(n[a]-n[a-s]),u),c=fr.repeat(" ",e.indent)+xr((t.line-s+1).toString(),h)+" | "+l.str+"\n"+c;for(l=yr(t.buffer,n[a],o[a],t.position,u),c+=fr.repeat(" ",e.indent)+xr((t.line+1).toString(),h)+" | "+l.str+"\n",c+=fr.repeat("-",e.indent+h+3+l.pos)+"^\n",s=1;s<=e.linesAfter&&!(a+s>=o.length);s++)l=yr(t.buffer,n[a+s],o[a+s],t.position-(n[a]-n[a+s]),u),c+=fr.repeat(" ",e.indent)+xr((t.line+s+1).toString(),h)+" | "+l.str+"\n";return c.replace(/\n$/,"")},br=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],_r=["scalar","sequence","mapping"];var vr=function(t,e){var i,r;if(e=e||{},Object.keys(e).forEach((function(e){if(-1===br.indexOf(e))throw new mr('Unknown option "'+e+'" is met in definition of "'+t+'" YAML type.')})),this.options=e,this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.representName=e.representName||null,this.defaultStyle=e.defaultStyle||null,this.multi=e.multi||!1,this.styleAliases=(i=e.styleAliases||null,r={},null!==i&&Object.keys(i).forEach((function(t){i[t].forEach((function(e){r[String(e)]=t}))})),r),-1===_r.indexOf(this.kind))throw new mr('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')};function Tr(t,e){var i=[];return t[e].forEach((function(t){var e=i.length;i.forEach((function(i,r){i.tag===t.tag&&i.kind===t.kind&&i.multi===t.multi&&(e=r)})),i[e]=t})),i}function kr(t){return this.extend(t)}kr.prototype.extend=function(t){var e=[],i=[];if(t instanceof vr)i.push(t);else if(Array.isArray(t))i=i.concat(t);else{if(!t||!Array.isArray(t.implicit)&&!Array.isArray(t.explicit))throw new mr("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");t.implicit&&(e=e.concat(t.implicit)),t.explicit&&(i=i.concat(t.explicit))}e.forEach((function(t){if(!(t instanceof vr))throw new mr("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(t.loadKind&&"scalar"!==t.loadKind)throw new mr("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(t.multi)throw new mr("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")})),i.forEach((function(t){if(!(t instanceof vr))throw new mr("Specified list of YAML types (or a single Type object) contains a non-Type object.")}));var r=Object.create(kr.prototype);return r.implicit=(this.implicit||[]).concat(e),r.explicit=(this.explicit||[]).concat(i),r.compiledImplicit=Tr(r,"implicit"),r.compiledExplicit=Tr(r,"explicit"),r.compiledTypeMap=function(){var t,e,i={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function r(t){t.multi?(i.multi[t.kind].push(t),i.multi.fallback.push(t)):i[t.kind][t.tag]=i.fallback[t.tag]=t}for(t=0,e=arguments.length;t=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),Mr=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var Er=/^[-+]?[0-9]+e/;var Nr=new vr("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(t){return null!==t&&!(!Mr.test(t)||"_"===t[t.length-1])},construct:function(t){var e,i;return i="-"===(e=t.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(e[0])>=0&&(e=e.slice(1)),".inf"===e?1===i?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===e?NaN:i*parseFloat(e,10)},predicate:function(t){return"[object Number]"===Object.prototype.toString.call(t)&&(t%1!=0||fr.isNegativeZero(t))},represent:function(t,e){var i;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(fr.isNegativeZero(t))return"-0.0";return i=t.toString(10),Er.test(i)?i.replace("e",".e"):i},defaultStyle:"lowercase"}),jr=Ar.extend({implicit:[wr,Sr,Lr,Nr]}),Or=jr,Ir=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),Dr=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");var qr=new vr("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(t){return null!==t&&(null!==Ir.exec(t)||null!==Dr.exec(t))},construct:function(t){var e,i,r,n,o,a,s,l,c=0,h=null;if(null===(e=Ir.exec(t))&&(e=Dr.exec(t)),null===e)throw new Error("Date resolve error");if(i=+e[1],r=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(i,r,n));if(o=+e[4],a=+e[5],s=+e[6],e[7]){for(c=e[7].slice(0,3);c.length<3;)c+="0";c=+c}return e[9]&&(h=6e4*(60*+e[10]+ +(e[11]||0)),"-"===e[9]&&(h=-h)),l=new Date(Date.UTC(i,r,n,o,a,s,c)),h&&l.setTime(l.getTime()-h),l},instanceOf:Date,represent:function(t){return t.toISOString()}});var $r=new vr("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(t){return"<<"===t||null===t}}),zr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";var Pr=new vr("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e,i,r=0,n=t.length,o=zr;for(i=0;i64)){if(e<0)return!1;r+=6}return r%8==0},construct:function(t){var e,i,r=t.replace(/[\r\n=]/g,""),n=r.length,o=zr,a=0,s=[];for(e=0;e>16&255),s.push(a>>8&255),s.push(255&a)),a=a<<6|o.indexOf(r.charAt(e));return 0===(i=n%4*6)?(s.push(a>>16&255),s.push(a>>8&255),s.push(255&a)):18===i?(s.push(a>>10&255),s.push(a>>2&255)):12===i&&s.push(a>>4&255),new Uint8Array(s)},predicate:function(t){return"[object Uint8Array]"===Object.prototype.toString.call(t)},represent:function(t){var e,i,r="",n=0,o=t.length,a=zr;for(e=0;e>18&63],r+=a[n>>12&63],r+=a[n>>6&63],r+=a[63&n]),n=(n<<8)+t[e];return 0===(i=o%3)?(r+=a[n>>18&63],r+=a[n>>12&63],r+=a[n>>6&63],r+=a[63&n]):2===i?(r+=a[n>>10&63],r+=a[n>>4&63],r+=a[n<<2&63],r+=a[64]):1===i&&(r+=a[n>>2&63],r+=a[n<<4&63],r+=a[64],r+=a[64]),r}}),Rr=Object.prototype.hasOwnProperty,Ur=Object.prototype.toString;var Hr=new vr("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(t){if(null===t)return!0;var e,i,r,n,o,a=[],s=t;for(e=0,i=s.length;e>10),56320+(t-65536&1023))}for(var xn=new Array(256),Cn=new Array(256),bn=0;bn<256;bn++)xn[bn]=mn(bn)?1:0,Cn[bn]=mn(bn);function _n(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||Xr,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function vn(t,e){var i={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return i.snippet=Cr(i),new mr(e,i)}function Tn(t,e){throw vn(t,e)}function kn(t,e){t.onWarning&&t.onWarning.call(null,vn(t,e))}var An={YAML:function(t,e,i){var r,n,o;null!==t.version&&Tn(t,"duplication of %YAML directive"),1!==i.length&&Tn(t,"YAML directive accepts exactly one argument"),null===(r=/^([0-9]+)\.([0-9]+)$/.exec(i[0]))&&Tn(t,"ill-formed argument of the YAML directive"),n=parseInt(r[1],10),o=parseInt(r[2],10),1!==n&&Tn(t,"unacceptable YAML version of the document"),t.version=i[0],t.checkLineBreaks=o<2,1!==o&&2!==o&&kn(t,"unsupported YAML version of the document")},TAG:function(t,e,i){var r,n;2!==i.length&&Tn(t,"TAG directive accepts exactly two arguments"),r=i[0],n=i[1],ln.test(r)||Tn(t,"ill-formed tag handle (first argument) of the TAG directive"),Zr.call(t.tagMap,r)&&Tn(t,'there is a previously declared suffix for "'+r+'" tag handle'),cn.test(n)||Tn(t,"ill-formed tag prefix (second argument) of the TAG directive");try{n=decodeURIComponent(n)}catch(o){Tn(t,"tag prefix is malformed: "+n)}t.tagMap[r]=n}};function wn(t,e,i,r){var n,o,a,s;if(e1&&(t.result+=fr.repeat("\n",e-1))}function Nn(t,e){var i,r,n=t.tag,o=t.anchor,a=[],s=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=a),r=t.input.charCodeAt(t.position);0!==r&&(-1!==t.firstTabInLine&&(t.position=t.firstTabInLine,Tn(t,"tab characters must not be used in indentation")),45===r)&&fn(t.input.charCodeAt(t.position+1));)if(s=!0,t.position++,Ln(t,!0,-1)&&t.lineIndent<=e)a.push(null),r=t.input.charCodeAt(t.position);else if(i=t.line,In(t,e,Kr,!1,!0),a.push(t.result),Ln(t,!0,-1),r=t.input.charCodeAt(t.position),(t.line===i||t.lineIndent>e)&&0!==r)Tn(t,"bad indentation of a sequence entry");else if(t.lineIndente?p=1:t.lineIndent===e?p=0:t.lineIndente?p=1:t.lineIndent===e?p=0:t.lineIndente)&&(y&&(a=t.line,s=t.lineStart,l=t.position),In(t,e,tn,!0,n)&&(y?g=t.result:m=t.result),y||(Bn(t,d,f,p,g,m,a,s,l),p=g=m=null),Ln(t,!0,-1),c=t.input.charCodeAt(t.position)),(t.line===o||t.lineIndent>e)&&0!==c)Tn(t,"bad indentation of a mapping entry");else if(t.lineIndent=0))break;0===n?Tn(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):c?Tn(t,"repeat of an indentation width identifier"):(h=e+n-1,c=!0)}if(dn(o)){do{o=t.input.charCodeAt(++t.position)}while(dn(o));if(35===o)do{o=t.input.charCodeAt(++t.position)}while(!un(o)&&0!==o)}for(;0!==o;){for(Fn(t),t.lineIndent=0,o=t.input.charCodeAt(t.position);(!c||t.lineIndenth&&(h=t.lineIndent),un(o))u++;else{if(t.lineIndent0){for(n=a,o=0;n>0;n--)(a=gn(s=t.input.charCodeAt(++t.position)))>=0?o=(o<<4)+a:Tn(t,"expected hexadecimal character");t.result+=yn(o),t.position++}else Tn(t,"unknown escape sequence");i=r=t.position}else un(s)?(wn(t,i,r,!0),En(t,Ln(t,!1,e)),i=r=t.position):t.position===t.lineStart&&Mn(t)?Tn(t,"unexpected end of the document within a double quoted scalar"):(t.position++,r=t.position)}Tn(t,"unexpected end of the stream within a double quoted scalar")}(t,d)?m=!0:!function(t){var e,i,r;if(42!==(r=t.input.charCodeAt(t.position)))return!1;for(r=t.input.charCodeAt(++t.position),e=t.position;0!==r&&!fn(r)&&!pn(r);)r=t.input.charCodeAt(++t.position);return t.position===e&&Tn(t,"name of an alias node must contain at least one character"),i=t.input.slice(e,t.position),Zr.call(t.anchorMap,i)||Tn(t,'unidentified alias "'+i+'"'),t.result=t.anchorMap[i],Ln(t,!0,-1),!0}(t)?function(t,e,i){var r,n,o,a,s,l,c,h,u=t.kind,d=t.result;if(fn(h=t.input.charCodeAt(t.position))||pn(h)||35===h||38===h||42===h||33===h||124===h||62===h||39===h||34===h||37===h||64===h||96===h)return!1;if((63===h||45===h)&&(fn(r=t.input.charCodeAt(t.position+1))||i&&pn(r)))return!1;for(t.kind="scalar",t.result="",n=o=t.position,a=!1;0!==h;){if(58===h){if(fn(r=t.input.charCodeAt(t.position+1))||i&&pn(r))break}else if(35===h){if(fn(t.input.charCodeAt(t.position-1)))break}else{if(t.position===t.lineStart&&Mn(t)||i&&pn(h))break;if(un(h)){if(s=t.line,l=t.lineStart,c=t.lineIndent,Ln(t,!1,-1),t.lineIndent>=e){a=!0,h=t.input.charCodeAt(t.position);continue}t.position=o,t.line=s,t.lineStart=l,t.lineIndent=c;break}}a&&(wn(t,n,o,!1),En(t,t.line-s),n=o=t.position,a=!1),dn(h)||(o=t.position+1),h=t.input.charCodeAt(++t.position)}return wn(t,n,o,!1),!!t.result||(t.kind=u,t.result=d,!1)}(t,d,Jr===i)&&(m=!0,null===t.tag&&(t.tag="?")):(m=!0,null===t.tag&&null===t.anchor||Tn(t,"alias node should not have any properties")),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):0===p&&(m=s&&Nn(t,f))),null===t.tag)null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);else if("?"===t.tag){for(null!==t.result&&"scalar"!==t.kind&&Tn(t,'unacceptable node kind for ! tag; it should be "scalar", not "'+t.kind+'"'),l=0,c=t.implicitTypes.length;l"),null!==t.result&&u.kind!==t.kind&&Tn(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+u.kind+'", not "'+t.kind+'"'),u.resolve(t.result,t.tag)?(t.result=u.construct(t.result,t.tag),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):Tn(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return null!==t.listener&&t.listener("close",t),null!==t.tag||null!==t.anchor||m}function Dn(t){var e,i,r,n,o=t.position,a=!1;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);0!==(n=t.input.charCodeAt(t.position))&&(Ln(t,!0,-1),n=t.input.charCodeAt(t.position),!(t.lineIndent>0||37!==n));){for(a=!0,n=t.input.charCodeAt(++t.position),e=t.position;0!==n&&!fn(n);)n=t.input.charCodeAt(++t.position);for(r=[],(i=t.input.slice(e,t.position)).length<1&&Tn(t,"directive name must not be less than one character in length");0!==n;){for(;dn(n);)n=t.input.charCodeAt(++t.position);if(35===n){do{n=t.input.charCodeAt(++t.position)}while(0!==n&&!un(n));break}if(un(n))break;for(e=t.position;0!==n&&!fn(n);)n=t.input.charCodeAt(++t.position);r.push(t.input.slice(e,t.position))}0!==n&&Fn(t),Zr.call(An,i)?An[i](t,i,r):kn(t,'unknown document directive "'+i+'"')}Ln(t,!0,-1),0===t.lineIndent&&45===t.input.charCodeAt(t.position)&&45===t.input.charCodeAt(t.position+1)&&45===t.input.charCodeAt(t.position+2)?(t.position+=3,Ln(t,!0,-1)):a&&Tn(t,"directives end mark is expected"),In(t,t.lineIndent-1,tn,!1,!0),Ln(t,!0,-1),t.checkLineBreaks&&an.test(t.input.slice(o,t.position))&&kn(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&Mn(t)?46===t.input.charCodeAt(t.position)&&(t.position+=3,Ln(t,!0,-1)):t.positiont.replace(/\r\n?/g,"\n").replace(/<(\w+)([^>]*)>/g,((t,e,i)=>"<"+e+i.replace(/="([^"]*)"/g,"='$1'")+">")),Rn=t=>{const{text:e,metadata:i}=function(t){const e=t.match(Wt);if(!e)return{text:t,metadata:{}};let i=zn(e[1],{schema:$n})??{};i="object"!=typeof i||Array.isArray(i)?{}:i;const r={};return i.displayMode&&(r.displayMode=i.displayMode.toString()),i.title&&(r.title=i.title.toString()),i.config&&(r.config=i.config),{text:t.slice(e[0].length),metadata:r}}(t),{displayMode:r,title:n,config:o={}}=i;return r&&(o.gantt||(o.gantt={}),o.gantt.displayMode=r),{title:n,config:o,text:e}},Un=t=>{const e=Te.detectInit(t)??{},i=Te.detectDirective(t,"wrap");return Array.isArray(i)?e.wrap=i.some((({type:t})=>{})):"wrap"===(null==i?void 0:i.type)&&(e.wrap=!0),{text:(r=t,r.replace(Yt,"")),directive:e};var r};function Hn(t){const e=Pn(t),i=Rn(e),r=Un(i.text),n=ve(i.config,r.directive);return{code:t=ur(r.text),title:i.title,config:n}}const Wn=["foreignobject"],Yn=["dominant-baseline"];function Vn(t){const e=Hn(t);return De(),Ie(e.config??{}),e}const Gn=(t,e,i=[])=>`\n.${t} ${e} { ${i.join(" !important; ")} !important; }`,Xn=(t,e,i,r)=>{const n=((t,e={})=>{var i;let r="";if(void 0!==t.themeCSS&&(r+=`\n${t.themeCSS}`),void 0!==t.fontFamily&&(r+=`\n:root { --mermaid-font-family: ${t.fontFamily}}`),void 0!==t.altFontFamily&&(r+=`\n:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),!(0,ot.A)(e)){const n=t.htmlLabels||(null==(i=t.flowchart)?void 0:i.htmlLabels)?["> *","span"]:["rect","polygon","ellipse","circle","path"];for(const t in e){const i=e[t];(0,ot.A)(i.styles)||n.forEach((t=>{r+=Gn(i.id,t,i.styles)})),(0,ot.A)(i.textStyles)||(r+=Gn(i.id,"tspan",i.textStyles))}}return r})(t,i);return M(tt(`${r}{${_i(e,n,t.themeVariables)}}`),E)},Zn=(t,e,i,r,n)=>{const o=t.append("div");o.attr("id",i),r&&o.attr("style",r);const a=o.append("svg").attr("id",e).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg");return n&&a.attr("xmlns:xlink",n),a.append("g"),t};function Jn(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}const Qn=(t,e={})=>{const{code:i}=Hn(t);return lr(i,e)};const Kn=Object.freeze({render:async function(t,e,i){var r,n,o,l,c,h;ar();const u=Vn(e);e=u.code;const d=je();st.debug(d),e.length>((null==d?void 0:d.maxTextSize)??5e4)&&(e="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa");const f="#"+t,p="i"+t,g="#"+p,m="d"+t,y="#"+m;let x=(0,a.Ltv)("body");const C="sandbox"===d.securityLevel,b="loose"===d.securityLevel,_=d.fontFamily;if(void 0!==i){if(i&&(i.innerHTML=""),C){const t=Jn((0,a.Ltv)(i),p);x=(0,a.Ltv)(t.nodes()[0].contentDocument.body),x.node().style.margin=0}else x=(0,a.Ltv)(i);Zn(x,t,m,`font-family: ${_}`,"http://www.w3.org/1999/xlink")}else{if(((t,e,i,r)=>{var n,o,a;null==(n=t.getElementById(e))||n.remove(),null==(o=t.getElementById(i))||o.remove(),null==(a=t.getElementById(r))||a.remove()})(document,t,m,p),C){const t=Jn((0,a.Ltv)("body"),p);x=(0,a.Ltv)(t.nodes()[0].contentDocument.body),x.node().style.margin=0}else x=(0,a.Ltv)("body");Zn(x,t,m)}let v,T;try{v=await Qn(e,{title:u.title})}catch(j){v=new sr("error"),T=j}const k=x.select(y).node(),A=v.type,w=k.firstChild,S=w.firstChild,B=null==(n=(r=v.renderer).getClasses)?void 0:n.call(r,e,v),F=Xn(d,A,B,f),L=document.createElement("style");L.innerHTML=F,w.insertBefore(L,S);try{await v.renderer.draw(e,t,Ae,v)}catch(O){throw Vi.draw(e,t,Ae),O}!function(t,e,i,r){(function(t,e){t.attr("role",hr),""!==e&&t.attr("aria-roledescription",e)})(e,t),function(t,e,i,r){if(void 0!==t.insert){if(i){const e=`chart-desc-${r}`;t.attr("aria-describedby",e),t.insert("desc",":first-child").attr("id",e).text(i)}if(e){const i=`chart-title-${r}`;t.attr("aria-labelledby",i),t.insert("title",":first-child").attr("id",i).text(e)}}}(e,i,r,e.attr("id"))}(A,x.select(`${y} svg`),null==(l=(o=v.db).getAccTitle)?void 0:l.call(o),null==(h=(c=v.db).getAccDescription)?void 0:h.call(c)),x.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns","http://www.w3.org/1999/xhtml");let M=x.select(y).node().innerHTML;if(st.debug("config.arrowMarkerAbsolute",d.arrowMarkerAbsolute),M=((t="",e,i)=>{let r=t;return i||e||(r=r.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),r=ke(r),r=r.replace(/
    /g,"
    "),r})(M,C,yt(d.arrowMarkerAbsolute)),C){M=((t="",e)=>{var i,r;return``})(M,x.select(y+" svg").node())}else b||(M=s.sanitize(M,{ADD_TAGS:Wn,ADD_ATTR:Yn}));if(cr.forEach((t=>{t()})),cr=[],T)throw T;const E=C?g:y,N=(0,a.Ltv)(E).node();return N&&"remove"in N&&N.remove(),{svg:M,bindFunctions:v.db.bindFunctions}},parse:async function(t,e){ar(),t=Vn(t).code;try{await Qn(t)}catch(i){if(null==e?void 0:e.suppressErrors)return!1;throw i}return!0},getDiagramFromText:Qn,initialize:function(t={}){var e;(null==t?void 0:t.fontFamily)&&!(null==(e=t.themeVariables)?void 0:e.fontFamily)&&(t.themeVariables||(t.themeVariables={}),t.themeVariables.fontFamily=t.fontFamily),Se=te({},t),(null==t?void 0:t.theme)&&t.theme in Dt?t.themeVariables=Dt[t.theme].getThemeVariables(t.themeVariables):t&&(t.themeVariables=Dt.default.getThemeVariables(t.themeVariables));const i="object"==typeof t?(t=>(Be=te({},we),Be=te(Be,t),t.theme&&Dt[t.theme]&&(Be.themeVariables=Dt[t.theme].getThemeVariables(t.themeVariables)),Me(Be,Fe),Be))(t):Ee();lt(i.logLevel),ar()},getConfig:je,setConfig:Ne,getSiteConfig:Ee,updateSiteConfig:t=>(Be=te(Be,t),Me(Be,Fe),Be),reset:()=>{De()},globalReset:()=>{De(we)},defaultConfig:we});lt(je().logLevel),De(je());const to=(t,e,i)=>{st.warn(t),be(t)?(i&&i(t.str,t.hash),e.push({...t,message:t.str,error:t})):(i&&i(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},eo=async function(t={querySelector:".mermaid"}){try{await io(t)}catch(e){if(be(e)&&st.error(e.str),co.parseError&&co.parseError(e),!t.suppressErrors)throw st.error("Use the suppressErrors option to suppress these errors"),e}},io=async function({postRenderCallback:t,querySelector:e,nodes:i}={querySelector:".mermaid"}){const n=Kn.getConfig();let o;if(st.debug((t?"":"No ")+"Callback function found"),i)o=i;else{if(!e)throw new Error("Nodes and querySelector are both undefined");o=document.querySelectorAll(e)}st.debug(`Found ${o.length} diagrams`),void 0!==(null==n?void 0:n.startOnLoad)&&(st.debug("Start On Load: "+(null==n?void 0:n.startOnLoad)),Kn.updateSiteConfig({startOnLoad:null==n?void 0:n.startOnLoad}));const a=new Te.InitIDGenerator(n.deterministicIds,n.deterministicIDSeed);let s;const l=[];for(const h of Array.from(o)){if(st.info("Rendering diagram: "+h.id),h.getAttribute("data-processed"))continue;h.setAttribute("data-processed","true");const e=`mermaid-${a.next()}`;s=h.innerHTML,s=(0,r.T)(Te.entityDecode(s)).trim().replace(//gi,"
    ");const i=Te.detectInit(s);i&&st.debug("Detected early reinit: ",i);try{const{svg:i,bindFunctions:r}=await lo(e,s,h);h.innerHTML=i,t&&await t(e),r&&r(h)}catch(c){to(c,l,co.parseError)}}if(l.length>0)throw l[0]},ro=function(t){Kn.initialize(t)},no=function(){if(co.startOnLoad){const{startOnLoad:t}=Kn.getConfig();t&&co.run().catch((t=>st.error("Mermaid failed to initialize",t)))}};"undefined"!=typeof document&&window.addEventListener("load",no,!1);const oo=[];let ao=!1;const so=async()=>{if(!ao){for(ao=!0;oo.length>0;){const e=oo.shift();if(e)try{await e()}catch(t){st.error("Error executing queue",t)}}ao=!1}},lo=(t,e,i)=>new Promise(((r,n)=>{oo.push((()=>new Promise(((o,a)=>{Kn.render(t,e,i).then((t=>{o(t),r(t)}),(t=>{var e;st.error("Error parsing",t),null==(e=co.parseError)||e.call(co,t),a(t),n(t)}))})))),so().catch(n)})),co={startOnLoad:!0,mermaidAPI:Kn,parse:async(t,e)=>new Promise(((i,r)=>{oo.push((()=>new Promise(((n,o)=>{Kn.parse(t,e).then((t=>{n(t),i(t)}),(t=>{var e;st.error("Error parsing",t),null==(e=co.parseError)||e.call(co,t),o(t),r(t)}))})))),so().catch(r)})),render:lo,init:async function(t,e,i){st.warn("mermaid.init is deprecated. Please use run instead."),t&&ro(t);const r={postRenderCallback:i,querySelector:".mermaid"};"string"==typeof e?r.querySelector=e:e&&(e instanceof HTMLElement?r.nodes=[e]:r.nodes=e),await eo(r)},run:eo,registerExternalDiagrams:async(t,{lazyLoad:e=!0}={})=>{Jt(...t),!1===e&&await(async()=>{st.debug("Loading registered diagrams");const t=(await Promise.allSettled(Object.entries(Xt).map((async([t,{detector:e,loader:i}])=>{if(i)try{Ui(t)}catch(r){try{const{diagram:t,id:r}=await i();Ri(r,t,e)}catch(n){throw st.error(`Failed to load external diagram with key ${t}. Removing from detectors.`),delete Xt[t],n}}})))).filter((t=>"rejected"===t.status));if(t.length>0){st.error(`Failed to load ${t.length} external diagrams`);for(const e of t)st.error(e);throw new Error(`Failed to load ${t.length} external diagrams`)}})()},initialize:ro,parseError:void 0,contentLoaded:no,setParseErrorHandler:function(t){co.parseError=t},detectType:Zt}}}]); \ No newline at end of file diff --git a/assets/js/17896441.41832d39.js.LICENSE.txt b/assets/js/17896441.41832d39.js.LICENSE.txt new file mode 100644 index 0000000000..d75c0dbe2b --- /dev/null +++ b/assets/js/17896441.41832d39.js.LICENSE.txt @@ -0,0 +1,9 @@ +/*! + * Wait for document loaded before starting the execution + */ + +/*! @license DOMPurify 3.1.5 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.1.5/LICENSE */ + +/*! Check if previously processed */ + +/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */ diff --git a/assets/js/18b0ec42.2ac73a22.js b/assets/js/18b0ec42.2ac73a22.js new file mode 100644 index 0000000000..f4486f4ad3 --- /dev/null +++ b/assets/js/18b0ec42.2ac73a22.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2516],{60361:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>l,default:()=>u,frontMatter:()=>r,metadata:()=>c,toc:()=>o});var s=t(74848),a=t(28453);const r={slug:"v8.8-release",title:"v8.8",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:-18},l="eCalc",c={id:"changelog/v8-8",title:"v8.8",description:"New Features",source:"@site/docs/changelog/v8-8.md",sourceDirName:"changelog",slug:"/changelog/v8.8-release",permalink:"/ecalc/docs/changelog/v8.8-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-8.md",tags:[{inline:!0,label:"release",permalink:"/ecalc/docs/tags/release"},{inline:!0,label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:-18,frontMatter:{slug:"v8.8-release",title:"v8.8",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:-18},sidebar:"changelog",previous:{title:"v8.10",permalink:"/ecalc/docs/changelog/v8.10-release"},next:{title:"v8.7",permalink:"/ecalc/docs/changelog/v8.7-release"}},i={},o=[{value:"New Features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking changes",id:"breaking-changes",level:2}];function d(e){const n={code:"code",h1:"h1",h2:"h2",li:"li",ul:"ul",...(0,a.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"ecalc",children:"eCalc"}),"\n",(0,s.jsx)(n.h2,{id:"new-features",children:"New Features"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Updated NeqSim to version 2.5.9. This may lead to small numerical differences in the results when old models are re-run with the latest version of eCalc."}),"\n",(0,s.jsx)(n.li,{children:"Provide maximum rate in CompressorModelResult (if there are more than one stream, only max rate for the first one is reported)"}),"\n",(0,s.jsxs)(n.li,{children:["Support for specifying ",(0,s.jsx)(n.code,{children:"RATE_TYPE"})," (",(0,s.jsx)(n.code,{children:"STREAM_DAY"})," or ",(0,s.jsx)(n.code,{children:"CALENDAR_DAY"}),") for ",(0,s.jsx)(n.code,{children:"VENTING_EMITTERS"})]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"fixes",children:"Fixes"}),"\n",(0,s.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"})]})}function u(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>l,x:()=>c});var s=t(96540);const a={},r=s.createContext(a);function l(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:l(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1946.4b9f4a0c.js b/assets/js/1946.4b9f4a0c.js new file mode 100644 index 0000000000..19ffdc6910 --- /dev/null +++ b/assets/js/1946.4b9f4a0c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1946],{31946:(t,e,n)=>{n.d(e,{diagram:()=>nt});var a=n(99702),i=n(26312),s=n(28259),r=n(16750),l=(n(74353),n(42838),function(){var t=function(t,e,n,a){for(n=n||{},a=t.length;a--;n[t[a]]=e);return n},e=[1,24],n=[1,25],a=[1,26],i=[1,27],s=[1,28],r=[1,63],l=[1,64],o=[1,65],h=[1,66],d=[1,67],u=[1,68],p=[1,69],y=[1,29],f=[1,30],b=[1,31],g=[1,32],x=[1,33],_=[1,34],m=[1,35],E=[1,36],A=[1,37],S=[1,38],C=[1,39],k=[1,40],O=[1,41],v=[1,42],T=[1,43],w=[1,44],R=[1,45],D=[1,46],N=[1,47],P=[1,48],M=[1,50],j=[1,51],B=[1,52],L=[1,53],Y=[1,54],I=[1,55],U=[1,56],F=[1,57],X=[1,58],z=[1,59],W=[1,60],Q=[14,42],$=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],q=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],V=[1,82],G=[1,83],H=[1,84],K=[1,85],J=[12,14,42],Z=[12,14,33,42],tt=[12,14,33,42,76,77,79,80],et=[12,33],nt=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],at={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:function(t,e,n,a,i,s,r){var l=s.length-1;switch(i){case 3:a.setDirection("TB");break;case 4:a.setDirection("BT");break;case 5:a.setDirection("RL");break;case 6:a.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:a.setC4Type(s[l-3]);break;case 19:a.setTitle(s[l].substring(6)),this.$=s[l].substring(6);break;case 20:a.setAccDescription(s[l].substring(15)),this.$=s[l].substring(15);break;case 21:this.$=s[l].trim(),a.setTitle(this.$);break;case 22:case 23:this.$=s[l].trim(),a.setAccDescription(this.$);break;case 28:case 29:s[l].splice(2,0,"ENTERPRISE"),a.addPersonOrSystemBoundary(...s[l]),this.$=s[l];break;case 30:a.addPersonOrSystemBoundary(...s[l]),this.$=s[l];break;case 31:s[l].splice(2,0,"CONTAINER"),a.addContainerBoundary(...s[l]),this.$=s[l];break;case 32:a.addDeploymentNode("node",...s[l]),this.$=s[l];break;case 33:a.addDeploymentNode("nodeL",...s[l]),this.$=s[l];break;case 34:a.addDeploymentNode("nodeR",...s[l]),this.$=s[l];break;case 35:a.popBoundaryParseStack();break;case 39:a.addPersonOrSystem("person",...s[l]),this.$=s[l];break;case 40:a.addPersonOrSystem("external_person",...s[l]),this.$=s[l];break;case 41:a.addPersonOrSystem("system",...s[l]),this.$=s[l];break;case 42:a.addPersonOrSystem("system_db",...s[l]),this.$=s[l];break;case 43:a.addPersonOrSystem("system_queue",...s[l]),this.$=s[l];break;case 44:a.addPersonOrSystem("external_system",...s[l]),this.$=s[l];break;case 45:a.addPersonOrSystem("external_system_db",...s[l]),this.$=s[l];break;case 46:a.addPersonOrSystem("external_system_queue",...s[l]),this.$=s[l];break;case 47:a.addContainer("container",...s[l]),this.$=s[l];break;case 48:a.addContainer("container_db",...s[l]),this.$=s[l];break;case 49:a.addContainer("container_queue",...s[l]),this.$=s[l];break;case 50:a.addContainer("external_container",...s[l]),this.$=s[l];break;case 51:a.addContainer("external_container_db",...s[l]),this.$=s[l];break;case 52:a.addContainer("external_container_queue",...s[l]),this.$=s[l];break;case 53:a.addComponent("component",...s[l]),this.$=s[l];break;case 54:a.addComponent("component_db",...s[l]),this.$=s[l];break;case 55:a.addComponent("component_queue",...s[l]),this.$=s[l];break;case 56:a.addComponent("external_component",...s[l]),this.$=s[l];break;case 57:a.addComponent("external_component_db",...s[l]),this.$=s[l];break;case 58:a.addComponent("external_component_queue",...s[l]),this.$=s[l];break;case 60:a.addRel("rel",...s[l]),this.$=s[l];break;case 61:a.addRel("birel",...s[l]),this.$=s[l];break;case 62:a.addRel("rel_u",...s[l]),this.$=s[l];break;case 63:a.addRel("rel_d",...s[l]),this.$=s[l];break;case 64:a.addRel("rel_l",...s[l]),this.$=s[l];break;case 65:a.addRel("rel_r",...s[l]),this.$=s[l];break;case 66:a.addRel("rel_b",...s[l]),this.$=s[l];break;case 67:s[l].splice(0,1),a.addRel("rel",...s[l]),this.$=s[l];break;case 68:a.updateElStyle("update_el_style",...s[l]),this.$=s[l];break;case 69:a.updateRelStyle("update_rel_style",...s[l]),this.$=s[l];break;case 70:a.updateLayoutConfig("update_layout_config",...s[l]),this.$=s[l];break;case 71:this.$=[s[l]];break;case 72:s[l].unshift(s[l-1]),this.$=s[l];break;case 73:case 75:this.$=s[l].trim();break;case 74:let t={};t[s[l-1].trim()]=s[l].trim(),this.$=t;break;case 76:this.$=""}},table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:e,23:n,24:a,26:i,28:s,29:49,30:61,32:62,34:r,36:l,37:o,38:h,39:d,40:u,41:p,43:23,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:L,68:Y,69:I,70:U,71:F,72:X,73:z,74:W},{13:70,19:20,20:21,21:22,22:e,23:n,24:a,26:i,28:s,29:49,30:61,32:62,34:r,36:l,37:o,38:h,39:d,40:u,41:p,43:23,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:L,68:Y,69:I,70:U,71:F,72:X,73:z,74:W},{13:71,19:20,20:21,21:22,22:e,23:n,24:a,26:i,28:s,29:49,30:61,32:62,34:r,36:l,37:o,38:h,39:d,40:u,41:p,43:23,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:L,68:Y,69:I,70:U,71:F,72:X,73:z,74:W},{13:72,19:20,20:21,21:22,22:e,23:n,24:a,26:i,28:s,29:49,30:61,32:62,34:r,36:l,37:o,38:h,39:d,40:u,41:p,43:23,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:L,68:Y,69:I,70:U,71:F,72:X,73:z,74:W},{13:73,19:20,20:21,21:22,22:e,23:n,24:a,26:i,28:s,29:49,30:61,32:62,34:r,36:l,37:o,38:h,39:d,40:u,41:p,43:23,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:L,68:Y,69:I,70:U,71:F,72:X,73:z,74:W},{14:[1,74]},t(Q,[2,13],{43:23,29:49,30:61,32:62,20:75,34:r,36:l,37:o,38:h,39:d,40:u,41:p,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:L,68:Y,69:I,70:U,71:F,72:X,73:z,74:W}),t(Q,[2,14]),t($,[2,16],{12:[1,76]}),t(Q,[2,36],{12:[1,77]}),t(q,[2,19]),t(q,[2,20]),{25:[1,78]},{27:[1,79]},t(q,[2,23]),{35:80,75:81,76:V,77:G,79:H,80:K},{35:86,75:81,76:V,77:G,79:H,80:K},{35:87,75:81,76:V,77:G,79:H,80:K},{35:88,75:81,76:V,77:G,79:H,80:K},{35:89,75:81,76:V,77:G,79:H,80:K},{35:90,75:81,76:V,77:G,79:H,80:K},{35:91,75:81,76:V,77:G,79:H,80:K},{35:92,75:81,76:V,77:G,79:H,80:K},{35:93,75:81,76:V,77:G,79:H,80:K},{35:94,75:81,76:V,77:G,79:H,80:K},{35:95,75:81,76:V,77:G,79:H,80:K},{35:96,75:81,76:V,77:G,79:H,80:K},{35:97,75:81,76:V,77:G,79:H,80:K},{35:98,75:81,76:V,77:G,79:H,80:K},{35:99,75:81,76:V,77:G,79:H,80:K},{35:100,75:81,76:V,77:G,79:H,80:K},{35:101,75:81,76:V,77:G,79:H,80:K},{35:102,75:81,76:V,77:G,79:H,80:K},{35:103,75:81,76:V,77:G,79:H,80:K},{35:104,75:81,76:V,77:G,79:H,80:K},t(J,[2,59]),{35:105,75:81,76:V,77:G,79:H,80:K},{35:106,75:81,76:V,77:G,79:H,80:K},{35:107,75:81,76:V,77:G,79:H,80:K},{35:108,75:81,76:V,77:G,79:H,80:K},{35:109,75:81,76:V,77:G,79:H,80:K},{35:110,75:81,76:V,77:G,79:H,80:K},{35:111,75:81,76:V,77:G,79:H,80:K},{35:112,75:81,76:V,77:G,79:H,80:K},{35:113,75:81,76:V,77:G,79:H,80:K},{35:114,75:81,76:V,77:G,79:H,80:K},{35:115,75:81,76:V,77:G,79:H,80:K},{20:116,29:49,30:61,32:62,34:r,36:l,37:o,38:h,39:d,40:u,41:p,43:23,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:L,68:Y,69:I,70:U,71:F,72:X,73:z,74:W},{12:[1,118],33:[1,117]},{35:119,75:81,76:V,77:G,79:H,80:K},{35:120,75:81,76:V,77:G,79:H,80:K},{35:121,75:81,76:V,77:G,79:H,80:K},{35:122,75:81,76:V,77:G,79:H,80:K},{35:123,75:81,76:V,77:G,79:H,80:K},{35:124,75:81,76:V,77:G,79:H,80:K},{35:125,75:81,76:V,77:G,79:H,80:K},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},t(Q,[2,15]),t($,[2,17],{21:22,19:130,22:e,23:n,24:a,26:i,28:s}),t(Q,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:e,23:n,24:a,26:i,28:s,34:r,36:l,37:o,38:h,39:d,40:u,41:p,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:L,68:Y,69:I,70:U,71:F,72:X,73:z,74:W}),t(q,[2,21]),t(q,[2,22]),t(J,[2,39]),t(Z,[2,71],{75:81,35:132,76:V,77:G,79:H,80:K}),t(tt,[2,73]),{78:[1,133]},t(tt,[2,75]),t(tt,[2,76]),t(J,[2,40]),t(J,[2,41]),t(J,[2,42]),t(J,[2,43]),t(J,[2,44]),t(J,[2,45]),t(J,[2,46]),t(J,[2,47]),t(J,[2,48]),t(J,[2,49]),t(J,[2,50]),t(J,[2,51]),t(J,[2,52]),t(J,[2,53]),t(J,[2,54]),t(J,[2,55]),t(J,[2,56]),t(J,[2,57]),t(J,[2,58]),t(J,[2,60]),t(J,[2,61]),t(J,[2,62]),t(J,[2,63]),t(J,[2,64]),t(J,[2,65]),t(J,[2,66]),t(J,[2,67]),t(J,[2,68]),t(J,[2,69]),t(J,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},t(et,[2,28]),t(et,[2,29]),t(et,[2,30]),t(et,[2,31]),t(et,[2,32]),t(et,[2,33]),t(et,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},t($,[2,18]),t(Q,[2,38]),t(Z,[2,72]),t(tt,[2,74]),t(J,[2,24]),t(J,[2,35]),t(nt,[2,25]),t(nt,[2,26],{12:[1,138]}),t(nt,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],a=[],i=[null],s=[],r=this.table,l="",o=0,c=0,h=s.slice.call(arguments,1),d=Object.create(this.lexer),u={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(u.yy[p]=this.yy[p]);d.setInput(t,u.yy),u.yy.lexer=d,u.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var y=d.yylloc;s.push(y);var f=d.options&&d.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,g,x,_,m,E,A,S,C,k={};;){if(g=n[n.length-1],this.defaultActions[g]?x=this.defaultActions[g]:(null==b&&(C=void 0,"number"!=typeof(C=a.pop()||d.lex()||1)&&(C instanceof Array&&(C=(a=C).pop()),C=e.symbols_[C]||C),b=C),x=r[g]&&r[g][b]),void 0===x||!x.length||!x[0]){var O="";for(m in S=[],r[g])this.terminals_[m]&&m>2&&S.push("'"+this.terminals_[m]+"'");O=d.showPosition?"Parse error on line "+(o+1)+":\n"+d.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==b?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(O,{text:d.match,token:this.terminals_[b]||b,line:d.yylineno,loc:y,expected:S})}if(x[0]instanceof Array&&x.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+b);switch(x[0]){case 1:n.push(b),i.push(d.yytext),s.push(d.yylloc),n.push(x[1]),b=null,c=d.yyleng,l=d.yytext,o=d.yylineno,y=d.yylloc;break;case 2:if(E=this.productions_[x[1]][1],k.$=i[i.length-E],k._$={first_line:s[s.length-(E||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(E||1)].first_column,last_column:s[s.length-1].last_column},f&&(k._$.range=[s[s.length-(E||1)].range[0],s[s.length-1].range[1]]),void 0!==(_=this.performAction.apply(k,[l,c,o,u.yy,x[1],i,s].concat(h))))return _;E&&(n=n.slice(0,-1*E*2),i=i.slice(0,-1*E),s=s.slice(0,-1*E)),n.push(this.productions_[x[1]][0]),i.push(k.$),s.push(k._$),A=r[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},it={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var a=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===a.length?this.yylloc.first_column:0)+a[a.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,a,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(a=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=a.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:a?a[a.length-1].length-a[a.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var s in i)this[s]=i[s];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,a;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),s=0;se[0].length)){if(e=n,a=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[a]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,a){switch(n){case 0:return 6;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 22;case 5:return 23;case 6:return this.begin("acc_title"),24;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),26;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:case 73:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:case 16:case 70:break;case 14:c;break;case 15:return 12;case 17:return 11;case 18:return 15;case 19:return 16;case 20:return 17;case 21:return 18;case 22:return this.begin("person_ext"),45;case 23:return this.begin("person"),44;case 24:return this.begin("system_ext_queue"),51;case 25:return this.begin("system_ext_db"),50;case 26:return this.begin("system_ext"),49;case 27:return this.begin("system_queue"),48;case 28:return this.begin("system_db"),47;case 29:return this.begin("system"),46;case 30:return this.begin("boundary"),37;case 31:return this.begin("enterprise_boundary"),34;case 32:return this.begin("system_boundary"),36;case 33:return this.begin("container_ext_queue"),57;case 34:return this.begin("container_ext_db"),56;case 35:return this.begin("container_ext"),55;case 36:return this.begin("container_queue"),54;case 37:return this.begin("container_db"),53;case 38:return this.begin("container"),52;case 39:return this.begin("container_boundary"),38;case 40:return this.begin("component_ext_queue"),63;case 41:return this.begin("component_ext_db"),62;case 42:return this.begin("component_ext"),61;case 43:return this.begin("component_queue"),60;case 44:return this.begin("component_db"),59;case 45:return this.begin("component"),58;case 46:case 47:return this.begin("node"),39;case 48:return this.begin("node_l"),40;case 49:return this.begin("node_r"),41;case 50:return this.begin("rel"),64;case 51:return this.begin("birel"),65;case 52:case 53:return this.begin("rel_u"),66;case 54:case 55:return this.begin("rel_d"),67;case 56:case 57:return this.begin("rel_l"),68;case 58:case 59:return this.begin("rel_r"),69;case 60:return this.begin("rel_b"),70;case 61:return this.begin("rel_index"),71;case 62:return this.begin("update_el_style"),72;case 63:return this.begin("update_rel_style"),73;case 64:return this.begin("update_layout_config"),74;case 65:return"EOF_IN_STRUCT";case 66:return this.begin("attribute"),"ATTRIBUTE_EMPTY";case 67:this.begin("attribute");break;case 68:case 79:this.popState(),this.popState();break;case 69:case 71:return 80;case 72:this.begin("string");break;case 74:case 80:return"STR";case 75:this.begin("string_kv");break;case 76:return this.begin("string_kv_key"),"STR_KEY";case 77:this.popState(),this.begin("string_kv_value");break;case 78:return"STR_VALUE";case 81:return"LBRACE";case 82:return"RBRACE";case 83:return"SPACE";case 84:return"EOL";case 85:return 14}},rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},string_kv_value:{rules:[78,79],inclusive:!1},string_kv_key:{rules:[77],inclusive:!1},string_kv:{rules:[76],inclusive:!1},string:{rules:[73,74],inclusive:!1},attribute:{rules:[68,69,70,71,72,75,80],inclusive:!1},update_layout_config:{rules:[65,66,67,68],inclusive:!1},update_rel_style:{rules:[65,66,67,68],inclusive:!1},update_el_style:{rules:[65,66,67,68],inclusive:!1},rel_b:{rules:[65,66,67,68],inclusive:!1},rel_r:{rules:[65,66,67,68],inclusive:!1},rel_l:{rules:[65,66,67,68],inclusive:!1},rel_d:{rules:[65,66,67,68],inclusive:!1},rel_u:{rules:[65,66,67,68],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[65,66,67,68],inclusive:!1},node_r:{rules:[65,66,67,68],inclusive:!1},node_l:{rules:[65,66,67,68],inclusive:!1},node:{rules:[65,66,67,68],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[65,66,67,68],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[65,66,67,68],inclusive:!1},component_ext:{rules:[65,66,67,68],inclusive:!1},component_queue:{rules:[65,66,67,68],inclusive:!1},component_db:{rules:[65,66,67,68],inclusive:!1},component:{rules:[65,66,67,68],inclusive:!1},container_boundary:{rules:[65,66,67,68],inclusive:!1},container_ext_queue:{rules:[65,66,67,68],inclusive:!1},container_ext_db:{rules:[65,66,67,68],inclusive:!1},container_ext:{rules:[65,66,67,68],inclusive:!1},container_queue:{rules:[65,66,67,68],inclusive:!1},container_db:{rules:[65,66,67,68],inclusive:!1},container:{rules:[65,66,67,68],inclusive:!1},birel:{rules:[65,66,67,68],inclusive:!1},system_boundary:{rules:[65,66,67,68],inclusive:!1},enterprise_boundary:{rules:[65,66,67,68],inclusive:!1},boundary:{rules:[65,66,67,68],inclusive:!1},system_ext_queue:{rules:[65,66,67,68],inclusive:!1},system_ext_db:{rules:[65,66,67,68],inclusive:!1},system_ext:{rules:[65,66,67,68],inclusive:!1},system_queue:{rules:[65,66,67,68],inclusive:!1},system_db:{rules:[65,66,67,68],inclusive:!1},system:{rules:[65,66,67,68],inclusive:!1},person_ext:{rules:[65,66,67,68],inclusive:!1},person:{rules:[65,66,67,68],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,82,83,84,85],inclusive:!0}}};function st(){this.yy={}}return at.lexer=it,st.prototype=at,at.Parser=st,new st}());l.parser=l;const o=l;let h=[],d=[""],u="global",p="",y=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],f=[],b="",g=!1,x=4,_=2;var m;const E=function(t){return null==t?h:h.filter((e=>e.parentBoundary===t))},A=function(t){return null==t?y:y.filter((e=>e.parentBoundary===t))},S=function(){return g},C={addPersonOrSystem:function(t,e,n,a,i,s,r){if(null===e||null===n)return;let l={};const o=h.find((t=>t.alias===e));if(o&&e===o.alias?l=o:(l.alias=e,h.push(l)),l.label=null==n?{text:""}:{text:n},null==a)l.descr={text:""};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];l[t]={text:e}}else l.descr={text:a};if("object"==typeof i){let[t,e]=Object.entries(i)[0];l[t]=e}else l.sprite=i;if("object"==typeof s){let[t,e]=Object.entries(s)[0];l[t]=e}else l.tags=s;if("object"==typeof r){let[t,e]=Object.entries(r)[0];l[t]=e}else l.link=r;l.typeC4Shape={text:t},l.parentBoundary=u,l.wrap=S()},addPersonOrSystemBoundary:function(t,e,n,a,i){if(null===t||null===e)return;let s={};const r=y.find((e=>e.alias===t));if(r&&t===r.alias?s=r:(s.alias=t,y.push(s)),s.label=null==e?{text:""}:{text:e},null==n)s.type={text:"system"};else if("object"==typeof n){let[t,e]=Object.entries(n)[0];s[t]={text:e}}else s.type={text:n};if("object"==typeof a){let[t,e]=Object.entries(a)[0];s[t]=e}else s.tags=a;if("object"==typeof i){let[t,e]=Object.entries(i)[0];s[t]=e}else s.link=i;s.parentBoundary=u,s.wrap=S(),p=u,u=t,d.push(p)},addContainer:function(t,e,n,a,i,s,r,l){if(null===e||null===n)return;let o={};const c=h.find((t=>t.alias===e));if(c&&e===c.alias?o=c:(o.alias=e,h.push(o)),o.label=null==n?{text:""}:{text:n},null==a)o.techn={text:""};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];o[t]={text:e}}else o.techn={text:a};if(null==i)o.descr={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];o[t]={text:e}}else o.descr={text:i};if("object"==typeof s){let[t,e]=Object.entries(s)[0];o[t]=e}else o.sprite=s;if("object"==typeof r){let[t,e]=Object.entries(r)[0];o[t]=e}else o.tags=r;if("object"==typeof l){let[t,e]=Object.entries(l)[0];o[t]=e}else o.link=l;o.wrap=S(),o.typeC4Shape={text:t},o.parentBoundary=u},addContainerBoundary:function(t,e,n,a,i){if(null===t||null===e)return;let s={};const r=y.find((e=>e.alias===t));if(r&&t===r.alias?s=r:(s.alias=t,y.push(s)),s.label=null==e?{text:""}:{text:e},null==n)s.type={text:"container"};else if("object"==typeof n){let[t,e]=Object.entries(n)[0];s[t]={text:e}}else s.type={text:n};if("object"==typeof a){let[t,e]=Object.entries(a)[0];s[t]=e}else s.tags=a;if("object"==typeof i){let[t,e]=Object.entries(i)[0];s[t]=e}else s.link=i;s.parentBoundary=u,s.wrap=S(),p=u,u=t,d.push(p)},addComponent:function(t,e,n,a,i,s,r,l){if(null===e||null===n)return;let o={};const c=h.find((t=>t.alias===e));if(c&&e===c.alias?o=c:(o.alias=e,h.push(o)),o.label=null==n?{text:""}:{text:n},null==a)o.techn={text:""};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];o[t]={text:e}}else o.techn={text:a};if(null==i)o.descr={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];o[t]={text:e}}else o.descr={text:i};if("object"==typeof s){let[t,e]=Object.entries(s)[0];o[t]=e}else o.sprite=s;if("object"==typeof r){let[t,e]=Object.entries(r)[0];o[t]=e}else o.tags=r;if("object"==typeof l){let[t,e]=Object.entries(l)[0];o[t]=e}else o.link=l;o.wrap=S(),o.typeC4Shape={text:t},o.parentBoundary=u},addDeploymentNode:function(t,e,n,a,i,s,r,l){if(null===e||null===n)return;let o={};const c=y.find((t=>t.alias===e));if(c&&e===c.alias?o=c:(o.alias=e,y.push(o)),o.label=null==n?{text:""}:{text:n},null==a)o.type={text:"node"};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];o[t]={text:e}}else o.type={text:a};if(null==i)o.descr={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];o[t]={text:e}}else o.descr={text:i};if("object"==typeof r){let[t,e]=Object.entries(r)[0];o[t]=e}else o.tags=r;if("object"==typeof l){let[t,e]=Object.entries(l)[0];o[t]=e}else o.link=l;o.nodeType=t,o.parentBoundary=u,o.wrap=S(),p=u,u=e,d.push(p)},popBoundaryParseStack:function(){u=p,d.pop(),p=d.pop(),d.push(p)},addRel:function(t,e,n,a,i,s,r,l,o){if(null==t||null==e||null==n||null==a)return;let c={};const h=f.find((t=>t.from===e&&t.to===n));if(h?c=h:f.push(c),c.type=t,c.from=e,c.to=n,c.label={text:a},null==i)c.techn={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];c[t]={text:e}}else c.techn={text:i};if(null==s)c.descr={text:""};else if("object"==typeof s){let[t,e]=Object.entries(s)[0];c[t]={text:e}}else c.descr={text:s};if("object"==typeof r){let[t,e]=Object.entries(r)[0];c[t]=e}else c.sprite=r;if("object"==typeof l){let[t,e]=Object.entries(l)[0];c[t]=e}else c.tags=l;if("object"==typeof o){let[t,e]=Object.entries(o)[0];c[t]=e}else c.link=o;c.wrap=S()},updateElStyle:function(t,e,n,a,i,s,r,l,o,c,d){let u=h.find((t=>t.alias===e));if(void 0!==u||(u=y.find((t=>t.alias===e)),void 0!==u)){if(null!=n)if("object"==typeof n){let[t,e]=Object.entries(n)[0];u[t]=e}else u.bgColor=n;if(null!=a)if("object"==typeof a){let[t,e]=Object.entries(a)[0];u[t]=e}else u.fontColor=a;if(null!=i)if("object"==typeof i){let[t,e]=Object.entries(i)[0];u[t]=e}else u.borderColor=i;if(null!=s)if("object"==typeof s){let[t,e]=Object.entries(s)[0];u[t]=e}else u.shadowing=s;if(null!=r)if("object"==typeof r){let[t,e]=Object.entries(r)[0];u[t]=e}else u.shape=r;if(null!=l)if("object"==typeof l){let[t,e]=Object.entries(l)[0];u[t]=e}else u.sprite=l;if(null!=o)if("object"==typeof o){let[t,e]=Object.entries(o)[0];u[t]=e}else u.techn=o;if(null!=c)if("object"==typeof c){let[t,e]=Object.entries(c)[0];u[t]=e}else u.legendText=c;if(null!=d)if("object"==typeof d){let[t,e]=Object.entries(d)[0];u[t]=e}else u.legendSprite=d}},updateRelStyle:function(t,e,n,a,i,s,r){const l=f.find((t=>t.from===e&&t.to===n));if(void 0!==l){if(null!=a)if("object"==typeof a){let[t,e]=Object.entries(a)[0];l[t]=e}else l.textColor=a;if(null!=i)if("object"==typeof i){let[t,e]=Object.entries(i)[0];l[t]=e}else l.lineColor=i;if(null!=s)if("object"==typeof s){let[t,e]=Object.entries(s)[0];l[t]=parseInt(e)}else l.offsetX=parseInt(s);if(null!=r)if("object"==typeof r){let[t,e]=Object.entries(r)[0];l[t]=parseInt(e)}else l.offsetY=parseInt(r)}},updateLayoutConfig:function(t,e,n){let a=x,i=_;if("object"==typeof e){const t=Object.values(e)[0];a=parseInt(t)}else a=parseInt(e);if("object"==typeof n){const t=Object.values(n)[0];i=parseInt(t)}else i=parseInt(n);a>=1&&(x=a),i>=1&&(_=i)},autoWrap:S,setWrap:function(t){g=t},getC4ShapeArray:E,getC4Shape:function(t){return h.find((e=>e.alias===t))},getC4ShapeKeys:function(t){return Object.keys(E(t))},getBoundaries:A,getBoundarys:A,getCurrentBoundaryParse:function(){return u},getParentBoundaryParse:function(){return p},getRels:function(){return f},getTitle:function(){return b},getC4Type:function(){return m},getC4ShapeInRow:function(){return x},getC4BoundaryInRow:function(){return _},setAccTitle:a.s,getAccTitle:a.g,getAccDescription:a.a,setAccDescription:a.b,getConfig:()=>(0,a.c)().c4,clear:function(){h=[],y=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],p="",u="global",d=[""],f=[],d=[""],b="",g=!1,x=4,_=2},LINETYPE:{SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},setTitle:function(t){let e=(0,a.d)(t,(0,a.c)());b=e},setC4Type:function(t){let e=(0,a.d)(t,(0,a.c)());m=e}},k=function(t,e){return(0,s.d)(t,e)},O=function(t,e,n,a,i,s){const l=t.append("image");l.attr("width",e),l.attr("height",n),l.attr("x",a),l.attr("y",i);let o=s.startsWith("data:image/png;base64")?s:(0,r.Jf)(s);l.attr("xlink:href",o)},v=(t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),T=function(){function t(t,e,n,a,s,r,l){i(e.append("text").attr("x",n+s/2).attr("y",a+r/2+5).style("text-anchor","middle").text(t),l)}function e(t,e,n,s,r,l,o,c){const{fontSize:h,fontFamily:d,fontWeight:u}=c,p=t.split(a.e.lineBreakRegex);for(let a=0;a>"),e.typeC4Shape.text){case"person":case"external_person":O(c,48,48,e.x+e.width/2-24,e.y+e.image.Y,o)}let u=n[e.typeC4Shape.text+"Font"]();return u.fontWeight="bold",u.fontSize=u.fontSize+2,u.fontColor=l,T(n)(e.label.text,c,e.x,e.y+e.label.Y,e.width,e.height,{fill:l},u),u=n[e.typeC4Shape.text+"Font"](),u.fontColor=l,e.techn&&""!==(null==(a=e.techn)?void 0:a.text)?T(n)(e.techn.text,c,e.x,e.y+e.techn.Y,e.width,e.height,{fill:l,"font-style":"italic"},u):e.type&&""!==e.type.text&&T(n)(e.type.text,c,e.x,e.y+e.type.Y,e.width,e.height,{fill:l,"font-style":"italic"},u),e.descr&&""!==e.descr.text&&(u=n.personFont(),u.fontColor=l,T(n)(e.descr.text,c,e.x,e.y+e.descr.Y,e.width,e.height,{fill:l},u)),e.height},D=(t,e,n)=>{const a=t.append("g");let i=0;for(let s of e){let t=s.textColor?s.textColor:"#444444",e=s.lineColor?s.lineColor:"#444444",r=s.offsetX?parseInt(s.offsetX):0,l=s.offsetY?parseInt(s.offsetY):0,o="";if(0===i){let t=a.append("line");t.attr("x1",s.startPoint.x),t.attr("y1",s.startPoint.y),t.attr("x2",s.endPoint.x),t.attr("y2",s.endPoint.y),t.attr("stroke-width","1"),t.attr("stroke",e),t.style("fill","none"),"rel_b"!==s.type&&t.attr("marker-end","url("+o+"#arrowhead)"),"birel"!==s.type&&"rel_b"!==s.type||t.attr("marker-start","url("+o+"#arrowend)"),i=-1}else{let t=a.append("path");t.attr("fill","none").attr("stroke-width","1").attr("stroke",e).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",s.startPoint.x).replaceAll("starty",s.startPoint.y).replaceAll("controlx",s.startPoint.x+(s.endPoint.x-s.startPoint.x)/2-(s.endPoint.x-s.startPoint.x)/4).replaceAll("controly",s.startPoint.y+(s.endPoint.y-s.startPoint.y)/2).replaceAll("stopx",s.endPoint.x).replaceAll("stopy",s.endPoint.y)),"rel_b"!==s.type&&t.attr("marker-end","url("+o+"#arrowhead)"),"birel"!==s.type&&"rel_b"!==s.type||t.attr("marker-start","url("+o+"#arrowend)")}let c=n.messageFont();T(n)(s.label.text,a,Math.min(s.startPoint.x,s.endPoint.x)+Math.abs(s.endPoint.x-s.startPoint.x)/2+r,Math.min(s.startPoint.y,s.endPoint.y)+Math.abs(s.endPoint.y-s.startPoint.y)/2+l,s.label.width,s.label.height,{fill:t},c),s.techn&&""!==s.techn.text&&(c=n.messageFont(),T(n)("["+s.techn.text+"]",a,Math.min(s.startPoint.x,s.endPoint.x)+Math.abs(s.endPoint.x-s.startPoint.x)/2+r,Math.min(s.startPoint.y,s.endPoint.y)+Math.abs(s.endPoint.y-s.startPoint.y)/2+n.messageFontSize+5+l,Math.max(s.label.width,s.techn.width),s.techn.height,{fill:t,"font-style":"italic"},c))}},N=function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},P=function(t){t.append("defs").append("marker").attr("id","arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},M=function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},j=function(t){const e=t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);e.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),e.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},B=function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},L=function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},Y=function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")};let I=0,U=0,F=4,X=2;l.yy=C;let z={};class W{constructor(t){this.name="",this.data={},this.data.startx=void 0,this.data.stopx=void 0,this.data.starty=void 0,this.data.stopy=void 0,this.data.widthLimit=void 0,this.nextData={},this.nextData.startx=void 0,this.nextData.stopx=void 0,this.nextData.starty=void 0,this.nextData.stopy=void 0,this.nextData.cnt=0,Q(t.db.getConfig())}setData(t,e,n,a){this.nextData.startx=this.data.startx=t,this.nextData.stopx=this.data.stopx=e,this.nextData.starty=this.data.starty=n,this.nextData.stopy=this.data.stopy=a}updateVal(t,e,n,a){void 0===t[e]?t[e]=n:t[e]=a(n,t[e])}insert(t){this.nextData.cnt=this.nextData.cnt+1;let e=this.nextData.startx===this.nextData.stopx?this.nextData.stopx+t.margin:this.nextData.stopx+2*t.margin,n=e+t.width,a=this.nextData.starty+2*t.margin,i=a+t.height;(e>=this.data.widthLimit||n>=this.data.widthLimit||this.nextData.cnt>F)&&(e=this.nextData.startx+t.margin+z.nextLinePaddingX,a=this.nextData.stopy+2*t.margin,this.nextData.stopx=n=e+t.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=i=a+t.height,this.nextData.cnt=1),t.x=e,t.y=a,this.updateVal(this.data,"startx",e,Math.min),this.updateVal(this.data,"starty",a,Math.min),this.updateVal(this.data,"stopx",n,Math.max),this.updateVal(this.data,"stopy",i,Math.max),this.updateVal(this.nextData,"startx",e,Math.min),this.updateVal(this.nextData,"starty",a,Math.min),this.updateVal(this.nextData,"stopx",n,Math.max),this.updateVal(this.nextData,"stopy",i,Math.max)}init(t){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},Q(t.db.getConfig())}bumpLastMargin(t){this.data.stopx+=t,this.data.stopy+=t}}const Q=function(t){(0,a.f)(z,t),t.fontFamily&&(z.personFontFamily=z.systemFontFamily=z.messageFontFamily=t.fontFamily),t.fontSize&&(z.personFontSize=z.systemFontSize=z.messageFontSize=t.fontSize),t.fontWeight&&(z.personFontWeight=z.systemFontWeight=z.messageFontWeight=t.fontWeight)},$=(t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),q=t=>({fontFamily:t.boundaryFontFamily,fontSize:t.boundaryFontSize,fontWeight:t.boundaryFontWeight});function V(t,e,n,i,s){if(!e[t].width)if(n)e[t].text=(0,a.w)(e[t].text,s,i),e[t].textLines=e[t].text.split(a.e.lineBreakRegex).length,e[t].width=s,e[t].height=(0,a.j)(e[t].text,i);else{let n=e[t].text.split(a.e.lineBreakRegex);e[t].textLines=n.length;let s=0;e[t].height=0,e[t].width=0;for(const r of n)e[t].width=Math.max((0,a.h)(r,i),e[t].width),s=(0,a.j)(r,i),e[t].height=e[t].height+s}}const G=function(t,e,n){e.x=n.data.startx,e.y=n.data.starty,e.width=n.data.stopx-n.data.startx,e.height=n.data.stopy-n.data.starty,e.label.y=z.c4ShapeMargin-35;let i=e.wrap&&z.wrap,s=q(z);s.fontSize=s.fontSize+2,s.fontWeight="bold",V("label",e,i,s,(0,a.h)(e.label.text,s)),w(t,e,z)},H=function(t,e,n,i){let s=0;for(const r of i){s=0;const i=n[r];let l=$(z,i.typeC4Shape.text);switch(l.fontSize=l.fontSize-2,i.typeC4Shape.width=(0,a.h)("\xab"+i.typeC4Shape.text+"\xbb",l),i.typeC4Shape.height=l.fontSize+2,i.typeC4Shape.Y=z.c4ShapePadding,s=i.typeC4Shape.Y+i.typeC4Shape.height-4,i.image={width:0,height:0,Y:0},i.typeC4Shape.text){case"person":case"external_person":i.image.width=48,i.image.height=48,i.image.Y=s,s=i.image.Y+i.image.height}i.sprite&&(i.image.width=48,i.image.height=48,i.image.Y=s,s=i.image.Y+i.image.height);let o=i.wrap&&z.wrap,c=z.width-2*z.c4ShapePadding,h=$(z,i.typeC4Shape.text);if(h.fontSize=h.fontSize+2,h.fontWeight="bold",V("label",i,o,h,c),i.label.Y=s+8,s=i.label.Y+i.label.height,i.type&&""!==i.type.text){i.type.text="["+i.type.text+"]",V("type",i,o,$(z,i.typeC4Shape.text),c),i.type.Y=s+5,s=i.type.Y+i.type.height}else if(i.techn&&""!==i.techn.text){i.techn.text="["+i.techn.text+"]",V("techn",i,o,$(z,i.techn.text),c),i.techn.Y=s+5,s=i.techn.Y+i.techn.height}let d=s,u=i.label.width;if(i.descr&&""!==i.descr.text){V("descr",i,o,$(z,i.typeC4Shape.text),c),i.descr.Y=s+20,s=i.descr.Y+i.descr.height,u=Math.max(i.label.width,i.descr.width),d=s-5*i.descr.textLines}u+=z.c4ShapePadding,i.width=Math.max(i.width||z.width,u,z.width),i.height=Math.max(i.height||z.height,d,z.height),i.margin=i.margin||z.c4ShapeMargin,t.insert(i),R(e,i,z)}t.bumpLastMargin(z.c4ShapeMargin)};class K{constructor(t,e){this.x=t,this.y=e}}let J=function(t,e){let n=t.x,a=t.y,i=e.x,s=e.y,r=n+t.width/2,l=a+t.height/2,o=Math.abs(n-i),c=Math.abs(a-s),h=c/o,d=t.height/t.width,u=null;return a==s&&ni?u=new K(n,l):n==i&&as&&(u=new K(r,a)),n>i&&a=h?new K(n,l+h*t.width/2):new K(r-o/c*t.height/2,a+t.height):n=h?new K(n+t.width,l+h*t.width/2):new K(r+o/c*t.height/2,a+t.height):ns?u=d>=h?new K(n+t.width,l-h*t.width/2):new K(r+t.height/2*o/c,a):n>i&&a>s&&(u=d>=h?new K(n,l-t.width/2*h):new K(r-t.height/2*o/c,a)),u},Z=function(t,e){let n={x:0,y:0};n.x=e.x+e.width/2,n.y=e.y+e.height/2;let a=J(t,n);return n.x=t.x+t.width/2,n.y=t.y+t.height/2,{startPoint:a,endPoint:J(e,n)}};function tt(t,e,n,a,i){let s=new W(i);s.data.widthLimit=n.data.widthLimit/Math.min(X,a.length);for(let[r,l]of a.entries()){let a=0;l.image={width:0,height:0,Y:0},l.sprite&&(l.image.width=48,l.image.height=48,l.image.Y=a,a=l.image.Y+l.image.height);let o=l.wrap&&z.wrap,c=q(z);if(c.fontSize=c.fontSize+2,c.fontWeight="bold",V("label",l,o,c,s.data.widthLimit),l.label.Y=a+8,a=l.label.Y+l.label.height,l.type&&""!==l.type.text){l.type.text="["+l.type.text+"]",V("type",l,o,q(z),s.data.widthLimit),l.type.Y=a+5,a=l.type.Y+l.type.height}if(l.descr&&""!==l.descr.text){let t=q(z);t.fontSize=t.fontSize-2,V("descr",l,o,t,s.data.widthLimit),l.descr.Y=a+20,a=l.descr.Y+l.descr.height}if(0==r||r%X==0){let t=n.data.startx+z.diagramMarginX,e=n.data.stopy+z.diagramMarginY+a;s.setData(t,t,e,e)}else{let t=s.data.stopx!==s.data.startx?s.data.stopx+z.diagramMarginX:s.data.startx,e=s.data.starty;s.setData(t,t,e,e)}s.name=l.alias;let h=i.db.getC4ShapeArray(l.alias),d=i.db.getC4ShapeKeys(l.alias);d.length>0&&H(s,t,h,d),e=l.alias;let u=i.db.getBoundarys(e);u.length>0&&tt(t,e,s,u,i),"global"!==l.alias&&G(t,l,s),n.data.stopy=Math.max(s.data.stopy+z.c4ShapeMargin,n.data.stopy),n.data.stopx=Math.max(s.data.stopx+z.c4ShapeMargin,n.data.stopx),I=Math.max(I,n.data.stopx),U=Math.max(U,n.data.stopy)}}const et={drawPersonOrSystemArray:H,drawBoundary:G,setConf:Q,draw:function(t,e,n,s){z=(0,a.c)().c4;const r=(0,a.c)().securityLevel;let l;"sandbox"===r&&(l=(0,i.Ltv)("#i"+e));const o="sandbox"===r?(0,i.Ltv)(l.nodes()[0].contentDocument.body):(0,i.Ltv)("body");let c=s.db;s.db.setWrap(z.wrap),F=c.getC4ShapeInRow(),X=c.getC4BoundaryInRow(),a.l.debug(`C:${JSON.stringify(z,null,2)}`);const h="sandbox"===r?o.select(`[id="${e}"]`):(0,i.Ltv)(`[id="${e}"]`);L(h),B(h),Y(h);let d=new W(s);d.setData(z.diagramMarginX,z.diagramMarginX,z.diagramMarginY,z.diagramMarginY),d.data.widthLimit=screen.availWidth,I=z.diagramMarginX,U=z.diagramMarginY;const u=s.db.getTitle();tt(h,"",d,s.db.getBoundarys(""),s),N(h),P(h),j(h),M(h),function(t,e,n,i){let s=0;for(let l of e){s+=1;let t=l.wrap&&z.wrap,e={fontFamily:(r=z).messageFontFamily,fontSize:r.messageFontSize,fontWeight:r.messageFontWeight};"C4Dynamic"===i.db.getC4Type()&&(l.label.text=s+": "+l.label.text);let o=(0,a.h)(l.label.text,e);V("label",l,t,e,o),l.techn&&""!==l.techn.text&&(o=(0,a.h)(l.techn.text,e),V("techn",l,t,e,o)),l.descr&&""!==l.descr.text&&(o=(0,a.h)(l.descr.text,e),V("descr",l,t,e,o));let c=n(l.from),h=n(l.to),d=Z(c,h);l.startPoint=d.startPoint,l.endPoint=d.endPoint}var r;D(t,e,z)}(h,s.db.getRels(),s.db.getC4Shape,s),d.data.stopx=I,d.data.stopy=U;const p=d.data;let y=p.stopy-p.starty+2*z.diagramMarginY;const f=p.stopx-p.startx+2*z.diagramMarginX;u&&h.append("text").text(u).attr("x",(p.stopx-p.startx)/2-4*z.diagramMarginX).attr("y",p.starty+z.diagramMarginY),(0,a.i)(h,y,f,z.useMaxWidth);const b=u?60:0;h.attr("viewBox",p.startx-z.diagramMarginX+" -"+(z.diagramMarginY+b)+" "+f+" "+(y+b)),a.l.debug("models:",p)}},nt={parser:o,db:C,renderer:et,styles:t=>`.person {\n stroke: ${t.personBorder};\n fill: ${t.personBkg};\n }\n`,init:({c4:t,wrap:e})=>{et.setConf(t),C.setWrap(e)}}},28259:(t,e,n)=>{n.d(e,{a:()=>r,b:()=>c,c:()=>o,d:()=>s,e:()=>d,f:()=>l,g:()=>h});var a=n(16750),i=n(99702);const s=(t,e)=>{const n=t.append("rect");if(n.attr("x",e.x),n.attr("y",e.y),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("width",e.width),n.attr("height",e.height),e.name&&n.attr("name",e.name),void 0!==e.rx&&n.attr("rx",e.rx),void 0!==e.ry&&n.attr("ry",e.ry),void 0!==e.attrs)for(const a in e.attrs)n.attr(a,e.attrs[a]);return void 0!==e.class&&n.attr("class",e.class),n},r=(t,e)=>{const n={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};s(t,n).lower()},l=(t,e)=>{const n=e.text.replace(i.J," "),a=t.append("text");a.attr("x",e.x),a.attr("y",e.y),a.attr("class","legend"),a.style("text-anchor",e.anchor),void 0!==e.class&&a.attr("class",e.class);const s=a.append("tspan");return s.attr("x",e.x+2*e.textMargin),s.text(n),a},o=(t,e,n,i)=>{const s=t.append("image");s.attr("x",e),s.attr("y",n);const r=(0,a.Jf)(i);s.attr("xlink:href",r)},c=(t,e,n,i)=>{const s=t.append("use");s.attr("x",e),s.attr("y",n);const r=(0,a.Jf)(i);s.attr("xlink:href",`#${r}`)},h=()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),d=()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0})}}]); \ No newline at end of file diff --git a/assets/js/1a4e3797.df845592.js b/assets/js/1a4e3797.df845592.js new file mode 100644 index 0000000000..faac741da5 --- /dev/null +++ b/assets/js/1a4e3797.df845592.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2138],{53465:(e,t,r)=>{r.d(t,{W:()=>u});var s=r(96540),a=r(44586);const n=["zero","one","two","few","many","other"];function c(e){return n.filter((t=>e.includes(t)))}const l={locale:"en",pluralForms:c(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,a.A)();return(0,s.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:c(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),l}}),[e])}function u(){const e=o();return{selectMessage:(t,r)=>function(e,t,r){const s=e.split("|");if(1===s.length)return s[0];s.length>r.pluralForms.length&&console.error(`For locale=${r.locale}, a maximum of ${r.pluralForms.length} plural forms are expected (${r.pluralForms.join(",")}), but the message contains ${s.length}: ${e}`);const a=r.select(t),n=r.pluralForms.indexOf(a);return s[Math.min(n,s.length-1)]}(r,t,e)}}},41283:(e,t,r)=>{r.r(t),r.d(t,{default:()=>b});var s=r(96540),a=r(44586),n=r(72415),c=r(5260),l=r(28774),o=r(21312),u=r(53465),h=r(5391),i=r(56347),m=r(92303),d=r(11088);const p=function(){const e=(0,m.A)(),t=(0,i.W6)(),r=(0,i.zy)(),{siteConfig:{baseUrl:s}}=(0,a.A)(),n=e?new URLSearchParams(r.search):null,c=n?.get("q")||"",l=n?.get("ctx")||"",o=n?.get("version")||"",u=e=>{const t=new URLSearchParams(r.search);return e?t.set("q",e):t.delete("q"),t};return{searchValue:c,searchContext:l&&Array.isArray(d.Hg)&&d.Hg.some((e=>"string"==typeof e?e===l:e.path===l))?l:"",searchVersion:o,updateSearchPath:e=>{const r=u(e);t.replace({search:r.toString()})},updateSearchContext:e=>{const s=new URLSearchParams(r.search);s.set("ctx",e),t.replace({search:s.toString()})},generateSearchPageLink:e=>{const t=u(e);return`${s}search?${t.toString()}`}}};var g=r(5891),x=r(32384),f=r(69913),y=r(86841),C=r(43810),S=r(27674),j=r(2849),A=r(4471);const w={searchContextInput:"searchContextInput_mXoe",searchQueryInput:"searchQueryInput_CFBF",searchResultItem:"searchResultItem_U687",searchResultItemPath:"searchResultItemPath_uIbk",searchResultItemSummary:"searchResultItemSummary_oZHr",searchQueryColumn:"searchQueryColumn_q7nx",searchContextColumn:"searchContextColumn_oWAF"};var I=r(43385),v=r(74848);function R(){const{siteConfig:{baseUrl:e},i18n:{currentLocale:t}}=(0,a.A)(),{selectMessage:r}=(0,u.W)(),{searchValue:n,searchContext:l,searchVersion:i,updateSearchPath:m,updateSearchContext:f}=p(),[y,C]=(0,s.useState)(n),[S,A]=(0,s.useState)(),[R,b]=(0,s.useState)(),F=`${e}${i}`,T=(0,s.useMemo)((()=>y?(0,o.T)({id:"theme.SearchPage.existingResultsTitle",message:'Search results for "{query}"',description:"The search page title for non-empty query"},{query:y}):(0,o.T)({id:"theme.SearchPage.emptyResultsTitle",message:"Search the documentation",description:"The search page title for empty query"})),[y]);(0,s.useEffect)((()=>{m(y),S&&(y?S(y,(e=>{b(e)})):b(void 0))}),[y,S]);const _=(0,s.useCallback)((e=>{C(e.target.value)}),[]);return(0,s.useEffect)((()=>{n&&n!==y&&C(n)}),[n]),(0,s.useEffect)((()=>{!async function(){const{wrappedIndexes:e,zhDictionary:t}=!Array.isArray(d.Hg)||l||d.dz?await(0,g.Z)(F,l):{wrappedIndexes:[],zhDictionary:[]};A((()=>(0,x.m)(e,t,100)))}()}),[l,F]),(0,v.jsxs)(s.Fragment,{children:[(0,v.jsxs)(c.A,{children:[(0,v.jsx)("meta",{property:"robots",content:"noindex, follow"}),(0,v.jsx)("title",{children:T})]}),(0,v.jsxs)("div",{className:"container margin-vert--lg",children:[(0,v.jsx)("h1",{children:T}),(0,v.jsxs)("div",{className:"row",children:[(0,v.jsx)("div",{className:(0,h.A)("col",{[w.searchQueryColumn]:Array.isArray(d.Hg),"col--9":Array.isArray(d.Hg),"col--12":!Array.isArray(d.Hg)}),children:(0,v.jsx)("input",{type:"search",name:"q",className:w.searchQueryInput,"aria-label":"Search",onChange:_,value:y,autoComplete:"off",autoFocus:!0})}),Array.isArray(d.Hg)?(0,v.jsx)("div",{className:(0,h.A)("col","col--3","padding-left--none",w.searchContextColumn),children:(0,v.jsxs)("select",{name:"search-context",className:w.searchContextInput,id:"context-selector",value:l,onChange:e=>f(e.target.value),children:[d.dz&&(0,v.jsx)("option",{value:"",children:(0,o.T)({id:"theme.SearchPage.searchContext.everywhere",message:"Everywhere"})}),d.Hg.map((e=>{const{label:r,path:s}=(0,I.p)(e,t);return(0,v.jsx)("option",{value:s,children:r},s)}))]})}):null]}),!S&&y&&(0,v.jsx)("div",{children:(0,v.jsx)(j.A,{})}),R&&(R.length>0?(0,v.jsx)("p",{children:r(R.length,(0,o.T)({id:"theme.SearchPage.documentsFound.plurals",message:"1 document found|{count} documents found",description:'Pluralized label for "{count} documents found". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)'},{count:R.length}))}):(0,v.jsx)("p",{children:(0,o.T)({id:"theme.SearchPage.noResultsText",message:"No documents were found",description:"The paragraph for empty search result"})})),(0,v.jsx)("section",{children:R&&R.map((e=>(0,v.jsx)(P,{searchResult:e},e.document.i)))})]})]})}function P(e){let{searchResult:{document:t,type:r,page:s,tokens:a,metadata:n}}=e;const c=r===f.i.Title,o=r===f.i.Keywords,u=r===f.i.Description,h=u||o,i=c||h,m=r===f.i.Content,p=(c?t.b:s.b).slice(),g=m||h?t.s:t.t;i||p.push(s.t);let x="";if(d.CU&&a.length>0){const e=new URLSearchParams;for(const t of a)e.append("_highlight",t);x=`?${e.toString()}`}return(0,v.jsxs)("article",{className:w.searchResultItem,children:[(0,v.jsx)("h2",{children:(0,v.jsx)(l.A,{to:t.u+x+(t.h||""),dangerouslySetInnerHTML:{__html:m||h?(0,y.Z)(g,a):(0,C.C)(g,(0,S.g)(n,"t"),a,100)}})}),p.length>0&&(0,v.jsx)("p",{className:w.searchResultItemPath,children:(0,A.$)(p)}),(m||u)&&(0,v.jsx)("p",{className:w.searchResultItemSummary,dangerouslySetInnerHTML:{__html:(0,C.C)(t.t,(0,S.g)(n,"t"),a,100)}})]})}const b=function(){return(0,v.jsx)(n.A,{children:(0,v.jsx)(R,{})})}}}]); \ No newline at end of file diff --git a/assets/js/1c663d3d.d38f16f7.js b/assets/js/1c663d3d.d38f16f7.js new file mode 100644 index 0000000000..3ff45cc445 --- /dev/null +++ b/assets/js/1c663d3d.d38f16f7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3119],{21038:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>c,toc:()=>l});var i=n(74848),o=n(28453);const a={title:"Getting Started",sidebar_position:2,description:"Getting started with eCalc"},r="API Reference",c={id:"about/getting_started/index",title:"Getting Started",description:"Getting started with eCalc",source:"@site/docs/about/getting_started/index.md",sourceDirName:"about/getting_started",slug:"/about/getting_started/",permalink:"/ecalc/docs/about/getting_started/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/getting_started/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Getting Started",sidebar_position:2,description:"Getting started with eCalc"},sidebar:"about",previous:{title:"Introduction",permalink:"/ecalc/docs/about/"},next:{title:"CLI",permalink:"/ecalc/docs/about/getting_started/cli/"}},s={},l=[{value:"What method should I choose?",id:"what-method-should-i-choose",level:2},{value:"eCalc CLI",id:"ecalc-cli",level:3},{value:"Python Library",id:"python-library",level:3}];function d(e){const t={a:"a",admonition:"admonition",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"api-reference",children:"API Reference"}),"\n",(0,i.jsx)(t.admonition,{type:"info",children:(0,i.jsxs)(t.p,{children:["Currently the ",(0,i.jsx)(t.em,{children:"only"})," officially supported method is the ",(0,i.jsx)(t.a,{href:"/ecalc/docs/about/getting_started/cli/",children:"eCalc CLI"})," using eCalc YAML models."]})}),"\n",(0,i.jsx)(t.p,{children:"There are three options to run eCalc models:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"/ecalc/docs/about/getting_started/cli/",children:"eCalc CLI"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"/ecalc/docs/about/getting_started/library/",children:"eCalc Python Library"})}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"what-method-should-i-choose",children:"What method should I choose?"}),"\n",(0,i.jsx)(t.h3,{id:"ecalc-cli",children:"eCalc CLI"}),"\n",(0,i.jsxs)(t.p,{children:["Choose the ",(0,i.jsx)(t.a,{href:"/ecalc/docs/about/getting_started/cli/",children:"eCalc CLI"})," option if you:"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Don't know much about programming"}),"\n",(0,i.jsx)(t.li,{children:"Have simple requirements"}),"\n",(0,i.jsx)(t.li,{children:"Can define the eCalc models statically"}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"python-library",children:"Python Library"}),"\n",(0,i.jsxs)(t.p,{children:["Choose the ",(0,i.jsx)(t.a,{href:"/ecalc/docs/about/getting_started/library/",children:"Python Library"})," option if you:"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Are a developer or advanced user, and want to build eCalc models and get results programmatically"}),"\n",(0,i.jsx)(t.li,{children:"Use Python, and you need to use (parts of) eCalc as a dependency"}),"\n",(0,i.jsx)(t.li,{children:'Need access to "inner core functionality" of eCalc'}),"\n"]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsx)(t.p,{children:"Python Library is not yet officially available and not recommended to use due to upcoming breaking changes very soon"})})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>c});var i=n(96540);const o={},a=i.createContext(o);function r(e){const t=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1d55f518.ed9ff422.js b/assets/js/1d55f518.ed9ff422.js new file mode 100644 index 0000000000..80398b5969 --- /dev/null +++ b/assets/js/1d55f518.ed9ff422.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2354],{46403:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>i,toc:()=>d});var r=n(74848),o=n(28453);const s={},a="END",i={id:"about/references/END",title:"END",description:"END",source:"@site/docs/about/references/END.md",sourceDirName:"about/references",slug:"/about/references/END",permalink:"/ecalc/docs/about/references/END",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/END.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"EMITTER_MODEL",permalink:"/ecalc/docs/about/references/EMITTER_MODEL"},next:{title:"ENERGYFUNCTION",permalink:"/ecalc/docs/about/references/ENERGYFUNCTION"}},c={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"end",children:"END"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"/ecalc/docs/about/references/END",children:"END"})}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Required"}),(0,r.jsx)(t.th,{children:"Child of"}),(0,r.jsx)(t.th,{children:"Children/Options"})]})}),(0,r.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"No"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"None"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"None"})})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"description",children:"Description"}),"\n",(0,r.jsx)(t.p,{children:"Global end date for eCalc to stop energy and emission calculations. It is recommended that you have control of which date you want data to be calculated and exported for."}),"\n",(0,r.jsx)(t.p,{children:'If you specify the end date as 2080-01-01, the last period to be calculated is 2079 is included in the output. The hours, minutes and seconds of the day are implicitly set to "00:00:00", so the counting ends at midnight on January 1st 2080 (2079-12-31 23:59:59).'}),"\n",(0,r.jsx)(t.p,{children:"You can provide a date that is after the global time vector, but it is recommended to set it to the end of your timeseries data. Normally the timeseries do not provide this information directly. The last timestep provided in a timeseries is e.g. 2079-01-01, which would often mean that the data changed at that point,\nand will e.g. be valid 1 year from then (if we work with YEARLY output frequency). To make sure that eCalc stops at the correct place, you should therefore specify the exclusive date of the data."}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.a,{href:"/ecalc/docs/about/references/START",children:"START"})," keyword have similar behaviour."]}),"\n",(0,r.jsxs)(t.p,{children:["If END is not specified, eCalc will make an educated (but possibly incorrect) ",(0,r.jsx)(t.em,{children:"guess"})," on when the output data should end."]}),"\n",(0,r.jsx)(t.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:"END: \n"})}),"\n",(0,r.jsx)(t.h2,{id:"example",children:"Example"}),"\n",(0,r.jsxs)(t.p,{children:["Given an input dataset from ",(0,r.jsx)(t.strong,{children:"01-01-2000 - 01-01-2040"}),", ignoring the last 20 years of data\ncan be achieved as follows:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:"END: 2020-01-01\n"})})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>i});var r=n(96540);const o={},s=r.createContext(o);function a(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1df93b7f.7976f793.js b/assets/js/1df93b7f.7976f793.js new file mode 100644 index 0000000000..c4db48ebe6 --- /dev/null +++ b/assets/js/1df93b7f.7976f793.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4583],{36866:(t,u,e)=>{e.r(u),e.d(u,{default:()=>a});e(96540);var n=e(56347),o=e(74848);function a(){return(0,o.jsx)(n.rd,{to:"docs/about/"})}}}]); \ No newline at end of file diff --git a/assets/js/1eb7400c.99dbd36c.js b/assets/js/1eb7400c.99dbd36c.js new file mode 100644 index 0000000000..3de6762909 --- /dev/null +++ b/assets/js/1eb7400c.99dbd36c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5179],{40844:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>c,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var r=t(74848),s=t(28453);const a={},c="LOWER_HEATING_VALUE",i={id:"about/references/LOWER_HEATING_VALUE",title:"LOWER_HEATING_VALUE",description:"Description",source:"@site/docs/about/references/LOWER_HEATING_VALUE.md",sourceDirName:"about/references",slug:"/about/references/LOWER_HEATING_VALUE",permalink:"/ecalc/docs/about/references/LOWER_HEATING_VALUE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/LOWER_HEATING_VALUE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"LOAD",permalink:"/ecalc/docs/about/references/LOAD"},next:{title:"MAXIMUM_DISCHARGE_PRESSURE",permalink:"/ecalc/docs/about/references/MAXIMUM_DISCHARGE_PRESSURE"}},o={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"lower_heating_value",children:"LOWER_HEATING_VALUE"}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"LOWER_HEATING_VALUE"})," is a required to be specified under the ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/TURBINE_MODEL",children:"TURBINE_MODEL"})," keyword.\nThis ",(0,r.jsx)(n.strong,{children:"must"})," be specified in MJ/Sm",(0,r.jsx)("sup",{children:"3"})]}),"\n",(0,r.jsx)(n.p,{children:"This can only be inputted as a single value and dictates the quantity of thermal energy available after burning a standard cubic metre of fuel (natural gas in this gas)."}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: TURBINE\n ...\n LOWER_HEATING_VALUE: \n"})}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_train_turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # MJ/Sm3\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]\n POWER_ADJUSTMENT_CONSTANT: 10\n"})})]})}function u(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>i});var r=t(96540);const s={},a=r.createContext(s);function c(e){const n=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),r.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1f60d0d4.22494f28.js b/assets/js/1f60d0d4.22494f28.js new file mode 100644 index 0000000000..ace9f67d03 --- /dev/null +++ b/assets/js/1f60d0d4.22494f28.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[780],{51947:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>s,metadata:()=>r,toc:()=>d});var i=t(74848),o=t(28453);const s={title:"Introduction",sidebar_position:1,description:"Introduction to eCalc documentation"},a="Introduction to eCalc\u2122",r={id:"about/index",title:"Introduction",description:"Introduction to eCalc documentation",source:"@site/docs/about/index.md",sourceDirName:"about",slug:"/about/",permalink:"/ecalc/docs/about/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Introduction",sidebar_position:1,description:"Introduction to eCalc documentation"},sidebar:"about",next:{title:"Getting Started",permalink:"/ecalc/docs/about/getting_started/"}},c={},d=[{value:"What is eCalc\u2122?",id:"what-is-ecalc",level:2},{value:"Why should I use eCalc\u2122?",id:"why-should-i-use-ecalc",level:3},{value:"How to use eCalc\u2122?",id:"how-to-use-ecalc",level:3}];function l(e){const n={a:"a",h1:"h1",h2:"h2",h3:"h3",img:"img",p:"p",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"introduction-to-ecalc",children:"Introduction to eCalc\u2122"}),"\n",(0,i.jsx)(n.p,{children:"The eCalc\u2122 technology is being developed by Equinor within the Technology, Digital and Innovation (TDI) business area."}),"\n",(0,i.jsx)(n.h2,{id:"what-is-ecalc",children:"What is eCalc\u2122?"}),"\n",(0,i.jsx)(n.p,{children:"eCalc\u2122 is a software tool for calculation of energy demand and greenhouse gas emissions from oil and gas production and processing. It enables the cross-disciplinary collaboration required to achieve high-quality and transparent energy and GHG emission prognosis and decision support."}),"\n",(0,i.jsx)(n.p,{children:"eCalc\u2122 performs energy and emission calculations by integrating data, knowledge and future plans from different disciplines. This could be production and injection profiles from the reservoir engineer, characteristics of energy consuming equipment units such as gas turbines, compressors and pumps from the facility engineer, and emission factors for different fuels from the sustainability engineer. The main idea is using physical or data-driven models to relate production rates and pressures to the required processing energy and resulting emissions. Integrated bookkeeping for all emission sources is offered."}),"\n",(0,i.jsx)(n.p,{children:"eCalc\u2122 uses a bottom-up approach to give high-quality installation and portfolio level forecasts at the same time as detailed insights about the energy drivers and processing capacities for the individual installation."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:t(59236).A+"",width:"4535",height:"2551"})}),"\n",(0,i.jsx)(n.h3,{id:"why-should-i-use-ecalc",children:"Why should I use eCalc\u2122?"}),"\n",(0,i.jsx)(n.p,{children:"By using eCalc\u2122 you will be able to forecast your energy consumption and emissions with consistency and transparency. You will also be enabled to study the effect on energy demand and emissions of your investment opportunities as well as studying emission reduction measures."}),"\n",(0,i.jsx)(n.h3,{id:"how-to-use-ecalc",children:"How to use eCalc\u2122?"}),"\n",(0,i.jsxs)(n.p,{children:["To use eCalc\u2122 you need to create a model setup of your asset.\nThis is described in the ",(0,i.jsx)(n.a,{href:"/ecalc/docs/about/modelling/",children:"Modelling"})," section."]}),"\n",(0,i.jsxs)(n.p,{children:["Once the model is ready, you can run the eCalc\u2122 calculator. Different user interfaces for the calculator are offered. These are described in detail in the ",(0,i.jsx)(n.a,{href:"/ecalc/docs/about/getting_started/",children:"Getting started"})," section."]})]})}function u(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},59236:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/ecalc_illustration-9c9342f8d3a926d760096a17ccb76556.svg"},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>r});var i=t(96540);const o={},s=i.createContext(o);function a(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1f7805b6.29cce52e.js b/assets/js/1f7805b6.29cce52e.js new file mode 100644 index 0000000000..3ebc837e06 --- /dev/null +++ b/assets/js/1f7805b6.29cce52e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[238],{85007:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>i,default:()=>u,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var r=t(74848),a=t(28453);const s={slug:"v8.6-release",title:"v8.6",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:-16},i="eCalc",l={id:"changelog/v8-6",title:"v8.6",description:"New Features",source:"@site/docs/changelog/v8-6.md",sourceDirName:"changelog",slug:"/changelog/v8.6-release",permalink:"/ecalc/docs/changelog/v8.6-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-6.md",tags:[{inline:!0,label:"release",permalink:"/ecalc/docs/tags/release"},{inline:!0,label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:-16,frontMatter:{slug:"v8.6-release",title:"v8.6",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:-16},sidebar:"changelog",previous:{title:"v8.7",permalink:"/ecalc/docs/changelog/v8.7-release"},next:{title:"v8.5",permalink:"/ecalc/docs/changelog/v8.5-release"}},o={},c=[{value:"New Features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking changes",id:"breaking-changes",level:2}];function d(e){const n={code:"code",h1:"h1",h2:"h2",li:"li",ul:"ul",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"ecalc",children:"eCalc"}),"\n",(0,r.jsx)(n.h2,{id:"new-features",children:"New Features"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Added a ModelInputFailureStatus. If there are errors in the rate or pressure input to a compressor a failure code will be returned in the compressors failure_status (INVALID_RATE_INPUT or INVALID_SUCTION/INTERMEDIATE/DISCHARGE_PRESSURE_INPUT."}),"\n",(0,r.jsxs)(n.li,{children:["Rate type is included in header for csv export. E.g. ",(0,r.jsx)(n.code,{children:"Sm3/sd"})," for streaming day and ",(0,r.jsx)(n.code,{children:"Sm3/cd"})," for calendar day."]}),"\n",(0,r.jsx)(n.li,{children:"Generating generic variable speed compressor charts from input rates/heads has a new and improved algorithm. The new algorithm tends to favour increase in head compared to the previous one. Running old models with this new algorithm may lead to slight changes in the results."}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"fixes",children:"Fixes"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Fixed bug giving small numerical difficulties when calculating maximum standard rate for a simplified compressor train"}),"\n",(0,r.jsx)(n.li,{children:"Ensure that start date and end date in the global time vector is consistent with the requested output frequency. This makes sure that resampling (typically for monthly or yearly reporting) can be done even when the start or end date is outside of the requested reporting frequency (e.g. starting in August when the reporting frequency is yearly), and that the resampling is done without dropping volumes."}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Economic details have been deprecated from eCalc. Input data such as ",(0,r.jsx)(n.code,{children:"tax"}),", ",(0,r.jsx)(n.code,{children:"quota"})," and ",(0,r.jsx)(n.code,{children:"price"})," for fuel and emissions will now be ignored, and will hence also no longer be reported. If you have used those in your model, they will be ignored. It will be treated as an error in a future version of eCalc."]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>l});var r=t(96540);const a={},s=r.createContext(a);function i(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/20703393.b1647309.js b/assets/js/20703393.b1647309.js new file mode 100644 index 0000000000..8edd01c467 --- /dev/null +++ b/assets/js/20703393.b1647309.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8830],{19628:(s,a,e)=>{e.r(a),e.d(a,{assets:()=>m,contentTitle:()=>l,default:()=>d,frontMatter:()=>t,metadata:()=>r,toc:()=>c});var n=e(74848),i=e(28453);const t={},l="CONSTANT",r={id:"about/references/CONSTANT",title:"CONSTANT",description:"FACILITYINPUTS /",source:"@site/docs/about/references/CONSTANT.md",sourceDirName:"about/references",slug:"/about/references/CONSTANT",permalink:"/ecalc/docs/about/references/CONSTANT",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/CONSTANT.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CONDITIONS",permalink:"/ecalc/docs/about/references/CONDITIONS"},next:{title:"CONSUMERS",permalink:"/ecalc/docs/about/references/CONSUMERS"}},m={},c=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function h(s){const a={a:"a",annotation:"annotation",code:"code",h1:"h1",h2:"h2",math:"math",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",msub:"msub",p:"p",pre:"pre",semantics:"semantics",span:"span",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.R)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.h1,{id:"constant",children:"CONSTANT"}),"\n",(0,n.jsxs)(a.p,{children:[(0,n.jsx)(a.a,{href:"FACILITY_INPUTS",children:"FACILITY_INPUTS"})," /\n",(0,n.jsx)(a.a,{href:"ADJUSTMENT",children:"ADJUSTMENT"})," /\n",(0,n.jsx)(a.a,{href:"CONSTANT",children:"CONSTANT"})]}),"\n",(0,n.jsxs)(a.table,{children:[(0,n.jsx)(a.thead,{children:(0,n.jsxs)(a.tr,{children:[(0,n.jsx)(a.th,{children:"Required"}),(0,n.jsx)(a.th,{children:"Child of"}),(0,n.jsx)(a.th,{children:"Children/Options"})]})}),(0,n.jsx)(a.tbody,{children:(0,n.jsxs)(a.tr,{children:[(0,n.jsx)(a.td,{children:"No"}),(0,n.jsx)(a.td,{children:(0,n.jsx)(a.code,{children:"ADJUSTMENT"})}),(0,n.jsx)(a.td,{children:"None"})]})})]}),"\n",(0,n.jsx)(a.h2,{id:"description",children:"Description"}),"\n",(0,n.jsxs)(a.p,{children:["The keyword ",(0,n.jsx)(a.a,{href:"CONSTANT",children:"CONSTANT"})," can be used for adjustment of input data with a constant."]}),"\n",(0,n.jsx)(a.h2,{id:"format",children:"Format"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-yaml",children:"CONSTANT: \n"})}),"\n",(0,n.jsx)(a.h2,{id:"example",children:"Example"}),"\n",(0,n.jsx)(a.p,{children:"Say you have input that that is off by -10 [some units].\nYou could fix this like:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-yaml",children:"NAME: some_facility_input\nFILE: filename.csv\nTYPE: FACILITY_INPUT_TYPE\nADJUSTMENT:\n CONSTANT: -10\n"})}),"\n",(0,n.jsxs)(a.p,{children:["The resulting energy consumption ",(0,n.jsxs)(a.span,{className:"katex",children:[(0,n.jsx)(a.span,{className:"katex-mathml",children:(0,n.jsx)(a.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(a.semantics,{children:[(0,n.jsx)(a.mrow,{children:(0,n.jsxs)(a.msub,{children:[(0,n.jsx)(a.mi,{children:"E"}),(0,n.jsxs)(a.mrow,{children:[(0,n.jsx)(a.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"d"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"j"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"u"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"s"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"t"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"e"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"d"})]})]})}),(0,n.jsx)(a.annotation,{encoding:"application/x-tex",children:"E_\\mathrm{adjusted}"})]})})}),(0,n.jsx)(a.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(a.span,{className:"base",children:[(0,n.jsx)(a.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(a.span,{className:"mord",children:[(0,n.jsx)(a.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(a.span,{className:"msupsub",children:(0,n.jsxs)(a.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(a.span,{className:"vlist-r",children:[(0,n.jsx)(a.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(a.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(a.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(a.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(a.span,{className:"mord mtight",children:(0,n.jsx)(a.span,{className:"mord mathrm mtight",children:"adjusted"})})})]})}),(0,n.jsx)(a.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(a.span,{className:"vlist-r",children:(0,n.jsx)(a.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(a.span,{})})})]})})]})]})})]}),", i.e. fuel or power, will then be"]}),"\n",(0,n.jsx)(a.span,{className:"katex-display",children:(0,n.jsxs)(a.span,{className:"katex",children:[(0,n.jsx)(a.span,{className:"katex-mathml",children:(0,n.jsx)(a.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(a.semantics,{children:[(0,n.jsxs)(a.mrow,{children:[(0,n.jsxs)(a.msub,{children:[(0,n.jsx)(a.mi,{children:"E"}),(0,n.jsxs)(a.mrow,{children:[(0,n.jsx)(a.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"d"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"j"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"u"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"s"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"t"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"e"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"d"})]})]}),(0,n.jsx)(a.mo,{children:"="}),(0,n.jsxs)(a.msub,{children:[(0,n.jsx)(a.mi,{children:"E"}),(0,n.jsxs)(a.mrow,{children:[(0,n.jsx)(a.mi,{mathvariant:"normal",children:"o"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"r"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"g"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"n"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"l"})]})]}),(0,n.jsx)(a.mo,{children:"\u2212"}),(0,n.jsx)(a.mn,{children:"10"})]}),(0,n.jsx)(a.annotation,{encoding:"application/x-tex",children:"E_\\mathrm{adjusted} = E_\\mathrm{original} - 10"})]})})}),(0,n.jsxs)(a.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(a.span,{className:"base",children:[(0,n.jsx)(a.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(a.span,{className:"mord",children:[(0,n.jsx)(a.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(a.span,{className:"msupsub",children:(0,n.jsxs)(a.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(a.span,{className:"vlist-r",children:[(0,n.jsx)(a.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(a.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(a.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(a.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(a.span,{className:"mord mtight",children:(0,n.jsx)(a.span,{className:"mord mathrm mtight",children:"adjusted"})})})]})}),(0,n.jsx)(a.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(a.span,{className:"vlist-r",children:(0,n.jsx)(a.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(a.span,{})})})]})})]}),(0,n.jsx)(a.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(a.span,{className:"mrel",children:"="}),(0,n.jsx)(a.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(a.span,{className:"base",children:[(0,n.jsx)(a.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(a.span,{className:"mord",children:[(0,n.jsx)(a.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(a.span,{className:"msupsub",children:(0,n.jsxs)(a.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(a.span,{className:"vlist-r",children:[(0,n.jsx)(a.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(a.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(a.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(a.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(a.span,{className:"mord mtight",children:(0,n.jsx)(a.span,{className:"mord mathrm mtight",children:"original"})})})]})}),(0,n.jsx)(a.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(a.span,{className:"vlist-r",children:(0,n.jsx)(a.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(a.span,{})})})]})})]}),(0,n.jsx)(a.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(a.span,{className:"mbin",children:"\u2212"}),(0,n.jsx)(a.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,n.jsxs)(a.span,{className:"base",children:[(0,n.jsx)(a.span,{className:"strut",style:{height:"0.6444em"}}),(0,n.jsx)(a.span,{className:"mord",children:"10"})]})]})]})}),"\n",(0,n.jsxs)(a.p,{children:["where ",(0,n.jsxs)(a.span,{className:"katex",children:[(0,n.jsx)(a.span,{className:"katex-mathml",children:(0,n.jsx)(a.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(a.semantics,{children:[(0,n.jsx)(a.mrow,{children:(0,n.jsxs)(a.msub,{children:[(0,n.jsx)(a.mi,{children:"E"}),(0,n.jsxs)(a.mrow,{children:[(0,n.jsx)(a.mi,{mathvariant:"normal",children:"o"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"r"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"g"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"n"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(a.mi,{mathvariant:"normal",children:"l"})]})]})}),(0,n.jsx)(a.annotation,{encoding:"application/x-tex",children:"E_\\mathrm{original}"})]})})}),(0,n.jsx)(a.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(a.span,{className:"base",children:[(0,n.jsx)(a.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(a.span,{className:"mord",children:[(0,n.jsx)(a.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(a.span,{className:"msupsub",children:(0,n.jsxs)(a.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(a.span,{className:"vlist-r",children:[(0,n.jsx)(a.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(a.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(a.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(a.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(a.span,{className:"mord mtight",children:(0,n.jsx)(a.span,{className:"mord mathrm mtight",children:"original"})})})]})}),(0,n.jsx)(a.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(a.span,{className:"vlist-r",children:(0,n.jsx)(a.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(a.span,{})})})]})})]})]})})]})," is the energy consumption before the adjustment."]})]})}function d(s={}){const{wrapper:a}={...(0,i.R)(),...s.components};return a?(0,n.jsx)(a,{...s,children:(0,n.jsx)(h,{...s})}):h(s)}},28453:(s,a,e)=>{e.d(a,{R:()=>l,x:()=>r});var n=e(96540);const i={},t=n.createContext(i);function l(s){const a=n.useContext(t);return n.useMemo((function(){return"function"==typeof s?s(a):{...a,...s}}),[a,s])}function r(s){let a;return a=s.disableParentContext?"function"==typeof s.components?s.components(i):s.components||i:l(s.components),n.createElement(t.Provider,{value:a},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/2121587b.6744d348.js b/assets/js/2121587b.6744d348.js new file mode 100644 index 0000000000..5229f1da49 --- /dev/null +++ b/assets/js/2121587b.6744d348.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8251],{79289:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>s,default:()=>E,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var t=r(74848),c=r(28453);const o={},s="CHART_TYPE",i={id:"about/references/CHART_TYPE",title:"CHART_TYPE",description:"Description",source:"@site/docs/about/references/CHART_TYPE.md",sourceDirName:"about/references",slug:"/about/references/CHART_TYPE",permalink:"/ecalc/docs/about/references/CHART_TYPE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/CHART_TYPE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CATEGORY",permalink:"/ecalc/docs/about/references/CATEGORY"},next:{title:"COMPOSITION",permalink:"/ecalc/docs/about/references/COMPOSITION"}},a={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,c.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"chart_type",children:"CHART_TYPE"}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"CHART_TYPE"})," is a required to be specified under the ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/MODELS",children:"MODELS"})," keyword when\nthe model is of ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/TYPE",children:"TYPE"})," ",(0,t.jsx)(n.code,{children:"COMPRESSOR_CHART"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"CHART_TYPE"})," can either be set to:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"SINGLE_SPEED"}),"\n",(0,t.jsx)(n.li,{children:"VARIABLE_SPEED"}),"\n",(0,t.jsx)(n.li,{children:"GENERIC_FROM_INPUT"}),"\n",(0,t.jsx)(n.li,{children:"GENERIC_FROM_DESIGN_POINT"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: COMPRESSOR_CHART\n CHART_TYPE: \n ...\n"})}),"\n",(0,t.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_chart_model_reference_name\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: SINGLE_SPEED\n ...\n"})})]})}function E(e={}){const{wrapper:n}={...(0,c.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>s,x:()=>i});var t=r(96540);const c={},o=t.createContext(c);function s(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:s(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2130.c5e4f4c2.js b/assets/js/2130.c5e4f4c2.js new file mode 100644 index 0000000000..1d8b4350e4 --- /dev/null +++ b/assets/js/2130.c5e4f4c2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2130],{22130:(e,t,r)=>{r.d(t,{default:()=>Ja});class a{constructor(e,t,r){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=e,this.start=t,this.end=r}static range(e,t){return t?e&&e.loc&&t.loc&&e.loc.lexer===t.loc.lexer?new a(e.loc.lexer,e.loc.start,t.loc.end):null:e&&e.loc}}class n{constructor(e,t){this.text=void 0,this.loc=void 0,this.noexpand=void 0,this.treatAsRelax=void 0,this.text=e,this.loc=t}range(e,t){return new n(t,a.range(this,e))}}class i{constructor(e,t){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;var r,a,n="KaTeX parse error: "+e,o=t&&t.loc;if(o&&o.start<=o.end){var s=o.lexer.input;r=o.start,a=o.end,r===s.length?n+=" at end of input: ":n+=" at position "+(r+1)+": ";var l=s.slice(r,a).replace(/[^]/g,"$&\u0332");n+=(r>15?"\u2026"+s.slice(r-15,r):s.slice(0,r))+l+(a+15":">","<":"<",'"':""","'":"'"},l=/[&><"']/g;var h=function e(t){return"ordgroup"===t.type||"color"===t.type?1===t.body.length?e(t.body[0]):t:"font"===t.type?e(t.body):t},m={contains:function(e,t){return-1!==e.indexOf(t)},deflt:function(e,t){return void 0===e?t:e},escape:function(e){return String(e).replace(l,(e=>s[e]))},hyphenate:function(e){return e.replace(o,"-$1").toLowerCase()},getBaseElem:h,isCharacterBox:function(e){var t=h(e);return"mathord"===t.type||"textord"===t.type||"atom"===t.type},protocolFromUrl:function(e){var t=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return t?":"!==t[2]?null:/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?t[1].toLowerCase():null:"_relative"}},c={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:e=>"#"+e},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:(e,t)=>(t.push(e),t)},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:e=>Math.max(0,e),cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:e=>Math.max(0,e),cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:e=>Math.max(0,e),cli:"-e, --max-expand ",cliProcessor:e=>"Infinity"===e?1/0:parseInt(e)},globalGroup:{type:"boolean",cli:!1}};function p(e){if(e.default)return e.default;var t=e.type,r=Array.isArray(t)?t[0]:t;if("string"!=typeof r)return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}class u{constructor(e){for(var t in this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{},c)if(c.hasOwnProperty(t)){var r=c[t];this[t]=void 0!==e[t]?r.processor?r.processor(e[t]):e[t]:p(r)}}reportNonstrict(e,t,r){var a=this.strict;if("function"==typeof a&&(a=a(e,t,r)),a&&"ignore"!==a){if(!0===a||"error"===a)throw new i("LaTeX-incompatible input and strict mode is set to 'error': "+t+" ["+e+"]",r);"warn"===a?"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"):"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+a+"': "+t+" ["+e+"]")}}useStrictBehavior(e,t,r){var a=this.strict;if("function"==typeof a)try{a=a(e,t,r)}catch(n){a="error"}return!(!a||"ignore"===a)&&(!0===a||"error"===a||("warn"===a?("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"),!1):("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+a+"': "+t+" ["+e+"]"),!1)))}isTrusted(e){if(e.url&&!e.protocol){var t=m.protocolFromUrl(e.url);if(null==t)return!1;e.protocol=t}var r="function"==typeof this.trust?this.trust(e):this.trust;return Boolean(r)}}class d{constructor(e,t,r){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=t,this.cramped=r}sup(){return g[f[this.id]]}sub(){return g[v[this.id]]}fracNum(){return g[b[this.id]]}fracDen(){return g[y[this.id]]}cramp(){return g[x[this.id]]}text(){return g[w[this.id]]}isTight(){return this.size>=2}}var g=[new d(0,0,!1),new d(1,0,!0),new d(2,1,!1),new d(3,1,!0),new d(4,2,!1),new d(5,2,!0),new d(6,3,!1),new d(7,3,!0)],f=[4,5,4,5,6,7,6,7],v=[5,5,5,5,7,7,7,7],b=[2,3,4,5,6,7,6,7],y=[3,3,5,5,7,7,7,7],x=[1,1,3,3,5,5,7,7],w=[0,1,2,3,2,3,2,3],k={DISPLAY:g[0],TEXT:g[2],SCRIPT:g[4],SCRIPTSCRIPT:g[6]},S=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];var M=[];function z(e){for(var t=0;t=M[t]&&e<=M[t+1])return!0;return!1}S.forEach((e=>e.blocks.forEach((e=>M.push(...e)))));var A=80,T={doubleleftarrow:"M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z",doublerightarrow:"M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z",leftarrow:"M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z",leftbrace:"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z",leftbraceunder:"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z",leftgroup:"M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z",leftgroupunder:"M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z",leftharpoon:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z",leftharpoonplus:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z",leftharpoondown:"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z",leftharpoondownplus:"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z",lefthook:"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z",leftlinesegment:"M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z",leftmapsto:"M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z",leftToFrom:"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z",longequal:"M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z",midbrace:"M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z",midbraceunder:"M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z",oiintSize1:"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z",oiintSize2:"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z",oiiintSize1:"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z",oiiintSize2:"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z",rightarrow:"M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z",rightbrace:"M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z",rightbraceunder:"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z",rightgroup:"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z",rightgroupunder:"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z",rightharpoon:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z",rightharpoonplus:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z",rightharpoondown:"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z",rightharpoondownplus:"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z",righthook:"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z",rightlinesegment:"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z",rightToFrom:"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z",twoheadleftarrow:"M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z",twoheadrightarrow:"M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z",tilde1:"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z",tilde2:"M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z",tilde3:"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z",tilde4:"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z",vec:"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z",widehat1:"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z",widehat2:"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat3:"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat4:"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widecheck1:"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z",widecheck2:"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck3:"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck4:"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",baraboveleftarrow:"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z",rightarrowabovebar:"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z",baraboveshortleftharpoon:"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z",rightharpoonaboveshortbar:"M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z",shortbaraboveleftharpoon:"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z",shortrightharpoonabovebar:"M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z"};class B{constructor(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(e){return m.contains(this.classes,e)}toNode(){for(var e=document.createDocumentFragment(),t=0;te.toText())).join("")}}var C={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},N={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},q={"\xc5":"A","\xd0":"D","\xde":"o","\xe5":"a","\xf0":"d","\xfe":"o","\u0410":"A","\u0411":"B","\u0412":"B","\u0413":"F","\u0414":"A","\u0415":"E","\u0416":"K","\u0417":"3","\u0418":"N","\u0419":"N","\u041a":"K","\u041b":"N","\u041c":"M","\u041d":"H","\u041e":"O","\u041f":"N","\u0420":"P","\u0421":"C","\u0422":"T","\u0423":"y","\u0424":"O","\u0425":"X","\u0426":"U","\u0427":"h","\u0428":"W","\u0429":"W","\u042a":"B","\u042b":"X","\u042c":"B","\u042d":"3","\u042e":"X","\u042f":"R","\u0430":"a","\u0431":"b","\u0432":"a","\u0433":"r","\u0434":"y","\u0435":"e","\u0436":"m","\u0437":"e","\u0438":"n","\u0439":"n","\u043a":"n","\u043b":"n","\u043c":"m","\u043d":"n","\u043e":"o","\u043f":"n","\u0440":"p","\u0441":"c","\u0442":"o","\u0443":"y","\u0444":"b","\u0445":"x","\u0446":"n","\u0447":"n","\u0448":"w","\u0449":"w","\u044a":"a","\u044b":"m","\u044c":"a","\u044d":"e","\u044e":"m","\u044f":"r"};function I(e,t,r){if(!C[t])throw new Error("Font metrics not found for font: "+t+".");var a=e.charCodeAt(0),n=C[t][a];if(!n&&e[0]in q&&(a=q[e[0]].charCodeAt(0),n=C[t][a]),n||"text"!==r||z(a)&&(n=C[t][77]),n)return{depth:n[0],height:n[1],italic:n[2],skew:n[3],width:n[4]}}var R={};var H=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],O=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],E=function(e,t){return t.size<2?e:H[e-1][t.size-1]};class L{constructor(e){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=e.style,this.color=e.color,this.size=e.size||L.BASESIZE,this.textSize=e.textSize||this.size,this.phantom=!!e.phantom,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.sizeMultiplier=O[this.size-1],this.maxSize=e.maxSize,this.minRuleThickness=e.minRuleThickness,this._fontMetrics=void 0}extend(e){var t={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);return new L(t)}havingStyle(e){return this.style===e?this:this.extend({style:e,size:E(this.textSize,e)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(e){return this.size===e&&this.textSize===e?this:this.extend({style:this.style.text(),size:e,textSize:e,sizeMultiplier:O[e-1]})}havingBaseStyle(e){e=e||this.style.text();var t=E(L.BASESIZE,e);return this.size===t&&this.textSize===L.BASESIZE&&this.style===e?this:this.extend({style:e,size:t})}havingBaseSizing(){var e;switch(this.style.id){case 4:case 5:e=3;break;case 6:case 7:e=1;break;default:e=6}return this.extend({style:this.style.text(),size:e})}withColor(e){return this.extend({color:e})}withPhantom(){return this.extend({phantom:!0})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}sizingClasses(e){return e.size!==this.size?["sizing","reset-size"+e.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==L.BASESIZE?["sizing","reset-size"+this.size,"size"+L.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=function(e){var t;if(!R[t=e>=5?0:e>=3?1:2]){var r=R[t]={cssEmPerMu:N.quad[t]/18};for(var a in N)N.hasOwnProperty(a)&&(r[a]=N[a][t])}return R[t]}(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}}L.BASESIZE=6;var D={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:1.00375,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:1.00375},V={ex:!0,em:!0,mu:!0},P=function(e){return"string"!=typeof e&&(e=e.unit),e in D||e in V||"ex"===e},F=function(e,t){var r;if(e.unit in D)r=D[e.unit]/t.fontMetrics().ptPerEm/t.sizeMultiplier;else if("mu"===e.unit)r=t.fontMetrics().cssEmPerMu;else{var a;if(a=t.style.isTight()?t.havingStyle(t.style.text()):t,"ex"===e.unit)r=a.fontMetrics().xHeight;else{if("em"!==e.unit)throw new i("Invalid unit: '"+e.unit+"'");r=a.fontMetrics().quad}a!==t&&(r*=a.sizeMultiplier/t.sizeMultiplier)}return Math.min(e.number*r,t.maxSize)},G=function(e){return+e.toFixed(4)+"em"},U=function(e){return e.filter((e=>e)).join(" ")},Y=function(e,t,r){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=r||{},t){t.style.isTight()&&this.classes.push("mtight");var a=t.getColor();a&&(this.style.color=a)}},X=function(e){var t=document.createElement(e);for(var r in t.className=U(this.classes),this.style)this.style.hasOwnProperty(r)&&(t.style[r]=this.style[r]);for(var a in this.attributes)this.attributes.hasOwnProperty(a)&&t.setAttribute(a,this.attributes[a]);for(var n=0;n"};class _{constructor(e,t,r,a){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,Y.call(this,e,r,a),this.children=t||[]}setAttribute(e,t){this.attributes[e]=t}hasClass(e){return m.contains(this.classes,e)}toNode(){return X.call(this,"span")}toMarkup(){return W.call(this,"span")}}class j{constructor(e,t,r,a){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,Y.call(this,t,a),this.children=r||[],this.setAttribute("href",e)}setAttribute(e,t){this.attributes[e]=t}hasClass(e){return m.contains(this.classes,e)}toNode(){return X.call(this,"a")}toMarkup(){return W.call(this,"a")}}class ${constructor(e,t,r){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=t,this.src=e,this.classes=["mord"],this.style=r}hasClass(e){return m.contains(this.classes,e)}toNode(){var e=document.createElement("img");for(var t in e.src=this.src,e.alt=this.alt,e.className="mord",this.style)this.style.hasOwnProperty(t)&&(e.style[t]=this.style[t]);return e}toMarkup(){var e=''+m.escape(this.alt)+'=n[0]&&e<=n[1])return r.name}return null}(this.text.charCodeAt(0));l&&this.classes.push(l+"_fallback"),/[\xee\xef\xed\xec]/.test(this.text)&&(this.text=Z[this.text])}hasClass(e){return m.contains(this.classes,e)}toNode(){var e=document.createTextNode(this.text),t=null;for(var r in this.italic>0&&((t=document.createElement("span")).style.marginRight=G(this.italic)),this.classes.length>0&&((t=t||document.createElement("span")).className=U(this.classes)),this.style)this.style.hasOwnProperty(r)&&((t=t||document.createElement("span")).style[r]=this.style[r]);return t?(t.appendChild(e),t):e}toMarkup(){var e=!1,t="0&&(r+="margin-right:"+this.italic+"em;"),this.style)this.style.hasOwnProperty(a)&&(r+=m.hyphenate(a)+":"+this.style[a]+";");r&&(e=!0,t+=' style="'+m.escape(r)+'"');var n=m.escape(this.text);return e?(t+=">",t+=n,t+=""):n}}class J{constructor(e,t){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=t||{}}toNode(){var e=document.createElementNS("http://www.w3.org/2000/svg","svg");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);for(var r=0;r':''}}class ee{constructor(e){this.attributes=void 0,this.attributes=e||{}}toNode(){var e=document.createElementNS("http://www.w3.org/2000/svg","line");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);return e}toMarkup(){var e="","\\gt",!0),ie(oe,le,be,"\u2208","\\in",!0),ie(oe,le,be,"\ue020","\\@not"),ie(oe,le,be,"\u2282","\\subset",!0),ie(oe,le,be,"\u2283","\\supset",!0),ie(oe,le,be,"\u2286","\\subseteq",!0),ie(oe,le,be,"\u2287","\\supseteq",!0),ie(oe,he,be,"\u2288","\\nsubseteq",!0),ie(oe,he,be,"\u2289","\\nsupseteq",!0),ie(oe,le,be,"\u22a8","\\models"),ie(oe,le,be,"\u2190","\\leftarrow",!0),ie(oe,le,be,"\u2264","\\le"),ie(oe,le,be,"\u2264","\\leq",!0),ie(oe,le,be,"<","\\lt",!0),ie(oe,le,be,"\u2192","\\rightarrow",!0),ie(oe,le,be,"\u2192","\\to"),ie(oe,he,be,"\u2271","\\ngeq",!0),ie(oe,he,be,"\u2270","\\nleq",!0),ie(oe,le,ye,"\xa0","\\ "),ie(oe,le,ye,"\xa0","\\space"),ie(oe,le,ye,"\xa0","\\nobreakspace"),ie(se,le,ye,"\xa0","\\ "),ie(se,le,ye,"\xa0"," "),ie(se,le,ye,"\xa0","\\space"),ie(se,le,ye,"\xa0","\\nobreakspace"),ie(oe,le,ye,null,"\\nobreak"),ie(oe,le,ye,null,"\\allowbreak"),ie(oe,le,ve,",",","),ie(oe,le,ve,";",";"),ie(oe,he,ce,"\u22bc","\\barwedge",!0),ie(oe,he,ce,"\u22bb","\\veebar",!0),ie(oe,le,ce,"\u2299","\\odot",!0),ie(oe,le,ce,"\u2295","\\oplus",!0),ie(oe,le,ce,"\u2297","\\otimes",!0),ie(oe,le,xe,"\u2202","\\partial",!0),ie(oe,le,ce,"\u2298","\\oslash",!0),ie(oe,he,ce,"\u229a","\\circledcirc",!0),ie(oe,he,ce,"\u22a1","\\boxdot",!0),ie(oe,le,ce,"\u25b3","\\bigtriangleup"),ie(oe,le,ce,"\u25bd","\\bigtriangledown"),ie(oe,le,ce,"\u2020","\\dagger"),ie(oe,le,ce,"\u22c4","\\diamond"),ie(oe,le,ce,"\u22c6","\\star"),ie(oe,le,ce,"\u25c3","\\triangleleft"),ie(oe,le,ce,"\u25b9","\\triangleright"),ie(oe,le,fe,"{","\\{"),ie(se,le,xe,"{","\\{"),ie(se,le,xe,"{","\\textbraceleft"),ie(oe,le,pe,"}","\\}"),ie(se,le,xe,"}","\\}"),ie(se,le,xe,"}","\\textbraceright"),ie(oe,le,fe,"{","\\lbrace"),ie(oe,le,pe,"}","\\rbrace"),ie(oe,le,fe,"[","\\lbrack",!0),ie(se,le,xe,"[","\\lbrack",!0),ie(oe,le,pe,"]","\\rbrack",!0),ie(se,le,xe,"]","\\rbrack",!0),ie(oe,le,fe,"(","\\lparen",!0),ie(oe,le,pe,")","\\rparen",!0),ie(se,le,xe,"<","\\textless",!0),ie(se,le,xe,">","\\textgreater",!0),ie(oe,le,fe,"\u230a","\\lfloor",!0),ie(oe,le,pe,"\u230b","\\rfloor",!0),ie(oe,le,fe,"\u2308","\\lceil",!0),ie(oe,le,pe,"\u2309","\\rceil",!0),ie(oe,le,xe,"\\","\\backslash"),ie(oe,le,xe,"\u2223","|"),ie(oe,le,xe,"\u2223","\\vert"),ie(se,le,xe,"|","\\textbar",!0),ie(oe,le,xe,"\u2225","\\|"),ie(oe,le,xe,"\u2225","\\Vert"),ie(se,le,xe,"\u2225","\\textbardbl"),ie(se,le,xe,"~","\\textasciitilde"),ie(se,le,xe,"\\","\\textbackslash"),ie(se,le,xe,"^","\\textasciicircum"),ie(oe,le,be,"\u2191","\\uparrow",!0),ie(oe,le,be,"\u21d1","\\Uparrow",!0),ie(oe,le,be,"\u2193","\\downarrow",!0),ie(oe,le,be,"\u21d3","\\Downarrow",!0),ie(oe,le,be,"\u2195","\\updownarrow",!0),ie(oe,le,be,"\u21d5","\\Updownarrow",!0),ie(oe,le,ge,"\u2210","\\coprod"),ie(oe,le,ge,"\u22c1","\\bigvee"),ie(oe,le,ge,"\u22c0","\\bigwedge"),ie(oe,le,ge,"\u2a04","\\biguplus"),ie(oe,le,ge,"\u22c2","\\bigcap"),ie(oe,le,ge,"\u22c3","\\bigcup"),ie(oe,le,ge,"\u222b","\\int"),ie(oe,le,ge,"\u222b","\\intop"),ie(oe,le,ge,"\u222c","\\iint"),ie(oe,le,ge,"\u222d","\\iiint"),ie(oe,le,ge,"\u220f","\\prod"),ie(oe,le,ge,"\u2211","\\sum"),ie(oe,le,ge,"\u2a02","\\bigotimes"),ie(oe,le,ge,"\u2a01","\\bigoplus"),ie(oe,le,ge,"\u2a00","\\bigodot"),ie(oe,le,ge,"\u222e","\\oint"),ie(oe,le,ge,"\u222f","\\oiint"),ie(oe,le,ge,"\u2230","\\oiiint"),ie(oe,le,ge,"\u2a06","\\bigsqcup"),ie(oe,le,ge,"\u222b","\\smallint"),ie(se,le,ue,"\u2026","\\textellipsis"),ie(oe,le,ue,"\u2026","\\mathellipsis"),ie(se,le,ue,"\u2026","\\ldots",!0),ie(oe,le,ue,"\u2026","\\ldots",!0),ie(oe,le,ue,"\u22ef","\\@cdots",!0),ie(oe,le,ue,"\u22f1","\\ddots",!0),ie(oe,le,xe,"\u22ee","\\varvdots"),ie(oe,le,me,"\u02ca","\\acute"),ie(oe,le,me,"\u02cb","\\grave"),ie(oe,le,me,"\xa8","\\ddot"),ie(oe,le,me,"~","\\tilde"),ie(oe,le,me,"\u02c9","\\bar"),ie(oe,le,me,"\u02d8","\\breve"),ie(oe,le,me,"\u02c7","\\check"),ie(oe,le,me,"^","\\hat"),ie(oe,le,me,"\u20d7","\\vec"),ie(oe,le,me,"\u02d9","\\dot"),ie(oe,le,me,"\u02da","\\mathring"),ie(oe,le,de,"\ue131","\\@imath"),ie(oe,le,de,"\ue237","\\@jmath"),ie(oe,le,xe,"\u0131","\u0131"),ie(oe,le,xe,"\u0237","\u0237"),ie(se,le,xe,"\u0131","\\i",!0),ie(se,le,xe,"\u0237","\\j",!0),ie(se,le,xe,"\xdf","\\ss",!0),ie(se,le,xe,"\xe6","\\ae",!0),ie(se,le,xe,"\u0153","\\oe",!0),ie(se,le,xe,"\xf8","\\o",!0),ie(se,le,xe,"\xc6","\\AE",!0),ie(se,le,xe,"\u0152","\\OE",!0),ie(se,le,xe,"\xd8","\\O",!0),ie(se,le,me,"\u02ca","\\'"),ie(se,le,me,"\u02cb","\\`"),ie(se,le,me,"\u02c6","\\^"),ie(se,le,me,"\u02dc","\\~"),ie(se,le,me,"\u02c9","\\="),ie(se,le,me,"\u02d8","\\u"),ie(se,le,me,"\u02d9","\\."),ie(se,le,me,"\xb8","\\c"),ie(se,le,me,"\u02da","\\r"),ie(se,le,me,"\u02c7","\\v"),ie(se,le,me,"\xa8",'\\"'),ie(se,le,me,"\u02dd","\\H"),ie(se,le,me,"\u25ef","\\textcircled");var we={"--":!0,"---":!0,"``":!0,"''":!0};ie(se,le,xe,"\u2013","--",!0),ie(se,le,xe,"\u2013","\\textendash"),ie(se,le,xe,"\u2014","---",!0),ie(se,le,xe,"\u2014","\\textemdash"),ie(se,le,xe,"\u2018","`",!0),ie(se,le,xe,"\u2018","\\textquoteleft"),ie(se,le,xe,"\u2019","'",!0),ie(se,le,xe,"\u2019","\\textquoteright"),ie(se,le,xe,"\u201c","``",!0),ie(se,le,xe,"\u201c","\\textquotedblleft"),ie(se,le,xe,"\u201d","''",!0),ie(se,le,xe,"\u201d","\\textquotedblright"),ie(oe,le,xe,"\xb0","\\degree",!0),ie(se,le,xe,"\xb0","\\degree"),ie(se,le,xe,"\xb0","\\textdegree",!0),ie(oe,le,xe,"\xa3","\\pounds"),ie(oe,le,xe,"\xa3","\\mathsterling",!0),ie(se,le,xe,"\xa3","\\pounds"),ie(se,le,xe,"\xa3","\\textsterling",!0),ie(oe,he,xe,"\u2720","\\maltese"),ie(se,he,xe,"\u2720","\\maltese");for(var ke='0123456789/@."',Se=0;Se<14;Se++){var Me=ke.charAt(Se);ie(oe,le,xe,Me,Me)}for(var ze='0123456789!@*()-=+";:?/.,',Ae=0;Ae<25;Ae++){var Te=ze.charAt(Ae);ie(se,le,xe,Te,Te)}for(var Be="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Ce=0;Ce<52;Ce++){var Ne=Be.charAt(Ce);ie(oe,le,de,Ne,Ne),ie(se,le,xe,Ne,Ne)}ie(oe,he,xe,"C","\u2102"),ie(se,he,xe,"C","\u2102"),ie(oe,he,xe,"H","\u210d"),ie(se,he,xe,"H","\u210d"),ie(oe,he,xe,"N","\u2115"),ie(se,he,xe,"N","\u2115"),ie(oe,he,xe,"P","\u2119"),ie(se,he,xe,"P","\u2119"),ie(oe,he,xe,"Q","\u211a"),ie(se,he,xe,"Q","\u211a"),ie(oe,he,xe,"R","\u211d"),ie(se,he,xe,"R","\u211d"),ie(oe,he,xe,"Z","\u2124"),ie(se,he,xe,"Z","\u2124"),ie(oe,le,de,"h","\u210e"),ie(se,le,de,"h","\u210e");for(var qe="",Ie=0;Ie<52;Ie++){var Re=Be.charAt(Ie);ie(oe,le,de,Re,qe=String.fromCharCode(55349,56320+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56372+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56424+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56580+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56684+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56736+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56788+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56840+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56944+Ie)),ie(se,le,xe,Re,qe),Ie<26&&(ie(oe,le,de,Re,qe=String.fromCharCode(55349,56632+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56476+Ie)),ie(se,le,xe,Re,qe))}ie(oe,le,de,"k",qe=String.fromCharCode(55349,56668)),ie(se,le,xe,"k",qe);for(var He=0;He<10;He++){var Oe=He.toString();ie(oe,le,de,Oe,qe=String.fromCharCode(55349,57294+He)),ie(se,le,xe,Oe,qe),ie(oe,le,de,Oe,qe=String.fromCharCode(55349,57314+He)),ie(se,le,xe,Oe,qe),ie(oe,le,de,Oe,qe=String.fromCharCode(55349,57324+He)),ie(se,le,xe,Oe,qe),ie(oe,le,de,Oe,qe=String.fromCharCode(55349,57334+He)),ie(se,le,xe,Oe,qe)}for(var Ee="\xd0\xde\xfe",Le=0;Le<3;Le++){var De=Ee.charAt(Le);ie(oe,le,de,De,De),ie(se,le,xe,De,De)}var Ve=[["mathbf","textbf","Main-Bold"],["mathbf","textbf","Main-Bold"],["mathnormal","textit","Math-Italic"],["mathnormal","textit","Math-Italic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["mathscr","textscr","Script-Regular"],["","",""],["","",""],["","",""],["mathfrak","textfrak","Fraktur-Regular"],["mathfrak","textfrak","Fraktur-Regular"],["mathbb","textbb","AMS-Regular"],["mathbb","textbb","AMS-Regular"],["mathboldfrak","textboldfrak","Fraktur-Regular"],["mathboldfrak","textboldfrak","Fraktur-Regular"],["mathsf","textsf","SansSerif-Regular"],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathitsf","textitsf","SansSerif-Italic"],["mathitsf","textitsf","SansSerif-Italic"],["","",""],["","",""],["mathtt","texttt","Typewriter-Regular"],["mathtt","texttt","Typewriter-Regular"]],Pe=[["mathbf","textbf","Main-Bold"],["","",""],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathtt","texttt","Typewriter-Regular"]],Fe=function(e,t,r){return ne[r][e]&&ne[r][e].replace&&(e=ne[r][e].replace),{value:e,metrics:I(e,t,r)}},Ge=function(e,t,r,a,n){var i,o=Fe(e,t,r),s=o.metrics;if(e=o.value,s){var l=s.italic;("text"===r||a&&"mathit"===a.font)&&(l=0),i=new K(e,s.height,s.depth,l,s.skew,s.width,n)}else"undefined"!=typeof console&&console.warn("No character metrics for '"+e+"' in style '"+t+"' and mode '"+r+"'"),i=new K(e,0,0,0,0,0,n);if(a){i.maxFontSize=a.sizeMultiplier,a.style.isTight()&&i.classes.push("mtight");var h=a.getColor();h&&(i.style.color=h)}return i},Ue=(e,t)=>{if(U(e.classes)!==U(t.classes)||e.skew!==t.skew||e.maxFontSize!==t.maxFontSize)return!1;if(1===e.classes.length){var r=e.classes[0];if("mbin"===r||"mord"===r)return!1}for(var a in e.style)if(e.style.hasOwnProperty(a)&&e.style[a]!==t.style[a])return!1;for(var n in t.style)if(t.style.hasOwnProperty(n)&&e.style[n]!==t.style[n])return!1;return!0},Ye=function(e){for(var t=0,r=0,a=0,n=0;nt&&(t=i.height),i.depth>r&&(r=i.depth),i.maxFontSize>a&&(a=i.maxFontSize)}e.height=t,e.depth=r,e.maxFontSize=a},Xe=function(e,t,r,a){var n=new _(e,t,r,a);return Ye(n),n},We=(e,t,r,a)=>new _(e,t,r,a),_e=function(e){var t=new B(e);return Ye(t),t},je=function(e,t,r){var a="";switch(e){case"amsrm":a="AMS";break;case"textrm":a="Main";break;case"textsf":a="SansSerif";break;case"texttt":a="Typewriter";break;default:a=e}return a+"-"+("textbf"===t&&"textit"===r?"BoldItalic":"textbf"===t?"Bold":"textit"===t?"Italic":"Regular")},$e={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},Ze={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},Ke={fontMap:$e,makeSymbol:Ge,mathsym:function(e,t,r,a){return void 0===a&&(a=[]),"boldsymbol"===r.font&&Fe(e,"Main-Bold",t).metrics?Ge(e,"Main-Bold",t,r,a.concat(["mathbf"])):"\\"===e||"main"===ne[t][e].font?Ge(e,"Main-Regular",t,r,a):Ge(e,"AMS-Regular",t,r,a.concat(["amsrm"]))},makeSpan:Xe,makeSvgSpan:We,makeLineSpan:function(e,t,r){var a=Xe([e],[],t);return a.height=Math.max(r||t.fontMetrics().defaultRuleThickness,t.minRuleThickness),a.style.borderBottomWidth=G(a.height),a.maxFontSize=1,a},makeAnchor:function(e,t,r,a){var n=new j(e,t,r,a);return Ye(n),n},makeFragment:_e,wrapFragment:function(e,t){return e instanceof B?Xe([],[e],t):e},makeVList:function(e,t){for(var{children:r,depth:a}=function(e){if("individualShift"===e.positionType){for(var t=e.children,r=[t[0]],a=-t[0].shift-t[0].elem.depth,n=a,i=1;i0)return Ge(n,h,a,t,o.concat(m));if(l){var c,p;if("boldsymbol"===l){var u=function(e,t,r,a,n){return"textord"!==n&&Fe(e,"Math-BoldItalic",t).metrics?{fontName:"Math-BoldItalic",fontClass:"boldsymbol"}:{fontName:"Main-Bold",fontClass:"mathbf"}}(n,a,0,0,r);c=u.fontName,p=[u.fontClass]}else s?(c=$e[l].fontName,p=[l]):(c=je(l,t.fontWeight,t.fontShape),p=[l,t.fontWeight,t.fontShape]);if(Fe(n,c,a).metrics)return Ge(n,c,a,t,o.concat(p));if(we.hasOwnProperty(n)&&"Typewriter"===c.slice(0,10)){for(var d=[],g=0;g{var r=Xe(["mspace"],[],t),a=F(e,t);return r.style.marginRight=G(a),r},staticSvg:function(e,t){var[r,a,n]=Ze[e],i=new Q(r),o=new J([i],{width:G(a),height:G(n),style:"width:"+G(a),viewBox:"0 0 "+1e3*a+" "+1e3*n,preserveAspectRatio:"xMinYMin"}),s=We(["overlay"],[o],t);return s.height=n,s.style.height=G(n),s.style.width=G(a),s},svgData:Ze,tryCombineChars:e=>{for(var t=0;t{var r=t.classes[0],a=e.classes[0];"mbin"===r&&m.contains(pt,a)?t.classes[0]="mord":"mbin"===a&&m.contains(ct,r)&&(e.classes[0]="mord")}),{node:c},p,u),ft(n,((e,t)=>{var r=yt(t),a=yt(e),n=r&&a?e.hasClass("mtight")?rt[r][a]:tt[r][a]:null;if(n)return Ke.makeGlue(n,l)}),{node:c},p,u),n},ft=function e(t,r,a,n,i){n&&t.push(n);for(var o=0;or=>{t.splice(e+1,0,r),o++})(o)}}n&&t.pop()},vt=function(e){return e instanceof B||e instanceof j||e instanceof _&&e.hasClass("enclosing")?e:null},bt=function e(t,r){var a=vt(t);if(a){var n=a.children;if(n.length){if("right"===r)return e(n[n.length-1],"right");if("left"===r)return e(n[0],"left")}}return t},yt=function(e,t){return e?(t&&(e=bt(e,t)),dt[e.classes[0]]||null):null},xt=function(e,t){var r=["nulldelimiter"].concat(e.baseSizingClasses());return mt(t.concat(r))},wt=function(e,t,r){if(!e)return mt();if(nt[e.type]){var a=nt[e.type](e,t);if(r&&t.size!==r.size){a=mt(t.sizingClasses(r),[a],t);var n=t.sizeMultiplier/r.sizeMultiplier;a.height*=n,a.depth*=n}return a}throw new i("Got group of unknown type: '"+e.type+"'")};function kt(e,t){var r=mt(["base"],e,t),a=mt(["strut"]);return a.style.height=G(r.height+r.depth),r.depth&&(a.style.verticalAlign=G(-r.depth)),r.children.unshift(a),r}function St(e,t){var r=null;1===e.length&&"tag"===e[0].type&&(r=e[0].tag,e=e[0].body);var a,n=gt(e,t,"root");2===n.length&&n[1].hasClass("tag")&&(a=n.pop());for(var i,o=[],s=[],l=0;l0&&(o.push(kt(s,t)),s=[]),o.push(n[l]));s.length>0&&o.push(kt(s,t)),r?((i=kt(gt(r,t,!0))).classes=["tag"],o.push(i)):a&&o.push(a);var m=mt(["katex-html"],o);if(m.setAttribute("aria-hidden","true"),i){var c=i.children[0];c.style.height=G(m.height+m.depth),m.depth&&(c.style.verticalAlign=G(-m.depth))}return m}function Mt(e){return new B(e)}class zt{constructor(e,t,r){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=t||[],this.classes=r||[]}setAttribute(e,t){this.attributes[e]=t}getAttribute(e){return this.attributes[e]}toNode(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);this.classes.length>0&&(e.className=U(this.classes));for(var r=0;r0&&(e+=' class ="'+m.escape(U(this.classes))+'"'),e+=">";for(var r=0;r"}toText(){return this.children.map((e=>e.toText())).join("")}}class At{constructor(e){this.text=void 0,this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return m.escape(this.toText())}toText(){return this.text}}var Tt={MathNode:zt,TextNode:At,SpaceNode:class{constructor(e){this.width=void 0,this.character=void 0,this.width=e,this.character=e>=.05555&&e<=.05556?"\u200a":e>=.1666&&e<=.1667?"\u2009":e>=.2222&&e<=.2223?"\u2005":e>=.2777&&e<=.2778?"\u2005\u200a":e>=-.05556&&e<=-.05555?"\u200a\u2063":e>=-.1667&&e<=-.1666?"\u2009\u2063":e>=-.2223&&e<=-.2222?"\u205f\u2063":e>=-.2778&&e<=-.2777?"\u2005\u2063":null}toNode(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",G(this.width)),e}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}},newDocumentFragment:Mt},Bt=function(e,t,r){return!ne[t][e]||!ne[t][e].replace||55349===e.charCodeAt(0)||we.hasOwnProperty(e)&&r&&(r.fontFamily&&"tt"===r.fontFamily.slice(4,6)||r.font&&"tt"===r.font.slice(4,6))||(e=ne[t][e].replace),new Tt.TextNode(e)},Ct=function(e){return 1===e.length?e[0]:new Tt.MathNode("mrow",e)},Nt=function(e,t){if("texttt"===t.fontFamily)return"monospace";if("textsf"===t.fontFamily)return"textit"===t.fontShape&&"textbf"===t.fontWeight?"sans-serif-bold-italic":"textit"===t.fontShape?"sans-serif-italic":"textbf"===t.fontWeight?"bold-sans-serif":"sans-serif";if("textit"===t.fontShape&&"textbf"===t.fontWeight)return"bold-italic";if("textit"===t.fontShape)return"italic";if("textbf"===t.fontWeight)return"bold";var r=t.font;if(!r||"mathnormal"===r)return null;var a=e.mode;if("mathit"===r)return"italic";if("boldsymbol"===r)return"textord"===e.type?"bold":"bold-italic";if("mathbf"===r)return"bold";if("mathbb"===r)return"double-struck";if("mathfrak"===r)return"fraktur";if("mathscr"===r||"mathcal"===r)return"script";if("mathsf"===r)return"sans-serif";if("mathtt"===r)return"monospace";var n=e.text;return m.contains(["\\imath","\\jmath"],n)?null:(ne[a][n]&&ne[a][n].replace&&(n=ne[a][n].replace),I(n,Ke.fontMap[r].fontName,a)?Ke.fontMap[r].variant:null)},qt=function(e,t,r){if(1===e.length){var a=Rt(e[0],t);return r&&a instanceof zt&&"mo"===a.type&&(a.setAttribute("lspace","0em"),a.setAttribute("rspace","0em")),[a]}for(var n,i=[],o=0;o0&&(m.text=m.text.slice(0,1)+"\u0338"+m.text.slice(1),i.pop())}}}i.push(s),n=s}return i},It=function(e,t,r){return Ct(qt(e,t,r))},Rt=function(e,t){if(!e)return new Tt.MathNode("mrow");if(it[e.type])return it[e.type](e,t);throw new i("Got group of unknown type: '"+e.type+"'")};function Ht(e,t,r,a,n){var i,o=qt(e,r);i=1===o.length&&o[0]instanceof zt&&m.contains(["mrow","mtable"],o[0].type)?o[0]:new Tt.MathNode("mrow",o);var s=new Tt.MathNode("annotation",[new Tt.TextNode(t)]);s.setAttribute("encoding","application/x-tex");var l=new Tt.MathNode("semantics",[i,s]),h=new Tt.MathNode("math",[l]);h.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),a&&h.setAttribute("display","block");var c=n?"katex":"katex-mathml";return Ke.makeSpan([c],[h])}var Ot=function(e){return new L({style:e.displayMode?k.DISPLAY:k.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},Et=function(e,t){if(t.displayMode){var r=["katex-display"];t.leqno&&r.push("leqno"),t.fleqn&&r.push("fleqn"),e=Ke.makeSpan(r,[e])}return e},Lt={widehat:"^",widecheck:"\u02c7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23df",overbrace:"\u23de",overgroup:"\u23e0",undergroup:"\u23e1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21d2",xRightarrow:"\u21d2",overleftharpoon:"\u21bc",xleftharpoonup:"\u21bc",overrightharpoon:"\u21c0",xrightharpoonup:"\u21c0",xLeftarrow:"\u21d0",xLeftrightarrow:"\u21d4",xhookleftarrow:"\u21a9",xhookrightarrow:"\u21aa",xmapsto:"\u21a6",xrightharpoondown:"\u21c1",xleftharpoondown:"\u21bd",xrightleftharpoons:"\u21cc",xleftrightharpoons:"\u21cb",xtwoheadleftarrow:"\u219e",xtwoheadrightarrow:"\u21a0",xlongequal:"=",xtofrom:"\u21c4",xrightleftarrows:"\u21c4",xrightequilibrium:"\u21cc",xleftequilibrium:"\u21cb","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},Dt={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},Vt=function(e,t,r,a,n){var i,o=e.height+e.depth+r+a;if(/fbox|color|angl/.test(t)){if(i=Ke.makeSpan(["stretchy",t],[],n),"fbox"===t){var s=n.color&&n.getColor();s&&(i.style.borderColor=s)}}else{var l=[];/^[bx]cancel$/.test(t)&&l.push(new ee({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(t)&&l.push(new ee({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var h=new J(l,{width:"100%",height:G(o)});i=Ke.makeSvgSpan([],[h],n)}return i.height=o,i.style.height=G(o),i},Pt=function(e){var t=new Tt.MathNode("mo",[new Tt.TextNode(Lt[e.replace(/^\\/,"")])]);return t.setAttribute("stretchy","true"),t},Ft=function(e,t){var{span:r,minWidth:a,height:n}=function(){var r=4e5,a=e.label.slice(1);if(m.contains(["widehat","widecheck","widetilde","utilde"],a)){var n,i,o,s="ordgroup"===(d=e.base).type?d.body.length:1;if(s>5)"widehat"===a||"widecheck"===a?(n=420,r=2364,o=.42,i=a+"4"):(n=312,r=2340,o=.34,i="tilde4");else{var l=[1,1,2,2,3,3][s];"widehat"===a||"widecheck"===a?(r=[0,1062,2364,2364,2364][l],n=[0,239,300,360,420][l],o=[0,.24,.3,.3,.36,.42][l],i=a+l):(r=[0,600,1033,2339,2340][l],n=[0,260,286,306,312][l],o=[0,.26,.286,.3,.306,.34][l],i="tilde"+l)}var h=new Q(i),c=new J([h],{width:"100%",height:G(o),viewBox:"0 0 "+r+" "+n,preserveAspectRatio:"none"});return{span:Ke.makeSvgSpan([],[c],t),minWidth:0,height:o}}var p,u,d,g=[],f=Dt[a],[v,b,y]=f,x=y/1e3,w=v.length;if(1===w)p=["hide-tail"],u=[f[3]];else if(2===w)p=["halfarrow-left","halfarrow-right"],u=["xMinYMin","xMaxYMin"];else{if(3!==w)throw new Error("Correct katexImagesData or update code here to support\n "+w+" children.");p=["brace-left","brace-center","brace-right"],u=["xMinYMin","xMidYMin","xMaxYMin"]}for(var k=0;k0&&(r.style.minWidth=G(a)),r};function Gt(e,t){if(!e||e.type!==t)throw new Error("Expected node of type "+t+", but got "+(e?"node of type "+e.type:String(e)));return e}function Ut(e){var t=Yt(e);if(!t)throw new Error("Expected node of symbol group type, but got "+(e?"node of type "+e.type:String(e)));return t}function Yt(e){return e&&("atom"===e.type||ae.hasOwnProperty(e.type))?e:null}var Xt=(e,t)=>{var r,a,n;e&&"supsub"===e.type?(r=(a=Gt(e.base,"accent")).base,e.base=r,n=function(e){if(e instanceof _)return e;throw new Error("Expected span but got "+String(e)+".")}(wt(e,t)),e.base=a):r=(a=Gt(e,"accent")).base;var i=wt(r,t.havingCrampedStyle()),o=0;if(a.isShifty&&m.isCharacterBox(r)){var s=m.getBaseElem(r);o=te(wt(s,t.havingCrampedStyle())).skew}var l,h="\\c"===a.label,c=h?i.height+i.depth:Math.min(i.height,t.fontMetrics().xHeight);if(a.isStretchy)l=Ft(a,t),l=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"elem",elem:l,wrapperClasses:["svg-align"],wrapperStyle:o>0?{width:"calc(100% - "+G(2*o)+")",marginLeft:G(2*o)}:void 0}]},t);else{var p,u;"\\vec"===a.label?(p=Ke.staticSvg("vec",t),u=Ke.svgData.vec[1]):((p=te(p=Ke.makeOrd({mode:a.mode,text:a.label},t,"textord"))).italic=0,u=p.width,h&&(c+=p.depth)),l=Ke.makeSpan(["accent-body"],[p]);var d="\\textcircled"===a.label;d&&(l.classes.push("accent-full"),c=i.height);var g=o;d||(g-=u/2),l.style.left=G(g),"\\textcircled"===a.label&&(l.style.top=".2em"),l=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"kern",size:-c},{type:"elem",elem:l}]},t)}var f=Ke.makeSpan(["mord","accent"],[l],t);return n?(n.children[0]=f,n.height=Math.max(f.height,n.height),n.classes[0]="mord",n):f},Wt=(e,t)=>{var r=e.isStretchy?Pt(e.label):new Tt.MathNode("mo",[Bt(e.label,e.mode)]),a=new Tt.MathNode("mover",[Rt(e.base,t),r]);return a.setAttribute("accent","true"),a},_t=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map((e=>"\\"+e)).join("|"));ot({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:(e,t)=>{var r=lt(t[0]),a=!_t.test(e.funcName),n=!a||"\\widehat"===e.funcName||"\\widetilde"===e.funcName||"\\widecheck"===e.funcName;return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:a,isShifty:n,base:r}},htmlBuilder:Xt,mathmlBuilder:Wt}),ot({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:(e,t)=>{var r=t[0],a=e.parser.mode;return"math"===a&&(e.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+e.funcName+" works only in text mode"),a="text"),{type:"accent",mode:a,label:e.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:Xt,mathmlBuilder:Wt}),ot({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:(e,t)=>{var{parser:r,funcName:a}=e,n=t[0];return{type:"accentUnder",mode:r.mode,label:a,base:n}},htmlBuilder:(e,t)=>{var r=wt(e.base,t),a=Ft(e,t),n="\\utilde"===e.label?.12:0,i=Ke.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:a,wrapperClasses:["svg-align"]},{type:"kern",size:n},{type:"elem",elem:r}]},t);return Ke.makeSpan(["mord","accentunder"],[i],t)},mathmlBuilder:(e,t)=>{var r=Pt(e.label),a=new Tt.MathNode("munder",[Rt(e.base,t),r]);return a.setAttribute("accentunder","true"),a}});var jt=e=>{var t=new Tt.MathNode("mpadded",e?[e]:[]);return t.setAttribute("width","+0.6em"),t.setAttribute("lspace","0.3em"),t};ot({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(e,t,r){var{parser:a,funcName:n}=e;return{type:"xArrow",mode:a.mode,label:n,body:t[0],below:r[0]}},htmlBuilder(e,t){var r,a=t.style,n=t.havingStyle(a.sup()),i=Ke.wrapFragment(wt(e.body,n,t),t),o="\\x"===e.label.slice(0,2)?"x":"cd";i.classes.push(o+"-arrow-pad"),e.below&&(n=t.havingStyle(a.sub()),(r=Ke.wrapFragment(wt(e.below,n,t),t)).classes.push(o+"-arrow-pad"));var s,l=Ft(e,t),h=-t.fontMetrics().axisHeight+.5*l.height,m=-t.fontMetrics().axisHeight-.5*l.height-.111;if((i.depth>.25||"\\xleftequilibrium"===e.label)&&(m-=i.depth),r){var c=-t.fontMetrics().axisHeight+r.height+.5*l.height+.111;s=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:m},{type:"elem",elem:l,shift:h},{type:"elem",elem:r,shift:c}]},t)}else s=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:m},{type:"elem",elem:l,shift:h}]},t);return s.children[0].children[0].children[1].classes.push("svg-align"),Ke.makeSpan(["mrel","x-arrow"],[s],t)},mathmlBuilder(e,t){var r,a=Pt(e.label);if(a.setAttribute("minsize","x"===e.label.charAt(0)?"1.75em":"3.0em"),e.body){var n=jt(Rt(e.body,t));if(e.below){var i=jt(Rt(e.below,t));r=new Tt.MathNode("munderover",[a,i,n])}else r=new Tt.MathNode("mover",[a,n])}else if(e.below){var o=jt(Rt(e.below,t));r=new Tt.MathNode("munder",[a,o])}else r=jt(),r=new Tt.MathNode("mover",[a,r]);return r}});var $t=Ke.makeSpan;function Zt(e,t){var r=gt(e.body,t,!0);return $t([e.mclass],r,t)}function Kt(e,t){var r,a=qt(e.body,t);return"minner"===e.mclass?r=new Tt.MathNode("mpadded",a):"mord"===e.mclass?e.isCharacterBox?(r=a[0]).type="mi":r=new Tt.MathNode("mi",a):(e.isCharacterBox?(r=a[0]).type="mo":r=new Tt.MathNode("mo",a),"mbin"===e.mclass?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):"mpunct"===e.mclass?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):"mopen"===e.mclass||"mclose"===e.mclass?(r.attributes.lspace="0em",r.attributes.rspace="0em"):"minner"===e.mclass&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}ot({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(e,t){var{parser:r,funcName:a}=e,n=t[0];return{type:"mclass",mode:r.mode,mclass:"m"+a.slice(5),body:ht(n),isCharacterBox:m.isCharacterBox(n)}},htmlBuilder:Zt,mathmlBuilder:Kt});var Jt=e=>{var t="ordgroup"===e.type&&e.body.length?e.body[0]:e;return"atom"!==t.type||"bin"!==t.family&&"rel"!==t.family?"mord":"m"+t.family};ot({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(e,t){var{parser:r}=e;return{type:"mclass",mode:r.mode,mclass:Jt(t[0]),body:ht(t[1]),isCharacterBox:m.isCharacterBox(t[1])}}}),ot({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(e,t){var r,{parser:a,funcName:n}=e,i=t[1],o=t[0];r="\\stackrel"!==n?Jt(i):"mrel";var s={type:"op",mode:i.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:"\\stackrel"!==n,body:ht(i)},l={type:"supsub",mode:o.mode,base:s,sup:"\\underset"===n?null:o,sub:"\\underset"===n?o:null};return{type:"mclass",mode:a.mode,mclass:r,body:[l],isCharacterBox:m.isCharacterBox(l)}},htmlBuilder:Zt,mathmlBuilder:Kt}),ot({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"pmb",mode:r.mode,mclass:Jt(t[0]),body:ht(t[0])}},htmlBuilder(e,t){var r=gt(e.body,t,!0),a=Ke.makeSpan([e.mclass],r,t);return a.style.textShadow="0.02em 0.01em 0.04px",a},mathmlBuilder(e,t){var r=qt(e.body,t),a=new Tt.MathNode("mstyle",r);return a.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),a}});var Qt={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},er=e=>"textord"===e.type&&"@"===e.text;function tr(e,t,r){var a=Qt[e];switch(a){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(a,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":var n={type:"atom",text:a,mode:"math",family:"rel"},i={type:"ordgroup",mode:"math",body:[r.callFunction("\\\\cdleft",[t[0]],[]),r.callFunction("\\Big",[n],[]),r.callFunction("\\\\cdright",[t[1]],[])]};return r.callFunction("\\\\cdparent",[i],[]);case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":return r.callFunction("\\Big",[{type:"textord",text:"\\Vert",mode:"math"}],[]);default:return{type:"textord",text:" ",mode:"math"}}}ot({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:a}=e;return{type:"cdlabel",mode:r.mode,side:a.slice(4),label:t[0]}},htmlBuilder(e,t){var r=t.havingStyle(t.style.sup()),a=Ke.wrapFragment(wt(e.label,r,t),t);return a.classes.push("cd-label-"+e.side),a.style.bottom=G(.8-a.depth),a.height=0,a.depth=0,a},mathmlBuilder(e,t){var r=new Tt.MathNode("mrow",[Rt(e.label,t)]);return(r=new Tt.MathNode("mpadded",[r])).setAttribute("width","0"),"left"===e.side&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),(r=new Tt.MathNode("mstyle",[r])).setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}}),ot({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(e,t){var{parser:r}=e;return{type:"cdlabelparent",mode:r.mode,fragment:t[0]}},htmlBuilder(e,t){var r=Ke.wrapFragment(wt(e.fragment,t),t);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder:(e,t)=>new Tt.MathNode("mrow",[Rt(e.fragment,t)])}),ot({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(e,t){for(var{parser:r}=e,a=Gt(t[0],"ordgroup").body,n="",o=0;o=1114111)throw new i("\\@char with invalid code point "+n);return l<=65535?s=String.fromCharCode(l):(l-=65536,s=String.fromCharCode(55296+(l>>10),56320+(1023&l))),{type:"textord",mode:r.mode,text:s}}});var rr=(e,t)=>{var r=gt(e.body,t.withColor(e.color),!1);return Ke.makeFragment(r)},ar=(e,t)=>{var r=qt(e.body,t.withColor(e.color)),a=new Tt.MathNode("mstyle",r);return a.setAttribute("mathcolor",e.color),a};ot({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(e,t){var{parser:r}=e,a=Gt(t[0],"color-token").color,n=t[1];return{type:"color",mode:r.mode,color:a,body:ht(n)}},htmlBuilder:rr,mathmlBuilder:ar}),ot({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(e,t){var{parser:r,breakOnTokenText:a}=e,n=Gt(t[0],"color-token").color;r.gullet.macros.set("\\current@color",n);var i=r.parseExpression(!0,a);return{type:"color",mode:r.mode,color:n,body:i}},htmlBuilder:rr,mathmlBuilder:ar}),ot({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(e,t,r){var{parser:a}=e,n="["===a.gullet.future().text?a.parseSizeGroup(!0):null,i=!a.settings.displayMode||!a.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:a.mode,newLine:i,size:n&&Gt(n,"size").value}},htmlBuilder(e,t){var r=Ke.makeSpan(["mspace"],[],t);return e.newLine&&(r.classes.push("newline"),e.size&&(r.style.marginTop=G(F(e.size,t)))),r},mathmlBuilder(e,t){var r=new Tt.MathNode("mspace");return e.newLine&&(r.setAttribute("linebreak","newline"),e.size&&r.setAttribute("height",G(F(e.size,t)))),r}});var nr={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},ir=e=>{var t=e.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(t))throw new i("Expected a control sequence",e);return t},or=(e,t,r,a)=>{var n=e.gullet.macros.get(r.text);null==n&&(r.noexpand=!0,n={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,n,a)};ot({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(e){var{parser:t,funcName:r}=e;t.consumeSpaces();var a=t.fetch();if(nr[a.text])return"\\global"!==r&&"\\\\globallong"!==r||(a.text=nr[a.text]),Gt(t.parseFunction(),"internal");throw new i("Invalid token after macro prefix",a)}}),ot({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,a=t.gullet.popToken(),n=a.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(n))throw new i("Expected a control sequence",a);for(var o,s=0,l=[[]];"{"!==t.gullet.future().text;)if("#"===(a=t.gullet.popToken()).text){if("{"===t.gullet.future().text){o=t.gullet.future(),l[s].push("{");break}if(a=t.gullet.popToken(),!/^[1-9]$/.test(a.text))throw new i('Invalid argument number "'+a.text+'"');if(parseInt(a.text)!==s+1)throw new i('Argument number "'+a.text+'" out of order');s++,l.push([])}else{if("EOF"===a.text)throw new i("Expected a macro definition");l[s].push(a.text)}var{tokens:h}=t.gullet.consumeArg();return o&&h.unshift(o),"\\edef"!==r&&"\\xdef"!==r||(h=t.gullet.expandTokens(h)).reverse(),t.gullet.macros.set(n,{tokens:h,numArgs:s,delimiters:l},r===nr[r]),{type:"internal",mode:t.mode}}}),ot({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,a=ir(t.gullet.popToken());t.gullet.consumeSpaces();var n=(e=>{var t=e.gullet.popToken();return"="===t.text&&" "===(t=e.gullet.popToken()).text&&(t=e.gullet.popToken()),t})(t);return or(t,a,n,"\\\\globallet"===r),{type:"internal",mode:t.mode}}}),ot({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,a=ir(t.gullet.popToken()),n=t.gullet.popToken(),i=t.gullet.popToken();return or(t,a,i,"\\\\globalfuture"===r),t.gullet.pushToken(i),t.gullet.pushToken(n),{type:"internal",mode:t.mode}}});var sr=function(e,t,r){var a=I(ne.math[e]&&ne.math[e].replace||e,t,r);if(!a)throw new Error("Unsupported symbol "+e+" and font size "+t+".");return a},lr=function(e,t,r,a){var n=r.havingBaseStyle(t),i=Ke.makeSpan(a.concat(n.sizingClasses(r)),[e],r),o=n.sizeMultiplier/r.sizeMultiplier;return i.height*=o,i.depth*=o,i.maxFontSize=n.sizeMultiplier,i},hr=function(e,t,r){var a=t.havingBaseStyle(r),n=(1-t.sizeMultiplier/a.sizeMultiplier)*t.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=G(n),e.height-=n,e.depth+=n},mr=function(e,t,r,a,n,i){var o=function(e,t,r,a){return Ke.makeSymbol(e,"Size"+t+"-Regular",r,a)}(e,t,n,a),s=lr(Ke.makeSpan(["delimsizing","size"+t],[o],a),k.TEXT,a,i);return r&&hr(s,a,k.TEXT),s},cr=function(e,t,r){var a;return a="Size1-Regular"===t?"delim-size1":"delim-size4",{type:"elem",elem:Ke.makeSpan(["delimsizinginner",a],[Ke.makeSpan([],[Ke.makeSymbol(e,t,r)])])}},pr=function(e,t,r){var a=C["Size4-Regular"][e.charCodeAt(0)]?C["Size4-Regular"][e.charCodeAt(0)][4]:C["Size1-Regular"][e.charCodeAt(0)][4],n=new Q("inner",function(e,t){switch(e){case"\u239c":return"M291 0 H417 V"+t+" H291z M291 0 H417 V"+t+" H291z";case"\u2223":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145z";case"\u2225":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145zM367 0 H410 V"+t+" H367z M367 0 H410 V"+t+" H367z";case"\u239f":return"M457 0 H583 V"+t+" H457z M457 0 H583 V"+t+" H457z";case"\u23a2":return"M319 0 H403 V"+t+" H319z M319 0 H403 V"+t+" H319z";case"\u23a5":return"M263 0 H347 V"+t+" H263z M263 0 H347 V"+t+" H263z";case"\u23aa":return"M384 0 H504 V"+t+" H384z M384 0 H504 V"+t+" H384z";case"\u23d0":return"M312 0 H355 V"+t+" H312z M312 0 H355 V"+t+" H312z";case"\u2016":return"M257 0 H300 V"+t+" H257z M257 0 H300 V"+t+" H257zM478 0 H521 V"+t+" H478z M478 0 H521 V"+t+" H478z";default:return""}}(e,Math.round(1e3*t))),i=new J([n],{width:G(a),height:G(t),style:"width:"+G(a),viewBox:"0 0 "+1e3*a+" "+Math.round(1e3*t),preserveAspectRatio:"xMinYMin"}),o=Ke.makeSvgSpan([],[i],r);return o.height=t,o.style.height=G(t),o.style.width=G(a),{type:"elem",elem:o}},ur={type:"kern",size:-.008},dr=["|","\\lvert","\\rvert","\\vert"],gr=["\\|","\\lVert","\\rVert","\\Vert"],fr=function(e,t,r,a,n,i){var o,s,l,h,c="",p=0;o=l=h=e,s=null;var u="Size1-Regular";"\\uparrow"===e?l=h="\u23d0":"\\Uparrow"===e?l=h="\u2016":"\\downarrow"===e?o=l="\u23d0":"\\Downarrow"===e?o=l="\u2016":"\\updownarrow"===e?(o="\\uparrow",l="\u23d0",h="\\downarrow"):"\\Updownarrow"===e?(o="\\Uparrow",l="\u2016",h="\\Downarrow"):m.contains(dr,e)?(l="\u2223",c="vert",p=333):m.contains(gr,e)?(l="\u2225",c="doublevert",p=556):"["===e||"\\lbrack"===e?(o="\u23a1",l="\u23a2",h="\u23a3",u="Size4-Regular",c="lbrack",p=667):"]"===e||"\\rbrack"===e?(o="\u23a4",l="\u23a5",h="\u23a6",u="Size4-Regular",c="rbrack",p=667):"\\lfloor"===e||"\u230a"===e?(l=o="\u23a2",h="\u23a3",u="Size4-Regular",c="lfloor",p=667):"\\lceil"===e||"\u2308"===e?(o="\u23a1",l=h="\u23a2",u="Size4-Regular",c="lceil",p=667):"\\rfloor"===e||"\u230b"===e?(l=o="\u23a5",h="\u23a6",u="Size4-Regular",c="rfloor",p=667):"\\rceil"===e||"\u2309"===e?(o="\u23a4",l=h="\u23a5",u="Size4-Regular",c="rceil",p=667):"("===e||"\\lparen"===e?(o="\u239b",l="\u239c",h="\u239d",u="Size4-Regular",c="lparen",p=875):")"===e||"\\rparen"===e?(o="\u239e",l="\u239f",h="\u23a0",u="Size4-Regular",c="rparen",p=875):"\\{"===e||"\\lbrace"===e?(o="\u23a7",s="\u23a8",h="\u23a9",l="\u23aa",u="Size4-Regular"):"\\}"===e||"\\rbrace"===e?(o="\u23ab",s="\u23ac",h="\u23ad",l="\u23aa",u="Size4-Regular"):"\\lgroup"===e||"\u27ee"===e?(o="\u23a7",h="\u23a9",l="\u23aa",u="Size4-Regular"):"\\rgroup"===e||"\u27ef"===e?(o="\u23ab",h="\u23ad",l="\u23aa",u="Size4-Regular"):"\\lmoustache"===e||"\u23b0"===e?(o="\u23a7",h="\u23ad",l="\u23aa",u="Size4-Regular"):"\\rmoustache"!==e&&"\u23b1"!==e||(o="\u23ab",h="\u23a9",l="\u23aa",u="Size4-Regular");var d=sr(o,u,n),g=d.height+d.depth,f=sr(l,u,n),v=f.height+f.depth,b=sr(h,u,n),y=b.height+b.depth,x=0,w=1;if(null!==s){var S=sr(s,u,n);x=S.height+S.depth,w=2}var M=g+y+x,z=M+Math.max(0,Math.ceil((t-M)/(w*v)))*w*v,A=a.fontMetrics().axisHeight;r&&(A*=a.sizeMultiplier);var T=z/2-A,B=[];if(c.length>0){var C=z-g-y,N=Math.round(1e3*z),q=function(e,t){switch(e){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+t+" v1759 h347 v-84\nH403z M403 1759 V0 H319 V1759 v"+t+" v1759 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+t+" v1759 H0 v84 H347z\nM347 1759 V0 H263 V1759 v"+t+" v1759 h84z";case"vert":return"M145 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v"+t+" v585 h43z";case"doublevert":return"M145 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v"+t+" v585 h43z\nM367 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M410 15 H367 v585 v"+t+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+t+" v1715 h263 v84 H319z\nMM319 602 V0 H403 V602 v"+t+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+t+" v1799 H0 v-84 H319z\nMM319 602 V0 H403 V602 v"+t+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+t+" v602 h84z\nM403 1759 V0 H319 V1759 v"+t+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+t+" v602 h84z\nM347 1759 V0 h-84 V1759 v"+t+" v602 h84z";case"lparen":return"M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1\nc-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,\n-36,557 l0,"+(t+84)+"c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,\n949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9\nc0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,\n-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189\nl0,-"+(t+92)+"c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,\n-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z";case"rparen":return"M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,\n63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5\nc11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,"+(t+9)+"\nc-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664\nc-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11\nc0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17\nc242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558\nl0,-"+(t+144)+"c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,\n-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z";default:throw new Error("Unknown stretchy delimiter.")}}(c,Math.round(1e3*C)),I=new Q(c,q),R=(p/1e3).toFixed(3)+"em",H=(N/1e3).toFixed(3)+"em",O=new J([I],{width:R,height:H,viewBox:"0 0 "+p+" "+N}),E=Ke.makeSvgSpan([],[O],a);E.height=N/1e3,E.style.width=R,E.style.height=H,B.push({type:"elem",elem:E})}else{if(B.push(cr(h,u,n)),B.push(ur),null===s){var L=z-g-y+.016;B.push(pr(l,L,a))}else{var D=(z-g-y-x)/2+.016;B.push(pr(l,D,a)),B.push(ur),B.push(cr(s,u,n)),B.push(ur),B.push(pr(l,D,a))}B.push(ur),B.push(cr(o,u,n))}var V=a.havingBaseStyle(k.TEXT),P=Ke.makeVList({positionType:"bottom",positionData:T,children:B},V);return lr(Ke.makeSpan(["delimsizing","mult"],[P],V),k.TEXT,a,i)},vr=.08,br=function(e,t,r,a,n){var i=function(e,t,r){t*=1e3;var a="";switch(e){case"sqrtMain":a=function(e,t){return"M95,"+(622+e+t)+"\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl"+e/2.075+" -"+e+"\nc5.3,-9.3,12,-14,20,-14\nH400000v"+(40+e)+"H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM"+(834+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,A);break;case"sqrtSize1":a=function(e,t){return"M263,"+(601+e+t)+"c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl"+e/2.084+" -"+e+"\nc4.7,-7.3,11,-11,19,-11\nH40000v"+(40+e)+"H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,A);break;case"sqrtSize2":a=function(e,t){return"M983 "+(10+e+t)+"\nl"+e/3.13+" -"+e+"\nc4,-6.7,10,-10,18,-10 H400000v"+(40+e)+"\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,A);break;case"sqrtSize3":a=function(e,t){return"M424,"+(2398+e+t)+"\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl"+e/4.223+" -"+e+"c4,-6.7,10,-10,18,-10 H400000\nv"+(40+e)+"H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M"+(1001+e)+" "+t+"\nh400000v"+(40+e)+"h-400000z"}(t,A);break;case"sqrtSize4":a=function(e,t){return"M473,"+(2713+e+t)+"\nc339.3,-1799.3,509.3,-2700,510,-2702 l"+e/5.298+" -"+e+"\nc3.3,-7.3,9.3,-11,18,-11 H400000v"+(40+e)+"H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM"+(1001+e)+" "+t+"h400000v"+(40+e)+"H1017.7z"}(t,A);break;case"sqrtTall":a=function(e,t,r){return"M702 "+(e+t)+"H400000"+(40+e)+"\nH742v"+(r-54-t-e)+"l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 "+t+"H400000v"+(40+e)+"H742z"}(t,A,r)}return a}(e,a,r),o=new Q(e,i),s=new J([o],{width:"400em",height:G(t),viewBox:"0 0 400000 "+r,preserveAspectRatio:"xMinYMin slice"});return Ke.makeSvgSpan(["hide-tail"],[s],n)},yr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","\\surd"],xr=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1"],wr=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],kr=[0,1.2,1.8,2.4,3],Sr=[{type:"small",style:k.SCRIPTSCRIPT},{type:"small",style:k.SCRIPT},{type:"small",style:k.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],Mr=[{type:"small",style:k.SCRIPTSCRIPT},{type:"small",style:k.SCRIPT},{type:"small",style:k.TEXT},{type:"stack"}],zr=[{type:"small",style:k.SCRIPTSCRIPT},{type:"small",style:k.SCRIPT},{type:"small",style:k.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],Ar=function(e){if("small"===e.type)return"Main-Regular";if("large"===e.type)return"Size"+e.size+"-Regular";if("stack"===e.type)return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},Tr=function(e,t,r,a){for(var n=Math.min(2,3-a.style.size);nt)return r[n]}return r[r.length-1]},Br=function(e,t,r,a,n,i){var o;"<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),o=m.contains(wr,e)?Sr:m.contains(yr,e)?zr:Mr;var s=Tr(e,t,o,a);return"small"===s.type?function(e,t,r,a,n,i){var o=Ke.makeSymbol(e,"Main-Regular",n,a),s=lr(o,t,a,i);return r&&hr(s,a,t),s}(e,s.style,r,a,n,i):"large"===s.type?mr(e,s.size,r,a,n,i):fr(e,t,r,a,n,i)},Cr={sqrtImage:function(e,t){var r,a,n=t.havingBaseSizing(),i=Tr("\\surd",e*n.sizeMultiplier,zr,n),o=n.sizeMultiplier,s=Math.max(0,t.minRuleThickness-t.fontMetrics().sqrtRuleThickness),l=0,h=0,m=0;return"small"===i.type?(e<1?o=1:e<1.4&&(o=.7),h=(1+s)/o,(r=br("sqrtMain",l=(1+s+vr)/o,m=1e3+1e3*s+80,s,t)).style.minWidth="0.853em",a=.833/o):"large"===i.type?(m=1080*kr[i.size],h=(kr[i.size]+s)/o,l=(kr[i.size]+s+vr)/o,(r=br("sqrtSize"+i.size,l,m,s,t)).style.minWidth="1.02em",a=1/o):(l=e+s+vr,h=e+s,m=Math.floor(1e3*e+s)+80,(r=br("sqrtTall",l,m,s,t)).style.minWidth="0.742em",a=1.056),r.height=h,r.style.height=G(l),{span:r,advanceWidth:a,ruleWidth:(t.fontMetrics().sqrtRuleThickness+s)*o}},sizedDelim:function(e,t,r,a,n){if("<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),m.contains(yr,e)||m.contains(wr,e))return mr(e,t,!1,r,a,n);if(m.contains(xr,e))return fr(e,kr[t],!1,r,a,n);throw new i("Illegal delimiter: '"+e+"'")},sizeToMaxHeight:kr,customSizedDelim:Br,leftRightDelim:function(e,t,r,a,n,i){var o=a.fontMetrics().axisHeight*a.sizeMultiplier,s=5/a.fontMetrics().ptPerEm,l=Math.max(t-o,r+o),h=Math.max(l/500*901,2*l-s);return Br(e,h,!0,a,n,i)}},Nr={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},qr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27e8","\\rangle","\u27e9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];function Ir(e,t){var r=Yt(e);if(r&&m.contains(qr,r.text))return r;throw new i(r?"Invalid delimiter '"+r.text+"' after '"+t.funcName+"'":"Invalid delimiter type '"+e.type+"'",e)}function Rr(e){if(!e.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}ot({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:(e,t)=>{var r=Ir(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:Nr[e.funcName].size,mclass:Nr[e.funcName].mclass,delim:r.text}},htmlBuilder:(e,t)=>"."===e.delim?Ke.makeSpan([e.mclass]):Cr.sizedDelim(e.delim,e.size,t,e.mode,[e.mclass]),mathmlBuilder:e=>{var t=[];"."!==e.delim&&t.push(Bt(e.delim,e.mode));var r=new Tt.MathNode("mo",t);"mopen"===e.mclass||"mclose"===e.mclass?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var a=G(Cr.sizeToMaxHeight[e.size]);return r.setAttribute("minsize",a),r.setAttribute("maxsize",a),r}}),ot({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=e.parser.gullet.macros.get("\\current@color");if(r&&"string"!=typeof r)throw new i("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:e.parser.mode,delim:Ir(t[0],e).text,color:r}}}),ot({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=Ir(t[0],e),a=e.parser;++a.leftrightDepth;var n=a.parseExpression(!1);--a.leftrightDepth,a.expect("\\right",!1);var i=Gt(a.parseFunction(),"leftright-right");return{type:"leftright",mode:a.mode,body:n,left:r.text,right:i.delim,rightColor:i.color}},htmlBuilder:(e,t)=>{Rr(e);for(var r,a,n=gt(e.body,t,!0,["mopen","mclose"]),i=0,o=0,s=!1,l=0;l{Rr(e);var r=qt(e.body,t);if("."!==e.left){var a=new Tt.MathNode("mo",[Bt(e.left,e.mode)]);a.setAttribute("fence","true"),r.unshift(a)}if("."!==e.right){var n=new Tt.MathNode("mo",[Bt(e.right,e.mode)]);n.setAttribute("fence","true"),e.rightColor&&n.setAttribute("mathcolor",e.rightColor),r.push(n)}return Ct(r)}}),ot({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=Ir(t[0],e);if(!e.parser.leftrightDepth)throw new i("\\middle without preceding \\left",r);return{type:"middle",mode:e.parser.mode,delim:r.text}},htmlBuilder:(e,t)=>{var r;if("."===e.delim)r=xt(t,[]);else{r=Cr.sizedDelim(e.delim,1,t,e.mode,[]);var a={delim:e.delim,options:t};r.isMiddle=a}return r},mathmlBuilder:(e,t)=>{var r="\\vert"===e.delim||"|"===e.delim?Bt("|","text"):Bt(e.delim,e.mode),a=new Tt.MathNode("mo",[r]);return a.setAttribute("fence","true"),a.setAttribute("lspace","0.05em"),a.setAttribute("rspace","0.05em"),a}});var Hr=(e,t)=>{var r,a,n,i=Ke.wrapFragment(wt(e.body,t),t),o=e.label.slice(1),s=t.sizeMultiplier,l=0,h=m.isCharacterBox(e.body);if("sout"===o)(r=Ke.makeSpan(["stretchy","sout"])).height=t.fontMetrics().defaultRuleThickness/s,l=-.5*t.fontMetrics().xHeight;else if("phase"===o){var c=F({number:.6,unit:"pt"},t),p=F({number:.35,unit:"ex"},t);s/=t.havingBaseSizing().sizeMultiplier;var u=i.height+i.depth+c+p;i.style.paddingLeft=G(u/2+c);var d=Math.floor(1e3*u*s),g="M400000 "+(a=d)+" H0 L"+a/2+" 0 l65 45 L145 "+(a-80)+" H400000z",f=new J([new Q("phase",g)],{width:"400em",height:G(d/1e3),viewBox:"0 0 400000 "+d,preserveAspectRatio:"xMinYMin slice"});(r=Ke.makeSvgSpan(["hide-tail"],[f],t)).style.height=G(u),l=i.depth+c+p}else{/cancel/.test(o)?h||i.classes.push("cancel-pad"):"angl"===o?i.classes.push("anglpad"):i.classes.push("boxpad");var v=0,b=0,y=0;/box/.test(o)?(y=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness),b=v=t.fontMetrics().fboxsep+("colorbox"===o?0:y)):"angl"===o?(v=4*(y=Math.max(t.fontMetrics().defaultRuleThickness,t.minRuleThickness)),b=Math.max(0,.25-i.depth)):b=v=h?.2:0,r=Vt(i,o,v,b,t),/fbox|boxed|fcolorbox/.test(o)?(r.style.borderStyle="solid",r.style.borderWidth=G(y)):"angl"===o&&.049!==y&&(r.style.borderTopWidth=G(y),r.style.borderRightWidth=G(y)),l=i.depth+b,e.backgroundColor&&(r.style.backgroundColor=e.backgroundColor,e.borderColor&&(r.style.borderColor=e.borderColor))}if(e.backgroundColor)n=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:r,shift:l},{type:"elem",elem:i,shift:0}]},t);else{var x=/cancel|phase/.test(o)?["svg-align"]:[];n=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:0},{type:"elem",elem:r,shift:l,wrapperClasses:x}]},t)}return/cancel/.test(o)&&(n.height=i.height,n.depth=i.depth),/cancel/.test(o)&&!h?Ke.makeSpan(["mord","cancel-lap"],[n],t):Ke.makeSpan(["mord"],[n],t)},Or=(e,t)=>{var r=0,a=new Tt.MathNode(e.label.indexOf("colorbox")>-1?"mpadded":"menclose",[Rt(e.body,t)]);switch(e.label){case"\\cancel":a.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":a.setAttribute("notation","downdiagonalstrike");break;case"\\phase":a.setAttribute("notation","phasorangle");break;case"\\sout":a.setAttribute("notation","horizontalstrike");break;case"\\fbox":a.setAttribute("notation","box");break;case"\\angl":a.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=t.fontMetrics().fboxsep*t.fontMetrics().ptPerEm,a.setAttribute("width","+"+2*r+"pt"),a.setAttribute("height","+"+2*r+"pt"),a.setAttribute("lspace",r+"pt"),a.setAttribute("voffset",r+"pt"),"\\fcolorbox"===e.label){var n=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness);a.setAttribute("style","border: "+n+"em solid "+String(e.borderColor))}break;case"\\xcancel":a.setAttribute("notation","updiagonalstrike downdiagonalstrike")}return e.backgroundColor&&a.setAttribute("mathbackground",e.backgroundColor),a};ot({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(e,t,r){var{parser:a,funcName:n}=e,i=Gt(t[0],"color-token").color,o=t[1];return{type:"enclose",mode:a.mode,label:n,backgroundColor:i,body:o}},htmlBuilder:Hr,mathmlBuilder:Or}),ot({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(e,t,r){var{parser:a,funcName:n}=e,i=Gt(t[0],"color-token").color,o=Gt(t[1],"color-token").color,s=t[2];return{type:"enclose",mode:a.mode,label:n,backgroundColor:o,borderColor:i,body:s}},htmlBuilder:Hr,mathmlBuilder:Or}),ot({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\fbox",body:t[0]}}}),ot({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:a}=e,n=t[0];return{type:"enclose",mode:r.mode,label:a,body:n}},htmlBuilder:Hr,mathmlBuilder:Or}),ot({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(e,t){var{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\angl",body:t[0]}}});var Er={};function Lr(e){for(var{type:t,names:r,props:a,handler:n,htmlBuilder:i,mathmlBuilder:o}=e,s={type:t,numArgs:a.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:n},l=0;l{if(!e.parser.settings.displayMode)throw new i("{"+e.envName+"} can be used only in display mode.")};function Gr(e){if(-1===e.indexOf("ed"))return-1===e.indexOf("*")}function Ur(e,t,r){var{hskipBeforeAndAfter:a,addJot:o,cols:s,arraystretch:l,colSeparationType:h,autoTag:m,singleRow:c,emptySingleRow:p,maxNumCols:u,leqno:d}=t;if(e.gullet.beginGroup(),c||e.gullet.macros.set("\\cr","\\\\\\relax"),!l){var g=e.gullet.expandMacroAsText("\\arraystretch");if(null==g)l=1;else if(!(l=parseFloat(g))||l<0)throw new i("Invalid \\arraystretch: "+g)}e.gullet.beginGroup();var f=[],v=[f],b=[],y=[],x=null!=m?[]:void 0;function w(){m&&e.gullet.macros.set("\\@eqnsw","1",!0)}function k(){x&&(e.gullet.macros.get("\\df@tag")?(x.push(e.subparse([new n("\\df@tag")])),e.gullet.macros.set("\\df@tag",void 0,!0)):x.push(Boolean(m)&&"1"===e.gullet.macros.get("\\@eqnsw")))}for(w(),y.push(Pr(e));;){var S=e.parseExpression(!1,c?"\\end":"\\\\");e.gullet.endGroup(),e.gullet.beginGroup(),S={type:"ordgroup",mode:e.mode,body:S},r&&(S={type:"styling",mode:e.mode,style:r,body:[S]}),f.push(S);var M=e.fetch().text;if("&"===M){if(u&&f.length===u){if(c||h)throw new i("Too many tab characters: &",e.nextToken);e.settings.reportNonstrict("textEnv","Too few columns specified in the {array} column argument.")}e.consume()}else{if("\\end"===M){k(),1===f.length&&"styling"===S.type&&0===S.body[0].body.length&&(v.length>1||!p)&&v.pop(),y.length0&&(y+=.25),h.push({pos:y,isDashed:e[t]})}for(x(o[0]),r=0;r0&&(M<(B+=b)&&(M=B),B=0),e.addJot&&(M+=g),z.height=S,z.depth=M,y+=S,z.pos=y,y+=M+B,l[r]=z,x(o[r+1])}var C,N,q=y/2+t.fontMetrics().axisHeight,I=e.cols||[],R=[],H=[];if(e.tags&&e.tags.some((e=>e)))for(r=0;r=s)){var W=void 0;(a>0||e.hskipBeforeAndAfter)&&0!==(W=m.deflt(V.pregap,u))&&((C=Ke.makeSpan(["arraycolsep"],[])).style.width=G(W),R.push(C));var _=[];for(r=0;r0){for(var K=Ke.makeLineSpan("hline",t,c),J=Ke.makeLineSpan("hdashline",t,c),Q=[{type:"elem",elem:l,shift:0}];h.length>0;){var ee=h.pop(),te=ee.pos-q;ee.isDashed?Q.push({type:"elem",elem:J,shift:te}):Q.push({type:"elem",elem:K,shift:te})}l=Ke.makeVList({positionType:"individualShift",children:Q},t)}if(0===H.length)return Ke.makeSpan(["mord"],[l],t);var re=Ke.makeVList({positionType:"individualShift",children:H},t);return re=Ke.makeSpan(["tag"],[re],t),Ke.makeFragment([l,re])},Wr={c:"center ",l:"left ",r:"right "},_r=function(e,t){for(var r=[],a=new Tt.MathNode("mtd",[],["mtr-glue"]),n=new Tt.MathNode("mtd",[],["mml-eqn-num"]),i=0;i0){var u=e.cols,d="",g=!1,f=0,v=u.length;"separator"===u[0].type&&(c+="top ",f=1),"separator"===u[u.length-1].type&&(c+="bottom ",v-=1);for(var b=f;b0?"left ":"",c+=S[S.length-1].length>0?"right ":"";for(var M=1;M-1?"alignat":"align",o="split"===e.envName,s=Ur(e.parser,{cols:a,addJot:!0,autoTag:o?void 0:Gr(e.envName),emptySingleRow:!0,colSeparationType:n,maxNumCols:o?2:void 0,leqno:e.parser.settings.leqno},"display"),l=0,h={type:"ordgroup",mode:e.mode,body:[]};if(t[0]&&"ordgroup"===t[0].type){for(var m="",c=0;c0&&p&&(g=1),a[u]={type:"align",align:d,pregap:g,postgap:0}}return s.colSeparationType=p?"align":"alignat",s};Lr({type:"array",names:["array","darray"],props:{numArgs:1},handler(e,t){var r=(Yt(t[0])?[t[0]]:Gt(t[0],"ordgroup").body).map((function(e){var t=Ut(e).text;if(-1!=="lcr".indexOf(t))return{type:"align",align:t};if("|"===t)return{type:"separator",separator:"|"};if(":"===t)return{type:"separator",separator:":"};throw new i("Unknown column alignment: "+t,e)})),a={cols:r,hskipBeforeAndAfter:!0,maxNumCols:r.length};return Ur(e.parser,a,Yr(e.envName))},htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(e){var t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName.replace("*","")],r="c",a={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if("*"===e.envName.charAt(e.envName.length-1)){var n=e.parser;if(n.consumeSpaces(),"["===n.fetch().text){if(n.consume(),n.consumeSpaces(),r=n.fetch().text,-1==="lcr".indexOf(r))throw new i("Expected l or c or r",n.nextToken);n.consume(),n.consumeSpaces(),n.expect("]"),n.consume(),a.cols=[{type:"align",align:r}]}}var o=Ur(e.parser,a,Yr(e.envName)),s=Math.max(0,...o.body.map((e=>e.length)));return o.cols=new Array(s).fill({type:"align",align:r}),t?{type:"leftright",mode:e.mode,body:[o],left:t[0],right:t[1],rightColor:void 0}:o},htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(e){var t=Ur(e.parser,{arraystretch:.5},"script");return t.colSeparationType="small",t},htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["subarray"],props:{numArgs:1},handler(e,t){var r=(Yt(t[0])?[t[0]]:Gt(t[0],"ordgroup").body).map((function(e){var t=Ut(e).text;if(-1!=="lc".indexOf(t))return{type:"align",align:t};throw new i("Unknown column alignment: "+t,e)}));if(r.length>1)throw new i("{subarray} can contain only one column");var a={cols:r,hskipBeforeAndAfter:!1,arraystretch:.5};if((a=Ur(e.parser,a,"script")).body.length>0&&a.body[0].length>1)throw new i("{subarray} can contain only one column");return a},htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(e){var t=Ur(e.parser,{arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},Yr(e.envName));return{type:"leftright",mode:e.mode,body:[t],left:e.envName.indexOf("r")>-1?".":"\\{",right:e.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:jr,htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(e){m.contains(["gather","gather*"],e.envName)&&Fr(e);var t={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:Gr(e.envName),emptySingleRow:!0,leqno:e.parser.settings.leqno};return Ur(e.parser,t,"display")},htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:jr,htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(e){Fr(e);var t={autoTag:Gr(e.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:e.parser.settings.leqno};return Ur(e.parser,t,"display")},htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["CD"],props:{numArgs:0},handler:e=>(Fr(e),function(e){var t=[];for(e.gullet.beginGroup(),e.gullet.macros.set("\\cr","\\\\\\relax"),e.gullet.beginGroup();;){t.push(e.parseExpression(!1,"\\\\")),e.gullet.endGroup(),e.gullet.beginGroup();var r=e.fetch().text;if("&"!==r&&"\\\\"!==r){if("\\end"===r){0===t[t.length-1].length&&t.pop();break}throw new i("Expected \\\\ or \\cr or \\end",e.nextToken)}e.consume()}for(var a,n,o=[],s=[o],l=0;l-1);else{if(!("<>AV".indexOf(p)>-1))throw new i('Expected one of "<>AV=|." after @',h[c]);for(var d=0;d<2;d++){for(var g=!0,f=c+1;f{var r=e.font,a=t.withFont(r);return wt(e.body,a)},Kr=(e,t)=>{var r=e.font,a=t.withFont(r);return Rt(e.body,a)},Jr={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};ot({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:(e,t)=>{var{parser:r,funcName:a}=e,n=lt(t[0]),i=a;return i in Jr&&(i=Jr[i]),{type:"font",mode:r.mode,font:i.slice(1),body:n}},htmlBuilder:Zr,mathmlBuilder:Kr}),ot({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:(e,t)=>{var{parser:r}=e,a=t[0],n=m.isCharacterBox(a);return{type:"mclass",mode:r.mode,mclass:Jt(a),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:a}],isCharacterBox:n}}}),ot({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:(e,t)=>{var{parser:r,funcName:a,breakOnTokenText:n}=e,{mode:i}=r,o=r.parseExpression(!0,n);return{type:"font",mode:i,font:"math"+a.slice(1),body:{type:"ordgroup",mode:r.mode,body:o}}},htmlBuilder:Zr,mathmlBuilder:Kr});var Qr=(e,t)=>{var r=t;return"display"===e?r=r.id>=k.SCRIPT.id?r.text():k.DISPLAY:"text"===e&&r.size===k.DISPLAY.size?r=k.TEXT:"script"===e?r=k.SCRIPT:"scriptscript"===e&&(r=k.SCRIPTSCRIPT),r},ea=(e,t)=>{var r,a=Qr(e.size,t.style),n=a.fracNum(),i=a.fracDen();r=t.havingStyle(n);var o=wt(e.numer,r,t);if(e.continued){var s=8.5/t.fontMetrics().ptPerEm,l=3.5/t.fontMetrics().ptPerEm;o.height=o.height0?3*c:7*c,d=t.fontMetrics().denom1):(m>0?(p=t.fontMetrics().num2,u=c):(p=t.fontMetrics().num3,u=3*c),d=t.fontMetrics().denom2),h){var x=t.fontMetrics().axisHeight;p-o.depth-(x+.5*m){var r=new Tt.MathNode("mfrac",[Rt(e.numer,t),Rt(e.denom,t)]);if(e.hasBarLine){if(e.barSize){var a=F(e.barSize,t);r.setAttribute("linethickness",G(a))}}else r.setAttribute("linethickness","0px");var n=Qr(e.size,t.style);if(n.size!==t.style.size){r=new Tt.MathNode("mstyle",[r]);var i=n.size===k.DISPLAY.size?"true":"false";r.setAttribute("displaystyle",i),r.setAttribute("scriptlevel","0")}if(null!=e.leftDelim||null!=e.rightDelim){var o=[];if(null!=e.leftDelim){var s=new Tt.MathNode("mo",[new Tt.TextNode(e.leftDelim.replace("\\",""))]);s.setAttribute("fence","true"),o.push(s)}if(o.push(r),null!=e.rightDelim){var l=new Tt.MathNode("mo",[new Tt.TextNode(e.rightDelim.replace("\\",""))]);l.setAttribute("fence","true"),o.push(l)}return Ct(o)}return r};ot({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:(e,t)=>{var r,{parser:a,funcName:n}=e,i=t[0],o=t[1],s=null,l=null,h="auto";switch(n){case"\\dfrac":case"\\frac":case"\\tfrac":r=!0;break;case"\\\\atopfrac":r=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":r=!1,s="(",l=")";break;case"\\\\bracefrac":r=!1,s="\\{",l="\\}";break;case"\\\\brackfrac":r=!1,s="[",l="]";break;default:throw new Error("Unrecognized genfrac command")}switch(n){case"\\dfrac":case"\\dbinom":h="display";break;case"\\tfrac":case"\\tbinom":h="text"}return{type:"genfrac",mode:a.mode,continued:!1,numer:i,denom:o,hasBarLine:r,leftDelim:s,rightDelim:l,size:h,barSize:null}},htmlBuilder:ea,mathmlBuilder:ta}),ot({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:(e,t)=>{var{parser:r,funcName:a}=e,n=t[0],i=t[1];return{type:"genfrac",mode:r.mode,continued:!0,numer:n,denom:i,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}}}),ot({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(e){var t,{parser:r,funcName:a,token:n}=e;switch(a){case"\\over":t="\\frac";break;case"\\choose":t="\\binom";break;case"\\atop":t="\\\\atopfrac";break;case"\\brace":t="\\\\bracefrac";break;case"\\brack":t="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:r.mode,replaceWith:t,token:n}}});var ra=["display","text","script","scriptscript"],aa=function(e){var t=null;return e.length>0&&(t="."===(t=e)?null:t),t};ot({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(e,t){var r,{parser:a}=e,n=t[4],i=t[5],o=lt(t[0]),s="atom"===o.type&&"open"===o.family?aa(o.text):null,l=lt(t[1]),h="atom"===l.type&&"close"===l.family?aa(l.text):null,m=Gt(t[2],"size"),c=null;r=!!m.isBlank||(c=m.value).number>0;var p="auto",u=t[3];if("ordgroup"===u.type){if(u.body.length>0){var d=Gt(u.body[0],"textord");p=ra[Number(d.text)]}}else u=Gt(u,"textord"),p=ra[Number(u.text)];return{type:"genfrac",mode:a.mode,numer:n,denom:i,continued:!1,hasBarLine:r,barSize:c,leftDelim:s,rightDelim:h,size:p}},htmlBuilder:ea,mathmlBuilder:ta}),ot({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(e,t){var{parser:r,funcName:a,token:n}=e;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:Gt(t[0],"size").value,token:n}}}),ot({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:(e,t)=>{var{parser:r,funcName:a}=e,n=t[0],i=function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e}(Gt(t[1],"infix").size),o=t[2],s=i.number>0;return{type:"genfrac",mode:r.mode,numer:n,denom:o,continued:!1,hasBarLine:s,barSize:i,leftDelim:null,rightDelim:null,size:"auto"}},htmlBuilder:ea,mathmlBuilder:ta});var na=(e,t)=>{var r,a,n=t.style;"supsub"===e.type?(r=e.sup?wt(e.sup,t.havingStyle(n.sup()),t):wt(e.sub,t.havingStyle(n.sub()),t),a=Gt(e.base,"horizBrace")):a=Gt(e,"horizBrace");var i,o=wt(a.base,t.havingBaseStyle(k.DISPLAY)),s=Ft(a,t);if(a.isOver?(i=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:o},{type:"kern",size:.1},{type:"elem",elem:s}]},t)).children[0].children[0].children[1].classes.push("svg-align"):(i=Ke.makeVList({positionType:"bottom",positionData:o.depth+.1+s.height,children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:o}]},t)).children[0].children[0].children[0].classes.push("svg-align"),r){var l=Ke.makeSpan(["mord",a.isOver?"mover":"munder"],[i],t);i=a.isOver?Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:l},{type:"kern",size:.2},{type:"elem",elem:r}]},t):Ke.makeVList({positionType:"bottom",positionData:l.depth+.2+r.height+r.depth,children:[{type:"elem",elem:r},{type:"kern",size:.2},{type:"elem",elem:l}]},t)}return Ke.makeSpan(["mord",a.isOver?"mover":"munder"],[i],t)};ot({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:a}=e;return{type:"horizBrace",mode:r.mode,label:a,isOver:/^\\over/.test(a),base:t[0]}},htmlBuilder:na,mathmlBuilder:(e,t)=>{var r=Pt(e.label);return new Tt.MathNode(e.isOver?"mover":"munder",[Rt(e.base,t),r])}}),ot({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,a=t[1],n=Gt(t[0],"url").url;return r.settings.isTrusted({command:"\\href",url:n})?{type:"href",mode:r.mode,href:n,body:ht(a)}:r.formatUnsupportedCmd("\\href")},htmlBuilder:(e,t)=>{var r=gt(e.body,t,!1);return Ke.makeAnchor(e.href,[],r,t)},mathmlBuilder:(e,t)=>{var r=It(e.body,t);return r instanceof zt||(r=new zt("mrow",[r])),r.setAttribute("href",e.href),r}}),ot({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,a=Gt(t[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:a}))return r.formatUnsupportedCmd("\\url");for(var n=[],i=0;inew Tt.MathNode("mrow",qt(e.body,t))}),ot({type:"html",names:["\\htmlClass","\\htmlId","\\htmlStyle","\\htmlData"],props:{numArgs:2,argTypes:["raw","original"],allowedInText:!0},handler:(e,t)=>{var r,{parser:a,funcName:n,token:o}=e,s=Gt(t[0],"raw").string,l=t[1];a.settings.strict&&a.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var h={};switch(n){case"\\htmlClass":h.class=s,r={command:"\\htmlClass",class:s};break;case"\\htmlId":h.id=s,r={command:"\\htmlId",id:s};break;case"\\htmlStyle":h.style=s,r={command:"\\htmlStyle",style:s};break;case"\\htmlData":for(var m=s.split(","),c=0;c{var r=gt(e.body,t,!1),a=["enclosing"];e.attributes.class&&a.push(...e.attributes.class.trim().split(/\s+/));var n=Ke.makeSpan(a,r,t);for(var i in e.attributes)"class"!==i&&e.attributes.hasOwnProperty(i)&&n.setAttribute(i,e.attributes[i]);return n},mathmlBuilder:(e,t)=>It(e.body,t)}),ot({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e;return{type:"htmlmathml",mode:r.mode,html:ht(t[0]),mathml:ht(t[1])}},htmlBuilder:(e,t)=>{var r=gt(e.html,t,!1);return Ke.makeFragment(r)},mathmlBuilder:(e,t)=>It(e.mathml,t)});var ia=function(e){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e))return{number:+e,unit:"bp"};var t=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e);if(!t)throw new i("Invalid size: '"+e+"' in \\includegraphics");var r={number:+(t[1]+t[2]),unit:t[3]};if(!P(r))throw new i("Invalid unit: '"+r.unit+"' in \\includegraphics.");return r};ot({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:(e,t,r)=>{var{parser:a}=e,n={number:0,unit:"em"},o={number:.9,unit:"em"},s={number:0,unit:"em"},l="";if(r[0])for(var h=Gt(r[0],"raw").string.split(","),m=0;m{var r=F(e.height,t),a=0;e.totalheight.number>0&&(a=F(e.totalheight,t)-r);var n=0;e.width.number>0&&(n=F(e.width,t));var i={height:G(r+a)};n>0&&(i.width=G(n)),a>0&&(i.verticalAlign=G(-a));var o=new $(e.src,e.alt,i);return o.height=r,o.depth=a,o},mathmlBuilder:(e,t)=>{var r=new Tt.MathNode("mglyph",[]);r.setAttribute("alt",e.alt);var a=F(e.height,t),n=0;if(e.totalheight.number>0&&(n=F(e.totalheight,t)-a,r.setAttribute("valign",G(-n))),r.setAttribute("height",G(a+n)),e.width.number>0){var i=F(e.width,t);r.setAttribute("width",G(i))}return r.setAttribute("src",e.src),r}}),ot({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(e,t){var{parser:r,funcName:a}=e,n=Gt(t[0],"size");if(r.settings.strict){var i="m"===a[1],o="mu"===n.value.unit;i?(o||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" supports only mu units, not "+n.value.unit+" units"),"math"!==r.mode&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" works only in math mode")):o&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:n.value}},htmlBuilder:(e,t)=>Ke.makeGlue(e.dimension,t),mathmlBuilder(e,t){var r=F(e.dimension,t);return new Tt.SpaceNode(r)}}),ot({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r,funcName:a}=e,n=t[0];return{type:"lap",mode:r.mode,alignment:a.slice(5),body:n}},htmlBuilder:(e,t)=>{var r;"clap"===e.alignment?(r=Ke.makeSpan([],[wt(e.body,t)]),r=Ke.makeSpan(["inner"],[r],t)):r=Ke.makeSpan(["inner"],[wt(e.body,t)]);var a=Ke.makeSpan(["fix"],[]),n=Ke.makeSpan([e.alignment],[r,a],t),i=Ke.makeSpan(["strut"]);return i.style.height=G(n.height+n.depth),n.depth&&(i.style.verticalAlign=G(-n.depth)),n.children.unshift(i),n=Ke.makeSpan(["thinbox"],[n],t),Ke.makeSpan(["mord","vbox"],[n],t)},mathmlBuilder:(e,t)=>{var r=new Tt.MathNode("mpadded",[Rt(e.body,t)]);if("rlap"!==e.alignment){var a="llap"===e.alignment?"-1":"-0.5";r.setAttribute("lspace",a+"width")}return r.setAttribute("width","0px"),r}}),ot({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){var{funcName:r,parser:a}=e,n=a.mode;a.switchMode("math");var i="\\("===r?"\\)":"$",o=a.parseExpression(!1,i);return a.expect(i),a.switchMode(n),{type:"styling",mode:a.mode,style:"text",body:o}}}),ot({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){throw new i("Mismatched "+e.funcName)}});var oa=(e,t)=>{switch(t.style.size){case k.DISPLAY.size:return e.display;case k.TEXT.size:return e.text;case k.SCRIPT.size:return e.script;case k.SCRIPTSCRIPT.size:return e.scriptscript;default:return e.text}};ot({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:(e,t)=>{var{parser:r}=e;return{type:"mathchoice",mode:r.mode,display:ht(t[0]),text:ht(t[1]),script:ht(t[2]),scriptscript:ht(t[3])}},htmlBuilder:(e,t)=>{var r=oa(e,t),a=gt(r,t,!1);return Ke.makeFragment(a)},mathmlBuilder:(e,t)=>{var r=oa(e,t);return It(r,t)}});var sa=(e,t,r,a,n,i,o)=>{e=Ke.makeSpan([],[e]);var s,l,h,c=r&&m.isCharacterBox(r);if(t){var p=wt(t,a.havingStyle(n.sup()),a);l={elem:p,kern:Math.max(a.fontMetrics().bigOpSpacing1,a.fontMetrics().bigOpSpacing3-p.depth)}}if(r){var u=wt(r,a.havingStyle(n.sub()),a);s={elem:u,kern:Math.max(a.fontMetrics().bigOpSpacing2,a.fontMetrics().bigOpSpacing4-u.height)}}if(l&&s){var d=a.fontMetrics().bigOpSpacing5+s.elem.height+s.elem.depth+s.kern+e.depth+o;h=Ke.makeVList({positionType:"bottom",positionData:d,children:[{type:"kern",size:a.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:G(-i)},{type:"kern",size:s.kern},{type:"elem",elem:e},{type:"kern",size:l.kern},{type:"elem",elem:l.elem,marginLeft:G(i)},{type:"kern",size:a.fontMetrics().bigOpSpacing5}]},a)}else if(s){var g=e.height-o;h=Ke.makeVList({positionType:"top",positionData:g,children:[{type:"kern",size:a.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:G(-i)},{type:"kern",size:s.kern},{type:"elem",elem:e}]},a)}else{if(!l)return e;var f=e.depth+o;h=Ke.makeVList({positionType:"bottom",positionData:f,children:[{type:"elem",elem:e},{type:"kern",size:l.kern},{type:"elem",elem:l.elem,marginLeft:G(i)},{type:"kern",size:a.fontMetrics().bigOpSpacing5}]},a)}var v=[h];if(s&&0!==i&&!c){var b=Ke.makeSpan(["mspace"],[],a);b.style.marginRight=G(i),v.unshift(b)}return Ke.makeSpan(["mop","op-limits"],v,a)},la=["\\smallint"],ha=(e,t)=>{var r,a,n,i=!1;"supsub"===e.type?(r=e.sup,a=e.sub,n=Gt(e.base,"op"),i=!0):n=Gt(e,"op");var o,s=t.style,l=!1;if(s.size===k.DISPLAY.size&&n.symbol&&!m.contains(la,n.name)&&(l=!0),n.symbol){var h=l?"Size2-Regular":"Size1-Regular",c="";if("\\oiint"!==n.name&&"\\oiiint"!==n.name||(c=n.name.slice(1),n.name="oiint"===c?"\\iint":"\\iiint"),o=Ke.makeSymbol(n.name,h,"math",t,["mop","op-symbol",l?"large-op":"small-op"]),c.length>0){var p=o.italic,u=Ke.staticSvg(c+"Size"+(l?"2":"1"),t);o=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:o,shift:0},{type:"elem",elem:u,shift:l?.08:0}]},t),n.name="\\"+c,o.classes.unshift("mop"),o.italic=p}}else if(n.body){var d=gt(n.body,t,!0);1===d.length&&d[0]instanceof K?(o=d[0]).classes[0]="mop":o=Ke.makeSpan(["mop"],d,t)}else{for(var g=[],f=1;f{var r;if(e.symbol)r=new zt("mo",[Bt(e.name,e.mode)]),m.contains(la,e.name)&&r.setAttribute("largeop","false");else if(e.body)r=new zt("mo",qt(e.body,t));else{r=new zt("mi",[new At(e.name.slice(1))]);var a=new zt("mo",[Bt("\u2061","text")]);r=e.parentIsSupSub?new zt("mrow",[r,a]):Mt([r,a])}return r},ca={"\u220f":"\\prod","\u2210":"\\coprod","\u2211":"\\sum","\u22c0":"\\bigwedge","\u22c1":"\\bigvee","\u22c2":"\\bigcap","\u22c3":"\\bigcup","\u2a00":"\\bigodot","\u2a01":"\\bigoplus","\u2a02":"\\bigotimes","\u2a04":"\\biguplus","\u2a06":"\\bigsqcup"};ot({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","\u220f","\u2210","\u2211","\u22c0","\u22c1","\u22c2","\u22c3","\u2a00","\u2a01","\u2a02","\u2a04","\u2a06"],props:{numArgs:0},handler:(e,t)=>{var{parser:r,funcName:a}=e,n=a;return 1===n.length&&(n=ca[n]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:ha,mathmlBuilder:ma}),ot({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var{parser:r}=e,a=t[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:ht(a)}},htmlBuilder:ha,mathmlBuilder:ma});var pa={"\u222b":"\\int","\u222c":"\\iint","\u222d":"\\iiint","\u222e":"\\oint","\u222f":"\\oiint","\u2230":"\\oiiint"};ot({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:ha,mathmlBuilder:ma}),ot({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:ha,mathmlBuilder:ma}),ot({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","\u222b","\u222c","\u222d","\u222e","\u222f","\u2230"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e,a=r;return 1===a.length&&(a=pa[a]),{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:a}},htmlBuilder:ha,mathmlBuilder:ma});var ua=(e,t)=>{var r,a,n,i,o=!1;if("supsub"===e.type?(r=e.sup,a=e.sub,n=Gt(e.base,"operatorname"),o=!0):n=Gt(e,"operatorname"),n.body.length>0){for(var s=n.body.map((e=>{var t=e.text;return"string"==typeof t?{type:"textord",mode:e.mode,text:t}:e})),l=gt(s,t.withFont("mathrm"),!0),h=0;h{var{parser:r,funcName:a}=e,n=t[0];return{type:"operatorname",mode:r.mode,body:ht(n),alwaysHandleSupSub:"\\operatornamewithlimits"===a,limits:!1,parentIsSupSub:!1}},htmlBuilder:ua,mathmlBuilder:(e,t)=>{for(var r=qt(e.body,t.withFont("mathrm")),a=!0,n=0;ne.toText())).join("");r=[new Tt.TextNode(s)]}var l=new Tt.MathNode("mi",r);l.setAttribute("mathvariant","normal");var h=new Tt.MathNode("mo",[Bt("\u2061","text")]);return e.parentIsSupSub?new Tt.MathNode("mrow",[l,h]):Tt.newDocumentFragment([l,h])}}),Vr("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@"),st({type:"ordgroup",htmlBuilder:(e,t)=>e.semisimple?Ke.makeFragment(gt(e.body,t,!1)):Ke.makeSpan(["mord"],gt(e.body,t,!0),t),mathmlBuilder:(e,t)=>It(e.body,t,!0)}),ot({type:"overline",names:["\\overline"],props:{numArgs:1},handler(e,t){var{parser:r}=e,a=t[0];return{type:"overline",mode:r.mode,body:a}},htmlBuilder(e,t){var r=wt(e.body,t.havingCrampedStyle()),a=Ke.makeLineSpan("overline-line",t),n=t.fontMetrics().defaultRuleThickness,i=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*n},{type:"elem",elem:a},{type:"kern",size:n}]},t);return Ke.makeSpan(["mord","overline"],[i],t)},mathmlBuilder(e,t){var r=new Tt.MathNode("mo",[new Tt.TextNode("\u203e")]);r.setAttribute("stretchy","true");var a=new Tt.MathNode("mover",[Rt(e.body,t),r]);return a.setAttribute("accent","true"),a}}),ot({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,a=t[0];return{type:"phantom",mode:r.mode,body:ht(a)}},htmlBuilder:(e,t)=>{var r=gt(e.body,t.withPhantom(),!1);return Ke.makeFragment(r)},mathmlBuilder:(e,t)=>{var r=qt(e.body,t);return new Tt.MathNode("mphantom",r)}}),ot({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,a=t[0];return{type:"hphantom",mode:r.mode,body:a}},htmlBuilder:(e,t)=>{var r=Ke.makeSpan([],[wt(e.body,t.withPhantom())]);if(r.height=0,r.depth=0,r.children)for(var a=0;a{var r=qt(ht(e.body),t),a=new Tt.MathNode("mphantom",r),n=new Tt.MathNode("mpadded",[a]);return n.setAttribute("height","0px"),n.setAttribute("depth","0px"),n}}),ot({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,a=t[0];return{type:"vphantom",mode:r.mode,body:a}},htmlBuilder:(e,t)=>{var r=Ke.makeSpan(["inner"],[wt(e.body,t.withPhantom())]),a=Ke.makeSpan(["fix"],[]);return Ke.makeSpan(["mord","rlap"],[r,a],t)},mathmlBuilder:(e,t)=>{var r=qt(ht(e.body),t),a=new Tt.MathNode("mphantom",r),n=new Tt.MathNode("mpadded",[a]);return n.setAttribute("width","0px"),n}}),ot({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(e,t){var{parser:r}=e,a=Gt(t[0],"size").value,n=t[1];return{type:"raisebox",mode:r.mode,dy:a,body:n}},htmlBuilder(e,t){var r=wt(e.body,t),a=F(e.dy,t);return Ke.makeVList({positionType:"shift",positionData:-a,children:[{type:"elem",elem:r}]},t)},mathmlBuilder(e,t){var r=new Tt.MathNode("mpadded",[Rt(e.body,t)]),a=e.dy.number+e.dy.unit;return r.setAttribute("voffset",a),r}}),ot({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0},handler(e){var{parser:t}=e;return{type:"internal",mode:t.mode}}}),ot({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,argTypes:["size","size","size"]},handler(e,t,r){var{parser:a}=e,n=r[0],i=Gt(t[0],"size"),o=Gt(t[1],"size");return{type:"rule",mode:a.mode,shift:n&&Gt(n,"size").value,width:i.value,height:o.value}},htmlBuilder(e,t){var r=Ke.makeSpan(["mord","rule"],[],t),a=F(e.width,t),n=F(e.height,t),i=e.shift?F(e.shift,t):0;return r.style.borderRightWidth=G(a),r.style.borderTopWidth=G(n),r.style.bottom=G(i),r.width=a,r.height=n+i,r.depth=-i,r.maxFontSize=1.125*n*t.sizeMultiplier,r},mathmlBuilder(e,t){var r=F(e.width,t),a=F(e.height,t),n=e.shift?F(e.shift,t):0,i=t.color&&t.getColor()||"black",o=new Tt.MathNode("mspace");o.setAttribute("mathbackground",i),o.setAttribute("width",G(r)),o.setAttribute("height",G(a));var s=new Tt.MathNode("mpadded",[o]);return n>=0?s.setAttribute("height",G(n)):(s.setAttribute("height",G(n)),s.setAttribute("depth",G(-n))),s.setAttribute("voffset",G(n)),s}});var ga=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"];ot({type:"sizing",names:ga,props:{numArgs:0,allowedInText:!0},handler:(e,t)=>{var{breakOnTokenText:r,funcName:a,parser:n}=e,i=n.parseExpression(!1,r);return{type:"sizing",mode:n.mode,size:ga.indexOf(a)+1,body:i}},htmlBuilder:(e,t)=>{var r=t.havingSize(e.size);return da(e.body,r,t)},mathmlBuilder:(e,t)=>{var r=t.havingSize(e.size),a=qt(e.body,r),n=new Tt.MathNode("mstyle",a);return n.setAttribute("mathsize",G(r.sizeMultiplier)),n}}),ot({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:(e,t,r)=>{var{parser:a}=e,n=!1,i=!1,o=r[0]&&Gt(r[0],"ordgroup");if(o)for(var s="",l=0;l{var r=Ke.makeSpan([],[wt(e.body,t)]);if(!e.smashHeight&&!e.smashDepth)return r;if(e.smashHeight&&(r.height=0,r.children))for(var a=0;a{var r=new Tt.MathNode("mpadded",[Rt(e.body,t)]);return e.smashHeight&&r.setAttribute("height","0px"),e.smashDepth&&r.setAttribute("depth","0px"),r}}),ot({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(e,t,r){var{parser:a}=e,n=r[0],i=t[0];return{type:"sqrt",mode:a.mode,body:i,index:n}},htmlBuilder(e,t){var r=wt(e.body,t.havingCrampedStyle());0===r.height&&(r.height=t.fontMetrics().xHeight),r=Ke.wrapFragment(r,t);var a=t.fontMetrics().defaultRuleThickness,n=a;t.style.idr.height+r.depth+i&&(i=(i+m-r.height-r.depth)/2);var c=s.height-r.height-i-l;r.style.paddingLeft=G(h);var p=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+c)},{type:"elem",elem:s},{type:"kern",size:l}]},t);if(e.index){var u=t.havingStyle(k.SCRIPTSCRIPT),d=wt(e.index,u,t),g=.6*(p.height-p.depth),f=Ke.makeVList({positionType:"shift",positionData:-g,children:[{type:"elem",elem:d}]},t),v=Ke.makeSpan(["root"],[f]);return Ke.makeSpan(["mord","sqrt"],[v,p],t)}return Ke.makeSpan(["mord","sqrt"],[p],t)},mathmlBuilder(e,t){var{body:r,index:a}=e;return a?new Tt.MathNode("mroot",[Rt(r,t),Rt(a,t)]):new Tt.MathNode("msqrt",[Rt(r,t)])}});var fa={display:k.DISPLAY,text:k.TEXT,script:k.SCRIPT,scriptscript:k.SCRIPTSCRIPT};ot({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e,t){var{breakOnTokenText:r,funcName:a,parser:n}=e,i=n.parseExpression(!0,r),o=a.slice(1,a.length-5);return{type:"styling",mode:n.mode,style:o,body:i}},htmlBuilder(e,t){var r=fa[e.style],a=t.havingStyle(r).withFont("");return da(e.body,a,t)},mathmlBuilder(e,t){var r=fa[e.style],a=t.havingStyle(r),n=qt(e.body,a),i=new Tt.MathNode("mstyle",n),o={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]}[e.style];return i.setAttribute("scriptlevel",o[0]),i.setAttribute("displaystyle",o[1]),i}});st({type:"supsub",htmlBuilder(e,t){var r=function(e,t){var r=e.base;return r?"op"===r.type?r.limits&&(t.style.size===k.DISPLAY.size||r.alwaysHandleSupSub)?ha:null:"operatorname"===r.type?r.alwaysHandleSupSub&&(t.style.size===k.DISPLAY.size||r.limits)?ua:null:"accent"===r.type?m.isCharacterBox(r.base)?Xt:null:"horizBrace"===r.type&&!e.sub===r.isOver?na:null:null}(e,t);if(r)return r(e,t);var a,n,i,{base:o,sup:s,sub:l}=e,h=wt(o,t),c=t.fontMetrics(),p=0,u=0,d=o&&m.isCharacterBox(o);if(s){var g=t.havingStyle(t.style.sup());a=wt(s,g,t),d||(p=h.height-g.fontMetrics().supDrop*g.sizeMultiplier/t.sizeMultiplier)}if(l){var f=t.havingStyle(t.style.sub());n=wt(l,f,t),d||(u=h.depth+f.fontMetrics().subDrop*f.sizeMultiplier/t.sizeMultiplier)}i=t.style===k.DISPLAY?c.sup1:t.style.cramped?c.sup3:c.sup2;var v,b=t.sizeMultiplier,y=G(.5/c.ptPerEm/b),x=null;if(n){var w=e.base&&"op"===e.base.type&&e.base.name&&("\\oiint"===e.base.name||"\\oiiint"===e.base.name);(h instanceof K||w)&&(x=G(-h.italic))}if(a&&n){p=Math.max(p,i,a.depth+.25*c.xHeight),u=Math.max(u,c.sub2);var S=4*c.defaultRuleThickness;if(p-a.depth-(n.height-u)0&&(p+=M,u-=M)}var z=[{type:"elem",elem:n,shift:u,marginRight:y,marginLeft:x},{type:"elem",elem:a,shift:-p,marginRight:y}];v=Ke.makeVList({positionType:"individualShift",children:z},t)}else if(n){u=Math.max(u,c.sub1,n.height-.8*c.xHeight);var A=[{type:"elem",elem:n,marginLeft:x,marginRight:y}];v=Ke.makeVList({positionType:"shift",positionData:u,children:A},t)}else{if(!a)throw new Error("supsub must have either sup or sub.");p=Math.max(p,i,a.depth+.25*c.xHeight),v=Ke.makeVList({positionType:"shift",positionData:-p,children:[{type:"elem",elem:a,marginRight:y}]},t)}var T=yt(h,"right")||"mord";return Ke.makeSpan([T],[h,Ke.makeSpan(["msupsub"],[v])],t)},mathmlBuilder(e,t){var r,a=!1;e.base&&"horizBrace"===e.base.type&&!!e.sup===e.base.isOver&&(a=!0,r=e.base.isOver),!e.base||"op"!==e.base.type&&"operatorname"!==e.base.type||(e.base.parentIsSupSub=!0);var n,i=[Rt(e.base,t)];if(e.sub&&i.push(Rt(e.sub,t)),e.sup&&i.push(Rt(e.sup,t)),a)n=r?"mover":"munder";else if(e.sub)if(e.sup){var o=e.base;n=o&&"op"===o.type&&o.limits&&t.style===k.DISPLAY||o&&"operatorname"===o.type&&o.alwaysHandleSupSub&&(t.style===k.DISPLAY||o.limits)?"munderover":"msubsup"}else{var s=e.base;n=s&&"op"===s.type&&s.limits&&(t.style===k.DISPLAY||s.alwaysHandleSupSub)||s&&"operatorname"===s.type&&s.alwaysHandleSupSub&&(s.limits||t.style===k.DISPLAY)?"munder":"msub"}else{var l=e.base;n=l&&"op"===l.type&&l.limits&&(t.style===k.DISPLAY||l.alwaysHandleSupSub)||l&&"operatorname"===l.type&&l.alwaysHandleSupSub&&(l.limits||t.style===k.DISPLAY)?"mover":"msup"}return new Tt.MathNode(n,i)}}),st({type:"atom",htmlBuilder:(e,t)=>Ke.mathsym(e.text,e.mode,t,["m"+e.family]),mathmlBuilder(e,t){var r=new Tt.MathNode("mo",[Bt(e.text,e.mode)]);if("bin"===e.family){var a=Nt(e,t);"bold-italic"===a&&r.setAttribute("mathvariant",a)}else"punct"===e.family?r.setAttribute("separator","true"):"open"!==e.family&&"close"!==e.family||r.setAttribute("stretchy","false");return r}});var va={mi:"italic",mn:"normal",mtext:"normal"};st({type:"mathord",htmlBuilder:(e,t)=>Ke.makeOrd(e,t,"mathord"),mathmlBuilder(e,t){var r=new Tt.MathNode("mi",[Bt(e.text,e.mode,t)]),a=Nt(e,t)||"italic";return a!==va[r.type]&&r.setAttribute("mathvariant",a),r}}),st({type:"textord",htmlBuilder:(e,t)=>Ke.makeOrd(e,t,"textord"),mathmlBuilder(e,t){var r,a=Bt(e.text,e.mode,t),n=Nt(e,t)||"normal";return r="text"===e.mode?new Tt.MathNode("mtext",[a]):/[0-9]/.test(e.text)?new Tt.MathNode("mn",[a]):"\\prime"===e.text?new Tt.MathNode("mo",[a]):new Tt.MathNode("mi",[a]),n!==va[r.type]&&r.setAttribute("mathvariant",n),r}});var ba={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},ya={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};st({type:"spacing",htmlBuilder(e,t){if(ya.hasOwnProperty(e.text)){var r=ya[e.text].className||"";if("text"===e.mode){var a=Ke.makeOrd(e,t,"textord");return a.classes.push(r),a}return Ke.makeSpan(["mspace",r],[Ke.mathsym(e.text,e.mode,t)],t)}if(ba.hasOwnProperty(e.text))return Ke.makeSpan(["mspace",ba[e.text]],[],t);throw new i('Unknown type of space "'+e.text+'"')},mathmlBuilder(e,t){if(!ya.hasOwnProperty(e.text)){if(ba.hasOwnProperty(e.text))return new Tt.MathNode("mspace");throw new i('Unknown type of space "'+e.text+'"')}return new Tt.MathNode("mtext",[new Tt.TextNode("\xa0")])}});var xa=()=>{var e=new Tt.MathNode("mtd",[]);return e.setAttribute("width","50%"),e};st({type:"tag",mathmlBuilder(e,t){var r=new Tt.MathNode("mtable",[new Tt.MathNode("mtr",[xa(),new Tt.MathNode("mtd",[It(e.body,t)]),xa(),new Tt.MathNode("mtd",[It(e.tag,t)])])]);return r.setAttribute("width","100%"),r}});var wa={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},ka={"\\textbf":"textbf","\\textmd":"textmd"},Sa={"\\textit":"textit","\\textup":"textup"},Ma=(e,t)=>{var r=e.font;return r?wa[r]?t.withTextFontFamily(wa[r]):ka[r]?t.withTextFontWeight(ka[r]):t.withTextFontShape(Sa[r]):t};ot({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(e,t){var{parser:r,funcName:a}=e,n=t[0];return{type:"text",mode:r.mode,body:ht(n),font:a}},htmlBuilder(e,t){var r=Ma(e,t),a=gt(e.body,r,!0);return Ke.makeSpan(["mord","text"],a,r)},mathmlBuilder(e,t){var r=Ma(e,t);return It(e.body,r)}}),ot({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"underline",mode:r.mode,body:t[0]}},htmlBuilder(e,t){var r=wt(e.body,t),a=Ke.makeLineSpan("underline-line",t),n=t.fontMetrics().defaultRuleThickness,i=Ke.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:n},{type:"elem",elem:a},{type:"kern",size:3*n},{type:"elem",elem:r}]},t);return Ke.makeSpan(["mord","underline"],[i],t)},mathmlBuilder(e,t){var r=new Tt.MathNode("mo",[new Tt.TextNode("\u203e")]);r.setAttribute("stretchy","true");var a=new Tt.MathNode("munder",[Rt(e.body,t),r]);return a.setAttribute("accentunder","true"),a}}),ot({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(e,t){var{parser:r}=e;return{type:"vcenter",mode:r.mode,body:t[0]}},htmlBuilder(e,t){var r=wt(e.body,t),a=t.fontMetrics().axisHeight,n=.5*(r.height-a-(r.depth+a));return Ke.makeVList({positionType:"shift",positionData:n,children:[{type:"elem",elem:r}]},t)},mathmlBuilder:(e,t)=>new Tt.MathNode("mpadded",[Rt(e.body,t)],["vcenter"])}),ot({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(e,t,r){throw new i("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(e,t){for(var r=za(e),a=[],n=t.havingStyle(t.style.text()),i=0;ie.body.replace(/ /g,e.star?"\u2423":"\xa0"),Aa=at,Ta="[ \r\n\t]",Ba="(\\\\[a-zA-Z@]+)"+Ta+"*",Ca="[\u0300-\u036f]",Na=new RegExp(Ca+"+$"),qa="("+Ta+"+)|\\\\(\n|[ \r\t]+\n?)[ \r\t]*|([!-\\[\\]-\u2027\u202a-\ud7ff\uf900-\uffff]"+Ca+"*|[\ud800-\udbff][\udc00-\udfff]"+Ca+"*|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5|"+Ba+"|\\\\[^\ud800-\udfff])";class Ia{constructor(e,t){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=e,this.settings=t,this.tokenRegex=new RegExp(qa,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,t){this.catcodes[e]=t}lex(){var e=this.input,t=this.tokenRegex.lastIndex;if(t===e.length)return new n("EOF",new a(this,t,t));var r=this.tokenRegex.exec(e);if(null===r||r.index!==t)throw new i("Unexpected character: '"+e[t]+"'",new n(e[t],new a(this,t,t+1)));var o=r[6]||r[3]||(r[2]?"\\ ":" ");if(14===this.catcodes[o]){var s=e.indexOf("\n",this.tokenRegex.lastIndex);return-1===s?(this.tokenRegex.lastIndex=e.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=s+1,this.lex()}return new n(o,new a(this,t,this.tokenRegex.lastIndex))}}class Ra{constructor(e,t){void 0===e&&(e={}),void 0===t&&(t={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=t,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(0===this.undefStack.length)throw new i("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var e=this.undefStack.pop();for(var t in e)e.hasOwnProperty(t)&&(null==e[t]?delete this.current[t]:this.current[t]=e[t])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)}get(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]}set(e,t,r){if(void 0===r&&(r=!1),r){for(var a=0;a0&&(this.undefStack[this.undefStack.length-1][e]=t)}else{var n=this.undefStack[this.undefStack.length-1];n&&!n.hasOwnProperty(e)&&(n[e]=this.current[e])}null==t?delete this.current[e]:this.current[e]=t}}var Ha=Dr;Vr("\\noexpand",(function(e){var t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}})),Vr("\\expandafter",(function(e){var t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}})),Vr("\\@firstoftwo",(function(e){return{tokens:e.consumeArgs(2)[0],numArgs:0}})),Vr("\\@secondoftwo",(function(e){return{tokens:e.consumeArgs(2)[1],numArgs:0}})),Vr("\\@ifnextchar",(function(e){var t=e.consumeArgs(3);e.consumeSpaces();var r=e.future();return 1===t[0].length&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}})),Vr("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}"),Vr("\\TextOrMath",(function(e){var t=e.consumeArgs(2);return"text"===e.mode?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}}));var Oa={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};Vr("\\char",(function(e){var t,r=e.popToken(),a="";if("'"===r.text)t=8,r=e.popToken();else if('"'===r.text)t=16,r=e.popToken();else if("`"===r.text)if("\\"===(r=e.popToken()).text[0])a=r.text.charCodeAt(1);else{if("EOF"===r.text)throw new i("\\char` missing argument");a=r.text.charCodeAt(0)}else t=10;if(t){if(null==(a=Oa[r.text])||a>=t)throw new i("Invalid base-"+t+" digit "+r.text);for(var n;null!=(n=Oa[e.future().text])&&n{var a=e.consumeArg().tokens;if(1!==a.length)throw new i("\\newcommand's first argument must be a macro name");var n=a[0].text,o=e.isDefined(n);if(o&&!t)throw new i("\\newcommand{"+n+"} attempting to redefine "+n+"; use \\renewcommand");if(!o&&!r)throw new i("\\renewcommand{"+n+"} when command "+n+" does not yet exist; use \\newcommand");var s=0;if(1===(a=e.consumeArg().tokens).length&&"["===a[0].text){for(var l="",h=e.expandNextToken();"]"!==h.text&&"EOF"!==h.text;)l+=h.text,h=e.expandNextToken();if(!l.match(/^\s*[0-9]+\s*$/))throw new i("Invalid number of arguments: "+l);s=parseInt(l),a=e.consumeArg().tokens}return e.macros.set(n,{tokens:a,numArgs:s}),""};Vr("\\newcommand",(e=>Ea(e,!1,!0))),Vr("\\renewcommand",(e=>Ea(e,!0,!1))),Vr("\\providecommand",(e=>Ea(e,!0,!0))),Vr("\\message",(e=>{var t=e.consumeArgs(1)[0];return console.log(t.reverse().map((e=>e.text)).join("")),""})),Vr("\\errmessage",(e=>{var t=e.consumeArgs(1)[0];return console.error(t.reverse().map((e=>e.text)).join("")),""})),Vr("\\show",(e=>{var t=e.popToken(),r=t.text;return console.log(t,e.macros.get(r),Aa[r],ne.math[r],ne.text[r]),""})),Vr("\\bgroup","{"),Vr("\\egroup","}"),Vr("~","\\nobreakspace"),Vr("\\lq","`"),Vr("\\rq","'"),Vr("\\aa","\\r a"),Vr("\\AA","\\r A"),Vr("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`\xa9}"),Vr("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}"),Vr("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xae}"),Vr("\u212c","\\mathscr{B}"),Vr("\u2130","\\mathscr{E}"),Vr("\u2131","\\mathscr{F}"),Vr("\u210b","\\mathscr{H}"),Vr("\u2110","\\mathscr{I}"),Vr("\u2112","\\mathscr{L}"),Vr("\u2133","\\mathscr{M}"),Vr("\u211b","\\mathscr{R}"),Vr("\u212d","\\mathfrak{C}"),Vr("\u210c","\\mathfrak{H}"),Vr("\u2128","\\mathfrak{Z}"),Vr("\\Bbbk","\\Bbb{k}"),Vr("\xb7","\\cdotp"),Vr("\\llap","\\mathllap{\\textrm{#1}}"),Vr("\\rlap","\\mathrlap{\\textrm{#1}}"),Vr("\\clap","\\mathclap{\\textrm{#1}}"),Vr("\\mathstrut","\\vphantom{(}"),Vr("\\underbar","\\underline{\\text{#1}}"),Vr("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'),Vr("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`\u2260}}"),Vr("\\ne","\\neq"),Vr("\u2260","\\neq"),Vr("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`\u2209}}"),Vr("\u2209","\\notin"),Vr("\u2258","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`\u2258}}"),Vr("\u2259","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}"),Vr("\u225a","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225a}}"),Vr("\u225b","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`\u225b}}"),Vr("\u225d","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`\u225d}}"),Vr("\u225e","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`\u225e}}"),Vr("\u225f","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225f}}"),Vr("\u27c2","\\perp"),Vr("\u203c","\\mathclose{!\\mkern-0.8mu!}"),Vr("\u220c","\\notni"),Vr("\u231c","\\ulcorner"),Vr("\u231d","\\urcorner"),Vr("\u231e","\\llcorner"),Vr("\u231f","\\lrcorner"),Vr("\xa9","\\copyright"),Vr("\xae","\\textregistered"),Vr("\ufe0f","\\textregistered"),Vr("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}'),Vr("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}'),Vr("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}'),Vr("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}'),Vr("\\vdots","\\mathord{\\varvdots\\rule{0pt}{15pt}}"),Vr("\u22ee","\\vdots"),Vr("\\varGamma","\\mathit{\\Gamma}"),Vr("\\varDelta","\\mathit{\\Delta}"),Vr("\\varTheta","\\mathit{\\Theta}"),Vr("\\varLambda","\\mathit{\\Lambda}"),Vr("\\varXi","\\mathit{\\Xi}"),Vr("\\varPi","\\mathit{\\Pi}"),Vr("\\varSigma","\\mathit{\\Sigma}"),Vr("\\varUpsilon","\\mathit{\\Upsilon}"),Vr("\\varPhi","\\mathit{\\Phi}"),Vr("\\varPsi","\\mathit{\\Psi}"),Vr("\\varOmega","\\mathit{\\Omega}"),Vr("\\substack","\\begin{subarray}{c}#1\\end{subarray}"),Vr("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax"),Vr("\\boxed","\\fbox{$\\displaystyle{#1}$}"),Vr("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;"),Vr("\\implies","\\DOTSB\\;\\Longrightarrow\\;"),Vr("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");var La={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};Vr("\\dots",(function(e){var t="\\dotso",r=e.expandAfterFuture().text;return r in La?t=La[r]:("\\not"===r.slice(0,4)||r in ne.math&&m.contains(["bin","rel"],ne.math[r].group))&&(t="\\dotsb"),t}));var Da={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};Vr("\\dotso",(function(e){return e.future().text in Da?"\\ldots\\,":"\\ldots"})),Vr("\\dotsc",(function(e){var t=e.future().text;return t in Da&&","!==t?"\\ldots\\,":"\\ldots"})),Vr("\\cdots",(function(e){return e.future().text in Da?"\\@cdots\\,":"\\@cdots"})),Vr("\\dotsb","\\cdots"),Vr("\\dotsm","\\cdots"),Vr("\\dotsi","\\!\\cdots"),Vr("\\dotsx","\\ldots\\,"),Vr("\\DOTSI","\\relax"),Vr("\\DOTSB","\\relax"),Vr("\\DOTSX","\\relax"),Vr("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"),Vr("\\,","\\tmspace+{3mu}{.1667em}"),Vr("\\thinspace","\\,"),Vr("\\>","\\mskip{4mu}"),Vr("\\:","\\tmspace+{4mu}{.2222em}"),Vr("\\medspace","\\:"),Vr("\\;","\\tmspace+{5mu}{.2777em}"),Vr("\\thickspace","\\;"),Vr("\\!","\\tmspace-{3mu}{.1667em}"),Vr("\\negthinspace","\\!"),Vr("\\negmedspace","\\tmspace-{4mu}{.2222em}"),Vr("\\negthickspace","\\tmspace-{5mu}{.277em}"),Vr("\\enspace","\\kern.5em "),Vr("\\enskip","\\hskip.5em\\relax"),Vr("\\quad","\\hskip1em\\relax"),Vr("\\qquad","\\hskip2em\\relax"),Vr("\\tag","\\@ifstar\\tag@literal\\tag@paren"),Vr("\\tag@paren","\\tag@literal{({#1})}"),Vr("\\tag@literal",(e=>{if(e.macros.get("\\df@tag"))throw new i("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"})),Vr("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"),Vr("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"),Vr("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}"),Vr("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"),Vr("\\newline","\\\\\\relax"),Vr("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var Va=G(C["Main-Regular"]["T".charCodeAt(0)][1]-.7*C["Main-Regular"]["A".charCodeAt(0)][1]);Vr("\\LaTeX","\\textrm{\\html@mathml{L\\kern-.36em\\raisebox{"+Va+"}{\\scriptstyle A}\\kern-.15em\\TeX}{LaTeX}}"),Vr("\\KaTeX","\\textrm{\\html@mathml{K\\kern-.17em\\raisebox{"+Va+"}{\\scriptstyle A}\\kern-.15em\\TeX}{KaTeX}}"),Vr("\\hspace","\\@ifstar\\@hspacer\\@hspace"),Vr("\\@hspace","\\hskip #1\\relax"),Vr("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax"),Vr("\\ordinarycolon",":"),Vr("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}"),Vr("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}'),Vr("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}'),Vr("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}'),Vr("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}'),Vr("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}'),Vr("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}'),Vr("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}'),Vr("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}'),Vr("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}'),Vr("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}'),Vr("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}'),Vr("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}'),Vr("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}'),Vr("\u2237","\\dblcolon"),Vr("\u2239","\\eqcolon"),Vr("\u2254","\\coloneqq"),Vr("\u2255","\\eqqcolon"),Vr("\u2a74","\\Coloneqq"),Vr("\\ratio","\\vcentcolon"),Vr("\\coloncolon","\\dblcolon"),Vr("\\colonequals","\\coloneqq"),Vr("\\coloncolonequals","\\Coloneqq"),Vr("\\equalscolon","\\eqqcolon"),Vr("\\equalscoloncolon","\\Eqqcolon"),Vr("\\colonminus","\\coloneq"),Vr("\\coloncolonminus","\\Coloneq"),Vr("\\minuscolon","\\eqcolon"),Vr("\\minuscoloncolon","\\Eqcolon"),Vr("\\coloncolonapprox","\\Colonapprox"),Vr("\\coloncolonsim","\\Colonsim"),Vr("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),Vr("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"),Vr("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),Vr("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"),Vr("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220c}}"),Vr("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),Vr("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),Vr("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}"),Vr("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}"),Vr("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}"),Vr("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}"),Vr("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}"),Vr("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}"),Vr("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}"),Vr("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}"),Vr("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}"),Vr("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}"),Vr("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}"),Vr("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}"),Vr("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}"),Vr("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}"),Vr("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}"),Vr("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}"),Vr("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228a}"),Vr("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2acb}"),Vr("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228b}"),Vr("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2acc}"),Vr("\\imath","\\html@mathml{\\@imath}{\u0131}"),Vr("\\jmath","\\html@mathml{\\@jmath}{\u0237}"),Vr("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27e6}}"),Vr("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27e7}}"),Vr("\u27e6","\\llbracket"),Vr("\u27e7","\\rrbracket"),Vr("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}"),Vr("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}"),Vr("\u2983","\\lBrace"),Vr("\u2984","\\rBrace"),Vr("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29b5}}"),Vr("\u29b5","\\minuso"),Vr("\\darr","\\downarrow"),Vr("\\dArr","\\Downarrow"),Vr("\\Darr","\\Downarrow"),Vr("\\lang","\\langle"),Vr("\\rang","\\rangle"),Vr("\\uarr","\\uparrow"),Vr("\\uArr","\\Uparrow"),Vr("\\Uarr","\\Uparrow"),Vr("\\N","\\mathbb{N}"),Vr("\\R","\\mathbb{R}"),Vr("\\Z","\\mathbb{Z}"),Vr("\\alef","\\aleph"),Vr("\\alefsym","\\aleph"),Vr("\\Alpha","\\mathrm{A}"),Vr("\\Beta","\\mathrm{B}"),Vr("\\bull","\\bullet"),Vr("\\Chi","\\mathrm{X}"),Vr("\\clubs","\\clubsuit"),Vr("\\cnums","\\mathbb{C}"),Vr("\\Complex","\\mathbb{C}"),Vr("\\Dagger","\\ddagger"),Vr("\\diamonds","\\diamondsuit"),Vr("\\empty","\\emptyset"),Vr("\\Epsilon","\\mathrm{E}"),Vr("\\Eta","\\mathrm{H}"),Vr("\\exist","\\exists"),Vr("\\harr","\\leftrightarrow"),Vr("\\hArr","\\Leftrightarrow"),Vr("\\Harr","\\Leftrightarrow"),Vr("\\hearts","\\heartsuit"),Vr("\\image","\\Im"),Vr("\\infin","\\infty"),Vr("\\Iota","\\mathrm{I}"),Vr("\\isin","\\in"),Vr("\\Kappa","\\mathrm{K}"),Vr("\\larr","\\leftarrow"),Vr("\\lArr","\\Leftarrow"),Vr("\\Larr","\\Leftarrow"),Vr("\\lrarr","\\leftrightarrow"),Vr("\\lrArr","\\Leftrightarrow"),Vr("\\Lrarr","\\Leftrightarrow"),Vr("\\Mu","\\mathrm{M}"),Vr("\\natnums","\\mathbb{N}"),Vr("\\Nu","\\mathrm{N}"),Vr("\\Omicron","\\mathrm{O}"),Vr("\\plusmn","\\pm"),Vr("\\rarr","\\rightarrow"),Vr("\\rArr","\\Rightarrow"),Vr("\\Rarr","\\Rightarrow"),Vr("\\real","\\Re"),Vr("\\reals","\\mathbb{R}"),Vr("\\Reals","\\mathbb{R}"),Vr("\\Rho","\\mathrm{P}"),Vr("\\sdot","\\cdot"),Vr("\\sect","\\S"),Vr("\\spades","\\spadesuit"),Vr("\\sub","\\subset"),Vr("\\sube","\\subseteq"),Vr("\\supe","\\supseteq"),Vr("\\Tau","\\mathrm{T}"),Vr("\\thetasym","\\vartheta"),Vr("\\weierp","\\wp"),Vr("\\Zeta","\\mathrm{Z}"),Vr("\\argmin","\\DOTSB\\operatorname*{arg\\,min}"),Vr("\\argmax","\\DOTSB\\operatorname*{arg\\,max}"),Vr("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits"),Vr("\\bra","\\mathinner{\\langle{#1}|}"),Vr("\\ket","\\mathinner{|{#1}\\rangle}"),Vr("\\braket","\\mathinner{\\langle{#1}\\rangle}"),Vr("\\Bra","\\left\\langle#1\\right|"),Vr("\\Ket","\\left|#1\\right\\rangle");var Pa=e=>t=>{var r=t.consumeArg().tokens,a=t.consumeArg().tokens,n=t.consumeArg().tokens,i=t.consumeArg().tokens,o=t.macros.get("|"),s=t.macros.get("\\|");t.macros.beginGroup();var l=t=>r=>{e&&(r.macros.set("|",o),n.length&&r.macros.set("\\|",s));var i=t;!t&&n.length&&("|"===r.future().text&&(r.popToken(),i=!0));return{tokens:i?n:a,numArgs:0}};t.macros.set("|",l(!1)),n.length&&t.macros.set("\\|",l(!0));var h=t.consumeArg().tokens,m=t.expandTokens([...i,...h,...r]);return t.macros.endGroup(),{tokens:m.reverse(),numArgs:0}};Vr("\\bra@ket",Pa(!1)),Vr("\\bra@set",Pa(!0)),Vr("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}"),Vr("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}"),Vr("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}"),Vr("\\angln","{\\angl n}"),Vr("\\blue","\\textcolor{##6495ed}{#1}"),Vr("\\orange","\\textcolor{##ffa500}{#1}"),Vr("\\pink","\\textcolor{##ff00af}{#1}"),Vr("\\red","\\textcolor{##df0030}{#1}"),Vr("\\green","\\textcolor{##28ae7b}{#1}"),Vr("\\gray","\\textcolor{gray}{#1}"),Vr("\\purple","\\textcolor{##9d38bd}{#1}"),Vr("\\blueA","\\textcolor{##ccfaff}{#1}"),Vr("\\blueB","\\textcolor{##80f6ff}{#1}"),Vr("\\blueC","\\textcolor{##63d9ea}{#1}"),Vr("\\blueD","\\textcolor{##11accd}{#1}"),Vr("\\blueE","\\textcolor{##0c7f99}{#1}"),Vr("\\tealA","\\textcolor{##94fff5}{#1}"),Vr("\\tealB","\\textcolor{##26edd5}{#1}"),Vr("\\tealC","\\textcolor{##01d1c1}{#1}"),Vr("\\tealD","\\textcolor{##01a995}{#1}"),Vr("\\tealE","\\textcolor{##208170}{#1}"),Vr("\\greenA","\\textcolor{##b6ffb0}{#1}"),Vr("\\greenB","\\textcolor{##8af281}{#1}"),Vr("\\greenC","\\textcolor{##74cf70}{#1}"),Vr("\\greenD","\\textcolor{##1fab54}{#1}"),Vr("\\greenE","\\textcolor{##0d923f}{#1}"),Vr("\\goldA","\\textcolor{##ffd0a9}{#1}"),Vr("\\goldB","\\textcolor{##ffbb71}{#1}"),Vr("\\goldC","\\textcolor{##ff9c39}{#1}"),Vr("\\goldD","\\textcolor{##e07d10}{#1}"),Vr("\\goldE","\\textcolor{##a75a05}{#1}"),Vr("\\redA","\\textcolor{##fca9a9}{#1}"),Vr("\\redB","\\textcolor{##ff8482}{#1}"),Vr("\\redC","\\textcolor{##f9685d}{#1}"),Vr("\\redD","\\textcolor{##e84d39}{#1}"),Vr("\\redE","\\textcolor{##bc2612}{#1}"),Vr("\\maroonA","\\textcolor{##ffbde0}{#1}"),Vr("\\maroonB","\\textcolor{##ff92c6}{#1}"),Vr("\\maroonC","\\textcolor{##ed5fa6}{#1}"),Vr("\\maroonD","\\textcolor{##ca337c}{#1}"),Vr("\\maroonE","\\textcolor{##9e034e}{#1}"),Vr("\\purpleA","\\textcolor{##ddd7ff}{#1}"),Vr("\\purpleB","\\textcolor{##c6b9fc}{#1}"),Vr("\\purpleC","\\textcolor{##aa87ff}{#1}"),Vr("\\purpleD","\\textcolor{##7854ab}{#1}"),Vr("\\purpleE","\\textcolor{##543b78}{#1}"),Vr("\\mintA","\\textcolor{##f5f9e8}{#1}"),Vr("\\mintB","\\textcolor{##edf2df}{#1}"),Vr("\\mintC","\\textcolor{##e0e5cc}{#1}"),Vr("\\grayA","\\textcolor{##f6f7f7}{#1}"),Vr("\\grayB","\\textcolor{##f0f1f2}{#1}"),Vr("\\grayC","\\textcolor{##e3e5e6}{#1}"),Vr("\\grayD","\\textcolor{##d6d8da}{#1}"),Vr("\\grayE","\\textcolor{##babec2}{#1}"),Vr("\\grayF","\\textcolor{##888d93}{#1}"),Vr("\\grayG","\\textcolor{##626569}{#1}"),Vr("\\grayH","\\textcolor{##3b3e40}{#1}"),Vr("\\grayI","\\textcolor{##21242c}{#1}"),Vr("\\kaBlue","\\textcolor{##314453}{#1}"),Vr("\\kaGreen","\\textcolor{##71B307}{#1}");var Fa={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0};class Ga{constructor(e,t,r){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=t,this.expansionCount=0,this.feed(e),this.macros=new Ra(Ha,t.macros),this.mode=r,this.stack=[]}feed(e){this.lexer=new Ia(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return 0===this.stack.length&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){var t,r,a;if(e){if(this.consumeSpaces(),"["!==this.future().text)return null;t=this.popToken(),({tokens:a,end:r}=this.consumeArg(["]"]))}else({tokens:a,start:t,end:r}=this.consumeArg());return this.pushToken(new n("EOF",r.loc)),this.pushTokens(a),t.range(r,"")}consumeSpaces(){for(;;){if(" "!==this.future().text)break;this.stack.pop()}}consumeArg(e){var t=[],r=e&&e.length>0;r||this.consumeSpaces();var a,n=this.future(),o=0,s=0;do{if(a=this.popToken(),t.push(a),"{"===a.text)++o;else if("}"===a.text){if(-1===--o)throw new i("Extra }",a)}else if("EOF"===a.text)throw new i("Unexpected end of input in a macro argument, expected '"+(e&&r?e[s]:"}")+"'",a);if(e&&r)if((0===o||1===o&&"{"===e[s])&&a.text===e[s]){if(++s===e.length){t.splice(-s,s);break}}else s=0}while(0!==o||r);return"{"===n.text&&"}"===t[t.length-1].text&&(t.pop(),t.shift()),t.reverse(),{tokens:t,start:n,end:a}}consumeArgs(e,t){if(t){if(t.length!==e+1)throw new i("The length of delimiters doesn't match the number of args!");for(var r=t[0],a=0;athis.settings.maxExpand)throw new i("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(e){var t=this.popToken(),r=t.text,a=t.noexpand?null:this._getExpansion(r);if(null==a||e&&a.unexpandable){if(e&&null==a&&"\\"===r[0]&&!this.isDefined(r))throw new i("Undefined control sequence: "+r);return this.pushToken(t),!1}this.countExpansion(1);var n=a.tokens,o=this.consumeArgs(a.numArgs,a.delimiters);if(a.numArgs)for(var s=(n=n.slice()).length-1;s>=0;--s){var l=n[s];if("#"===l.text){if(0===s)throw new i("Incomplete placeholder at end of macro body",l);if("#"===(l=n[--s]).text)n.splice(s+1,1);else{if(!/^[1-9]$/.test(l.text))throw new i("Not a valid argument number",l);n.splice(s,2,...o[+l.text-1])}}}return this.pushTokens(n),n.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(!1===this.expandOnce()){var e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new n(e)]):void 0}expandTokens(e){var t=[],r=this.stack.length;for(this.pushTokens(e);this.stack.length>r;)if(!1===this.expandOnce(!0)){var a=this.stack.pop();a.treatAsRelax&&(a.noexpand=!1,a.treatAsRelax=!1),t.push(a)}return this.countExpansion(t.length),t}expandMacroAsText(e){var t=this.expandMacro(e);return t?t.map((e=>e.text)).join(""):t}_getExpansion(e){var t=this.macros.get(e);if(null==t)return t;if(1===e.length){var r=this.lexer.catcodes[e];if(null!=r&&13!==r)return}var a="function"==typeof t?t(this):t;if("string"==typeof a){var n=0;if(-1!==a.indexOf("#"))for(var i=a.replace(/##/g,"");-1!==i.indexOf("#"+(n+1));)++n;for(var o=new Ia(a,this.settings),s=[],l=o.lex();"EOF"!==l.text;)s.push(l),l=o.lex();return s.reverse(),{tokens:s,numArgs:n}}return a}isDefined(e){return this.macros.has(e)||Aa.hasOwnProperty(e)||ne.math.hasOwnProperty(e)||ne.text.hasOwnProperty(e)||Fa.hasOwnProperty(e)}isExpandable(e){var t=this.macros.get(e);return null!=t?"string"==typeof t||"function"==typeof t||!t.unexpandable:Aa.hasOwnProperty(e)&&!Aa[e].primitive}}var Ua=/^[\u208a\u208b\u208c\u208d\u208e\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089\u2090\u2091\u2095\u1d62\u2c7c\u2096\u2097\u2098\u2099\u2092\u209a\u1d63\u209b\u209c\u1d64\u1d65\u2093\u1d66\u1d67\u1d68\u1d69\u1d6a]/,Ya=Object.freeze({"\u208a":"+","\u208b":"-","\u208c":"=","\u208d":"(","\u208e":")","\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u2090":"a","\u2091":"e","\u2095":"h","\u1d62":"i","\u2c7c":"j","\u2096":"k","\u2097":"l","\u2098":"m","\u2099":"n","\u2092":"o","\u209a":"p","\u1d63":"r","\u209b":"s","\u209c":"t","\u1d64":"u","\u1d65":"v","\u2093":"x","\u1d66":"\u03b2","\u1d67":"\u03b3","\u1d68":"\u03c1","\u1d69":"\u03d5","\u1d6a":"\u03c7","\u207a":"+","\u207b":"-","\u207c":"=","\u207d":"(","\u207e":")","\u2070":"0","\xb9":"1","\xb2":"2","\xb3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u1d2c":"A","\u1d2e":"B","\u1d30":"D","\u1d31":"E","\u1d33":"G","\u1d34":"H","\u1d35":"I","\u1d36":"J","\u1d37":"K","\u1d38":"L","\u1d39":"M","\u1d3a":"N","\u1d3c":"O","\u1d3e":"P","\u1d3f":"R","\u1d40":"T","\u1d41":"U","\u2c7d":"V","\u1d42":"W","\u1d43":"a","\u1d47":"b","\u1d9c":"c","\u1d48":"d","\u1d49":"e","\u1da0":"f","\u1d4d":"g","\u02b0":"h","\u2071":"i","\u02b2":"j","\u1d4f":"k","\u02e1":"l","\u1d50":"m","\u207f":"n","\u1d52":"o","\u1d56":"p","\u02b3":"r","\u02e2":"s","\u1d57":"t","\u1d58":"u","\u1d5b":"v","\u02b7":"w","\u02e3":"x","\u02b8":"y","\u1dbb":"z","\u1d5d":"\u03b2","\u1d5e":"\u03b3","\u1d5f":"\u03b4","\u1d60":"\u03d5","\u1d61":"\u03c7","\u1dbf":"\u03b8"}),Xa={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030c":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030a":{text:"\\r",math:"\\mathring"},"\u030b":{text:"\\H"},"\u0327":{text:"\\c"}},Wa={"\xe1":"a\u0301","\xe0":"a\u0300","\xe4":"a\u0308","\u01df":"a\u0308\u0304","\xe3":"a\u0303","\u0101":"a\u0304","\u0103":"a\u0306","\u1eaf":"a\u0306\u0301","\u1eb1":"a\u0306\u0300","\u1eb5":"a\u0306\u0303","\u01ce":"a\u030c","\xe2":"a\u0302","\u1ea5":"a\u0302\u0301","\u1ea7":"a\u0302\u0300","\u1eab":"a\u0302\u0303","\u0227":"a\u0307","\u01e1":"a\u0307\u0304","\xe5":"a\u030a","\u01fb":"a\u030a\u0301","\u1e03":"b\u0307","\u0107":"c\u0301","\u1e09":"c\u0327\u0301","\u010d":"c\u030c","\u0109":"c\u0302","\u010b":"c\u0307","\xe7":"c\u0327","\u010f":"d\u030c","\u1e0b":"d\u0307","\u1e11":"d\u0327","\xe9":"e\u0301","\xe8":"e\u0300","\xeb":"e\u0308","\u1ebd":"e\u0303","\u0113":"e\u0304","\u1e17":"e\u0304\u0301","\u1e15":"e\u0304\u0300","\u0115":"e\u0306","\u1e1d":"e\u0327\u0306","\u011b":"e\u030c","\xea":"e\u0302","\u1ebf":"e\u0302\u0301","\u1ec1":"e\u0302\u0300","\u1ec5":"e\u0302\u0303","\u0117":"e\u0307","\u0229":"e\u0327","\u1e1f":"f\u0307","\u01f5":"g\u0301","\u1e21":"g\u0304","\u011f":"g\u0306","\u01e7":"g\u030c","\u011d":"g\u0302","\u0121":"g\u0307","\u0123":"g\u0327","\u1e27":"h\u0308","\u021f":"h\u030c","\u0125":"h\u0302","\u1e23":"h\u0307","\u1e29":"h\u0327","\xed":"i\u0301","\xec":"i\u0300","\xef":"i\u0308","\u1e2f":"i\u0308\u0301","\u0129":"i\u0303","\u012b":"i\u0304","\u012d":"i\u0306","\u01d0":"i\u030c","\xee":"i\u0302","\u01f0":"j\u030c","\u0135":"j\u0302","\u1e31":"k\u0301","\u01e9":"k\u030c","\u0137":"k\u0327","\u013a":"l\u0301","\u013e":"l\u030c","\u013c":"l\u0327","\u1e3f":"m\u0301","\u1e41":"m\u0307","\u0144":"n\u0301","\u01f9":"n\u0300","\xf1":"n\u0303","\u0148":"n\u030c","\u1e45":"n\u0307","\u0146":"n\u0327","\xf3":"o\u0301","\xf2":"o\u0300","\xf6":"o\u0308","\u022b":"o\u0308\u0304","\xf5":"o\u0303","\u1e4d":"o\u0303\u0301","\u1e4f":"o\u0303\u0308","\u022d":"o\u0303\u0304","\u014d":"o\u0304","\u1e53":"o\u0304\u0301","\u1e51":"o\u0304\u0300","\u014f":"o\u0306","\u01d2":"o\u030c","\xf4":"o\u0302","\u1ed1":"o\u0302\u0301","\u1ed3":"o\u0302\u0300","\u1ed7":"o\u0302\u0303","\u022f":"o\u0307","\u0231":"o\u0307\u0304","\u0151":"o\u030b","\u1e55":"p\u0301","\u1e57":"p\u0307","\u0155":"r\u0301","\u0159":"r\u030c","\u1e59":"r\u0307","\u0157":"r\u0327","\u015b":"s\u0301","\u1e65":"s\u0301\u0307","\u0161":"s\u030c","\u1e67":"s\u030c\u0307","\u015d":"s\u0302","\u1e61":"s\u0307","\u015f":"s\u0327","\u1e97":"t\u0308","\u0165":"t\u030c","\u1e6b":"t\u0307","\u0163":"t\u0327","\xfa":"u\u0301","\xf9":"u\u0300","\xfc":"u\u0308","\u01d8":"u\u0308\u0301","\u01dc":"u\u0308\u0300","\u01d6":"u\u0308\u0304","\u01da":"u\u0308\u030c","\u0169":"u\u0303","\u1e79":"u\u0303\u0301","\u016b":"u\u0304","\u1e7b":"u\u0304\u0308","\u016d":"u\u0306","\u01d4":"u\u030c","\xfb":"u\u0302","\u016f":"u\u030a","\u0171":"u\u030b","\u1e7d":"v\u0303","\u1e83":"w\u0301","\u1e81":"w\u0300","\u1e85":"w\u0308","\u0175":"w\u0302","\u1e87":"w\u0307","\u1e98":"w\u030a","\u1e8d":"x\u0308","\u1e8b":"x\u0307","\xfd":"y\u0301","\u1ef3":"y\u0300","\xff":"y\u0308","\u1ef9":"y\u0303","\u0233":"y\u0304","\u0177":"y\u0302","\u1e8f":"y\u0307","\u1e99":"y\u030a","\u017a":"z\u0301","\u017e":"z\u030c","\u1e91":"z\u0302","\u017c":"z\u0307","\xc1":"A\u0301","\xc0":"A\u0300","\xc4":"A\u0308","\u01de":"A\u0308\u0304","\xc3":"A\u0303","\u0100":"A\u0304","\u0102":"A\u0306","\u1eae":"A\u0306\u0301","\u1eb0":"A\u0306\u0300","\u1eb4":"A\u0306\u0303","\u01cd":"A\u030c","\xc2":"A\u0302","\u1ea4":"A\u0302\u0301","\u1ea6":"A\u0302\u0300","\u1eaa":"A\u0302\u0303","\u0226":"A\u0307","\u01e0":"A\u0307\u0304","\xc5":"A\u030a","\u01fa":"A\u030a\u0301","\u1e02":"B\u0307","\u0106":"C\u0301","\u1e08":"C\u0327\u0301","\u010c":"C\u030c","\u0108":"C\u0302","\u010a":"C\u0307","\xc7":"C\u0327","\u010e":"D\u030c","\u1e0a":"D\u0307","\u1e10":"D\u0327","\xc9":"E\u0301","\xc8":"E\u0300","\xcb":"E\u0308","\u1ebc":"E\u0303","\u0112":"E\u0304","\u1e16":"E\u0304\u0301","\u1e14":"E\u0304\u0300","\u0114":"E\u0306","\u1e1c":"E\u0327\u0306","\u011a":"E\u030c","\xca":"E\u0302","\u1ebe":"E\u0302\u0301","\u1ec0":"E\u0302\u0300","\u1ec4":"E\u0302\u0303","\u0116":"E\u0307","\u0228":"E\u0327","\u1e1e":"F\u0307","\u01f4":"G\u0301","\u1e20":"G\u0304","\u011e":"G\u0306","\u01e6":"G\u030c","\u011c":"G\u0302","\u0120":"G\u0307","\u0122":"G\u0327","\u1e26":"H\u0308","\u021e":"H\u030c","\u0124":"H\u0302","\u1e22":"H\u0307","\u1e28":"H\u0327","\xcd":"I\u0301","\xcc":"I\u0300","\xcf":"I\u0308","\u1e2e":"I\u0308\u0301","\u0128":"I\u0303","\u012a":"I\u0304","\u012c":"I\u0306","\u01cf":"I\u030c","\xce":"I\u0302","\u0130":"I\u0307","\u0134":"J\u0302","\u1e30":"K\u0301","\u01e8":"K\u030c","\u0136":"K\u0327","\u0139":"L\u0301","\u013d":"L\u030c","\u013b":"L\u0327","\u1e3e":"M\u0301","\u1e40":"M\u0307","\u0143":"N\u0301","\u01f8":"N\u0300","\xd1":"N\u0303","\u0147":"N\u030c","\u1e44":"N\u0307","\u0145":"N\u0327","\xd3":"O\u0301","\xd2":"O\u0300","\xd6":"O\u0308","\u022a":"O\u0308\u0304","\xd5":"O\u0303","\u1e4c":"O\u0303\u0301","\u1e4e":"O\u0303\u0308","\u022c":"O\u0303\u0304","\u014c":"O\u0304","\u1e52":"O\u0304\u0301","\u1e50":"O\u0304\u0300","\u014e":"O\u0306","\u01d1":"O\u030c","\xd4":"O\u0302","\u1ed0":"O\u0302\u0301","\u1ed2":"O\u0302\u0300","\u1ed6":"O\u0302\u0303","\u022e":"O\u0307","\u0230":"O\u0307\u0304","\u0150":"O\u030b","\u1e54":"P\u0301","\u1e56":"P\u0307","\u0154":"R\u0301","\u0158":"R\u030c","\u1e58":"R\u0307","\u0156":"R\u0327","\u015a":"S\u0301","\u1e64":"S\u0301\u0307","\u0160":"S\u030c","\u1e66":"S\u030c\u0307","\u015c":"S\u0302","\u1e60":"S\u0307","\u015e":"S\u0327","\u0164":"T\u030c","\u1e6a":"T\u0307","\u0162":"T\u0327","\xda":"U\u0301","\xd9":"U\u0300","\xdc":"U\u0308","\u01d7":"U\u0308\u0301","\u01db":"U\u0308\u0300","\u01d5":"U\u0308\u0304","\u01d9":"U\u0308\u030c","\u0168":"U\u0303","\u1e78":"U\u0303\u0301","\u016a":"U\u0304","\u1e7a":"U\u0304\u0308","\u016c":"U\u0306","\u01d3":"U\u030c","\xdb":"U\u0302","\u016e":"U\u030a","\u0170":"U\u030b","\u1e7c":"V\u0303","\u1e82":"W\u0301","\u1e80":"W\u0300","\u1e84":"W\u0308","\u0174":"W\u0302","\u1e86":"W\u0307","\u1e8c":"X\u0308","\u1e8a":"X\u0307","\xdd":"Y\u0301","\u1ef2":"Y\u0300","\u0178":"Y\u0308","\u1ef8":"Y\u0303","\u0232":"Y\u0304","\u0176":"Y\u0302","\u1e8e":"Y\u0307","\u0179":"Z\u0301","\u017d":"Z\u030c","\u1e90":"Z\u0302","\u017b":"Z\u0307","\u03ac":"\u03b1\u0301","\u1f70":"\u03b1\u0300","\u1fb1":"\u03b1\u0304","\u1fb0":"\u03b1\u0306","\u03ad":"\u03b5\u0301","\u1f72":"\u03b5\u0300","\u03ae":"\u03b7\u0301","\u1f74":"\u03b7\u0300","\u03af":"\u03b9\u0301","\u1f76":"\u03b9\u0300","\u03ca":"\u03b9\u0308","\u0390":"\u03b9\u0308\u0301","\u1fd2":"\u03b9\u0308\u0300","\u1fd1":"\u03b9\u0304","\u1fd0":"\u03b9\u0306","\u03cc":"\u03bf\u0301","\u1f78":"\u03bf\u0300","\u03cd":"\u03c5\u0301","\u1f7a":"\u03c5\u0300","\u03cb":"\u03c5\u0308","\u03b0":"\u03c5\u0308\u0301","\u1fe2":"\u03c5\u0308\u0300","\u1fe1":"\u03c5\u0304","\u1fe0":"\u03c5\u0306","\u03ce":"\u03c9\u0301","\u1f7c":"\u03c9\u0300","\u038e":"\u03a5\u0301","\u1fea":"\u03a5\u0300","\u03ab":"\u03a5\u0308","\u1fe9":"\u03a5\u0304","\u1fe8":"\u03a5\u0306","\u038f":"\u03a9\u0301","\u1ffa":"\u03a9\u0300"};class _a{constructor(e,t){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new Ga(e,t,this.mode),this.settings=t,this.leftrightDepth=0}expect(e,t){if(void 0===t&&(t=!0),this.fetch().text!==e)throw new i("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());t&&this.consume()}consume(){this.nextToken=null}fetch(){return null==this.nextToken&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}}subparse(e){var t=this.nextToken;this.consume(),this.gullet.pushToken(new n("}")),this.gullet.pushTokens(e);var r=this.parseExpression(!1);return this.expect("}"),this.nextToken=t,r}parseExpression(e,t){for(var r=[];;){"math"===this.mode&&this.consumeSpaces();var a=this.fetch();if(-1!==_a.endOfExpression.indexOf(a.text))break;if(t&&a.text===t)break;if(e&&Aa[a.text]&&Aa[a.text].infix)break;var n=this.parseAtom(t);if(!n)break;"internal"!==n.type&&r.push(n)}return"text"===this.mode&&this.formLigatures(r),this.handleInfixNodes(r)}handleInfixNodes(e){for(var t,r=-1,a=0;a=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+t[0]+'" used in math mode',e);var l,h=ne[this.mode][t].group,m=a.range(e);if(re.hasOwnProperty(h)){var c=h;l={type:"atom",mode:this.mode,family:c,loc:m,text:t}}else l={type:h,mode:this.mode,loc:m,text:t};o=l}else{if(!(t.charCodeAt(0)>=128))return null;this.settings.strict&&(z(t.charCodeAt(0))?"math"===this.mode&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+t[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+t[0]+'" ('+t.charCodeAt(0)+")",e)),o={type:"textord",mode:"text",loc:a.range(e),text:t}}if(this.consume(),s)for(var p=0;p{t.r(n),t.d(n,{assets:()=>E,contentTitle:()=>a,default:()=>l,frontMatter:()=>s,metadata:()=>o,toc:()=>i});var r=t(74848),c=t(28453);const s={},a="TOTAL_SYSTEM_RATE",o={id:"about/references/TOTAL_SYSTEM_RATE",title:"TOTAL_SYSTEM_RATE",description:"INSTALLATIONS / [...] /",source:"@site/docs/about/references/TOTAL_SYSTEM_RATE.md",sourceDirName:"about/references",slug:"/about/references/TOTAL_SYSTEM_RATE",permalink:"/ecalc/docs/about/references/TOTAL_SYSTEM_RATE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/TOTAL_SYSTEM_RATE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"TIME_SERIES",permalink:"/ecalc/docs/about/references/TIME_SERIES"},next:{title:"TURBINE_EFFICIENCIES",permalink:"/ecalc/docs/about/references/TURBINE_EFFICIENCIES"}},E={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function T(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,c.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"total_system_rate",children:"TOTAL_SYSTEM_RATE"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/INSTALLATIONS",children:"INSTALLATIONS"})," / [...] /\n",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/TOTAL_SYSTEM_RATE",children:"TOTAL_SYSTEM_RATE"})]}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(n.p,{children:["Used to define the total system rate [Sm",(0,r.jsx)("sup",{children:"3"}),"/day] for ",(0,r.jsx)(n.code,{children:"ENERGY_USAGE_MODEL"})," of type ",(0,r.jsx)(n.code,{children:"COMPRESSOR_SYSTEM"}),"\nand ",(0,r.jsx)(n.code,{children:"PUMP_SYSTEM"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n TOTAL_SYSTEM_RATE: \n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n TOTAL_SYSTEM_RATE: \n"})}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n TOTAL_SYSTEM_RATE: SIM1;WATER_INJ\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n TOTAL_SYSTEM_RATE: SIM1;GAS_PROD {+} SIM1;GAS_LIFT\n"})})]})}function l(e={}){const{wrapper:n}={...(0,c.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(T,{...e})}):T(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>o});var r=t(96540);const c={},s=r.createContext(c);function a(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:a(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2237.308b3350.js b/assets/js/2237.308b3350.js new file mode 100644 index 0000000000..b1b49c045d --- /dev/null +++ b/assets/js/2237.308b3350.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2237],{23363:(e,t,n)=>{n.d(t,{A:()=>r});n(96540);var i=n(34164),o=n(21312),s=n(51107),a=n(74848);function r(e){let{className:t}=e;return(0,a.jsx)("main",{className:(0,i.A)("container margin-vert--xl",t),children:(0,a.jsx)("div",{className:"row",children:(0,a.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,a.jsx)(s.A,{as:"h1",className:"hero__title",children:(0,a.jsx)(o.A,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,a.jsx)("p",{children:(0,a.jsx)(o.A,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,a.jsx)("p",{children:(0,a.jsx)(o.A,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}},82237:(e,t,n)=>{n.r(t),n.d(t,{default:()=>d});n(96540);var i=n(21312),o=n(1003),s=n(72415),a=n(23363),r=n(74848);function d(){const e=(0,i.T)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(o.be,{title:e}),(0,r.jsx)(s.A,{children:(0,r.jsx)(a.A,{})})]})}}}]); \ No newline at end of file diff --git a/assets/js/2376.cc3e3d09.js b/assets/js/2376.cc3e3d09.js new file mode 100644 index 0000000000..1affd8ecff --- /dev/null +++ b/assets/js/2376.cc3e3d09.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2376],{42376:(t,e,n)=>{n.d(e,{diagram:()=>O});var i=n(99702),s=n(26312),r=n(3219),a=n(78041),o=n(75263),l=(n(74353),n(16750),n(42838),function(){var t=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},e=[6,8,10,11,12,14,16,17,20,21],n=[1,9],i=[1,10],s=[1,11],r=[1,12],a=[1,13],o=[1,16],l=[1,17],c={trace:function(){},yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",20:"period",21:"event"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],performAction:function(t,e,n,i,s,r,a){var o=r.length-1;switch(s){case 1:return r[o-1];case 2:case 6:case 7:this.$=[];break;case 3:r[o-1].push(r[o]),this.$=r[o-1];break;case 4:case 5:this.$=r[o];break;case 8:i.getCommonDb().setDiagramTitle(r[o].substr(6)),this.$=r[o].substr(6);break;case 9:this.$=r[o].trim(),i.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=r[o].trim(),i.getCommonDb().setAccDescription(this.$);break;case 12:i.addSection(r[o].substr(8)),this.$=r[o].substr(8);break;case 15:i.addTask(r[o],0,""),this.$=r[o];break;case 16:i.addEvent(r[o].substr(2)),this.$=r[o]}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:n,12:i,14:s,16:r,17:a,18:14,19:15,20:o,21:l},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:18,11:n,12:i,14:s,16:r,17:a,18:14,19:15,20:o,21:l},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,19]},{15:[1,20]},t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),t(e,[2,4]),t(e,[2,9]),t(e,[2,10])],defaultActions:{},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],s=[null],r=[],a=this.table,o="",l=0,c=0,h=r.slice.call(arguments,1),d=Object.create(this.lexer),u={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(u.yy[p]=this.yy[p]);d.setInput(t,u.yy),u.yy.lexer=d,u.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var y=d.yylloc;r.push(y);var g=d.options&&d.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,m,_,b,x,k,v,w,S,$={};;){if(m=n[n.length-1],this.defaultActions[m]?_=this.defaultActions[m]:(null==f&&(S=void 0,"number"!=typeof(S=i.pop()||d.lex()||1)&&(S instanceof Array&&(S=(i=S).pop()),S=e.symbols_[S]||S),f=S),_=a[m]&&a[m][f]),void 0===_||!_.length||!_[0]){var E="";for(x in w=[],a[m])this.terminals_[x]&&x>2&&w.push("'"+this.terminals_[x]+"'");E=d.showPosition?"Parse error on line "+(l+1)+":\n"+d.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(E,{text:d.match,token:this.terminals_[f]||f,line:d.yylineno,loc:y,expected:w})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+f);switch(_[0]){case 1:n.push(f),s.push(d.yytext),r.push(d.yylloc),n.push(_[1]),f=null,c=d.yyleng,o=d.yytext,l=d.yylineno,y=d.yylloc;break;case 2:if(k=this.productions_[_[1]][1],$.$=s[s.length-k],$._$={first_line:r[r.length-(k||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(k||1)].first_column,last_column:r[r.length-1].last_column},g&&($._$.range=[r[r.length-(k||1)].range[0],r[r.length-1].range[1]]),void 0!==(b=this.performAction.apply($,[o,c,l,u.yy,_[1],s,r].concat(h))))return b;k&&(n=n.slice(0,-1*k*2),s=s.slice(0,-1*k),r=r.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),s.push($.$),r.push($._$),v=a[n[n.length-2]][n[n.length-1]],n.push(v);break;case 3:return!0}}return!0}},h={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;re[0].length)){if(e=n,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,s[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,i){switch(n){case 0:case 1:case 3:case 4:break;case 2:return 10;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),14;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 21;case 16:return 20;case 17:return 6;case 18:return"INVALID"}},rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?::\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18],inclusive:!0}}};function d(){this.yy={}}return c.lexer=h,d.prototype=c,c.Parser=d,new d}());l.parser=l;const c=l;let h="",d=0;const u=[],p=[],y=[],g=()=>i.L,f=function(){u.length=0,p.length=0,h="",y.length=0,(0,i.v)()},m=function(t){h=t,u.push(t)},_=function(){return u},b=function(){let t=w();let e=0;for(;!t&&e<100;)t=w(),e++;return p.push(...y),p},x=function(t,e,n){const i={id:d++,section:h,type:h,task:t,score:e||0,events:n?[n]:[]};y.push(i)},k=function(t){y.find((t=>t.id===d-1)).events.push(t)},v=function(t){const e={section:h,type:h,description:t,task:t,classes:[]};p.push(e)},w=function(){let t=!0;for(const[e,n]of y.entries())y[e].processed,t=t&&n.processed;return t},S={clear:f,getCommonDb:g,addSection:m,getSections:_,getTasks:b,addTask:x,addTaskOrg:v,addEvent:k},$=Object.freeze(Object.defineProperty({__proto__:null,addEvent:k,addSection:m,addTask:x,addTaskOrg:v,clear:f,default:S,getCommonDb:g,getSections:_,getTasks:b},Symbol.toStringTag,{value:"Module"}));!function(){function t(t,e,n,s,r,a,o,l){i(e.append("text").attr("x",n+r/2).attr("y",s+a/2+5).style("font-color",l).style("text-anchor","middle").text(t),o)}function e(t,e,n,s,r,a,o,l,c){const{taskFontSize:h,taskFontFamily:d}=l,u=t.split(//gi);for(let p=0;p)/).reverse(),r=[],a=n.attr("y"),o=parseFloat(n.attr("dy")),l=n.text(null).append("tspan").attr("x",0).attr("y",a).attr("dy",o+"em");for(let s=0;se||"
    "===t)&&(r.pop(),l.text(r.join(" ").trim()),r="
    "===t?[""]:[t],l=n.append("tspan").attr("x",0).attr("y",a).attr("dy","1.1em").text(t))}))}const I=function(t,e,n){t.append("path").attr("id","node-"+e.id).attr("class","node-bkg node-"+e.type).attr("d",`M0 ${e.height-5} v${10-e.height} q0,-5 5,-5 h${e.width-10} q5,0 5,5 v${e.height-5} H0 Z`),t.append("line").attr("class","node-line-"+n).attr("x1",0).attr("y1",e.height).attr("x2",e.width).attr("y2",e.height)},L=function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")},T=function(t,e,n,i){const s=n%12-1,r=t.append("g");e.section=s,r.attr("class",(e.class?e.class+" ":"")+"timeline-node section-"+s);const a=r.append("g"),o=r.append("g"),l=o.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(E,e.width).node().getBBox(),c=i.fontSize&&i.fontSize.replace?i.fontSize.replace("px",""):i.fontSize;return e.height=l.height+1.1*c*.5+e.padding,e.height=Math.max(e.height,e.maxHeight),e.width=e.width+2*e.padding,o.attr("transform","translate("+e.width/2+", "+e.padding/2+")"),I(a,e,s),e},A=function(t,e,n){const i=t.append("g"),s=i.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(E,e.width).node().getBBox(),r=n.fontSize&&n.fontSize.replace?n.fontSize.replace("px",""):n.fontSize;return i.remove(),s.height+1.1*r*.5+e.padding},C=function(t,e,n,s,r,a,o,l,c,h,d){var u;for(const p of e){const e={descr:p.task,section:n,number:n,width:150,padding:20,maxHeight:a};i.l.debug("taskNode",e);const l=t.append("g").attr("class","taskWrapper"),y=T(l,e,n,o).height;if(i.l.debug("taskHeight after draw",y),l.attr("transform",`translate(${s}, ${r})`),a=Math.max(a,y),p.events){const e=t.append("g").attr("class","lineWrapper");let i=a;r+=100,i+=M(t,p.events,n,s,r,o),r-=100,e.append("line").attr("x1",s+95).attr("y1",r+a).attr("x2",s+95).attr("y2",r+a+(d?a:h)+c+120).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}s+=200,d&&!(null==(u=o.timeline)?void 0:u.disableMulticolor)&&n++}r-=10},M=function(t,e,n,s,r,a){let o=0;const l=r;r+=100;for(const c of e){const e={descr:c,section:n,number:n,width:150,padding:20,maxHeight:50};i.l.debug("eventNode",e);const l=t.append("g").attr("class","eventWrapper"),h=T(l,e,n,a).height;o+=h,l.attr("transform",`translate(${s}, ${r})`),r=r+10+h}return r=l,o},O={db:$,renderer:{setConf:()=>{},draw:function(t,e,n,r){var a,o;const l=(0,i.c)(),c=l.leftMargin??50;i.l.debug("timeline",r.db);const h=l.securityLevel;let d;"sandbox"===h&&(d=(0,s.Ltv)("#i"+e));const u=("sandbox"===h?(0,s.Ltv)(d.nodes()[0].contentDocument.body):(0,s.Ltv)("body")).select("#"+e);u.append("g");const p=r.db.getTasks(),y=r.db.getCommonDb().getDiagramTitle();i.l.debug("task",p),L(u);const g=r.db.getSections();i.l.debug("sections",g);let f=0,m=0,_=0,b=0,x=50+c,k=50;b=50;let v=0,w=!0;g.forEach((function(t){const e=A(u,{number:v,descr:t,section:v,width:150,padding:20,maxHeight:f},l);i.l.debug("sectionHeight before draw",e),f=Math.max(f,e+20)}));let S=0,$=0;i.l.debug("tasks.length",p.length);for(const[s,I]of p.entries()){const t={number:s,descr:I,section:I.section,width:150,padding:20,maxHeight:m},e=A(u,t,l);i.l.debug("taskHeight before draw",e),m=Math.max(m,e+20),S=Math.max(S,I.events.length);let n=0;for(let i=0;i0?g.forEach((t=>{const e=p.filter((e=>e.section===t)),n={number:v,descr:t,section:v,width:200*Math.max(e.length,1)-50,padding:20,maxHeight:f};i.l.debug("sectionNode",n);const s=u.append("g"),r=T(s,n,v,l);i.l.debug("sectionNode output",r),s.attr("transform",`translate(${x}, 50)`),k+=f+50,e.length>0&&C(u,e,v,x,k,m,l,S,$,f,!1),x+=200*Math.max(e.length,1),k=50,v++})):(w=!1,C(u,p,v,x,k,m,l,S,$,f,!0));const E=u.node().getBBox();i.l.debug("bounds",E),y&&u.append("text").text(y).attr("x",E.width/2-c).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),_=w?f+m+150:m+100;u.append("g").attr("class","lineWrapper").append("line").attr("x1",c).attr("y1",_).attr("x2",E.width+3*c).attr("y2",_).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),(0,i.o)(void 0,u,(null==(a=l.timeline)?void 0:a.padding)??50,(null==(o=l.timeline)?void 0:o.useMaxWidth)??!1)}},parser:c,styles:t=>`\n .edge {\n stroke-width: 3;\n }\n ${(t=>{let e="";for(let n=0;n{n.d(t,{H:()=>l});var r=n(82933);function l(e,t){var n=e.append("foreignObject").attr("width","100000"),l=n.append("xhtml:div");l.attr("xmlns","http://www.w3.org/1999/xhtml");var o=t.label;switch(typeof o){case"function":l.insert(o);break;case"object":l.insert((function(){return o}));break;default:l.html(o)}r.AV(l,t.labelStyle),l.style("display","inline-block"),l.style("white-space","nowrap");var a=l.node().getBoundingClientRect();return n.attr("width",a.width).attr("height",a.height),n}},82933:(e,t,n)=>{n.d(t,{AV:()=>c,De:()=>o,c$:()=>p,gh:()=>a,nh:()=>d});var r=n(34963),l=n(89610);function o(e,t){return!!e.children(t).length}function a(e){return i(e.v)+":"+i(e.w)+":"+i(e.name)}var s=/:/g;function i(e){return e?String(e).replace(s,"\\:"):""}function c(e,t){t&&e.attr("style",t)}function d(e,t,n){t&&e.attr("class",t).attr("class",n+" "+e.attr("class"))}function p(e,t){var n=t.graph();if(r.A(n)){var o=n.transition;if(l.A(o))return o(e)}return e}},75937:(e,t,n)=>{n.d(t,{A:()=>o});var r=n(72453),l=n(74886);const o=(e,t)=>r.A.lang.round(l.A.parse(e)[t])},22453:(e,t,n)=>{n.d(t,{diagram:()=>a});var r=n(32548),l=n(65382),o=n(99702);n(26312),n(697),n(21176),n(14075),n(74353),n(16750),n(42838);const a={parser:r.p,db:r.f,renderer:l.f,styles:l.a,init:e=>{e.flowchart||(e.flowchart={}),e.flowchart.arrowMarkerAbsolute=e.arrowMarkerAbsolute,(0,o.p)({flowchart:{arrowMarkerAbsolute:e.arrowMarkerAbsolute}}),l.f.setConf(e.flowchart),r.f.clear(),r.f.setGen("gen-2")}}},65382:(e,t,n)=>{n.d(t,{a:()=>f,f:()=>w});var r=n(697),l=n(26312),o=n(99702),a=n(35364),s=n(10646),i=n(75937),c=n(25582);const d={},p=async function(e,t,n,r,l,a){const i=r.select(`[id="${n}"]`),c=Object.keys(e);for(const d of c){const n=e[d];let r="default";n.classes.length>0&&(r=n.classes.join(" ")),r+=" flowchart-label";const c=(0,o.k)(n.styles);let p,b=void 0!==n.text?n.text:n.id;if(o.l.info("vertex",n,n.labelType),"markdown"===n.labelType)o.l.info("vertex",n,n.labelType);else if((0,o.m)((0,o.c)().flowchart.htmlLabels)){const e={label:b};p=(0,s.H)(i,e).node(),p.parentNode.removeChild(p)}else{const e=l.createElementNS("http://www.w3.org/2000/svg","text");e.setAttribute("style",c.labelStyle.replace("color:","fill:"));const t=b.split(o.e.lineBreakRegex);for(const n of t){const t=l.createElementNS("http://www.w3.org/2000/svg","tspan");t.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),t.setAttribute("dy","1em"),t.setAttribute("x","1"),t.textContent=n,e.appendChild(t)}p=e}let w=0,f="";switch(n.type){case"round":w=5,f="rect";break;case"square":case"group":default:f="rect";break;case"diamond":f="question";break;case"hexagon":f="hexagon";break;case"odd":case"odd_right":f="rect_left_inv_arrow";break;case"lean_right":f="lean_right";break;case"lean_left":f="lean_left";break;case"trapezoid":f="trapezoid";break;case"inv_trapezoid":f="inv_trapezoid";break;case"circle":f="circle";break;case"ellipse":f="ellipse";break;case"stadium":f="stadium";break;case"subroutine":f="subroutine";break;case"cylinder":f="cylinder";break;case"doublecircle":f="doublecircle"}const u=await(0,o.r)(b,(0,o.c)());t.setNode(n.id,{labelStyle:c.labelStyle,shape:f,labelText:u,labelType:n.labelType,rx:w,ry:w,class:r,style:c.style,id:n.id,link:n.link,linkTarget:n.linkTarget,tooltip:a.db.getTooltip(n.id)||"",domId:a.db.lookUpDomId(n.id),haveCallback:n.haveCallback,width:"group"===n.type?500:void 0,dir:n.dir,type:n.type,props:n.props,padding:(0,o.c)().flowchart.padding}),o.l.info("setNode",{labelStyle:c.labelStyle,labelType:n.labelType,shape:f,labelText:u,rx:w,ry:w,class:r,style:c.style,id:n.id,domId:a.db.lookUpDomId(n.id),width:"group"===n.type?500:void 0,type:n.type,dir:n.dir,props:n.props,padding:(0,o.c)().flowchart.padding})}},b=async function(e,t,n){o.l.info("abc78 edges = ",e);let r,a,s=0,i={};if(void 0!==e.defaultStyle){const t=(0,o.k)(e.defaultStyle);r=t.style,a=t.labelStyle}for(const c of e){s++;const n="L-"+c.start+"-"+c.end;void 0===i[n]?(i[n]=0,o.l.info("abc78 new entry",n,i[n])):(i[n]++,o.l.info("abc78 new entry",n,i[n]));let p=n+"-"+i[n];o.l.info("abc78 new link id to be used is",n,p,i[n]);const b="LS-"+c.start,w="LE-"+c.end,f={style:"",labelStyle:""};switch(f.minlen=c.length||1,"arrow_open"===c.type?f.arrowhead="none":f.arrowhead="normal",f.arrowTypeStart="arrow_open",f.arrowTypeEnd="arrow_open",c.type){case"double_arrow_cross":f.arrowTypeStart="arrow_cross";case"arrow_cross":f.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":f.arrowTypeStart="arrow_point";case"arrow_point":f.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":f.arrowTypeStart="arrow_circle";case"arrow_circle":f.arrowTypeEnd="arrow_circle"}let u="",h="";switch(c.stroke){case"normal":u="fill:none;",void 0!==r&&(u=r),void 0!==a&&(h=a),f.thickness="normal",f.pattern="solid";break;case"dotted":f.thickness="normal",f.pattern="dotted",f.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":f.thickness="thick",f.pattern="solid",f.style="stroke-width: 3.5px;fill:none;";break;case"invisible":f.thickness="invisible",f.pattern="solid",f.style="stroke-width: 0;fill:none;"}if(void 0!==c.style){const e=(0,o.k)(c.style);u=e.style,h=e.labelStyle}f.style=f.style+=u,f.labelStyle=f.labelStyle+=h,void 0!==c.interpolate?f.curve=(0,o.n)(c.interpolate,l.lUB):void 0!==e.defaultInterpolate?f.curve=(0,o.n)(e.defaultInterpolate,l.lUB):f.curve=(0,o.n)(d.curve,l.lUB),void 0===c.text?void 0!==c.style&&(f.arrowheadStyle="fill: #333"):(f.arrowheadStyle="fill: #333",f.labelpos="c"),f.labelType=c.labelType,f.label=await(0,o.r)(c.text.replace(o.e.lineBreakRegex,"\n"),(0,o.c)()),void 0===c.style&&(f.style=f.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),f.labelStyle=f.labelStyle.replace("color:","fill:"),f.id=p,f.classes="flowchart-link "+b+" "+w,t.setEdge(c.start,c.end,f,s)}},w={setConf:function(e){const t=Object.keys(e);for(const n of t)d[n]=e[n]},addVertices:p,addEdges:b,getClasses:function(e,t){return t.db.getClasses()},draw:async function(e,t,n,s){o.l.info("Drawing flowchart");let i=s.db.getDirection();void 0===i&&(i="TD");const{securityLevel:c,flowchart:d}=(0,o.c)(),w=d.nodeSpacing||50,f=d.rankSpacing||50;let u;"sandbox"===c&&(u=(0,l.Ltv)("#i"+t));const h="sandbox"===c?(0,l.Ltv)(u.nodes()[0].contentDocument.body):(0,l.Ltv)("body"),g="sandbox"===c?u.nodes()[0].contentDocument:document,y=new r.T({multigraph:!0,compound:!0}).setGraph({rankdir:i,nodesep:w,ranksep:f,marginx:0,marginy:0}).setDefaultEdgeLabel((function(){return{}}));let k;const x=s.db.getSubGraphs();o.l.info("Subgraphs - ",x);for(let r=x.length-1;r>=0;r--)k=x[r],o.l.info("Subgraph - ",k),s.db.addVertex(k.id,{text:k.title,type:k.labelType},"group",void 0,k.classes,k.dir);const v=s.db.getVertices(),m=s.db.getEdges();o.l.info("Edges",m);let S=0;for(S=x.length-1;S>=0;S--){k=x[S],(0,l.Ubm)("cluster").append("text");for(let e=0;e`.label {\n font-family: ${e.fontFamily};\n color: ${e.nodeTextColor||e.textColor};\n }\n .cluster-label text {\n fill: ${e.titleColor};\n }\n .cluster-label span,p {\n color: ${e.titleColor};\n }\n\n .label text,span,p {\n fill: ${e.nodeTextColor||e.textColor};\n color: ${e.nodeTextColor||e.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${e.mainBkg};\n stroke: ${e.nodeBorder};\n stroke-width: 1px;\n }\n .flowchart-label text {\n text-anchor: middle;\n }\n // .flowchart-label .text-outer-tspan {\n // text-anchor: middle;\n // }\n // .flowchart-label .text-inner-tspan {\n // text-anchor: start;\n // }\n\n .node .katex path {\n fill: #000;\n stroke: #000;\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${e.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${e.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${e.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${e.edgeLabelBackground};\n rect {\n opacity: 0.5;\n background-color: ${e.edgeLabelBackground};\n fill: ${e.edgeLabelBackground};\n }\n text-align: center;\n }\n\n /* For html labels only */\n .labelBkg {\n background-color: ${((e,t)=>{const n=i.A,r=n(e,"r"),l=n(e,"g"),o=n(e,"b");return c.A(r,l,o,t)})(e.edgeLabelBackground,.5)};\n // background-color: \n }\n\n .cluster rect {\n fill: ${e.clusterBkg};\n stroke: ${e.clusterBorder};\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${e.titleColor};\n }\n\n .cluster span,p {\n color: ${e.titleColor};\n }\n /* .cluster div {\n color: ${e.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${e.fontFamily};\n font-size: 12px;\n background: ${e.tertiaryColor};\n border: 1px solid ${e.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${e.textColor};\n }\n`}}]); \ No newline at end of file diff --git a/assets/js/2548.46d5757e.js b/assets/js/2548.46d5757e.js new file mode 100644 index 0000000000..b4927653de --- /dev/null +++ b/assets/js/2548.46d5757e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2548],{32548:(t,e,s)=>{s.d(e,{d:()=>st,f:()=>et,p:()=>r});var u=s(26312),i=s(99702),n=function(){var t=function(t,e,s,u){for(s=s||{},u=t.length;u--;s[t[u]]=e);return s},e=[1,4],s=[1,3],u=[1,5],i=[1,8,9,10,11,27,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],n=[2,2],r=[1,13],a=[1,14],c=[1,15],o=[1,16],l=[1,23],h=[1,25],A=[1,26],d=[1,27],p=[1,49],y=[1,48],E=[1,29],f=[1,30],g=[1,31],k=[1,32],D=[1,33],b=[1,44],F=[1,46],T=[1,42],C=[1,47],_=[1,43],B=[1,50],S=[1,45],m=[1,51],x=[1,52],v=[1,34],L=[1,35],I=[1,36],R=[1,37],$=[1,57],N=[1,8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],O=[1,61],w=[1,60],P=[1,62],U=[8,9,11,73,75],V=[1,88],G=[1,93],M=[1,92],K=[1,89],Y=[1,85],j=[1,91],X=[1,87],z=[1,94],H=[1,90],W=[1,95],Q=[1,86],q=[8,9,10,11,73,75],Z=[8,9,10,11,44,73,75],J=[8,9,10,11,29,42,44,46,48,50,52,54,56,58,61,63,65,66,68,73,75,86,99,102,103,106,108,111,112,113],tt=[8,9,11,42,58,73,75,86,99,102,103,106,108,111,112,113],et=[42,58,86,99,102,103,106,108,111,112,113],st=[1,121],ut=[1,120],it=[1,128],nt=[1,142],rt=[1,143],at=[1,144],ct=[1,145],ot=[1,130],lt=[1,132],ht=[1,136],At=[1,137],dt=[1,138],pt=[1,139],yt=[1,140],Et=[1,141],ft=[1,146],gt=[1,147],kt=[1,126],Dt=[1,127],bt=[1,134],Ft=[1,129],Tt=[1,133],Ct=[1,131],_t=[8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],Bt=[1,149],St=[8,9,11],mt=[8,9,10,11,14,42,58,86,102,103,106,108,111,112,113],xt=[1,169],vt=[1,165],Lt=[1,166],It=[1,170],Rt=[1,167],$t=[1,168],Nt=[75,113,116],Ot=[8,9,10,11,12,14,27,29,32,42,58,73,81,82,83,84,85,86,87,102,106,108,111,112,113],wt=[10,103],Pt=[31,47,49,51,53,55,60,62,64,65,67,69,113,114,115],Ut=[1,235],Vt=[1,233],Gt=[1,237],Mt=[1,231],Kt=[1,232],Yt=[1,234],jt=[1,236],Xt=[1,238],zt=[1,255],Ht=[8,9,11,103],Wt=[8,9,10,11,58,81,102,103,106,107,108,109],Qt={trace:function(){},yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeparator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,vertexStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,link:39,node:40,styledVertex:41,AMP:42,vertex:43,STYLE_SEPARATOR:44,idString:45,DOUBLECIRCLESTART:46,DOUBLECIRCLEEND:47,PS:48,PE:49,"(-":50,"-)":51,STADIUMSTART:52,STADIUMEND:53,SUBROUTINESTART:54,SUBROUTINEEND:55,VERTEX_WITH_PROPS_START:56,"NODE_STRING[field]":57,COLON:58,"NODE_STRING[value]":59,PIPE:60,CYLINDERSTART:61,CYLINDEREND:62,DIAMOND_START:63,DIAMOND_STOP:64,TAGEND:65,TRAPSTART:66,TRAPEND:67,INVTRAPSTART:68,INVTRAPEND:69,linkStatement:70,arrowText:71,TESTSTR:72,START_LINK:73,edgeText:74,LINK:75,edgeTextToken:76,STR:77,MD_STR:78,textToken:79,keywords:80,STYLE:81,LINKSTYLE:82,CLASSDEF:83,CLASS:84,CLICK:85,DOWN:86,UP:87,textNoTagsToken:88,stylesOpt:89,"idString[vertex]":90,"idString[class]":91,CALLBACKNAME:92,CALLBACKARGS:93,HREF:94,LINK_TARGET:95,"STR[link]":96,"STR[tooltip]":97,alphaNum:98,DEFAULT:99,numList:100,INTERPOLATE:101,NUM:102,COMMA:103,style:104,styleComponent:105,NODE_STRING:106,UNIT:107,BRKT:108,PCT:109,idStringToken:110,MINUS:111,MULT:112,UNICODE_TEXT:113,TEXT:114,TAGSTART:115,EDGE_TEXT:116,alphaNumToken:117,direction_tb:118,direction_bt:119,direction_rl:120,direction_lr:121,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",42:"AMP",44:"STYLE_SEPARATOR",46:"DOUBLECIRCLESTART",47:"DOUBLECIRCLEEND",48:"PS",49:"PE",50:"(-",51:"-)",52:"STADIUMSTART",53:"STADIUMEND",54:"SUBROUTINESTART",55:"SUBROUTINEEND",56:"VERTEX_WITH_PROPS_START",57:"NODE_STRING[field]",58:"COLON",59:"NODE_STRING[value]",60:"PIPE",61:"CYLINDERSTART",62:"CYLINDEREND",63:"DIAMOND_START",64:"DIAMOND_STOP",65:"TAGEND",66:"TRAPSTART",67:"TRAPEND",68:"INVTRAPSTART",69:"INVTRAPEND",72:"TESTSTR",73:"START_LINK",75:"LINK",77:"STR",78:"MD_STR",81:"STYLE",82:"LINKSTYLE",83:"CLASSDEF",84:"CLASS",85:"CLICK",86:"DOWN",87:"UP",90:"idString[vertex]",91:"idString[class]",92:"CALLBACKNAME",93:"CALLBACKARGS",94:"HREF",95:"LINK_TARGET",96:"STR[link]",97:"STR[tooltip]",99:"DEFAULT",101:"INTERPOLATE",102:"NUM",103:"COMMA",106:"NODE_STRING",107:"UNIT",108:"BRKT",109:"PCT",111:"MINUS",112:"MULT",113:"UNICODE_TEXT",114:"TEXT",115:"TAGSTART",116:"EDGE_TEXT",118:"direction_tb",119:"direction_bt",120:"direction_rl",121:"direction_lr"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[20,3],[20,4],[20,2],[20,1],[40,1],[40,5],[41,1],[41,3],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,8],[43,4],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,4],[43,4],[43,1],[39,2],[39,3],[39,3],[39,1],[39,3],[74,1],[74,2],[74,1],[74,1],[70,1],[71,3],[30,1],[30,2],[30,1],[30,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[100,1],[100,3],[89,1],[89,3],[104,1],[104,2],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[79,1],[79,1],[79,1],[79,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[76,1],[76,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[45,1],[45,2],[98,1],[98,2],[33,1],[33,1],[33,1],[33,1]],performAction:function(t,e,s,u,i,n,r){var a=n.length-1;switch(i){case 2:case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 3:(!Array.isArray(n[a])||n[a].length>0)&&n[a-1].push(n[a]),this.$=n[a-1];break;case 4:case 176:case 49:case 71:case 174:this.$=n[a];break;case 11:u.setDirection("TB"),this.$="TB";break;case 12:u.setDirection(n[a-1]),this.$=n[a-1];break;case 27:this.$=n[a-1].nodes;break;case 33:this.$=u.addSubGraph(n[a-6],n[a-1],n[a-4]);break;case 34:this.$=u.addSubGraph(n[a-3],n[a-1],n[a-3]);break;case 35:this.$=u.addSubGraph(void 0,n[a-1],void 0);break;case 37:this.$=n[a].trim(),u.setAccTitle(this.$);break;case 38:case 39:this.$=n[a].trim(),u.setAccDescription(this.$);break;case 43:u.addLink(n[a-2].stmt,n[a],n[a-1]),this.$={stmt:n[a],nodes:n[a].concat(n[a-2].nodes)};break;case 44:u.addLink(n[a-3].stmt,n[a-1],n[a-2]),this.$={stmt:n[a-1],nodes:n[a-1].concat(n[a-3].nodes)};break;case 45:this.$={stmt:n[a-1],nodes:n[a-1]};break;case 46:this.$={stmt:n[a],nodes:n[a]};break;case 47:case 121:case 123:this.$=[n[a]];break;case 48:this.$=n[a-4].concat(n[a]);break;case 50:this.$=n[a-2],u.setClass(n[a-2],n[a]);break;case 51:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"square");break;case 52:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"doublecircle");break;case 53:this.$=n[a-5],u.addVertex(n[a-5],n[a-2],"circle");break;case 54:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"ellipse");break;case 55:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"stadium");break;case 56:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"subroutine");break;case 57:this.$=n[a-7],u.addVertex(n[a-7],n[a-1],"rect",void 0,void 0,void 0,Object.fromEntries([[n[a-5],n[a-3]]]));break;case 58:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"cylinder");break;case 59:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"round");break;case 60:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"diamond");break;case 61:this.$=n[a-5],u.addVertex(n[a-5],n[a-2],"hexagon");break;case 62:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"odd");break;case 63:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"trapezoid");break;case 64:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"inv_trapezoid");break;case 65:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"lean_right");break;case 66:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"lean_left");break;case 67:this.$=n[a],u.addVertex(n[a]);break;case 68:n[a-1].text=n[a],this.$=n[a-1];break;case 69:case 70:n[a-2].text=n[a-1],this.$=n[a-2];break;case 72:var c=u.destructLink(n[a],n[a-2]);this.$={type:c.type,stroke:c.stroke,length:c.length,text:n[a-1]};break;case 73:case 79:case 94:case 96:this.$={text:n[a],type:"text"};break;case 74:case 80:case 95:this.$={text:n[a-1].text+""+n[a],type:n[a-1].type};break;case 75:case 81:this.$={text:n[a],type:"string"};break;case 76:case 82:case 97:this.$={text:n[a],type:"markdown"};break;case 77:c=u.destructLink(n[a]);this.$={type:c.type,stroke:c.stroke,length:c.length};break;case 78:this.$=n[a-1];break;case 98:this.$=n[a-4],u.addClass(n[a-2],n[a]);break;case 99:this.$=n[a-4],u.setClass(n[a-2],n[a]);break;case 100:case 108:this.$=n[a-1],u.setClickEvent(n[a-1],n[a]);break;case 101:case 109:this.$=n[a-3],u.setClickEvent(n[a-3],n[a-2]),u.setTooltip(n[a-3],n[a]);break;case 102:this.$=n[a-2],u.setClickEvent(n[a-2],n[a-1],n[a]);break;case 103:this.$=n[a-4],u.setClickEvent(n[a-4],n[a-3],n[a-2]),u.setTooltip(n[a-4],n[a]);break;case 104:this.$=n[a-2],u.setLink(n[a-2],n[a]);break;case 105:this.$=n[a-4],u.setLink(n[a-4],n[a-2]),u.setTooltip(n[a-4],n[a]);break;case 106:this.$=n[a-4],u.setLink(n[a-4],n[a-2],n[a]);break;case 107:this.$=n[a-6],u.setLink(n[a-6],n[a-4],n[a]),u.setTooltip(n[a-6],n[a-2]);break;case 110:this.$=n[a-1],u.setLink(n[a-1],n[a]);break;case 111:this.$=n[a-3],u.setLink(n[a-3],n[a-2]),u.setTooltip(n[a-3],n[a]);break;case 112:this.$=n[a-3],u.setLink(n[a-3],n[a-2],n[a]);break;case 113:this.$=n[a-5],u.setLink(n[a-5],n[a-4],n[a]),u.setTooltip(n[a-5],n[a-2]);break;case 114:this.$=n[a-4],u.addVertex(n[a-2],void 0,void 0,n[a]);break;case 115:this.$=n[a-4],u.updateLink([n[a-2]],n[a]);break;case 116:this.$=n[a-4],u.updateLink(n[a-2],n[a]);break;case 117:this.$=n[a-8],u.updateLinkInterpolate([n[a-6]],n[a-2]),u.updateLink([n[a-6]],n[a]);break;case 118:this.$=n[a-8],u.updateLinkInterpolate(n[a-6],n[a-2]),u.updateLink(n[a-6],n[a]);break;case 119:this.$=n[a-6],u.updateLinkInterpolate([n[a-4]],n[a]);break;case 120:this.$=n[a-6],u.updateLinkInterpolate(n[a-4],n[a]);break;case 122:case 124:n[a-2].push(n[a]),this.$=n[a-2];break;case 126:this.$=n[a-1]+n[a];break;case 175:case 177:this.$=n[a-1]+""+n[a];break;case 178:this.$={stmt:"dir",value:"TB"};break;case 179:this.$={stmt:"dir",value:"BT"};break;case 180:this.$={stmt:"dir",value:"RL"};break;case 181:this.$={stmt:"dir",value:"LR"}}},table:[{3:1,4:2,9:e,10:s,12:u},{1:[3]},t(i,n,{5:6}),{4:7,9:e,10:s,12:u},{4:8,9:e,10:s,12:u},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:r,9:a,10:c,11:o,20:17,22:18,23:19,24:20,25:21,26:22,27:l,33:24,34:h,36:A,38:d,40:28,41:38,42:p,43:39,45:40,58:y,81:E,82:f,83:g,84:k,85:D,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x,118:v,119:L,120:I,121:R},t(i,[2,9]),t(i,[2,10]),t(i,[2,11]),{8:[1,54],9:[1,55],10:$,15:53,18:56},t(N,[2,3]),t(N,[2,4]),t(N,[2,5]),t(N,[2,6]),t(N,[2,7]),t(N,[2,8]),{8:O,9:w,11:P,21:58,39:59,70:63,73:[1,64],75:[1,65]},{8:O,9:w,11:P,21:66},{8:O,9:w,11:P,21:67},{8:O,9:w,11:P,21:68},{8:O,9:w,11:P,21:69},{8:O,9:w,11:P,21:70},{8:O,9:w,10:[1,71],11:P,21:72},t(N,[2,36]),{35:[1,73]},{37:[1,74]},t(N,[2,39]),t(U,[2,46],{18:75,10:$}),{10:[1,76]},{10:[1,77]},{10:[1,78]},{10:[1,79]},{14:V,42:G,58:M,77:[1,83],86:K,92:[1,80],94:[1,81],98:82,102:Y,103:j,106:X,108:z,111:H,112:W,113:Q,117:84},t(N,[2,178]),t(N,[2,179]),t(N,[2,180]),t(N,[2,181]),t(q,[2,47]),t(q,[2,49],{44:[1,96]}),t(Z,[2,67],{110:109,29:[1,97],42:p,46:[1,98],48:[1,99],50:[1,100],52:[1,101],54:[1,102],56:[1,103],58:y,61:[1,104],63:[1,105],65:[1,106],66:[1,107],68:[1,108],86:b,99:F,102:T,103:C,106:_,108:B,111:S,112:m,113:x}),t(J,[2,174]),t(J,[2,135]),t(J,[2,136]),t(J,[2,137]),t(J,[2,138]),t(J,[2,139]),t(J,[2,140]),t(J,[2,141]),t(J,[2,142]),t(J,[2,143]),t(J,[2,144]),t(J,[2,145]),t(i,[2,12]),t(i,[2,18]),t(i,[2,19]),{9:[1,110]},t(tt,[2,26],{18:111,10:$}),t(N,[2,27]),{40:112,41:38,42:p,43:39,45:40,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},t(N,[2,40]),t(N,[2,41]),t(N,[2,42]),t(et,[2,71],{71:113,60:[1,115],72:[1,114]}),{74:116,76:117,77:[1,118],78:[1,119],113:st,116:ut},t([42,58,60,72,86,99,102,103,106,108,111,112,113],[2,77]),t(N,[2,28]),t(N,[2,29]),t(N,[2,30]),t(N,[2,31]),t(N,[2,32]),{10:it,12:nt,14:rt,27:at,28:122,32:ct,42:ot,58:lt,73:ht,77:[1,124],78:[1,125],80:135,81:At,82:dt,83:pt,84:yt,85:Et,86:ft,87:gt,88:123,102:kt,106:Dt,108:bt,111:Ft,112:Tt,113:Ct},t(_t,n,{5:148}),t(N,[2,37]),t(N,[2,38]),t(U,[2,45],{42:Bt}),{42:p,45:150,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},{99:[1,151],100:152,102:[1,153]},{42:p,45:154,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},{42:p,45:155,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},t(St,[2,100],{10:[1,156],93:[1,157]}),{77:[1,158]},t(St,[2,108],{117:160,10:[1,159],14:V,42:G,58:M,86:K,102:Y,103:j,106:X,108:z,111:H,112:W,113:Q}),t(St,[2,110],{10:[1,161]}),t(mt,[2,176]),t(mt,[2,163]),t(mt,[2,164]),t(mt,[2,165]),t(mt,[2,166]),t(mt,[2,167]),t(mt,[2,168]),t(mt,[2,169]),t(mt,[2,170]),t(mt,[2,171]),t(mt,[2,172]),t(mt,[2,173]),{42:p,45:162,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},{30:163,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:171,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:173,48:[1,172],65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:174,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:175,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:176,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{106:[1,177]},{30:178,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:179,63:[1,180],65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:181,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:182,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:183,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},t(J,[2,175]),t(i,[2,20]),t(tt,[2,25]),t(U,[2,43],{18:184,10:$}),t(et,[2,68],{10:[1,185]}),{10:[1,186]},{30:187,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{75:[1,188],76:189,113:st,116:ut},t(Nt,[2,73]),t(Nt,[2,75]),t(Nt,[2,76]),t(Nt,[2,161]),t(Nt,[2,162]),{8:O,9:w,10:it,11:P,12:nt,14:rt,21:191,27:at,29:[1,190],32:ct,42:ot,58:lt,73:ht,80:135,81:At,82:dt,83:pt,84:yt,85:Et,86:ft,87:gt,88:192,102:kt,106:Dt,108:bt,111:Ft,112:Tt,113:Ct},t(Ot,[2,94]),t(Ot,[2,96]),t(Ot,[2,97]),t(Ot,[2,150]),t(Ot,[2,151]),t(Ot,[2,152]),t(Ot,[2,153]),t(Ot,[2,154]),t(Ot,[2,155]),t(Ot,[2,156]),t(Ot,[2,157]),t(Ot,[2,158]),t(Ot,[2,159]),t(Ot,[2,160]),t(Ot,[2,83]),t(Ot,[2,84]),t(Ot,[2,85]),t(Ot,[2,86]),t(Ot,[2,87]),t(Ot,[2,88]),t(Ot,[2,89]),t(Ot,[2,90]),t(Ot,[2,91]),t(Ot,[2,92]),t(Ot,[2,93]),{6:11,7:12,8:r,9:a,10:c,11:o,20:17,22:18,23:19,24:20,25:21,26:22,27:l,32:[1,193],33:24,34:h,36:A,38:d,40:28,41:38,42:p,43:39,45:40,58:y,81:E,82:f,83:g,84:k,85:D,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x,118:v,119:L,120:I,121:R},{10:$,18:194},{10:[1,195],42:p,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:109,111:S,112:m,113:x},{10:[1,196]},{10:[1,197],103:[1,198]},t(wt,[2,121]),{10:[1,199],42:p,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:109,111:S,112:m,113:x},{10:[1,200],42:p,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:109,111:S,112:m,113:x},{77:[1,201]},t(St,[2,102],{10:[1,202]}),t(St,[2,104],{10:[1,203]}),{77:[1,204]},t(mt,[2,177]),{77:[1,205],95:[1,206]},t(q,[2,50],{110:109,42:p,58:y,86:b,99:F,102:T,103:C,106:_,108:B,111:S,112:m,113:x}),{31:[1,207],65:xt,79:208,113:It,114:Rt,115:$t},t(Pt,[2,79]),t(Pt,[2,81]),t(Pt,[2,82]),t(Pt,[2,146]),t(Pt,[2,147]),t(Pt,[2,148]),t(Pt,[2,149]),{47:[1,209],65:xt,79:208,113:It,114:Rt,115:$t},{30:210,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{49:[1,211],65:xt,79:208,113:It,114:Rt,115:$t},{51:[1,212],65:xt,79:208,113:It,114:Rt,115:$t},{53:[1,213],65:xt,79:208,113:It,114:Rt,115:$t},{55:[1,214],65:xt,79:208,113:It,114:Rt,115:$t},{58:[1,215]},{62:[1,216],65:xt,79:208,113:It,114:Rt,115:$t},{64:[1,217],65:xt,79:208,113:It,114:Rt,115:$t},{30:218,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{31:[1,219],65:xt,79:208,113:It,114:Rt,115:$t},{65:xt,67:[1,220],69:[1,221],79:208,113:It,114:Rt,115:$t},{65:xt,67:[1,223],69:[1,222],79:208,113:It,114:Rt,115:$t},t(U,[2,44],{42:Bt}),t(et,[2,70]),t(et,[2,69]),{60:[1,224],65:xt,79:208,113:It,114:Rt,115:$t},t(et,[2,72]),t(Nt,[2,74]),{30:225,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},t(_t,n,{5:226}),t(Ot,[2,95]),t(N,[2,35]),{41:227,42:p,43:39,45:40,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},{10:Ut,58:Vt,81:Gt,89:228,102:Mt,104:229,105:230,106:Kt,107:Yt,108:jt,109:Xt},{10:Ut,58:Vt,81:Gt,89:239,101:[1,240],102:Mt,104:229,105:230,106:Kt,107:Yt,108:jt,109:Xt},{10:Ut,58:Vt,81:Gt,89:241,101:[1,242],102:Mt,104:229,105:230,106:Kt,107:Yt,108:jt,109:Xt},{102:[1,243]},{10:Ut,58:Vt,81:Gt,89:244,102:Mt,104:229,105:230,106:Kt,107:Yt,108:jt,109:Xt},{42:p,45:245,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},t(St,[2,101]),{77:[1,246]},{77:[1,247],95:[1,248]},t(St,[2,109]),t(St,[2,111],{10:[1,249]}),t(St,[2,112]),t(Z,[2,51]),t(Pt,[2,80]),t(Z,[2,52]),{49:[1,250],65:xt,79:208,113:It,114:Rt,115:$t},t(Z,[2,59]),t(Z,[2,54]),t(Z,[2,55]),t(Z,[2,56]),{106:[1,251]},t(Z,[2,58]),t(Z,[2,60]),{64:[1,252],65:xt,79:208,113:It,114:Rt,115:$t},t(Z,[2,62]),t(Z,[2,63]),t(Z,[2,65]),t(Z,[2,64]),t(Z,[2,66]),t([10,42,58,86,99,102,103,106,108,111,112,113],[2,78]),{31:[1,253],65:xt,79:208,113:It,114:Rt,115:$t},{6:11,7:12,8:r,9:a,10:c,11:o,20:17,22:18,23:19,24:20,25:21,26:22,27:l,32:[1,254],33:24,34:h,36:A,38:d,40:28,41:38,42:p,43:39,45:40,58:y,81:E,82:f,83:g,84:k,85:D,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x,118:v,119:L,120:I,121:R},t(q,[2,48]),t(St,[2,114],{103:zt}),t(Ht,[2,123],{105:256,10:Ut,58:Vt,81:Gt,102:Mt,106:Kt,107:Yt,108:jt,109:Xt}),t(Wt,[2,125]),t(Wt,[2,127]),t(Wt,[2,128]),t(Wt,[2,129]),t(Wt,[2,130]),t(Wt,[2,131]),t(Wt,[2,132]),t(Wt,[2,133]),t(Wt,[2,134]),t(St,[2,115],{103:zt}),{10:[1,257]},t(St,[2,116],{103:zt}),{10:[1,258]},t(wt,[2,122]),t(St,[2,98],{103:zt}),t(St,[2,99],{110:109,42:p,58:y,86:b,99:F,102:T,103:C,106:_,108:B,111:S,112:m,113:x}),t(St,[2,103]),t(St,[2,105],{10:[1,259]}),t(St,[2,106]),{95:[1,260]},{49:[1,261]},{60:[1,262]},{64:[1,263]},{8:O,9:w,11:P,21:264},t(N,[2,34]),{10:Ut,58:Vt,81:Gt,102:Mt,104:265,105:230,106:Kt,107:Yt,108:jt,109:Xt},t(Wt,[2,126]),{14:V,42:G,58:M,86:K,98:266,102:Y,103:j,106:X,108:z,111:H,112:W,113:Q,117:84},{14:V,42:G,58:M,86:K,98:267,102:Y,103:j,106:X,108:z,111:H,112:W,113:Q,117:84},{95:[1,268]},t(St,[2,113]),t(Z,[2,53]),{30:269,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},t(Z,[2,61]),t(_t,n,{5:270}),t(Ht,[2,124],{105:256,10:Ut,58:Vt,81:Gt,102:Mt,106:Kt,107:Yt,108:jt,109:Xt}),t(St,[2,119],{117:160,10:[1,271],14:V,42:G,58:M,86:K,102:Y,103:j,106:X,108:z,111:H,112:W,113:Q}),t(St,[2,120],{117:160,10:[1,272],14:V,42:G,58:M,86:K,102:Y,103:j,106:X,108:z,111:H,112:W,113:Q}),t(St,[2,107]),{31:[1,273],65:xt,79:208,113:It,114:Rt,115:$t},{6:11,7:12,8:r,9:a,10:c,11:o,20:17,22:18,23:19,24:20,25:21,26:22,27:l,32:[1,274],33:24,34:h,36:A,38:d,40:28,41:38,42:p,43:39,45:40,58:y,81:E,82:f,83:g,84:k,85:D,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x,118:v,119:L,120:I,121:R},{10:Ut,58:Vt,81:Gt,89:275,102:Mt,104:229,105:230,106:Kt,107:Yt,108:jt,109:Xt},{10:Ut,58:Vt,81:Gt,89:276,102:Mt,104:229,105:230,106:Kt,107:Yt,108:jt,109:Xt},t(Z,[2,57]),t(N,[2,33]),t(St,[2,117],{103:zt}),t(St,[2,118],{103:zt})],defaultActions:{},parseError:function(t,e){if(!e.recoverable){var s=new Error(t);throw s.hash=e,s}this.trace(t)},parse:function(t){var e=this,s=[0],u=[],i=[null],n=[],r=this.table,a="",c=0,o=0,l=n.slice.call(arguments,1),h=Object.create(this.lexer),A={yy:{}};for(var d in this.yy)Object.prototype.hasOwnProperty.call(this.yy,d)&&(A.yy[d]=this.yy[d]);h.setInput(t,A.yy),A.yy.lexer=h,A.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var p=h.yylloc;n.push(p);var y=h.options&&h.options.ranges;"function"==typeof A.yy.parseError?this.parseError=A.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var E,f,g,k,D,b,F,T,C,_={};;){if(f=s[s.length-1],this.defaultActions[f]?g=this.defaultActions[f]:(null==E&&(C=void 0,"number"!=typeof(C=u.pop()||h.lex()||1)&&(C instanceof Array&&(C=(u=C).pop()),C=e.symbols_[C]||C),E=C),g=r[f]&&r[f][E]),void 0===g||!g.length||!g[0]){var B="";for(D in T=[],r[f])this.terminals_[D]&&D>2&&T.push("'"+this.terminals_[D]+"'");B=h.showPosition?"Parse error on line "+(c+1)+":\n"+h.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[E]||E)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==E?"end of input":"'"+(this.terminals_[E]||E)+"'"),this.parseError(B,{text:h.match,token:this.terminals_[E]||E,line:h.yylineno,loc:p,expected:T})}if(g[0]instanceof Array&&g.length>1)throw new Error("Parse Error: multiple actions possible at state: "+f+", token: "+E);switch(g[0]){case 1:s.push(E),i.push(h.yytext),n.push(h.yylloc),s.push(g[1]),E=null,o=h.yyleng,a=h.yytext,c=h.yylineno,p=h.yylloc;break;case 2:if(b=this.productions_[g[1]][1],_.$=i[i.length-b],_._$={first_line:n[n.length-(b||1)].first_line,last_line:n[n.length-1].last_line,first_column:n[n.length-(b||1)].first_column,last_column:n[n.length-1].last_column},y&&(_._$.range=[n[n.length-(b||1)].range[0],n[n.length-1].range[1]]),void 0!==(k=this.performAction.apply(_,[a,o,c,A.yy,g[1],i,n].concat(l))))return k;b&&(s=s.slice(0,-1*b*2),i=i.slice(0,-1*b),n=n.slice(0,-1*b)),s.push(this.productions_[g[1]][0]),i.push(_.$),n.push(_._$),F=r[s[s.length-2]][s[s.length-1]],s.push(F);break;case 3:return!0}}return!0}},qt={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,s=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var u=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),s.length-1&&(this.yylineno-=s.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:s?(s.length===u.length?this.yylloc.first_column:0)+u[u.length-s.length].length-s[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var s,u,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(u=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=u.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:u?u[u.length-1].length-u[u.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],s=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;if(this._backtrack){for(var n in i)this[n]=i[n];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,s,u;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),n=0;ne[0].length)){if(e=s,u=n,this.options.backtrack_lexer){if(!1!==(t=this.test_match(s,i[n])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[u]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,s,u){switch(s){case 0:return this.begin("acc_title"),34;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),36;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:case 8:case 11:case 14:case 17:case 27:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:this.begin("callbackname");break;case 9:this.popState(),this.begin("callbackargs");break;case 10:return 92;case 12:return 93;case 13:return"MD_STR";case 15:this.begin("md_string");break;case 16:return"STR";case 18:this.pushState("string");break;case 19:return 81;case 20:return 99;case 21:return 82;case 22:return 101;case 23:return 83;case 24:return 84;case 25:return 94;case 26:this.begin("click");break;case 28:return 85;case 29:case 30:case 31:return t.lex.firstGraph()&&this.begin("dir"),12;case 32:return 27;case 33:return 32;case 34:case 35:case 36:case 37:return 95;case 38:return this.popState(),13;case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 48:return this.popState(),14;case 49:return 118;case 50:return 119;case 51:return 120;case 52:return 121;case 53:return 102;case 54:case 95:return 108;case 55:return 44;case 56:return 58;case 57:case 96:return 42;case 58:return 8;case 59:return 103;case 60:case 94:return 112;case 61:case 64:case 67:return this.popState(),75;case 62:return this.pushState("edgeText"),73;case 63:case 66:case 69:return 116;case 65:return this.pushState("thickEdgeText"),73;case 68:return this.pushState("dottedEdgeText"),73;case 70:return 75;case 71:return this.popState(),51;case 72:case 108:return"TEXT";case 73:return this.pushState("ellipseText"),50;case 74:return this.popState(),53;case 75:return this.pushState("text"),52;case 76:return this.popState(),55;case 77:return this.pushState("text"),54;case 78:return 56;case 79:return this.pushState("text"),65;case 80:return this.popState(),62;case 81:return this.pushState("text"),61;case 82:return this.popState(),47;case 83:return this.pushState("text"),46;case 84:return this.popState(),67;case 85:return this.popState(),69;case 86:return 114;case 87:return this.pushState("trapText"),66;case 88:return this.pushState("trapText"),68;case 89:return 115;case 90:return 65;case 91:return 87;case 92:return"SEP";case 93:return 86;case 97:return 106;case 98:return 111;case 99:return 113;case 100:return this.popState(),60;case 101:return this.pushState("text"),60;case 102:return this.popState(),49;case 103:return this.pushState("text"),48;case 104:return this.popState(),31;case 105:return this.pushState("text"),29;case 106:return this.popState(),64;case 107:return this.pushState("text"),63;case 109:return"QUOTE";case 110:return 9;case 111:return 10;case 112:return 11}},rules:[/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|!\)+)/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{callbackargs:{rules:[11,12,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},callbackname:{rules:[8,9,10,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},href:{rules:[15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},click:{rules:[15,18,27,28,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},dottedEdgeText:{rules:[15,18,67,69,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},thickEdgeText:{rules:[15,18,64,66,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},edgeText:{rules:[15,18,61,63,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},trapText:{rules:[15,18,70,73,75,77,81,83,84,85,86,87,88,101,103,105,107],inclusive:!1},ellipseText:{rules:[15,18,70,71,72,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},text:{rules:[15,18,70,73,74,75,76,77,80,81,82,83,87,88,100,101,102,103,104,105,106,107,108],inclusive:!1},vertex:{rules:[15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},dir:{rules:[15,18,38,39,40,41,42,43,44,45,46,47,48,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_descr_multiline:{rules:[5,6,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_descr:{rules:[3,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_title:{rules:[1,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},md_string:{rules:[13,14,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},string:{rules:[15,16,17,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},INITIAL:{rules:[0,2,4,7,15,18,19,20,21,22,23,24,25,26,29,30,31,32,33,34,35,36,37,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,67,68,70,73,75,77,78,79,81,83,87,88,89,90,91,92,93,94,95,96,97,98,99,101,103,105,107,109,110,111,112],inclusive:!0}}};function Zt(){this.yy={}}return Qt.lexer=qt,Zt.prototype=Qt,Qt.Parser=Zt,new Zt}();n.parser=n;const r=n;let a,c,o=0,l=(0,i.c)(),h={},A=[],d={},p=[],y={},E={},f=0,g=!0,k=[];const D=t=>i.e.sanitizeText(t,l),b=function(t){const e=Object.keys(h);for(const s of e)if(h[s].id===t)return h[s].domId;return t},F=function(t,e,s,u,n,r,a={}){let c,A=t;void 0!==A&&0!==A.trim().length&&(void 0===h[A]&&(h[A]={id:A,labelType:"text",domId:"flowchart-"+A+"-"+o,styles:[],classes:[]}),o++,void 0!==e?(l=(0,i.c)(),c=D(e.text.trim()),h[A].labelType=e.type,'"'===c[0]&&'"'===c[c.length-1]&&(c=c.substring(1,c.length-1)),h[A].text=c):void 0===h[A].text&&(h[A].text=t),void 0!==s&&(h[A].type=s),null!=u&&u.forEach((function(t){h[A].styles.push(t)})),null!=n&&n.forEach((function(t){h[A].classes.push(t)})),void 0!==r&&(h[A].dir=r),void 0===h[A].props?h[A].props=a:void 0!==a&&Object.assign(h[A].props,a))},T=function(t,e,s){const u={start:t,end:e,type:void 0,text:"",labelType:"text"};i.l.info("abc78 Got edge...",u);const n=s.text;if(void 0!==n&&(u.text=D(n.text.trim()),'"'===u.text[0]&&'"'===u.text[u.text.length-1]&&(u.text=u.text.substring(1,u.text.length-1)),u.labelType=n.type),void 0!==s&&(u.type=s.type,u.stroke=s.stroke,u.length=s.length),(null==u?void 0:u.length)>10&&(u.length=10),!(A.length<(l.maxEdges??500)))throw new Error(`Edge limit exceeded. ${A.length} edges found, but the limit is ${l.maxEdges}.\n\nInitialize mermaid with maxEdges set to a higher number to allow more edges.\nYou cannot set this config via configuration inside the diagram as it is a secure config.\nYou have to call mermaid.initialize.`);i.l.info("abc78 pushing edge..."),A.push(u)},C=function(t,e,s){let u,n;for(i.l.info("addLink (abc78)",t,e,s),u=0;u=A.length)throw new Error(`The index ${t} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${A.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);"default"===t?A.defaultStyle=e:(-1===i.u.isSubstringInArray("fill",e)&&e.push("fill:none"),A[t].style=e)}))},S=function(t,e){t.split(",").forEach((function(t){void 0===d[t]&&(d[t]={id:t,styles:[],textStyles:[]}),null!=e&&e.forEach((function(e){if(e.match("color")){const s=e.replace("fill","bgFill").replace("color","fill");d[t].textStyles.push(s)}d[t].styles.push(e)}))}))},m=function(t){a=t,a.match(/.*/)&&(a="LR"),a.match(/.*v/)&&(a="TB"),"TD"===a&&(a="TB")},x=function(t,e){t.split(",").forEach((function(t){let s=t;void 0!==h[s]&&h[s].classes.push(e),void 0!==y[s]&&y[s].classes.push(e)}))},v=function(t,e,s){t.split(",").forEach((function(t){void 0!==h[t]&&(h[t].link=i.u.formatUrl(e,l),h[t].linkTarget=s)})),x(t,"clickable")},L=function(t){if(E.hasOwnProperty(t))return E[t]},I=function(t,e,s){t.split(",").forEach((function(t){!function(t,e,s){let u=b(t);if("loose"!==(0,i.c)().securityLevel)return;if(void 0===e)return;let n=[];if("string"==typeof s){n=s.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let t=0;t")),t.classed("hover",!0)})).on("mouseout",(function(){e.transition().duration(500).style("opacity",0);(0,u.Ltv)(this).classed("hover",!1)}))};k.push(P);const U=function(t="gen-1"){h={},d={},A=[],k=[P],p=[],y={},f=0,E={},g=!0,c=t,l=(0,i.c)(),(0,i.v)()},V=t=>{c=t||"gen-2"},G=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},M=function(t,e,s){let u=t.text.trim(),n=s.text;t===s&&s.text.match(/\s/)&&(u=void 0);let r=[];const{nodeList:a,dir:o}=function(t){const e={boolean:{},number:{},string:{}},s=[];let u;return{nodeList:t.filter((function(t){const i=typeof t;return t.stmt&&"dir"===t.stmt?(u=t.value,!1):""!==t.trim()&&(i in e?!e[i].hasOwnProperty(t)&&(e[i][t]=!0):!s.includes(t)&&s.push(t))})),dir:u}}(r.concat.apply(r,e));if(r=a,"gen-1"===c)for(let i=0;i2e3)return;if(j[Y]=e,p[e].id===t)return{result:!0,count:0};let u=0,i=1;for(;u=0){const s=X(t,e);if(s.result)return{result:!0,count:i+s.count};i+=s.count}u+=1}return{result:!1,count:i}},z=function(t){return j[t]},H=function(){Y=-1,p.length>0&&X("none",p.length-1)},W=function(){return p},Q=()=>!!g&&(g=!1,!0),q=(t,e)=>{const s=(t=>{const e=t.trim();let s=e.slice(0,-1),u="arrow_open";switch(e.slice(-1)){case"x":u="arrow_cross","x"===e[0]&&(u="double_"+u,s=s.slice(1));break;case">":u="arrow_point","<"===e[0]&&(u="double_"+u,s=s.slice(1));break;case"o":u="arrow_circle","o"===e[0]&&(u="double_"+u,s=s.slice(1))}let i="normal",n=s.length-1;"="===s[0]&&(i="thick"),"~"===s[0]&&(i="invisible");let r=((t,e)=>{const s=e.length;let u=0;for(let i=0;i{let e=t.trim(),s="arrow_open";switch(e[0]){case"<":s="arrow_point",e=e.slice(1);break;case"x":s="arrow_cross",e=e.slice(1);break;case"o":s="arrow_circle",e=e.slice(1)}let u="normal";return e.includes("=")&&(u="thick"),e.includes(".")&&(u="dotted"),{type:s,stroke:u}})(e),u.stroke!==s.stroke)return{type:"INVALID",stroke:"INVALID"};if("arrow_open"===u.type)u.type=s.type;else{if(u.type!==s.type)return{type:"INVALID",stroke:"INVALID"};u.type="double_"+u.type}return"double_arrow"===u.type&&(u.type="double_arrow_point"),u.length=s.length,u}return s},Z=(t,e)=>{let s=!1;return t.forEach((t=>{t.nodes.indexOf(e)>=0&&(s=!0)})),s},J=(t,e)=>{const s=[];return t.nodes.forEach(((u,i)=>{Z(e,u)||s.push(t.nodes[i])})),{nodes:s}},tt={firstGraph:Q},et={defaultConfig:()=>i.K.flowchart,setAccTitle:i.s,getAccTitle:i.g,getAccDescription:i.a,setAccDescription:i.b,addVertex:F,lookUpDomId:b,addLink:C,updateLinkInterpolate:_,updateLink:B,addClass:S,setDirection:m,setClass:x,setTooltip:function(t,e){t.split(",").forEach((function(t){void 0!==e&&(E["gen-1"===c?b(t):t]=D(e))}))},getTooltip:L,setClickEvent:I,setLink:v,bindFunctions:R,getDirection:$,getVertices:N,getEdges:O,getClasses:w,clear:U,setGen:V,defaultStyle:G,addSubGraph:M,getDepthFirstPos:z,indexNodes:H,getSubGraphs:W,destructLink:q,lex:tt,exists:Z,makeUniq:J,setDiagramTitle:i.q,getDiagramTitle:i.t},st=Object.freeze(Object.defineProperty({__proto__:null,addClass:S,addLink:C,addSingleLink:T,addSubGraph:M,addVertex:F,bindFunctions:R,clear:U,default:et,defaultStyle:G,destructLink:q,firstGraph:Q,getClasses:w,getDepthFirstPos:z,getDirection:$,getEdges:O,getSubGraphs:W,getTooltip:L,getVertices:N,indexNodes:H,lex:tt,lookUpDomId:b,setClass:x,setClickEvent:I,setDirection:m,setGen:V,setLink:v,updateLink:B,updateLinkInterpolate:_},Symbol.toStringTag,{value:"Module"}))}}]); \ No newline at end of file diff --git a/assets/js/277de022.18fd3489.js b/assets/js/277de022.18fd3489.js new file mode 100644 index 0000000000..3ac6003a40 --- /dev/null +++ b/assets/js/277de022.18fd3489.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2660],{58619:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>E,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var r=t(74848),s=t(28453);const o={},c="STREAMS",i={id:"about/references/STREAMS",title:"STREAMS",description:"MODELS /",source:"@site/docs/about/references/STREAMS.md",sourceDirName:"about/references",slug:"/about/references/STREAMS",permalink:"/ecalc/docs/about/references/STREAMS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/STREAMS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"STREAM",permalink:"/ecalc/docs/about/references/STREAM"},next:{title:"SUCTION_PRESSURE",permalink:"/ecalc/docs/about/references/SUCTION_PRESSURE"}},a={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"streams",children:"STREAMS"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/MODELS",children:"MODELS"})," /\n[...] /\n",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/STREAMS",children:"STREAMS"})]}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(n.p,{children:["This keyword can ",(0,r.jsx)(n.strong,{children:"only"})," be utilised for a ",(0,r.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})," model type."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"STREAMS"})," is a list of all in- and out-going streams for the compressor train."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"The same equation of state (EOS) must be used for each INGOING stream fluid models"}),"\n",(0,r.jsxs)(n.li,{children:["OUTGOING fluid models ",(0,r.jsx)(n.strong,{children:"cannot"})," be specified."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n STREAMS: \n - NAME: \n TYPE: INGOING\n FLUID_MODEL: \n - NAME: \n TYPE: INGOING\n FLUID_MODEL: \n - ...\n - NAME: \n TYPE: OUTGOING \n ...\n"})}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n STREAMS: \n - NAME: 1_stage_inlet\n TYPE: INGOING\n FLUID_MODEL: fluid_model_1\n - NAME: 3_stage_inlet\n TYPE: INGOING\n FLUID_MODEL: fluid_model_2\n - NAME: 2_stage_outlet\n TYPE: OUTGOING\n ...\n"})})]})}function E(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>i});var r=t(96540);const s={},o=r.createContext(s);function c(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/27b97f54.4c21a317.js b/assets/js/27b97f54.4c21a317.js new file mode 100644 index 0000000000..31b66c6799 --- /dev/null +++ b/assets/js/27b97f54.4c21a317.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7697],{59887:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>E,frontMatter:()=>s,metadata:()=>a,toc:()=>l});var t=r(74848),c=r(28453);const s={},o="CONSUMERS",a={id:"about/references/CONSUMERS",title:"CONSUMERS",description:"INSTALLATIONS /",source:"@site/docs/about/references/CONSUMERS.md",sourceDirName:"about/references",slug:"/about/references/CONSUMERS",permalink:"/ecalc/docs/about/references/CONSUMERS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/CONSUMERS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CONSTANT",permalink:"/ecalc/docs/about/references/CONSTANT"},next:{title:"CONSUMPTION_RATE_TYPE",permalink:"/ecalc/docs/about/references/CONSUMPTION_RATE_TYPE"}},d={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function i(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,c.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"consumers",children:"CONSUMERS"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/INSTALLATIONS",children:"INSTALLATIONS"})," /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/GENERATORSETS",children:"GENERATORSETS"})," /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/CONSUMERS",children:"CONSUMERS"})]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Required"}),(0,t.jsx)(n.th,{children:"Child of"}),(0,t.jsx)(n.th,{children:"Children/Options"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Yes"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"GENERATORSETS"})}),(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"CATEGORY"})," ",(0,t.jsx)("br",{})," ",(0,t.jsx)(n.code,{children:"NAME"})," ",(0,t.jsx)("br",{})," ",(0,t.jsx)(n.code,{children:"ENERGY_USAGE_MODEL"})]})]})})]}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:["Consumers getting electrical power from the generator set. The attributes ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/NAME",children:"NAME"}),",\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/CATEGORY",children:"CATEGORY"})," and ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"}),"\nare all required"]}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"CONSUMERS:\n - NAME: \n CATEGORY: \n ENERGY_USAGE_MODEL: \n"})}),"\n",(0,t.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"CONSUMERS:\n - NAME: SomeElectricalConsumer\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n \n - NAME: SomeOtherElectricalConsumer\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n \n ...\n - NAME: ElectricalConsumerN\n CATEGORY: MISCELLANEOUS\n ENERGY_USAGE_MODEL:\n \n"})})]})}function E(e={}){const{wrapper:n}={...(0,c.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(i,{...e})}):i(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>o,x:()=>a});var t=r(96540);const c={},s=t.createContext(c);function o(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:o(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/281e4beb.dea8f301.js b/assets/js/281e4beb.dea8f301.js new file mode 100644 index 0000000000..c448b501dd --- /dev/null +++ b/assets/js/281e4beb.dea8f301.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3952],{57052:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>l,frontMatter:()=>s,metadata:()=>i,toc:()=>d});var t=r(74848),o=r(28453);const s={},c="COMPRESSOR_TRAIN",i={id:"about/references/COMPRESSOR_TRAIN",title:"COMPRESSOR_TRAIN",description:"Description",source:"@site/docs/about/references/COMPRESSOR_TRAIN.md",sourceDirName:"about/references",slug:"/about/references/COMPRESSOR_TRAIN",permalink:"/ecalc/docs/about/references/COMPRESSOR_TRAIN",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/COMPRESSOR_TRAIN.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"COMPRESSORS",permalink:"/ecalc/docs/about/references/COMPRESSOR_SYSTEM"},next:{title:"COMPRESSOR_TRAIN_MODEL",permalink:"/ecalc/docs/about/references/COMPRESSOR_TRAIN_MODEL"}},a={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2}];function R(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"compressor_train",children:"COMPRESSOR_TRAIN"}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:["This keyword is necessary when defining a compressor model. It relates to defining the actual\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/STAGES",children:"STAGES"})," in the compressor model."]}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: \n FLUID_MODEL: \n COMPRESSOR_TRAIN: \n STAGES:\n - INLET_TEMPERATURE: \n COMPRESSOR_CHART: \n PRESSURE_DROP_AHEAD_OF_STAGE: \n - INLET_TEMPERATURE: \n COMPRESSOR_CHART: \n PRESSURE_DROP_AHEAD_OF_STAGE: \n - ... and so forth for each stage in the train \n ...\n"})})]})}function l(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(R,{...e})}):R(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>c,x:()=>i});var t=r(96540);const o={},s=t.createContext(o);function c(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/282c1cc9.73879b24.js b/assets/js/282c1cc9.73879b24.js new file mode 100644 index 0000000000..bdcb8427e6 --- /dev/null +++ b/assets/js/282c1cc9.73879b24.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7500],{98503:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>s,default:()=>E,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var c=r(74848),t=r(28453);const o={},s="POLYTROPIC_EFFICIENCY",i={id:"about/references/POLYTROPIC_EFFICIENCY",title:"POLYTROPIC_EFFICIENCY",description:"Description",source:"@site/docs/about/references/POLYTROPIC_EFFICIENCY.md",sourceDirName:"about/references",slug:"/about/references/POLYTROPIC_EFFICIENCY",permalink:"/ecalc/docs/about/references/POLYTROPIC_EFFICIENCY",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/POLYTROPIC_EFFICIENCY.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"OPERATIONAL_SETTINGS",permalink:"/ecalc/docs/about/references/OPERATIONAL_SETTINGS"},next:{title:"POWERLOSSFACTOR",permalink:"/ecalc/docs/about/references/POWERLOSSFACTOR"}},a={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,t.R)(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(n.h1,{id:"polytropic_efficiency",children:"POLYTROPIC_EFFICIENCY"}),"\n",(0,c.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"POLYTROPIC_EFFICIENCY"})," is required to be specified under the ",(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/MODELS",children:"MODELS"})," keyword when\nthe model is of ",(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/TYPE",children:"TYPE"})," ",(0,c.jsx)(n.code,{children:"COMPRESSOR_CHART"})," ",(0,c.jsx)(n.strong,{children:"and"})," the ",(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/CHART_TYPE",children:"CHART_TYPE"}),"\nis either ",(0,c.jsx)(n.code,{children:"GENERIC_FROM_INPUT"}),"or ",(0,c.jsx)(n.code,{children:"GENERIC_FROM_DESIGN_POINT"}),". The polytropic efficiency will be a fixed number for all\nrate/head values in the compressor chart."]}),"\n",(0,c.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: COMPRESSOR_CHART\n CHART_TYPE: \n POLYTROPIC_EFFICIENCY: \n UNITS:\n EFFICIENCY: \n ...\n"})}),"\n",(0,c.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_chart_model_reference_name\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_INPUT\n POLYTROPIC_EFFICIENCY: 0.75\n UNITS:\n EFFICIENCY: FRACTION\n ...\n"})})]})}function E(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,c.jsx)(n,{...e,children:(0,c.jsx)(d,{...e})}):d(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>s,x:()=>i});var c=r(96540);const t={},o=c.createContext(t);function s(e){const n=c.useContext(o);return c.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),c.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2843.22300328.js b/assets/js/2843.22300328.js new file mode 100644 index 0000000000..2ea1eaae3c --- /dev/null +++ b/assets/js/2843.22300328.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2843],{22843:(t,i,n)=>{n.d(i,{diagram:()=>o});var s=n(99702),e=(n(74353),n(16750),n(26312),n(42838),function(){var t=function(t,i,n,s){for(n=n||{},s=t.length;s--;n[t[s]]=i);return n},i=[6,9,10],n={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(t,i,n,s,e,r,h){switch(r.length,e){case 1:return s;case 4:break;case 6:s.setInfo(!0)}},table:[{3:1,4:[1,2]},{1:[3]},t(i,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},t(i,[2,3]),t(i,[2,4]),t(i,[2,5]),t(i,[2,6])],defaultActions:{4:[2,1]},parseError:function(t,i){if(!i.recoverable){var n=new Error(t);throw n.hash=i,n}this.trace(t)},parse:function(t){var i=this,n=[0],s=[],e=[null],r=[],h=this.table,o="",l=0,c=0,a=r.slice.call(arguments,1),y=Object.create(this.lexer),u={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(u.yy[p]=this.yy[p]);y.setInput(t,u.yy),u.yy.lexer=y,u.yy.parser=this,void 0===y.yylloc&&(y.yylloc={});var f=y.yylloc;r.push(f);var g=y.options&&y.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,m,d,k,x,b,v,w,I,S={};;){if(m=n[n.length-1],this.defaultActions[m]?d=this.defaultActions[m]:(null==_&&(I=void 0,"number"!=typeof(I=s.pop()||y.lex()||1)&&(I instanceof Array&&(I=(s=I).pop()),I=i.symbols_[I]||I),_=I),d=h[m]&&h[m][_]),void 0===d||!d.length||!d[0]){var E="";for(x in w=[],h[m])this.terminals_[x]&&x>2&&w.push("'"+this.terminals_[x]+"'");E=y.showPosition?"Parse error on line "+(l+1)+":\n"+y.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==_?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(E,{text:y.match,token:this.terminals_[_]||_,line:y.yylineno,loc:f,expected:w})}if(d[0]instanceof Array&&d.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+_);switch(d[0]){case 1:n.push(_),e.push(y.yytext),r.push(y.yylloc),n.push(d[1]),_=null,c=y.yyleng,o=y.yytext,l=y.yylineno,f=y.yylloc;break;case 2:if(b=this.productions_[d[1]][1],S.$=e[e.length-b],S._$={first_line:r[r.length-(b||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(b||1)].first_column,last_column:r[r.length-1].last_column},g&&(S._$.range=[r[r.length-(b||1)].range[0],r[r.length-1].range[1]]),void 0!==(k=this.performAction.apply(S,[o,c,l,u.yy,d[1],e,r].concat(a))))return k;b&&(n=n.slice(0,-1*b*2),e=e.slice(0,-1*b),r=r.slice(0,-1*b)),n.push(this.productions_[d[1]][0]),e.push(S.$),r.push(S._$),v=h[n[n.length-2]][n[n.length-1]],n.push(v);break;case 3:return!0}}return!0}},s={EOF:1,parseError:function(t,i){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,i)},setInput:function(t,i){return this.yy=i||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var i=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-i),this.offset-=i;var s=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===s.length?this.yylloc.first_column:0)+s[s.length-n.length].length-n[0].length:this.yylloc.first_column-i},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-i]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),i=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+i+"^"},test_match:function(t,i){var n,s,e;if(this.options.backtrack_lexer&&(e={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(e.yylloc.range=this.yylloc.range.slice(0))),(s=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=s.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:s?s[s.length-1].length-s[s.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,i,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var r in e)this[r]=e[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,i,n,s;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var e=this._currentRules(),r=0;ri[0].length)){if(i=n,s=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,e[r])))return t;if(this._backtrack){i=!1;continue}return!1}if(!this.options.flex)break}return i?!1!==(t=this.test_match(i,e[s]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,i,n,s){switch(n){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};function e(){this.yy={}}return n.lexer=s,e.prototype=n,n.Parser=e,new e}());e.parser=e;const r=!1;let h=r;const o={parser:e,db:{clear:()=>{h=r},setInfo:t=>{h=t},getInfo:()=>h},renderer:{draw:(t,i,n)=>{s.l.debug("rendering info diagram\n"+t);const e=(0,s.A)(i);(0,s.i)(e,100,400,!0);e.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${n}`)}}}}}]); \ No newline at end of file diff --git a/assets/js/2924e06f.4213d1b7.js b/assets/js/2924e06f.4213d1b7.js new file mode 100644 index 0000000000..701e6ebc9c --- /dev/null +++ b/assets/js/2924e06f.4213d1b7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[453],{83435:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>l,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var r=t(74848),s=t(28453);const o={},c="VARIABLES",i={id:"about/references/VARIABLES",title:"VARIABLES",description:"VARIABLES",source:"@site/docs/about/references/VARIABLES.md",sourceDirName:"about/references",slug:"/about/references/VARIABLES",permalink:"/ecalc/docs/about/references/VARIABLES",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/VARIABLES.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"UPSTREAM_PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/UPSTREAM_PRESSURE_CONTROL"},next:{title:"VENTING_EMITTERS",permalink:"/ecalc/docs/about/references/VENTING_EMITTERS"}},a={},u=[{value:"Description",id:"description",level:2}];function d(e){const n={a:"a",h1:"h1",h2:"h2",p:"p",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"variables",children:"VARIABLES"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/VARIABLES",children:"VARIABLES"})}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsx)(n.p,{children:"This keyword is used to define variables which can be used throughout the YAML file via the use of expressions.\nThese variables can be based on time or can be independent."}),"\n",(0,r.jsxs)(n.p,{children:["Information about defining and using variables can be seen ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/variables",children:"here"}),"."]})]})}function l(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>i});var r=t(96540);const s={},o=r.createContext(s);function c(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2925.f06f0a4f.js b/assets/js/2925.f06f0a4f.js new file mode 100644 index 0000000000..19edac201b --- /dev/null +++ b/assets/js/2925.f06f0a4f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2925],{32925:(t,i,e)=>{e.d(i,{diagram:()=>F});var s=e(99702),n=e(8337),a=e(26312),h=(e(74353),e(16750),e(42838),function(){var t=function(t,i,e,s){for(e=e||{},s=t.length;s--;e[t[s]]=i);return e},i=[1,10,12,14,16,18,19,21,23],e=[2,6],s=[1,3],n=[1,5],a=[1,6],h=[1,7],o=[1,5,10,12,14,16,18,19,21,23,34,35,36],r=[1,25],l=[1,26],c=[1,28],g=[1,29],u=[1,30],x=[1,31],d=[1,32],p=[1,33],f=[1,34],y=[1,35],m=[1,36],b=[1,37],A=[1,43],w=[1,42],S=[1,47],C=[1,50],k=[1,10,12,14,16,18,19,21,23,34,35,36],_=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],T=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],R=[1,64],D={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:function(t,i,e,s,n,a,h){var o=a.length-1;switch(n){case 5:s.setOrientation(a[o]);break;case 9:s.setDiagramTitle(a[o].text.trim());break;case 12:s.setLineData({text:"",type:"text"},a[o]);break;case 13:s.setLineData(a[o-1],a[o]);break;case 14:s.setBarData({text:"",type:"text"},a[o]);break;case 15:s.setBarData(a[o-1],a[o]);break;case 16:this.$=a[o].trim(),s.setAccTitle(this.$);break;case 17:case 18:this.$=a[o].trim(),s.setAccDescription(this.$);break;case 19:case 27:this.$=a[o-1];break;case 20:this.$=[Number(a[o-2]),...a[o]];break;case 21:this.$=[Number(a[o])];break;case 22:s.setXAxisTitle(a[o]);break;case 23:s.setXAxisTitle(a[o-1]);break;case 24:s.setXAxisTitle({type:"text",text:""});break;case 25:s.setXAxisBand(a[o]);break;case 26:s.setXAxisRangeData(Number(a[o-2]),Number(a[o]));break;case 28:this.$=[a[o-2],...a[o]];break;case 29:this.$=[a[o]];break;case 30:s.setYAxisTitle(a[o]);break;case 31:s.setYAxisTitle(a[o-1]);break;case 32:s.setYAxisTitle({type:"text",text:""});break;case 33:s.setYAxisRangeData(Number(a[o-2]),Number(a[o]));break;case 37:case 38:this.$={text:a[o],type:"text"};break;case 39:this.$={text:a[o],type:"markdown"};break;case 40:this.$=a[o];break;case 41:this.$=a[o-1]+""+a[o]}},table:[t(i,e,{3:1,4:2,7:4,5:s,34:n,35:a,36:h}),{1:[3]},t(i,e,{4:2,7:4,3:8,5:s,34:n,35:a,36:h}),t(i,e,{4:2,7:4,6:9,3:10,5:s,8:[1,11],34:n,35:a,36:h}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},t(o,[2,34]),t(o,[2,35]),t(o,[2,36]),{1:[2,1]},t(i,e,{4:2,7:4,3:21,5:s,34:n,35:a,36:h}),{1:[2,3]},t(o,[2,5]),t(i,[2,7],{4:22,34:n,35:a,36:h}),{11:23,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},{11:39,13:38,24:A,27:w,29:40,30:41,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},{11:45,15:44,27:S,33:46,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},{11:49,17:48,24:C,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},{11:52,17:51,24:C,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},{20:[1,53]},{22:[1,54]},t(k,[2,18]),{1:[2,2]},t(k,[2,8]),t(k,[2,9]),t(_,[2,37],{40:55,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b}),t(_,[2,38]),t(_,[2,39]),t(T,[2,40]),t(T,[2,42]),t(T,[2,43]),t(T,[2,44]),t(T,[2,45]),t(T,[2,46]),t(T,[2,47]),t(T,[2,48]),t(T,[2,49]),t(T,[2,50]),t(T,[2,51]),t(k,[2,10]),t(k,[2,22],{30:41,29:56,24:A,27:w}),t(k,[2,24]),t(k,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},t(k,[2,11]),t(k,[2,30],{33:60,27:S}),t(k,[2,32]),{31:[1,61]},t(k,[2,12]),{17:62,24:C},{25:63,27:R},t(k,[2,14]),{17:65,24:C},t(k,[2,16]),t(k,[2,17]),t(T,[2,41]),t(k,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},t(k,[2,31]),{27:[1,69]},t(k,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},t(k,[2,15]),t(k,[2,26]),t(k,[2,27]),{11:59,32:72,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},t(k,[2,33]),t(k,[2,19]),{25:73,27:R},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:function(t,i){if(!i.recoverable){var e=new Error(t);throw e.hash=i,e}this.trace(t)},parse:function(t){var i=this,e=[0],s=[],n=[null],a=[],h=this.table,o="",r=0,l=0,c=a.slice.call(arguments,1),g=Object.create(this.lexer),u={yy:{}};for(var x in this.yy)Object.prototype.hasOwnProperty.call(this.yy,x)&&(u.yy[x]=this.yy[x]);g.setInput(t,u.yy),u.yy.lexer=g,u.yy.parser=this,void 0===g.yylloc&&(g.yylloc={});var d=g.yylloc;a.push(d);var p=g.options&&g.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,y,m,b,A,w,S,C,k,_={};;){if(y=e[e.length-1],this.defaultActions[y]?m=this.defaultActions[y]:(null==f&&(k=void 0,"number"!=typeof(k=s.pop()||g.lex()||1)&&(k instanceof Array&&(k=(s=k).pop()),k=i.symbols_[k]||k),f=k),m=h[y]&&h[y][f]),void 0===m||!m.length||!m[0]){var T="";for(A in C=[],h[y])this.terminals_[A]&&A>2&&C.push("'"+this.terminals_[A]+"'");T=g.showPosition?"Parse error on line "+(r+1)+":\n"+g.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(r+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(T,{text:g.match,token:this.terminals_[f]||f,line:g.yylineno,loc:d,expected:C})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+y+", token: "+f);switch(m[0]){case 1:e.push(f),n.push(g.yytext),a.push(g.yylloc),e.push(m[1]),f=null,l=g.yyleng,o=g.yytext,r=g.yylineno,d=g.yylloc;break;case 2:if(w=this.productions_[m[1]][1],_.$=n[n.length-w],_._$={first_line:a[a.length-(w||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(w||1)].first_column,last_column:a[a.length-1].last_column},p&&(_._$.range=[a[a.length-(w||1)].range[0],a[a.length-1].range[1]]),void 0!==(b=this.performAction.apply(_,[o,l,r,u.yy,m[1],n,a].concat(c))))return b;w&&(e=e.slice(0,-1*w*2),n=n.slice(0,-1*w),a=a.slice(0,-1*w)),e.push(this.productions_[m[1]][0]),n.push(_.$),a.push(_._$),S=h[e[e.length-2]][e[e.length-1]],e.push(S);break;case 3:return!0}}return!0}},L={EOF:1,parseError:function(t,i){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,i)},setInput:function(t,i){return this.yy=i||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var i=t.length,e=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-i),this.offset-=i;var s=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),e.length-1&&(this.yylineno-=e.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:e?(e.length===s.length?this.yylloc.first_column:0)+s[s.length-e.length].length-e[0].length:this.yylloc.first_column-i},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-i]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),i=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+i+"^"},test_match:function(t,i){var e,s,n;if(this.options.backtrack_lexer&&(n={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(n.yylloc.range=this.yylloc.range.slice(0))),(s=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=s.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:s?s[s.length-1].length-s[s.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],e=this.performAction.call(this,this.yy,this,i,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),e)return e;if(this._backtrack){for(var a in n)this[a]=n[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,i,e,s;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),a=0;ai[0].length)){if(i=e,s=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(e,n[a])))return t;if(this._backtrack){i=!1;continue}return!1}if(!this.options.flex)break}return i?!1!==(t=this.test_match(i,n[s]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,i,e,s){switch(e){case 0:case 1:case 5:case 43:break;case 2:case 3:return this.popState(),34;case 4:return 34;case 6:return 10;case 7:return this.pushState("acc_title"),19;case 8:return this.popState(),"acc_title_value";case 9:return this.pushState("acc_descr"),21;case 10:return this.popState(),"acc_descr_value";case 11:this.pushState("acc_descr_multiline");break;case 12:case 25:case 27:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 5;case 15:return 8;case 16:return this.pushState("axis_data"),"X_AXIS";case 17:return this.pushState("axis_data"),"Y_AXIS";case 18:return this.pushState("axis_band_data"),24;case 19:return 31;case 20:return this.pushState("data"),16;case 21:return this.pushState("data"),18;case 22:return this.pushState("data_inner"),24;case 23:return 27;case 24:return this.popState(),26;case 26:this.pushState("string");break;case 28:return"STR";case 29:return 24;case 30:return 26;case 31:return 43;case 32:return"COLON";case 33:return 44;case 34:return 28;case 35:return 45;case 36:return 46;case 37:return 48;case 38:return 50;case 39:return 47;case 40:return 41;case 41:return 49;case 42:return 42;case 44:return 35;case 45:return 36}},rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:(\r?\n))/i,/^(?:(\r?\n))/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:\{)/i,/^(?:[^\}]*)/i,/^(?:xychart-beta\b)/i,/^(?:(?:vertical|horizontal))/i,/^(?:x-axis\b)/i,/^(?:y-axis\b)/i,/^(?:\[)/i,/^(?:-->)/i,/^(?:line\b)/i,/^(?:bar\b)/i,/^(?:\[)/i,/^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i,/^(?:\])/i,/^(?:(?:`\) \{ this\.pushState\(md_string\); \}\n\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n\(\?:`))/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s+)/i,/^(?:;)/i,/^(?:$)/i],conditions:{data_inner:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,23,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},data:{rules:[0,1,3,4,5,6,7,9,11,14,15,16,17,20,21,22,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_band_data:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_data:{rules:[0,1,2,4,5,6,7,9,11,14,15,16,17,18,19,20,21,23,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[],inclusive:!1},md_string:{rules:[],inclusive:!1},string:{rules:[27,28],inclusive:!1},INITIAL:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0}}};function P(){this.yy={}}return D.lexer=L,P.prototype=D,D.Parser=P,new P}());h.parser=h;const o=h;function r(t){return"bar"===t.type}function l(t){return"band"===t.type}function c(t){return"linear"===t.type}class g{constructor(t){this.parentGroup=t}getMaxDimension(t,i){if(!this.parentGroup)return{width:t.reduce(((t,i)=>Math.max(i.length,t)),0)*i,height:i};const e={width:0,height:0},s=this.parentGroup.append("g").attr("visibility","hidden").attr("font-size",i);for(const a of t){const t=(0,n.c)(s,1,a),h=t?t.width:a.length*i,o=t?t.height:i;e.width=Math.max(e.width,h),e.height=Math.max(e.height,o)}return s.remove(),e}}class u{constructor(t,i,e,s){this.axisConfig=t,this.title=i,this.textDimensionCalculator=e,this.axisThemeConfig=s,this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left",this.showTitle=!1,this.showLabel=!1,this.showTick=!1,this.showAxisLine=!1,this.outerPadding=0,this.titleTextHeight=0,this.labelTextHeight=0,this.range=[0,10],this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left"}setRange(t){this.range=t,"left"===this.axisPosition||"right"===this.axisPosition?this.boundingRect.height=t[1]-t[0]:this.boundingRect.width=t[1]-t[0],this.recalculateScale()}getRange(){return[this.range[0]+this.outerPadding,this.range[1]-this.outerPadding]}setAxisPosition(t){this.axisPosition=t,this.setRange(this.range)}getTickDistance(){const t=this.getRange();return Math.abs(t[0]-t[1])/this.getTickValues().length}getAxisOuterPadding(){return this.outerPadding}getLabelDimension(){return this.textDimensionCalculator.getMaxDimension(this.getTickValues().map((t=>t.toString())),this.axisConfig.labelFontSize)}recalculateOuterPaddingToDrawBar(){.7*this.getTickDistance()>2*this.outerPadding&&(this.outerPadding=Math.floor(.7*this.getTickDistance()/2)),this.recalculateScale()}calculateSpaceIfDrawnHorizontally(t){let i=t.height;if(this.axisConfig.showAxisLine&&i>this.axisConfig.axisLineWidth&&(i-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){const e=this.getLabelDimension(),s=.2*t.width;this.outerPadding=Math.min(e.width/2,s);const n=e.height+2*this.axisConfig.labelPadding;this.labelTextHeight=e.height,n<=i&&(i-=n,this.showLabel=!0)}if(this.axisConfig.showTick&&i>=this.axisConfig.tickLength&&(this.showTick=!0,i-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){const t=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),e=t.height+2*this.axisConfig.titlePadding;this.titleTextHeight=t.height,e<=i&&(i-=e,this.showTitle=!0)}this.boundingRect.width=t.width,this.boundingRect.height=t.height-i}calculateSpaceIfDrawnVertical(t){let i=t.width;if(this.axisConfig.showAxisLine&&i>this.axisConfig.axisLineWidth&&(i-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){const e=this.getLabelDimension(),s=.2*t.height;this.outerPadding=Math.min(e.height/2,s);const n=e.width+2*this.axisConfig.labelPadding;n<=i&&(i-=n,this.showLabel=!0)}if(this.axisConfig.showTick&&i>=this.axisConfig.tickLength&&(this.showTick=!0,i-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){const t=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),e=t.height+2*this.axisConfig.titlePadding;this.titleTextHeight=t.height,e<=i&&(i-=e,this.showTitle=!0)}this.boundingRect.width=t.width-i,this.boundingRect.height=t.height}calculateSpace(t){return"left"===this.axisPosition||"right"===this.axisPosition?this.calculateSpaceIfDrawnVertical(t):this.calculateSpaceIfDrawnHorizontally(t),this.recalculateScale(),{width:this.boundingRect.width,height:this.boundingRect.height}}setBoundingBoxXY(t){this.boundingRect.x=t.x,this.boundingRect.y=t.y}getDrawableElementsForLeftAxis(){const t=[];if(this.showAxisLine){const i=this.boundingRect.x+this.boundingRect.width-this.axisConfig.axisLineWidth/2;t.push({type:"path",groupTexts:["left-axis","axisl-line"],data:[{path:`M ${i},${this.boundingRect.y} L ${i},${this.boundingRect.y+this.boundingRect.height} `,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&t.push({type:"text",groupTexts:["left-axis","label"],data:this.getTickValues().map((t=>({text:t.toString(),x:this.boundingRect.x+this.boundingRect.width-(this.showLabel?this.axisConfig.labelPadding:0)-(this.showTick?this.axisConfig.tickLength:0)-(this.showAxisLine?this.axisConfig.axisLineWidth:0),y:this.getScaleValue(t),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"middle",horizontalPos:"right"})))}),this.showTick){const i=this.boundingRect.x+this.boundingRect.width-(this.showAxisLine?this.axisConfig.axisLineWidth:0);t.push({type:"path",groupTexts:["left-axis","ticks"],data:this.getTickValues().map((t=>({path:`M ${i},${this.getScaleValue(t)} L ${i-this.axisConfig.tickLength},${this.getScaleValue(t)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth})))})}return this.showTitle&&t.push({type:"text",groupTexts:["left-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.axisConfig.titlePadding,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:270,verticalPos:"top",horizontalPos:"center"}]}),t}getDrawableElementsForBottomAxis(){const t=[];if(this.showAxisLine){const i=this.boundingRect.y+this.axisConfig.axisLineWidth/2;t.push({type:"path",groupTexts:["bottom-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${i} L ${this.boundingRect.x+this.boundingRect.width},${i}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&t.push({type:"text",groupTexts:["bottom-axis","label"],data:this.getTickValues().map((t=>({text:t.toString(),x:this.getScaleValue(t),y:this.boundingRect.y+this.axisConfig.labelPadding+(this.showTick?this.axisConfig.tickLength:0)+(this.showAxisLine?this.axisConfig.axisLineWidth:0),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"})))}),this.showTick){const i=this.boundingRect.y+(this.showAxisLine?this.axisConfig.axisLineWidth:0);t.push({type:"path",groupTexts:["bottom-axis","ticks"],data:this.getTickValues().map((t=>({path:`M ${this.getScaleValue(t)},${i} L ${this.getScaleValue(t)},${i+this.axisConfig.tickLength}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth})))})}return this.showTitle&&t.push({type:"text",groupTexts:["bottom-axis","title"],data:[{text:this.title,x:this.range[0]+(this.range[1]-this.range[0])/2,y:this.boundingRect.y+this.boundingRect.height-this.axisConfig.titlePadding-this.titleTextHeight,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),t}getDrawableElementsForTopAxis(){const t=[];if(this.showAxisLine){const i=this.boundingRect.y+this.boundingRect.height-this.axisConfig.axisLineWidth/2;t.push({type:"path",groupTexts:["top-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${i} L ${this.boundingRect.x+this.boundingRect.width},${i}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&t.push({type:"text",groupTexts:["top-axis","label"],data:this.getTickValues().map((t=>({text:t.toString(),x:this.getScaleValue(t),y:this.boundingRect.y+(this.showTitle?this.titleTextHeight+2*this.axisConfig.titlePadding:0)+this.axisConfig.labelPadding,fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"})))}),this.showTick){const i=this.boundingRect.y;t.push({type:"path",groupTexts:["top-axis","ticks"],data:this.getTickValues().map((t=>({path:`M ${this.getScaleValue(t)},${i+this.boundingRect.height-(this.showAxisLine?this.axisConfig.axisLineWidth:0)} L ${this.getScaleValue(t)},${i+this.boundingRect.height-this.axisConfig.tickLength-(this.showAxisLine?this.axisConfig.axisLineWidth:0)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth})))})}return this.showTitle&&t.push({type:"text",groupTexts:["top-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.axisConfig.titlePadding,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),t}getDrawableElements(){if("left"===this.axisPosition)return this.getDrawableElementsForLeftAxis();if("right"===this.axisPosition)throw Error("Drawing of right axis is not implemented");return"bottom"===this.axisPosition?this.getDrawableElementsForBottomAxis():"top"===this.axisPosition?this.getDrawableElementsForTopAxis():[]}}class x extends u{constructor(t,i,e,s,n){super(t,s,n,i),this.categories=e,this.scale=(0,a.WH)().domain(this.categories).range(this.getRange())}setRange(t){super.setRange(t)}recalculateScale(){this.scale=(0,a.WH)().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(.5),s.l.trace("BandAxis axis final categories, range: ",this.categories,this.getRange())}getTickValues(){return this.categories}getScaleValue(t){return this.scale(t)||this.getRange()[0]}}class d extends u{constructor(t,i,e,s,n){super(t,s,n,i),this.domain=e,this.scale=(0,a.m4Y)().domain(this.domain).range(this.getRange())}getTickValues(){return this.scale.ticks()}recalculateScale(){const t=[...this.domain];"left"===this.axisPosition&&t.reverse(),this.scale=(0,a.m4Y)().domain(t).range(this.getRange())}getScaleValue(t){return this.scale(t)}}function p(t,i,e,s){const n=new g(s);return l(t)?new x(i,e,t.categories,t.title,n):new d(i,e,[t.min,t.max],t.title,n)}class f{constructor(t,i,e,s){this.textDimensionCalculator=t,this.chartConfig=i,this.chartData=e,this.chartThemeConfig=s,this.boundingRect={x:0,y:0,width:0,height:0},this.showChartTitle=!1}setBoundingBoxXY(t){this.boundingRect.x=t.x,this.boundingRect.y=t.y}calculateSpace(t){const i=this.textDimensionCalculator.getMaxDimension([this.chartData.title],this.chartConfig.titleFontSize),e=Math.max(i.width,t.width),s=i.height+2*this.chartConfig.titlePadding;return i.width<=e&&i.height<=s&&this.chartConfig.showTitle&&this.chartData.title&&(this.boundingRect.width=e,this.boundingRect.height=s,this.showChartTitle=!0),{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){const t=[];return this.showChartTitle&&t.push({groupTexts:["chart-title"],type:"text",data:[{fontSize:this.chartConfig.titleFontSize,text:this.chartData.title,verticalPos:"middle",horizontalPos:"center",x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.chartThemeConfig.titleColor,rotation:0}]}),t}}function y(t,i,e,s){const n=new g(s);return new f(n,t,i,e)}class m{constructor(t,i,e,s,n){this.plotData=t,this.xAxis=i,this.yAxis=e,this.orientation=s,this.plotIndex=n}getDrawableElement(){const t=this.plotData.data.map((t=>[this.xAxis.getScaleValue(t[0]),this.yAxis.getScaleValue(t[1])]));let i;return i="horizontal"===this.orientation?(0,a.n8j)().y((t=>t[0])).x((t=>t[1]))(t):(0,a.n8j)().x((t=>t[0])).y((t=>t[1]))(t),i?[{groupTexts:["plot",`line-plot-${this.plotIndex}`],type:"path",data:[{path:i,strokeFill:this.plotData.strokeFill,strokeWidth:this.plotData.strokeWidth}]}]:[]}}class b{constructor(t,i,e,s,n,a){this.barData=t,this.boundingRect=i,this.xAxis=e,this.yAxis=s,this.orientation=n,this.plotIndex=a}getDrawableElement(){const t=this.barData.data.map((t=>[this.xAxis.getScaleValue(t[0]),this.yAxis.getScaleValue(t[1])])),i=.95*Math.min(2*this.xAxis.getAxisOuterPadding(),this.xAxis.getTickDistance()),e=i/2;return"horizontal"===this.orientation?[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:t.map((t=>({x:this.boundingRect.x,y:t[0]-e,height:i,width:t[1]-this.boundingRect.x,fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill})))}]:[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:t.map((t=>({x:t[0]-e,y:t[1],width:i,height:this.boundingRect.y+this.boundingRect.height-t[1],fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill})))}]}}class A{constructor(t,i,e){this.chartConfig=t,this.chartData=i,this.chartThemeConfig=e,this.boundingRect={x:0,y:0,width:0,height:0}}setAxes(t,i){this.xAxis=t,this.yAxis=i}setBoundingBoxXY(t){this.boundingRect.x=t.x,this.boundingRect.y=t.y}calculateSpace(t){return this.boundingRect.width=t.width,this.boundingRect.height=t.height,{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){if(!this.xAxis||!this.yAxis)throw Error("Axes must be passed to render Plots");const t=[];for(const[i,e]of this.chartData.plots.entries())switch(e.type){case"line":{const s=new m(e,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,i);t.push(...s.getDrawableElement())}break;case"bar":{const s=new b(e,this.boundingRect,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,i);t.push(...s.getDrawableElement())}}return t}}function w(t,i,e){return new A(t,i,e)}class S{constructor(t,i,e,s){this.chartConfig=t,this.chartData=i,this.componentStore={title:y(t,i,e,s),plot:w(t,i,e),xAxis:p(i.xAxis,t.xAxis,{titleColor:e.xAxisTitleColor,labelColor:e.xAxisLabelColor,tickColor:e.xAxisTickColor,axisLineColor:e.xAxisLineColor},s),yAxis:p(i.yAxis,t.yAxis,{titleColor:e.yAxisTitleColor,labelColor:e.yAxisLabelColor,tickColor:e.yAxisTickColor,axisLineColor:e.yAxisLineColor},s)}}calculateVerticalSpace(){let t=this.chartConfig.width,i=this.chartConfig.height,e=0,s=0,n=Math.floor(t*this.chartConfig.plotReservedSpacePercent/100),a=Math.floor(i*this.chartConfig.plotReservedSpacePercent/100),h=this.componentStore.plot.calculateSpace({width:n,height:a});t-=h.width,i-=h.height,h=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:i}),s=h.height,i-=h.height,this.componentStore.xAxis.setAxisPosition("bottom"),h=this.componentStore.xAxis.calculateSpace({width:t,height:i}),i-=h.height,this.componentStore.yAxis.setAxisPosition("left"),h=this.componentStore.yAxis.calculateSpace({width:t,height:i}),e=h.width,t-=h.width,t>0&&(n+=t,t=0),i>0&&(a+=i,i=0),this.componentStore.plot.calculateSpace({width:n,height:a}),this.componentStore.plot.setBoundingBoxXY({x:e,y:s}),this.componentStore.xAxis.setRange([e,e+n]),this.componentStore.xAxis.setBoundingBoxXY({x:e,y:s+a}),this.componentStore.yAxis.setRange([s,s+a]),this.componentStore.yAxis.setBoundingBoxXY({x:0,y:s}),this.chartData.plots.some((t=>r(t)))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateHorizontalSpace(){let t=this.chartConfig.width,i=this.chartConfig.height,e=0,s=0,n=0,a=Math.floor(t*this.chartConfig.plotReservedSpacePercent/100),h=Math.floor(i*this.chartConfig.plotReservedSpacePercent/100),o=this.componentStore.plot.calculateSpace({width:a,height:h});t-=o.width,i-=o.height,o=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:i}),e=o.height,i-=o.height,this.componentStore.xAxis.setAxisPosition("left"),o=this.componentStore.xAxis.calculateSpace({width:t,height:i}),t-=o.width,s=o.width,this.componentStore.yAxis.setAxisPosition("top"),o=this.componentStore.yAxis.calculateSpace({width:t,height:i}),i-=o.height,n=e+o.height,t>0&&(a+=t,t=0),i>0&&(h+=i,i=0),this.componentStore.plot.calculateSpace({width:a,height:h}),this.componentStore.plot.setBoundingBoxXY({x:s,y:n}),this.componentStore.yAxis.setRange([s,s+a]),this.componentStore.yAxis.setBoundingBoxXY({x:s,y:e}),this.componentStore.xAxis.setRange([n,n+h]),this.componentStore.xAxis.setBoundingBoxXY({x:0,y:n}),this.chartData.plots.some((t=>r(t)))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateSpace(){"horizontal"===this.chartConfig.chartOrientation?this.calculateHorizontalSpace():this.calculateVerticalSpace()}getDrawableElement(){this.calculateSpace();const t=[];this.componentStore.plot.setAxes(this.componentStore.xAxis,this.componentStore.yAxis);for(const i of Object.values(this.componentStore))t.push(...i.getDrawableElements());return t}}class C{static build(t,i,e,s){return new S(t,i,e,s).getDrawableElement()}}let k,_=0,T=I(),R=v(),D=M(),L=R.plotColorPalette.split(",").map((t=>t.trim())),P=!1,E=!1;function v(){const t=(0,s.E)(),i=(0,s.F)();return(0,s.C)(t.xyChart,i.themeVariables.xyChart)}function I(){const t=(0,s.F)();return(0,s.C)(s.B.xyChart,t.xyChart)}function M(){return{yAxis:{type:"linear",title:"",min:1/0,max:-1/0},xAxis:{type:"band",title:"",categories:[]},title:"",plots:[]}}function $(t){const i=(0,s.F)();return(0,s.d)(t.trim(),i)}function z(t,i){D.xAxis={type:"linear",title:D.xAxis.title,min:t,max:i},P=!0}function B(t){let i=[];if(0===t.length)return i;if(!P){const i=c(D.xAxis)?D.xAxis.min:1/0,e=c(D.xAxis)?D.xAxis.max:-1/0;z(Math.min(i,1),Math.max(e,t.length))}if(E||function(t){const i=Math.min(...t),e=Math.max(...t),s=c(D.yAxis)?D.yAxis.min:1/0,n=c(D.yAxis)?D.yAxis.max:-1/0;D.yAxis={type:"linear",title:D.yAxis.title,min:Math.min(s,i),max:Math.max(n,e)}}(t),l(D.xAxis)&&(i=D.xAxis.categories.map(((i,e)=>[i,t[e]]))),c(D.xAxis)){const e=D.xAxis.min,s=D.xAxis.max,n=(s-e+1)/t.length,a=[];for(let t=e;t<=s;t+=n)a.push(`${t}`);i=a.map(((i,e)=>[i,t[e]]))}return i}function W(t){return L[0===t?0:t%L.length]}const F={parser:o,db:{getDrawableElem:function(){if(0===D.plots.length)throw Error("No Plot to render, please provide a plot with some data");return D.title=(0,s.t)(),C.build(T,D,R,k)},clear:function(){(0,s.v)(),_=0,T=I(),D={yAxis:{type:"linear",title:"",min:1/0,max:-1/0},xAxis:{type:"band",title:"",categories:[]},title:"",plots:[]},R=v(),L=R.plotColorPalette.split(",").map((t=>t.trim())),P=!1,E=!1},setAccTitle:s.s,getAccTitle:s.g,setDiagramTitle:s.q,getDiagramTitle:s.t,getAccDescription:s.a,setAccDescription:s.b,setOrientation:function(t){T.chartOrientation="horizontal"===t?"horizontal":"vertical"},setXAxisTitle:function(t){D.xAxis.title=$(t.text)},setXAxisRangeData:z,setXAxisBand:function(t){D.xAxis={type:"band",title:D.xAxis.title,categories:t.map((t=>$(t.text)))},P=!0},setYAxisTitle:function(t){D.yAxis.title=$(t.text)},setYAxisRangeData:function(t,i){D.yAxis={type:"linear",title:D.yAxis.title,min:t,max:i},E=!0},setLineData:function(t,i){const e=B(i);D.plots.push({type:"line",strokeFill:W(_),strokeWidth:2,data:e}),_++},setBarData:function(t,i){const e=B(i);D.plots.push({type:"bar",fill:W(_),data:e}),_++},setTmpSVGG:function(t){k=t},getChartThemeConfig:function(){return R},getChartConfig:function(){return T}},renderer:{draw:(t,i,e,n)=>{const a=n.db,h=a.getChartThemeConfig(),o=a.getChartConfig();function r(t){return`translate(${t.x}, ${t.y}) rotate(${t.rotation||0})`}s.l.debug("Rendering xychart chart\n"+t);const l=(0,s.A)(i),c=l.append("g").attr("class","main"),g=c.append("rect").attr("width",o.width).attr("height",o.height).attr("class","background");(0,s.i)(l,o.height,o.width,!0),l.attr("viewBox",`0 0 ${o.width} ${o.height}`),g.attr("fill",h.backgroundColor),a.setTmpSVGG(l.append("g").attr("class","mermaid-tmp-group"));const u=a.getDrawableElem(),x={};function d(t){let i=c,e="";for(const[s]of t.entries()){let n=c;s>0&&x[e]&&(n=x[e]),e+=t[s],i=x[e],i||(i=x[e]=n.append("g").attr("class",t[s]))}return i}for(const s of u){if(0===s.data.length)continue;const t=d(s.groupTexts);switch(s.type){case"rect":t.selectAll("rect").data(s.data).enter().append("rect").attr("x",(t=>t.x)).attr("y",(t=>t.y)).attr("width",(t=>t.width)).attr("height",(t=>t.height)).attr("fill",(t=>t.fill)).attr("stroke",(t=>t.strokeFill)).attr("stroke-width",(t=>t.strokeWidth));break;case"text":t.selectAll("text").data(s.data).enter().append("text").attr("x",0).attr("y",0).attr("fill",(t=>t.fill)).attr("font-size",(t=>t.fontSize)).attr("dominant-baseline",(t=>"top"===t.verticalPos?"text-before-edge":"middle")).attr("text-anchor",(t=>{return"left"===(i=t.horizontalPos)?"start":"right"===i?"end":"middle";var i})).attr("transform",(t=>r(t))).text((t=>t.text));break;case"path":t.selectAll("path").data(s.data).enter().append("path").attr("d",(t=>t.path)).attr("fill",(t=>t.fill?t.fill:"none")).attr("stroke",(t=>t.strokeFill)).attr("stroke-width",(t=>t.strokeWidth))}}}}}}}]); \ No newline at end of file diff --git a/assets/js/2983.93d6a43d.js b/assets/js/2983.93d6a43d.js new file mode 100644 index 0000000000..d3cea7e724 --- /dev/null +++ b/assets/js/2983.93d6a43d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2983],{14075:(e,t,n)=>{n.d(t,{M:()=>d});var r=n(69592),i=n(50053),a=n(74722);n(73046);function d(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:o(e),edges:l(e)};return r.A(e.graph())||(t.value=i.A(e.graph())),t}function o(e){return a.A(e.nodes(),(function(t){var n=e.node(t),i=e.parent(t),a={v:t};return r.A(n)||(a.value=n),r.A(i)||(a.parent=i),a}))}function l(e){return a.A(e.edges(),(function(t){var n=e.edge(t),i={v:t.v,w:t.w};return r.A(t.name)||(i.name=t.name),r.A(n)||(i.value=n),i}))}},50053:(e,t,n)=>{n.d(t,{A:()=>i});var r=n(91641);const i=function(e){return(0,r.A)(e,4)}},35364:(e,t,n)=>{n.d(t,{r:()=>E});var r=n(21176),i=n(14075),a=n(98055),d=n(99702),o=n(697),l=n(8337),s=n(26312);let c={},h={},g={};const f=(e,t)=>(d.l.trace("In isDescendant",t," ",e," = ",h[t].includes(e)),!!h[t].includes(e)),u=(e,t,n,r)=>{d.l.warn("Copying children of ",e,"root",r,"data",t.node(e),r);const i=t.children(e)||[];e!==r&&i.push(e),d.l.warn("Copying (nodes) clusterId",e,"nodes",i),i.forEach((i=>{if(t.children(i).length>0)u(i,t,n,r);else{const a=t.node(i);d.l.info("cp ",i," to ",r," with parent ",e),n.setNode(i,a),r!==t.parent(i)&&(d.l.warn("Setting parent",i,t.parent(i)),n.setParent(i,t.parent(i))),e!==r&&i!==e?(d.l.debug("Setting parent",i,e),n.setParent(i,e)):(d.l.info("In copy ",e,"root",r,"data",t.node(e),r),d.l.debug("Not Setting parent for node=",i,"cluster!==rootId",e!==r,"node!==clusterId",i!==e));const o=t.edges(i);d.l.debug("Copying Edges",o),o.forEach((i=>{d.l.info("Edge",i);const a=t.edge(i.v,i.w,i.name);d.l.info("Edge data",a,r);try{((e,t)=>(d.l.info("Descendants of ",t," is ",h[t]),d.l.info("Edge is ",e),e.v!==t&&e.w!==t&&(h[t]?h[t].includes(e.v)||f(e.v,t)||f(e.w,t)||h[t].includes(e.w):(d.l.debug("Tilt, ",t,",not in descendants"),!1))))(i,r)?(d.l.info("Copying as ",i.v,i.w,a,i.name),n.setEdge(i.v,i.w,a,i.name),d.l.info("newGraph edges ",n.edges(),n.edge(n.edges()[0]))):d.l.info("Skipping copy of edge ",i.v,"--\x3e",i.w," rootId: ",r," clusterId:",e)}catch(o){d.l.error(o)}}))}d.l.debug("Removing node",i),t.removeNode(i)}))},w=(e,t)=>{const n=t.children(e);let r=[...n];for(const i of n)g[i]=e,r=[...r,...w(i,t)];return r},p=(e,t)=>{d.l.trace("Searching",e);const n=t.children(e);if(d.l.trace("Searching children of id ",e,n),n.length<1)return d.l.trace("This is a valid node",e),e;for(const r of n){const n=p(r,t);if(n)return d.l.trace("Found replacement for",e," => ",n),n}},v=e=>c[e]&&c[e].externalConnections&&c[e]?c[e].id:e,y=(e,t)=>{if(d.l.warn("extractor - ",t,i.M(e),e.children("D")),t>10)return void d.l.error("Bailing out");let n=e.nodes(),r=!1;for(const i of n){const t=e.children(i);r=r||t.length>0}if(r){d.l.debug("Nodes = ",n,t);for(const r of n)if(d.l.debug("Extracting node",r,c,c[r]&&!c[r].externalConnections,!e.parent(r),e.node(r),e.children("D")," Depth ",t),c[r])if(!c[r].externalConnections&&e.children(r)&&e.children(r).length>0){d.l.warn("Cluster without external connections, without a parent and with children",r,t);let n="TB"===e.graph().rankdir?"LR":"TB";c[r]&&c[r].clusterData&&c[r].clusterData.dir&&(n=c[r].clusterData.dir,d.l.warn("Fixing dir",c[r].clusterData.dir,n));const a=new o.T({multigraph:!0,compound:!0}).setGraph({rankdir:n,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));d.l.warn("Old graph before copy",i.M(e)),u(r,e,a,r),e.setNode(r,{clusterNode:!0,id:r,clusterData:c[r].clusterData,labelText:c[r].labelText,graph:a}),d.l.warn("New graph after copy node: (",r,")",i.M(a)),d.l.debug("Old graph after copy",i.M(e))}else d.l.warn("Cluster ** ",r," **not meeting the criteria !externalConnections:",!c[r].externalConnections," no parent: ",!e.parent(r)," children ",e.children(r)&&e.children(r).length>0,e.children("D"),t),d.l.debug(c);else d.l.debug("Not a cluster",r,t);n=e.nodes(),d.l.warn("New list of nodes",n);for(const r of n){const n=e.node(r);d.l.warn(" Now next level",r,n),n.clusterNode&&y(n.graph,t+1)}}else d.l.debug("Done, no node has children",e.nodes())},x=(e,t)=>{if(0===t.length)return[];let n=Object.assign(t);return t.forEach((t=>{const r=e.children(t),i=x(e,r);n=[...n,...i]})),n},m={rect:(e,t)=>{d.l.info("Creating subgraph rect for ",t.id,t);const n=(0,d.c)(),r=e.insert("g").attr("class","cluster"+(t.class?" "+t.class:"")).attr("id",t.id),i=r.insert("rect",":first-child"),o=(0,d.m)(n.flowchart.htmlLabels),c=r.insert("g").attr("class","cluster-label"),h="markdown"===t.labelType?(0,l.a)(c,t.labelText,{style:t.labelStyle,useHtmlLabels:o}):c.node().appendChild((0,a.c)(t.labelText,t.labelStyle,void 0,!0));let g=h.getBBox();if((0,d.m)(n.flowchart.htmlLabels)){const e=h.children[0],t=(0,s.Ltv)(h);g=e.getBoundingClientRect(),t.attr("width",g.width),t.attr("height",g.height)}const f=0*t.padding,u=f/2,w=t.width<=g.width+f?g.width+f:t.width;t.width<=g.width+f?t.diff=(g.width-t.width)/2-t.padding/2:t.diff=-t.padding/2,d.l.trace("Data ",t,JSON.stringify(t)),i.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-w/2).attr("y",t.y-t.height/2-u).attr("width",w).attr("height",t.height+f);const{subGraphTitleTopMargin:p}=(0,a.g)(n);o?c.attr("transform",`translate(${t.x-g.width/2}, ${t.y-t.height/2+p})`):c.attr("transform",`translate(${t.x}, ${t.y-t.height/2+p})`);const v=i.node().getBBox();return t.width=v.width,t.height=v.height,t.intersect=function(e){return(0,a.i)(t,e)},r},roundedWithTitle:(e,t)=>{const n=(0,d.c)(),r=e.insert("g").attr("class",t.classes).attr("id",t.id),i=r.insert("rect",":first-child"),o=r.insert("g").attr("class","cluster-label"),l=r.append("rect"),c=o.node().appendChild((0,a.c)(t.labelText,t.labelStyle,void 0,!0));let h=c.getBBox();if((0,d.m)(n.flowchart.htmlLabels)){const e=c.children[0],t=(0,s.Ltv)(c);h=e.getBoundingClientRect(),t.attr("width",h.width),t.attr("height",h.height)}h=c.getBBox();const g=0*t.padding,f=g/2,u=t.width<=h.width+t.padding?h.width+t.padding:t.width;t.width<=h.width+t.padding?t.diff=(h.width+0*t.padding-t.width)/2:t.diff=-t.padding/2,i.attr("class","outer").attr("x",t.x-u/2-f).attr("y",t.y-t.height/2-f).attr("width",u+g).attr("height",t.height+g),l.attr("class","inner").attr("x",t.x-u/2-f).attr("y",t.y-t.height/2-f+h.height-1).attr("width",u+g).attr("height",t.height+g-h.height-3);const{subGraphTitleTopMargin:w}=(0,a.g)(n);o.attr("transform",`translate(${t.x-h.width/2}, ${t.y-t.height/2-t.padding/3+((0,d.m)(n.flowchart.htmlLabels)?5:3)+w})`);const p=i.node().getBBox();return t.height=p.height,t.intersect=function(e){return(0,a.i)(t,e)},r},noteGroup:(e,t)=>{const n=e.insert("g").attr("class","note-cluster").attr("id",t.id),r=n.insert("rect",":first-child"),i=0*t.padding,d=i/2;r.attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-t.width/2-d).attr("y",t.y-t.height/2-d).attr("width",t.width+i).attr("height",t.height+i).attr("fill","none");const o=r.node().getBBox();return t.width=o.width,t.height=o.height,t.intersect=function(e){return(0,a.i)(t,e)},n},divider:(e,t)=>{const n=e.insert("g").attr("class",t.classes).attr("id",t.id),r=n.insert("rect",":first-child"),i=0*t.padding,d=i/2;r.attr("class","divider").attr("x",t.x-t.width/2-d).attr("y",t.y-t.height/2).attr("width",t.width+i).attr("height",t.height+i);const o=r.node().getBBox();return t.width=o.width,t.height=o.height,t.diff=-t.padding/2,t.intersect=function(e){return(0,a.i)(t,e)},n}};let b={};const C=async(e,t,n,o,l,s)=>{d.l.info("Graph in recursive render: XXX",i.M(t),l);const h=t.graph().rankdir;d.l.trace("Dir in recursive render - dir:",h);const g=e.insert("g").attr("class","root");t.nodes()?d.l.info("Recursive render XXX",t.nodes()):d.l.info("No nodes found for",t),t.edges().length>0&&d.l.trace("Recursive edges",t.edge(t.edges()[0]));const f=g.insert("g").attr("class","clusters"),u=g.insert("g").attr("class","edgePaths"),w=g.insert("g").attr("class","edgeLabels"),v=g.insert("g").attr("class","nodes");await Promise.all(t.nodes().map((async function(e){const r=t.node(e);if(void 0!==l){const n=JSON.parse(JSON.stringify(l.clusterData));d.l.info("Setting data for cluster XXX (",e,") ",n,l),t.setNode(l.id,n),t.parent(e)||(d.l.trace("Setting parent",e,l.id),t.setParent(e,l.id,n))}if(d.l.info("(Insert) Node XXX"+e+": "+JSON.stringify(t.node(e))),r&&r.clusterNode){d.l.info("Cluster identified",e,r.width,t.node(e));const i=await C(v,r.graph,n,o,t.node(e),s),l=i.elem;(0,a.u)(r,l),r.diff=i.diff||0,d.l.info("Node bounds (abc123)",e,r,r.width,r.x,r.y),(0,a.s)(l,r),d.l.warn("Recursive render complete ",l,r)}else t.children(e).length>0?(d.l.info("Cluster - the non recursive path XXX",e,r.id,r,t),d.l.info(p(r.id,t)),c[r.id]={id:p(r.id,t),node:r}):(d.l.info("Node - the non recursive path",e,r.id,r),await(0,a.e)(v,t.node(e),h))}))),t.edges().forEach((function(e){const n=t.edge(e.v,e.w,e.name);d.l.info("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(e)),d.l.info("Edge "+e.v+" -> "+e.w+": ",e," ",JSON.stringify(t.edge(e))),d.l.info("Fix",c,"ids:",e.v,e.w,"Translating: ",c[e.v],c[e.w]),(0,a.f)(w,n)})),t.edges().forEach((function(e){d.l.info("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(e))})),d.l.info("#############################################"),d.l.info("### Layout ###"),d.l.info("#############################################"),d.l.info(t),(0,r.Zp)(t),d.l.info("Graph after layout:",i.M(t));let y=0;const{subGraphTitleTotalMargin:E}=(0,a.g)(s);return(e=>x(e,e.children()))(t).forEach((function(e){const n=t.node(e);d.l.info("Position "+e+": "+JSON.stringify(t.node(e))),d.l.info("Position "+e+": ("+n.x,","+n.y,") width: ",n.width," height: ",n.height),n&&n.clusterNode?(n.y+=E,(0,a.p)(n)):t.children(e).length>0?(n.height+=E,((e,t)=>{d.l.trace("Inserting cluster");const n=t.shape||"rect";b[t.id]=m[n](e,t)})(f,n),c[n.id].node=n):(n.y+=E/2,(0,a.p)(n))})),t.edges().forEach((function(e){const r=t.edge(e);d.l.info("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(r),r),r.points.forEach((e=>e.y+=E/2));const i=(0,a.h)(u,e,r,c,n,t,o);(0,a.j)(r,i)})),t.nodes().forEach((function(e){const n=t.node(e);d.l.info(e,n.type,n.diff),"group"===n.type&&(y=n.diff)})),{elem:g,diff:y}},E=async(e,t,n,r,o)=>{(0,a.a)(e,n,r,o),(0,a.b)(),(0,a.d)(),b={},h={},g={},c={},d.l.warn("Graph at first:",JSON.stringify(i.M(t))),((e,t)=>{if(!e||t>10)d.l.debug("Opting out, no graph ");else{d.l.debug("Opting in, graph "),e.nodes().forEach((function(t){e.children(t).length>0&&(d.l.warn("Cluster identified",t," Replacement id in edges: ",p(t,e)),h[t]=w(t,e),c[t]={id:p(t,e),clusterData:e.node(t)})})),e.nodes().forEach((function(t){const n=e.children(t),r=e.edges();n.length>0?(d.l.debug("Cluster identified",t,h),r.forEach((e=>{e.v!==t&&e.w!==t&&f(e.v,t)^f(e.w,t)&&(d.l.warn("Edge: ",e," leaves cluster ",t),d.l.warn("Descendants of XXX ",t,": ",h[t]),c[t].externalConnections=!0)}))):d.l.debug("Not a cluster ",t,h)}));for(let t of Object.keys(c)){const n=c[t].id,r=e.parent(n);r!==t&&c[r]&&!c[r].externalConnections&&(c[t].id=r)}e.edges().forEach((function(t){const n=e.edge(t);d.l.warn("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t)),d.l.warn("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(e.edge(t)));let r=t.v,i=t.w;if(d.l.warn("Fix XXX",c,"ids:",t.v,t.w,"Translating: ",c[t.v]," --- ",c[t.w]),c[t.v]&&c[t.w]&&c[t.v]===c[t.w]){d.l.warn("Fixing and trixing link to self - removing XXX",t.v,t.w,t.name),d.l.warn("Fixing and trixing - removing XXX",t.v,t.w,t.name),r=v(t.v),i=v(t.w),e.removeEdge(t.v,t.w,t.name);const a=t.w+"---"+t.v;e.setNode(a,{domId:a,id:a,labelStyle:"",labelText:n.label,padding:0,shape:"labelRect",style:""});const o=structuredClone(n),l=structuredClone(n);o.label="",o.arrowTypeEnd="none",l.label="",o.fromCluster=t.v,l.toCluster=t.v,e.setEdge(r,a,o,t.name+"-cyclic-special"),e.setEdge(a,i,l,t.name+"-cyclic-special")}else if(c[t.v]||c[t.w]){if(d.l.warn("Fixing and trixing - removing XXX",t.v,t.w,t.name),r=v(t.v),i=v(t.w),e.removeEdge(t.v,t.w,t.name),r!==t.v){const i=e.parent(r);c[i].externalConnections=!0,n.fromCluster=t.v}if(i!==t.w){const r=e.parent(i);c[r].externalConnections=!0,n.toCluster=t.w}d.l.warn("Fix Replacing with XXX",r,i,t.name),e.setEdge(r,i,n,t.name)}})),d.l.warn("Adjusted Graph",i.M(e)),y(e,0),d.l.trace(c)}})(t),d.l.warn("Graph after:",JSON.stringify(i.M(t)));const l=(0,d.c)();await C(e,t,r,o,void 0,l)}}}]); \ No newline at end of file diff --git a/assets/js/2b2be347.21292636.js b/assets/js/2b2be347.21292636.js new file mode 100644 index 0000000000..26ea9db71a --- /dev/null +++ b/assets/js/2b2be347.21292636.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[368],{28440:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>t,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var i=s(74848),l=s(28453);const r={slug:"v7-0-release",title:"v7.0",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:-3},o="eCalc v7.0",a={id:"changelog/v7-0",title:"v7.0",description:"Features",source:"@site/docs/changelog/v7-0.md",sourceDirName:"changelog",slug:"/changelog/v7-0-release",permalink:"/ecalc/docs/changelog/v7-0-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v7-0.md",tags:[{inline:!0,label:"release",permalink:"/ecalc/docs/tags/release"},{inline:!0,label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:-3,frontMatter:{slug:"v7-0-release",title:"v7.0",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:-3},sidebar:"changelog",previous:{title:"v7.1",permalink:"/ecalc/docs/changelog/v7-1-release"},next:{title:"Changelog",permalink:"/ecalc/docs/changelog/"}},t={},d=[{value:"Features",id:"features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"CLI",id:"cli",level:2}];function c(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,l.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"ecalc-v70",children:"eCalc v7.0"}),"\n",(0,i.jsx)(n.h2,{id:"features",children:(0,i.jsx)(n.em,{children:"Features"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Add VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES compressor model. See ",(0,i.jsx)(n.code,{children:"Variable speed compressor train model with multiple streams and pressures"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Add GERG model to FLUID model as EOS_MODEL. Now available GERG_PR and GERG_SRK."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Add UNITS: EFFICIENCY to compressor charts and pump charts. Plus additional input unit support."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Add support for both water and H2O in fluid composition."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Add POWER_ADJUSTMENT_CONSTANT for all applicable models to adjust power/energy usage with a constant factor."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Add water as allowed ",(0,i.jsx)(n.code,{children:"FLUID model"})," component."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Improve models documentation"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Deprecation: ",(0,i.jsx)(n.a,{href:"../about/references/CONDITION",children:"CONDITION"})," is now a single expression instead of list."]}),"\n",(0,i.jsxs)(n.p,{children:["If you previously had a list it is recommended to use the ",(0,i.jsx)(n.a,{href:"../about/references/CONDITIONS",children:"CONDITIONS"})," keyword instead. This will become a requirement in a future release."]}),"\n",(0,i.jsxs)(n.p,{children:["Alternatively you could merge the conditions to a single expression. This is what is done automatically when using the ",(0,i.jsx)(n.a,{href:"../about/references/CONDITIONS",children:"CONDITIONS"})," keyword."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:" # This is new\n CONDITION: expression1 {*} expression2 \n # This is old\n CONDITION: \n # This is old\n - expression1 \n # This is old\n - expression2 \n"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"fixes",children:(0,i.jsx)(n.em,{children:"Fixes"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Handle date columns year as year and not timestamps"}),"\n",(0,i.jsx)(n.li,{children:"Handle suppressed ecalc errors and division by zero"}),"\n",(0,i.jsx)(n.li,{children:"Handle timeseries with one entry"}),"\n",(0,i.jsx)(n.li,{children:"Handle poorly formatted csv data with tabs, multiple spaces and mixed float/integers."}),"\n",(0,i.jsx)(n.li,{children:"Handle 0 regularity"}),"\n",(0,i.jsx)(n.li,{children:"Handle emission intensity when only one timestep"}),"\n",(0,i.jsx)(n.li,{children:"Changed emission intensity to NaN when hydrocarbon export is zero"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"cli",children:"CLI"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"Feature"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Major revision of CLI for future development."}),"\n",(0,i.jsx)(n.li,{children:"Add Flow diagram support"}),"\n",(0,i.jsx)(n.li,{children:"Improve logging, warnings and error messages. DEBUG should now give a lot of information."}),"\n",(0,i.jsx)(n.li,{children:"Add support for list in 'CONDITION' keyword"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"Fix"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Fix issue when using dates in ELECTRICITY2FUEL"}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>a});var i=s(96540);const l={},r=i.createContext(l);function o(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2b47973a.9071322a.js b/assets/js/2b47973a.9071322a.js new file mode 100644 index 0000000000..abfb335a54 --- /dev/null +++ b/assets/js/2b47973a.9071322a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3760],{52519:e=>{e.exports=JSON.parse('{"tag":{"label":"eCalc","permalink":"/ecalc/docs/tags/e-calc","allTagsPath":"/ecalc/docs/tags","count":30,"items":[{"id":"changelog/separator","title":"---","description":"","permalink":"/ecalc/docs/changelog/separator"},{"id":"changelog/next","title":"Next","description":"New Features","permalink":"/ecalc/docs/changelog/latest"},{"id":"changelog/v7-0","title":"v7.0","description":"Features","permalink":"/ecalc/docs/changelog/v7-0-release"},{"id":"changelog/v7-1","title":"v7.1","description":"Features","permalink":"/ecalc/docs/changelog/v7-1-release"},{"id":"changelog/v7-2","title":"v7.2","description":"Features","permalink":"/ecalc/docs/changelog/v7-2-release"},{"id":"changelog/v7-3","title":"v7.3","description":"Features","permalink":"/ecalc/docs/changelog/v7-3-release"},{"id":"changelog/v7-4","title":"v7.4","description":"Features","permalink":"/ecalc/docs/changelog/v7-4-release"},{"id":"changelog/v7-5","title":"v7.5","description":"Features","permalink":"/ecalc/docs/changelog/v7-5-release"},{"id":"changelog/v7-6","title":"v7.6","description":"Breaking changes","permalink":"/ecalc/docs/changelog/v7-6-release"},{"id":"changelog/v8-0","title":"v8.0","description":"eCalc\u2122 v8 is finally here! This new release brings a lot of nice new features and better usability. Here are some","permalink":"/ecalc/docs/changelog/v8.0-release"},{"id":"changelog/v8-1","title":"v8.1","description":"eCalc\u2122 v8.1 is a smaller upgrade from v8.0. Here are some of the highlights:","permalink":"/ecalc/docs/changelog/v8.1-release"},{"id":"changelog/v8-10","title":"v8.10","description":"New Features","permalink":"/ecalc/docs/changelog/v8.10-release"},{"id":"changelog/v8-11","title":"v8.11","description":"New Features","permalink":"/ecalc/docs/changelog/v8.11-release"},{"id":"changelog/v8-12","title":"v8.12","description":"New Features","permalink":"/ecalc/docs/changelog/v8.12-release"},{"id":"changelog/v8-13","title":"v8.13","description":"New Features","permalink":"/ecalc/docs/changelog/v8.13-release"},{"id":"changelog/v8-14","title":"v8.14","description":"New Features","permalink":"/ecalc/docs/changelog/v8.14-release"},{"id":"changelog/v8-15","title":"v8.15","description":"Fixes","permalink":"/ecalc/docs/changelog/v8.15-release"},{"id":"changelog/v8-16","title":"v8.16","description":"Breaking Changes","permalink":"/ecalc/docs/changelog/v8.16-release"},{"id":"changelog/v8-17","title":"v8.17","description":"Bug Fixes","permalink":"/ecalc/docs/changelog/v8.17-release"},{"id":"changelog/v8-18","title":"v8.18","description":"Features","permalink":"/ecalc/docs/changelog/v8.18-release"},{"id":"changelog/v8-19","title":"v8.19","description":"Features","permalink":"/ecalc/docs/changelog/v8.19-release"},{"id":"changelog/v8-2","title":"v8.2","description":"eCalc\u2122 v8.2 is a smaller upgrade from v8.1. Here are some of the highlights. See","permalink":"/ecalc/docs/changelog/v8.2-release"},{"id":"changelog/v8-20","title":"v8.20","description":"Bug Fixes","permalink":"/ecalc/docs/changelog/v8.20-release"},{"id":"changelog/v8-21","title":"v8.21 (Latest)","description":"Breaking Changes","permalink":"/ecalc/docs/changelog/v8.21-release"},{"id":"changelog/v8-3","title":"v8.3","description":"eCalc\u2122 v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See","permalink":"/ecalc/docs/changelog/v8.3-release"},{"id":"changelog/v8-4","title":"v8.4","description":"New Features","permalink":"/ecalc/docs/changelog/v8.4-release"},{"id":"changelog/v8-5","title":"v8.5","description":"New Features","permalink":"/ecalc/docs/changelog/v8.5-release"},{"id":"changelog/v8-6","title":"v8.6","description":"New Features","permalink":"/ecalc/docs/changelog/v8.6-release"},{"id":"changelog/v8-7","title":"v8.7","description":"New Features","permalink":"/ecalc/docs/changelog/v8.7-release"},{"id":"changelog/v8-8","title":"v8.8","description":"New Features","permalink":"/ecalc/docs/changelog/v8.8-release"}],"unlisted":false}}')}}]); \ No newline at end of file diff --git a/assets/js/2b572af2.2a5b2378.js b/assets/js/2b572af2.2a5b2378.js new file mode 100644 index 0000000000..0ab4b1e28c --- /dev/null +++ b/assets/js/2b572af2.2a5b2378.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9628],{65035:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var r=t(74848),s=t(28453);const o={},c="TURBINE_LOADS",i={id:"about/references/TURBINE_LOADS",title:"TURBINE_LOADS",description:"Description",source:"@site/docs/about/references/TURBINE_LOADS.md",sourceDirName:"about/references",slug:"/about/references/TURBINE_LOADS",permalink:"/ecalc/docs/about/references/TURBINE_LOADS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/TURBINE_LOADS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"TURBINE_EFFICIENCIES",permalink:"/ecalc/docs/about/references/TURBINE_EFFICIENCIES"},next:{title:"TURBINE_MODEL",permalink:"/ecalc/docs/about/references/TURBINE_MODEL"}},a={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"turbine_loads",children:"TURBINE_LOADS"}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"TURBINE_LOADS"})," is a required to be specified under the ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/TURBINE_MODEL",children:"TURBINE_MODEL"})," keyword."]}),"\n",(0,r.jsxs)(n.p,{children:["This ",(0,r.jsx)(n.strong,{children:"must"})," be specified in MW (Mega-Watts) and ",(0,r.jsx)(n.strong,{children:"must"})," have equal length to the corresponding ",(0,r.jsx)(n.code,{children:"TURBINE_EFFICIENCY"})," values."]}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: TURBINE\n ...\n TURBINE_LOADS: \n"})}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_train_turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # MJ/Sm3\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]\n POWER_ADJUSTMENT_CONSTANT: 10\n"})})]})}function u(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>i});var r=t(96540);const s={},o=r.createContext(s);function c(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2ce3b5da.a3a2dcc3.js b/assets/js/2ce3b5da.a3a2dcc3.js new file mode 100644 index 0000000000..f51e958f3e --- /dev/null +++ b/assets/js/2ce3b5da.a3a2dcc3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6064],{18778:(e,s,o)=>{o.r(s),o.d(s,{assets:()=>a,contentTitle:()=>i,default:()=>c,frontMatter:()=>n,metadata:()=>l,toc:()=>d});var r=o(74848),t=o(28453);const n={title:"Variable speed compressor train",sidebar_position:3},i=void 0,l={id:"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",title:"Variable speed compressor train",description:"In this model all compressors in the train have the same speed, and the model is build on a forward model of",source:"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model.md",sourceDirName:"about/modelling/setup/models/compressor_modelling/compressor_models_types",slug:"/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Variable speed compressor train",sidebar_position:3},sidebar:"about",previous:{title:"Simplified variable speed compressor train",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model"},next:{title:"Variable speed compressor train model with multiple streams and pressures",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"}},a={},d=[];function m(e){const s={a:"a",code:"code",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(s.p,{children:["In this model all compressors in the train have the same speed, and the model is build on a forward model of\nthe fluid properties/state where speed is a parameter. Then the speed is iterated until the discharge pressure of the\noutlet is equal to the requested discharge pressure. If the resulting discharge pressure is not low enough to meet the\nrequested discharge pressure by iterating on speed only, an attempt is made to find a solution using the defined\n",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/",children:"Fixed speed pressure control"})," with the speed fixed at the minimum speed."]}),"\n",(0,r.jsxs)(s.p,{children:["This model only supports ",(0,r.jsx)(s.code,{children:"User defined variable speed compressor chart"}),"."]}),"\n",(0,r.jsxs)(s.p,{children:["In addition, a ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/fluid_model",children:"FLUID MODEL"})," must be specified."]}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Control mechanisms"})}),"\n",(0,r.jsx)(s.p,{children:"The variable speed compressor train model has a set of automatic control mechanisms. The figure below shows several operational points (rate/head) outside a variable speed compressor chart."}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{src:o(51238).A+"",width:"712",height:"516"})}),"\n",(0,r.jsx)(s.p,{children:"The points will be treated as follows:"}),"\n",(0,r.jsxs)(s.ol,{children:["\n",(0,r.jsx)(s.li,{children:"Points with head above the maximum head on the maximum speed curve will be out of capacity."}),"\n",(0,r.jsx)(s.li,{children:"Points with head below the minimum head on the minimum speed curve will be out of capacity."}),"\n",(0,r.jsx)(s.li,{children:"Points below the stone wall will be out of capacity."}),"\n",(0,r.jsx)(s.li,{children:"Points above the maximum speed curve will be out of capacity."}),"\n",(0,r.jsx)(s.li,{children:"Points where the flow is below the minimum flow at the minimum speed curve will be moved to the minimum speed curve by increasing the rate using the ASV of the compressor."}),"\n",(0,r.jsx)(s.li,{children:"Points where the flow is below the surge line of the compressor will be moved to the surge line of the compressor by increasing the rate using the ASV of the compressor."}),"\n"]}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Format"})}),"\n",(0,r.jsxs)(s.p,{children:["The model is defined under the main keyword ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/MODELS",children:"MODELS"})," in the format"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: \n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: \n COMPRESSOR_CHART: \n CONTROL_MARGIN: \n PRESSURE_DROP_AHEAD_OF_STAGE: \n CONTROL_MARGIN_UNIT: \n - INLET_TEMPERATURE: \n COMPRESSOR_CHART: \n CONTROL_MARGIN: \n PRESSURE_DROP_AHEAD_OF_STAGE: \n CONTROL_MARGIN_UNIT: \n - ... and so forth for each stage in the train\n POWER_ADJUSTMENT_CONSTANT: \n MAXIMUM_POWER: \n CALCULATE_MAX_RATE: \n PRESSURE_CONTROL: \n"})})]})}function c(e={}){const{wrapper:s}={...(0,t.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(m,{...e})}):m(e)}},51238:(e,s,o)=>{o.d(s,{A:()=>r});const r=o.p+"assets/images/control_mechanisms_variable_speed_compressor_chart-74501f10294f5dd339dba1a305bbe3f6.png"},28453:(e,s,o)=>{o.d(s,{R:()=>i,x:()=>l});var r=o(96540);const t={},n=r.createContext(t);function i(e){const s=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),r.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2cedaf2f.7266b378.js b/assets/js/2cedaf2f.7266b378.js new file mode 100644 index 0000000000..0a5beba12e --- /dev/null +++ b/assets/js/2cedaf2f.7266b378.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9152],{61472:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>d,contentTitle:()=>s,default:()=>h,frontMatter:()=>t,metadata:()=>a,toc:()=>l});var o=n(74848),r=n(28453);const t={title:"Generic Workflow",sidebar_position:1,description:"Generic workflow"},s=void 0,a={id:"about/modelling/workflow/generic_workflow",title:"Generic Workflow",description:"Generic workflow",source:"@site/docs/about/modelling/workflow/generic_workflow.md",sourceDirName:"about/modelling/workflow",slug:"/about/modelling/workflow/generic_workflow",permalink:"/ecalc/docs/about/modelling/workflow/generic_workflow",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/workflow/generic_workflow.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Generic Workflow",sidebar_position:1,description:"Generic workflow"},sidebar:"about",previous:{title:"eCalc\u2122 Workflow",permalink:"/ecalc/docs/about/modelling/workflow/"},next:{title:"Examples",permalink:"/ecalc/docs/about/modelling/examples/"}},d={},l=[{value:"Simplified Process Flow Diagram",id:"simplified-process-flow-diagram",level:2},{value:"Workflow",id:"workflow",level:2},{value:"Workflow Explanation",id:"workflow-explanation",level:2},{value:"Required Subsurface Profiles",id:"required-subsurface-profiles",level:3},{value:"Facility Information",id:"facility-information",level:3},{value:"Constant Power Loads",id:"constant-power-loads",level:4},{value:"Additional Information",id:"additional-information",level:4},{value:"Consumer Information",id:"consumer-information",level:3},{value:"Generator Set",id:"generator-set",level:4},{value:"Compressor Curves",id:"compressor-curves",level:4},{value:"Validation",id:"validation",level:3},{value:"Calibration",id:"calibration",level:3}];function c(e){const i={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",mermaid:"mermaid",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(i.h2,{id:"simplified-process-flow-diagram",children:"Simplified Process Flow Diagram"}),"\n",(0,o.jsxs)(i.p,{children:["The image below illustrates a simplified process flow diagram for a generic offshore oil and gas facility. Each unit included in this diagram can be modelled with the use of eCalc.\nThe ",(0,o.jsx)(i.a,{href:"#workflow",children:"workflow"})," below will outline what is necessary to obtain for each step. In addition, there are some accompanied ",(0,o.jsx)(i.a,{href:"#workflow-explanation",children:"explanations"})," to the workflow."]}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{src:n(53192).A+"",width:"5863",height:"4444"})}),"\n",(0,o.jsx)(i.h2,{id:"workflow",children:"Workflow"}),"\n",(0,o.jsx)(i.mermaid,{value:' flowchart TD;\n subgraph ide1 ["Required Subsurface Profiles [All in Sm3/d]"]\n ide1_A[Oil Produced];\n ide1_B[Gas Produced];\n ide1_C[Water Produced];\n ide1_D[Gas Injected];\n ide1_E[Water Injected];\n end\n \n \n subgraph ide2 ["Facility Information Needed"]\n\n ide2_A[[Power Generation System]] --\x3e ide2_A_1([Gas Turbines]);\n ide2_A_1 --\x3e ide2_A_2(["`Number of Gas Turbines `"]);\n ide2_A_2 --\x3e ide2_A_3(["`Maximum capacity per generator and spinning reserve`"]);\n \n ide2_B[["Water Injection System"]] --\x3e ide2_B_1(["`Suction Pressure`"]);\n ide2_B_1 --\x3e ide2_B_2(["`Discharge Pressure`"]);\n ide2_B_2 --\x3e ide2_B_3(["`Injected Water Density`"]);\n ide2_B_3 --\x3e ide2_B_4(["`Maximum capacity per pump`"]);\n \n ide2_D[[Gas Compression System]] --\x3e ide2_D_1(["`Export Compressor`"]);\n ide2_D --\x3e ide2_D_1_1(["`Re-Injection Compressor`"]);\n ide2_D_1 --\x3e ide2_D_2(["`Suction Pressure per compressor`"]);\n ide2_D_1_1 --\x3eide2_D_2\n ide2_D_2 --\x3e ide2_D_3(["`Discharge Pressure per compressor`"]);\n ide2_D_3 --\x3e ide2_D_4(["`Suction Temperature per compressor`"]);\n ide2_C[["Typical Constant Power Loads"]] --\x3e ide2_C_1(["`Base Load`"]);\n ide2_C_1 --\x3e ide2_C_2(["`Oil Export Pumps`"]);\n ide2_C_2 --\x3e ide2_C_3(["`Gas Recompressor`"])\n \n ide2_E[[Additional Emissions]] --\x3e ide2_E_1([Flaring]);\n ide2_E_1 --\x3e ide2_E_2(["`Electrical Submersible Pumps (ESP)`"])\n ide2_E_2 --\x3e ide2_E_3(["`Drilling rigs/Diesel motors`"])\n ide2_E_3 --\x3e ide2_E_4(["`Fugitives/Venting`"])\n ide2_E_4 --\x3e ide2_E_5(["`Diesel motor`"])\n \n end\n\n subgraph ide3 ["Consumer Data Needed"]\n\n ide3_A[[Generator Set]]--\x3e ide3_A_1(["`Fuel vs Power relationship. Lines relating fuel and power`"]);\n ide3_A_1 --\x3e ide3_A_2(["`Generating switching. At max capacity of the generator, impose another generate on the existing`"]);\n \n ide3_B[[Compressors]] --\x3e ide3_B_1(["`Variable/single speed drive`"]);\n ide3_B_1 --\x3e ide3_B_2{Available charts?};\n ide3_B_2 -. yes .-> ide3_B_4(["`Use suppliers compressor chart (head vs flow, efficiency vs flow)`"]);\n ide3_B_2 -. no .-> ide3_B_3(["`Use generic chart functionality`"]);\n \n ide3_C[[Water Injectors]] --\x3e ide3_C_1(["`Variable/single speed drive`"]);\n ide3_C_1 --\x3e ide3_C_2{Available charts?};\n ide3_C_2 -. yes .-> ide3_C_4(["`Use suppliers pump chart (head vs flow, efficiency vs flow)`"]);\n ide3_C_2 -. no .-> ide3_C_3(["`Generate synthetic charts using expected head and flow ranges`"]);\n\n end\n\n subgraph ide4 ["Validation"]\n\n ide4_A{"Invalid data?"} \n\n ide4_A -. yes .-> ide4_A_1{"`Invalid Compressors?`"};\n ide4_A_1 -. yes .-> ide4_A_1_1(["`Either head or rate is too high`"]);\n ide4_A_1_1 --\x3e ide4_A_1_2(["`Plot operational points and adjust charts to fit historical data`"]);\n \n ide4_A -. yes .-> ide4_A_3{"`Invalid Pumps?`"};\n ide4_A_3 -. yes .-> ide4_A_3_1(["`Either head or rate is too high`"]);\n ide4_A_3_1 --\x3e ide4_A_3_2(["`Plot operational points and adjust charts to fit historical data`"]);\n \n ide4_A -. yes .-> ide4_A_4{"`Invalid Generator Set?`"};\n ide4_A_4 -. yes .-> ide4_A_4_1(["`Check maximum and minimum facility power consumption values are within the range of the specified generator set`"]);\n ide4_A_4_1 --\x3e ide4_A_4_2(["`Adjust generator set`"]);\n\n end\n\n subgraph ide5 ["Calibration"]\n\n ide5_A["`Calibration`"] --\x3e ide5_A_1(["`Compare measured power/fuel against eCalc power/fuel`"]) ;\n ide5_A_1 --\x3e ide5_A_2{"`Do they correlate`"}\n ide5_A_2 -. yes .-> ide5_A_3_1{"`Are all points valid?`"};\n ide5_A_3_1 -. yes .-> ide5_A_3_2(["`No further calibration needed`"])\n ide5_A_2 -. no .-> ide5_A_2_1(["`Consider using POWERLOSSFACTOR to adjust modelled to measured power`"])\n ide5_A_2_1 --\x3e ide5_A_3_1\n ide5_A_4_1(["`Plot operational points on the same figure as the performance chart`"]) --\x3e ide5_A_4_2(["`Alter the head vs flow curves (using fan law theory)`"])\n ide5_A_4_2 --\x3e ide5_A_1\n ide5_A_3_1 -. no .-> ide5_A_4_1\n end\n \n ide1 ~~~ ide2\n ide2 ~~~ ide3\n ide3 ~~~ ide4\n ide4 ~~~ ide5'}),"\n",(0,o.jsx)(i.h2,{id:"workflow-explanation",children:"Workflow Explanation"}),"\n",(0,o.jsx)(i.h3,{id:"required-subsurface-profiles",children:"Required Subsurface Profiles"}),"\n",(0,o.jsxs)(i.p,{children:["All subsurface profiles must be in calendar day rate Sm",(0,o.jsx)("sup",{children:"3"}),"/day and with its PE (",(0,o.jsx)(i.a,{href:"/ecalc/docs/about/references/REGULARITY",children:"REGULARITY"}),"). This data must be inputted as a ",(0,o.jsx)(i.code,{children:"TIME-SERIES"})," and references to how it is used in the facility or by a relevant consumer."]}),"\n",(0,o.jsx)(i.h3,{id:"facility-information",children:"Facility Information"}),"\n",(0,o.jsx)(i.h4,{id:"constant-power-loads",children:"Constant Power Loads"}),"\n",(0,o.jsx)(i.p,{children:"To simplify certain models, there could be some common assumptions made. Here are some examples:"}),"\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsxs)(i.li,{children:[(0,o.jsx)(i.strong,{children:"Base Load"}),': As eCalc\u2122 is not simulating the whole facility there are often energy consumers that are not modelled.\nTypically these energy consumers, related to things such as the energy consumption of living quarters and direct energy consumers dependent on there being production/injection, are often constant loads.\nThese smaller constant loads are then grouped into a larger term, called the "baseload". This is assumed to be constant and independent of the production rate of the facility.']}),"\n",(0,o.jsxs)(i.li,{children:[(0,o.jsx)(i.strong,{children:"Recompressor"}),": The main function of a recompressor is to compressor gas from separator pressures back up to the inlet separator pressure.\nIf this compressor is small and has little fluctuation in its load, or its processed gas rate and composition are unknown,\nthus, to simplify modelling, this recompressor could be modelled as a constant load. And at times, is included within the facility's base load"]}),"\n",(0,o.jsxs)(i.li,{children:[(0,o.jsx)(i.strong,{children:"Oil Export Pumps"}),": As eCalc\u2122 does not model oil pumps, these are often modelled as constant loads or modelled with a table (that relates oil rate to power consumption). The method in which they are modelled depends from facility to facility"]}),"\n"]}),"\n",(0,o.jsx)(i.h4,{id:"additional-information",children:"Additional Information"}),"\n",(0,o.jsx)(i.p,{children:"Any emissions that do not fall within the defined categories can still be considered for a given platform. For example, if there are drilling activities, an additional fuel type can be specified and related to the fuel consumption of a drilling rig."}),"\n",(0,o.jsx)(i.h3,{id:"consumer-information",children:"Consumer Information"}),"\n",(0,o.jsx)(i.h4,{id:"generator-set",children:"Generator Set"}),"\n",(0,o.jsx)(i.p,{children:'As eCalc\u2122 does not model gas turbine generators in depth, alternative methods are used.\nHere, fuel consumed and power generated is related in tabular form. These are typically linear relationships, and if more than one generator is used, "generator switching" is modelled by adding another generator curve on top of the existing.'}),"\n",(0,o.jsx)(i.p,{children:"This means that the facility will operate in the most efficient manner, i.e. meaning that if one generator will satisfy the power demand, only one generator will always be used."}),"\n",(0,o.jsx)(i.h4,{id:"compressor-curves",children:"Compressor Curves"}),"\n",(0,o.jsx)(i.p,{children:"eCalc\u2122 has generic compressor curve functionality which can be used when compressor curves are not available.\nHowever, if a manufactor compressor chart is available, it is always recommended to use this over a generic chart.\nThe generic compressor curves, use the assumption of constant polytropic efficiency, which is only a good assumption if the compressor is running near the design points."}),"\n",(0,o.jsx)(i.h3,{id:"validation",children:"Validation"}),"\n",(0,o.jsx)(i.p,{children:"Before running an eCalc\u2122 model, checking whether the eCalc\u2122 model is valid or not is an essential task. If a model is not valid, this means that input requirements set by the user are not being fulfilled, or that some consumers are giving unrealistic solutions."}),"\n",(0,o.jsx)(i.p,{children:"Validity can be checked by consumers, and there are often specific reasons why certain consumers are invalid. Therefore, it requires engineers not only to understand the validation of operation points (history data) from consumers, but also to know the specific limits of compressor or pump charts. The charts of consumers should fit their operation points. For example:"}),"\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsxs)(i.li,{children:[(0,o.jsx)(i.strong,{children:"Compressors and Pumps"}),": It is common that either too high a head or rate value is specified. This means that the invalid point is outside the limits of the performance chart. To determine the issue, it is recommended that the operational points (Head, and actual flowrate) are plotted together with the chart."]}),"\n",(0,o.jsxs)(i.li,{children:[(0,o.jsx)(i.strong,{children:"Generator Set"}),": The most common issue here is that the amount of power required is higher than the maximum value in the utilised genset."]}),"\n"]}),"\n",(0,o.jsx)(i.p,{children:"Before any chart adjustments are made, engineers should first verify who provide the input that the adjustments make sense."}),"\n",(0,o.jsx)(i.h3,{id:"calibration",children:"Calibration"}),"\n",(0,o.jsx)(i.p,{children:"The term calibration in eCalc\u2122 often refers to the history matching of the facility. Essentially, real operational data is compared against the eCalc\u2122 model results. If they do not correlate various changes are made to the model."}),"\n",(0,o.jsxs)(i.p,{children:["The main workflow with this would be to match every individual consumer, e.g. each pump and compressor. After that, it is the recommended to compare on the facility level (e.g. total power consumed or total fuel used), then various adjustments can be made.\nThese adjustments can mean changes to the base load, shifting the compressor curves, or simply by using a ",(0,o.jsx)(i.a,{href:"/ecalc/docs/about/references/POWERLOSSFACTOR",children:"POWERLOSSFACTOR"}),"."]})]})}function h(e={}){const{wrapper:i}={...(0,r.R)(),...e.components};return i?(0,o.jsx)(i,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},53192:(e,i,n)=>{n.d(i,{A:()=>o});const o=n.p+"assets/images/simple_facility_pfd-ad59578d69ea3d3267f646b9d8141822.jpg"},28453:(e,i,n)=>{n.d(i,{R:()=>s,x:()=>a});var o=n(96540);const r={},t=o.createContext(r);function s(e){const i=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),o.createElement(t.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2f04f592.50d46dcd.js b/assets/js/2f04f592.50d46dcd.js new file mode 100644 index 0000000000..c0c770ea5d --- /dev/null +++ b/assets/js/2f04f592.50d46dcd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5861],{14235:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>d,frontMatter:()=>r,metadata:()=>s,toc:()=>i});var n=a(74848),o=a(28453);const r={slug:"separator",title:"---",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:-1e3},c=void 0,s={id:"changelog/separator",title:"---",description:"",source:"@site/docs/changelog/separator.md",sourceDirName:"changelog",slug:"/changelog/separator",permalink:"/ecalc/docs/changelog/separator",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/separator.md",tags:[{inline:!0,label:"release",permalink:"/ecalc/docs/tags/release"},{inline:!0,label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:-1e3,frontMatter:{slug:"separator",title:"---",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:-1e3},sidebar:"changelog",previous:{title:"v8.21 (Latest)",permalink:"/ecalc/docs/changelog/v8.21-release"},next:{title:"v8.20",permalink:"/ecalc/docs/changelog/v8.20-release"}},l={},i=[];function u(e){return(0,n.jsx)(n.Fragment,{})}function d(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u()}},28453:(e,t,a)=>{a.d(t,{R:()=>c,x:()=>s});var n=a(96540);const o={},r=n.createContext(o);function c(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2fdfb4de.51347ac3.js b/assets/js/2fdfb4de.51347ac3.js new file mode 100644 index 0000000000..8d122f44e9 --- /dev/null +++ b/assets/js/2fdfb4de.51347ac3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8870],{35513:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>l,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var r=n(74848),i=n(28453);const o={title:"API Reference",sidebar_position:3},a="API Reference",c={id:"about/getting_started/api/index",title:"API Reference",description:"Generated API reference for the libecalc library can be found here.",source:"@site/docs/about/getting_started/api/index.md",sourceDirName:"about/getting_started/api",slug:"/about/getting_started/api/",permalink:"/ecalc/docs/about/getting_started/api/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/getting_started/api/index.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"API Reference",sidebar_position:3},sidebar:"about",previous:{title:"FAQ / Troubleshooting",permalink:"/ecalc/docs/about/getting_started/cli/faq"},next:{title:"Python Library",permalink:"/ecalc/docs/about/getting_started/library/"}},s={},d=[];function u(e){const t={a:"a",h1:"h1",p:"p",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"api-reference",children:"API Reference"}),"\n",(0,r.jsxs)(t.p,{children:["Generated API reference for the libecalc library can be found ",(0,r.jsx)(t.a,{href:"https://equinor.github.io/ecalc/docs/about/references/api/libecalc.html",children:"here"}),"."]})]})}function l(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>c});var r=n(96540);const i={},o=r.createContext(i);function a(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/303.39e1a2ee.js b/assets/js/303.39e1a2ee.js new file mode 100644 index 0000000000..eb04334137 --- /dev/null +++ b/assets/js/303.39e1a2ee.js @@ -0,0 +1,51571 @@ +exports.id = 303; +exports.ids = [303]; +exports.modules = { + +/***/ 87799: +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +(function webpackUniversalModuleDefinition(root, factory) { + if(true) + module.exports = factory(__webpack_require__(23143)); + else {} +})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_643__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_643__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __nested_webpack_require_643__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __nested_webpack_require_643__.c = installedModules; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __nested_webpack_require_643__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __nested_webpack_require_643__.d = function(exports, name, getter) { +/******/ if(!__nested_webpack_require_643__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __nested_webpack_require_643__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __nested_webpack_require_643__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __nested_webpack_require_643__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __nested_webpack_require_643__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __nested_webpack_require_643__(__nested_webpack_require_643__.s = 7); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE_0__; + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __nested_webpack_require_3185__) { + +"use strict"; + + +var FDLayoutConstants = __nested_webpack_require_3185__(0).FDLayoutConstants; + +function CoSEConstants() {} + +//CoSEConstants inherits static props in FDLayoutConstants +for (var prop in FDLayoutConstants) { + CoSEConstants[prop] = FDLayoutConstants[prop]; +} + +CoSEConstants.DEFAULT_USE_MULTI_LEVEL_SCALING = false; +CoSEConstants.DEFAULT_RADIAL_SEPARATION = FDLayoutConstants.DEFAULT_EDGE_LENGTH; +CoSEConstants.DEFAULT_COMPONENT_SEPERATION = 60; +CoSEConstants.TILE = true; +CoSEConstants.TILING_PADDING_VERTICAL = 10; +CoSEConstants.TILING_PADDING_HORIZONTAL = 10; +CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = false; // make this true when cose is used incrementally as a part of other non-incremental layout + +module.exports = CoSEConstants; + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __nested_webpack_require_4002__) { + +"use strict"; + + +var FDLayoutEdge = __nested_webpack_require_4002__(0).FDLayoutEdge; + +function CoSEEdge(source, target, vEdge) { + FDLayoutEdge.call(this, source, target, vEdge); +} + +CoSEEdge.prototype = Object.create(FDLayoutEdge.prototype); +for (var prop in FDLayoutEdge) { + CoSEEdge[prop] = FDLayoutEdge[prop]; +} + +module.exports = CoSEEdge; + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __nested_webpack_require_4409__) { + +"use strict"; + + +var LGraph = __nested_webpack_require_4409__(0).LGraph; + +function CoSEGraph(parent, graphMgr, vGraph) { + LGraph.call(this, parent, graphMgr, vGraph); +} + +CoSEGraph.prototype = Object.create(LGraph.prototype); +for (var prop in LGraph) { + CoSEGraph[prop] = LGraph[prop]; +} + +module.exports = CoSEGraph; + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __nested_webpack_require_4790__) { + +"use strict"; + + +var LGraphManager = __nested_webpack_require_4790__(0).LGraphManager; + +function CoSEGraphManager(layout) { + LGraphManager.call(this, layout); +} + +CoSEGraphManager.prototype = Object.create(LGraphManager.prototype); +for (var prop in LGraphManager) { + CoSEGraphManager[prop] = LGraphManager[prop]; +} + +module.exports = CoSEGraphManager; + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __nested_webpack_require_5205__) { + +"use strict"; + + +var FDLayoutNode = __nested_webpack_require_5205__(0).FDLayoutNode; +var IMath = __nested_webpack_require_5205__(0).IMath; + +function CoSENode(gm, loc, size, vNode) { + FDLayoutNode.call(this, gm, loc, size, vNode); +} + +CoSENode.prototype = Object.create(FDLayoutNode.prototype); +for (var prop in FDLayoutNode) { + CoSENode[prop] = FDLayoutNode[prop]; +} + +CoSENode.prototype.move = function () { + var layout = this.graphManager.getLayout(); + this.displacementX = layout.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.noOfChildren; + this.displacementY = layout.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.noOfChildren; + + if (Math.abs(this.displacementX) > layout.coolingFactor * layout.maxNodeDisplacement) { + this.displacementX = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementX); + } + + if (Math.abs(this.displacementY) > layout.coolingFactor * layout.maxNodeDisplacement) { + this.displacementY = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementY); + } + + // a simple node, just move it + if (this.child == null) { + this.moveBy(this.displacementX, this.displacementY); + } + // an empty compound node, again just move it + else if (this.child.getNodes().length == 0) { + this.moveBy(this.displacementX, this.displacementY); + } + // non-empty compound node, propogate movement to children as well + else { + this.propogateDisplacementToChildren(this.displacementX, this.displacementY); + } + + layout.totalDisplacement += Math.abs(this.displacementX) + Math.abs(this.displacementY); + + this.springForceX = 0; + this.springForceY = 0; + this.repulsionForceX = 0; + this.repulsionForceY = 0; + this.gravitationForceX = 0; + this.gravitationForceY = 0; + this.displacementX = 0; + this.displacementY = 0; +}; + +CoSENode.prototype.propogateDisplacementToChildren = function (dX, dY) { + var nodes = this.getChild().getNodes(); + var node; + for (var i = 0; i < nodes.length; i++) { + node = nodes[i]; + if (node.getChild() == null) { + node.moveBy(dX, dY); + node.displacementX += dX; + node.displacementY += dY; + } else { + node.propogateDisplacementToChildren(dX, dY); + } + } +}; + +CoSENode.prototype.setPred1 = function (pred1) { + this.pred1 = pred1; +}; + +CoSENode.prototype.getPred1 = function () { + return pred1; +}; + +CoSENode.prototype.getPred2 = function () { + return pred2; +}; + +CoSENode.prototype.setNext = function (next) { + this.next = next; +}; + +CoSENode.prototype.getNext = function () { + return next; +}; + +CoSENode.prototype.setProcessed = function (processed) { + this.processed = processed; +}; + +CoSENode.prototype.isProcessed = function () { + return processed; +}; + +module.exports = CoSENode; + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __nested_webpack_require_8085__) { + +"use strict"; + + +var FDLayout = __nested_webpack_require_8085__(0).FDLayout; +var CoSEGraphManager = __nested_webpack_require_8085__(4); +var CoSEGraph = __nested_webpack_require_8085__(3); +var CoSENode = __nested_webpack_require_8085__(5); +var CoSEEdge = __nested_webpack_require_8085__(2); +var CoSEConstants = __nested_webpack_require_8085__(1); +var FDLayoutConstants = __nested_webpack_require_8085__(0).FDLayoutConstants; +var LayoutConstants = __nested_webpack_require_8085__(0).LayoutConstants; +var Point = __nested_webpack_require_8085__(0).Point; +var PointD = __nested_webpack_require_8085__(0).PointD; +var Layout = __nested_webpack_require_8085__(0).Layout; +var Integer = __nested_webpack_require_8085__(0).Integer; +var IGeometry = __nested_webpack_require_8085__(0).IGeometry; +var LGraph = __nested_webpack_require_8085__(0).LGraph; +var Transform = __nested_webpack_require_8085__(0).Transform; + +function CoSELayout() { + FDLayout.call(this); + + this.toBeTiled = {}; // Memorize if a node is to be tiled or is tiled +} + +CoSELayout.prototype = Object.create(FDLayout.prototype); + +for (var prop in FDLayout) { + CoSELayout[prop] = FDLayout[prop]; +} + +CoSELayout.prototype.newGraphManager = function () { + var gm = new CoSEGraphManager(this); + this.graphManager = gm; + return gm; +}; + +CoSELayout.prototype.newGraph = function (vGraph) { + return new CoSEGraph(null, this.graphManager, vGraph); +}; + +CoSELayout.prototype.newNode = function (vNode) { + return new CoSENode(this.graphManager, vNode); +}; + +CoSELayout.prototype.newEdge = function (vEdge) { + return new CoSEEdge(null, null, vEdge); +}; + +CoSELayout.prototype.initParameters = function () { + FDLayout.prototype.initParameters.call(this, arguments); + if (!this.isSubLayout) { + if (CoSEConstants.DEFAULT_EDGE_LENGTH < 10) { + this.idealEdgeLength = 10; + } else { + this.idealEdgeLength = CoSEConstants.DEFAULT_EDGE_LENGTH; + } + + this.useSmartIdealEdgeLengthCalculation = CoSEConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION; + this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH; + this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH; + this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH; + this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH; + this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR; + this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR; + + // variables for tree reduction support + this.prunedNodesAll = []; + this.growTreeIterations = 0; + this.afterGrowthIterations = 0; + this.isTreeGrowing = false; + this.isGrowthFinished = false; + + // variables for cooling + this.coolingCycle = 0; + this.maxCoolingCycle = this.maxIterations / FDLayoutConstants.CONVERGENCE_CHECK_PERIOD; + this.finalTemperature = FDLayoutConstants.CONVERGENCE_CHECK_PERIOD / this.maxIterations; + this.coolingAdjuster = 1; + } +}; + +CoSELayout.prototype.layout = function () { + var createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; + if (createBendsAsNeeded) { + this.createBendpoints(); + this.graphManager.resetAllEdges(); + } + + this.level = 0; + return this.classicLayout(); +}; + +CoSELayout.prototype.classicLayout = function () { + this.nodesWithGravity = this.calculateNodesToApplyGravitationTo(); + this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity); + this.calcNoOfChildrenForAllNodes(); + this.graphManager.calcLowestCommonAncestors(); + this.graphManager.calcInclusionTreeDepths(); + this.graphManager.getRoot().calcEstimatedSize(); + this.calcIdealEdgeLengths(); + + if (!this.incremental) { + var forest = this.getFlatForest(); + + // The graph associated with this layout is flat and a forest + if (forest.length > 0) { + this.positionNodesRadially(forest); + } + // The graph associated with this layout is not flat or a forest + else { + // Reduce the trees when incremental mode is not enabled and graph is not a forest + this.reduceTrees(); + // Update nodes that gravity will be applied + this.graphManager.resetAllNodesToApplyGravitation(); + var allNodes = new Set(this.getAllNodes()); + var intersection = this.nodesWithGravity.filter(function (x) { + return allNodes.has(x); + }); + this.graphManager.setAllNodesToApplyGravitation(intersection); + + this.positionNodesRandomly(); + } + } else { + if (CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL) { + // Reduce the trees in incremental mode if only this constant is set to true + this.reduceTrees(); + // Update nodes that gravity will be applied + this.graphManager.resetAllNodesToApplyGravitation(); + var allNodes = new Set(this.getAllNodes()); + var intersection = this.nodesWithGravity.filter(function (x) { + return allNodes.has(x); + }); + this.graphManager.setAllNodesToApplyGravitation(intersection); + } + } + + this.initSpringEmbedder(); + this.runSpringEmbedder(); + + return true; +}; + +CoSELayout.prototype.tick = function () { + this.totalIterations++; + + if (this.totalIterations === this.maxIterations && !this.isTreeGrowing && !this.isGrowthFinished) { + if (this.prunedNodesAll.length > 0) { + this.isTreeGrowing = true; + } else { + return true; + } + } + + if (this.totalIterations % FDLayoutConstants.CONVERGENCE_CHECK_PERIOD == 0 && !this.isTreeGrowing && !this.isGrowthFinished) { + if (this.isConverged()) { + if (this.prunedNodesAll.length > 0) { + this.isTreeGrowing = true; + } else { + return true; + } + } + + this.coolingCycle++; + + if (this.layoutQuality == 0) { + // quality - "draft" + this.coolingAdjuster = this.coolingCycle; + } else if (this.layoutQuality == 1) { + // quality - "default" + this.coolingAdjuster = this.coolingCycle / 3; + } + + // cooling schedule is based on http://www.btluke.com/simanf1.html -> cooling schedule 3 + this.coolingFactor = Math.max(this.initialCoolingFactor - Math.pow(this.coolingCycle, Math.log(100 * (this.initialCoolingFactor - this.finalTemperature)) / Math.log(this.maxCoolingCycle)) / 100 * this.coolingAdjuster, this.finalTemperature); + this.animationPeriod = Math.ceil(this.initialAnimationPeriod * Math.sqrt(this.coolingFactor)); + } + // Operations while tree is growing again + if (this.isTreeGrowing) { + if (this.growTreeIterations % 10 == 0) { + if (this.prunedNodesAll.length > 0) { + this.graphManager.updateBounds(); + this.updateGrid(); + this.growTree(this.prunedNodesAll); + // Update nodes that gravity will be applied + this.graphManager.resetAllNodesToApplyGravitation(); + var allNodes = new Set(this.getAllNodes()); + var intersection = this.nodesWithGravity.filter(function (x) { + return allNodes.has(x); + }); + this.graphManager.setAllNodesToApplyGravitation(intersection); + + this.graphManager.updateBounds(); + this.updateGrid(); + this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; + } else { + this.isTreeGrowing = false; + this.isGrowthFinished = true; + } + } + this.growTreeIterations++; + } + // Operations after growth is finished + if (this.isGrowthFinished) { + if (this.isConverged()) { + return true; + } + if (this.afterGrowthIterations % 10 == 0) { + this.graphManager.updateBounds(); + this.updateGrid(); + } + this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL * ((100 - this.afterGrowthIterations) / 100); + this.afterGrowthIterations++; + } + + var gridUpdateAllowed = !this.isTreeGrowing && !this.isGrowthFinished; + var forceToNodeSurroundingUpdate = this.growTreeIterations % 10 == 1 && this.isTreeGrowing || this.afterGrowthIterations % 10 == 1 && this.isGrowthFinished; + + this.totalDisplacement = 0; + this.graphManager.updateBounds(); + this.calcSpringForces(); + this.calcRepulsionForces(gridUpdateAllowed, forceToNodeSurroundingUpdate); + this.calcGravitationalForces(); + this.moveNodes(); + this.animate(); + + return false; // Layout is not ended yet return false +}; + +CoSELayout.prototype.getPositionsData = function () { + var allNodes = this.graphManager.getAllNodes(); + var pData = {}; + for (var i = 0; i < allNodes.length; i++) { + var rect = allNodes[i].rect; + var id = allNodes[i].id; + pData[id] = { + id: id, + x: rect.getCenterX(), + y: rect.getCenterY(), + w: rect.width, + h: rect.height + }; + } + + return pData; +}; + +CoSELayout.prototype.runSpringEmbedder = function () { + this.initialAnimationPeriod = 25; + this.animationPeriod = this.initialAnimationPeriod; + var layoutEnded = false; + + // If aminate option is 'during' signal that layout is supposed to start iterating + if (FDLayoutConstants.ANIMATE === 'during') { + this.emit('layoutstarted'); + } else { + // If aminate option is 'during' tick() function will be called on index.js + while (!layoutEnded) { + layoutEnded = this.tick(); + } + + this.graphManager.updateBounds(); + } +}; + +CoSELayout.prototype.calculateNodesToApplyGravitationTo = function () { + var nodeList = []; + var graph; + + var graphs = this.graphManager.getGraphs(); + var size = graphs.length; + var i; + for (i = 0; i < size; i++) { + graph = graphs[i]; + + graph.updateConnected(); + + if (!graph.isConnected) { + nodeList = nodeList.concat(graph.getNodes()); + } + } + + return nodeList; +}; + +CoSELayout.prototype.createBendpoints = function () { + var edges = []; + edges = edges.concat(this.graphManager.getAllEdges()); + var visited = new Set(); + var i; + for (i = 0; i < edges.length; i++) { + var edge = edges[i]; + + if (!visited.has(edge)) { + var source = edge.getSource(); + var target = edge.getTarget(); + + if (source == target) { + edge.getBendpoints().push(new PointD()); + edge.getBendpoints().push(new PointD()); + this.createDummyNodesForBendpoints(edge); + visited.add(edge); + } else { + var edgeList = []; + + edgeList = edgeList.concat(source.getEdgeListToNode(target)); + edgeList = edgeList.concat(target.getEdgeListToNode(source)); + + if (!visited.has(edgeList[0])) { + if (edgeList.length > 1) { + var k; + for (k = 0; k < edgeList.length; k++) { + var multiEdge = edgeList[k]; + multiEdge.getBendpoints().push(new PointD()); + this.createDummyNodesForBendpoints(multiEdge); + } + } + edgeList.forEach(function (edge) { + visited.add(edge); + }); + } + } + } + + if (visited.size == edges.length) { + break; + } + } +}; + +CoSELayout.prototype.positionNodesRadially = function (forest) { + // We tile the trees to a grid row by row; first tree starts at (0,0) + var currentStartingPoint = new Point(0, 0); + var numberOfColumns = Math.ceil(Math.sqrt(forest.length)); + var height = 0; + var currentY = 0; + var currentX = 0; + var point = new PointD(0, 0); + + for (var i = 0; i < forest.length; i++) { + if (i % numberOfColumns == 0) { + // Start of a new row, make the x coordinate 0, increment the + // y coordinate with the max height of the previous row + currentX = 0; + currentY = height; + + if (i != 0) { + currentY += CoSEConstants.DEFAULT_COMPONENT_SEPERATION; + } + + height = 0; + } + + var tree = forest[i]; + + // Find the center of the tree + var centerNode = Layout.findCenterOfTree(tree); + + // Set the staring point of the next tree + currentStartingPoint.x = currentX; + currentStartingPoint.y = currentY; + + // Do a radial layout starting with the center + point = CoSELayout.radialLayout(tree, centerNode, currentStartingPoint); + + if (point.y > height) { + height = Math.floor(point.y); + } + + currentX = Math.floor(point.x + CoSEConstants.DEFAULT_COMPONENT_SEPERATION); + } + + this.transform(new PointD(LayoutConstants.WORLD_CENTER_X - point.x / 2, LayoutConstants.WORLD_CENTER_Y - point.y / 2)); +}; + +CoSELayout.radialLayout = function (tree, centerNode, startingPoint) { + var radialSep = Math.max(this.maxDiagonalInTree(tree), CoSEConstants.DEFAULT_RADIAL_SEPARATION); + CoSELayout.branchRadialLayout(centerNode, null, 0, 359, 0, radialSep); + var bounds = LGraph.calculateBounds(tree); + + var transform = new Transform(); + transform.setDeviceOrgX(bounds.getMinX()); + transform.setDeviceOrgY(bounds.getMinY()); + transform.setWorldOrgX(startingPoint.x); + transform.setWorldOrgY(startingPoint.y); + + for (var i = 0; i < tree.length; i++) { + var node = tree[i]; + node.transform(transform); + } + + var bottomRight = new PointD(bounds.getMaxX(), bounds.getMaxY()); + + return transform.inverseTransformPoint(bottomRight); +}; + +CoSELayout.branchRadialLayout = function (node, parentOfNode, startAngle, endAngle, distance, radialSeparation) { + // First, position this node by finding its angle. + var halfInterval = (endAngle - startAngle + 1) / 2; + + if (halfInterval < 0) { + halfInterval += 180; + } + + var nodeAngle = (halfInterval + startAngle) % 360; + var teta = nodeAngle * IGeometry.TWO_PI / 360; + + // Make polar to java cordinate conversion. + var cos_teta = Math.cos(teta); + var x_ = distance * Math.cos(teta); + var y_ = distance * Math.sin(teta); + + node.setCenter(x_, y_); + + // Traverse all neighbors of this node and recursively call this + // function. + var neighborEdges = []; + neighborEdges = neighborEdges.concat(node.getEdges()); + var childCount = neighborEdges.length; + + if (parentOfNode != null) { + childCount--; + } + + var branchCount = 0; + + var incEdgesCount = neighborEdges.length; + var startIndex; + + var edges = node.getEdgesBetween(parentOfNode); + + // If there are multiple edges, prune them until there remains only one + // edge. + while (edges.length > 1) { + //neighborEdges.remove(edges.remove(0)); + var temp = edges[0]; + edges.splice(0, 1); + var index = neighborEdges.indexOf(temp); + if (index >= 0) { + neighborEdges.splice(index, 1); + } + incEdgesCount--; + childCount--; + } + + if (parentOfNode != null) { + //assert edges.length == 1; + startIndex = (neighborEdges.indexOf(edges[0]) + 1) % incEdgesCount; + } else { + startIndex = 0; + } + + var stepAngle = Math.abs(endAngle - startAngle) / childCount; + + for (var i = startIndex; branchCount != childCount; i = ++i % incEdgesCount) { + var currentNeighbor = neighborEdges[i].getOtherEnd(node); + + // Don't back traverse to root node in current tree. + if (currentNeighbor == parentOfNode) { + continue; + } + + var childStartAngle = (startAngle + branchCount * stepAngle) % 360; + var childEndAngle = (childStartAngle + stepAngle) % 360; + + CoSELayout.branchRadialLayout(currentNeighbor, node, childStartAngle, childEndAngle, distance + radialSeparation, radialSeparation); + + branchCount++; + } +}; + +CoSELayout.maxDiagonalInTree = function (tree) { + var maxDiagonal = Integer.MIN_VALUE; + + for (var i = 0; i < tree.length; i++) { + var node = tree[i]; + var diagonal = node.getDiagonal(); + + if (diagonal > maxDiagonal) { + maxDiagonal = diagonal; + } + } + + return maxDiagonal; +}; + +CoSELayout.prototype.calcRepulsionRange = function () { + // formula is 2 x (level + 1) x idealEdgeLength + return 2 * (this.level + 1) * this.idealEdgeLength; +}; + +// Tiling methods + +// Group zero degree members whose parents are not to be tiled, create dummy parents where needed and fill memberGroups by their dummp parent id's +CoSELayout.prototype.groupZeroDegreeMembers = function () { + var self = this; + // array of [parent_id x oneDegreeNode_id] + var tempMemberGroups = {}; // A temporary map of parent node and its zero degree members + this.memberGroups = {}; // A map of dummy parent node and its zero degree members whose parents are not to be tiled + this.idToDummyNode = {}; // A map of id to dummy node + + var zeroDegree = []; // List of zero degree nodes whose parents are not to be tiled + var allNodes = this.graphManager.getAllNodes(); + + // Fill zero degree list + for (var i = 0; i < allNodes.length; i++) { + var node = allNodes[i]; + var parent = node.getParent(); + // If a node has zero degree and its parent is not to be tiled if exists add that node to zeroDegres list + if (this.getNodeDegreeWithChildren(node) === 0 && (parent.id == undefined || !this.getToBeTiled(parent))) { + zeroDegree.push(node); + } + } + + // Create a map of parent node and its zero degree members + for (var i = 0; i < zeroDegree.length; i++) { + var node = zeroDegree[i]; // Zero degree node itself + var p_id = node.getParent().id; // Parent id + + if (typeof tempMemberGroups[p_id] === "undefined") tempMemberGroups[p_id] = []; + + tempMemberGroups[p_id] = tempMemberGroups[p_id].concat(node); // Push node to the list belongs to its parent in tempMemberGroups + } + + // If there are at least two nodes at a level, create a dummy compound for them + Object.keys(tempMemberGroups).forEach(function (p_id) { + if (tempMemberGroups[p_id].length > 1) { + var dummyCompoundId = "DummyCompound_" + p_id; // The id of dummy compound which will be created soon + self.memberGroups[dummyCompoundId] = tempMemberGroups[p_id]; // Add dummy compound to memberGroups + + var parent = tempMemberGroups[p_id][0].getParent(); // The parent of zero degree nodes will be the parent of new dummy compound + + // Create a dummy compound with calculated id + var dummyCompound = new CoSENode(self.graphManager); + dummyCompound.id = dummyCompoundId; + dummyCompound.paddingLeft = parent.paddingLeft || 0; + dummyCompound.paddingRight = parent.paddingRight || 0; + dummyCompound.paddingBottom = parent.paddingBottom || 0; + dummyCompound.paddingTop = parent.paddingTop || 0; + + self.idToDummyNode[dummyCompoundId] = dummyCompound; + + var dummyParentGraph = self.getGraphManager().add(self.newGraph(), dummyCompound); + var parentGraph = parent.getChild(); + + // Add dummy compound to parent the graph + parentGraph.add(dummyCompound); + + // For each zero degree node in this level remove it from its parent graph and add it to the graph of dummy parent + for (var i = 0; i < tempMemberGroups[p_id].length; i++) { + var node = tempMemberGroups[p_id][i]; + + parentGraph.remove(node); + dummyParentGraph.add(node); + } + } + }); +}; + +CoSELayout.prototype.clearCompounds = function () { + var childGraphMap = {}; + var idToNode = {}; + + // Get compound ordering by finding the inner one first + this.performDFSOnCompounds(); + + for (var i = 0; i < this.compoundOrder.length; i++) { + + idToNode[this.compoundOrder[i].id] = this.compoundOrder[i]; + childGraphMap[this.compoundOrder[i].id] = [].concat(this.compoundOrder[i].getChild().getNodes()); + + // Remove children of compounds + this.graphManager.remove(this.compoundOrder[i].getChild()); + this.compoundOrder[i].child = null; + } + + this.graphManager.resetAllNodes(); + + // Tile the removed children + this.tileCompoundMembers(childGraphMap, idToNode); +}; + +CoSELayout.prototype.clearZeroDegreeMembers = function () { + var self = this; + var tiledZeroDegreePack = this.tiledZeroDegreePack = []; + + Object.keys(this.memberGroups).forEach(function (id) { + var compoundNode = self.idToDummyNode[id]; // Get the dummy compound + + tiledZeroDegreePack[id] = self.tileNodes(self.memberGroups[id], compoundNode.paddingLeft + compoundNode.paddingRight); + + // Set the width and height of the dummy compound as calculated + compoundNode.rect.width = tiledZeroDegreePack[id].width; + compoundNode.rect.height = tiledZeroDegreePack[id].height; + }); +}; + +CoSELayout.prototype.repopulateCompounds = function () { + for (var i = this.compoundOrder.length - 1; i >= 0; i--) { + var lCompoundNode = this.compoundOrder[i]; + var id = lCompoundNode.id; + var horizontalMargin = lCompoundNode.paddingLeft; + var verticalMargin = lCompoundNode.paddingTop; + + this.adjustLocations(this.tiledMemberPack[id], lCompoundNode.rect.x, lCompoundNode.rect.y, horizontalMargin, verticalMargin); + } +}; + +CoSELayout.prototype.repopulateZeroDegreeMembers = function () { + var self = this; + var tiledPack = this.tiledZeroDegreePack; + + Object.keys(tiledPack).forEach(function (id) { + var compoundNode = self.idToDummyNode[id]; // Get the dummy compound by its id + var horizontalMargin = compoundNode.paddingLeft; + var verticalMargin = compoundNode.paddingTop; + + // Adjust the positions of nodes wrt its compound + self.adjustLocations(tiledPack[id], compoundNode.rect.x, compoundNode.rect.y, horizontalMargin, verticalMargin); + }); +}; + +CoSELayout.prototype.getToBeTiled = function (node) { + var id = node.id; + //firstly check the previous results + if (this.toBeTiled[id] != null) { + return this.toBeTiled[id]; + } + + //only compound nodes are to be tiled + var childGraph = node.getChild(); + if (childGraph == null) { + this.toBeTiled[id] = false; + return false; + } + + var children = childGraph.getNodes(); // Get the children nodes + + //a compound node is not to be tiled if all of its compound children are not to be tiled + for (var i = 0; i < children.length; i++) { + var theChild = children[i]; + + if (this.getNodeDegree(theChild) > 0) { + this.toBeTiled[id] = false; + return false; + } + + //pass the children not having the compound structure + if (theChild.getChild() == null) { + this.toBeTiled[theChild.id] = false; + continue; + } + + if (!this.getToBeTiled(theChild)) { + this.toBeTiled[id] = false; + return false; + } + } + this.toBeTiled[id] = true; + return true; +}; + +// Get degree of a node depending of its edges and independent of its children +CoSELayout.prototype.getNodeDegree = function (node) { + var id = node.id; + var edges = node.getEdges(); + var degree = 0; + + // For the edges connected + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + if (edge.getSource().id !== edge.getTarget().id) { + degree = degree + 1; + } + } + return degree; +}; + +// Get degree of a node with its children +CoSELayout.prototype.getNodeDegreeWithChildren = function (node) { + var degree = this.getNodeDegree(node); + if (node.getChild() == null) { + return degree; + } + var children = node.getChild().getNodes(); + for (var i = 0; i < children.length; i++) { + var child = children[i]; + degree += this.getNodeDegreeWithChildren(child); + } + return degree; +}; + +CoSELayout.prototype.performDFSOnCompounds = function () { + this.compoundOrder = []; + this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes()); +}; + +CoSELayout.prototype.fillCompexOrderByDFS = function (children) { + for (var i = 0; i < children.length; i++) { + var child = children[i]; + if (child.getChild() != null) { + this.fillCompexOrderByDFS(child.getChild().getNodes()); + } + if (this.getToBeTiled(child)) { + this.compoundOrder.push(child); + } + } +}; + +/** +* This method places each zero degree member wrt given (x,y) coordinates (top left). +*/ +CoSELayout.prototype.adjustLocations = function (organization, x, y, compoundHorizontalMargin, compoundVerticalMargin) { + x += compoundHorizontalMargin; + y += compoundVerticalMargin; + + var left = x; + + for (var i = 0; i < organization.rows.length; i++) { + var row = organization.rows[i]; + x = left; + var maxHeight = 0; + + for (var j = 0; j < row.length; j++) { + var lnode = row[j]; + + lnode.rect.x = x; // + lnode.rect.width / 2; + lnode.rect.y = y; // + lnode.rect.height / 2; + + x += lnode.rect.width + organization.horizontalPadding; + + if (lnode.rect.height > maxHeight) maxHeight = lnode.rect.height; + } + + y += maxHeight + organization.verticalPadding; + } +}; + +CoSELayout.prototype.tileCompoundMembers = function (childGraphMap, idToNode) { + var self = this; + this.tiledMemberPack = []; + + Object.keys(childGraphMap).forEach(function (id) { + // Get the compound node + var compoundNode = idToNode[id]; + + self.tiledMemberPack[id] = self.tileNodes(childGraphMap[id], compoundNode.paddingLeft + compoundNode.paddingRight); + + compoundNode.rect.width = self.tiledMemberPack[id].width; + compoundNode.rect.height = self.tiledMemberPack[id].height; + }); +}; + +CoSELayout.prototype.tileNodes = function (nodes, minWidth) { + var verticalPadding = CoSEConstants.TILING_PADDING_VERTICAL; + var horizontalPadding = CoSEConstants.TILING_PADDING_HORIZONTAL; + var organization = { + rows: [], + rowWidth: [], + rowHeight: [], + width: 0, + height: minWidth, // assume minHeight equals to minWidth + verticalPadding: verticalPadding, + horizontalPadding: horizontalPadding + }; + + // Sort the nodes in ascending order of their areas + nodes.sort(function (n1, n2) { + if (n1.rect.width * n1.rect.height > n2.rect.width * n2.rect.height) return -1; + if (n1.rect.width * n1.rect.height < n2.rect.width * n2.rect.height) return 1; + return 0; + }); + + // Create the organization -> tile members + for (var i = 0; i < nodes.length; i++) { + var lNode = nodes[i]; + + if (organization.rows.length == 0) { + this.insertNodeToRow(organization, lNode, 0, minWidth); + } else if (this.canAddHorizontal(organization, lNode.rect.width, lNode.rect.height)) { + this.insertNodeToRow(organization, lNode, this.getShortestRowIndex(organization), minWidth); + } else { + this.insertNodeToRow(organization, lNode, organization.rows.length, minWidth); + } + + this.shiftToLastRow(organization); + } + + return organization; +}; + +CoSELayout.prototype.insertNodeToRow = function (organization, node, rowIndex, minWidth) { + var minCompoundSize = minWidth; + + // Add new row if needed + if (rowIndex == organization.rows.length) { + var secondDimension = []; + + organization.rows.push(secondDimension); + organization.rowWidth.push(minCompoundSize); + organization.rowHeight.push(0); + } + + // Update row width + var w = organization.rowWidth[rowIndex] + node.rect.width; + + if (organization.rows[rowIndex].length > 0) { + w += organization.horizontalPadding; + } + + organization.rowWidth[rowIndex] = w; + // Update compound width + if (organization.width < w) { + organization.width = w; + } + + // Update height + var h = node.rect.height; + if (rowIndex > 0) h += organization.verticalPadding; + + var extraHeight = 0; + if (h > organization.rowHeight[rowIndex]) { + extraHeight = organization.rowHeight[rowIndex]; + organization.rowHeight[rowIndex] = h; + extraHeight = organization.rowHeight[rowIndex] - extraHeight; + } + + organization.height += extraHeight; + + // Insert node + organization.rows[rowIndex].push(node); +}; + +//Scans the rows of an organization and returns the one with the min width +CoSELayout.prototype.getShortestRowIndex = function (organization) { + var r = -1; + var min = Number.MAX_VALUE; + + for (var i = 0; i < organization.rows.length; i++) { + if (organization.rowWidth[i] < min) { + r = i; + min = organization.rowWidth[i]; + } + } + return r; +}; + +//Scans the rows of an organization and returns the one with the max width +CoSELayout.prototype.getLongestRowIndex = function (organization) { + var r = -1; + var max = Number.MIN_VALUE; + + for (var i = 0; i < organization.rows.length; i++) { + + if (organization.rowWidth[i] > max) { + r = i; + max = organization.rowWidth[i]; + } + } + + return r; +}; + +/** +* This method checks whether adding extra width to the organization violates +* the aspect ratio(1) or not. +*/ +CoSELayout.prototype.canAddHorizontal = function (organization, extraWidth, extraHeight) { + + var sri = this.getShortestRowIndex(organization); + + if (sri < 0) { + return true; + } + + var min = organization.rowWidth[sri]; + + if (min + organization.horizontalPadding + extraWidth <= organization.width) return true; + + var hDiff = 0; + + // Adding to an existing row + if (organization.rowHeight[sri] < extraHeight) { + if (sri > 0) hDiff = extraHeight + organization.verticalPadding - organization.rowHeight[sri]; + } + + var add_to_row_ratio; + if (organization.width - min >= extraWidth + organization.horizontalPadding) { + add_to_row_ratio = (organization.height + hDiff) / (min + extraWidth + organization.horizontalPadding); + } else { + add_to_row_ratio = (organization.height + hDiff) / organization.width; + } + + // Adding a new row for this node + hDiff = extraHeight + organization.verticalPadding; + var add_new_row_ratio; + if (organization.width < extraWidth) { + add_new_row_ratio = (organization.height + hDiff) / extraWidth; + } else { + add_new_row_ratio = (organization.height + hDiff) / organization.width; + } + + if (add_new_row_ratio < 1) add_new_row_ratio = 1 / add_new_row_ratio; + + if (add_to_row_ratio < 1) add_to_row_ratio = 1 / add_to_row_ratio; + + return add_to_row_ratio < add_new_row_ratio; +}; + +//If moving the last node from the longest row and adding it to the last +//row makes the bounding box smaller, do it. +CoSELayout.prototype.shiftToLastRow = function (organization) { + var longest = this.getLongestRowIndex(organization); + var last = organization.rowWidth.length - 1; + var row = organization.rows[longest]; + var node = row[row.length - 1]; + + var diff = node.width + organization.horizontalPadding; + + // Check if there is enough space on the last row + if (organization.width - organization.rowWidth[last] > diff && longest != last) { + // Remove the last element of the longest row + row.splice(-1, 1); + + // Push it to the last row + organization.rows[last].push(node); + + organization.rowWidth[longest] = organization.rowWidth[longest] - diff; + organization.rowWidth[last] = organization.rowWidth[last] + diff; + organization.width = organization.rowWidth[instance.getLongestRowIndex(organization)]; + + // Update heights of the organization + var maxHeight = Number.MIN_VALUE; + for (var i = 0; i < row.length; i++) { + if (row[i].height > maxHeight) maxHeight = row[i].height; + } + if (longest > 0) maxHeight += organization.verticalPadding; + + var prevTotal = organization.rowHeight[longest] + organization.rowHeight[last]; + + organization.rowHeight[longest] = maxHeight; + if (organization.rowHeight[last] < node.height + organization.verticalPadding) organization.rowHeight[last] = node.height + organization.verticalPadding; + + var finalTotal = organization.rowHeight[longest] + organization.rowHeight[last]; + organization.height += finalTotal - prevTotal; + + this.shiftToLastRow(organization); + } +}; + +CoSELayout.prototype.tilingPreLayout = function () { + if (CoSEConstants.TILE) { + // Find zero degree nodes and create a compound for each level + this.groupZeroDegreeMembers(); + // Tile and clear children of each compound + this.clearCompounds(); + // Separately tile and clear zero degree nodes for each level + this.clearZeroDegreeMembers(); + } +}; + +CoSELayout.prototype.tilingPostLayout = function () { + if (CoSEConstants.TILE) { + this.repopulateZeroDegreeMembers(); + this.repopulateCompounds(); + } +}; + +// ----------------------------------------------------------------------------- +// Section: Tree Reduction methods +// ----------------------------------------------------------------------------- +// Reduce trees +CoSELayout.prototype.reduceTrees = function () { + var prunedNodesAll = []; + var containsLeaf = true; + var node; + + while (containsLeaf) { + var allNodes = this.graphManager.getAllNodes(); + var prunedNodesInStepTemp = []; + containsLeaf = false; + + for (var i = 0; i < allNodes.length; i++) { + node = allNodes[i]; + if (node.getEdges().length == 1 && !node.getEdges()[0].isInterGraph && node.getChild() == null) { + prunedNodesInStepTemp.push([node, node.getEdges()[0], node.getOwner()]); + containsLeaf = true; + } + } + if (containsLeaf == true) { + var prunedNodesInStep = []; + for (var j = 0; j < prunedNodesInStepTemp.length; j++) { + if (prunedNodesInStepTemp[j][0].getEdges().length == 1) { + prunedNodesInStep.push(prunedNodesInStepTemp[j]); + prunedNodesInStepTemp[j][0].getOwner().remove(prunedNodesInStepTemp[j][0]); + } + } + prunedNodesAll.push(prunedNodesInStep); + this.graphManager.resetAllNodes(); + this.graphManager.resetAllEdges(); + } + } + this.prunedNodesAll = prunedNodesAll; +}; + +// Grow tree one step +CoSELayout.prototype.growTree = function (prunedNodesAll) { + var lengthOfPrunedNodesInStep = prunedNodesAll.length; + var prunedNodesInStep = prunedNodesAll[lengthOfPrunedNodesInStep - 1]; + + var nodeData; + for (var i = 0; i < prunedNodesInStep.length; i++) { + nodeData = prunedNodesInStep[i]; + + this.findPlaceforPrunedNode(nodeData); + + nodeData[2].add(nodeData[0]); + nodeData[2].add(nodeData[1], nodeData[1].source, nodeData[1].target); + } + + prunedNodesAll.splice(prunedNodesAll.length - 1, 1); + this.graphManager.resetAllNodes(); + this.graphManager.resetAllEdges(); +}; + +// Find an appropriate position to replace pruned node, this method can be improved +CoSELayout.prototype.findPlaceforPrunedNode = function (nodeData) { + + var gridForPrunedNode; + var nodeToConnect; + var prunedNode = nodeData[0]; + if (prunedNode == nodeData[1].source) { + nodeToConnect = nodeData[1].target; + } else { + nodeToConnect = nodeData[1].source; + } + var startGridX = nodeToConnect.startX; + var finishGridX = nodeToConnect.finishX; + var startGridY = nodeToConnect.startY; + var finishGridY = nodeToConnect.finishY; + + var upNodeCount = 0; + var downNodeCount = 0; + var rightNodeCount = 0; + var leftNodeCount = 0; + var controlRegions = [upNodeCount, rightNodeCount, downNodeCount, leftNodeCount]; + + if (startGridY > 0) { + for (var i = startGridX; i <= finishGridX; i++) { + controlRegions[0] += this.grid[i][startGridY - 1].length + this.grid[i][startGridY].length - 1; + } + } + if (finishGridX < this.grid.length - 1) { + for (var i = startGridY; i <= finishGridY; i++) { + controlRegions[1] += this.grid[finishGridX + 1][i].length + this.grid[finishGridX][i].length - 1; + } + } + if (finishGridY < this.grid[0].length - 1) { + for (var i = startGridX; i <= finishGridX; i++) { + controlRegions[2] += this.grid[i][finishGridY + 1].length + this.grid[i][finishGridY].length - 1; + } + } + if (startGridX > 0) { + for (var i = startGridY; i <= finishGridY; i++) { + controlRegions[3] += this.grid[startGridX - 1][i].length + this.grid[startGridX][i].length - 1; + } + } + var min = Integer.MAX_VALUE; + var minCount; + var minIndex; + for (var j = 0; j < controlRegions.length; j++) { + if (controlRegions[j] < min) { + min = controlRegions[j]; + minCount = 1; + minIndex = j; + } else if (controlRegions[j] == min) { + minCount++; + } + } + + if (minCount == 3 && min == 0) { + if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[2] == 0) { + gridForPrunedNode = 1; + } else if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[3] == 0) { + gridForPrunedNode = 0; + } else if (controlRegions[0] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) { + gridForPrunedNode = 3; + } else if (controlRegions[1] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) { + gridForPrunedNode = 2; + } + } else if (minCount == 2 && min == 0) { + var random = Math.floor(Math.random() * 2); + if (controlRegions[0] == 0 && controlRegions[1] == 0) { + ; + if (random == 0) { + gridForPrunedNode = 0; + } else { + gridForPrunedNode = 1; + } + } else if (controlRegions[0] == 0 && controlRegions[2] == 0) { + if (random == 0) { + gridForPrunedNode = 0; + } else { + gridForPrunedNode = 2; + } + } else if (controlRegions[0] == 0 && controlRegions[3] == 0) { + if (random == 0) { + gridForPrunedNode = 0; + } else { + gridForPrunedNode = 3; + } + } else if (controlRegions[1] == 0 && controlRegions[2] == 0) { + if (random == 0) { + gridForPrunedNode = 1; + } else { + gridForPrunedNode = 2; + } + } else if (controlRegions[1] == 0 && controlRegions[3] == 0) { + if (random == 0) { + gridForPrunedNode = 1; + } else { + gridForPrunedNode = 3; + } + } else { + if (random == 0) { + gridForPrunedNode = 2; + } else { + gridForPrunedNode = 3; + } + } + } else if (minCount == 4 && min == 0) { + var random = Math.floor(Math.random() * 4); + gridForPrunedNode = random; + } else { + gridForPrunedNode = minIndex; + } + + if (gridForPrunedNode == 0) { + prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() - nodeToConnect.getHeight() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getHeight() / 2); + } else if (gridForPrunedNode == 1) { + prunedNode.setCenter(nodeToConnect.getCenterX() + nodeToConnect.getWidth() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getWidth() / 2, nodeToConnect.getCenterY()); + } else if (gridForPrunedNode == 2) { + prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() + nodeToConnect.getHeight() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getHeight() / 2); + } else { + prunedNode.setCenter(nodeToConnect.getCenterX() - nodeToConnect.getWidth() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getWidth() / 2, nodeToConnect.getCenterY()); + } +}; + +module.exports = CoSELayout; + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __nested_webpack_require_45620__) { + +"use strict"; + + +var coseBase = {}; + +coseBase.layoutBase = __nested_webpack_require_45620__(0); +coseBase.CoSEConstants = __nested_webpack_require_45620__(1); +coseBase.CoSEEdge = __nested_webpack_require_45620__(2); +coseBase.CoSEGraph = __nested_webpack_require_45620__(3); +coseBase.CoSEGraphManager = __nested_webpack_require_45620__(4); +coseBase.CoSELayout = __nested_webpack_require_45620__(6); +coseBase.CoSENode = __nested_webpack_require_45620__(5); + +module.exports = coseBase; + +/***/ }) +/******/ ]); +}); + +/***/ }), + +/***/ 43457: +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +(function webpackUniversalModuleDefinition(root, factory) { + if(true) + module.exports = factory(__webpack_require__(87799)); + else {} +})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_659__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_659__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __nested_webpack_require_659__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __nested_webpack_require_659__.c = installedModules; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __nested_webpack_require_659__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __nested_webpack_require_659__.d = function(exports, name, getter) { +/******/ if(!__nested_webpack_require_659__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __nested_webpack_require_659__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __nested_webpack_require_659__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __nested_webpack_require_659__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __nested_webpack_require_659__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __nested_webpack_require_659__(__nested_webpack_require_659__.s = 1); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE_0__; + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __nested_webpack_require_3201__) { + +"use strict"; + + +var LayoutConstants = __nested_webpack_require_3201__(0).layoutBase.LayoutConstants; +var FDLayoutConstants = __nested_webpack_require_3201__(0).layoutBase.FDLayoutConstants; +var CoSEConstants = __nested_webpack_require_3201__(0).CoSEConstants; +var CoSELayout = __nested_webpack_require_3201__(0).CoSELayout; +var CoSENode = __nested_webpack_require_3201__(0).CoSENode; +var PointD = __nested_webpack_require_3201__(0).layoutBase.PointD; +var DimensionD = __nested_webpack_require_3201__(0).layoutBase.DimensionD; + +var defaults = { + // Called on `layoutready` + ready: function ready() {}, + // Called on `layoutstop` + stop: function stop() {}, + // 'draft', 'default' or 'proof" + // - 'draft' fast cooling rate + // - 'default' moderate cooling rate + // - "proof" slow cooling rate + quality: 'default', + // include labels in node dimensions + nodeDimensionsIncludeLabels: false, + // number of ticks per frame; higher is faster but more jerky + refresh: 30, + // Whether to fit the network view after when done + fit: true, + // Padding on fit + padding: 10, + // Whether to enable incremental mode + randomize: true, + // Node repulsion (non overlapping) multiplier + nodeRepulsion: 4500, + // Ideal edge (non nested) length + idealEdgeLength: 50, + // Divisor to compute edge forces + edgeElasticity: 0.45, + // Nesting factor (multiplier) to compute ideal edge length for nested edges + nestingFactor: 0.1, + // Gravity force (constant) + gravity: 0.25, + // Maximum number of iterations to perform + numIter: 2500, + // For enabling tiling + tile: true, + // Type of layout animation. The option set is {'during', 'end', false} + animate: 'end', + // Duration for animate:end + animationDuration: 500, + // Represents the amount of the vertical space to put between the zero degree members during the tiling operation(can also be a function) + tilingPaddingVertical: 10, + // Represents the amount of the horizontal space to put between the zero degree members during the tiling operation(can also be a function) + tilingPaddingHorizontal: 10, + // Gravity range (constant) for compounds + gravityRangeCompound: 1.5, + // Gravity force (constant) for compounds + gravityCompound: 1.0, + // Gravity range (constant) + gravityRange: 3.8, + // Initial cooling factor for incremental layout + initialEnergyOnIncremental: 0.5 +}; + +function extend(defaults, options) { + var obj = {}; + + for (var i in defaults) { + obj[i] = defaults[i]; + } + + for (var i in options) { + obj[i] = options[i]; + } + + return obj; +}; + +function _CoSELayout(_options) { + this.options = extend(defaults, _options); + getUserOptions(this.options); +} + +var getUserOptions = function getUserOptions(options) { + if (options.nodeRepulsion != null) CoSEConstants.DEFAULT_REPULSION_STRENGTH = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH = options.nodeRepulsion; + if (options.idealEdgeLength != null) CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = options.idealEdgeLength; + if (options.edgeElasticity != null) CoSEConstants.DEFAULT_SPRING_STRENGTH = FDLayoutConstants.DEFAULT_SPRING_STRENGTH = options.edgeElasticity; + if (options.nestingFactor != null) CoSEConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = options.nestingFactor; + if (options.gravity != null) CoSEConstants.DEFAULT_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = options.gravity; + if (options.numIter != null) CoSEConstants.MAX_ITERATIONS = FDLayoutConstants.MAX_ITERATIONS = options.numIter; + if (options.gravityRange != null) CoSEConstants.DEFAULT_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = options.gravityRange; + if (options.gravityCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = options.gravityCompound; + if (options.gravityRangeCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = options.gravityRangeCompound; + if (options.initialEnergyOnIncremental != null) CoSEConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = options.initialEnergyOnIncremental; + + if (options.quality == 'draft') LayoutConstants.QUALITY = 0;else if (options.quality == 'proof') LayoutConstants.QUALITY = 2;else LayoutConstants.QUALITY = 1; + + CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS = FDLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = options.nodeDimensionsIncludeLabels; + CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = !options.randomize; + CoSEConstants.ANIMATE = FDLayoutConstants.ANIMATE = LayoutConstants.ANIMATE = options.animate; + CoSEConstants.TILE = options.tile; + CoSEConstants.TILING_PADDING_VERTICAL = typeof options.tilingPaddingVertical === 'function' ? options.tilingPaddingVertical.call() : options.tilingPaddingVertical; + CoSEConstants.TILING_PADDING_HORIZONTAL = typeof options.tilingPaddingHorizontal === 'function' ? options.tilingPaddingHorizontal.call() : options.tilingPaddingHorizontal; +}; + +_CoSELayout.prototype.run = function () { + var ready; + var frameId; + var options = this.options; + var idToLNode = this.idToLNode = {}; + var layout = this.layout = new CoSELayout(); + var self = this; + + self.stopped = false; + + this.cy = this.options.cy; + + this.cy.trigger({ type: 'layoutstart', layout: this }); + + var gm = layout.newGraphManager(); + this.gm = gm; + + var nodes = this.options.eles.nodes(); + var edges = this.options.eles.edges(); + + this.root = gm.addRoot(); + this.processChildrenList(this.root, this.getTopMostNodes(nodes), layout); + + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + var sourceNode = this.idToLNode[edge.data("source")]; + var targetNode = this.idToLNode[edge.data("target")]; + if (sourceNode !== targetNode && sourceNode.getEdgesBetween(targetNode).length == 0) { + var e1 = gm.add(layout.newEdge(), sourceNode, targetNode); + e1.id = edge.id(); + } + } + + var getPositions = function getPositions(ele, i) { + if (typeof ele === "number") { + ele = i; + } + var theId = ele.data('id'); + var lNode = self.idToLNode[theId]; + + return { + x: lNode.getRect().getCenterX(), + y: lNode.getRect().getCenterY() + }; + }; + + /* + * Reposition nodes in iterations animatedly + */ + var iterateAnimated = function iterateAnimated() { + // Thigs to perform after nodes are repositioned on screen + var afterReposition = function afterReposition() { + if (options.fit) { + options.cy.fit(options.eles, options.padding); + } + + if (!ready) { + ready = true; + self.cy.one('layoutready', options.ready); + self.cy.trigger({ type: 'layoutready', layout: self }); + } + }; + + var ticksPerFrame = self.options.refresh; + var isDone; + + for (var i = 0; i < ticksPerFrame && !isDone; i++) { + isDone = self.stopped || self.layout.tick(); + } + + // If layout is done + if (isDone) { + // If the layout is not a sublayout and it is successful perform post layout. + if (layout.checkLayoutSuccess() && !layout.isSubLayout) { + layout.doPostLayout(); + } + + // If layout has a tilingPostLayout function property call it. + if (layout.tilingPostLayout) { + layout.tilingPostLayout(); + } + + layout.isLayoutFinished = true; + + self.options.eles.nodes().positions(getPositions); + + afterReposition(); + + // trigger layoutstop when the layout stops (e.g. finishes) + self.cy.one('layoutstop', self.options.stop); + self.cy.trigger({ type: 'layoutstop', layout: self }); + + if (frameId) { + cancelAnimationFrame(frameId); + } + + ready = false; + return; + } + + var animationData = self.layout.getPositionsData(); // Get positions of layout nodes note that all nodes may not be layout nodes because of tiling + + // Position nodes, for the nodes whose id does not included in data (because they are removed from their parents and included in dummy compounds) + // use position of their ancestors or dummy ancestors + options.eles.nodes().positions(function (ele, i) { + if (typeof ele === "number") { + ele = i; + } + // If ele is a compound node, then its position will be defined by its children + if (!ele.isParent()) { + var theId = ele.id(); + var pNode = animationData[theId]; + var temp = ele; + // If pNode is undefined search until finding position data of its first ancestor (It may be dummy as well) + while (pNode == null) { + pNode = animationData[temp.data('parent')] || animationData['DummyCompound_' + temp.data('parent')]; + animationData[theId] = pNode; + temp = temp.parent()[0]; + if (temp == undefined) { + break; + } + } + if (pNode != null) { + return { + x: pNode.x, + y: pNode.y + }; + } else { + return { + x: ele.position('x'), + y: ele.position('y') + }; + } + } + }); + + afterReposition(); + + frameId = requestAnimationFrame(iterateAnimated); + }; + + /* + * Listen 'layoutstarted' event and start animated iteration if animate option is 'during' + */ + layout.addListener('layoutstarted', function () { + if (self.options.animate === 'during') { + frameId = requestAnimationFrame(iterateAnimated); + } + }); + + layout.runLayout(); // Run cose layout + + /* + * If animate option is not 'during' ('end' or false) perform these here (If it is 'during' similar things are already performed) + */ + if (this.options.animate !== "during") { + self.options.eles.nodes().not(":parent").layoutPositions(self, self.options, getPositions); // Use layout positions to reposition the nodes it considers the options parameter + ready = false; + } + + return this; // chaining +}; + +//Get the top most ones of a list of nodes +_CoSELayout.prototype.getTopMostNodes = function (nodes) { + var nodesMap = {}; + for (var i = 0; i < nodes.length; i++) { + nodesMap[nodes[i].id()] = true; + } + var roots = nodes.filter(function (ele, i) { + if (typeof ele === "number") { + ele = i; + } + var parent = ele.parent()[0]; + while (parent != null) { + if (nodesMap[parent.id()]) { + return false; + } + parent = parent.parent()[0]; + } + return true; + }); + + return roots; +}; + +_CoSELayout.prototype.processChildrenList = function (parent, children, layout) { + var size = children.length; + for (var i = 0; i < size; i++) { + var theChild = children[i]; + var children_of_children = theChild.children(); + var theNode; + + var dimensions = theChild.layoutDimensions({ + nodeDimensionsIncludeLabels: this.options.nodeDimensionsIncludeLabels + }); + + if (theChild.outerWidth() != null && theChild.outerHeight() != null) { + theNode = parent.add(new CoSENode(layout.graphManager, new PointD(theChild.position('x') - dimensions.w / 2, theChild.position('y') - dimensions.h / 2), new DimensionD(parseFloat(dimensions.w), parseFloat(dimensions.h)))); + } else { + theNode = parent.add(new CoSENode(this.graphManager)); + } + // Attach id to the layout node + theNode.id = theChild.data("id"); + // Attach the paddings of cy node to layout node + theNode.paddingLeft = parseInt(theChild.css('padding')); + theNode.paddingTop = parseInt(theChild.css('padding')); + theNode.paddingRight = parseInt(theChild.css('padding')); + theNode.paddingBottom = parseInt(theChild.css('padding')); + + //Attach the label properties to compound if labels will be included in node dimensions + if (this.options.nodeDimensionsIncludeLabels) { + if (theChild.isParent()) { + var labelWidth = theChild.boundingBox({ includeLabels: true, includeNodes: false }).w; + var labelHeight = theChild.boundingBox({ includeLabels: true, includeNodes: false }).h; + var labelPos = theChild.css("text-halign"); + theNode.labelWidth = labelWidth; + theNode.labelHeight = labelHeight; + theNode.labelPos = labelPos; + } + } + + // Map the layout node + this.idToLNode[theChild.data("id")] = theNode; + + if (isNaN(theNode.rect.x)) { + theNode.rect.x = 0; + } + + if (isNaN(theNode.rect.y)) { + theNode.rect.y = 0; + } + + if (children_of_children != null && children_of_children.length > 0) { + var theNewGraph; + theNewGraph = layout.getGraphManager().add(layout.newGraph(), theNode); + this.processChildrenList(theNewGraph, children_of_children, layout); + } + } +}; + +/** + * @brief : called on continuous layouts to stop them before they finish + */ +_CoSELayout.prototype.stop = function () { + this.stopped = true; + + return this; // chaining +}; + +var register = function register(cytoscape) { + // var Layout = getLayout( cytoscape ); + + cytoscape('layout', 'cose-bilkent', _CoSELayout); +}; + +// auto reg for globals +if (typeof cytoscape !== 'undefined') { + register(cytoscape); +} + +module.exports = register; + +/***/ }) +/******/ ]); +}); + +/***/ }), + +/***/ 23143: +/***/ (function(module) { + +(function webpackUniversalModuleDefinition(root, factory) { + if(true) + module.exports = factory(); + else {} +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_543__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_543__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __nested_webpack_require_543__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __nested_webpack_require_543__.c = installedModules; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __nested_webpack_require_543__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __nested_webpack_require_543__.d = function(exports, name, getter) { +/******/ if(!__nested_webpack_require_543__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __nested_webpack_require_543__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __nested_webpack_require_543__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __nested_webpack_require_543__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __nested_webpack_require_543__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __nested_webpack_require_543__(__nested_webpack_require_543__.s = 26); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function LayoutConstants() {} + +/** + * Layout Quality: 0:draft, 1:default, 2:proof + */ +LayoutConstants.QUALITY = 1; + +/** + * Default parameters + */ +LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED = false; +LayoutConstants.DEFAULT_INCREMENTAL = false; +LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT = true; +LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT = false; +LayoutConstants.DEFAULT_ANIMATION_PERIOD = 50; +LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES = false; + +// ----------------------------------------------------------------------------- +// Section: General other constants +// ----------------------------------------------------------------------------- +/* + * Margins of a graph to be applied on bouding rectangle of its contents. We + * assume margins on all four sides to be uniform. + */ +LayoutConstants.DEFAULT_GRAPH_MARGIN = 15; + +/* + * Whether to consider labels in node dimensions or not + */ +LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = false; + +/* + * Default dimension of a non-compound node. + */ +LayoutConstants.SIMPLE_NODE_SIZE = 40; + +/* + * Default dimension of a non-compound node. + */ +LayoutConstants.SIMPLE_NODE_HALF_SIZE = LayoutConstants.SIMPLE_NODE_SIZE / 2; + +/* + * Empty compound node size. When a compound node is empty, its both + * dimensions should be of this value. + */ +LayoutConstants.EMPTY_COMPOUND_NODE_SIZE = 40; + +/* + * Minimum length that an edge should take during layout + */ +LayoutConstants.MIN_EDGE_LENGTH = 1; + +/* + * World boundaries that layout operates on + */ +LayoutConstants.WORLD_BOUNDARY = 1000000; + +/* + * World boundaries that random positioning can be performed with + */ +LayoutConstants.INITIAL_WORLD_BOUNDARY = LayoutConstants.WORLD_BOUNDARY / 1000; + +/* + * Coordinates of the world center + */ +LayoutConstants.WORLD_CENTER_X = 1200; +LayoutConstants.WORLD_CENTER_Y = 900; + +module.exports = LayoutConstants; + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __nested_webpack_require_4947__) { + +"use strict"; + + +var LGraphObject = __nested_webpack_require_4947__(2); +var IGeometry = __nested_webpack_require_4947__(8); +var IMath = __nested_webpack_require_4947__(9); + +function LEdge(source, target, vEdge) { + LGraphObject.call(this, vEdge); + + this.isOverlapingSourceAndTarget = false; + this.vGraphObject = vEdge; + this.bendpoints = []; + this.source = source; + this.target = target; +} + +LEdge.prototype = Object.create(LGraphObject.prototype); + +for (var prop in LGraphObject) { + LEdge[prop] = LGraphObject[prop]; +} + +LEdge.prototype.getSource = function () { + return this.source; +}; + +LEdge.prototype.getTarget = function () { + return this.target; +}; + +LEdge.prototype.isInterGraph = function () { + return this.isInterGraph; +}; + +LEdge.prototype.getLength = function () { + return this.length; +}; + +LEdge.prototype.isOverlapingSourceAndTarget = function () { + return this.isOverlapingSourceAndTarget; +}; + +LEdge.prototype.getBendpoints = function () { + return this.bendpoints; +}; + +LEdge.prototype.getLca = function () { + return this.lca; +}; + +LEdge.prototype.getSourceInLca = function () { + return this.sourceInLca; +}; + +LEdge.prototype.getTargetInLca = function () { + return this.targetInLca; +}; + +LEdge.prototype.getOtherEnd = function (node) { + if (this.source === node) { + return this.target; + } else if (this.target === node) { + return this.source; + } else { + throw "Node is not incident with this edge"; + } +}; + +LEdge.prototype.getOtherEndInGraph = function (node, graph) { + var otherEnd = this.getOtherEnd(node); + var root = graph.getGraphManager().getRoot(); + + while (true) { + if (otherEnd.getOwner() == graph) { + return otherEnd; + } + + if (otherEnd.getOwner() == root) { + break; + } + + otherEnd = otherEnd.getOwner().getParent(); + } + + return null; +}; + +LEdge.prototype.updateLength = function () { + var clipPointCoordinates = new Array(4); + + this.isOverlapingSourceAndTarget = IGeometry.getIntersection(this.target.getRect(), this.source.getRect(), clipPointCoordinates); + + if (!this.isOverlapingSourceAndTarget) { + this.lengthX = clipPointCoordinates[0] - clipPointCoordinates[2]; + this.lengthY = clipPointCoordinates[1] - clipPointCoordinates[3]; + + if (Math.abs(this.lengthX) < 1.0) { + this.lengthX = IMath.sign(this.lengthX); + } + + if (Math.abs(this.lengthY) < 1.0) { + this.lengthY = IMath.sign(this.lengthY); + } + + this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY); + } +}; + +LEdge.prototype.updateLengthSimple = function () { + this.lengthX = this.target.getCenterX() - this.source.getCenterX(); + this.lengthY = this.target.getCenterY() - this.source.getCenterY(); + + if (Math.abs(this.lengthX) < 1.0) { + this.lengthX = IMath.sign(this.lengthX); + } + + if (Math.abs(this.lengthY) < 1.0) { + this.lengthY = IMath.sign(this.lengthY); + } + + this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY); +}; + +module.exports = LEdge; + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function LGraphObject(vGraphObject) { + this.vGraphObject = vGraphObject; +} + +module.exports = LGraphObject; + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __nested_webpack_require_8167__) { + +"use strict"; + + +var LGraphObject = __nested_webpack_require_8167__(2); +var Integer = __nested_webpack_require_8167__(10); +var RectangleD = __nested_webpack_require_8167__(13); +var LayoutConstants = __nested_webpack_require_8167__(0); +var RandomSeed = __nested_webpack_require_8167__(16); +var PointD = __nested_webpack_require_8167__(4); + +function LNode(gm, loc, size, vNode) { + //Alternative constructor 1 : LNode(LGraphManager gm, Point loc, Dimension size, Object vNode) + if (size == null && vNode == null) { + vNode = loc; + } + + LGraphObject.call(this, vNode); + + //Alternative constructor 2 : LNode(Layout layout, Object vNode) + if (gm.graphManager != null) gm = gm.graphManager; + + this.estimatedSize = Integer.MIN_VALUE; + this.inclusionTreeDepth = Integer.MAX_VALUE; + this.vGraphObject = vNode; + this.edges = []; + this.graphManager = gm; + + if (size != null && loc != null) this.rect = new RectangleD(loc.x, loc.y, size.width, size.height);else this.rect = new RectangleD(); +} + +LNode.prototype = Object.create(LGraphObject.prototype); +for (var prop in LGraphObject) { + LNode[prop] = LGraphObject[prop]; +} + +LNode.prototype.getEdges = function () { + return this.edges; +}; + +LNode.prototype.getChild = function () { + return this.child; +}; + +LNode.prototype.getOwner = function () { + // if (this.owner != null) { + // if (!(this.owner == null || this.owner.getNodes().indexOf(this) > -1)) { + // throw "assert failed"; + // } + // } + + return this.owner; +}; + +LNode.prototype.getWidth = function () { + return this.rect.width; +}; + +LNode.prototype.setWidth = function (width) { + this.rect.width = width; +}; + +LNode.prototype.getHeight = function () { + return this.rect.height; +}; + +LNode.prototype.setHeight = function (height) { + this.rect.height = height; +}; + +LNode.prototype.getCenterX = function () { + return this.rect.x + this.rect.width / 2; +}; + +LNode.prototype.getCenterY = function () { + return this.rect.y + this.rect.height / 2; +}; + +LNode.prototype.getCenter = function () { + return new PointD(this.rect.x + this.rect.width / 2, this.rect.y + this.rect.height / 2); +}; + +LNode.prototype.getLocation = function () { + return new PointD(this.rect.x, this.rect.y); +}; + +LNode.prototype.getRect = function () { + return this.rect; +}; + +LNode.prototype.getDiagonal = function () { + return Math.sqrt(this.rect.width * this.rect.width + this.rect.height * this.rect.height); +}; + +/** + * This method returns half the diagonal length of this node. + */ +LNode.prototype.getHalfTheDiagonal = function () { + return Math.sqrt(this.rect.height * this.rect.height + this.rect.width * this.rect.width) / 2; +}; + +LNode.prototype.setRect = function (upperLeft, dimension) { + this.rect.x = upperLeft.x; + this.rect.y = upperLeft.y; + this.rect.width = dimension.width; + this.rect.height = dimension.height; +}; + +LNode.prototype.setCenter = function (cx, cy) { + this.rect.x = cx - this.rect.width / 2; + this.rect.y = cy - this.rect.height / 2; +}; + +LNode.prototype.setLocation = function (x, y) { + this.rect.x = x; + this.rect.y = y; +}; + +LNode.prototype.moveBy = function (dx, dy) { + this.rect.x += dx; + this.rect.y += dy; +}; + +LNode.prototype.getEdgeListToNode = function (to) { + var edgeList = []; + var edge; + var self = this; + + self.edges.forEach(function (edge) { + + if (edge.target == to) { + if (edge.source != self) throw "Incorrect edge source!"; + + edgeList.push(edge); + } + }); + + return edgeList; +}; + +LNode.prototype.getEdgesBetween = function (other) { + var edgeList = []; + var edge; + + var self = this; + self.edges.forEach(function (edge) { + + if (!(edge.source == self || edge.target == self)) throw "Incorrect edge source and/or target"; + + if (edge.target == other || edge.source == other) { + edgeList.push(edge); + } + }); + + return edgeList; +}; + +LNode.prototype.getNeighborsList = function () { + var neighbors = new Set(); + + var self = this; + self.edges.forEach(function (edge) { + + if (edge.source == self) { + neighbors.add(edge.target); + } else { + if (edge.target != self) { + throw "Incorrect incidency!"; + } + + neighbors.add(edge.source); + } + }); + + return neighbors; +}; + +LNode.prototype.withChildren = function () { + var withNeighborsList = new Set(); + var childNode; + var children; + + withNeighborsList.add(this); + + if (this.child != null) { + var nodes = this.child.getNodes(); + for (var i = 0; i < nodes.length; i++) { + childNode = nodes[i]; + children = childNode.withChildren(); + children.forEach(function (node) { + withNeighborsList.add(node); + }); + } + } + + return withNeighborsList; +}; + +LNode.prototype.getNoOfChildren = function () { + var noOfChildren = 0; + var childNode; + + if (this.child == null) { + noOfChildren = 1; + } else { + var nodes = this.child.getNodes(); + for (var i = 0; i < nodes.length; i++) { + childNode = nodes[i]; + + noOfChildren += childNode.getNoOfChildren(); + } + } + + if (noOfChildren == 0) { + noOfChildren = 1; + } + return noOfChildren; +}; + +LNode.prototype.getEstimatedSize = function () { + if (this.estimatedSize == Integer.MIN_VALUE) { + throw "assert failed"; + } + return this.estimatedSize; +}; + +LNode.prototype.calcEstimatedSize = function () { + if (this.child == null) { + return this.estimatedSize = (this.rect.width + this.rect.height) / 2; + } else { + this.estimatedSize = this.child.calcEstimatedSize(); + this.rect.width = this.estimatedSize; + this.rect.height = this.estimatedSize; + + return this.estimatedSize; + } +}; + +LNode.prototype.scatter = function () { + var randomCenterX; + var randomCenterY; + + var minX = -LayoutConstants.INITIAL_WORLD_BOUNDARY; + var maxX = LayoutConstants.INITIAL_WORLD_BOUNDARY; + randomCenterX = LayoutConstants.WORLD_CENTER_X + RandomSeed.nextDouble() * (maxX - minX) + minX; + + var minY = -LayoutConstants.INITIAL_WORLD_BOUNDARY; + var maxY = LayoutConstants.INITIAL_WORLD_BOUNDARY; + randomCenterY = LayoutConstants.WORLD_CENTER_Y + RandomSeed.nextDouble() * (maxY - minY) + minY; + + this.rect.x = randomCenterX; + this.rect.y = randomCenterY; +}; + +LNode.prototype.updateBounds = function () { + if (this.getChild() == null) { + throw "assert failed"; + } + if (this.getChild().getNodes().length != 0) { + // wrap the children nodes by re-arranging the boundaries + var childGraph = this.getChild(); + childGraph.updateBounds(true); + + this.rect.x = childGraph.getLeft(); + this.rect.y = childGraph.getTop(); + + this.setWidth(childGraph.getRight() - childGraph.getLeft()); + this.setHeight(childGraph.getBottom() - childGraph.getTop()); + + // Update compound bounds considering its label properties + if (LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS) { + + var width = childGraph.getRight() - childGraph.getLeft(); + var height = childGraph.getBottom() - childGraph.getTop(); + + if (this.labelWidth > width) { + this.rect.x -= (this.labelWidth - width) / 2; + this.setWidth(this.labelWidth); + } + + if (this.labelHeight > height) { + if (this.labelPos == "center") { + this.rect.y -= (this.labelHeight - height) / 2; + } else if (this.labelPos == "top") { + this.rect.y -= this.labelHeight - height; + } + this.setHeight(this.labelHeight); + } + } + } +}; + +LNode.prototype.getInclusionTreeDepth = function () { + if (this.inclusionTreeDepth == Integer.MAX_VALUE) { + throw "assert failed"; + } + return this.inclusionTreeDepth; +}; + +LNode.prototype.transform = function (trans) { + var left = this.rect.x; + + if (left > LayoutConstants.WORLD_BOUNDARY) { + left = LayoutConstants.WORLD_BOUNDARY; + } else if (left < -LayoutConstants.WORLD_BOUNDARY) { + left = -LayoutConstants.WORLD_BOUNDARY; + } + + var top = this.rect.y; + + if (top > LayoutConstants.WORLD_BOUNDARY) { + top = LayoutConstants.WORLD_BOUNDARY; + } else if (top < -LayoutConstants.WORLD_BOUNDARY) { + top = -LayoutConstants.WORLD_BOUNDARY; + } + + var leftTop = new PointD(left, top); + var vLeftTop = trans.inverseTransformPoint(leftTop); + + this.setLocation(vLeftTop.x, vLeftTop.y); +}; + +LNode.prototype.getLeft = function () { + return this.rect.x; +}; + +LNode.prototype.getRight = function () { + return this.rect.x + this.rect.width; +}; + +LNode.prototype.getTop = function () { + return this.rect.y; +}; + +LNode.prototype.getBottom = function () { + return this.rect.y + this.rect.height; +}; + +LNode.prototype.getParent = function () { + if (this.owner == null) { + return null; + } + + return this.owner.getParent(); +}; + +module.exports = LNode; + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function PointD(x, y) { + if (x == null && y == null) { + this.x = 0; + this.y = 0; + } else { + this.x = x; + this.y = y; + } +} + +PointD.prototype.getX = function () { + return this.x; +}; + +PointD.prototype.getY = function () { + return this.y; +}; + +PointD.prototype.setX = function (x) { + this.x = x; +}; + +PointD.prototype.setY = function (y) { + this.y = y; +}; + +PointD.prototype.getDifference = function (pt) { + return new DimensionD(this.x - pt.x, this.y - pt.y); +}; + +PointD.prototype.getCopy = function () { + return new PointD(this.x, this.y); +}; + +PointD.prototype.translate = function (dim) { + this.x += dim.width; + this.y += dim.height; + return this; +}; + +module.exports = PointD; + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __nested_webpack_require_17549__) { + +"use strict"; + + +var LGraphObject = __nested_webpack_require_17549__(2); +var Integer = __nested_webpack_require_17549__(10); +var LayoutConstants = __nested_webpack_require_17549__(0); +var LGraphManager = __nested_webpack_require_17549__(6); +var LNode = __nested_webpack_require_17549__(3); +var LEdge = __nested_webpack_require_17549__(1); +var RectangleD = __nested_webpack_require_17549__(13); +var Point = __nested_webpack_require_17549__(12); +var LinkedList = __nested_webpack_require_17549__(11); + +function LGraph(parent, obj2, vGraph) { + LGraphObject.call(this, vGraph); + this.estimatedSize = Integer.MIN_VALUE; + this.margin = LayoutConstants.DEFAULT_GRAPH_MARGIN; + this.edges = []; + this.nodes = []; + this.isConnected = false; + this.parent = parent; + + if (obj2 != null && obj2 instanceof LGraphManager) { + this.graphManager = obj2; + } else if (obj2 != null && obj2 instanceof Layout) { + this.graphManager = obj2.graphManager; + } +} + +LGraph.prototype = Object.create(LGraphObject.prototype); +for (var prop in LGraphObject) { + LGraph[prop] = LGraphObject[prop]; +} + +LGraph.prototype.getNodes = function () { + return this.nodes; +}; + +LGraph.prototype.getEdges = function () { + return this.edges; +}; + +LGraph.prototype.getGraphManager = function () { + return this.graphManager; +}; + +LGraph.prototype.getParent = function () { + return this.parent; +}; + +LGraph.prototype.getLeft = function () { + return this.left; +}; + +LGraph.prototype.getRight = function () { + return this.right; +}; + +LGraph.prototype.getTop = function () { + return this.top; +}; + +LGraph.prototype.getBottom = function () { + return this.bottom; +}; + +LGraph.prototype.isConnected = function () { + return this.isConnected; +}; + +LGraph.prototype.add = function (obj1, sourceNode, targetNode) { + if (sourceNode == null && targetNode == null) { + var newNode = obj1; + if (this.graphManager == null) { + throw "Graph has no graph mgr!"; + } + if (this.getNodes().indexOf(newNode) > -1) { + throw "Node already in graph!"; + } + newNode.owner = this; + this.getNodes().push(newNode); + + return newNode; + } else { + var newEdge = obj1; + if (!(this.getNodes().indexOf(sourceNode) > -1 && this.getNodes().indexOf(targetNode) > -1)) { + throw "Source or target not in graph!"; + } + + if (!(sourceNode.owner == targetNode.owner && sourceNode.owner == this)) { + throw "Both owners must be this graph!"; + } + + if (sourceNode.owner != targetNode.owner) { + return null; + } + + // set source and target + newEdge.source = sourceNode; + newEdge.target = targetNode; + + // set as intra-graph edge + newEdge.isInterGraph = false; + + // add to graph edge list + this.getEdges().push(newEdge); + + // add to incidency lists + sourceNode.edges.push(newEdge); + + if (targetNode != sourceNode) { + targetNode.edges.push(newEdge); + } + + return newEdge; + } +}; + +LGraph.prototype.remove = function (obj) { + var node = obj; + if (obj instanceof LNode) { + if (node == null) { + throw "Node is null!"; + } + if (!(node.owner != null && node.owner == this)) { + throw "Owner graph is invalid!"; + } + if (this.graphManager == null) { + throw "Owner graph manager is invalid!"; + } + // remove incident edges first (make a copy to do it safely) + var edgesToBeRemoved = node.edges.slice(); + var edge; + var s = edgesToBeRemoved.length; + for (var i = 0; i < s; i++) { + edge = edgesToBeRemoved[i]; + + if (edge.isInterGraph) { + this.graphManager.remove(edge); + } else { + edge.source.owner.remove(edge); + } + } + + // now the node itself + var index = this.nodes.indexOf(node); + if (index == -1) { + throw "Node not in owner node list!"; + } + + this.nodes.splice(index, 1); + } else if (obj instanceof LEdge) { + var edge = obj; + if (edge == null) { + throw "Edge is null!"; + } + if (!(edge.source != null && edge.target != null)) { + throw "Source and/or target is null!"; + } + if (!(edge.source.owner != null && edge.target.owner != null && edge.source.owner == this && edge.target.owner == this)) { + throw "Source and/or target owner is invalid!"; + } + + var sourceIndex = edge.source.edges.indexOf(edge); + var targetIndex = edge.target.edges.indexOf(edge); + if (!(sourceIndex > -1 && targetIndex > -1)) { + throw "Source and/or target doesn't know this edge!"; + } + + edge.source.edges.splice(sourceIndex, 1); + + if (edge.target != edge.source) { + edge.target.edges.splice(targetIndex, 1); + } + + var index = edge.source.owner.getEdges().indexOf(edge); + if (index == -1) { + throw "Not in owner's edge list!"; + } + + edge.source.owner.getEdges().splice(index, 1); + } +}; + +LGraph.prototype.updateLeftTop = function () { + var top = Integer.MAX_VALUE; + var left = Integer.MAX_VALUE; + var nodeTop; + var nodeLeft; + var margin; + + var nodes = this.getNodes(); + var s = nodes.length; + + for (var i = 0; i < s; i++) { + var lNode = nodes[i]; + nodeTop = lNode.getTop(); + nodeLeft = lNode.getLeft(); + + if (top > nodeTop) { + top = nodeTop; + } + + if (left > nodeLeft) { + left = nodeLeft; + } + } + + // Do we have any nodes in this graph? + if (top == Integer.MAX_VALUE) { + return null; + } + + if (nodes[0].getParent().paddingLeft != undefined) { + margin = nodes[0].getParent().paddingLeft; + } else { + margin = this.margin; + } + + this.left = left - margin; + this.top = top - margin; + + // Apply the margins and return the result + return new Point(this.left, this.top); +}; + +LGraph.prototype.updateBounds = function (recursive) { + // calculate bounds + var left = Integer.MAX_VALUE; + var right = -Integer.MAX_VALUE; + var top = Integer.MAX_VALUE; + var bottom = -Integer.MAX_VALUE; + var nodeLeft; + var nodeRight; + var nodeTop; + var nodeBottom; + var margin; + + var nodes = this.nodes; + var s = nodes.length; + for (var i = 0; i < s; i++) { + var lNode = nodes[i]; + + if (recursive && lNode.child != null) { + lNode.updateBounds(); + } + nodeLeft = lNode.getLeft(); + nodeRight = lNode.getRight(); + nodeTop = lNode.getTop(); + nodeBottom = lNode.getBottom(); + + if (left > nodeLeft) { + left = nodeLeft; + } + + if (right < nodeRight) { + right = nodeRight; + } + + if (top > nodeTop) { + top = nodeTop; + } + + if (bottom < nodeBottom) { + bottom = nodeBottom; + } + } + + var boundingRect = new RectangleD(left, top, right - left, bottom - top); + if (left == Integer.MAX_VALUE) { + this.left = this.parent.getLeft(); + this.right = this.parent.getRight(); + this.top = this.parent.getTop(); + this.bottom = this.parent.getBottom(); + } + + if (nodes[0].getParent().paddingLeft != undefined) { + margin = nodes[0].getParent().paddingLeft; + } else { + margin = this.margin; + } + + this.left = boundingRect.x - margin; + this.right = boundingRect.x + boundingRect.width + margin; + this.top = boundingRect.y - margin; + this.bottom = boundingRect.y + boundingRect.height + margin; +}; + +LGraph.calculateBounds = function (nodes) { + var left = Integer.MAX_VALUE; + var right = -Integer.MAX_VALUE; + var top = Integer.MAX_VALUE; + var bottom = -Integer.MAX_VALUE; + var nodeLeft; + var nodeRight; + var nodeTop; + var nodeBottom; + + var s = nodes.length; + + for (var i = 0; i < s; i++) { + var lNode = nodes[i]; + nodeLeft = lNode.getLeft(); + nodeRight = lNode.getRight(); + nodeTop = lNode.getTop(); + nodeBottom = lNode.getBottom(); + + if (left > nodeLeft) { + left = nodeLeft; + } + + if (right < nodeRight) { + right = nodeRight; + } + + if (top > nodeTop) { + top = nodeTop; + } + + if (bottom < nodeBottom) { + bottom = nodeBottom; + } + } + + var boundingRect = new RectangleD(left, top, right - left, bottom - top); + + return boundingRect; +}; + +LGraph.prototype.getInclusionTreeDepth = function () { + if (this == this.graphManager.getRoot()) { + return 1; + } else { + return this.parent.getInclusionTreeDepth(); + } +}; + +LGraph.prototype.getEstimatedSize = function () { + if (this.estimatedSize == Integer.MIN_VALUE) { + throw "assert failed"; + } + return this.estimatedSize; +}; + +LGraph.prototype.calcEstimatedSize = function () { + var size = 0; + var nodes = this.nodes; + var s = nodes.length; + + for (var i = 0; i < s; i++) { + var lNode = nodes[i]; + size += lNode.calcEstimatedSize(); + } + + if (size == 0) { + this.estimatedSize = LayoutConstants.EMPTY_COMPOUND_NODE_SIZE; + } else { + this.estimatedSize = size / Math.sqrt(this.nodes.length); + } + + return this.estimatedSize; +}; + +LGraph.prototype.updateConnected = function () { + var self = this; + if (this.nodes.length == 0) { + this.isConnected = true; + return; + } + + var queue = new LinkedList(); + var visited = new Set(); + var currentNode = this.nodes[0]; + var neighborEdges; + var currentNeighbor; + var childrenOfNode = currentNode.withChildren(); + childrenOfNode.forEach(function (node) { + queue.push(node); + visited.add(node); + }); + + while (queue.length !== 0) { + currentNode = queue.shift(); + + // Traverse all neighbors of this node + neighborEdges = currentNode.getEdges(); + var size = neighborEdges.length; + for (var i = 0; i < size; i++) { + var neighborEdge = neighborEdges[i]; + currentNeighbor = neighborEdge.getOtherEndInGraph(currentNode, this); + + // Add unvisited neighbors to the list to visit + if (currentNeighbor != null && !visited.has(currentNeighbor)) { + var childrenOfNeighbor = currentNeighbor.withChildren(); + + childrenOfNeighbor.forEach(function (node) { + queue.push(node); + visited.add(node); + }); + } + } + } + + this.isConnected = false; + + if (visited.size >= this.nodes.length) { + var noOfVisitedInThisGraph = 0; + + visited.forEach(function (visitedNode) { + if (visitedNode.owner == self) { + noOfVisitedInThisGraph++; + } + }); + + if (noOfVisitedInThisGraph == this.nodes.length) { + this.isConnected = true; + } + } +}; + +module.exports = LGraph; + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __nested_webpack_require_27617__) { + +"use strict"; + + +var LGraph; +var LEdge = __nested_webpack_require_27617__(1); + +function LGraphManager(layout) { + LGraph = __nested_webpack_require_27617__(5); // It may be better to initilize this out of this function but it gives an error (Right-hand side of 'instanceof' is not callable) now. + this.layout = layout; + + this.graphs = []; + this.edges = []; +} + +LGraphManager.prototype.addRoot = function () { + var ngraph = this.layout.newGraph(); + var nnode = this.layout.newNode(null); + var root = this.add(ngraph, nnode); + this.setRootGraph(root); + return this.rootGraph; +}; + +LGraphManager.prototype.add = function (newGraph, parentNode, newEdge, sourceNode, targetNode) { + //there are just 2 parameters are passed then it adds an LGraph else it adds an LEdge + if (newEdge == null && sourceNode == null && targetNode == null) { + if (newGraph == null) { + throw "Graph is null!"; + } + if (parentNode == null) { + throw "Parent node is null!"; + } + if (this.graphs.indexOf(newGraph) > -1) { + throw "Graph already in this graph mgr!"; + } + + this.graphs.push(newGraph); + + if (newGraph.parent != null) { + throw "Already has a parent!"; + } + if (parentNode.child != null) { + throw "Already has a child!"; + } + + newGraph.parent = parentNode; + parentNode.child = newGraph; + + return newGraph; + } else { + //change the order of the parameters + targetNode = newEdge; + sourceNode = parentNode; + newEdge = newGraph; + var sourceGraph = sourceNode.getOwner(); + var targetGraph = targetNode.getOwner(); + + if (!(sourceGraph != null && sourceGraph.getGraphManager() == this)) { + throw "Source not in this graph mgr!"; + } + if (!(targetGraph != null && targetGraph.getGraphManager() == this)) { + throw "Target not in this graph mgr!"; + } + + if (sourceGraph == targetGraph) { + newEdge.isInterGraph = false; + return sourceGraph.add(newEdge, sourceNode, targetNode); + } else { + newEdge.isInterGraph = true; + + // set source and target + newEdge.source = sourceNode; + newEdge.target = targetNode; + + // add edge to inter-graph edge list + if (this.edges.indexOf(newEdge) > -1) { + throw "Edge already in inter-graph edge list!"; + } + + this.edges.push(newEdge); + + // add edge to source and target incidency lists + if (!(newEdge.source != null && newEdge.target != null)) { + throw "Edge source and/or target is null!"; + } + + if (!(newEdge.source.edges.indexOf(newEdge) == -1 && newEdge.target.edges.indexOf(newEdge) == -1)) { + throw "Edge already in source and/or target incidency list!"; + } + + newEdge.source.edges.push(newEdge); + newEdge.target.edges.push(newEdge); + + return newEdge; + } + } +}; + +LGraphManager.prototype.remove = function (lObj) { + if (lObj instanceof LGraph) { + var graph = lObj; + if (graph.getGraphManager() != this) { + throw "Graph not in this graph mgr"; + } + if (!(graph == this.rootGraph || graph.parent != null && graph.parent.graphManager == this)) { + throw "Invalid parent node!"; + } + + // first the edges (make a copy to do it safely) + var edgesToBeRemoved = []; + + edgesToBeRemoved = edgesToBeRemoved.concat(graph.getEdges()); + + var edge; + var s = edgesToBeRemoved.length; + for (var i = 0; i < s; i++) { + edge = edgesToBeRemoved[i]; + graph.remove(edge); + } + + // then the nodes (make a copy to do it safely) + var nodesToBeRemoved = []; + + nodesToBeRemoved = nodesToBeRemoved.concat(graph.getNodes()); + + var node; + s = nodesToBeRemoved.length; + for (var i = 0; i < s; i++) { + node = nodesToBeRemoved[i]; + graph.remove(node); + } + + // check if graph is the root + if (graph == this.rootGraph) { + this.setRootGraph(null); + } + + // now remove the graph itself + var index = this.graphs.indexOf(graph); + this.graphs.splice(index, 1); + + // also reset the parent of the graph + graph.parent = null; + } else if (lObj instanceof LEdge) { + edge = lObj; + if (edge == null) { + throw "Edge is null!"; + } + if (!edge.isInterGraph) { + throw "Not an inter-graph edge!"; + } + if (!(edge.source != null && edge.target != null)) { + throw "Source and/or target is null!"; + } + + // remove edge from source and target nodes' incidency lists + + if (!(edge.source.edges.indexOf(edge) != -1 && edge.target.edges.indexOf(edge) != -1)) { + throw "Source and/or target doesn't know this edge!"; + } + + var index = edge.source.edges.indexOf(edge); + edge.source.edges.splice(index, 1); + index = edge.target.edges.indexOf(edge); + edge.target.edges.splice(index, 1); + + // remove edge from owner graph manager's inter-graph edge list + + if (!(edge.source.owner != null && edge.source.owner.getGraphManager() != null)) { + throw "Edge owner graph or owner graph manager is null!"; + } + if (edge.source.owner.getGraphManager().edges.indexOf(edge) == -1) { + throw "Not in owner graph manager's edge list!"; + } + + var index = edge.source.owner.getGraphManager().edges.indexOf(edge); + edge.source.owner.getGraphManager().edges.splice(index, 1); + } +}; + +LGraphManager.prototype.updateBounds = function () { + this.rootGraph.updateBounds(true); +}; + +LGraphManager.prototype.getGraphs = function () { + return this.graphs; +}; + +LGraphManager.prototype.getAllNodes = function () { + if (this.allNodes == null) { + var nodeList = []; + var graphs = this.getGraphs(); + var s = graphs.length; + for (var i = 0; i < s; i++) { + nodeList = nodeList.concat(graphs[i].getNodes()); + } + this.allNodes = nodeList; + } + return this.allNodes; +}; + +LGraphManager.prototype.resetAllNodes = function () { + this.allNodes = null; +}; + +LGraphManager.prototype.resetAllEdges = function () { + this.allEdges = null; +}; + +LGraphManager.prototype.resetAllNodesToApplyGravitation = function () { + this.allNodesToApplyGravitation = null; +}; + +LGraphManager.prototype.getAllEdges = function () { + if (this.allEdges == null) { + var edgeList = []; + var graphs = this.getGraphs(); + var s = graphs.length; + for (var i = 0; i < graphs.length; i++) { + edgeList = edgeList.concat(graphs[i].getEdges()); + } + + edgeList = edgeList.concat(this.edges); + + this.allEdges = edgeList; + } + return this.allEdges; +}; + +LGraphManager.prototype.getAllNodesToApplyGravitation = function () { + return this.allNodesToApplyGravitation; +}; + +LGraphManager.prototype.setAllNodesToApplyGravitation = function (nodeList) { + if (this.allNodesToApplyGravitation != null) { + throw "assert failed"; + } + + this.allNodesToApplyGravitation = nodeList; +}; + +LGraphManager.prototype.getRoot = function () { + return this.rootGraph; +}; + +LGraphManager.prototype.setRootGraph = function (graph) { + if (graph.getGraphManager() != this) { + throw "Root not in this graph mgr!"; + } + + this.rootGraph = graph; + // root graph must have a root node associated with it for convenience + if (graph.parent == null) { + graph.parent = this.layout.newNode("Root node"); + } +}; + +LGraphManager.prototype.getLayout = function () { + return this.layout; +}; + +LGraphManager.prototype.isOneAncestorOfOther = function (firstNode, secondNode) { + if (!(firstNode != null && secondNode != null)) { + throw "assert failed"; + } + + if (firstNode == secondNode) { + return true; + } + // Is second node an ancestor of the first one? + var ownerGraph = firstNode.getOwner(); + var parentNode; + + do { + parentNode = ownerGraph.getParent(); + + if (parentNode == null) { + break; + } + + if (parentNode == secondNode) { + return true; + } + + ownerGraph = parentNode.getOwner(); + if (ownerGraph == null) { + break; + } + } while (true); + // Is first node an ancestor of the second one? + ownerGraph = secondNode.getOwner(); + + do { + parentNode = ownerGraph.getParent(); + + if (parentNode == null) { + break; + } + + if (parentNode == firstNode) { + return true; + } + + ownerGraph = parentNode.getOwner(); + if (ownerGraph == null) { + break; + } + } while (true); + + return false; +}; + +LGraphManager.prototype.calcLowestCommonAncestors = function () { + var edge; + var sourceNode; + var targetNode; + var sourceAncestorGraph; + var targetAncestorGraph; + + var edges = this.getAllEdges(); + var s = edges.length; + for (var i = 0; i < s; i++) { + edge = edges[i]; + + sourceNode = edge.source; + targetNode = edge.target; + edge.lca = null; + edge.sourceInLca = sourceNode; + edge.targetInLca = targetNode; + + if (sourceNode == targetNode) { + edge.lca = sourceNode.getOwner(); + continue; + } + + sourceAncestorGraph = sourceNode.getOwner(); + + while (edge.lca == null) { + edge.targetInLca = targetNode; + targetAncestorGraph = targetNode.getOwner(); + + while (edge.lca == null) { + if (targetAncestorGraph == sourceAncestorGraph) { + edge.lca = targetAncestorGraph; + break; + } + + if (targetAncestorGraph == this.rootGraph) { + break; + } + + if (edge.lca != null) { + throw "assert failed"; + } + edge.targetInLca = targetAncestorGraph.getParent(); + targetAncestorGraph = edge.targetInLca.getOwner(); + } + + if (sourceAncestorGraph == this.rootGraph) { + break; + } + + if (edge.lca == null) { + edge.sourceInLca = sourceAncestorGraph.getParent(); + sourceAncestorGraph = edge.sourceInLca.getOwner(); + } + } + + if (edge.lca == null) { + throw "assert failed"; + } + } +}; + +LGraphManager.prototype.calcLowestCommonAncestor = function (firstNode, secondNode) { + if (firstNode == secondNode) { + return firstNode.getOwner(); + } + var firstOwnerGraph = firstNode.getOwner(); + + do { + if (firstOwnerGraph == null) { + break; + } + var secondOwnerGraph = secondNode.getOwner(); + + do { + if (secondOwnerGraph == null) { + break; + } + + if (secondOwnerGraph == firstOwnerGraph) { + return secondOwnerGraph; + } + secondOwnerGraph = secondOwnerGraph.getParent().getOwner(); + } while (true); + + firstOwnerGraph = firstOwnerGraph.getParent().getOwner(); + } while (true); + + return firstOwnerGraph; +}; + +LGraphManager.prototype.calcInclusionTreeDepths = function (graph, depth) { + if (graph == null && depth == null) { + graph = this.rootGraph; + depth = 1; + } + var node; + + var nodes = graph.getNodes(); + var s = nodes.length; + for (var i = 0; i < s; i++) { + node = nodes[i]; + node.inclusionTreeDepth = depth; + + if (node.child != null) { + this.calcInclusionTreeDepths(node.child, depth + 1); + } + } +}; + +LGraphManager.prototype.includesInvalidEdge = function () { + var edge; + + var s = this.edges.length; + for (var i = 0; i < s; i++) { + edge = this.edges[i]; + + if (this.isOneAncestorOfOther(edge.source, edge.target)) { + return true; + } + } + return false; +}; + +module.exports = LGraphManager; + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __nested_webpack_require_38707__) { + +"use strict"; + + +var LayoutConstants = __nested_webpack_require_38707__(0); + +function FDLayoutConstants() {} + +//FDLayoutConstants inherits static props in LayoutConstants +for (var prop in LayoutConstants) { + FDLayoutConstants[prop] = LayoutConstants[prop]; +} + +FDLayoutConstants.MAX_ITERATIONS = 2500; + +FDLayoutConstants.DEFAULT_EDGE_LENGTH = 50; +FDLayoutConstants.DEFAULT_SPRING_STRENGTH = 0.45; +FDLayoutConstants.DEFAULT_REPULSION_STRENGTH = 4500.0; +FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = 0.4; +FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = 1.0; +FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = 3.8; +FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = 1.5; +FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION = true; +FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION = true; +FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = 0.3; +FDLayoutConstants.COOLING_ADAPTATION_FACTOR = 0.33; +FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT = 1000; +FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT = 5000; +FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL = 100.0; +FDLayoutConstants.MAX_NODE_DISPLACEMENT = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL * 3; +FDLayoutConstants.MIN_REPULSION_DIST = FDLayoutConstants.DEFAULT_EDGE_LENGTH / 10.0; +FDLayoutConstants.CONVERGENCE_CHECK_PERIOD = 100; +FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = 0.1; +FDLayoutConstants.MIN_EDGE_LENGTH = 1; +FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD = 10; + +module.exports = FDLayoutConstants; + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __nested_webpack_require_40298__) { + +"use strict"; + + +/** + * This class maintains a list of static geometry related utility methods. + * + * + * Copyright: i-Vis Research Group, Bilkent University, 2007 - present + */ + +var Point = __nested_webpack_require_40298__(12); + +function IGeometry() {} + +/** + * This method calculates *half* the amount in x and y directions of the two + * input rectangles needed to separate them keeping their respective + * positioning, and returns the result in the input array. An input + * separation buffer added to the amount in both directions. We assume that + * the two rectangles do intersect. + */ +IGeometry.calcSeparationAmount = function (rectA, rectB, overlapAmount, separationBuffer) { + if (!rectA.intersects(rectB)) { + throw "assert failed"; + } + + var directions = new Array(2); + + this.decideDirectionsForOverlappingNodes(rectA, rectB, directions); + + overlapAmount[0] = Math.min(rectA.getRight(), rectB.getRight()) - Math.max(rectA.x, rectB.x); + overlapAmount[1] = Math.min(rectA.getBottom(), rectB.getBottom()) - Math.max(rectA.y, rectB.y); + + // update the overlapping amounts for the following cases: + if (rectA.getX() <= rectB.getX() && rectA.getRight() >= rectB.getRight()) { + /* Case x.1: + * + * rectA + * | | + * | _________ | + * | | | | + * |________|_______|______| + * | | + * | | + * rectB + */ + overlapAmount[0] += Math.min(rectB.getX() - rectA.getX(), rectA.getRight() - rectB.getRight()); + } else if (rectB.getX() <= rectA.getX() && rectB.getRight() >= rectA.getRight()) { + /* Case x.2: + * + * rectB + * | | + * | _________ | + * | | | | + * |________|_______|______| + * | | + * | | + * rectA + */ + overlapAmount[0] += Math.min(rectA.getX() - rectB.getX(), rectB.getRight() - rectA.getRight()); + } + if (rectA.getY() <= rectB.getY() && rectA.getBottom() >= rectB.getBottom()) { + /* Case y.1: + * ________ rectA + * | + * | + * ______|____ rectB + * | | + * | | + * ______|____| + * | + * | + * |________ + * + */ + overlapAmount[1] += Math.min(rectB.getY() - rectA.getY(), rectA.getBottom() - rectB.getBottom()); + } else if (rectB.getY() <= rectA.getY() && rectB.getBottom() >= rectA.getBottom()) { + /* Case y.2: + * ________ rectB + * | + * | + * ______|____ rectA + * | | + * | | + * ______|____| + * | + * | + * |________ + * + */ + overlapAmount[1] += Math.min(rectA.getY() - rectB.getY(), rectB.getBottom() - rectA.getBottom()); + } + + // find slope of the line passes two centers + var slope = Math.abs((rectB.getCenterY() - rectA.getCenterY()) / (rectB.getCenterX() - rectA.getCenterX())); + // if centers are overlapped + if (rectB.getCenterY() === rectA.getCenterY() && rectB.getCenterX() === rectA.getCenterX()) { + // assume the slope is 1 (45 degree) + slope = 1.0; + } + + var moveByY = slope * overlapAmount[0]; + var moveByX = overlapAmount[1] / slope; + if (overlapAmount[0] < moveByX) { + moveByX = overlapAmount[0]; + } else { + moveByY = overlapAmount[1]; + } + // return half the amount so that if each rectangle is moved by these + // amounts in opposite directions, overlap will be resolved + overlapAmount[0] = -1 * directions[0] * (moveByX / 2 + separationBuffer); + overlapAmount[1] = -1 * directions[1] * (moveByY / 2 + separationBuffer); +}; + +/** + * This method decides the separation direction of overlapping nodes + * + * if directions[0] = -1, then rectA goes left + * if directions[0] = 1, then rectA goes right + * if directions[1] = -1, then rectA goes up + * if directions[1] = 1, then rectA goes down + */ +IGeometry.decideDirectionsForOverlappingNodes = function (rectA, rectB, directions) { + if (rectA.getCenterX() < rectB.getCenterX()) { + directions[0] = -1; + } else { + directions[0] = 1; + } + + if (rectA.getCenterY() < rectB.getCenterY()) { + directions[1] = -1; + } else { + directions[1] = 1; + } +}; + +/** + * This method calculates the intersection (clipping) points of the two + * input rectangles with line segment defined by the centers of these two + * rectangles. The clipping points are saved in the input double array and + * whether or not the two rectangles overlap is returned. + */ +IGeometry.getIntersection2 = function (rectA, rectB, result) { + //result[0-1] will contain clipPoint of rectA, result[2-3] will contain clipPoint of rectB + var p1x = rectA.getCenterX(); + var p1y = rectA.getCenterY(); + var p2x = rectB.getCenterX(); + var p2y = rectB.getCenterY(); + + //if two rectangles intersect, then clipping points are centers + if (rectA.intersects(rectB)) { + result[0] = p1x; + result[1] = p1y; + result[2] = p2x; + result[3] = p2y; + return true; + } + //variables for rectA + var topLeftAx = rectA.getX(); + var topLeftAy = rectA.getY(); + var topRightAx = rectA.getRight(); + var bottomLeftAx = rectA.getX(); + var bottomLeftAy = rectA.getBottom(); + var bottomRightAx = rectA.getRight(); + var halfWidthA = rectA.getWidthHalf(); + var halfHeightA = rectA.getHeightHalf(); + //variables for rectB + var topLeftBx = rectB.getX(); + var topLeftBy = rectB.getY(); + var topRightBx = rectB.getRight(); + var bottomLeftBx = rectB.getX(); + var bottomLeftBy = rectB.getBottom(); + var bottomRightBx = rectB.getRight(); + var halfWidthB = rectB.getWidthHalf(); + var halfHeightB = rectB.getHeightHalf(); + + //flag whether clipping points are found + var clipPointAFound = false; + var clipPointBFound = false; + + // line is vertical + if (p1x === p2x) { + if (p1y > p2y) { + result[0] = p1x; + result[1] = topLeftAy; + result[2] = p2x; + result[3] = bottomLeftBy; + return false; + } else if (p1y < p2y) { + result[0] = p1x; + result[1] = bottomLeftAy; + result[2] = p2x; + result[3] = topLeftBy; + return false; + } else { + //not line, return null; + } + } + // line is horizontal + else if (p1y === p2y) { + if (p1x > p2x) { + result[0] = topLeftAx; + result[1] = p1y; + result[2] = topRightBx; + result[3] = p2y; + return false; + } else if (p1x < p2x) { + result[0] = topRightAx; + result[1] = p1y; + result[2] = topLeftBx; + result[3] = p2y; + return false; + } else { + //not valid line, return null; + } + } else { + //slopes of rectA's and rectB's diagonals + var slopeA = rectA.height / rectA.width; + var slopeB = rectB.height / rectB.width; + + //slope of line between center of rectA and center of rectB + var slopePrime = (p2y - p1y) / (p2x - p1x); + var cardinalDirectionA = void 0; + var cardinalDirectionB = void 0; + var tempPointAx = void 0; + var tempPointAy = void 0; + var tempPointBx = void 0; + var tempPointBy = void 0; + + //determine whether clipping point is the corner of nodeA + if (-slopeA === slopePrime) { + if (p1x > p2x) { + result[0] = bottomLeftAx; + result[1] = bottomLeftAy; + clipPointAFound = true; + } else { + result[0] = topRightAx; + result[1] = topLeftAy; + clipPointAFound = true; + } + } else if (slopeA === slopePrime) { + if (p1x > p2x) { + result[0] = topLeftAx; + result[1] = topLeftAy; + clipPointAFound = true; + } else { + result[0] = bottomRightAx; + result[1] = bottomLeftAy; + clipPointAFound = true; + } + } + + //determine whether clipping point is the corner of nodeB + if (-slopeB === slopePrime) { + if (p2x > p1x) { + result[2] = bottomLeftBx; + result[3] = bottomLeftBy; + clipPointBFound = true; + } else { + result[2] = topRightBx; + result[3] = topLeftBy; + clipPointBFound = true; + } + } else if (slopeB === slopePrime) { + if (p2x > p1x) { + result[2] = topLeftBx; + result[3] = topLeftBy; + clipPointBFound = true; + } else { + result[2] = bottomRightBx; + result[3] = bottomLeftBy; + clipPointBFound = true; + } + } + + //if both clipping points are corners + if (clipPointAFound && clipPointBFound) { + return false; + } + + //determine Cardinal Direction of rectangles + if (p1x > p2x) { + if (p1y > p2y) { + cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 4); + cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 2); + } else { + cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 3); + cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 1); + } + } else { + if (p1y > p2y) { + cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 1); + cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 3); + } else { + cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 2); + cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 4); + } + } + //calculate clipping Point if it is not found before + if (!clipPointAFound) { + switch (cardinalDirectionA) { + case 1: + tempPointAy = topLeftAy; + tempPointAx = p1x + -halfHeightA / slopePrime; + result[0] = tempPointAx; + result[1] = tempPointAy; + break; + case 2: + tempPointAx = bottomRightAx; + tempPointAy = p1y + halfWidthA * slopePrime; + result[0] = tempPointAx; + result[1] = tempPointAy; + break; + case 3: + tempPointAy = bottomLeftAy; + tempPointAx = p1x + halfHeightA / slopePrime; + result[0] = tempPointAx; + result[1] = tempPointAy; + break; + case 4: + tempPointAx = bottomLeftAx; + tempPointAy = p1y + -halfWidthA * slopePrime; + result[0] = tempPointAx; + result[1] = tempPointAy; + break; + } + } + if (!clipPointBFound) { + switch (cardinalDirectionB) { + case 1: + tempPointBy = topLeftBy; + tempPointBx = p2x + -halfHeightB / slopePrime; + result[2] = tempPointBx; + result[3] = tempPointBy; + break; + case 2: + tempPointBx = bottomRightBx; + tempPointBy = p2y + halfWidthB * slopePrime; + result[2] = tempPointBx; + result[3] = tempPointBy; + break; + case 3: + tempPointBy = bottomLeftBy; + tempPointBx = p2x + halfHeightB / slopePrime; + result[2] = tempPointBx; + result[3] = tempPointBy; + break; + case 4: + tempPointBx = bottomLeftBx; + tempPointBy = p2y + -halfWidthB * slopePrime; + result[2] = tempPointBx; + result[3] = tempPointBy; + break; + } + } + } + return false; +}; + +/** + * This method returns in which cardinal direction does input point stays + * 1: North + * 2: East + * 3: South + * 4: West + */ +IGeometry.getCardinalDirection = function (slope, slopePrime, line) { + if (slope > slopePrime) { + return line; + } else { + return 1 + line % 4; + } +}; + +/** + * This method calculates the intersection of the two lines defined by + * point pairs (s1,s2) and (f1,f2). + */ +IGeometry.getIntersection = function (s1, s2, f1, f2) { + if (f2 == null) { + return this.getIntersection2(s1, s2, f1); + } + + var x1 = s1.x; + var y1 = s1.y; + var x2 = s2.x; + var y2 = s2.y; + var x3 = f1.x; + var y3 = f1.y; + var x4 = f2.x; + var y4 = f2.y; + var x = void 0, + y = void 0; // intersection point + var a1 = void 0, + a2 = void 0, + b1 = void 0, + b2 = void 0, + c1 = void 0, + c2 = void 0; // coefficients of line eqns. + var denom = void 0; + + a1 = y2 - y1; + b1 = x1 - x2; + c1 = x2 * y1 - x1 * y2; // { a1*x + b1*y + c1 = 0 is line 1 } + + a2 = y4 - y3; + b2 = x3 - x4; + c2 = x4 * y3 - x3 * y4; // { a2*x + b2*y + c2 = 0 is line 2 } + + denom = a1 * b2 - a2 * b1; + + if (denom === 0) { + return null; + } + + x = (b1 * c2 - b2 * c1) / denom; + y = (a2 * c1 - a1 * c2) / denom; + + return new Point(x, y); +}; + +/** + * This method finds and returns the angle of the vector from the + x-axis + * in clockwise direction (compatible w/ Java coordinate system!). + */ +IGeometry.angleOfVector = function (Cx, Cy, Nx, Ny) { + var C_angle = void 0; + + if (Cx !== Nx) { + C_angle = Math.atan((Ny - Cy) / (Nx - Cx)); + + if (Nx < Cx) { + C_angle += Math.PI; + } else if (Ny < Cy) { + C_angle += this.TWO_PI; + } + } else if (Ny < Cy) { + C_angle = this.ONE_AND_HALF_PI; // 270 degrees + } else { + C_angle = this.HALF_PI; // 90 degrees + } + + return C_angle; +}; + +/** + * This method checks whether the given two line segments (one with point + * p1 and p2, the other with point p3 and p4) intersect at a point other + * than these points. + */ +IGeometry.doIntersect = function (p1, p2, p3, p4) { + var a = p1.x; + var b = p1.y; + var c = p2.x; + var d = p2.y; + var p = p3.x; + var q = p3.y; + var r = p4.x; + var s = p4.y; + var det = (c - a) * (s - q) - (r - p) * (d - b); + + if (det === 0) { + return false; + } else { + var lambda = ((s - q) * (r - a) + (p - r) * (s - b)) / det; + var gamma = ((b - d) * (r - a) + (c - a) * (s - b)) / det; + return 0 < lambda && lambda < 1 && 0 < gamma && gamma < 1; + } +}; + +// ----------------------------------------------------------------------------- +// Section: Class Constants +// ----------------------------------------------------------------------------- +/** + * Some useful pre-calculated constants + */ +IGeometry.HALF_PI = 0.5 * Math.PI; +IGeometry.ONE_AND_HALF_PI = 1.5 * Math.PI; +IGeometry.TWO_PI = 2.0 * Math.PI; +IGeometry.THREE_PI = 3.0 * Math.PI; + +module.exports = IGeometry; + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function IMath() {} + +/** + * This method returns the sign of the input value. + */ +IMath.sign = function (value) { + if (value > 0) { + return 1; + } else if (value < 0) { + return -1; + } else { + return 0; + } +}; + +IMath.floor = function (value) { + return value < 0 ? Math.ceil(value) : Math.floor(value); +}; + +IMath.ceil = function (value) { + return value < 0 ? Math.floor(value) : Math.ceil(value); +}; + +module.exports = IMath; + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function Integer() {} + +Integer.MAX_VALUE = 2147483647; +Integer.MIN_VALUE = -2147483648; + +module.exports = Integer; + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var nodeFrom = function nodeFrom(value) { + return { value: value, next: null, prev: null }; +}; + +var add = function add(prev, node, next, list) { + if (prev !== null) { + prev.next = node; + } else { + list.head = node; + } + + if (next !== null) { + next.prev = node; + } else { + list.tail = node; + } + + node.prev = prev; + node.next = next; + + list.length++; + + return node; +}; + +var _remove = function _remove(node, list) { + var prev = node.prev, + next = node.next; + + + if (prev !== null) { + prev.next = next; + } else { + list.head = next; + } + + if (next !== null) { + next.prev = prev; + } else { + list.tail = prev; + } + + node.prev = node.next = null; + + list.length--; + + return node; +}; + +var LinkedList = function () { + function LinkedList(vals) { + var _this = this; + + _classCallCheck(this, LinkedList); + + this.length = 0; + this.head = null; + this.tail = null; + + if (vals != null) { + vals.forEach(function (v) { + return _this.push(v); + }); + } + } + + _createClass(LinkedList, [{ + key: "size", + value: function size() { + return this.length; + } + }, { + key: "insertBefore", + value: function insertBefore(val, otherNode) { + return add(otherNode.prev, nodeFrom(val), otherNode, this); + } + }, { + key: "insertAfter", + value: function insertAfter(val, otherNode) { + return add(otherNode, nodeFrom(val), otherNode.next, this); + } + }, { + key: "insertNodeBefore", + value: function insertNodeBefore(newNode, otherNode) { + return add(otherNode.prev, newNode, otherNode, this); + } + }, { + key: "insertNodeAfter", + value: function insertNodeAfter(newNode, otherNode) { + return add(otherNode, newNode, otherNode.next, this); + } + }, { + key: "push", + value: function push(val) { + return add(this.tail, nodeFrom(val), null, this); + } + }, { + key: "unshift", + value: function unshift(val) { + return add(null, nodeFrom(val), this.head, this); + } + }, { + key: "remove", + value: function remove(node) { + return _remove(node, this); + } + }, { + key: "pop", + value: function pop() { + return _remove(this.tail, this).value; + } + }, { + key: "popNode", + value: function popNode() { + return _remove(this.tail, this); + } + }, { + key: "shift", + value: function shift() { + return _remove(this.head, this).value; + } + }, { + key: "shiftNode", + value: function shiftNode() { + return _remove(this.head, this); + } + }, { + key: "get_object_at", + value: function get_object_at(index) { + if (index <= this.length()) { + var i = 1; + var current = this.head; + while (i < index) { + current = current.next; + i++; + } + return current.value; + } + } + }, { + key: "set_object_at", + value: function set_object_at(index, value) { + if (index <= this.length()) { + var i = 1; + var current = this.head; + while (i < index) { + current = current.next; + i++; + } + current.value = value; + } + } + }]); + + return LinkedList; +}(); + +module.exports = LinkedList; + +/***/ }), +/* 12 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/* + *This class is the javascript implementation of the Point.java class in jdk + */ +function Point(x, y, p) { + this.x = null; + this.y = null; + if (x == null && y == null && p == null) { + this.x = 0; + this.y = 0; + } else if (typeof x == 'number' && typeof y == 'number' && p == null) { + this.x = x; + this.y = y; + } else if (x.constructor.name == 'Point' && y == null && p == null) { + p = x; + this.x = p.x; + this.y = p.y; + } +} + +Point.prototype.getX = function () { + return this.x; +}; + +Point.prototype.getY = function () { + return this.y; +}; + +Point.prototype.getLocation = function () { + return new Point(this.x, this.y); +}; + +Point.prototype.setLocation = function (x, y, p) { + if (x.constructor.name == 'Point' && y == null && p == null) { + p = x; + this.setLocation(p.x, p.y); + } else if (typeof x == 'number' && typeof y == 'number' && p == null) { + //if both parameters are integer just move (x,y) location + if (parseInt(x) == x && parseInt(y) == y) { + this.move(x, y); + } else { + this.x = Math.floor(x + 0.5); + this.y = Math.floor(y + 0.5); + } + } +}; + +Point.prototype.move = function (x, y) { + this.x = x; + this.y = y; +}; + +Point.prototype.translate = function (dx, dy) { + this.x += dx; + this.y += dy; +}; + +Point.prototype.equals = function (obj) { + if (obj.constructor.name == "Point") { + var pt = obj; + return this.x == pt.x && this.y == pt.y; + } + return this == obj; +}; + +Point.prototype.toString = function () { + return new Point().constructor.name + "[x=" + this.x + ",y=" + this.y + "]"; +}; + +module.exports = Point; + +/***/ }), +/* 13 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function RectangleD(x, y, width, height) { + this.x = 0; + this.y = 0; + this.width = 0; + this.height = 0; + + if (x != null && y != null && width != null && height != null) { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + } +} + +RectangleD.prototype.getX = function () { + return this.x; +}; + +RectangleD.prototype.setX = function (x) { + this.x = x; +}; + +RectangleD.prototype.getY = function () { + return this.y; +}; + +RectangleD.prototype.setY = function (y) { + this.y = y; +}; + +RectangleD.prototype.getWidth = function () { + return this.width; +}; + +RectangleD.prototype.setWidth = function (width) { + this.width = width; +}; + +RectangleD.prototype.getHeight = function () { + return this.height; +}; + +RectangleD.prototype.setHeight = function (height) { + this.height = height; +}; + +RectangleD.prototype.getRight = function () { + return this.x + this.width; +}; + +RectangleD.prototype.getBottom = function () { + return this.y + this.height; +}; + +RectangleD.prototype.intersects = function (a) { + if (this.getRight() < a.x) { + return false; + } + + if (this.getBottom() < a.y) { + return false; + } + + if (a.getRight() < this.x) { + return false; + } + + if (a.getBottom() < this.y) { + return false; + } + + return true; +}; + +RectangleD.prototype.getCenterX = function () { + return this.x + this.width / 2; +}; + +RectangleD.prototype.getMinX = function () { + return this.getX(); +}; + +RectangleD.prototype.getMaxX = function () { + return this.getX() + this.width; +}; + +RectangleD.prototype.getCenterY = function () { + return this.y + this.height / 2; +}; + +RectangleD.prototype.getMinY = function () { + return this.getY(); +}; + +RectangleD.prototype.getMaxY = function () { + return this.getY() + this.height; +}; + +RectangleD.prototype.getWidthHalf = function () { + return this.width / 2; +}; + +RectangleD.prototype.getHeightHalf = function () { + return this.height / 2; +}; + +module.exports = RectangleD; + +/***/ }), +/* 14 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +function UniqueIDGeneretor() {} + +UniqueIDGeneretor.lastID = 0; + +UniqueIDGeneretor.createID = function (obj) { + if (UniqueIDGeneretor.isPrimitive(obj)) { + return obj; + } + if (obj.uniqueID != null) { + return obj.uniqueID; + } + obj.uniqueID = UniqueIDGeneretor.getString(); + UniqueIDGeneretor.lastID++; + return obj.uniqueID; +}; + +UniqueIDGeneretor.getString = function (id) { + if (id == null) id = UniqueIDGeneretor.lastID; + return "Object#" + id + ""; +}; + +UniqueIDGeneretor.isPrimitive = function (arg) { + var type = typeof arg === "undefined" ? "undefined" : _typeof(arg); + return arg == null || type != "object" && type != "function"; +}; + +module.exports = UniqueIDGeneretor; + +/***/ }), +/* 15 */ +/***/ (function(module, exports, __nested_webpack_require_64072__) { + +"use strict"; + + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var LayoutConstants = __nested_webpack_require_64072__(0); +var LGraphManager = __nested_webpack_require_64072__(6); +var LNode = __nested_webpack_require_64072__(3); +var LEdge = __nested_webpack_require_64072__(1); +var LGraph = __nested_webpack_require_64072__(5); +var PointD = __nested_webpack_require_64072__(4); +var Transform = __nested_webpack_require_64072__(17); +var Emitter = __nested_webpack_require_64072__(27); + +function Layout(isRemoteUse) { + Emitter.call(this); + + //Layout Quality: 0:draft, 1:default, 2:proof + this.layoutQuality = LayoutConstants.QUALITY; + //Whether layout should create bendpoints as needed or not + this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; + //Whether layout should be incremental or not + this.incremental = LayoutConstants.DEFAULT_INCREMENTAL; + //Whether we animate from before to after layout node positions + this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT; + //Whether we animate the layout process or not + this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT; + //Number iterations that should be done between two successive animations + this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD; + /** + * Whether or not leaf nodes (non-compound nodes) are of uniform sizes. When + * they are, both spring and repulsion forces between two leaf nodes can be + * calculated without the expensive clipping point calculations, resulting + * in major speed-up. + */ + this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES; + /** + * This is used for creation of bendpoints by using dummy nodes and edges. + * Maps an LEdge to its dummy bendpoint path. + */ + this.edgeToDummyNodes = new Map(); + this.graphManager = new LGraphManager(this); + this.isLayoutFinished = false; + this.isSubLayout = false; + this.isRemoteUse = false; + + if (isRemoteUse != null) { + this.isRemoteUse = isRemoteUse; + } +} + +Layout.RANDOM_SEED = 1; + +Layout.prototype = Object.create(Emitter.prototype); + +Layout.prototype.getGraphManager = function () { + return this.graphManager; +}; + +Layout.prototype.getAllNodes = function () { + return this.graphManager.getAllNodes(); +}; + +Layout.prototype.getAllEdges = function () { + return this.graphManager.getAllEdges(); +}; + +Layout.prototype.getAllNodesToApplyGravitation = function () { + return this.graphManager.getAllNodesToApplyGravitation(); +}; + +Layout.prototype.newGraphManager = function () { + var gm = new LGraphManager(this); + this.graphManager = gm; + return gm; +}; + +Layout.prototype.newGraph = function (vGraph) { + return new LGraph(null, this.graphManager, vGraph); +}; + +Layout.prototype.newNode = function (vNode) { + return new LNode(this.graphManager, vNode); +}; + +Layout.prototype.newEdge = function (vEdge) { + return new LEdge(null, null, vEdge); +}; + +Layout.prototype.checkLayoutSuccess = function () { + return this.graphManager.getRoot() == null || this.graphManager.getRoot().getNodes().length == 0 || this.graphManager.includesInvalidEdge(); +}; + +Layout.prototype.runLayout = function () { + this.isLayoutFinished = false; + + if (this.tilingPreLayout) { + this.tilingPreLayout(); + } + + this.initParameters(); + var isLayoutSuccessfull; + + if (this.checkLayoutSuccess()) { + isLayoutSuccessfull = false; + } else { + isLayoutSuccessfull = this.layout(); + } + + if (LayoutConstants.ANIMATE === 'during') { + // If this is a 'during' layout animation. Layout is not finished yet. + // We need to perform these in index.js when layout is really finished. + return false; + } + + if (isLayoutSuccessfull) { + if (!this.isSubLayout) { + this.doPostLayout(); + } + } + + if (this.tilingPostLayout) { + this.tilingPostLayout(); + } + + this.isLayoutFinished = true; + + return isLayoutSuccessfull; +}; + +/** + * This method performs the operations required after layout. + */ +Layout.prototype.doPostLayout = function () { + //assert !isSubLayout : "Should not be called on sub-layout!"; + // Propagate geometric changes to v-level objects + if (!this.incremental) { + this.transform(); + } + this.update(); +}; + +/** + * This method updates the geometry of the target graph according to + * calculated layout. + */ +Layout.prototype.update2 = function () { + // update bend points + if (this.createBendsAsNeeded) { + this.createBendpointsFromDummyNodes(); + + // reset all edges, since the topology has changed + this.graphManager.resetAllEdges(); + } + + // perform edge, node and root updates if layout is not called + // remotely + if (!this.isRemoteUse) { + // update all edges + var edge; + var allEdges = this.graphManager.getAllEdges(); + for (var i = 0; i < allEdges.length; i++) { + edge = allEdges[i]; + // this.update(edge); + } + + // recursively update nodes + var node; + var nodes = this.graphManager.getRoot().getNodes(); + for (var i = 0; i < nodes.length; i++) { + node = nodes[i]; + // this.update(node); + } + + // update root graph + this.update(this.graphManager.getRoot()); + } +}; + +Layout.prototype.update = function (obj) { + if (obj == null) { + this.update2(); + } else if (obj instanceof LNode) { + var node = obj; + if (node.getChild() != null) { + // since node is compound, recursively update child nodes + var nodes = node.getChild().getNodes(); + for (var i = 0; i < nodes.length; i++) { + update(nodes[i]); + } + } + + // if the l-level node is associated with a v-level graph object, + // then it is assumed that the v-level node implements the + // interface Updatable. + if (node.vGraphObject != null) { + // cast to Updatable without any type check + var vNode = node.vGraphObject; + + // call the update method of the interface + vNode.update(node); + } + } else if (obj instanceof LEdge) { + var edge = obj; + // if the l-level edge is associated with a v-level graph object, + // then it is assumed that the v-level edge implements the + // interface Updatable. + + if (edge.vGraphObject != null) { + // cast to Updatable without any type check + var vEdge = edge.vGraphObject; + + // call the update method of the interface + vEdge.update(edge); + } + } else if (obj instanceof LGraph) { + var graph = obj; + // if the l-level graph is associated with a v-level graph object, + // then it is assumed that the v-level object implements the + // interface Updatable. + + if (graph.vGraphObject != null) { + // cast to Updatable without any type check + var vGraph = graph.vGraphObject; + + // call the update method of the interface + vGraph.update(graph); + } + } +}; + +/** + * This method is used to set all layout parameters to default values + * determined at compile time. + */ +Layout.prototype.initParameters = function () { + if (!this.isSubLayout) { + this.layoutQuality = LayoutConstants.QUALITY; + this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT; + this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD; + this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT; + this.incremental = LayoutConstants.DEFAULT_INCREMENTAL; + this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; + this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES; + } + + if (this.animationDuringLayout) { + this.animationOnLayout = false; + } +}; + +Layout.prototype.transform = function (newLeftTop) { + if (newLeftTop == undefined) { + this.transform(new PointD(0, 0)); + } else { + // create a transformation object (from Eclipse to layout). When an + // inverse transform is applied, we get upper-left coordinate of the + // drawing or the root graph at given input coordinate (some margins + // already included in calculation of left-top). + + var trans = new Transform(); + var leftTop = this.graphManager.getRoot().updateLeftTop(); + + if (leftTop != null) { + trans.setWorldOrgX(newLeftTop.x); + trans.setWorldOrgY(newLeftTop.y); + + trans.setDeviceOrgX(leftTop.x); + trans.setDeviceOrgY(leftTop.y); + + var nodes = this.getAllNodes(); + var node; + + for (var i = 0; i < nodes.length; i++) { + node = nodes[i]; + node.transform(trans); + } + } + } +}; + +Layout.prototype.positionNodesRandomly = function (graph) { + + if (graph == undefined) { + //assert !this.incremental; + this.positionNodesRandomly(this.getGraphManager().getRoot()); + this.getGraphManager().getRoot().updateBounds(true); + } else { + var lNode; + var childGraph; + + var nodes = graph.getNodes(); + for (var i = 0; i < nodes.length; i++) { + lNode = nodes[i]; + childGraph = lNode.getChild(); + + if (childGraph == null) { + lNode.scatter(); + } else if (childGraph.getNodes().length == 0) { + lNode.scatter(); + } else { + this.positionNodesRandomly(childGraph); + lNode.updateBounds(); + } + } + } +}; + +/** + * This method returns a list of trees where each tree is represented as a + * list of l-nodes. The method returns a list of size 0 when: + * - The graph is not flat or + * - One of the component(s) of the graph is not a tree. + */ +Layout.prototype.getFlatForest = function () { + var flatForest = []; + var isForest = true; + + // Quick reference for all nodes in the graph manager associated with + // this layout. The list should not be changed. + var allNodes = this.graphManager.getRoot().getNodes(); + + // First be sure that the graph is flat + var isFlat = true; + + for (var i = 0; i < allNodes.length; i++) { + if (allNodes[i].getChild() != null) { + isFlat = false; + } + } + + // Return empty forest if the graph is not flat. + if (!isFlat) { + return flatForest; + } + + // Run BFS for each component of the graph. + + var visited = new Set(); + var toBeVisited = []; + var parents = new Map(); + var unProcessedNodes = []; + + unProcessedNodes = unProcessedNodes.concat(allNodes); + + // Each iteration of this loop finds a component of the graph and + // decides whether it is a tree or not. If it is a tree, adds it to the + // forest and continued with the next component. + + while (unProcessedNodes.length > 0 && isForest) { + toBeVisited.push(unProcessedNodes[0]); + + // Start the BFS. Each iteration of this loop visits a node in a + // BFS manner. + while (toBeVisited.length > 0 && isForest) { + //pool operation + var currentNode = toBeVisited[0]; + toBeVisited.splice(0, 1); + visited.add(currentNode); + + // Traverse all neighbors of this node + var neighborEdges = currentNode.getEdges(); + + for (var i = 0; i < neighborEdges.length; i++) { + var currentNeighbor = neighborEdges[i].getOtherEnd(currentNode); + + // If BFS is not growing from this neighbor. + if (parents.get(currentNode) != currentNeighbor) { + // We haven't previously visited this neighbor. + if (!visited.has(currentNeighbor)) { + toBeVisited.push(currentNeighbor); + parents.set(currentNeighbor, currentNode); + } + // Since we have previously visited this neighbor and + // this neighbor is not parent of currentNode, given + // graph contains a component that is not tree, hence + // it is not a forest. + else { + isForest = false; + break; + } + } + } + } + + // The graph contains a component that is not a tree. Empty + // previously found trees. The method will end. + if (!isForest) { + flatForest = []; + } + // Save currently visited nodes as a tree in our forest. Reset + // visited and parents lists. Continue with the next component of + // the graph, if any. + else { + var temp = [].concat(_toConsumableArray(visited)); + flatForest.push(temp); + //flatForest = flatForest.concat(temp); + //unProcessedNodes.removeAll(visited); + for (var i = 0; i < temp.length; i++) { + var value = temp[i]; + var index = unProcessedNodes.indexOf(value); + if (index > -1) { + unProcessedNodes.splice(index, 1); + } + } + visited = new Set(); + parents = new Map(); + } + } + + return flatForest; +}; + +/** + * This method creates dummy nodes (an l-level node with minimal dimensions) + * for the given edge (one per bendpoint). The existing l-level structure + * is updated accordingly. + */ +Layout.prototype.createDummyNodesForBendpoints = function (edge) { + var dummyNodes = []; + var prev = edge.source; + + var graph = this.graphManager.calcLowestCommonAncestor(edge.source, edge.target); + + for (var i = 0; i < edge.bendpoints.length; i++) { + // create new dummy node + var dummyNode = this.newNode(null); + dummyNode.setRect(new Point(0, 0), new Dimension(1, 1)); + + graph.add(dummyNode); + + // create new dummy edge between prev and dummy node + var dummyEdge = this.newEdge(null); + this.graphManager.add(dummyEdge, prev, dummyNode); + + dummyNodes.add(dummyNode); + prev = dummyNode; + } + + var dummyEdge = this.newEdge(null); + this.graphManager.add(dummyEdge, prev, edge.target); + + this.edgeToDummyNodes.set(edge, dummyNodes); + + // remove real edge from graph manager if it is inter-graph + if (edge.isInterGraph()) { + this.graphManager.remove(edge); + } + // else, remove the edge from the current graph + else { + graph.remove(edge); + } + + return dummyNodes; +}; + +/** + * This method creates bendpoints for edges from the dummy nodes + * at l-level. + */ +Layout.prototype.createBendpointsFromDummyNodes = function () { + var edges = []; + edges = edges.concat(this.graphManager.getAllEdges()); + edges = [].concat(_toConsumableArray(this.edgeToDummyNodes.keys())).concat(edges); + + for (var k = 0; k < edges.length; k++) { + var lEdge = edges[k]; + + if (lEdge.bendpoints.length > 0) { + var path = this.edgeToDummyNodes.get(lEdge); + + for (var i = 0; i < path.length; i++) { + var dummyNode = path[i]; + var p = new PointD(dummyNode.getCenterX(), dummyNode.getCenterY()); + + // update bendpoint's location according to dummy node + var ebp = lEdge.bendpoints.get(i); + ebp.x = p.x; + ebp.y = p.y; + + // remove the dummy node, dummy edges incident with this + // dummy node is also removed (within the remove method) + dummyNode.getOwner().remove(dummyNode); + } + + // add the real edge to graph + this.graphManager.add(lEdge, lEdge.source, lEdge.target); + } + } +}; + +Layout.transform = function (sliderValue, defaultValue, minDiv, maxMul) { + if (minDiv != undefined && maxMul != undefined) { + var value = defaultValue; + + if (sliderValue <= 50) { + var minValue = defaultValue / minDiv; + value -= (defaultValue - minValue) / 50 * (50 - sliderValue); + } else { + var maxValue = defaultValue * maxMul; + value += (maxValue - defaultValue) / 50 * (sliderValue - 50); + } + + return value; + } else { + var a, b; + + if (sliderValue <= 50) { + a = 9.0 * defaultValue / 500.0; + b = defaultValue / 10.0; + } else { + a = 9.0 * defaultValue / 50.0; + b = -8 * defaultValue; + } + + return a * sliderValue + b; + } +}; + +/** + * This method finds and returns the center of the given nodes, assuming + * that the given nodes form a tree in themselves. + */ +Layout.findCenterOfTree = function (nodes) { + var list = []; + list = list.concat(nodes); + + var removedNodes = []; + var remainingDegrees = new Map(); + var foundCenter = false; + var centerNode = null; + + if (list.length == 1 || list.length == 2) { + foundCenter = true; + centerNode = list[0]; + } + + for (var i = 0; i < list.length; i++) { + var node = list[i]; + var degree = node.getNeighborsList().size; + remainingDegrees.set(node, node.getNeighborsList().size); + + if (degree == 1) { + removedNodes.push(node); + } + } + + var tempList = []; + tempList = tempList.concat(removedNodes); + + while (!foundCenter) { + var tempList2 = []; + tempList2 = tempList2.concat(tempList); + tempList = []; + + for (var i = 0; i < list.length; i++) { + var node = list[i]; + + var index = list.indexOf(node); + if (index >= 0) { + list.splice(index, 1); + } + + var neighbours = node.getNeighborsList(); + + neighbours.forEach(function (neighbour) { + if (removedNodes.indexOf(neighbour) < 0) { + var otherDegree = remainingDegrees.get(neighbour); + var newDegree = otherDegree - 1; + + if (newDegree == 1) { + tempList.push(neighbour); + } + + remainingDegrees.set(neighbour, newDegree); + } + }); + } + + removedNodes = removedNodes.concat(tempList); + + if (list.length == 1 || list.length == 2) { + foundCenter = true; + centerNode = list[0]; + } + } + + return centerNode; +}; + +/** + * During the coarsening process, this layout may be referenced by two graph managers + * this setter function grants access to change the currently being used graph manager + */ +Layout.prototype.setGraphManager = function (gm) { + this.graphManager = gm; +}; + +module.exports = Layout; + +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function RandomSeed() {} +// adapted from: https://stackoverflow.com/a/19303725 +RandomSeed.seed = 1; +RandomSeed.x = 0; + +RandomSeed.nextDouble = function () { + RandomSeed.x = Math.sin(RandomSeed.seed++) * 10000; + return RandomSeed.x - Math.floor(RandomSeed.x); +}; + +module.exports = RandomSeed; + +/***/ }), +/* 17 */ +/***/ (function(module, exports, __nested_webpack_require_81860__) { + +"use strict"; + + +var PointD = __nested_webpack_require_81860__(4); + +function Transform(x, y) { + this.lworldOrgX = 0.0; + this.lworldOrgY = 0.0; + this.ldeviceOrgX = 0.0; + this.ldeviceOrgY = 0.0; + this.lworldExtX = 1.0; + this.lworldExtY = 1.0; + this.ldeviceExtX = 1.0; + this.ldeviceExtY = 1.0; +} + +Transform.prototype.getWorldOrgX = function () { + return this.lworldOrgX; +}; + +Transform.prototype.setWorldOrgX = function (wox) { + this.lworldOrgX = wox; +}; + +Transform.prototype.getWorldOrgY = function () { + return this.lworldOrgY; +}; + +Transform.prototype.setWorldOrgY = function (woy) { + this.lworldOrgY = woy; +}; + +Transform.prototype.getWorldExtX = function () { + return this.lworldExtX; +}; + +Transform.prototype.setWorldExtX = function (wex) { + this.lworldExtX = wex; +}; + +Transform.prototype.getWorldExtY = function () { + return this.lworldExtY; +}; + +Transform.prototype.setWorldExtY = function (wey) { + this.lworldExtY = wey; +}; + +/* Device related */ + +Transform.prototype.getDeviceOrgX = function () { + return this.ldeviceOrgX; +}; + +Transform.prototype.setDeviceOrgX = function (dox) { + this.ldeviceOrgX = dox; +}; + +Transform.prototype.getDeviceOrgY = function () { + return this.ldeviceOrgY; +}; + +Transform.prototype.setDeviceOrgY = function (doy) { + this.ldeviceOrgY = doy; +}; + +Transform.prototype.getDeviceExtX = function () { + return this.ldeviceExtX; +}; + +Transform.prototype.setDeviceExtX = function (dex) { + this.ldeviceExtX = dex; +}; + +Transform.prototype.getDeviceExtY = function () { + return this.ldeviceExtY; +}; + +Transform.prototype.setDeviceExtY = function (dey) { + this.ldeviceExtY = dey; +}; + +Transform.prototype.transformX = function (x) { + var xDevice = 0.0; + var worldExtX = this.lworldExtX; + if (worldExtX != 0.0) { + xDevice = this.ldeviceOrgX + (x - this.lworldOrgX) * this.ldeviceExtX / worldExtX; + } + + return xDevice; +}; + +Transform.prototype.transformY = function (y) { + var yDevice = 0.0; + var worldExtY = this.lworldExtY; + if (worldExtY != 0.0) { + yDevice = this.ldeviceOrgY + (y - this.lworldOrgY) * this.ldeviceExtY / worldExtY; + } + + return yDevice; +}; + +Transform.prototype.inverseTransformX = function (x) { + var xWorld = 0.0; + var deviceExtX = this.ldeviceExtX; + if (deviceExtX != 0.0) { + xWorld = this.lworldOrgX + (x - this.ldeviceOrgX) * this.lworldExtX / deviceExtX; + } + + return xWorld; +}; + +Transform.prototype.inverseTransformY = function (y) { + var yWorld = 0.0; + var deviceExtY = this.ldeviceExtY; + if (deviceExtY != 0.0) { + yWorld = this.lworldOrgY + (y - this.ldeviceOrgY) * this.lworldExtY / deviceExtY; + } + return yWorld; +}; + +Transform.prototype.inverseTransformPoint = function (inPoint) { + var outPoint = new PointD(this.inverseTransformX(inPoint.x), this.inverseTransformY(inPoint.y)); + return outPoint; +}; + +module.exports = Transform; + +/***/ }), +/* 18 */ +/***/ (function(module, exports, __nested_webpack_require_84747__) { + +"use strict"; + + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var Layout = __nested_webpack_require_84747__(15); +var FDLayoutConstants = __nested_webpack_require_84747__(7); +var LayoutConstants = __nested_webpack_require_84747__(0); +var IGeometry = __nested_webpack_require_84747__(8); +var IMath = __nested_webpack_require_84747__(9); + +function FDLayout() { + Layout.call(this); + + this.useSmartIdealEdgeLengthCalculation = FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION; + this.idealEdgeLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH; + this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH; + this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH; + this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH; + this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH; + this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR; + this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR; + this.displacementThresholdPerNode = 3.0 * FDLayoutConstants.DEFAULT_EDGE_LENGTH / 100; + this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; + this.initialCoolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; + this.totalDisplacement = 0.0; + this.oldTotalDisplacement = 0.0; + this.maxIterations = FDLayoutConstants.MAX_ITERATIONS; +} + +FDLayout.prototype = Object.create(Layout.prototype); + +for (var prop in Layout) { + FDLayout[prop] = Layout[prop]; +} + +FDLayout.prototype.initParameters = function () { + Layout.prototype.initParameters.call(this, arguments); + + this.totalIterations = 0; + this.notAnimatedIterations = 0; + + this.useFRGridVariant = FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION; + + this.grid = []; +}; + +FDLayout.prototype.calcIdealEdgeLengths = function () { + var edge; + var lcaDepth; + var source; + var target; + var sizeOfSourceInLca; + var sizeOfTargetInLca; + + var allEdges = this.getGraphManager().getAllEdges(); + for (var i = 0; i < allEdges.length; i++) { + edge = allEdges[i]; + + edge.idealLength = this.idealEdgeLength; + + if (edge.isInterGraph) { + source = edge.getSource(); + target = edge.getTarget(); + + sizeOfSourceInLca = edge.getSourceInLca().getEstimatedSize(); + sizeOfTargetInLca = edge.getTargetInLca().getEstimatedSize(); + + if (this.useSmartIdealEdgeLengthCalculation) { + edge.idealLength += sizeOfSourceInLca + sizeOfTargetInLca - 2 * LayoutConstants.SIMPLE_NODE_SIZE; + } + + lcaDepth = edge.getLca().getInclusionTreeDepth(); + + edge.idealLength += FDLayoutConstants.DEFAULT_EDGE_LENGTH * FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR * (source.getInclusionTreeDepth() + target.getInclusionTreeDepth() - 2 * lcaDepth); + } + } +}; + +FDLayout.prototype.initSpringEmbedder = function () { + + var s = this.getAllNodes().length; + if (this.incremental) { + if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) { + this.coolingFactor = Math.max(this.coolingFactor * FDLayoutConstants.COOLING_ADAPTATION_FACTOR, this.coolingFactor - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * this.coolingFactor * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR)); + } + this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL; + } else { + if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) { + this.coolingFactor = Math.max(FDLayoutConstants.COOLING_ADAPTATION_FACTOR, 1.0 - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR)); + } else { + this.coolingFactor = 1.0; + } + this.initialCoolingFactor = this.coolingFactor; + this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT; + } + + this.maxIterations = Math.max(this.getAllNodes().length * 5, this.maxIterations); + + this.totalDisplacementThreshold = this.displacementThresholdPerNode * this.getAllNodes().length; + + this.repulsionRange = this.calcRepulsionRange(); +}; + +FDLayout.prototype.calcSpringForces = function () { + var lEdges = this.getAllEdges(); + var edge; + + for (var i = 0; i < lEdges.length; i++) { + edge = lEdges[i]; + + this.calcSpringForce(edge, edge.idealLength); + } +}; + +FDLayout.prototype.calcRepulsionForces = function () { + var gridUpdateAllowed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + var forceToNodeSurroundingUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + var i, j; + var nodeA, nodeB; + var lNodes = this.getAllNodes(); + var processedNodeSet; + + if (this.useFRGridVariant) { + if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed) { + this.updateGrid(); + } + + processedNodeSet = new Set(); + + // calculate repulsion forces between each nodes and its surrounding + for (i = 0; i < lNodes.length; i++) { + nodeA = lNodes[i]; + this.calculateRepulsionForceOfANode(nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate); + processedNodeSet.add(nodeA); + } + } else { + for (i = 0; i < lNodes.length; i++) { + nodeA = lNodes[i]; + + for (j = i + 1; j < lNodes.length; j++) { + nodeB = lNodes[j]; + + // If both nodes are not members of the same graph, skip. + if (nodeA.getOwner() != nodeB.getOwner()) { + continue; + } + + this.calcRepulsionForce(nodeA, nodeB); + } + } + } +}; + +FDLayout.prototype.calcGravitationalForces = function () { + var node; + var lNodes = this.getAllNodesToApplyGravitation(); + + for (var i = 0; i < lNodes.length; i++) { + node = lNodes[i]; + this.calcGravitationalForce(node); + } +}; + +FDLayout.prototype.moveNodes = function () { + var lNodes = this.getAllNodes(); + var node; + + for (var i = 0; i < lNodes.length; i++) { + node = lNodes[i]; + node.move(); + } +}; + +FDLayout.prototype.calcSpringForce = function (edge, idealLength) { + var sourceNode = edge.getSource(); + var targetNode = edge.getTarget(); + + var length; + var springForce; + var springForceX; + var springForceY; + + // Update edge length + if (this.uniformLeafNodeSizes && sourceNode.getChild() == null && targetNode.getChild() == null) { + edge.updateLengthSimple(); + } else { + edge.updateLength(); + + if (edge.isOverlapingSourceAndTarget) { + return; + } + } + + length = edge.getLength(); + + if (length == 0) return; + + // Calculate spring forces + springForce = this.springConstant * (length - idealLength); + + // Project force onto x and y axes + springForceX = springForce * (edge.lengthX / length); + springForceY = springForce * (edge.lengthY / length); + + // Apply forces on the end nodes + sourceNode.springForceX += springForceX; + sourceNode.springForceY += springForceY; + targetNode.springForceX -= springForceX; + targetNode.springForceY -= springForceY; +}; + +FDLayout.prototype.calcRepulsionForce = function (nodeA, nodeB) { + var rectA = nodeA.getRect(); + var rectB = nodeB.getRect(); + var overlapAmount = new Array(2); + var clipPoints = new Array(4); + var distanceX; + var distanceY; + var distanceSquared; + var distance; + var repulsionForce; + var repulsionForceX; + var repulsionForceY; + + if (rectA.intersects(rectB)) // two nodes overlap + { + // calculate separation amount in x and y directions + IGeometry.calcSeparationAmount(rectA, rectB, overlapAmount, FDLayoutConstants.DEFAULT_EDGE_LENGTH / 2.0); + + repulsionForceX = 2 * overlapAmount[0]; + repulsionForceY = 2 * overlapAmount[1]; + + var childrenConstant = nodeA.noOfChildren * nodeB.noOfChildren / (nodeA.noOfChildren + nodeB.noOfChildren); + + // Apply forces on the two nodes + nodeA.repulsionForceX -= childrenConstant * repulsionForceX; + nodeA.repulsionForceY -= childrenConstant * repulsionForceY; + nodeB.repulsionForceX += childrenConstant * repulsionForceX; + nodeB.repulsionForceY += childrenConstant * repulsionForceY; + } else // no overlap + { + // calculate distance + + if (this.uniformLeafNodeSizes && nodeA.getChild() == null && nodeB.getChild() == null) // simply base repulsion on distance of node centers + { + distanceX = rectB.getCenterX() - rectA.getCenterX(); + distanceY = rectB.getCenterY() - rectA.getCenterY(); + } else // use clipping points + { + IGeometry.getIntersection(rectA, rectB, clipPoints); + + distanceX = clipPoints[2] - clipPoints[0]; + distanceY = clipPoints[3] - clipPoints[1]; + } + + // No repulsion range. FR grid variant should take care of this. + if (Math.abs(distanceX) < FDLayoutConstants.MIN_REPULSION_DIST) { + distanceX = IMath.sign(distanceX) * FDLayoutConstants.MIN_REPULSION_DIST; + } + + if (Math.abs(distanceY) < FDLayoutConstants.MIN_REPULSION_DIST) { + distanceY = IMath.sign(distanceY) * FDLayoutConstants.MIN_REPULSION_DIST; + } + + distanceSquared = distanceX * distanceX + distanceY * distanceY; + distance = Math.sqrt(distanceSquared); + + repulsionForce = this.repulsionConstant * nodeA.noOfChildren * nodeB.noOfChildren / distanceSquared; + + // Project force onto x and y axes + repulsionForceX = repulsionForce * distanceX / distance; + repulsionForceY = repulsionForce * distanceY / distance; + + // Apply forces on the two nodes + nodeA.repulsionForceX -= repulsionForceX; + nodeA.repulsionForceY -= repulsionForceY; + nodeB.repulsionForceX += repulsionForceX; + nodeB.repulsionForceY += repulsionForceY; + } +}; + +FDLayout.prototype.calcGravitationalForce = function (node) { + var ownerGraph; + var ownerCenterX; + var ownerCenterY; + var distanceX; + var distanceY; + var absDistanceX; + var absDistanceY; + var estimatedSize; + ownerGraph = node.getOwner(); + + ownerCenterX = (ownerGraph.getRight() + ownerGraph.getLeft()) / 2; + ownerCenterY = (ownerGraph.getTop() + ownerGraph.getBottom()) / 2; + distanceX = node.getCenterX() - ownerCenterX; + distanceY = node.getCenterY() - ownerCenterY; + absDistanceX = Math.abs(distanceX) + node.getWidth() / 2; + absDistanceY = Math.abs(distanceY) + node.getHeight() / 2; + + if (node.getOwner() == this.graphManager.getRoot()) // in the root graph + { + estimatedSize = ownerGraph.getEstimatedSize() * this.gravityRangeFactor; + + if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) { + node.gravitationForceX = -this.gravityConstant * distanceX; + node.gravitationForceY = -this.gravityConstant * distanceY; + } + } else // inside a compound + { + estimatedSize = ownerGraph.getEstimatedSize() * this.compoundGravityRangeFactor; + + if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) { + node.gravitationForceX = -this.gravityConstant * distanceX * this.compoundGravityConstant; + node.gravitationForceY = -this.gravityConstant * distanceY * this.compoundGravityConstant; + } + } +}; + +FDLayout.prototype.isConverged = function () { + var converged; + var oscilating = false; + + if (this.totalIterations > this.maxIterations / 3) { + oscilating = Math.abs(this.totalDisplacement - this.oldTotalDisplacement) < 2; + } + + converged = this.totalDisplacement < this.totalDisplacementThreshold; + + this.oldTotalDisplacement = this.totalDisplacement; + + return converged || oscilating; +}; + +FDLayout.prototype.animate = function () { + if (this.animationDuringLayout && !this.isSubLayout) { + if (this.notAnimatedIterations == this.animationPeriod) { + this.update(); + this.notAnimatedIterations = 0; + } else { + this.notAnimatedIterations++; + } + } +}; + +//This method calculates the number of children (weight) for all nodes +FDLayout.prototype.calcNoOfChildrenForAllNodes = function () { + var node; + var allNodes = this.graphManager.getAllNodes(); + + for (var i = 0; i < allNodes.length; i++) { + node = allNodes[i]; + node.noOfChildren = node.getNoOfChildren(); + } +}; + +// ----------------------------------------------------------------------------- +// Section: FR-Grid Variant Repulsion Force Calculation +// ----------------------------------------------------------------------------- + +FDLayout.prototype.calcGrid = function (graph) { + + var sizeX = 0; + var sizeY = 0; + + sizeX = parseInt(Math.ceil((graph.getRight() - graph.getLeft()) / this.repulsionRange)); + sizeY = parseInt(Math.ceil((graph.getBottom() - graph.getTop()) / this.repulsionRange)); + + var grid = new Array(sizeX); + + for (var i = 0; i < sizeX; i++) { + grid[i] = new Array(sizeY); + } + + for (var i = 0; i < sizeX; i++) { + for (var j = 0; j < sizeY; j++) { + grid[i][j] = new Array(); + } + } + + return grid; +}; + +FDLayout.prototype.addNodeToGrid = function (v, left, top) { + + var startX = 0; + var finishX = 0; + var startY = 0; + var finishY = 0; + + startX = parseInt(Math.floor((v.getRect().x - left) / this.repulsionRange)); + finishX = parseInt(Math.floor((v.getRect().width + v.getRect().x - left) / this.repulsionRange)); + startY = parseInt(Math.floor((v.getRect().y - top) / this.repulsionRange)); + finishY = parseInt(Math.floor((v.getRect().height + v.getRect().y - top) / this.repulsionRange)); + + for (var i = startX; i <= finishX; i++) { + for (var j = startY; j <= finishY; j++) { + this.grid[i][j].push(v); + v.setGridCoordinates(startX, finishX, startY, finishY); + } + } +}; + +FDLayout.prototype.updateGrid = function () { + var i; + var nodeA; + var lNodes = this.getAllNodes(); + + this.grid = this.calcGrid(this.graphManager.getRoot()); + + // put all nodes to proper grid cells + for (i = 0; i < lNodes.length; i++) { + nodeA = lNodes[i]; + this.addNodeToGrid(nodeA, this.graphManager.getRoot().getLeft(), this.graphManager.getRoot().getTop()); + } +}; + +FDLayout.prototype.calculateRepulsionForceOfANode = function (nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate) { + + if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed || forceToNodeSurroundingUpdate) { + var surrounding = new Set(); + nodeA.surrounding = new Array(); + var nodeB; + var grid = this.grid; + + for (var i = nodeA.startX - 1; i < nodeA.finishX + 2; i++) { + for (var j = nodeA.startY - 1; j < nodeA.finishY + 2; j++) { + if (!(i < 0 || j < 0 || i >= grid.length || j >= grid[0].length)) { + for (var k = 0; k < grid[i][j].length; k++) { + nodeB = grid[i][j][k]; + + // If both nodes are not members of the same graph, + // or both nodes are the same, skip. + if (nodeA.getOwner() != nodeB.getOwner() || nodeA == nodeB) { + continue; + } + + // check if the repulsion force between + // nodeA and nodeB has already been calculated + if (!processedNodeSet.has(nodeB) && !surrounding.has(nodeB)) { + var distanceX = Math.abs(nodeA.getCenterX() - nodeB.getCenterX()) - (nodeA.getWidth() / 2 + nodeB.getWidth() / 2); + var distanceY = Math.abs(nodeA.getCenterY() - nodeB.getCenterY()) - (nodeA.getHeight() / 2 + nodeB.getHeight() / 2); + + // if the distance between nodeA and nodeB + // is less then calculation range + if (distanceX <= this.repulsionRange && distanceY <= this.repulsionRange) { + //then add nodeB to surrounding of nodeA + surrounding.add(nodeB); + } + } + } + } + } + } + + nodeA.surrounding = [].concat(_toConsumableArray(surrounding)); + } + for (i = 0; i < nodeA.surrounding.length; i++) { + this.calcRepulsionForce(nodeA, nodeA.surrounding[i]); + } +}; + +FDLayout.prototype.calcRepulsionRange = function () { + return 0.0; +}; + +module.exports = FDLayout; + +/***/ }), +/* 19 */ +/***/ (function(module, exports, __nested_webpack_require_100902__) { + +"use strict"; + + +var LEdge = __nested_webpack_require_100902__(1); +var FDLayoutConstants = __nested_webpack_require_100902__(7); + +function FDLayoutEdge(source, target, vEdge) { + LEdge.call(this, source, target, vEdge); + this.idealLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH; +} + +FDLayoutEdge.prototype = Object.create(LEdge.prototype); + +for (var prop in LEdge) { + FDLayoutEdge[prop] = LEdge[prop]; +} + +module.exports = FDLayoutEdge; + +/***/ }), +/* 20 */ +/***/ (function(module, exports, __nested_webpack_require_101387__) { + +"use strict"; + + +var LNode = __nested_webpack_require_101387__(3); + +function FDLayoutNode(gm, loc, size, vNode) { + // alternative constructor is handled inside LNode + LNode.call(this, gm, loc, size, vNode); + //Spring, repulsion and gravitational forces acting on this node + this.springForceX = 0; + this.springForceY = 0; + this.repulsionForceX = 0; + this.repulsionForceY = 0; + this.gravitationForceX = 0; + this.gravitationForceY = 0; + //Amount by which this node is to be moved in this iteration + this.displacementX = 0; + this.displacementY = 0; + + //Start and finish grid coordinates that this node is fallen into + this.startX = 0; + this.finishX = 0; + this.startY = 0; + this.finishY = 0; + + //Geometric neighbors of this node + this.surrounding = []; +} + +FDLayoutNode.prototype = Object.create(LNode.prototype); + +for (var prop in LNode) { + FDLayoutNode[prop] = LNode[prop]; +} + +FDLayoutNode.prototype.setGridCoordinates = function (_startX, _finishX, _startY, _finishY) { + this.startX = _startX; + this.finishX = _finishX; + this.startY = _startY; + this.finishY = _finishY; +}; + +module.exports = FDLayoutNode; + +/***/ }), +/* 21 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function DimensionD(width, height) { + this.width = 0; + this.height = 0; + if (width !== null && height !== null) { + this.height = height; + this.width = width; + } +} + +DimensionD.prototype.getWidth = function () { + return this.width; +}; + +DimensionD.prototype.setWidth = function (width) { + this.width = width; +}; + +DimensionD.prototype.getHeight = function () { + return this.height; +}; + +DimensionD.prototype.setHeight = function (height) { + this.height = height; +}; + +module.exports = DimensionD; + +/***/ }), +/* 22 */ +/***/ (function(module, exports, __nested_webpack_require_103173__) { + +"use strict"; + + +var UniqueIDGeneretor = __nested_webpack_require_103173__(14); + +function HashMap() { + this.map = {}; + this.keys = []; +} + +HashMap.prototype.put = function (key, value) { + var theId = UniqueIDGeneretor.createID(key); + if (!this.contains(theId)) { + this.map[theId] = value; + this.keys.push(key); + } +}; + +HashMap.prototype.contains = function (key) { + var theId = UniqueIDGeneretor.createID(key); + return this.map[key] != null; +}; + +HashMap.prototype.get = function (key) { + var theId = UniqueIDGeneretor.createID(key); + return this.map[theId]; +}; + +HashMap.prototype.keySet = function () { + return this.keys; +}; + +module.exports = HashMap; + +/***/ }), +/* 23 */ +/***/ (function(module, exports, __nested_webpack_require_103901__) { + +"use strict"; + + +var UniqueIDGeneretor = __nested_webpack_require_103901__(14); + +function HashSet() { + this.set = {}; +} +; + +HashSet.prototype.add = function (obj) { + var theId = UniqueIDGeneretor.createID(obj); + if (!this.contains(theId)) this.set[theId] = obj; +}; + +HashSet.prototype.remove = function (obj) { + delete this.set[UniqueIDGeneretor.createID(obj)]; +}; + +HashSet.prototype.clear = function () { + this.set = {}; +}; + +HashSet.prototype.contains = function (obj) { + return this.set[UniqueIDGeneretor.createID(obj)] == obj; +}; + +HashSet.prototype.isEmpty = function () { + return this.size() === 0; +}; + +HashSet.prototype.size = function () { + return Object.keys(this.set).length; +}; + +//concats this.set to the given list +HashSet.prototype.addAllTo = function (list) { + var keys = Object.keys(this.set); + var length = keys.length; + for (var i = 0; i < length; i++) { + list.push(this.set[keys[i]]); + } +}; + +HashSet.prototype.size = function () { + return Object.keys(this.set).length; +}; + +HashSet.prototype.addAll = function (list) { + var s = list.length; + for (var i = 0; i < s; i++) { + var v = list[i]; + this.add(v); + } +}; + +module.exports = HashSet; + +/***/ }), +/* 24 */ +/***/ (function(module, exports, __nested_webpack_require_105138__) { + +"use strict"; + + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +/** + * A classic Quicksort algorithm with Hoare's partition + * - Works also on LinkedList objects + * + * Copyright: i-Vis Research Group, Bilkent University, 2007 - present + */ + +var LinkedList = __nested_webpack_require_105138__(11); + +var Quicksort = function () { + function Quicksort(A, compareFunction) { + _classCallCheck(this, Quicksort); + + if (compareFunction !== null || compareFunction !== undefined) this.compareFunction = this._defaultCompareFunction; + + var length = void 0; + if (A instanceof LinkedList) length = A.size();else length = A.length; + + this._quicksort(A, 0, length - 1); + } + + _createClass(Quicksort, [{ + key: '_quicksort', + value: function _quicksort(A, p, r) { + if (p < r) { + var q = this._partition(A, p, r); + this._quicksort(A, p, q); + this._quicksort(A, q + 1, r); + } + } + }, { + key: '_partition', + value: function _partition(A, p, r) { + var x = this._get(A, p); + var i = p; + var j = r; + while (true) { + while (this.compareFunction(x, this._get(A, j))) { + j--; + }while (this.compareFunction(this._get(A, i), x)) { + i++; + }if (i < j) { + this._swap(A, i, j); + i++; + j--; + } else return j; + } + } + }, { + key: '_get', + value: function _get(object, index) { + if (object instanceof LinkedList) return object.get_object_at(index);else return object[index]; + } + }, { + key: '_set', + value: function _set(object, index, value) { + if (object instanceof LinkedList) object.set_object_at(index, value);else object[index] = value; + } + }, { + key: '_swap', + value: function _swap(A, i, j) { + var temp = this._get(A, i); + this._set(A, i, this._get(A, j)); + this._set(A, j, temp); + } + }, { + key: '_defaultCompareFunction', + value: function _defaultCompareFunction(a, b) { + return b > a; + } + }]); + + return Quicksort; +}(); + +module.exports = Quicksort; + +/***/ }), +/* 25 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +/** + * Needleman-Wunsch algorithm is an procedure to compute the optimal global alignment of two string + * sequences by S.B.Needleman and C.D.Wunsch (1970). + * + * Aside from the inputs, you can assign the scores for, + * - Match: The two characters at the current index are same. + * - Mismatch: The two characters at the current index are different. + * - Insertion/Deletion(gaps): The best alignment involves one letter aligning to a gap in the other string. + */ + +var NeedlemanWunsch = function () { + function NeedlemanWunsch(sequence1, sequence2) { + var match_score = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; + var mismatch_penalty = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : -1; + var gap_penalty = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : -1; + + _classCallCheck(this, NeedlemanWunsch); + + this.sequence1 = sequence1; + this.sequence2 = sequence2; + this.match_score = match_score; + this.mismatch_penalty = mismatch_penalty; + this.gap_penalty = gap_penalty; + + // Just the remove redundancy + this.iMax = sequence1.length + 1; + this.jMax = sequence2.length + 1; + + // Grid matrix of scores + this.grid = new Array(this.iMax); + for (var i = 0; i < this.iMax; i++) { + this.grid[i] = new Array(this.jMax); + + for (var j = 0; j < this.jMax; j++) { + this.grid[i][j] = 0; + } + } + + // Traceback matrix (2D array, each cell is an array of boolean values for [`Diag`, `Up`, `Left`] positions) + this.tracebackGrid = new Array(this.iMax); + for (var _i = 0; _i < this.iMax; _i++) { + this.tracebackGrid[_i] = new Array(this.jMax); + + for (var _j = 0; _j < this.jMax; _j++) { + this.tracebackGrid[_i][_j] = [null, null, null]; + } + } + + // The aligned sequences (return multiple possibilities) + this.alignments = []; + + // Final alignment score + this.score = -1; + + // Calculate scores and tracebacks + this.computeGrids(); + } + + _createClass(NeedlemanWunsch, [{ + key: "getScore", + value: function getScore() { + return this.score; + } + }, { + key: "getAlignments", + value: function getAlignments() { + return this.alignments; + } + + // Main dynamic programming procedure + + }, { + key: "computeGrids", + value: function computeGrids() { + // Fill in the first row + for (var j = 1; j < this.jMax; j++) { + this.grid[0][j] = this.grid[0][j - 1] + this.gap_penalty; + this.tracebackGrid[0][j] = [false, false, true]; + } + + // Fill in the first column + for (var i = 1; i < this.iMax; i++) { + this.grid[i][0] = this.grid[i - 1][0] + this.gap_penalty; + this.tracebackGrid[i][0] = [false, true, false]; + } + + // Fill the rest of the grid + for (var _i2 = 1; _i2 < this.iMax; _i2++) { + for (var _j2 = 1; _j2 < this.jMax; _j2++) { + // Find the max score(s) among [`Diag`, `Up`, `Left`] + var diag = void 0; + if (this.sequence1[_i2 - 1] === this.sequence2[_j2 - 1]) diag = this.grid[_i2 - 1][_j2 - 1] + this.match_score;else diag = this.grid[_i2 - 1][_j2 - 1] + this.mismatch_penalty; + + var up = this.grid[_i2 - 1][_j2] + this.gap_penalty; + var left = this.grid[_i2][_j2 - 1] + this.gap_penalty; + + // If there exists multiple max values, capture them for multiple paths + var maxOf = [diag, up, left]; + var indices = this.arrayAllMaxIndexes(maxOf); + + // Update Grids + this.grid[_i2][_j2] = maxOf[indices[0]]; + this.tracebackGrid[_i2][_j2] = [indices.includes(0), indices.includes(1), indices.includes(2)]; + } + } + + // Update alignment score + this.score = this.grid[this.iMax - 1][this.jMax - 1]; + } + + // Gets all possible valid sequence combinations + + }, { + key: "alignmentTraceback", + value: function alignmentTraceback() { + var inProcessAlignments = []; + + inProcessAlignments.push({ pos: [this.sequence1.length, this.sequence2.length], + seq1: "", + seq2: "" + }); + + while (inProcessAlignments[0]) { + var current = inProcessAlignments[0]; + var directions = this.tracebackGrid[current.pos[0]][current.pos[1]]; + + if (directions[0]) { + inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1] - 1], + seq1: this.sequence1[current.pos[0] - 1] + current.seq1, + seq2: this.sequence2[current.pos[1] - 1] + current.seq2 + }); + } + if (directions[1]) { + inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1]], + seq1: this.sequence1[current.pos[0] - 1] + current.seq1, + seq2: '-' + current.seq2 + }); + } + if (directions[2]) { + inProcessAlignments.push({ pos: [current.pos[0], current.pos[1] - 1], + seq1: '-' + current.seq1, + seq2: this.sequence2[current.pos[1] - 1] + current.seq2 + }); + } + + if (current.pos[0] === 0 && current.pos[1] === 0) this.alignments.push({ sequence1: current.seq1, + sequence2: current.seq2 + }); + + inProcessAlignments.shift(); + } + + return this.alignments; + } + + // Helper Functions + + }, { + key: "getAllIndexes", + value: function getAllIndexes(arr, val) { + var indexes = [], + i = -1; + while ((i = arr.indexOf(val, i + 1)) !== -1) { + indexes.push(i); + } + return indexes; + } + }, { + key: "arrayAllMaxIndexes", + value: function arrayAllMaxIndexes(array) { + return this.getAllIndexes(array, Math.max.apply(null, array)); + } + }]); + + return NeedlemanWunsch; +}(); + +module.exports = NeedlemanWunsch; + +/***/ }), +/* 26 */ +/***/ (function(module, exports, __nested_webpack_require_115611__) { + +"use strict"; + + +var layoutBase = function layoutBase() { + return; +}; + +layoutBase.FDLayout = __nested_webpack_require_115611__(18); +layoutBase.FDLayoutConstants = __nested_webpack_require_115611__(7); +layoutBase.FDLayoutEdge = __nested_webpack_require_115611__(19); +layoutBase.FDLayoutNode = __nested_webpack_require_115611__(20); +layoutBase.DimensionD = __nested_webpack_require_115611__(21); +layoutBase.HashMap = __nested_webpack_require_115611__(22); +layoutBase.HashSet = __nested_webpack_require_115611__(23); +layoutBase.IGeometry = __nested_webpack_require_115611__(8); +layoutBase.IMath = __nested_webpack_require_115611__(9); +layoutBase.Integer = __nested_webpack_require_115611__(10); +layoutBase.Point = __nested_webpack_require_115611__(12); +layoutBase.PointD = __nested_webpack_require_115611__(4); +layoutBase.RandomSeed = __nested_webpack_require_115611__(16); +layoutBase.RectangleD = __nested_webpack_require_115611__(13); +layoutBase.Transform = __nested_webpack_require_115611__(17); +layoutBase.UniqueIDGeneretor = __nested_webpack_require_115611__(14); +layoutBase.Quicksort = __nested_webpack_require_115611__(24); +layoutBase.LinkedList = __nested_webpack_require_115611__(11); +layoutBase.LGraphObject = __nested_webpack_require_115611__(2); +layoutBase.LGraph = __nested_webpack_require_115611__(5); +layoutBase.LEdge = __nested_webpack_require_115611__(1); +layoutBase.LGraphManager = __nested_webpack_require_115611__(6); +layoutBase.LNode = __nested_webpack_require_115611__(3); +layoutBase.Layout = __nested_webpack_require_115611__(15); +layoutBase.LayoutConstants = __nested_webpack_require_115611__(0); +layoutBase.NeedlemanWunsch = __nested_webpack_require_115611__(25); + +module.exports = layoutBase; + +/***/ }), +/* 27 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function Emitter() { + this.listeners = []; +} + +var p = Emitter.prototype; + +p.addListener = function (event, callback) { + this.listeners.push({ + event: event, + callback: callback + }); +}; + +p.removeListener = function (event, callback) { + for (var i = this.listeners.length; i >= 0; i--) { + var l = this.listeners[i]; + + if (l.event === event && l.callback === callback) { + this.listeners.splice(i, 1); + } + } +}; + +p.emit = function (event, data) { + for (var i = 0; i < this.listeners.length; i++) { + var l = this.listeners[i]; + + if (event === l.event) { + l.callback(data); + } + } +}; + +module.exports = Emitter; + +/***/ }) +/******/ ]); +}); + +/***/ }), + +/***/ 18897: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + a: () => (/* binding */ createText), + c: () => (/* binding */ computeDimensionOfText) +}); + +// NAMESPACE OBJECT: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js +var constructs_namespaceObject = {}; +__webpack_require__.r(constructs_namespaceObject); +__webpack_require__.d(constructs_namespaceObject, { + attentionMarkers: () => (attentionMarkers), + contentInitial: () => (contentInitial), + disable: () => (disable), + document: () => (constructs_document), + flow: () => (constructs_flow), + flowInitial: () => (flowInitial), + insideSpan: () => (insideSpan), + string: () => (constructs_string), + text: () => (constructs_text) +}); + +// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-6dc72991.js + 8 modules +var mermaid_6dc72991 = __webpack_require__(99702); +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-to-string/lib/index.js +/** + * @typedef {import('mdast').Root|import('mdast').Content} Node + * + * @typedef Options + * Configuration (optional). + * @property {boolean | null | undefined} [includeImageAlt=true] + * Whether to use `alt` for `image`s. + * @property {boolean | null | undefined} [includeHtml=true] + * Whether to use `value` of HTML. + */ + +/** @type {Options} */ +const emptyOptions = {} + +/** + * Get the text content of a node or list of nodes. + * + * Prefers the node’s plain-text fields, otherwise serializes its children, + * and if the given value is an array, serialize the nodes in it. + * + * @param {unknown} value + * Thing to serialize, typically `Node`. + * @param {Options | null | undefined} [options] + * Configuration (optional). + * @returns {string} + * Serialized `value`. + */ +function lib_toString(value, options) { + const settings = options || emptyOptions + const includeImageAlt = + typeof settings.includeImageAlt === 'boolean' + ? settings.includeImageAlt + : true + const includeHtml = + typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true + + return one(value, includeImageAlt, includeHtml) +} + +/** + * One node or several nodes. + * + * @param {unknown} value + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized node. + */ +function one(value, includeImageAlt, includeHtml) { + if (node(value)) { + if ('value' in value) { + return value.type === 'html' && !includeHtml ? '' : value.value + } + + if (includeImageAlt && 'alt' in value && value.alt) { + return value.alt + } + + if ('children' in value) { + return lib_all(value.children, includeImageAlt, includeHtml) + } + } + + if (Array.isArray(value)) { + return lib_all(value, includeImageAlt, includeHtml) + } + + return '' +} + +/** + * Serialize a list of nodes. + * + * @param {Array} values + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized nodes. + */ +function lib_all(values, includeImageAlt, includeHtml) { + /** @type {Array} */ + const result = [] + let index = -1 + + while (++index < values.length) { + result[index] = one(values[index], includeImageAlt, includeHtml) + } + + return result.join('') +} + +/** + * Check if `value` looks like a node. + * + * @param {unknown} value + * Thing. + * @returns {value is Node} + * Whether `value` is a node. + */ +function node(value) { + return Boolean(value && typeof value === 'object') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-chunked/index.js +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array} */ + let parameters + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start + } else { + start = start > end ? end : start + } + remove = remove > 0 ? remove : 0 + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < 10000) { + parameters = Array.from(items) + parameters.unshift(start, remove) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove) + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000) + parameters.unshift(start, 0) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + chunkStart += 10000 + start += 10000 + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array} list + * List to operate on. + * @param {Array} items + * Items to add to `list`. + * @returns {Array} + * Either `list` or `items`. + */ +function push(list, items) { + if (list.length > 0) { + splice(list, list.length, 0, items) + return list + } + return items +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-combine-extensions/index.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + * @typedef {import('micromark-util-types').Handles} Handles + * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension + * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension + */ + + + +const micromark_util_combine_extensions_hasOwnProperty = {}.hasOwnProperty + +/** + * Combine multiple syntax extensions into one. + * + * @param {Array} extensions + * List of syntax extensions. + * @returns {NormalizedExtension} + * A single combined extension. + */ +function combineExtensions(extensions) { + /** @type {NormalizedExtension} */ + const all = {} + let index = -1 + + while (++index < extensions.length) { + syntaxExtension(all, extensions[index]) + } + + return all +} + +/** + * Merge `extension` into `all`. + * + * @param {NormalizedExtension} all + * Extension to merge into. + * @param {Extension} extension + * Extension to merge. + * @returns {void} + */ +function syntaxExtension(all, extension) { + /** @type {keyof Extension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + /** @type {Record} */ + const left = maybe || (all[hook] = {}) + /** @type {Record | undefined} */ + const right = extension[hook] + /** @type {string} */ + let code + + if (right) { + for (code in right) { + if (!micromark_util_combine_extensions_hasOwnProperty.call(left, code)) left[code] = [] + const value = right[code] + constructs( + // @ts-expect-error Looks like a list. + left[code], + Array.isArray(value) ? value : value ? [value] : [] + ) + } + } + } +} + +/** + * Merge `list` into `existing` (both lists of constructs). + * Mutates `existing`. + * + * @param {Array} existing + * @param {Array} list + * @returns {void} + */ +function constructs(existing, list) { + let index = -1 + /** @type {Array} */ + const before = [] + + while (++index < list.length) { + // @ts-expect-error Looks like an object. + ;(list[index].add === 'after' ? existing : before).push(list[index]) + } + + splice(existing, 0, 0, before) +} + +/** + * Combine multiple HTML extensions into one. + * + * @param {Array} htmlExtensions + * List of HTML extensions. + * @returns {HtmlExtension} + * A single combined HTML extension. + */ +function combineHtmlExtensions(htmlExtensions) { + /** @type {HtmlExtension} */ + const handlers = {} + let index = -1 + + while (++index < htmlExtensions.length) { + htmlExtension(handlers, htmlExtensions[index]) + } + + return handlers +} + +/** + * Merge `extension` into `all`. + * + * @param {HtmlExtension} all + * Extension to merge into. + * @param {HtmlExtension} extension + * Extension to merge. + * @returns {void} + */ +function htmlExtension(all, extension) { + /** @type {keyof HtmlExtension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + const left = maybe || (all[hook] = {}) + const right = extension[hook] + /** @type {keyof Handles} */ + let type + + if (right) { + for (type in right) { + // @ts-expect-error assume document vs regular handler are managed correctly. + left[type] = right[type] + } + } + } +} + +;// CONCATENATED MODULE: ./node_modules/micromark-util-character/lib/unicode-punctuation-regex.js +// This module is generated by `script/`. +// +// CommonMark handles attention (emphasis, strong) markers based on what comes +// before or after them. +// One such difference is if those characters are Unicode punctuation. +// This script is generated from the Unicode data. + +/** + * Regular expression that matches a unicode punctuation character. + */ +const unicodePunctuationRegex = + /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/ + +;// CONCATENATED MODULE: ./node_modules/micromark-util-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + + +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlpha = regexCheck(/[A-Za-z]/) + +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) + +/** + * Check whether the character code represents an ASCII atext. + * + * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in + * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), + * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F + * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E + * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE + * (`{`) to U+007E TILDE (`~`). + * + * See: + * **\[RFC5322]**: + * [Internet Message Format](https://tools.ietf.org/html/rfc5322). + * P. Resnick. + * IETF. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) + +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function asciiControl(code) { + return ( + // Special whitespace codes (which have negative values), C0 and Control + // character DEL + code !== null && (code < 32 || code === 127) + ) +} + +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiDigit = regexCheck(/\d/) + +/** + * Check whether the character code represents an ASCII hex digit (`a` through + * `f`, case insensitive, or `0` through `9`). + * + * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex + * digit, or an ASCII lower hex digit. + * + * An **ASCII upper hex digit** is a character in the inclusive range U+0041 + * (`A`) to U+0046 (`F`). + * + * An **ASCII lower hex digit** is a character in the inclusive range U+0061 + * (`a`) to U+0066 (`f`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) + +/** + * Check whether the character code represents ASCII punctuation. + * + * An **ASCII punctuation** is a character in the inclusive ranges U+0021 + * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT + * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT + * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) + +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEnding(code) { + return code !== null && code < -2 +} + +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEndingOrSpace(code) { + return code !== null && (code < 0 || code === 32) +} + +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownSpace(code) { + return code === -2 || code === -1 || code === 32 +} + +// Size note: removing ASCII from the regex and using `asciiPunctuation` here +// In fact adds to the bundle size. +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodePunctuation = regexCheck(unicodePunctuationRegex) + +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodeWhitespace = regexCheck(/\s/) + +/** + * Create a code check from a regex. + * + * @param {RegExp} regex + * @returns {(code: Code) => boolean} + */ +function regexCheck(regex) { + return check + + /** + * Check whether a code matches the bound regex. + * + * @param {Code} code + * Character code. + * @returns {boolean} + * Whether the character code matches the bound regex. + */ + function check(code) { + return code !== null && regex.test(String.fromCharCode(code)) + } +} + +;// CONCATENATED MODULE: ./node_modules/micromark-factory-space/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * spaces in markdown are often optional, in which case this factory can be + * used and `ok` will be switched to whether spaces were found or not + * * one line ending or space can be detected with `markdownSpace(code)` right + * before using `factorySpace` + * + * ###### Examples + * + * Where `␉` represents a tab (plus how much it expands) and `␠` represents a + * single space. + * + * ```markdown + * ␉ + * ␠␠␠␠ + * ␉␠ + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {TokenType} type + * Type (`' \t'`). + * @param {number | undefined} [max=Infinity] + * Max (exclusive). + * @returns + * Start state. + */ +function factorySpace(effects, ok, type, max) { + const limit = max ? max - 1 : Number.POSITIVE_INFINITY + let size = 0 + return start + + /** @type {State} */ + function start(code) { + if (markdownSpace(code)) { + effects.enter(type) + return prefix(code) + } + return ok(code) + } + + /** @type {State} */ + function prefix(code) { + if (markdownSpace(code) && size++ < limit) { + effects.consume(code) + return prefix + } + effects.exit(type) + return ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/content.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + +/** @type {InitialConstruct} */ +const content = { + tokenize: initializeContent +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeContent(effects) { + const contentStart = effects.attempt( + this.parser.constructs.contentInitial, + afterContentStartConstruct, + paragraphInitial + ) + /** @type {Token} */ + let previous + return contentStart + + /** @type {State} */ + function afterContentStartConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, contentStart, 'linePrefix') + } + + /** @type {State} */ + function paragraphInitial(code) { + effects.enter('paragraph') + return lineStart(code) + } + + /** @type {State} */ + function lineStart(code) { + const token = effects.enter('chunkText', { + contentType: 'text', + previous + }) + if (previous) { + previous.next = token + } + previous = token + return data(code) + } + + /** @type {State} */ + function data(code) { + if (code === null) { + effects.exit('chunkText') + effects.exit('paragraph') + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + effects.exit('chunkText') + return lineStart + } + + // Data. + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/document.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + +/** + * @typedef {[Construct, ContainerState]} StackItem + */ + + + + +/** @type {InitialConstruct} */ +const document_document = { + tokenize: initializeDocument +} + +/** @type {Construct} */ +const containerConstruct = { + tokenize: tokenizeContainer +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeDocument(effects) { + const self = this + /** @type {Array} */ + const stack = [] + let continued = 0 + /** @type {TokenizeContext | undefined} */ + let childFlow + /** @type {Token | undefined} */ + let childToken + /** @type {number} */ + let lineStartOffset + return start + + /** @type {State} */ + function start(code) { + // First we iterate through the open blocks, starting with the root + // document, and descending through last children down to the last open + // block. + // Each block imposes a condition that the line must satisfy if the block is + // to remain open. + // For example, a block quote requires a `>` character. + // A paragraph requires a non-blank line. + // In this phase we may match all or just some of the open blocks. + // But we cannot close unmatched blocks yet, because we may have a lazy + // continuation line. + if (continued < stack.length) { + const item = stack[continued] + self.containerState = item[1] + return effects.attempt( + item[0].continuation, + documentContinue, + checkNewContainers + )(code) + } + + // Done. + return checkNewContainers(code) + } + + /** @type {State} */ + function documentContinue(code) { + continued++ + + // Note: this field is called `_closeFlow` but it also closes containers. + // Perhaps a good idea to rename it but it’s already used in the wild by + // extensions. + if (self.containerState._closeFlow) { + self.containerState._closeFlow = undefined + if (childFlow) { + closeFlow() + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when dealing with lazy lines in `writeToChild`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {Point | undefined} */ + let point + + // Find the flow chunk. + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + point = self.events[indexBeforeFlow][1].end + break + } + } + exitContainers(continued) + + // Fix positions. + let index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + return checkNewContainers(code) + } + return start(code) + } + + /** @type {State} */ + function checkNewContainers(code) { + // Next, after consuming the continuation markers for existing blocks, we + // look for new block starts (e.g. `>` for a block quote). + // If we encounter a new block start, we close any blocks unmatched in + // step 1 before creating the new block as a child of the last matched + // block. + if (continued === stack.length) { + // No need to `check` whether there’s a container, of `exitContainers` + // would be moot. + // We can instead immediately `attempt` to parse one. + if (!childFlow) { + return documentContinued(code) + } + + // If we have concrete content, such as block HTML or fenced code, + // we can’t have containers “pierce” into them, so we can immediately + // start. + if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { + return flowStart(code) + } + + // If we do have flow, it could still be a blank line, + // but we’d be interrupting it w/ a new container if there’s a current + // construct. + // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer + // needed in micromark-extension-gfm-table@1.0.6). + self.interrupt = Boolean( + childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack + ) + } + + // Check if there is a new container. + self.containerState = {} + return effects.check( + containerConstruct, + thereIsANewContainer, + thereIsNoNewContainer + )(code) + } + + /** @type {State} */ + function thereIsANewContainer(code) { + if (childFlow) closeFlow() + exitContainers(continued) + return documentContinued(code) + } + + /** @type {State} */ + function thereIsNoNewContainer(code) { + self.parser.lazy[self.now().line] = continued !== stack.length + lineStartOffset = self.now().offset + return flowStart(code) + } + + /** @type {State} */ + function documentContinued(code) { + // Try new containers. + self.containerState = {} + return effects.attempt( + containerConstruct, + containerContinue, + flowStart + )(code) + } + + /** @type {State} */ + function containerContinue(code) { + continued++ + stack.push([self.currentConstruct, self.containerState]) + // Try another. + return documentContinued(code) + } + + /** @type {State} */ + function flowStart(code) { + if (code === null) { + if (childFlow) closeFlow() + exitContainers(0) + effects.consume(code) + return + } + childFlow = childFlow || self.parser.flow(self.now()) + effects.enter('chunkFlow', { + contentType: 'flow', + previous: childToken, + _tokenizer: childFlow + }) + return flowContinue(code) + } + + /** @type {State} */ + function flowContinue(code) { + if (code === null) { + writeToChild(effects.exit('chunkFlow'), true) + exitContainers(0) + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + writeToChild(effects.exit('chunkFlow')) + // Get ready for the next line. + continued = 0 + self.interrupt = undefined + return start + } + effects.consume(code) + return flowContinue + } + + /** + * @param {Token} token + * @param {boolean | undefined} [eof] + * @returns {void} + */ + function writeToChild(token, eof) { + const stream = self.sliceStream(token) + if (eof) stream.push(null) + token.previous = childToken + if (childToken) childToken.next = token + childToken = token + childFlow.defineSkip(token.start) + childFlow.write(stream) + + // Alright, so we just added a lazy line: + // + // ```markdown + // > a + // b. + // + // Or: + // + // > ~~~c + // d + // + // Or: + // + // > | e | + // f + // ``` + // + // The construct in the second example (fenced code) does not accept lazy + // lines, so it marked itself as done at the end of its first line, and + // then the content construct parses `d`. + // Most constructs in markdown match on the first line: if the first line + // forms a construct, a non-lazy line can’t “unmake” it. + // + // The construct in the third example is potentially a GFM table, and + // those are *weird*. + // It *could* be a table, from the first line, if the following line + // matches a condition. + // In this case, that second line is lazy, which “unmakes” the first line + // and turns the whole into one content block. + // + // We’ve now parsed the non-lazy and the lazy line, and can figure out + // whether the lazy line started a new flow block. + // If it did, we exit the current containers between the two flow blocks. + if (self.parser.lazy[token.start.line]) { + let index = childFlow.events.length + while (index--) { + if ( + // The token starts before the line ending… + childFlow.events[index][1].start.offset < lineStartOffset && + // …and either is not ended yet… + (!childFlow.events[index][1].end || + // …or ends after it. + childFlow.events[index][1].end.offset > lineStartOffset) + ) { + // Exit: there’s still something open, which means it’s a lazy line + // part of something. + return + } + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when closing flow in `documentContinue`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {boolean | undefined} */ + let seen + /** @type {Point | undefined} */ + let point + + // Find the previous chunk (the one before the lazy line). + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + if (seen) { + point = self.events[indexBeforeFlow][1].end + break + } + seen = true + } + } + exitContainers(continued) + + // Fix positions. + index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + } + } + + /** + * @param {number} size + * @returns {void} + */ + function exitContainers(size) { + let index = stack.length + + // Exit open containers. + while (index-- > size) { + const entry = stack[index] + self.containerState = entry[1] + entry[0].exit.call(self, effects) + } + stack.length = size + } + function closeFlow() { + childFlow.write([null]) + childToken = undefined + childFlow = undefined + self.containerState._closeFlow = undefined + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContainer(effects, ok, nok) { + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(this.parser.constructs.document, ok, nok), + 'linePrefix', + this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + ) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/blank-line.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blankLine = { + tokenize: tokenizeBlankLine, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLine(effects, ok, nok) { + return start + + /** + * Start of blank line. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + return markdownSpace(code) + ? factorySpace(effects, after, 'linePrefix')(code) + : after(code) + } + + /** + * At eof/eol, after optional whitespace. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-subtokenize/index.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Token} Token + */ + + +/** + * Tokenize subcontent. + * + * @param {Array} events + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +function subtokenize(events) { + /** @type {Record} */ + const jumps = {} + let index = -1 + /** @type {Event} */ + let event + /** @type {number | undefined} */ + let lineIndex + /** @type {number} */ + let otherIndex + /** @type {Event} */ + let otherEvent + /** @type {Array} */ + let parameters + /** @type {Array} */ + let subevents + /** @type {boolean | undefined} */ + let more + while (++index < events.length) { + while (index in jumps) { + index = jumps[index] + } + event = events[index] + + // Add a hook for the GFM tasklist extension, which needs to know if text + // is in the first content of a list item. + if ( + index && + event[1].type === 'chunkFlow' && + events[index - 1][1].type === 'listItemPrefix' + ) { + subevents = event[1]._tokenizer.events + otherIndex = 0 + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'lineEndingBlank' + ) { + otherIndex += 2 + } + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'content' + ) { + while (++otherIndex < subevents.length) { + if (subevents[otherIndex][1].type === 'content') { + break + } + if (subevents[otherIndex][1].type === 'chunkText') { + subevents[otherIndex][1]._isInFirstContentOfListItem = true + otherIndex++ + } + } + } + } + + // Enter. + if (event[0] === 'enter') { + if (event[1].contentType) { + Object.assign(jumps, subcontent(events, index)) + index = jumps[index] + more = true + } + } + // Exit. + else if (event[1]._container) { + otherIndex = index + lineIndex = undefined + while (otherIndex--) { + otherEvent = events[otherIndex] + if ( + otherEvent[1].type === 'lineEnding' || + otherEvent[1].type === 'lineEndingBlank' + ) { + if (otherEvent[0] === 'enter') { + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + } + otherEvent[1].type = 'lineEnding' + lineIndex = otherIndex + } + } else { + break + } + } + if (lineIndex) { + // Fix position. + event[1].end = Object.assign({}, events[lineIndex][1].start) + + // Switch container exit w/ line endings. + parameters = events.slice(lineIndex, index) + parameters.unshift(event) + splice(events, lineIndex, index - lineIndex + 1, parameters) + } + } + } + return !more +} + +/** + * Tokenize embedded tokens. + * + * @param {Array} events + * @param {number} eventIndex + * @returns {Record} + */ +function subcontent(events, eventIndex) { + const token = events[eventIndex][1] + const context = events[eventIndex][2] + let startPosition = eventIndex - 1 + /** @type {Array} */ + const startPositions = [] + const tokenizer = + token._tokenizer || context.parser[token.contentType](token.start) + const childEvents = tokenizer.events + /** @type {Array<[number, number]>} */ + const jumps = [] + /** @type {Record} */ + const gaps = {} + /** @type {Array} */ + let stream + /** @type {Token | undefined} */ + let previous + let index = -1 + /** @type {Token | undefined} */ + let current = token + let adjust = 0 + let start = 0 + const breaks = [start] + + // Loop forward through the linked tokens to pass them in order to the + // subtokenizer. + while (current) { + // Find the position of the event for this token. + while (events[++startPosition][1] !== current) { + // Empty. + } + startPositions.push(startPosition) + if (!current._tokenizer) { + stream = context.sliceStream(current) + if (!current.next) { + stream.push(null) + } + if (previous) { + tokenizer.defineSkip(current.start) + } + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = true + } + tokenizer.write(stream) + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = undefined + } + } + + // Unravel the next token. + previous = current + current = current.next + } + + // Now, loop back through all events (and linked tokens), to figure out which + // parts belong where. + current = token + while (++index < childEvents.length) { + if ( + // Find a void token that includes a break. + childEvents[index][0] === 'exit' && + childEvents[index - 1][0] === 'enter' && + childEvents[index][1].type === childEvents[index - 1][1].type && + childEvents[index][1].start.line !== childEvents[index][1].end.line + ) { + start = index + 1 + breaks.push(start) + // Help GC. + current._tokenizer = undefined + current.previous = undefined + current = current.next + } + } + + // Help GC. + tokenizer.events = [] + + // If there’s one more token (which is the cases for lines that end in an + // EOF), that’s perfect: the last point we found starts it. + // If there isn’t then make sure any remaining content is added to it. + if (current) { + // Help GC. + current._tokenizer = undefined + current.previous = undefined + } else { + breaks.pop() + } + + // Now splice the events from the subtokenizer into the current events, + // moving back to front so that splice indices aren’t affected. + index = breaks.length + while (index--) { + const slice = childEvents.slice(breaks[index], breaks[index + 1]) + const start = startPositions.pop() + jumps.unshift([start, start + slice.length - 1]) + splice(events, start, 2, slice) + } + index = -1 + while (++index < jumps.length) { + gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] + adjust += jumps[index][1] - jumps[index][0] - 1 + } + return gaps +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/content.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** + * No name because it must not be turned off. + * @type {Construct} + */ +const content_content = { + tokenize: tokenizeContent, + resolve: resolveContent +} + +/** @type {Construct} */ +const continuationConstruct = { + tokenize: tokenizeContinuation, + partial: true +} + +/** + * Content is transparent: it’s parsed right now. That way, definitions are also + * parsed right now: before text in paragraphs (specifically, media) are parsed. + * + * @type {Resolver} + */ +function resolveContent(events) { + subtokenize(events) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContent(effects, ok) { + /** @type {Token | undefined} */ + let previous + return chunkStart + + /** + * Before a content chunk. + * + * ```markdown + * > | abc + * ^ + * ``` + * + * @type {State} + */ + function chunkStart(code) { + effects.enter('content') + previous = effects.enter('chunkContent', { + contentType: 'content' + }) + return chunkInside(code) + } + + /** + * In a content chunk. + * + * ```markdown + * > | abc + * ^^^ + * ``` + * + * @type {State} + */ + function chunkInside(code) { + if (code === null) { + return contentEnd(code) + } + + // To do: in `markdown-rs`, each line is parsed on its own, and everything + // is stitched together resolving. + if (markdownLineEnding(code)) { + return effects.check( + continuationConstruct, + contentContinue, + contentEnd + )(code) + } + + // Data. + effects.consume(code) + return chunkInside + } + + /** + * + * + * @type {State} + */ + function contentEnd(code) { + effects.exit('chunkContent') + effects.exit('content') + return ok(code) + } + + /** + * + * + * @type {State} + */ + function contentContinue(code) { + effects.consume(code) + effects.exit('chunkContent') + previous.next = effects.enter('chunkContent', { + contentType: 'content', + previous + }) + previous = previous.next + return chunkInside + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContinuation(effects, ok, nok) { + const self = this + return startLookahead + + /** + * + * + * @type {State} + */ + function startLookahead(code) { + effects.exit('chunkContent') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, prefixed, 'linePrefix') + } + + /** + * + * + * @type {State} + */ + function prefixed(code) { + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + + // Always populated by defaults. + + const tail = self.events[self.events.length - 1] + if ( + !self.parser.constructs.disable.null.includes('codeIndented') && + tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ) { + return ok(code) + } + return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/flow.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + + +/** @type {InitialConstruct} */ +const flow = { + tokenize: initializeFlow +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeFlow(effects) { + const self = this + const initial = effects.attempt( + // Try to parse a blank line. + blankLine, + atBlankEnding, + // Try to parse initial flow (essentially, only code). + effects.attempt( + this.parser.constructs.flowInitial, + afterConstruct, + factorySpace( + effects, + effects.attempt( + this.parser.constructs.flow, + afterConstruct, + effects.attempt(content_content, afterConstruct) + ), + 'linePrefix' + ) + ) + ) + return initial + + /** @type {State} */ + function atBlankEnding(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEndingBlank') + effects.consume(code) + effects.exit('lineEndingBlank') + self.currentConstruct = undefined + return initial + } + + /** @type {State} */ + function afterConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + self.currentConstruct = undefined + return initial + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +const resolver = { + resolveAll: createResolver() +} +const string = initializeFactory('string') +const text_text = initializeFactory('text') + +/** + * @param {'string' | 'text'} field + * @returns {InitialConstruct} + */ +function initializeFactory(field) { + return { + tokenize: initializeText, + resolveAll: createResolver( + field === 'text' ? resolveAllLineSuffixes : undefined + ) + } + + /** + * @this {TokenizeContext} + * @type {Initializer} + */ + function initializeText(effects) { + const self = this + const constructs = this.parser.constructs[field] + const text = effects.attempt(constructs, start, notText) + return start + + /** @type {State} */ + function start(code) { + return atBreak(code) ? text(code) : notText(code) + } + + /** @type {State} */ + function notText(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('data') + effects.consume(code) + return data + } + + /** @type {State} */ + function data(code) { + if (atBreak(code)) { + effects.exit('data') + return text(code) + } + + // Data. + effects.consume(code) + return data + } + + /** + * @param {Code} code + * @returns {boolean} + */ + function atBreak(code) { + if (code === null) { + return true + } + const list = constructs[code] + let index = -1 + if (list) { + // Always populated by defaults. + + while (++index < list.length) { + const item = list[index] + if (!item.previous || item.previous.call(self, self.previous)) { + return true + } + } + } + return false + } + } +} + +/** + * @param {Resolver | undefined} [extraResolver] + * @returns {Resolver} + */ +function createResolver(extraResolver) { + return resolveAllText + + /** @type {Resolver} */ + function resolveAllText(events, context) { + let index = -1 + /** @type {number | undefined} */ + let enter + + // A rather boring computation (to merge adjacent `data` events) which + // improves mm performance by 29%. + while (++index <= events.length) { + if (enter === undefined) { + if (events[index] && events[index][1].type === 'data') { + enter = index + index++ + } + } else if (!events[index] || events[index][1].type !== 'data') { + // Don’t do anything if there is one data token. + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + index = enter + 2 + } + enter = undefined + } + } + return extraResolver ? extraResolver(events, context) : events + } +} + +/** + * A rather ugly set of instructions which again looks at chunks in the input + * stream. + * The reason to do this here is that it is *much* faster to parse in reverse. + * And that we can’t hook into `null` to split the line suffix before an EOF. + * To do: figure out if we can make this into a clean utility, or even in core. + * As it will be useful for GFMs literal autolink extension (and maybe even + * tables?) + * + * @type {Resolver} + */ +function resolveAllLineSuffixes(events, context) { + let eventIndex = 0 // Skip first. + + while (++eventIndex <= events.length) { + if ( + (eventIndex === events.length || + events[eventIndex][1].type === 'lineEnding') && + events[eventIndex - 1][1].type === 'data' + ) { + const data = events[eventIndex - 1][1] + const chunks = context.sliceStream(data) + let index = chunks.length + let bufferIndex = -1 + let size = 0 + /** @type {boolean | undefined} */ + let tabs + while (index--) { + const chunk = chunks[index] + if (typeof chunk === 'string') { + bufferIndex = chunk.length + while (chunk.charCodeAt(bufferIndex - 1) === 32) { + size++ + bufferIndex-- + } + if (bufferIndex) break + bufferIndex = -1 + } + // Number + else if (chunk === -2) { + tabs = true + size++ + } else if (chunk === -1) { + // Empty + } else { + // Replacement character, exit. + index++ + break + } + } + if (size) { + const token = { + type: + eventIndex === events.length || tabs || size < 2 + ? 'lineSuffix' + : 'hardBreakTrailing', + start: { + line: data.end.line, + column: data.end.column - size, + offset: data.end.offset - size, + _index: data.start._index + index, + _bufferIndex: index + ? bufferIndex + : data.start._bufferIndex + bufferIndex + }, + end: Object.assign({}, data.end) + } + data.end = Object.assign({}, token.start) + if (data.start.offset === data.end.offset) { + Object.assign(data, token) + } else { + events.splice( + eventIndex, + 0, + ['enter', token, context], + ['exit', token, context] + ) + eventIndex += 2 + } + } + eventIndex++ + } + } + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-resolve-all/index.js +/** + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * Call all `resolveAll`s. + * + * @param {Array<{resolveAll?: Resolver | undefined}>} constructs + * List of constructs, optionally with `resolveAll`s. + * @param {Array} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array} + * Changed events. + */ +function resolveAll(constructs, events, context) { + /** @type {Array} */ + const called = [] + let index = -1 + + while (++index < constructs.length) { + const resolve = constructs[index].resolveAll + + if (resolve && !called.includes(resolve)) { + events = resolve(events, context) + called.push(resolve) + } + } + + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/create-tokenizer.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenType} TokenType + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * @callback Restore + * @returns {void} + * + * @typedef Info + * @property {Restore} restore + * @property {number} from + * + * @callback ReturnHandle + * Handle a successful run. + * @param {Construct} construct + * @param {Info} info + * @returns {void} + */ + + + + +/** + * Create a tokenizer. + * Tokenizers deal with one type of data (e.g., containers, flow, text). + * The parser is the object dealing with it all. + * `initialize` works like other constructs, except that only its `tokenize` + * function is used, in which case it doesn’t receive an `ok` or `nok`. + * `from` can be given to set the point before the first character, although + * when further lines are indented, they must be set with `defineSkip`. + * + * @param {ParseContext} parser + * @param {InitialConstruct} initialize + * @param {Omit | undefined} [from] + * @returns {TokenizeContext} + */ +function createTokenizer(parser, initialize, from) { + /** @type {Point} */ + let point = Object.assign( + from + ? Object.assign({}, from) + : { + line: 1, + column: 1, + offset: 0 + }, + { + _index: 0, + _bufferIndex: -1 + } + ) + /** @type {Record} */ + const columnStart = {} + /** @type {Array} */ + const resolveAllConstructs = [] + /** @type {Array} */ + let chunks = [] + /** @type {Array} */ + let stack = [] + /** @type {boolean | undefined} */ + let consumed = true + + /** + * Tools used for tokenizing. + * + * @type {Effects} + */ + const effects = { + consume, + enter, + exit, + attempt: constructFactory(onsuccessfulconstruct), + check: constructFactory(onsuccessfulcheck), + interrupt: constructFactory(onsuccessfulcheck, { + interrupt: true + }) + } + + /** + * State and tools for resolving and serializing. + * + * @type {TokenizeContext} + */ + const context = { + previous: null, + code: null, + containerState: {}, + events: [], + parser, + sliceStream, + sliceSerialize, + now, + defineSkip, + write + } + + /** + * The state function. + * + * @type {State | void} + */ + let state = initialize.tokenize.call(context, effects) + + /** + * Track which character we expect to be consumed, to catch bugs. + * + * @type {Code} + */ + let expectedCode + if (initialize.resolveAll) { + resolveAllConstructs.push(initialize) + } + return context + + /** @type {TokenizeContext['write']} */ + function write(slice) { + chunks = push(chunks, slice) + main() + + // Exit if we’re not done, resolve might change stuff. + if (chunks[chunks.length - 1] !== null) { + return [] + } + addResult(initialize, 0) + + // Otherwise, resolve, and exit. + context.events = resolveAll(resolveAllConstructs, context.events, context) + return context.events + } + + // + // Tools. + // + + /** @type {TokenizeContext['sliceSerialize']} */ + function sliceSerialize(token, expandTabs) { + return serializeChunks(sliceStream(token), expandTabs) + } + + /** @type {TokenizeContext['sliceStream']} */ + function sliceStream(token) { + return sliceChunks(chunks, token) + } + + /** @type {TokenizeContext['now']} */ + function now() { + // This is a hot path, so we clone manually instead of `Object.assign({}, point)` + const {line, column, offset, _index, _bufferIndex} = point + return { + line, + column, + offset, + _index, + _bufferIndex + } + } + + /** @type {TokenizeContext['defineSkip']} */ + function defineSkip(value) { + columnStart[value.line] = value.column + accountForPotentialSkip() + } + + // + // State management. + // + + /** + * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by + * `consume`). + * Here is where we walk through the chunks, which either include strings of + * several characters, or numerical character codes. + * The reason to do this in a loop instead of a call is so the stack can + * drain. + * + * @returns {void} + */ + function main() { + /** @type {number} */ + let chunkIndex + while (point._index < chunks.length) { + const chunk = chunks[point._index] + + // If we’re in a buffer chunk, loop through it. + if (typeof chunk === 'string') { + chunkIndex = point._index + if (point._bufferIndex < 0) { + point._bufferIndex = 0 + } + while ( + point._index === chunkIndex && + point._bufferIndex < chunk.length + ) { + go(chunk.charCodeAt(point._bufferIndex)) + } + } else { + go(chunk) + } + } + } + + /** + * Deal with one code. + * + * @param {Code} code + * @returns {void} + */ + function go(code) { + consumed = undefined + expectedCode = code + state = state(code) + } + + /** @type {Effects['consume']} */ + function consume(code) { + if (markdownLineEnding(code)) { + point.line++ + point.column = 1 + point.offset += code === -3 ? 2 : 1 + accountForPotentialSkip() + } else if (code !== -1) { + point.column++ + point.offset++ + } + + // Not in a string chunk. + if (point._bufferIndex < 0) { + point._index++ + } else { + point._bufferIndex++ + + // At end of string chunk. + // @ts-expect-error Points w/ non-negative `_bufferIndex` reference + // strings. + if (point._bufferIndex === chunks[point._index].length) { + point._bufferIndex = -1 + point._index++ + } + } + + // Expose the previous character. + context.previous = code + + // Mark as consumed. + consumed = true + } + + /** @type {Effects['enter']} */ + function enter(type, fields) { + /** @type {Token} */ + // @ts-expect-error Patch instead of assign required fields to help GC. + const token = fields || {} + token.type = type + token.start = now() + context.events.push(['enter', token, context]) + stack.push(token) + return token + } + + /** @type {Effects['exit']} */ + function exit(type) { + const token = stack.pop() + token.end = now() + context.events.push(['exit', token, context]) + return token + } + + /** + * Use results. + * + * @type {ReturnHandle} + */ + function onsuccessfulconstruct(construct, info) { + addResult(construct, info.from) + } + + /** + * Discard results. + * + * @type {ReturnHandle} + */ + function onsuccessfulcheck(_, info) { + info.restore() + } + + /** + * Factory to attempt/check/interrupt. + * + * @param {ReturnHandle} onreturn + * @param {{interrupt?: boolean | undefined} | undefined} [fields] + */ + function constructFactory(onreturn, fields) { + return hook + + /** + * Handle either an object mapping codes to constructs, a list of + * constructs, or a single construct. + * + * @param {Array | Construct | ConstructRecord} constructs + * @param {State} returnState + * @param {State | undefined} [bogusState] + * @returns {State} + */ + function hook(constructs, returnState, bogusState) { + /** @type {Array} */ + let listOfConstructs + /** @type {number} */ + let constructIndex + /** @type {Construct} */ + let currentConstruct + /** @type {Info} */ + let info + return Array.isArray(constructs) /* c8 ignore next 1 */ + ? handleListOfConstructs(constructs) + : 'tokenize' in constructs + ? // @ts-expect-error Looks like a construct. + handleListOfConstructs([constructs]) + : handleMapOfConstructs(constructs) + + /** + * Handle a list of construct. + * + * @param {ConstructRecord} map + * @returns {State} + */ + function handleMapOfConstructs(map) { + return start + + /** @type {State} */ + function start(code) { + const def = code !== null && map[code] + const all = code !== null && map.null + const list = [ + // To do: add more extension tests. + /* c8 ignore next 2 */ + ...(Array.isArray(def) ? def : def ? [def] : []), + ...(Array.isArray(all) ? all : all ? [all] : []) + ] + return handleListOfConstructs(list)(code) + } + } + + /** + * Handle a list of construct. + * + * @param {Array} list + * @returns {State} + */ + function handleListOfConstructs(list) { + listOfConstructs = list + constructIndex = 0 + if (list.length === 0) { + return bogusState + } + return handleConstruct(list[constructIndex]) + } + + /** + * Handle a single construct. + * + * @param {Construct} construct + * @returns {State} + */ + function handleConstruct(construct) { + return start + + /** @type {State} */ + function start(code) { + // To do: not needed to store if there is no bogus state, probably? + // Currently doesn’t work because `inspect` in document does a check + // w/o a bogus, which doesn’t make sense. But it does seem to help perf + // by not storing. + info = store() + currentConstruct = construct + if (!construct.partial) { + context.currentConstruct = construct + } + + // Always populated by defaults. + + if ( + construct.name && + context.parser.constructs.disable.null.includes(construct.name) + ) { + return nok(code) + } + return construct.tokenize.call( + // If we do have fields, create an object w/ `context` as its + // prototype. + // This allows a “live binding”, which is needed for `interrupt`. + fields ? Object.assign(Object.create(context), fields) : context, + effects, + ok, + nok + )(code) + } + } + + /** @type {State} */ + function ok(code) { + consumed = true + onreturn(currentConstruct, info) + return returnState + } + + /** @type {State} */ + function nok(code) { + consumed = true + info.restore() + if (++constructIndex < listOfConstructs.length) { + return handleConstruct(listOfConstructs[constructIndex]) + } + return bogusState + } + } + } + + /** + * @param {Construct} construct + * @param {number} from + * @returns {void} + */ + function addResult(construct, from) { + if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { + resolveAllConstructs.push(construct) + } + if (construct.resolve) { + splice( + context.events, + from, + context.events.length - from, + construct.resolve(context.events.slice(from), context) + ) + } + if (construct.resolveTo) { + context.events = construct.resolveTo(context.events, context) + } + } + + /** + * Store state. + * + * @returns {Info} + */ + function store() { + const startPoint = now() + const startPrevious = context.previous + const startCurrentConstruct = context.currentConstruct + const startEventsIndex = context.events.length + const startStack = Array.from(stack) + return { + restore, + from: startEventsIndex + } + + /** + * Restore state. + * + * @returns {void} + */ + function restore() { + point = startPoint + context.previous = startPrevious + context.currentConstruct = startCurrentConstruct + context.events.length = startEventsIndex + stack = startStack + accountForPotentialSkip() + } + } + + /** + * Move the current point a bit forward in the line when it’s on a column + * skip. + * + * @returns {void} + */ + function accountForPotentialSkip() { + if (point.line in columnStart && point.column < 2) { + point.column = columnStart[point.line] + point.offset += columnStart[point.line] - 1 + } + } +} + +/** + * Get the chunks from a slice of chunks in the range of a token. + * + * @param {Array} chunks + * @param {Pick} token + * @returns {Array} + */ +function sliceChunks(chunks, token) { + const startIndex = token.start._index + const startBufferIndex = token.start._bufferIndex + const endIndex = token.end._index + const endBufferIndex = token.end._bufferIndex + /** @type {Array} */ + let view + if (startIndex === endIndex) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)] + } else { + view = chunks.slice(startIndex, endIndex) + if (startBufferIndex > -1) { + const head = view[0] + if (typeof head === 'string') { + view[0] = head.slice(startBufferIndex) + } else { + view.shift() + } + } + if (endBufferIndex > 0) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view.push(chunks[endIndex].slice(0, endBufferIndex)) + } + } + return view +} + +/** + * Get the string value of a slice of chunks. + * + * @param {Array} chunks + * @param {boolean | undefined} [expandTabs=false] + * @returns {string} + */ +function serializeChunks(chunks, expandTabs) { + let index = -1 + /** @type {Array} */ + const result = [] + /** @type {boolean | undefined} */ + let atTab + while (++index < chunks.length) { + const chunk = chunks[index] + /** @type {string} */ + let value + if (typeof chunk === 'string') { + value = chunk + } else + switch (chunk) { + case -5: { + value = '\r' + break + } + case -4: { + value = '\n' + break + } + case -3: { + value = '\r' + '\n' + break + } + case -2: { + value = expandTabs ? ' ' : '\t' + break + } + case -1: { + if (!expandTabs && atTab) continue + value = ' ' + break + } + default: { + // Currently only replacement character. + value = String.fromCharCode(chunk) + } + } + atTab = chunk === -2 + result.push(value) + } + return result.join('') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/thematic-break.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const thematicBreak = { + name: 'thematicBreak', + tokenize: tokenizeThematicBreak +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeThematicBreak(effects, ok, nok) { + let size = 0 + /** @type {NonNullable} */ + let marker + return start + + /** + * Start of thematic break. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('thematicBreak') + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * After optional whitespace, at marker. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + marker = code + return atBreak(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.enter('thematicBreakSequence') + return sequence(code) + } + if (size >= 3 && (code === null || markdownLineEnding(code))) { + effects.exit('thematicBreak') + return ok(code) + } + return nok(code) + } + + /** + * In sequence. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function sequence(code) { + if (code === marker) { + effects.consume(code) + size++ + return sequence + } + effects.exit('thematicBreakSequence') + return markdownSpace(code) + ? factorySpace(effects, atBreak, 'whitespace')(code) + : atBreak(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/list.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + +/** @type {Construct} */ +const list = { + name: 'list', + tokenize: tokenizeListStart, + continuation: { + tokenize: tokenizeListContinuation + }, + exit: tokenizeListEnd +} + +/** @type {Construct} */ +const listItemPrefixWhitespaceConstruct = { + tokenize: tokenizeListItemPrefixWhitespace, + partial: true +} + +/** @type {Construct} */ +const indentConstruct = { + tokenize: tokenizeIndent, + partial: true +} + +// To do: `markdown-rs` parses list items on their own and later stitches them +// together. + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListStart(effects, ok, nok) { + const self = this + const tail = self.events[self.events.length - 1] + let initialSize = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + let size = 0 + return start + + /** @type {State} */ + function start(code) { + const kind = + self.containerState.type || + (code === 42 || code === 43 || code === 45 + ? 'listUnordered' + : 'listOrdered') + if ( + kind === 'listUnordered' + ? !self.containerState.marker || code === self.containerState.marker + : asciiDigit(code) + ) { + if (!self.containerState.type) { + self.containerState.type = kind + effects.enter(kind, { + _container: true + }) + } + if (kind === 'listUnordered') { + effects.enter('listItemPrefix') + return code === 42 || code === 45 + ? effects.check(thematicBreak, nok, atMarker)(code) + : atMarker(code) + } + if (!self.interrupt || code === 49) { + effects.enter('listItemPrefix') + effects.enter('listItemValue') + return inside(code) + } + } + return nok(code) + } + + /** @type {State} */ + function inside(code) { + if (asciiDigit(code) && ++size < 10) { + effects.consume(code) + return inside + } + if ( + (!self.interrupt || size < 2) && + (self.containerState.marker + ? code === self.containerState.marker + : code === 41 || code === 46) + ) { + effects.exit('listItemValue') + return atMarker(code) + } + return nok(code) + } + + /** + * @type {State} + **/ + function atMarker(code) { + effects.enter('listItemMarker') + effects.consume(code) + effects.exit('listItemMarker') + self.containerState.marker = self.containerState.marker || code + return effects.check( + blankLine, + // Can’t be empty when interrupting. + self.interrupt ? nok : onBlank, + effects.attempt( + listItemPrefixWhitespaceConstruct, + endOfPrefix, + otherPrefix + ) + ) + } + + /** @type {State} */ + function onBlank(code) { + self.containerState.initialBlankLine = true + initialSize++ + return endOfPrefix(code) + } + + /** @type {State} */ + function otherPrefix(code) { + if (markdownSpace(code)) { + effects.enter('listItemPrefixWhitespace') + effects.consume(code) + effects.exit('listItemPrefixWhitespace') + return endOfPrefix + } + return nok(code) + } + + /** @type {State} */ + function endOfPrefix(code) { + self.containerState.size = + initialSize + + self.sliceSerialize(effects.exit('listItemPrefix'), true).length + return ok(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListContinuation(effects, ok, nok) { + const self = this + self.containerState._closeFlow = undefined + return effects.check(blankLine, onBlank, notBlank) + + /** @type {State} */ + function onBlank(code) { + self.containerState.furtherBlankLines = + self.containerState.furtherBlankLines || + self.containerState.initialBlankLine + + // We have a blank line. + // Still, try to consume at most the items size. + return factorySpace( + effects, + ok, + 'listItemIndent', + self.containerState.size + 1 + )(code) + } + + /** @type {State} */ + function notBlank(code) { + if (self.containerState.furtherBlankLines || !markdownSpace(code)) { + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return notInCurrentItem(code) + } + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) + } + + /** @type {State} */ + function notInCurrentItem(code) { + // While we do continue, we signal that the flow should be closed. + self.containerState._closeFlow = true + // As we’re closing flow, we’re no longer interrupting. + self.interrupt = undefined + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(list, ok, nok), + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeIndent(effects, ok, nok) { + const self = this + return factorySpace( + effects, + afterPrefix, + 'listItemIndent', + self.containerState.size + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'listItemIndent' && + tail[2].sliceSerialize(tail[1], true).length === self.containerState.size + ? ok(code) + : nok(code) + } +} + +/** + * @type {Exiter} + * @this {TokenizeContext} + */ +function tokenizeListEnd(effects) { + effects.exit(this.containerState.type) +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListItemPrefixWhitespace(effects, ok, nok) { + const self = this + + // Always populated by defaults. + + return factorySpace( + effects, + afterPrefix, + 'listItemPrefixWhitespace', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return !markdownSpace(code) && + tail && + tail[1].type === 'listItemPrefixWhitespace' + ? ok(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/block-quote.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blockQuote = { + name: 'blockQuote', + tokenize: tokenizeBlockQuoteStart, + continuation: { + tokenize: tokenizeBlockQuoteContinuation + }, + exit +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteStart(effects, ok, nok) { + const self = this + return start + + /** + * Start of block quote. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 62) { + const state = self.containerState + if (!state.open) { + effects.enter('blockQuote', { + _container: true + }) + state.open = true + } + effects.enter('blockQuotePrefix') + effects.enter('blockQuoteMarker') + effects.consume(code) + effects.exit('blockQuoteMarker') + return after + } + return nok(code) + } + + /** + * After `>`, before optional whitespace. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownSpace(code)) { + effects.enter('blockQuotePrefixWhitespace') + effects.consume(code) + effects.exit('blockQuotePrefixWhitespace') + effects.exit('blockQuotePrefix') + return ok + } + effects.exit('blockQuotePrefix') + return ok(code) + } +} + +/** + * Start of block quote continuation. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteContinuation(effects, ok, nok) { + const self = this + return contStart + + /** + * Start of block quote continuation. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contStart(code) { + if (markdownSpace(code)) { + // Always populated by defaults. + + return factorySpace( + effects, + contBefore, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } + return contBefore(code) + } + + /** + * At `>`, after optional whitespace. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contBefore(code) { + return effects.attempt(blockQuote, ok, nok)(code) + } +} + +/** @type {Exiter} */ +function exit(effects) { + effects.exit('blockQuote') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-destination/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse destinations. + * + * ###### Examples + * + * ```markdown + * + * b> + * + * + * a + * a\)b + * a(b)c + * a(b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type for whole (`` or `b`). + * @param {TokenType} literalType + * Type when enclosed (``). + * @param {TokenType} literalMarkerType + * Type for enclosing (`<` and `>`). + * @param {TokenType} rawType + * Type when not enclosed (`b`). + * @param {TokenType} stringType + * Type for the value (`a` or `b`). + * @param {number | undefined} [max=Infinity] + * Depth of nested parens (inclusive). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryDestination( + effects, + ok, + nok, + type, + literalType, + literalMarkerType, + rawType, + stringType, + max +) { + const limit = max || Number.POSITIVE_INFINITY + let balance = 0 + return start + + /** + * Start of destination. + * + * ```markdown + * > | + * ^ + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 60) { + effects.enter(type) + effects.enter(literalType) + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + return enclosedBefore + } + + // ASCII control, space, closing paren. + if (code === null || code === 32 || code === 41 || asciiControl(code)) { + return nok(code) + } + effects.enter(type) + effects.enter(rawType) + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return raw(code) + } + + /** + * After `<`, at an enclosed destination. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function enclosedBefore(code) { + if (code === 62) { + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + effects.exit(literalType) + effects.exit(type) + return ok + } + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return enclosed(code) + } + + /** + * In enclosed destination. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function enclosed(code) { + if (code === 62) { + effects.exit('chunkString') + effects.exit(stringType) + return enclosedBefore(code) + } + if (code === null || code === 60 || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? enclosedEscape : enclosed + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function enclosedEscape(code) { + if (code === 60 || code === 62 || code === 92) { + effects.consume(code) + return enclosed + } + return enclosed(code) + } + + /** + * In raw destination. + * + * ```markdown + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function raw(code) { + if ( + !balance && + (code === null || code === 41 || markdownLineEndingOrSpace(code)) + ) { + effects.exit('chunkString') + effects.exit(stringType) + effects.exit(rawType) + effects.exit(type) + return ok(code) + } + if (balance < limit && code === 40) { + effects.consume(code) + balance++ + return raw + } + if (code === 41) { + effects.consume(code) + balance-- + return raw + } + + // ASCII control (but *not* `\0`) and space and `(`. + // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it + // doesn’t. + if (code === null || code === 32 || code === 40 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? rawEscape : raw + } + + /** + * After `\`, at special character. + * + * ```markdown + * > | a\*a + * ^ + * ``` + * + * @type {State} + */ + function rawEscape(code) { + if (code === 40 || code === 41 || code === 92) { + effects.consume(code) + return raw + } + return raw(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-label/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse labels. + * + * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. + * + * ###### Examples + * + * ```markdown + * [a] + * [a + * b] + * [a\]b] + * ``` + * + * @this {TokenizeContext} + * Tokenize context. + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole label (`[a]`). + * @param {TokenType} markerType + * Type for the markers (`[` and `]`). + * @param {TokenType} stringType + * Type for the identifier (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryLabel(effects, ok, nok, type, markerType, stringType) { + const self = this + let size = 0 + /** @type {boolean} */ + let seen + return start + + /** + * Start of label. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.enter(stringType) + return atBreak + } + + /** + * In label, at something, before something else. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if ( + size > 999 || + code === null || + code === 91 || + (code === 93 && !seen) || + // To do: remove in the future once we’ve switched from + // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, + // which doesn’t need this. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + (code === 94 && + !size && + '_hiddenFootnoteSupport' in self.parser.constructs) + ) { + return nok(code) + } + if (code === 93) { + effects.exit(stringType) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + + // To do: indent? Link chunks and EOLs together? + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return atBreak + } + effects.enter('chunkString', { + contentType: 'string' + }) + return labelInside(code) + } + + /** + * In label, in text. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function labelInside(code) { + if ( + code === null || + code === 91 || + code === 93 || + markdownLineEnding(code) || + size++ > 999 + ) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + if (!seen) seen = !markdownSpace(code) + return code === 92 ? labelEscape : labelInside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | [a\*a] + * ^ + * ``` + * + * @type {State} + */ + function labelEscape(code) { + if (code === 91 || code === 92 || code === 93) { + effects.consume(code) + size++ + return labelInside + } + return labelInside(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-title/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +/** + * Parse titles. + * + * ###### Examples + * + * ```markdown + * "a" + * 'b' + * (c) + * "a + * b" + * 'a + * b' + * (a\)b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole title (`"a"`, `'b'`, `(c)`). + * @param {TokenType} markerType + * Type for the markers (`"`, `'`, `(`, and `)`). + * @param {TokenType} stringType + * Type for the value (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryTitle(effects, ok, nok, type, markerType, stringType) { + /** @type {NonNullable} */ + let marker + return start + + /** + * Start of title. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 34 || code === 39 || code === 40) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + marker = code === 40 ? 41 : code + return begin + } + return nok(code) + } + + /** + * After opening marker. + * + * This is also used at the closing marker. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function begin(code) { + if (code === marker) { + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + effects.enter(stringType) + return atBreak(code) + } + + /** + * At something, before something else. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.exit(stringType) + return begin(marker) + } + if (code === null) { + return nok(code) + } + + // Note: blank lines can’t exist in content. + if (markdownLineEnding(code)) { + // To do: use `space_or_tab_eol_with_options`, connect. + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, atBreak, 'linePrefix') + } + effects.enter('chunkString', { + contentType: 'string' + }) + return inside(code) + } + + /** + * + * + * @type {State} + */ + function inside(code) { + if (code === marker || code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + return code === 92 ? escape : inside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | "a\*b" + * ^ + * ``` + * + * @type {State} + */ + function escape(code) { + if (code === marker || code === 92) { + effects.consume(code) + return inside + } + return inside(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-whitespace/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + */ + + + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * line endings or spaces in markdown are often optional, in which case this + * factory can be used and `ok` will be switched to whether spaces were found + * or not + * * one line ending or space can be detected with + * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @returns + * Start state. + */ +function factoryWhitespace(effects, ok) { + /** @type {boolean} */ + let seen + return start + + /** @type {State} */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + seen = true + return start + } + if (markdownSpace(code)) { + return factorySpace( + effects, + start, + seen ? 'linePrefix' : 'lineSuffix' + )(code) + } + return ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-normalize-identifier/index.js +/** + * Normalize an identifier (as found in references, definitions). + * + * Collapses markdown whitespace, trim, and then lower- and uppercase. + * + * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their + * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different + * uppercase character (U+0398 (`Θ`)). + * So, to get a canonical form, we perform both lower- and uppercase. + * + * Using uppercase last makes sure keys will never interact with default + * prototypal values (such as `constructor`): nothing in the prototype of + * `Object` is uppercase. + * + * @param {string} value + * Identifier to normalize. + * @returns {string} + * Normalized identifier. + */ +function normalizeIdentifier(value) { + return ( + value + // Collapse markdown whitespace. + .replace(/[\t\n\r ]+/g, ' ') + // Trim. + .replace(/^ | $/g, '') + // Some characters are considered “uppercase”, but if their lowercase + // counterpart is uppercased will result in a different uppercase + // character. + // Hence, to get that form, we perform both lower- and uppercase. + // Upper case makes sure keys will not interact with default prototypal + // methods: no method is uppercase. + .toLowerCase() + .toUpperCase() + ) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/definition.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + +/** @type {Construct} */ +const definition = { + name: 'definition', + tokenize: tokenizeDefinition +} + +/** @type {Construct} */ +const titleBefore = { + tokenize: tokenizeTitleBefore, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeDefinition(effects, ok, nok) { + const self = this + /** @type {string} */ + let identifier + return start + + /** + * At start of a definition. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Do not interrupt paragraphs (but do follow definitions). + // To do: do `interrupt` the way `markdown-rs` does. + // To do: parse whitespace the way `markdown-rs` does. + effects.enter('definition') + return before(code) + } + + /** + * After optional whitespace, at `[`. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + // To do: parse whitespace the way `markdown-rs` does. + + return factoryLabel.call( + self, + effects, + labelAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionLabel', + 'definitionLabelMarker', + 'definitionLabelString' + )(code) + } + + /** + * After label. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function labelAfter(code) { + identifier = normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + if (code === 58) { + effects.enter('definitionMarker') + effects.consume(code) + effects.exit('definitionMarker') + return markerAfter + } + return nok(code) + } + + /** + * After marker. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function markerAfter(code) { + // Note: whitespace is optional. + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, destinationBefore)(code) + : destinationBefore(code) + } + + /** + * Before destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationBefore(code) { + return factoryDestination( + effects, + destinationAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionDestination', + 'definitionDestinationLiteral', + 'definitionDestinationLiteralMarker', + 'definitionDestinationRaw', + 'definitionDestinationString' + )(code) + } + + /** + * After destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationAfter(code) { + return effects.attempt(titleBefore, after, after)(code) + } + + /** + * After definition. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return markdownSpace(code) + ? factorySpace(effects, afterWhitespace, 'whitespace')(code) + : afterWhitespace(code) + } + + /** + * After definition, after optional whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function afterWhitespace(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('definition') + + // Note: we don’t care about uniqueness. + // It’s likely that that doesn’t happen very frequently. + // It is more likely that it wastes precious time. + self.parser.defined.push(identifier) + + // To do: `markdown-rs` interrupt. + // // You’d be interrupting. + // tokenizer.interrupt = true + return ok(code) + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeTitleBefore(effects, ok, nok) { + return titleBefore + + /** + * After destination, at whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, beforeMarker)(code) + : nok(code) + } + + /** + * At title. + * + * ```markdown + * | [a]: b + * > | "c" + * ^ + * ``` + * + * @type {State} + */ + function beforeMarker(code) { + return factoryTitle( + effects, + titleAfter, + nok, + 'definitionTitle', + 'definitionTitleMarker', + 'definitionTitleString' + )(code) + } + + /** + * After title. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfter(code) { + return markdownSpace(code) + ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code) + : titleAfterOptionalWhitespace(code) + } + + /** + * After title, after optional whitespace. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfterOptionalWhitespace(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-indented.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const codeIndented = { + name: 'codeIndented', + tokenize: tokenizeCodeIndented +} + +/** @type {Construct} */ +const furtherStart = { + tokenize: tokenizeFurtherStart, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeIndented(effects, ok, nok) { + const self = this + return start + + /** + * Start of code (indented). + * + * > **Parsing note**: it is not needed to check if this first line is a + * > filled line (that it has a non-whitespace character), because blank lines + * > are parsed already, so we never run into that. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: manually check if interrupting like `markdown-rs`. + + effects.enter('codeIndented') + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? atBreak(code) + : nok(code) + } + + /** + * At a break. + * + * ```markdown + * > | aaa + * ^ ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === null) { + return after(code) + } + if (markdownLineEnding(code)) { + return effects.attempt(furtherStart, atBreak, after)(code) + } + effects.enter('codeFlowValue') + return inside(code) + } + + /** + * In code content. + * + * ```markdown + * > | aaa + * ^^^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return atBreak(code) + } + effects.consume(code) + return inside + } + + /** @type {State} */ + function after(code) { + effects.exit('codeIndented') + // To do: allow interrupting like `markdown-rs`. + // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeFurtherStart(effects, ok, nok) { + const self = this + return furtherStart + + /** + * At eol, trying to parse another indent. + * + * ```markdown + * > | aaa + * ^ + * | bbb + * ``` + * + * @type {State} + */ + function furtherStart(code) { + // To do: improve `lazy` / `pierce` handling. + // If this is a lazy line, it can’t be code. + if (self.parser.lazy[self.now().line]) { + return nok(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return furtherStart + } + + // To do: the code here in `micromark-js` is a bit different from + // `markdown-rs` because there it can attempt spaces. + // We can’t yet. + // + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? ok(code) + : markdownLineEnding(code) + ? furtherStart(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/heading-atx.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const headingAtx = { + name: 'headingAtx', + tokenize: tokenizeHeadingAtx, + resolve: resolveHeadingAtx +} + +/** @type {Resolver} */ +function resolveHeadingAtx(events, context) { + let contentEnd = events.length - 2 + let contentStart = 3 + /** @type {Token} */ + let content + /** @type {Token} */ + let text + + // Prefix whitespace, part of the opening. + if (events[contentStart][1].type === 'whitespace') { + contentStart += 2 + } + + // Suffix whitespace, part of the closing. + if ( + contentEnd - 2 > contentStart && + events[contentEnd][1].type === 'whitespace' + ) { + contentEnd -= 2 + } + if ( + events[contentEnd][1].type === 'atxHeadingSequence' && + (contentStart === contentEnd - 1 || + (contentEnd - 4 > contentStart && + events[contentEnd - 2][1].type === 'whitespace')) + ) { + contentEnd -= contentStart + 1 === contentEnd ? 2 : 4 + } + if (contentEnd > contentStart) { + content = { + type: 'atxHeadingText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end + } + text = { + type: 'chunkText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end, + contentType: 'text' + } + splice(events, contentStart, contentEnd - contentStart + 1, [ + ['enter', content, context], + ['enter', text, context], + ['exit', text, context], + ['exit', content, context] + ]) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHeadingAtx(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of a heading (atx). + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + effects.enter('atxHeading') + return before(code) + } + + /** + * After optional whitespace, at `#`. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('atxHeadingSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 35 && size++ < 6) { + effects.consume(code) + return sequenceOpen + } + + // Always at least one `#`. + if (code === null || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingSequence') + return atBreak(code) + } + return nok(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === 35) { + effects.enter('atxHeadingSequence') + return sequenceFurther(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('atxHeading') + // To do: interrupt like `markdown-rs`. + // // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } + if (markdownSpace(code)) { + return factorySpace(effects, atBreak, 'whitespace')(code) + } + + // To do: generate `data` tokens, add the `text` token later. + // Needs edit map, see: `markdown.rs`. + effects.enter('atxHeadingText') + return data(code) + } + + /** + * In further sequence (after whitespace). + * + * Could be normal “visible” hashes in the heading or a final sequence. + * + * ```markdown + * > | ## aa ## + * ^ + * ``` + * + * @type {State} + */ + function sequenceFurther(code) { + if (code === 35) { + effects.consume(code) + return sequenceFurther + } + effects.exit('atxHeadingSequence') + return atBreak(code) + } + + /** + * In text. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if (code === null || code === 35 || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingText') + return atBreak(code) + } + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/setext-underline.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const setextUnderline = { + name: 'setextUnderline', + tokenize: tokenizeSetextUnderline, + resolveTo: resolveToSetextUnderline +} + +/** @type {Resolver} */ +function resolveToSetextUnderline(events, context) { + // To do: resolve like `markdown-rs`. + let index = events.length + /** @type {number | undefined} */ + let content + /** @type {number | undefined} */ + let text + /** @type {number | undefined} */ + let definition + + // Find the opening of the content. + // It’ll always exist: we don’t tokenize if it isn’t there. + while (index--) { + if (events[index][0] === 'enter') { + if (events[index][1].type === 'content') { + content = index + break + } + if (events[index][1].type === 'paragraph') { + text = index + } + } + // Exit + else { + if (events[index][1].type === 'content') { + // Remove the content end (if needed we’ll add it later) + events.splice(index, 1) + } + if (!definition && events[index][1].type === 'definition') { + definition = index + } + } + } + const heading = { + type: 'setextHeading', + start: Object.assign({}, events[text][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + + // Change the paragraph to setext heading text. + events[text][1].type = 'setextHeadingText' + + // If we have definitions in the content, we’ll keep on having content, + // but we need move it. + if (definition) { + events.splice(text, 0, ['enter', heading, context]) + events.splice(definition + 1, 0, ['exit', events[content][1], context]) + events[content][1].end = Object.assign({}, events[definition][1].end) + } else { + events[content][1] = heading + } + + // Add the heading exit at the end. + events.push(['exit', heading, context]) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeSetextUnderline(effects, ok, nok) { + const self = this + /** @type {NonNullable} */ + let marker + return start + + /** + * At start of heading (setext) underline. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + let index = self.events.length + /** @type {boolean | undefined} */ + let paragraph + // Find an opening. + while (index--) { + // Skip enter/exit of line ending, line prefix, and content. + // We can now either have a definition or a paragraph. + if ( + self.events[index][1].type !== 'lineEnding' && + self.events[index][1].type !== 'linePrefix' && + self.events[index][1].type !== 'content' + ) { + paragraph = self.events[index][1].type === 'paragraph' + break + } + } + + // To do: handle lazy/pierce like `markdown-rs`. + // To do: parse indent like `markdown-rs`. + if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { + effects.enter('setextHeadingLine') + marker = code + return before(code) + } + return nok(code) + } + + /** + * After optional whitespace, at `-` or `=`. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('setextHeadingLineSequence') + return inside(code) + } + + /** + * In sequence. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + effects.exit('setextHeadingLineSequence') + return markdownSpace(code) + ? factorySpace(effects, after, 'lineSuffix')(code) + : after(code) + } + + /** + * After sequence, after optional whitespace. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('setextHeadingLine') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-html-tag-name/index.js +/** + * List of lowercase HTML “block” tag names. + * + * The list, when parsing HTML (flow), results in more relaxed rules (condition + * 6). + * Because they are known blocks, the HTML-like syntax doesn’t have to be + * strictly parsed. + * For tag names not in this list, a more strict algorithm (condition 7) is used + * to detect whether the HTML-like syntax is seen as HTML (flow) or not. + * + * This is copied from: + * . + * + * > 👉 **Note**: `search` was added in `CommonMark@0.31`. + */ +const htmlBlockNames = [ + 'address', + 'article', + 'aside', + 'base', + 'basefont', + 'blockquote', + 'body', + 'caption', + 'center', + 'col', + 'colgroup', + 'dd', + 'details', + 'dialog', + 'dir', + 'div', + 'dl', + 'dt', + 'fieldset', + 'figcaption', + 'figure', + 'footer', + 'form', + 'frame', + 'frameset', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'head', + 'header', + 'hr', + 'html', + 'iframe', + 'legend', + 'li', + 'link', + 'main', + 'menu', + 'menuitem', + 'nav', + 'noframes', + 'ol', + 'optgroup', + 'option', + 'p', + 'param', + 'search', + 'section', + 'summary', + 'table', + 'tbody', + 'td', + 'tfoot', + 'th', + 'thead', + 'title', + 'tr', + 'track', + 'ul' +] + +/** + * List of lowercase HTML “raw” tag names. + * + * The list, when parsing HTML (flow), results in HTML that can include lines + * without exiting, until a closing tag also in this list is found (condition + * 1). + * + * This module is copied from: + * . + * + * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. + */ +const htmlRawNames = ['pre', 'script', 'style', 'textarea'] + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-flow.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + +/** @type {Construct} */ +const htmlFlow = { + name: 'htmlFlow', + tokenize: tokenizeHtmlFlow, + resolveTo: resolveToHtmlFlow, + concrete: true +} + +/** @type {Construct} */ +const blankLineBefore = { + tokenize: tokenizeBlankLineBefore, + partial: true +} +const nonLazyContinuationStart = { + tokenize: tokenizeNonLazyContinuationStart, + partial: true +} + +/** @type {Resolver} */ +function resolveToHtmlFlow(events) { + let index = events.length + while (index--) { + if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { + break + } + } + if (index > 1 && events[index - 2][1].type === 'linePrefix') { + // Add the prefix start to the HTML token. + events[index][1].start = events[index - 2][1].start + // Add the prefix start to the HTML line token. + events[index + 1][1].start = events[index - 2][1].start + // Remove the line prefix. + events.splice(index - 2, 2) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlFlow(effects, ok, nok) { + const self = this + /** @type {number} */ + let marker + /** @type {boolean} */ + let closingTag + /** @type {string} */ + let buffer + /** @type {number} */ + let index + /** @type {Code} */ + let markerB + return start + + /** + * Start of HTML (flow). + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * At `<`, after optional whitespace. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('htmlFlow') + effects.enter('htmlFlowData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * > | + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + closingTag = true + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + marker = 3 + // To do: + // tokenizer.concrete = true + // To do: use `markdown-rs` style interrupt. + // While we’re in an instruction instead of a declaration, we’re on a `?` + // right now, so we do need to search for `>`, similar to declarations. + return self.interrupt ? ok : continuationDeclarationInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After ` | + * ^ + * > | + * ^ + * > | &<]]> + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + marker = 2 + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + marker = 5 + index = 0 + return cdataOpenInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + marker = 4 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After ` | + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After ` | &<]]> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + if (index === value.length) { + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return cdataOpenInside + } + return nok(code) + } + + /** + * After ` | + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * In tag name. + * + * ```markdown + * > | + * ^^ + * > | + * ^^ + * ``` + * + * @type {State} + */ + function tagName(code) { + if ( + code === null || + code === 47 || + code === 62 || + markdownLineEndingOrSpace(code) + ) { + const slash = code === 47 + const name = buffer.toLowerCase() + if (!slash && !closingTag && htmlRawNames.includes(name)) { + marker = 1 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + if (htmlBlockNames.includes(buffer.toLowerCase())) { + marker = 6 + if (slash) { + effects.consume(code) + return basicSelfClosing + } + + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + marker = 7 + // Do not support complete HTML when interrupting. + return self.interrupt && !self.parser.lazy[self.now().line] + ? nok(code) + : closingTag + ? completeClosingTagAfter(code) + : completeAttributeNameBefore(code) + } + + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + buffer += String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After closing slash of a basic tag name. + * + * ```markdown + * > |
    + * ^ + * ``` + * + * @type {State} + */ + function basicSelfClosing(code) { + if (code === 62) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return nok(code) + } + + /** + * After closing slash of a complete tag name. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeClosingTagAfter(code) { + if (markdownSpace(code)) { + effects.consume(code) + return completeClosingTagAfter + } + return completeEnd(code) + } + + /** + * At an attribute name. + * + * At first, this state is used after a complete tag name, after whitespace, + * where it expects optional attributes or the end of the tag. + * It is also reused after attributes, when expecting more optional + * attributes. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * > | + * ^ + * > | + * ^ + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameBefore(code) { + if (code === 47) { + effects.consume(code) + return completeEnd + } + + // ASCII alphanumerical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return completeAttributeName + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameBefore + } + return completeEnd(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeName(code) { + // ASCII alphanumerical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return completeAttributeName + } + return completeAttributeNameAfter(code) + } + + /** + * After attribute name, at an optional initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return completeAttributeValueBefore + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameAfter + } + return completeAttributeNameBefore(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + markerB = code + return completeAttributeValueQuoted + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeValueBefore + } + return completeAttributeValueUnquoted(code) + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuoted(code) { + if (code === markerB) { + effects.consume(code) + markerB = null + return completeAttributeValueQuotedAfter + } + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return completeAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 47 || + code === 60 || + code === 61 || + code === 62 || + code === 96 || + markdownLineEndingOrSpace(code) + ) { + return completeAttributeNameAfter(code) + } + effects.consume(code) + return completeAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the + * end of the tag. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownSpace(code)) { + return completeAttributeNameBefore(code) + } + return nok(code) + } + + /** + * In certain circumstances of a complete tag where only an `>` is allowed. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeEnd(code) { + if (code === 62) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * After `>` in a complete tag. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAfter(code) { + if (code === null || markdownLineEnding(code)) { + // // Do not form containers. + // tokenizer.concrete = true + return continuation(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * In continuation of any HTML kind. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function continuation(code) { + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationCommentInside + } + if (code === 60 && marker === 1) { + effects.consume(code) + return continuationRawTagOpen + } + if (code === 62 && marker === 4) { + effects.consume(code) + return continuationClose + } + if (code === 63 && marker === 3) { + effects.consume(code) + return continuationDeclarationInside + } + if (code === 93 && marker === 5) { + effects.consume(code) + return continuationCdataInside + } + if (markdownLineEnding(code) && (marker === 6 || marker === 7)) { + effects.exit('htmlFlowData') + return effects.check( + blankLineBefore, + continuationAfter, + continuationStart + )(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationStart(code) + } + effects.consume(code) + return continuation + } + + /** + * In continuation, at eol. + * + * ```markdown + * > | + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStart(code) { + return effects.check( + nonLazyContinuationStart, + continuationStartNonLazy, + continuationAfter + )(code) + } + + /** + * In continuation, at eol, before non-lazy content. + * + * ```markdown + * > | + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStartNonLazy(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return continuationBefore + } + + /** + * In continuation, before non-lazy content. + * + * ```markdown + * | + * > | asd + * ^ + * ``` + * + * @type {State} + */ + function continuationBefore(code) { + if (code === null || markdownLineEnding(code)) { + return continuationStart(code) + } + effects.enter('htmlFlowData') + return continuation(code) + } + + /** + * In comment continuation, after one `-`, expecting another. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function continuationCommentInside(code) { + if (code === 45) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In raw continuation, after `<`, at `/`. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function continuationRawTagOpen(code) { + if (code === 47) { + effects.consume(code) + buffer = '' + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In raw continuation, after ` | + * ^^^^^^ + * ``` + * + * @type {State} + */ + function continuationRawEndTag(code) { + if (code === 62) { + const name = buffer.toLowerCase() + if (htmlRawNames.includes(name)) { + effects.consume(code) + return continuationClose + } + return continuation(code) + } + if (asciiAlpha(code) && buffer.length < 8) { + effects.consume(code) + // @ts-expect-error: not null. + buffer += String.fromCharCode(code) + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In cdata continuation, after `]`, expecting `]>`. + * + * ```markdown + * > | &<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationCdataInside(code) { + if (code === 93) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In declaration or instruction continuation, at `>`. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * > | + * ^ + * > | + * ^ + * > | &<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationDeclarationInside(code) { + if (code === 62) { + effects.consume(code) + return continuationClose + } + + // More dashes. + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In closed continuation: everything we get until the eol/eof is part of it. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function continuationClose(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationAfter(code) + } + effects.consume(code) + return continuationClose + } + + /** + * Done. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function continuationAfter(code) { + effects.exit('htmlFlow') + // // Feel free to interrupt. + // tokenizer.interrupt = false + // // No longer concrete. + // tokenizer.concrete = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuationStart(effects, ok, nok) { + const self = this + return start + + /** + * At eol, before continuation. + * + * ```markdown + * > | * ```js + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return after + } + return nok(code) + } + + /** + * A continuation. + * + * ```markdown + * | * ```js + * > | b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLineBefore(effects, ok, nok) { + return start + + /** + * Before eol, expecting blank line. + * + * ```markdown + * > |
    + * ^ + * | + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return effects.attempt(blankLine, ok, nok) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-fenced.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const nonLazyContinuation = { + tokenize: tokenizeNonLazyContinuation, + partial: true +} + +/** @type {Construct} */ +const codeFenced = { + name: 'codeFenced', + tokenize: tokenizeCodeFenced, + concrete: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeFenced(effects, ok, nok) { + const self = this + /** @type {Construct} */ + const closeStart = { + tokenize: tokenizeCloseStart, + partial: true + } + let initialPrefix = 0 + let sizeOpen = 0 + /** @type {NonNullable} */ + let marker + return start + + /** + * Start of code. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse whitespace like `markdown-rs`. + return beforeSequenceOpen(code) + } + + /** + * In opening fence, after prefix, at sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeSequenceOpen(code) { + const tail = self.events[self.events.length - 1] + initialPrefix = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + marker = code + effects.enter('codeFenced') + effects.enter('codeFencedFence') + effects.enter('codeFencedFenceSequence') + return sequenceOpen(code) + } + + /** + * In opening fence sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === marker) { + sizeOpen++ + effects.consume(code) + return sequenceOpen + } + if (sizeOpen < 3) { + return nok(code) + } + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, infoBefore, 'whitespace')(code) + : infoBefore(code) + } + + /** + * In opening fence, after the sequence (and optional whitespace), before info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function infoBefore(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return self.interrupt + ? ok(code) + : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFencedFenceInfo') + effects.enter('chunkString', { + contentType: 'string' + }) + return info(code) + } + + /** + * In info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function info(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return infoBefore(code) + } + if (markdownSpace(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return factorySpace(effects, metaBefore, 'whitespace')(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return info + } + + /** + * In opening fence, after info and whitespace, before meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function metaBefore(code) { + if (code === null || markdownLineEnding(code)) { + return infoBefore(code) + } + effects.enter('codeFencedFenceMeta') + effects.enter('chunkString', { + contentType: 'string' + }) + return meta(code) + } + + /** + * In meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function meta(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceMeta') + return infoBefore(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return meta + } + + /** + * At eol/eof in code, before a non-lazy closing fence or content. + * + * ```markdown + * > | ~~~js + * ^ + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function atNonLazyBreak(code) { + return effects.attempt(closeStart, after, contentBefore)(code) + } + + /** + * Before code content, not a closing fence, at eol. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return contentStart + } + + /** + * Before code content, not a closing fence. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentStart(code) { + return initialPrefix > 0 && markdownSpace(code) + ? factorySpace( + effects, + beforeContentChunk, + 'linePrefix', + initialPrefix + 1 + )(code) + : beforeContentChunk(code) + } + + /** + * Before code content, after optional prefix. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeContentChunk(code) { + if (code === null || markdownLineEnding(code)) { + return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFlowValue') + return contentChunk(code) + } + + /** + * In code content. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^^^^^^^^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentChunk(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return beforeContentChunk(code) + } + effects.consume(code) + return contentChunk + } + + /** + * After code. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + effects.exit('codeFenced') + return ok(code) + } + + /** + * @this {TokenizeContext} + * @type {Tokenizer} + */ + function tokenizeCloseStart(effects, ok, nok) { + let size = 0 + return startBefore + + /** + * + * + * @type {State} + */ + function startBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return start + } + + /** + * Before closing fence, at optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Always populated by defaults. + + // To do: `enter` here or in next state? + effects.enter('codeFencedFence') + return markdownSpace(code) + ? factorySpace( + effects, + beforeSequenceClose, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : beforeSequenceClose(code) + } + + /** + * In closing fence, after optional whitespace, at sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function beforeSequenceClose(code) { + if (code === marker) { + effects.enter('codeFencedFenceSequence') + return sequenceClose(code) + } + return nok(code) + } + + /** + * In closing fence sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + if (code === marker) { + size++ + effects.consume(code) + return sequenceClose + } + if (size >= sizeOpen) { + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code) + : sequenceCloseAfter(code) + } + return nok(code) + } + + /** + * After closing fence sequence, after optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceCloseAfter(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return ok(code) + } + return nok(code) + } + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuation(effects, ok, nok) { + const self = this + return start + + /** + * + * + * @type {State} + */ + function start(code) { + if (code === null) { + return nok(code) + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineStart + } + + /** + * + * + * @type {State} + */ + function lineStart(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/character-entities/index.js +/** + * Map of named character references. + * + * @type {Record} + */ +const characterEntities = { + AElig: 'Æ', + AMP: '&', + Aacute: 'Á', + Abreve: 'Ă', + Acirc: 'Â', + Acy: 'А', + Afr: '𝔄', + Agrave: 'À', + Alpha: 'Α', + Amacr: 'Ā', + And: '⩓', + Aogon: 'Ą', + Aopf: '𝔸', + ApplyFunction: '⁡', + Aring: 'Å', + Ascr: '𝒜', + Assign: '≔', + Atilde: 'Ã', + Auml: 'Ä', + Backslash: '∖', + Barv: '⫧', + Barwed: '⌆', + Bcy: 'Б', + Because: '∵', + Bernoullis: 'ℬ', + Beta: 'Β', + Bfr: '𝔅', + Bopf: '𝔹', + Breve: '˘', + Bscr: 'ℬ', + Bumpeq: '≎', + CHcy: 'Ч', + COPY: '©', + Cacute: 'Ć', + Cap: '⋒', + CapitalDifferentialD: 'ⅅ', + Cayleys: 'ℭ', + Ccaron: 'Č', + Ccedil: 'Ç', + Ccirc: 'Ĉ', + Cconint: '∰', + Cdot: 'Ċ', + Cedilla: '¸', + CenterDot: '·', + Cfr: 'ℭ', + Chi: 'Χ', + CircleDot: '⊙', + CircleMinus: '⊖', + CirclePlus: '⊕', + CircleTimes: '⊗', + ClockwiseContourIntegral: '∲', + CloseCurlyDoubleQuote: '”', + CloseCurlyQuote: '’', + Colon: '∷', + Colone: '⩴', + Congruent: '≡', + Conint: '∯', + ContourIntegral: '∮', + Copf: 'ℂ', + Coproduct: '∐', + CounterClockwiseContourIntegral: '∳', + Cross: '⨯', + Cscr: '𝒞', + Cup: '⋓', + CupCap: '≍', + DD: 'ⅅ', + DDotrahd: '⤑', + DJcy: 'Ђ', + DScy: 'Ѕ', + DZcy: 'Џ', + Dagger: '‡', + Darr: '↡', + Dashv: '⫤', + Dcaron: 'Ď', + Dcy: 'Д', + Del: '∇', + Delta: 'Δ', + Dfr: '𝔇', + DiacriticalAcute: '´', + DiacriticalDot: '˙', + DiacriticalDoubleAcute: '˝', + DiacriticalGrave: '`', + DiacriticalTilde: '˜', + Diamond: '⋄', + DifferentialD: 'ⅆ', + Dopf: '𝔻', + Dot: '¨', + DotDot: '⃜', + DotEqual: '≐', + DoubleContourIntegral: '∯', + DoubleDot: '¨', + DoubleDownArrow: '⇓', + DoubleLeftArrow: '⇐', + DoubleLeftRightArrow: '⇔', + DoubleLeftTee: '⫤', + DoubleLongLeftArrow: '⟸', + DoubleLongLeftRightArrow: '⟺', + DoubleLongRightArrow: '⟹', + DoubleRightArrow: '⇒', + DoubleRightTee: '⊨', + DoubleUpArrow: '⇑', + DoubleUpDownArrow: '⇕', + DoubleVerticalBar: '∥', + DownArrow: '↓', + DownArrowBar: '⤓', + DownArrowUpArrow: '⇵', + DownBreve: '̑', + DownLeftRightVector: '⥐', + DownLeftTeeVector: '⥞', + DownLeftVector: '↽', + DownLeftVectorBar: '⥖', + DownRightTeeVector: '⥟', + DownRightVector: '⇁', + DownRightVectorBar: '⥗', + DownTee: '⊤', + DownTeeArrow: '↧', + Downarrow: '⇓', + Dscr: '𝒟', + Dstrok: 'Đ', + ENG: 'Ŋ', + ETH: 'Ð', + Eacute: 'É', + Ecaron: 'Ě', + Ecirc: 'Ê', + Ecy: 'Э', + Edot: 'Ė', + Efr: '𝔈', + Egrave: 'È', + Element: '∈', + Emacr: 'Ē', + EmptySmallSquare: '◻', + EmptyVerySmallSquare: '▫', + Eogon: 'Ę', + Eopf: '𝔼', + Epsilon: 'Ε', + Equal: '⩵', + EqualTilde: '≂', + Equilibrium: '⇌', + Escr: 'ℰ', + Esim: '⩳', + Eta: 'Η', + Euml: 'Ë', + Exists: '∃', + ExponentialE: 'ⅇ', + Fcy: 'Ф', + Ffr: '𝔉', + FilledSmallSquare: '◼', + FilledVerySmallSquare: '▪', + Fopf: '𝔽', + ForAll: '∀', + Fouriertrf: 'ℱ', + Fscr: 'ℱ', + GJcy: 'Ѓ', + GT: '>', + Gamma: 'Γ', + Gammad: 'Ϝ', + Gbreve: 'Ğ', + Gcedil: 'Ģ', + Gcirc: 'Ĝ', + Gcy: 'Г', + Gdot: 'Ġ', + Gfr: '𝔊', + Gg: '⋙', + Gopf: '𝔾', + GreaterEqual: '≥', + GreaterEqualLess: '⋛', + GreaterFullEqual: '≧', + GreaterGreater: '⪢', + GreaterLess: '≷', + GreaterSlantEqual: '⩾', + GreaterTilde: '≳', + Gscr: '𝒢', + Gt: '≫', + HARDcy: 'Ъ', + Hacek: 'ˇ', + Hat: '^', + Hcirc: 'Ĥ', + Hfr: 'ℌ', + HilbertSpace: 'ℋ', + Hopf: 'ℍ', + HorizontalLine: '─', + Hscr: 'ℋ', + Hstrok: 'Ħ', + HumpDownHump: '≎', + HumpEqual: '≏', + IEcy: 'Е', + IJlig: 'IJ', + IOcy: 'Ё', + Iacute: 'Í', + Icirc: 'Î', + Icy: 'И', + Idot: 'İ', + Ifr: 'ℑ', + Igrave: 'Ì', + Im: 'ℑ', + Imacr: 'Ī', + ImaginaryI: 'ⅈ', + Implies: '⇒', + Int: '∬', + Integral: '∫', + Intersection: '⋂', + InvisibleComma: '⁣', + InvisibleTimes: '⁢', + Iogon: 'Į', + Iopf: '𝕀', + Iota: 'Ι', + Iscr: 'ℐ', + Itilde: 'Ĩ', + Iukcy: 'І', + Iuml: 'Ï', + Jcirc: 'Ĵ', + Jcy: 'Й', + Jfr: '𝔍', + Jopf: '𝕁', + Jscr: '𝒥', + Jsercy: 'Ј', + Jukcy: 'Є', + KHcy: 'Х', + KJcy: 'Ќ', + Kappa: 'Κ', + Kcedil: 'Ķ', + Kcy: 'К', + Kfr: '𝔎', + Kopf: '𝕂', + Kscr: '𝒦', + LJcy: 'Љ', + LT: '<', + Lacute: 'Ĺ', + Lambda: 'Λ', + Lang: '⟪', + Laplacetrf: 'ℒ', + Larr: '↞', + Lcaron: 'Ľ', + Lcedil: 'Ļ', + Lcy: 'Л', + LeftAngleBracket: '⟨', + LeftArrow: '←', + LeftArrowBar: '⇤', + LeftArrowRightArrow: '⇆', + LeftCeiling: '⌈', + LeftDoubleBracket: '⟦', + LeftDownTeeVector: '⥡', + LeftDownVector: '⇃', + LeftDownVectorBar: '⥙', + LeftFloor: '⌊', + LeftRightArrow: '↔', + LeftRightVector: '⥎', + LeftTee: '⊣', + LeftTeeArrow: '↤', + LeftTeeVector: '⥚', + LeftTriangle: '⊲', + LeftTriangleBar: '⧏', + LeftTriangleEqual: '⊴', + LeftUpDownVector: '⥑', + LeftUpTeeVector: '⥠', + LeftUpVector: '↿', + LeftUpVectorBar: '⥘', + LeftVector: '↼', + LeftVectorBar: '⥒', + Leftarrow: '⇐', + Leftrightarrow: '⇔', + LessEqualGreater: '⋚', + LessFullEqual: '≦', + LessGreater: '≶', + LessLess: '⪡', + LessSlantEqual: '⩽', + LessTilde: '≲', + Lfr: '𝔏', + Ll: '⋘', + Lleftarrow: '⇚', + Lmidot: 'Ŀ', + LongLeftArrow: '⟵', + LongLeftRightArrow: '⟷', + LongRightArrow: '⟶', + Longleftarrow: '⟸', + Longleftrightarrow: '⟺', + Longrightarrow: '⟹', + Lopf: '𝕃', + LowerLeftArrow: '↙', + LowerRightArrow: '↘', + Lscr: 'ℒ', + Lsh: '↰', + Lstrok: 'Ł', + Lt: '≪', + Map: '⤅', + Mcy: 'М', + MediumSpace: ' ', + Mellintrf: 'ℳ', + Mfr: '𝔐', + MinusPlus: '∓', + Mopf: '𝕄', + Mscr: 'ℳ', + Mu: 'Μ', + NJcy: 'Њ', + Nacute: 'Ń', + Ncaron: 'Ň', + Ncedil: 'Ņ', + Ncy: 'Н', + NegativeMediumSpace: '​', + NegativeThickSpace: '​', + NegativeThinSpace: '​', + NegativeVeryThinSpace: '​', + NestedGreaterGreater: '≫', + NestedLessLess: '≪', + NewLine: '\n', + Nfr: '𝔑', + NoBreak: '⁠', + NonBreakingSpace: ' ', + Nopf: 'ℕ', + Not: '⫬', + NotCongruent: '≢', + NotCupCap: '≭', + NotDoubleVerticalBar: '∦', + NotElement: '∉', + NotEqual: '≠', + NotEqualTilde: '≂̸', + NotExists: '∄', + NotGreater: '≯', + NotGreaterEqual: '≱', + NotGreaterFullEqual: '≧̸', + NotGreaterGreater: '≫̸', + NotGreaterLess: '≹', + NotGreaterSlantEqual: '⩾̸', + NotGreaterTilde: '≵', + NotHumpDownHump: '≎̸', + NotHumpEqual: '≏̸', + NotLeftTriangle: '⋪', + NotLeftTriangleBar: '⧏̸', + NotLeftTriangleEqual: '⋬', + NotLess: '≮', + NotLessEqual: '≰', + NotLessGreater: '≸', + NotLessLess: '≪̸', + NotLessSlantEqual: '⩽̸', + NotLessTilde: '≴', + NotNestedGreaterGreater: '⪢̸', + NotNestedLessLess: '⪡̸', + NotPrecedes: '⊀', + NotPrecedesEqual: '⪯̸', + NotPrecedesSlantEqual: '⋠', + NotReverseElement: '∌', + NotRightTriangle: '⋫', + NotRightTriangleBar: '⧐̸', + NotRightTriangleEqual: '⋭', + NotSquareSubset: '⊏̸', + NotSquareSubsetEqual: '⋢', + NotSquareSuperset: '⊐̸', + NotSquareSupersetEqual: '⋣', + NotSubset: '⊂⃒', + NotSubsetEqual: '⊈', + NotSucceeds: '⊁', + NotSucceedsEqual: '⪰̸', + NotSucceedsSlantEqual: '⋡', + NotSucceedsTilde: '≿̸', + NotSuperset: '⊃⃒', + NotSupersetEqual: '⊉', + NotTilde: '≁', + NotTildeEqual: '≄', + NotTildeFullEqual: '≇', + NotTildeTilde: '≉', + NotVerticalBar: '∤', + Nscr: '𝒩', + Ntilde: 'Ñ', + Nu: 'Ν', + OElig: 'Œ', + Oacute: 'Ó', + Ocirc: 'Ô', + Ocy: 'О', + Odblac: 'Ő', + Ofr: '𝔒', + Ograve: 'Ò', + Omacr: 'Ō', + Omega: 'Ω', + Omicron: 'Ο', + Oopf: '𝕆', + OpenCurlyDoubleQuote: '“', + OpenCurlyQuote: '‘', + Or: '⩔', + Oscr: '𝒪', + Oslash: 'Ø', + Otilde: 'Õ', + Otimes: '⨷', + Ouml: 'Ö', + OverBar: '‾', + OverBrace: '⏞', + OverBracket: '⎴', + OverParenthesis: '⏜', + PartialD: '∂', + Pcy: 'П', + Pfr: '𝔓', + Phi: 'Φ', + Pi: 'Π', + PlusMinus: '±', + Poincareplane: 'ℌ', + Popf: 'ℙ', + Pr: '⪻', + Precedes: '≺', + PrecedesEqual: '⪯', + PrecedesSlantEqual: '≼', + PrecedesTilde: '≾', + Prime: '″', + Product: '∏', + Proportion: '∷', + Proportional: '∝', + Pscr: '𝒫', + Psi: 'Ψ', + QUOT: '"', + Qfr: '𝔔', + Qopf: 'ℚ', + Qscr: '𝒬', + RBarr: '⤐', + REG: '®', + Racute: 'Ŕ', + Rang: '⟫', + Rarr: '↠', + Rarrtl: '⤖', + Rcaron: 'Ř', + Rcedil: 'Ŗ', + Rcy: 'Р', + Re: 'ℜ', + ReverseElement: '∋', + ReverseEquilibrium: '⇋', + ReverseUpEquilibrium: '⥯', + Rfr: 'ℜ', + Rho: 'Ρ', + RightAngleBracket: '⟩', + RightArrow: '→', + RightArrowBar: '⇥', + RightArrowLeftArrow: '⇄', + RightCeiling: '⌉', + RightDoubleBracket: '⟧', + RightDownTeeVector: '⥝', + RightDownVector: '⇂', + RightDownVectorBar: '⥕', + RightFloor: '⌋', + RightTee: '⊢', + RightTeeArrow: '↦', + RightTeeVector: '⥛', + RightTriangle: '⊳', + RightTriangleBar: '⧐', + RightTriangleEqual: '⊵', + RightUpDownVector: '⥏', + RightUpTeeVector: '⥜', + RightUpVector: '↾', + RightUpVectorBar: '⥔', + RightVector: '⇀', + RightVectorBar: '⥓', + Rightarrow: '⇒', + Ropf: 'ℝ', + RoundImplies: '⥰', + Rrightarrow: '⇛', + Rscr: 'ℛ', + Rsh: '↱', + RuleDelayed: '⧴', + SHCHcy: 'Щ', + SHcy: 'Ш', + SOFTcy: 'Ь', + Sacute: 'Ś', + Sc: '⪼', + Scaron: 'Š', + Scedil: 'Ş', + Scirc: 'Ŝ', + Scy: 'С', + Sfr: '𝔖', + ShortDownArrow: '↓', + ShortLeftArrow: '←', + ShortRightArrow: '→', + ShortUpArrow: '↑', + Sigma: 'Σ', + SmallCircle: '∘', + Sopf: '𝕊', + Sqrt: '√', + Square: '□', + SquareIntersection: '⊓', + SquareSubset: '⊏', + SquareSubsetEqual: '⊑', + SquareSuperset: '⊐', + SquareSupersetEqual: '⊒', + SquareUnion: '⊔', + Sscr: '𝒮', + Star: '⋆', + Sub: '⋐', + Subset: '⋐', + SubsetEqual: '⊆', + Succeeds: '≻', + SucceedsEqual: '⪰', + SucceedsSlantEqual: '≽', + SucceedsTilde: '≿', + SuchThat: '∋', + Sum: '∑', + Sup: '⋑', + Superset: '⊃', + SupersetEqual: '⊇', + Supset: '⋑', + THORN: 'Þ', + TRADE: '™', + TSHcy: 'Ћ', + TScy: 'Ц', + Tab: '\t', + Tau: 'Τ', + Tcaron: 'Ť', + Tcedil: 'Ţ', + Tcy: 'Т', + Tfr: '𝔗', + Therefore: '∴', + Theta: 'Θ', + ThickSpace: '  ', + ThinSpace: ' ', + Tilde: '∼', + TildeEqual: '≃', + TildeFullEqual: '≅', + TildeTilde: '≈', + Topf: '𝕋', + TripleDot: '⃛', + Tscr: '𝒯', + Tstrok: 'Ŧ', + Uacute: 'Ú', + Uarr: '↟', + Uarrocir: '⥉', + Ubrcy: 'Ў', + Ubreve: 'Ŭ', + Ucirc: 'Û', + Ucy: 'У', + Udblac: 'Ű', + Ufr: '𝔘', + Ugrave: 'Ù', + Umacr: 'Ū', + UnderBar: '_', + UnderBrace: '⏟', + UnderBracket: '⎵', + UnderParenthesis: '⏝', + Union: '⋃', + UnionPlus: '⊎', + Uogon: 'Ų', + Uopf: '𝕌', + UpArrow: '↑', + UpArrowBar: '⤒', + UpArrowDownArrow: '⇅', + UpDownArrow: '↕', + UpEquilibrium: '⥮', + UpTee: '⊥', + UpTeeArrow: '↥', + Uparrow: '⇑', + Updownarrow: '⇕', + UpperLeftArrow: '↖', + UpperRightArrow: '↗', + Upsi: 'ϒ', + Upsilon: 'Υ', + Uring: 'Ů', + Uscr: '𝒰', + Utilde: 'Ũ', + Uuml: 'Ü', + VDash: '⊫', + Vbar: '⫫', + Vcy: 'В', + Vdash: '⊩', + Vdashl: '⫦', + Vee: '⋁', + Verbar: '‖', + Vert: '‖', + VerticalBar: '∣', + VerticalLine: '|', + VerticalSeparator: '❘', + VerticalTilde: '≀', + VeryThinSpace: ' ', + Vfr: '𝔙', + Vopf: '𝕍', + Vscr: '𝒱', + Vvdash: '⊪', + Wcirc: 'Ŵ', + Wedge: '⋀', + Wfr: '𝔚', + Wopf: '𝕎', + Wscr: '𝒲', + Xfr: '𝔛', + Xi: 'Ξ', + Xopf: '𝕏', + Xscr: '𝒳', + YAcy: 'Я', + YIcy: 'Ї', + YUcy: 'Ю', + Yacute: 'Ý', + Ycirc: 'Ŷ', + Ycy: 'Ы', + Yfr: '𝔜', + Yopf: '𝕐', + Yscr: '𝒴', + Yuml: 'Ÿ', + ZHcy: 'Ж', + Zacute: 'Ź', + Zcaron: 'Ž', + Zcy: 'З', + Zdot: 'Ż', + ZeroWidthSpace: '​', + Zeta: 'Ζ', + Zfr: 'ℨ', + Zopf: 'ℤ', + Zscr: '𝒵', + aacute: 'á', + abreve: 'ă', + ac: '∾', + acE: '∾̳', + acd: '∿', + acirc: 'â', + acute: '´', + acy: 'а', + aelig: 'æ', + af: '⁡', + afr: '𝔞', + agrave: 'à', + alefsym: 'ℵ', + aleph: 'ℵ', + alpha: 'α', + amacr: 'ā', + amalg: '⨿', + amp: '&', + and: '∧', + andand: '⩕', + andd: '⩜', + andslope: '⩘', + andv: '⩚', + ang: '∠', + ange: '⦤', + angle: '∠', + angmsd: '∡', + angmsdaa: '⦨', + angmsdab: '⦩', + angmsdac: '⦪', + angmsdad: '⦫', + angmsdae: '⦬', + angmsdaf: '⦭', + angmsdag: '⦮', + angmsdah: '⦯', + angrt: '∟', + angrtvb: '⊾', + angrtvbd: '⦝', + angsph: '∢', + angst: 'Å', + angzarr: '⍼', + aogon: 'ą', + aopf: '𝕒', + ap: '≈', + apE: '⩰', + apacir: '⩯', + ape: '≊', + apid: '≋', + apos: "'", + approx: '≈', + approxeq: '≊', + aring: 'å', + ascr: '𝒶', + ast: '*', + asymp: '≈', + asympeq: '≍', + atilde: 'ã', + auml: 'ä', + awconint: '∳', + awint: '⨑', + bNot: '⫭', + backcong: '≌', + backepsilon: '϶', + backprime: '‵', + backsim: '∽', + backsimeq: '⋍', + barvee: '⊽', + barwed: '⌅', + barwedge: '⌅', + bbrk: '⎵', + bbrktbrk: '⎶', + bcong: '≌', + bcy: 'б', + bdquo: '„', + becaus: '∵', + because: '∵', + bemptyv: '⦰', + bepsi: '϶', + bernou: 'ℬ', + beta: 'β', + beth: 'ℶ', + between: '≬', + bfr: '𝔟', + bigcap: '⋂', + bigcirc: '◯', + bigcup: '⋃', + bigodot: '⨀', + bigoplus: '⨁', + bigotimes: '⨂', + bigsqcup: '⨆', + bigstar: '★', + bigtriangledown: '▽', + bigtriangleup: '△', + biguplus: '⨄', + bigvee: '⋁', + bigwedge: '⋀', + bkarow: '⤍', + blacklozenge: '⧫', + blacksquare: '▪', + blacktriangle: '▴', + blacktriangledown: '▾', + blacktriangleleft: '◂', + blacktriangleright: '▸', + blank: '␣', + blk12: '▒', + blk14: '░', + blk34: '▓', + block: '█', + bne: '=⃥', + bnequiv: '≡⃥', + bnot: '⌐', + bopf: '𝕓', + bot: '⊥', + bottom: '⊥', + bowtie: '⋈', + boxDL: '╗', + boxDR: '╔', + boxDl: '╖', + boxDr: '╓', + boxH: '═', + boxHD: '╦', + boxHU: '╩', + boxHd: '╤', + boxHu: '╧', + boxUL: '╝', + boxUR: '╚', + boxUl: '╜', + boxUr: '╙', + boxV: '║', + boxVH: '╬', + boxVL: '╣', + boxVR: '╠', + boxVh: '╫', + boxVl: '╢', + boxVr: '╟', + boxbox: '⧉', + boxdL: '╕', + boxdR: '╒', + boxdl: '┐', + boxdr: '┌', + boxh: '─', + boxhD: '╥', + boxhU: '╨', + boxhd: '┬', + boxhu: '┴', + boxminus: '⊟', + boxplus: '⊞', + boxtimes: '⊠', + boxuL: '╛', + boxuR: '╘', + boxul: '┘', + boxur: '└', + boxv: '│', + boxvH: '╪', + boxvL: '╡', + boxvR: '╞', + boxvh: '┼', + boxvl: '┤', + boxvr: '├', + bprime: '‵', + breve: '˘', + brvbar: '¦', + bscr: '𝒷', + bsemi: '⁏', + bsim: '∽', + bsime: '⋍', + bsol: '\\', + bsolb: '⧅', + bsolhsub: '⟈', + bull: '•', + bullet: '•', + bump: '≎', + bumpE: '⪮', + bumpe: '≏', + bumpeq: '≏', + cacute: 'ć', + cap: '∩', + capand: '⩄', + capbrcup: '⩉', + capcap: '⩋', + capcup: '⩇', + capdot: '⩀', + caps: '∩︀', + caret: '⁁', + caron: 'ˇ', + ccaps: '⩍', + ccaron: 'č', + ccedil: 'ç', + ccirc: 'ĉ', + ccups: '⩌', + ccupssm: '⩐', + cdot: 'ċ', + cedil: '¸', + cemptyv: '⦲', + cent: '¢', + centerdot: '·', + cfr: '𝔠', + chcy: 'ч', + check: '✓', + checkmark: '✓', + chi: 'χ', + cir: '○', + cirE: '⧃', + circ: 'ˆ', + circeq: '≗', + circlearrowleft: '↺', + circlearrowright: '↻', + circledR: '®', + circledS: 'Ⓢ', + circledast: '⊛', + circledcirc: '⊚', + circleddash: '⊝', + cire: '≗', + cirfnint: '⨐', + cirmid: '⫯', + cirscir: '⧂', + clubs: '♣', + clubsuit: '♣', + colon: ':', + colone: '≔', + coloneq: '≔', + comma: ',', + commat: '@', + comp: '∁', + compfn: '∘', + complement: '∁', + complexes: 'ℂ', + cong: '≅', + congdot: '⩭', + conint: '∮', + copf: '𝕔', + coprod: '∐', + copy: '©', + copysr: '℗', + crarr: '↵', + cross: '✗', + cscr: '𝒸', + csub: '⫏', + csube: '⫑', + csup: '⫐', + csupe: '⫒', + ctdot: '⋯', + cudarrl: '⤸', + cudarrr: '⤵', + cuepr: '⋞', + cuesc: '⋟', + cularr: '↶', + cularrp: '⤽', + cup: '∪', + cupbrcap: '⩈', + cupcap: '⩆', + cupcup: '⩊', + cupdot: '⊍', + cupor: '⩅', + cups: '∪︀', + curarr: '↷', + curarrm: '⤼', + curlyeqprec: '⋞', + curlyeqsucc: '⋟', + curlyvee: '⋎', + curlywedge: '⋏', + curren: '¤', + curvearrowleft: '↶', + curvearrowright: '↷', + cuvee: '⋎', + cuwed: '⋏', + cwconint: '∲', + cwint: '∱', + cylcty: '⌭', + dArr: '⇓', + dHar: '⥥', + dagger: '†', + daleth: 'ℸ', + darr: '↓', + dash: '‐', + dashv: '⊣', + dbkarow: '⤏', + dblac: '˝', + dcaron: 'ď', + dcy: 'д', + dd: 'ⅆ', + ddagger: '‡', + ddarr: '⇊', + ddotseq: '⩷', + deg: '°', + delta: 'δ', + demptyv: '⦱', + dfisht: '⥿', + dfr: '𝔡', + dharl: '⇃', + dharr: '⇂', + diam: '⋄', + diamond: '⋄', + diamondsuit: '♦', + diams: '♦', + die: '¨', + digamma: 'ϝ', + disin: '⋲', + div: '÷', + divide: '÷', + divideontimes: '⋇', + divonx: '⋇', + djcy: 'ђ', + dlcorn: '⌞', + dlcrop: '⌍', + dollar: '$', + dopf: '𝕕', + dot: '˙', + doteq: '≐', + doteqdot: '≑', + dotminus: '∸', + dotplus: '∔', + dotsquare: '⊡', + doublebarwedge: '⌆', + downarrow: '↓', + downdownarrows: '⇊', + downharpoonleft: '⇃', + downharpoonright: '⇂', + drbkarow: '⤐', + drcorn: '⌟', + drcrop: '⌌', + dscr: '𝒹', + dscy: 'ѕ', + dsol: '⧶', + dstrok: 'đ', + dtdot: '⋱', + dtri: '▿', + dtrif: '▾', + duarr: '⇵', + duhar: '⥯', + dwangle: '⦦', + dzcy: 'џ', + dzigrarr: '⟿', + eDDot: '⩷', + eDot: '≑', + eacute: 'é', + easter: '⩮', + ecaron: 'ě', + ecir: '≖', + ecirc: 'ê', + ecolon: '≕', + ecy: 'э', + edot: 'ė', + ee: 'ⅇ', + efDot: '≒', + efr: '𝔢', + eg: '⪚', + egrave: 'è', + egs: '⪖', + egsdot: '⪘', + el: '⪙', + elinters: '⏧', + ell: 'ℓ', + els: '⪕', + elsdot: '⪗', + emacr: 'ē', + empty: '∅', + emptyset: '∅', + emptyv: '∅', + emsp13: ' ', + emsp14: ' ', + emsp: ' ', + eng: 'ŋ', + ensp: ' ', + eogon: 'ę', + eopf: '𝕖', + epar: '⋕', + eparsl: '⧣', + eplus: '⩱', + epsi: 'ε', + epsilon: 'ε', + epsiv: 'ϵ', + eqcirc: '≖', + eqcolon: '≕', + eqsim: '≂', + eqslantgtr: '⪖', + eqslantless: '⪕', + equals: '=', + equest: '≟', + equiv: '≡', + equivDD: '⩸', + eqvparsl: '⧥', + erDot: '≓', + erarr: '⥱', + escr: 'ℯ', + esdot: '≐', + esim: '≂', + eta: 'η', + eth: 'ð', + euml: 'ë', + euro: '€', + excl: '!', + exist: '∃', + expectation: 'ℰ', + exponentiale: 'ⅇ', + fallingdotseq: '≒', + fcy: 'ф', + female: '♀', + ffilig: 'ffi', + fflig: 'ff', + ffllig: 'ffl', + ffr: '𝔣', + filig: 'fi', + fjlig: 'fj', + flat: '♭', + fllig: 'fl', + fltns: '▱', + fnof: 'ƒ', + fopf: '𝕗', + forall: '∀', + fork: '⋔', + forkv: '⫙', + fpartint: '⨍', + frac12: '½', + frac13: '⅓', + frac14: '¼', + frac15: '⅕', + frac16: '⅙', + frac18: '⅛', + frac23: '⅔', + frac25: '⅖', + frac34: '¾', + frac35: '⅗', + frac38: '⅜', + frac45: '⅘', + frac56: '⅚', + frac58: '⅝', + frac78: '⅞', + frasl: '⁄', + frown: '⌢', + fscr: '𝒻', + gE: '≧', + gEl: '⪌', + gacute: 'ǵ', + gamma: 'γ', + gammad: 'ϝ', + gap: '⪆', + gbreve: 'ğ', + gcirc: 'ĝ', + gcy: 'г', + gdot: 'ġ', + ge: '≥', + gel: '⋛', + geq: '≥', + geqq: '≧', + geqslant: '⩾', + ges: '⩾', + gescc: '⪩', + gesdot: '⪀', + gesdoto: '⪂', + gesdotol: '⪄', + gesl: '⋛︀', + gesles: '⪔', + gfr: '𝔤', + gg: '≫', + ggg: '⋙', + gimel: 'ℷ', + gjcy: 'ѓ', + gl: '≷', + glE: '⪒', + gla: '⪥', + glj: '⪤', + gnE: '≩', + gnap: '⪊', + gnapprox: '⪊', + gne: '⪈', + gneq: '⪈', + gneqq: '≩', + gnsim: '⋧', + gopf: '𝕘', + grave: '`', + gscr: 'ℊ', + gsim: '≳', + gsime: '⪎', + gsiml: '⪐', + gt: '>', + gtcc: '⪧', + gtcir: '⩺', + gtdot: '⋗', + gtlPar: '⦕', + gtquest: '⩼', + gtrapprox: '⪆', + gtrarr: '⥸', + gtrdot: '⋗', + gtreqless: '⋛', + gtreqqless: '⪌', + gtrless: '≷', + gtrsim: '≳', + gvertneqq: '≩︀', + gvnE: '≩︀', + hArr: '⇔', + hairsp: ' ', + half: '½', + hamilt: 'ℋ', + hardcy: 'ъ', + harr: '↔', + harrcir: '⥈', + harrw: '↭', + hbar: 'ℏ', + hcirc: 'ĥ', + hearts: '♥', + heartsuit: '♥', + hellip: '…', + hercon: '⊹', + hfr: '𝔥', + hksearow: '⤥', + hkswarow: '⤦', + hoarr: '⇿', + homtht: '∻', + hookleftarrow: '↩', + hookrightarrow: '↪', + hopf: '𝕙', + horbar: '―', + hscr: '𝒽', + hslash: 'ℏ', + hstrok: 'ħ', + hybull: '⁃', + hyphen: '‐', + iacute: 'í', + ic: '⁣', + icirc: 'î', + icy: 'и', + iecy: 'е', + iexcl: '¡', + iff: '⇔', + ifr: '𝔦', + igrave: 'ì', + ii: 'ⅈ', + iiiint: '⨌', + iiint: '∭', + iinfin: '⧜', + iiota: '℩', + ijlig: 'ij', + imacr: 'ī', + image: 'ℑ', + imagline: 'ℐ', + imagpart: 'ℑ', + imath: 'ı', + imof: '⊷', + imped: 'Ƶ', + in: '∈', + incare: '℅', + infin: '∞', + infintie: '⧝', + inodot: 'ı', + int: '∫', + intcal: '⊺', + integers: 'ℤ', + intercal: '⊺', + intlarhk: '⨗', + intprod: '⨼', + iocy: 'ё', + iogon: 'į', + iopf: '𝕚', + iota: 'ι', + iprod: '⨼', + iquest: '¿', + iscr: '𝒾', + isin: '∈', + isinE: '⋹', + isindot: '⋵', + isins: '⋴', + isinsv: '⋳', + isinv: '∈', + it: '⁢', + itilde: 'ĩ', + iukcy: 'і', + iuml: 'ï', + jcirc: 'ĵ', + jcy: 'й', + jfr: '𝔧', + jmath: 'ȷ', + jopf: '𝕛', + jscr: '𝒿', + jsercy: 'ј', + jukcy: 'є', + kappa: 'κ', + kappav: 'ϰ', + kcedil: 'ķ', + kcy: 'к', + kfr: '𝔨', + kgreen: 'ĸ', + khcy: 'х', + kjcy: 'ќ', + kopf: '𝕜', + kscr: '𝓀', + lAarr: '⇚', + lArr: '⇐', + lAtail: '⤛', + lBarr: '⤎', + lE: '≦', + lEg: '⪋', + lHar: '⥢', + lacute: 'ĺ', + laemptyv: '⦴', + lagran: 'ℒ', + lambda: 'λ', + lang: '⟨', + langd: '⦑', + langle: '⟨', + lap: '⪅', + laquo: '«', + larr: '←', + larrb: '⇤', + larrbfs: '⤟', + larrfs: '⤝', + larrhk: '↩', + larrlp: '↫', + larrpl: '⤹', + larrsim: '⥳', + larrtl: '↢', + lat: '⪫', + latail: '⤙', + late: '⪭', + lates: '⪭︀', + lbarr: '⤌', + lbbrk: '❲', + lbrace: '{', + lbrack: '[', + lbrke: '⦋', + lbrksld: '⦏', + lbrkslu: '⦍', + lcaron: 'ľ', + lcedil: 'ļ', + lceil: '⌈', + lcub: '{', + lcy: 'л', + ldca: '⤶', + ldquo: '“', + ldquor: '„', + ldrdhar: '⥧', + ldrushar: '⥋', + ldsh: '↲', + le: '≤', + leftarrow: '←', + leftarrowtail: '↢', + leftharpoondown: '↽', + leftharpoonup: '↼', + leftleftarrows: '⇇', + leftrightarrow: '↔', + leftrightarrows: '⇆', + leftrightharpoons: '⇋', + leftrightsquigarrow: '↭', + leftthreetimes: '⋋', + leg: '⋚', + leq: '≤', + leqq: '≦', + leqslant: '⩽', + les: '⩽', + lescc: '⪨', + lesdot: '⩿', + lesdoto: '⪁', + lesdotor: '⪃', + lesg: '⋚︀', + lesges: '⪓', + lessapprox: '⪅', + lessdot: '⋖', + lesseqgtr: '⋚', + lesseqqgtr: '⪋', + lessgtr: '≶', + lesssim: '≲', + lfisht: '⥼', + lfloor: '⌊', + lfr: '𝔩', + lg: '≶', + lgE: '⪑', + lhard: '↽', + lharu: '↼', + lharul: '⥪', + lhblk: '▄', + ljcy: 'љ', + ll: '≪', + llarr: '⇇', + llcorner: '⌞', + llhard: '⥫', + lltri: '◺', + lmidot: 'ŀ', + lmoust: '⎰', + lmoustache: '⎰', + lnE: '≨', + lnap: '⪉', + lnapprox: '⪉', + lne: '⪇', + lneq: '⪇', + lneqq: '≨', + lnsim: '⋦', + loang: '⟬', + loarr: '⇽', + lobrk: '⟦', + longleftarrow: '⟵', + longleftrightarrow: '⟷', + longmapsto: '⟼', + longrightarrow: '⟶', + looparrowleft: '↫', + looparrowright: '↬', + lopar: '⦅', + lopf: '𝕝', + loplus: '⨭', + lotimes: '⨴', + lowast: '∗', + lowbar: '_', + loz: '◊', + lozenge: '◊', + lozf: '⧫', + lpar: '(', + lparlt: '⦓', + lrarr: '⇆', + lrcorner: '⌟', + lrhar: '⇋', + lrhard: '⥭', + lrm: '‎', + lrtri: '⊿', + lsaquo: '‹', + lscr: '𝓁', + lsh: '↰', + lsim: '≲', + lsime: '⪍', + lsimg: '⪏', + lsqb: '[', + lsquo: '‘', + lsquor: '‚', + lstrok: 'ł', + lt: '<', + ltcc: '⪦', + ltcir: '⩹', + ltdot: '⋖', + lthree: '⋋', + ltimes: '⋉', + ltlarr: '⥶', + ltquest: '⩻', + ltrPar: '⦖', + ltri: '◃', + ltrie: '⊴', + ltrif: '◂', + lurdshar: '⥊', + luruhar: '⥦', + lvertneqq: '≨︀', + lvnE: '≨︀', + mDDot: '∺', + macr: '¯', + male: '♂', + malt: '✠', + maltese: '✠', + map: '↦', + mapsto: '↦', + mapstodown: '↧', + mapstoleft: '↤', + mapstoup: '↥', + marker: '▮', + mcomma: '⨩', + mcy: 'м', + mdash: '—', + measuredangle: '∡', + mfr: '𝔪', + mho: '℧', + micro: 'µ', + mid: '∣', + midast: '*', + midcir: '⫰', + middot: '·', + minus: '−', + minusb: '⊟', + minusd: '∸', + minusdu: '⨪', + mlcp: '⫛', + mldr: '…', + mnplus: '∓', + models: '⊧', + mopf: '𝕞', + mp: '∓', + mscr: '𝓂', + mstpos: '∾', + mu: 'μ', + multimap: '⊸', + mumap: '⊸', + nGg: '⋙̸', + nGt: '≫⃒', + nGtv: '≫̸', + nLeftarrow: '⇍', + nLeftrightarrow: '⇎', + nLl: '⋘̸', + nLt: '≪⃒', + nLtv: '≪̸', + nRightarrow: '⇏', + nVDash: '⊯', + nVdash: '⊮', + nabla: '∇', + nacute: 'ń', + nang: '∠⃒', + nap: '≉', + napE: '⩰̸', + napid: '≋̸', + napos: 'ʼn', + napprox: '≉', + natur: '♮', + natural: '♮', + naturals: 'ℕ', + nbsp: ' ', + nbump: '≎̸', + nbumpe: '≏̸', + ncap: '⩃', + ncaron: 'ň', + ncedil: 'ņ', + ncong: '≇', + ncongdot: '⩭̸', + ncup: '⩂', + ncy: 'н', + ndash: '–', + ne: '≠', + neArr: '⇗', + nearhk: '⤤', + nearr: '↗', + nearrow: '↗', + nedot: '≐̸', + nequiv: '≢', + nesear: '⤨', + nesim: '≂̸', + nexist: '∄', + nexists: '∄', + nfr: '𝔫', + ngE: '≧̸', + nge: '≱', + ngeq: '≱', + ngeqq: '≧̸', + ngeqslant: '⩾̸', + nges: '⩾̸', + ngsim: '≵', + ngt: '≯', + ngtr: '≯', + nhArr: '⇎', + nharr: '↮', + nhpar: '⫲', + ni: '∋', + nis: '⋼', + nisd: '⋺', + niv: '∋', + njcy: 'њ', + nlArr: '⇍', + nlE: '≦̸', + nlarr: '↚', + nldr: '‥', + nle: '≰', + nleftarrow: '↚', + nleftrightarrow: '↮', + nleq: '≰', + nleqq: '≦̸', + nleqslant: '⩽̸', + nles: '⩽̸', + nless: '≮', + nlsim: '≴', + nlt: '≮', + nltri: '⋪', + nltrie: '⋬', + nmid: '∤', + nopf: '𝕟', + not: '¬', + notin: '∉', + notinE: '⋹̸', + notindot: '⋵̸', + notinva: '∉', + notinvb: '⋷', + notinvc: '⋶', + notni: '∌', + notniva: '∌', + notnivb: '⋾', + notnivc: '⋽', + npar: '∦', + nparallel: '∦', + nparsl: '⫽⃥', + npart: '∂̸', + npolint: '⨔', + npr: '⊀', + nprcue: '⋠', + npre: '⪯̸', + nprec: '⊀', + npreceq: '⪯̸', + nrArr: '⇏', + nrarr: '↛', + nrarrc: '⤳̸', + nrarrw: '↝̸', + nrightarrow: '↛', + nrtri: '⋫', + nrtrie: '⋭', + nsc: '⊁', + nsccue: '⋡', + nsce: '⪰̸', + nscr: '𝓃', + nshortmid: '∤', + nshortparallel: '∦', + nsim: '≁', + nsime: '≄', + nsimeq: '≄', + nsmid: '∤', + nspar: '∦', + nsqsube: '⋢', + nsqsupe: '⋣', + nsub: '⊄', + nsubE: '⫅̸', + nsube: '⊈', + nsubset: '⊂⃒', + nsubseteq: '⊈', + nsubseteqq: '⫅̸', + nsucc: '⊁', + nsucceq: '⪰̸', + nsup: '⊅', + nsupE: '⫆̸', + nsupe: '⊉', + nsupset: '⊃⃒', + nsupseteq: '⊉', + nsupseteqq: '⫆̸', + ntgl: '≹', + ntilde: 'ñ', + ntlg: '≸', + ntriangleleft: '⋪', + ntrianglelefteq: '⋬', + ntriangleright: '⋫', + ntrianglerighteq: '⋭', + nu: 'ν', + num: '#', + numero: '№', + numsp: ' ', + nvDash: '⊭', + nvHarr: '⤄', + nvap: '≍⃒', + nvdash: '⊬', + nvge: '≥⃒', + nvgt: '>⃒', + nvinfin: '⧞', + nvlArr: '⤂', + nvle: '≤⃒', + nvlt: '<⃒', + nvltrie: '⊴⃒', + nvrArr: '⤃', + nvrtrie: '⊵⃒', + nvsim: '∼⃒', + nwArr: '⇖', + nwarhk: '⤣', + nwarr: '↖', + nwarrow: '↖', + nwnear: '⤧', + oS: 'Ⓢ', + oacute: 'ó', + oast: '⊛', + ocir: '⊚', + ocirc: 'ô', + ocy: 'о', + odash: '⊝', + odblac: 'ő', + odiv: '⨸', + odot: '⊙', + odsold: '⦼', + oelig: 'œ', + ofcir: '⦿', + ofr: '𝔬', + ogon: '˛', + ograve: 'ò', + ogt: '⧁', + ohbar: '⦵', + ohm: 'Ω', + oint: '∮', + olarr: '↺', + olcir: '⦾', + olcross: '⦻', + oline: '‾', + olt: '⧀', + omacr: 'ō', + omega: 'ω', + omicron: 'ο', + omid: '⦶', + ominus: '⊖', + oopf: '𝕠', + opar: '⦷', + operp: '⦹', + oplus: '⊕', + or: '∨', + orarr: '↻', + ord: '⩝', + order: 'ℴ', + orderof: 'ℴ', + ordf: 'ª', + ordm: 'º', + origof: '⊶', + oror: '⩖', + orslope: '⩗', + orv: '⩛', + oscr: 'ℴ', + oslash: 'ø', + osol: '⊘', + otilde: 'õ', + otimes: '⊗', + otimesas: '⨶', + ouml: 'ö', + ovbar: '⌽', + par: '∥', + para: '¶', + parallel: '∥', + parsim: '⫳', + parsl: '⫽', + part: '∂', + pcy: 'п', + percnt: '%', + period: '.', + permil: '‰', + perp: '⊥', + pertenk: '‱', + pfr: '𝔭', + phi: 'φ', + phiv: 'ϕ', + phmmat: 'ℳ', + phone: '☎', + pi: 'π', + pitchfork: '⋔', + piv: 'ϖ', + planck: 'ℏ', + planckh: 'ℎ', + plankv: 'ℏ', + plus: '+', + plusacir: '⨣', + plusb: '⊞', + pluscir: '⨢', + plusdo: '∔', + plusdu: '⨥', + pluse: '⩲', + plusmn: '±', + plussim: '⨦', + plustwo: '⨧', + pm: '±', + pointint: '⨕', + popf: '𝕡', + pound: '£', + pr: '≺', + prE: '⪳', + prap: '⪷', + prcue: '≼', + pre: '⪯', + prec: '≺', + precapprox: '⪷', + preccurlyeq: '≼', + preceq: '⪯', + precnapprox: '⪹', + precneqq: '⪵', + precnsim: '⋨', + precsim: '≾', + prime: '′', + primes: 'ℙ', + prnE: '⪵', + prnap: '⪹', + prnsim: '⋨', + prod: '∏', + profalar: '⌮', + profline: '⌒', + profsurf: '⌓', + prop: '∝', + propto: '∝', + prsim: '≾', + prurel: '⊰', + pscr: '𝓅', + psi: 'ψ', + puncsp: ' ', + qfr: '𝔮', + qint: '⨌', + qopf: '𝕢', + qprime: '⁗', + qscr: '𝓆', + quaternions: 'ℍ', + quatint: '⨖', + quest: '?', + questeq: '≟', + quot: '"', + rAarr: '⇛', + rArr: '⇒', + rAtail: '⤜', + rBarr: '⤏', + rHar: '⥤', + race: '∽̱', + racute: 'ŕ', + radic: '√', + raemptyv: '⦳', + rang: '⟩', + rangd: '⦒', + range: '⦥', + rangle: '⟩', + raquo: '»', + rarr: '→', + rarrap: '⥵', + rarrb: '⇥', + rarrbfs: '⤠', + rarrc: '⤳', + rarrfs: '⤞', + rarrhk: '↪', + rarrlp: '↬', + rarrpl: '⥅', + rarrsim: '⥴', + rarrtl: '↣', + rarrw: '↝', + ratail: '⤚', + ratio: '∶', + rationals: 'ℚ', + rbarr: '⤍', + rbbrk: '❳', + rbrace: '}', + rbrack: ']', + rbrke: '⦌', + rbrksld: '⦎', + rbrkslu: '⦐', + rcaron: 'ř', + rcedil: 'ŗ', + rceil: '⌉', + rcub: '}', + rcy: 'р', + rdca: '⤷', + rdldhar: '⥩', + rdquo: '”', + rdquor: '”', + rdsh: '↳', + real: 'ℜ', + realine: 'ℛ', + realpart: 'ℜ', + reals: 'ℝ', + rect: '▭', + reg: '®', + rfisht: '⥽', + rfloor: '⌋', + rfr: '𝔯', + rhard: '⇁', + rharu: '⇀', + rharul: '⥬', + rho: 'ρ', + rhov: 'ϱ', + rightarrow: '→', + rightarrowtail: '↣', + rightharpoondown: '⇁', + rightharpoonup: '⇀', + rightleftarrows: '⇄', + rightleftharpoons: '⇌', + rightrightarrows: '⇉', + rightsquigarrow: '↝', + rightthreetimes: '⋌', + ring: '˚', + risingdotseq: '≓', + rlarr: '⇄', + rlhar: '⇌', + rlm: '‏', + rmoust: '⎱', + rmoustache: '⎱', + rnmid: '⫮', + roang: '⟭', + roarr: '⇾', + robrk: '⟧', + ropar: '⦆', + ropf: '𝕣', + roplus: '⨮', + rotimes: '⨵', + rpar: ')', + rpargt: '⦔', + rppolint: '⨒', + rrarr: '⇉', + rsaquo: '›', + rscr: '𝓇', + rsh: '↱', + rsqb: ']', + rsquo: '’', + rsquor: '’', + rthree: '⋌', + rtimes: '⋊', + rtri: '▹', + rtrie: '⊵', + rtrif: '▸', + rtriltri: '⧎', + ruluhar: '⥨', + rx: '℞', + sacute: 'ś', + sbquo: '‚', + sc: '≻', + scE: '⪴', + scap: '⪸', + scaron: 'š', + sccue: '≽', + sce: '⪰', + scedil: 'ş', + scirc: 'ŝ', + scnE: '⪶', + scnap: '⪺', + scnsim: '⋩', + scpolint: '⨓', + scsim: '≿', + scy: 'с', + sdot: '⋅', + sdotb: '⊡', + sdote: '⩦', + seArr: '⇘', + searhk: '⤥', + searr: '↘', + searrow: '↘', + sect: '§', + semi: ';', + seswar: '⤩', + setminus: '∖', + setmn: '∖', + sext: '✶', + sfr: '𝔰', + sfrown: '⌢', + sharp: '♯', + shchcy: 'щ', + shcy: 'ш', + shortmid: '∣', + shortparallel: '∥', + shy: '­', + sigma: 'σ', + sigmaf: 'ς', + sigmav: 'ς', + sim: '∼', + simdot: '⩪', + sime: '≃', + simeq: '≃', + simg: '⪞', + simgE: '⪠', + siml: '⪝', + simlE: '⪟', + simne: '≆', + simplus: '⨤', + simrarr: '⥲', + slarr: '←', + smallsetminus: '∖', + smashp: '⨳', + smeparsl: '⧤', + smid: '∣', + smile: '⌣', + smt: '⪪', + smte: '⪬', + smtes: '⪬︀', + softcy: 'ь', + sol: '/', + solb: '⧄', + solbar: '⌿', + sopf: '𝕤', + spades: '♠', + spadesuit: '♠', + spar: '∥', + sqcap: '⊓', + sqcaps: '⊓︀', + sqcup: '⊔', + sqcups: '⊔︀', + sqsub: '⊏', + sqsube: '⊑', + sqsubset: '⊏', + sqsubseteq: '⊑', + sqsup: '⊐', + sqsupe: '⊒', + sqsupset: '⊐', + sqsupseteq: '⊒', + squ: '□', + square: '□', + squarf: '▪', + squf: '▪', + srarr: '→', + sscr: '𝓈', + ssetmn: '∖', + ssmile: '⌣', + sstarf: '⋆', + star: '☆', + starf: '★', + straightepsilon: 'ϵ', + straightphi: 'ϕ', + strns: '¯', + sub: '⊂', + subE: '⫅', + subdot: '⪽', + sube: '⊆', + subedot: '⫃', + submult: '⫁', + subnE: '⫋', + subne: '⊊', + subplus: '⪿', + subrarr: '⥹', + subset: '⊂', + subseteq: '⊆', + subseteqq: '⫅', + subsetneq: '⊊', + subsetneqq: '⫋', + subsim: '⫇', + subsub: '⫕', + subsup: '⫓', + succ: '≻', + succapprox: '⪸', + succcurlyeq: '≽', + succeq: '⪰', + succnapprox: '⪺', + succneqq: '⪶', + succnsim: '⋩', + succsim: '≿', + sum: '∑', + sung: '♪', + sup1: '¹', + sup2: '²', + sup3: '³', + sup: '⊃', + supE: '⫆', + supdot: '⪾', + supdsub: '⫘', + supe: '⊇', + supedot: '⫄', + suphsol: '⟉', + suphsub: '⫗', + suplarr: '⥻', + supmult: '⫂', + supnE: '⫌', + supne: '⊋', + supplus: '⫀', + supset: '⊃', + supseteq: '⊇', + supseteqq: '⫆', + supsetneq: '⊋', + supsetneqq: '⫌', + supsim: '⫈', + supsub: '⫔', + supsup: '⫖', + swArr: '⇙', + swarhk: '⤦', + swarr: '↙', + swarrow: '↙', + swnwar: '⤪', + szlig: 'ß', + target: '⌖', + tau: 'τ', + tbrk: '⎴', + tcaron: 'ť', + tcedil: 'ţ', + tcy: 'т', + tdot: '⃛', + telrec: '⌕', + tfr: '𝔱', + there4: '∴', + therefore: '∴', + theta: 'θ', + thetasym: 'ϑ', + thetav: 'ϑ', + thickapprox: '≈', + thicksim: '∼', + thinsp: ' ', + thkap: '≈', + thksim: '∼', + thorn: 'þ', + tilde: '˜', + times: '×', + timesb: '⊠', + timesbar: '⨱', + timesd: '⨰', + tint: '∭', + toea: '⤨', + top: '⊤', + topbot: '⌶', + topcir: '⫱', + topf: '𝕥', + topfork: '⫚', + tosa: '⤩', + tprime: '‴', + trade: '™', + triangle: '▵', + triangledown: '▿', + triangleleft: '◃', + trianglelefteq: '⊴', + triangleq: '≜', + triangleright: '▹', + trianglerighteq: '⊵', + tridot: '◬', + trie: '≜', + triminus: '⨺', + triplus: '⨹', + trisb: '⧍', + tritime: '⨻', + trpezium: '⏢', + tscr: '𝓉', + tscy: 'ц', + tshcy: 'ћ', + tstrok: 'ŧ', + twixt: '≬', + twoheadleftarrow: '↞', + twoheadrightarrow: '↠', + uArr: '⇑', + uHar: '⥣', + uacute: 'ú', + uarr: '↑', + ubrcy: 'ў', + ubreve: 'ŭ', + ucirc: 'û', + ucy: 'у', + udarr: '⇅', + udblac: 'ű', + udhar: '⥮', + ufisht: '⥾', + ufr: '𝔲', + ugrave: 'ù', + uharl: '↿', + uharr: '↾', + uhblk: '▀', + ulcorn: '⌜', + ulcorner: '⌜', + ulcrop: '⌏', + ultri: '◸', + umacr: 'ū', + uml: '¨', + uogon: 'ų', + uopf: '𝕦', + uparrow: '↑', + updownarrow: '↕', + upharpoonleft: '↿', + upharpoonright: '↾', + uplus: '⊎', + upsi: 'υ', + upsih: 'ϒ', + upsilon: 'υ', + upuparrows: '⇈', + urcorn: '⌝', + urcorner: '⌝', + urcrop: '⌎', + uring: 'ů', + urtri: '◹', + uscr: '𝓊', + utdot: '⋰', + utilde: 'ũ', + utri: '▵', + utrif: '▴', + uuarr: '⇈', + uuml: 'ü', + uwangle: '⦧', + vArr: '⇕', + vBar: '⫨', + vBarv: '⫩', + vDash: '⊨', + vangrt: '⦜', + varepsilon: 'ϵ', + varkappa: 'ϰ', + varnothing: '∅', + varphi: 'ϕ', + varpi: 'ϖ', + varpropto: '∝', + varr: '↕', + varrho: 'ϱ', + varsigma: 'ς', + varsubsetneq: '⊊︀', + varsubsetneqq: '⫋︀', + varsupsetneq: '⊋︀', + varsupsetneqq: '⫌︀', + vartheta: 'ϑ', + vartriangleleft: '⊲', + vartriangleright: '⊳', + vcy: 'в', + vdash: '⊢', + vee: '∨', + veebar: '⊻', + veeeq: '≚', + vellip: '⋮', + verbar: '|', + vert: '|', + vfr: '𝔳', + vltri: '⊲', + vnsub: '⊂⃒', + vnsup: '⊃⃒', + vopf: '𝕧', + vprop: '∝', + vrtri: '⊳', + vscr: '𝓋', + vsubnE: '⫋︀', + vsubne: '⊊︀', + vsupnE: '⫌︀', + vsupne: '⊋︀', + vzigzag: '⦚', + wcirc: 'ŵ', + wedbar: '⩟', + wedge: '∧', + wedgeq: '≙', + weierp: '℘', + wfr: '𝔴', + wopf: '𝕨', + wp: '℘', + wr: '≀', + wreath: '≀', + wscr: '𝓌', + xcap: '⋂', + xcirc: '◯', + xcup: '⋃', + xdtri: '▽', + xfr: '𝔵', + xhArr: '⟺', + xharr: '⟷', + xi: 'ξ', + xlArr: '⟸', + xlarr: '⟵', + xmap: '⟼', + xnis: '⋻', + xodot: '⨀', + xopf: '𝕩', + xoplus: '⨁', + xotime: '⨂', + xrArr: '⟹', + xrarr: '⟶', + xscr: '𝓍', + xsqcup: '⨆', + xuplus: '⨄', + xutri: '△', + xvee: '⋁', + xwedge: '⋀', + yacute: 'ý', + yacy: 'я', + ycirc: 'ŷ', + ycy: 'ы', + yen: '¥', + yfr: '𝔶', + yicy: 'ї', + yopf: '𝕪', + yscr: '𝓎', + yucy: 'ю', + yuml: 'ÿ', + zacute: 'ź', + zcaron: 'ž', + zcy: 'з', + zdot: 'ż', + zeetrf: 'ℨ', + zeta: 'ζ', + zfr: '𝔷', + zhcy: 'ж', + zigrarr: '⇝', + zopf: '𝕫', + zscr: '𝓏', + zwj: '‍', + zwnj: '‌' +} + +;// CONCATENATED MODULE: ./node_modules/decode-named-character-reference/index.js + + +const own = {}.hasOwnProperty + +/** + * Decode a single character reference (without the `&` or `;`). + * You probably only need this when you’re building parsers yourself that follow + * different rules compared to HTML. + * This is optimized to be tiny in browsers. + * + * @param {string} value + * `notin` (named), `#123` (deci), `#x123` (hexa). + * @returns {string|false} + * Decoded reference. + */ +function decodeNamedCharacterReference(value) { + return own.call(characterEntities, value) ? characterEntities[value] : false +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-reference.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const characterReference = { + name: 'characterReference', + tokenize: tokenizeCharacterReference +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterReference(effects, ok, nok) { + const self = this + let size = 0 + /** @type {number} */ + let max + /** @type {(code: Code) => boolean} */ + let test + return start + + /** + * Start of character reference. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterReference') + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + return open + } + + /** + * After `&`, at `#` for numeric references or alphanumeric for named + * references. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 35) { + effects.enter('characterReferenceMarkerNumeric') + effects.consume(code) + effects.exit('characterReferenceMarkerNumeric') + return numeric + } + effects.enter('characterReferenceValue') + max = 31 + test = asciiAlphanumeric + return value(code) + } + + /** + * After `#`, at `x` for hexadecimals or digit for decimals. + * + * ```markdown + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function numeric(code) { + if (code === 88 || code === 120) { + effects.enter('characterReferenceMarkerHexadecimal') + effects.consume(code) + effects.exit('characterReferenceMarkerHexadecimal') + effects.enter('characterReferenceValue') + max = 6 + test = asciiHexDigit + return value + } + effects.enter('characterReferenceValue') + max = 7 + test = asciiDigit + return value(code) + } + + /** + * After markers (`&#x`, `&#`, or `&`), in value, before `;`. + * + * The character reference kind defines what and how many characters are + * allowed. + * + * ```markdown + * > | a&b + * ^^^ + * > | a{b + * ^^^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function value(code) { + if (code === 59 && size) { + const token = effects.exit('characterReferenceValue') + if ( + test === asciiAlphanumeric && + !decodeNamedCharacterReference(self.sliceSerialize(token)) + ) { + return nok(code) + } + + // To do: `markdown-rs` uses a different name: + // `CharacterReferenceMarkerSemi`. + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + effects.exit('characterReference') + return ok + } + if (test(code) && size++ < max) { + effects.consume(code) + return value + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const characterEscape = { + name: 'characterEscape', + tokenize: tokenizeCharacterEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterEscape(effects, ok, nok) { + return start + + /** + * Start of character escape. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterEscape') + effects.enter('escapeMarker') + effects.consume(code) + effects.exit('escapeMarker') + return inside + } + + /** + * After `\`, at punctuation. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + // ASCII punctuation. + if (asciiPunctuation(code)) { + effects.enter('characterEscapeValue') + effects.consume(code) + effects.exit('characterEscapeValue') + effects.exit('characterEscape') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/line-ending.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const lineEnding = { + name: 'lineEnding', + tokenize: tokenizeLineEnding +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLineEnding(effects, ok) { + return start + + /** @type {State} */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, ok, 'linePrefix') + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-end.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + + +/** @type {Construct} */ +const labelEnd = { + name: 'labelEnd', + tokenize: tokenizeLabelEnd, + resolveTo: resolveToLabelEnd, + resolveAll: resolveAllLabelEnd +} + +/** @type {Construct} */ +const resourceConstruct = { + tokenize: tokenizeResource +} +/** @type {Construct} */ +const referenceFullConstruct = { + tokenize: tokenizeReferenceFull +} +/** @type {Construct} */ +const referenceCollapsedConstruct = { + tokenize: tokenizeReferenceCollapsed +} + +/** @type {Resolver} */ +function resolveAllLabelEnd(events) { + let index = -1 + while (++index < events.length) { + const token = events[index][1] + if ( + token.type === 'labelImage' || + token.type === 'labelLink' || + token.type === 'labelEnd' + ) { + // Remove the marker. + events.splice(index + 1, token.type === 'labelImage' ? 4 : 2) + token.type = 'data' + index++ + } + } + return events +} + +/** @type {Resolver} */ +function resolveToLabelEnd(events, context) { + let index = events.length + let offset = 0 + /** @type {Token} */ + let token + /** @type {number | undefined} */ + let open + /** @type {number | undefined} */ + let close + /** @type {Array} */ + let media + + // Find an opening. + while (index--) { + token = events[index][1] + if (open) { + // If we see another link, or inactive link label, we’ve been here before. + if ( + token.type === 'link' || + (token.type === 'labelLink' && token._inactive) + ) { + break + } + + // Mark other link openings as inactive, as we can’t have links in + // links. + if (events[index][0] === 'enter' && token.type === 'labelLink') { + token._inactive = true + } + } else if (close) { + if ( + events[index][0] === 'enter' && + (token.type === 'labelImage' || token.type === 'labelLink') && + !token._balanced + ) { + open = index + if (token.type !== 'labelLink') { + offset = 2 + break + } + } + } else if (token.type === 'labelEnd') { + close = index + } + } + const group = { + type: events[open][1].type === 'labelLink' ? 'link' : 'image', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + const label = { + type: 'label', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[close][1].end) + } + const text = { + type: 'labelText', + start: Object.assign({}, events[open + offset + 2][1].end), + end: Object.assign({}, events[close - 2][1].start) + } + media = [ + ['enter', group, context], + ['enter', label, context] + ] + + // Opening marker. + media = push(media, events.slice(open + 1, open + offset + 3)) + + // Text open. + media = push(media, [['enter', text, context]]) + + // Always populated by defaults. + + // Between. + media = push( + media, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + offset + 4, close - 3), + context + ) + ) + + // Text close, marker close, label close. + media = push(media, [ + ['exit', text, context], + events[close - 2], + events[close - 1], + ['exit', label, context] + ]) + + // Reference, resource, or so. + media = push(media, events.slice(close + 1)) + + // Media close. + media = push(media, [['exit', group, context]]) + splice(events, open, events.length, media) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelEnd(effects, ok, nok) { + const self = this + let index = self.events.length + /** @type {Token} */ + let labelStart + /** @type {boolean} */ + let defined + + // Find an opening. + while (index--) { + if ( + (self.events[index][1].type === 'labelImage' || + self.events[index][1].type === 'labelLink') && + !self.events[index][1]._balanced + ) { + labelStart = self.events[index][1] + break + } + } + return start + + /** + * Start of label end. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ``` + * + * @type {State} + */ + function start(code) { + // If there is not an okay opening. + if (!labelStart) { + return nok(code) + } + + // If the corresponding label (link) start is marked as inactive, + // it means we’d be wrapping a link, like this: + // + // ```markdown + // > | a [b [c](d) e](f) g. + // ^ + // ``` + // + // We can’t have that, so it’s just balanced brackets. + if (labelStart._inactive) { + return labelEndNok(code) + } + defined = self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize({ + start: labelStart.end, + end: self.now() + }) + ) + ) + effects.enter('labelEnd') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelEnd') + return after + } + + /** + * After `]`. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + // Note: `markdown-rs` also parses GFM footnotes here, which for us is in + // an extension. + + // Resource (`[asd](fgh)`)? + if (code === 40) { + return effects.attempt( + resourceConstruct, + labelEndOk, + defined ? labelEndOk : labelEndNok + )(code) + } + + // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? + if (code === 91) { + return effects.attempt( + referenceFullConstruct, + labelEndOk, + defined ? referenceNotFull : labelEndNok + )(code) + } + + // Shortcut (`[asd]`) reference? + return defined ? labelEndOk(code) : labelEndNok(code) + } + + /** + * After `]`, at `[`, but not at a full reference. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function referenceNotFull(code) { + return effects.attempt( + referenceCollapsedConstruct, + labelEndOk, + labelEndNok + )(code) + } + + /** + * Done, we found something. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndOk(code) { + // Note: `markdown-rs` does a bunch of stuff here. + return ok(code) + } + + /** + * Done, it’s nothing. + * + * There was an okay opening, but we didn’t match anything. + * + * ```markdown + * > | [a](b c + * ^ + * > | [a][b c + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndNok(code) { + labelStart._balanced = true + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeResource(effects, ok, nok) { + return resourceStart + + /** + * At a resource. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceStart(code) { + effects.enter('resource') + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + return resourceBefore + } + + /** + * In resource, after `(`, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceOpen)(code) + : resourceOpen(code) + } + + /** + * In resource, after optional whitespace, at `)` or a destination. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceOpen(code) { + if (code === 41) { + return resourceEnd(code) + } + return factoryDestination( + effects, + resourceDestinationAfter, + resourceDestinationMissing, + 'resourceDestination', + 'resourceDestinationLiteral', + 'resourceDestinationLiteralMarker', + 'resourceDestinationRaw', + 'resourceDestinationString', + 32 + )(code) + } + + /** + * In resource, after destination, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceBetween)(code) + : resourceEnd(code) + } + + /** + * At invalid destination. + * + * ```markdown + * > | [a](<<) b + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationMissing(code) { + return nok(code) + } + + /** + * In resource, after destination and whitespace, at `(` or title. + * + * ```markdown + * > | [a](b ) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBetween(code) { + if (code === 34 || code === 39 || code === 40) { + return factoryTitle( + effects, + resourceTitleAfter, + nok, + 'resourceTitle', + 'resourceTitleMarker', + 'resourceTitleString' + )(code) + } + return resourceEnd(code) + } + + /** + * In resource, after title, at optional whitespace. + * + * ```markdown + * > | [a](b "c") d + * ^ + * ``` + * + * @type {State} + */ + function resourceTitleAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceEnd)(code) + : resourceEnd(code) + } + + /** + * In resource, at `)`. + * + * ```markdown + * > | [a](b) d + * ^ + * ``` + * + * @type {State} + */ + function resourceEnd(code) { + if (code === 41) { + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + effects.exit('resource') + return ok + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceFull(effects, ok, nok) { + const self = this + return referenceFull + + /** + * In a reference (full), at the `[`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFull(code) { + return factoryLabel.call( + self, + effects, + referenceFullAfter, + referenceFullMissing, + 'reference', + 'referenceMarker', + 'referenceString' + )(code) + } + + /** + * In a reference (full), after `]`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullAfter(code) { + return self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + ) + ? ok(code) + : nok(code) + } + + /** + * In reference (full) that was missing. + * + * ```markdown + * > | [a][b d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullMissing(code) { + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceCollapsed(effects, ok, nok) { + return referenceCollapsedStart + + /** + * In reference (collapsed), at `[`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedStart(code) { + // We only attempt a collapsed label if there’s a `[`. + + effects.enter('reference') + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + return referenceCollapsedOpen + } + + /** + * In reference (collapsed), at `]`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedOpen(code) { + if (code === 93) { + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + effects.exit('reference') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-image.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartImage = { + name: 'labelStartImage', + tokenize: tokenizeLabelStartImage, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartImage(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (image) start. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelImage') + effects.enter('labelImageMarker') + effects.consume(code) + effects.exit('labelImageMarker') + return open + } + + /** + * After `!`, at `[`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 91) { + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelImage') + return after + } + return nok(code) + } + + /** + * After `![`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * This is needed in because, when GFM footnotes are enabled, images never + * form when started with a `^`. + * Instead, links form: + * + * ```markdown + * ![^a](b) + * + * ![^a][b] + * + * [b]: c + * ``` + * + * ```html + *

    !^a

    + *

    !^a

    + * ``` + * + * @type {State} + */ + function after(code) { + // To do: use a new field to do this, this is still needed for + // `micromark-extension-gfm-footnote`, but the `label-start-link` + // behavior isn’t. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-classify-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + +/** + * Classify whether a code represents whitespace, punctuation, or something + * else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * > 👉 **Note**: eof (`null`) is seen as whitespace. + * + * @param {Code} code + * Code. + * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} + * Group. + */ +function classifyCharacter(code) { + if ( + code === null || + markdownLineEndingOrSpace(code) || + unicodeWhitespace(code) + ) { + return 1 + } + if (unicodePunctuation(code)) { + return 2 + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/attention.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const attention = { + name: 'attention', + tokenize: tokenizeAttention, + resolveAll: resolveAllAttention +} + +/** + * Take all events and resolve attention to emphasis or strong. + * + * @type {Resolver} + */ +function resolveAllAttention(events, context) { + let index = -1 + /** @type {number} */ + let open + /** @type {Token} */ + let group + /** @type {Token} */ + let text + /** @type {Token} */ + let openingSequence + /** @type {Token} */ + let closingSequence + /** @type {number} */ + let use + /** @type {Array} */ + let nextEvents + /** @type {number} */ + let offset + + // Walk through all events. + // + // Note: performance of this is fine on an mb of normal markdown, but it’s + // a bottleneck for malicious stuff. + while (++index < events.length) { + // Find a token that can close. + if ( + events[index][0] === 'enter' && + events[index][1].type === 'attentionSequence' && + events[index][1]._close + ) { + open = index + + // Now walk back to find an opener. + while (open--) { + // Find a token that can open the closer. + if ( + events[open][0] === 'exit' && + events[open][1].type === 'attentionSequence' && + events[open][1]._open && + // If the markers are the same: + context.sliceSerialize(events[open][1]).charCodeAt(0) === + context.sliceSerialize(events[index][1]).charCodeAt(0) + ) { + // If the opening can close or the closing can open, + // and the close size *is not* a multiple of three, + // but the sum of the opening and closing size *is* multiple of three, + // then don’t match. + if ( + (events[open][1]._close || events[index][1]._open) && + (events[index][1].end.offset - events[index][1].start.offset) % 3 && + !( + (events[open][1].end.offset - + events[open][1].start.offset + + events[index][1].end.offset - + events[index][1].start.offset) % + 3 + ) + ) { + continue + } + + // Number of markers to use from the sequence. + use = + events[open][1].end.offset - events[open][1].start.offset > 1 && + events[index][1].end.offset - events[index][1].start.offset > 1 + ? 2 + : 1 + const start = Object.assign({}, events[open][1].end) + const end = Object.assign({}, events[index][1].start) + movePoint(start, -use) + movePoint(end, use) + openingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start, + end: Object.assign({}, events[open][1].end) + } + closingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start: Object.assign({}, events[index][1].start), + end + } + text = { + type: use > 1 ? 'strongText' : 'emphasisText', + start: Object.assign({}, events[open][1].end), + end: Object.assign({}, events[index][1].start) + } + group = { + type: use > 1 ? 'strong' : 'emphasis', + start: Object.assign({}, openingSequence.start), + end: Object.assign({}, closingSequence.end) + } + events[open][1].end = Object.assign({}, openingSequence.start) + events[index][1].start = Object.assign({}, closingSequence.end) + nextEvents = [] + + // If there are more markers in the opening, add them before. + if (events[open][1].end.offset - events[open][1].start.offset) { + nextEvents = push(nextEvents, [ + ['enter', events[open][1], context], + ['exit', events[open][1], context] + ]) + } + + // Opening. + nextEvents = push(nextEvents, [ + ['enter', group, context], + ['enter', openingSequence, context], + ['exit', openingSequence, context], + ['enter', text, context] + ]) + + // Always populated by defaults. + + // Between. + nextEvents = push( + nextEvents, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + 1, index), + context + ) + ) + + // Closing. + nextEvents = push(nextEvents, [ + ['exit', text, context], + ['enter', closingSequence, context], + ['exit', closingSequence, context], + ['exit', group, context] + ]) + + // If there are more markers in the closing, add them after. + if (events[index][1].end.offset - events[index][1].start.offset) { + offset = 2 + nextEvents = push(nextEvents, [ + ['enter', events[index][1], context], + ['exit', events[index][1], context] + ]) + } else { + offset = 0 + } + splice(events, open - 1, index - open + 3, nextEvents) + index = open + nextEvents.length - offset - 2 + break + } + } + } + } + + // Remove remaining sequences. + index = -1 + while (++index < events.length) { + if (events[index][1].type === 'attentionSequence') { + events[index][1].type = 'data' + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAttention(effects, ok) { + const attentionMarkers = this.parser.constructs.attentionMarkers.null + const previous = this.previous + const before = classifyCharacter(previous) + + /** @type {NonNullable} */ + let marker + return start + + /** + * Before a sequence. + * + * ```markdown + * > | ** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + marker = code + effects.enter('attentionSequence') + return inside(code) + } + + /** + * In a sequence. + * + * ```markdown + * > | ** + * ^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + const token = effects.exit('attentionSequence') + + // To do: next major: move this to resolver, just like `markdown-rs`. + const after = classifyCharacter(code) + + // Always populated by defaults. + + const open = + !after || (after === 2 && before) || attentionMarkers.includes(code) + const close = + !before || (before === 2 && after) || attentionMarkers.includes(previous) + token._open = Boolean(marker === 42 ? open : open && (before || !close)) + token._close = Boolean(marker === 42 ? close : close && (after || !open)) + return ok(code) + } +} + +/** + * Move a point a bit. + * + * Note: `move` only works inside lines! It’s not possible to move past other + * chunks (replacement characters, tabs, or line endings). + * + * @param {Point} point + * @param {number} offset + * @returns {void} + */ +function movePoint(point, offset) { + point.column += offset + point.offset += offset + point._bufferIndex += offset +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/autolink.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const autolink = { + name: 'autolink', + tokenize: tokenizeAutolink +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAutolink(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of an autolink. + * + * ```markdown + * > | ab + * ^ + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('autolink') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.enter('autolinkProtocol') + return open + } + + /** + * After `<`, at protocol or atext. + * + * ```markdown + * > | ab + * ^ + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (asciiAlpha(code)) { + effects.consume(code) + return schemeOrEmailAtext + } + return emailAtext(code) + } + + /** + * At second byte of protocol or atext. + * + * ```markdown + * > | ab + * ^ + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function schemeOrEmailAtext(code) { + // ASCII alphanumeric and `+`, `-`, and `.`. + if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) { + // Count the previous alphabetical from `open` too. + size = 1 + return schemeInsideOrEmailAtext(code) + } + return emailAtext(code) + } + + /** + * In ambiguous protocol or atext. + * + * ```markdown + * > | ab + * ^ + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function schemeInsideOrEmailAtext(code) { + if (code === 58) { + effects.consume(code) + size = 0 + return urlInside + } + + // ASCII alphanumeric and `+`, `-`, and `.`. + if ( + (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && + size++ < 32 + ) { + effects.consume(code) + return schemeInsideOrEmailAtext + } + size = 0 + return emailAtext(code) + } + + /** + * After protocol, in URL. + * + * ```markdown + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function urlInside(code) { + if (code === 62) { + effects.exit('autolinkProtocol') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + + // ASCII control, space, or `<`. + if (code === null || code === 32 || code === 60 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return urlInside + } + + /** + * In email atext. + * + * ```markdown + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function emailAtext(code) { + if (code === 64) { + effects.consume(code) + return emailAtSignOrDot + } + if (asciiAtext(code)) { + effects.consume(code) + return emailAtext + } + return nok(code) + } + + /** + * In label, after at-sign or dot. + * + * ```markdown + * > | ab + * ^ ^ + * ``` + * + * @type {State} + */ + function emailAtSignOrDot(code) { + return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) + } + + /** + * In label, where `.` and `>` are allowed. + * + * ```markdown + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function emailLabel(code) { + if (code === 46) { + effects.consume(code) + size = 0 + return emailAtSignOrDot + } + if (code === 62) { + // Exit, then change the token type. + effects.exit('autolinkProtocol').type = 'autolinkEmail' + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + return emailValue(code) + } + + /** + * In label, where `.` and `>` are *not* allowed. + * + * Though, this is also used in `emailLabel` to parse other values. + * + * ```markdown + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function emailValue(code) { + // ASCII alphanumeric or `-`. + if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) { + const next = code === 45 ? emailValue : emailLabel + effects.consume(code) + return next + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const htmlText = { + name: 'htmlText', + tokenize: tokenizeHtmlText +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlText(effects, ok, nok) { + const self = this + /** @type {NonNullable | undefined} */ + let marker + /** @type {number} */ + let index + /** @type {State} */ + let returnState + return start + + /** + * Start of HTML (text). + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('htmlText') + effects.enter('htmlTextData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | a c + * ^ + * > | a c + * ^ + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + return instruction + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagOpen + } + return nok(code) + } + + /** + * After ` | a c + * ^ + * > | a c + * ^ + * > | a &<]]> c + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + index = 0 + return cdataOpenInside + } + if (asciiAlpha(code)) { + effects.consume(code) + return declaration + } + return nok(code) + } + + /** + * In a comment, after ` | a c + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return nok(code) + } + + /** + * In comment. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function comment(code) { + if (code === null) { + return nok(code) + } + if (code === 45) { + effects.consume(code) + return commentClose + } + if (markdownLineEnding(code)) { + returnState = comment + return lineEndingBefore(code) + } + effects.consume(code) + return comment + } + + /** + * In comment, after `-`. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function commentClose(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return comment(code) + } + + /** + * In comment, after `--`. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function commentEnd(code) { + return code === 62 + ? end(code) + : code === 45 + ? commentClose(code) + : comment(code) + } + + /** + * After ` | a &<]]> b + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + return index === value.length ? cdata : cdataOpenInside + } + return nok(code) + } + + /** + * In CDATA. + * + * ```markdown + * > | a &<]]> b + * ^^^ + * ``` + * + * @type {State} + */ + function cdata(code) { + if (code === null) { + return nok(code) + } + if (code === 93) { + effects.consume(code) + return cdataClose + } + if (markdownLineEnding(code)) { + returnState = cdata + return lineEndingBefore(code) + } + effects.consume(code) + return cdata + } + + /** + * In CDATA, after `]`, at another `]`. + * + * ```markdown + * > | a &<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataClose(code) { + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In CDATA, after `]]`, at `>`. + * + * ```markdown + * > | a &<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataEnd(code) { + if (code === 62) { + return end(code) + } + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In declaration. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function declaration(code) { + if (code === null || code === 62) { + return end(code) + } + if (markdownLineEnding(code)) { + returnState = declaration + return lineEndingBefore(code) + } + effects.consume(code) + return declaration + } + + /** + * In instruction. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function instruction(code) { + if (code === null) { + return nok(code) + } + if (code === 63) { + effects.consume(code) + return instructionClose + } + if (markdownLineEnding(code)) { + returnState = instruction + return lineEndingBefore(code) + } + effects.consume(code) + return instruction + } + + /** + * In instruction, after `?`, at `>`. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function instructionClose(code) { + return code === 62 ? end(code) : instruction(code) + } + + /** + * After ` | a c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagClose + } + return nok(code) + } + + /** + * After ` | a c + * ^ + * ``` + * + * @type {State} + */ + function tagClose(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagClose + } + return tagCloseBetween(code) + } + + /** + * In closing tag, after tag name. + * + * ```markdown + * > | a
    c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseBetween(code) { + if (markdownLineEnding(code)) { + returnState = tagCloseBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagCloseBetween + } + return end(code) + } + + /** + * After ` | a c + * ^ + * ``` + * + * @type {State} + */ + function tagOpen(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagOpen + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In opening tag, after tag name. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function tagOpenBetween(code) { + if (code === 47) { + effects.consume(code) + return end + } + + // ASCII alphabetical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return tagOpenAttributeName + } + if (markdownLineEnding(code)) { + returnState = tagOpenBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenBetween + } + return end(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | a d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeName(code) { + // ASCII alphabetical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return tagOpenAttributeName + } + return tagOpenAttributeNameAfter(code) + } + + /** + * After attribute name, before initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | a d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeNameAfter + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeNameAfter + } + return tagOpenBetween(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | a e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + marker = code + return tagOpenAttributeValueQuoted + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueBefore + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | a e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuoted(code) { + if (code === marker) { + effects.consume(code) + marker = undefined + return tagOpenAttributeValueQuotedAfter + } + if (code === null) { + return nok(code) + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueQuoted + return lineEndingBefore(code) + } + effects.consume(code) + return tagOpenAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | a e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 60 || + code === 61 || + code === 96 + ) { + return nok(code) + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the end + * of the tag. + * + * ```markdown + * > | a e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In certain circumstances of a tag where only an `>` is allowed. + * + * ```markdown + * > | a e + * ^ + * ``` + * + * @type {State} + */ + function end(code) { + if (code === 62) { + effects.consume(code) + effects.exit('htmlTextData') + effects.exit('htmlText') + return ok + } + return nok(code) + } + + /** + * At eol. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * > | a + * ``` + * + * @type {State} + */ + function lineEndingBefore(code) { + effects.exit('htmlTextData') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineEndingAfter + } + + /** + * After eol, at optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfter(code) { + // Always populated by defaults. + + return markdownSpace(code) + ? factorySpace( + effects, + lineEndingAfterPrefix, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : lineEndingAfterPrefix(code) + } + + /** + * After eol, after optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfterPrefix(code) { + effects.enter('htmlTextData') + return returnState(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-link.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartLink = { + name: 'labelStartLink', + tokenize: tokenizeLabelStartLink, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartLink(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (link) start. + * + * ```markdown + * > | a [b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelLink') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelLink') + return after + } + + /** @type {State} */ + function after(code) { + // To do: this isn’t needed in `micromark-extension-gfm-footnote`, + // remove. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/hard-break-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const hardBreakEscape = { + name: 'hardBreakEscape', + tokenize: tokenizeHardBreakEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHardBreakEscape(effects, ok, nok) { + return start + + /** + * Start of a hard break (escape). + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('hardBreakEscape') + effects.consume(code) + return after + } + + /** + * After `\`, at eol. + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownLineEnding(code)) { + effects.exit('hardBreakEscape') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-text.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Previous} Previous + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const codeText = { + name: 'codeText', + tokenize: tokenizeCodeText, + resolve: resolveCodeText, + previous +} + +// To do: next major: don’t resolve, like `markdown-rs`. +/** @type {Resolver} */ +function resolveCodeText(events) { + let tailExitIndex = events.length - 4 + let headEnterIndex = 3 + /** @type {number} */ + let index + /** @type {number | undefined} */ + let enter + + // If we start and end with an EOL or a space. + if ( + (events[headEnterIndex][1].type === 'lineEnding' || + events[headEnterIndex][1].type === 'space') && + (events[tailExitIndex][1].type === 'lineEnding' || + events[tailExitIndex][1].type === 'space') + ) { + index = headEnterIndex + + // And we have data. + while (++index < tailExitIndex) { + if (events[index][1].type === 'codeTextData') { + // Then we have padding. + events[headEnterIndex][1].type = 'codeTextPadding' + events[tailExitIndex][1].type = 'codeTextPadding' + headEnterIndex += 2 + tailExitIndex -= 2 + break + } + } + } + + // Merge adjacent spaces and data. + index = headEnterIndex - 1 + tailExitIndex++ + while (++index <= tailExitIndex) { + if (enter === undefined) { + if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { + enter = index + } + } else if ( + index === tailExitIndex || + events[index][1].type === 'lineEnding' + ) { + events[enter][1].type = 'codeTextData' + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + tailExitIndex -= index - enter - 2 + index = enter + 2 + } + enter = undefined + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Previous} + */ +function previous(code) { + // If there is a previous code, there will always be a tail. + return ( + code !== 96 || + this.events[this.events.length - 1][1].type === 'characterEscape' + ) +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeText(effects, ok, nok) { + const self = this + let sizeOpen = 0 + /** @type {number} */ + let size + /** @type {Token} */ + let token + return start + + /** + * Start of code (text). + * + * ```markdown + * > | `a` + * ^ + * > | \`a` + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('codeText') + effects.enter('codeTextSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 96) { + effects.consume(code) + sizeOpen++ + return sequenceOpen + } + effects.exit('codeTextSequence') + return between(code) + } + + /** + * Between something and something else. + * + * ```markdown + * > | `a` + * ^^ + * ``` + * + * @type {State} + */ + function between(code) { + // EOF. + if (code === null) { + return nok(code) + } + + // To do: next major: don’t do spaces in resolve, but when compiling, + // like `markdown-rs`. + // Tabs don’t work, and virtual spaces don’t make sense. + if (code === 32) { + effects.enter('space') + effects.consume(code) + effects.exit('space') + return between + } + + // Closing fence? Could also be data. + if (code === 96) { + token = effects.enter('codeTextSequence') + size = 0 + return sequenceClose(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return between + } + + // Data. + effects.enter('codeTextData') + return data(code) + } + + /** + * In data. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if ( + code === null || + code === 32 || + code === 96 || + markdownLineEnding(code) + ) { + effects.exit('codeTextData') + return between(code) + } + effects.consume(code) + return data + } + + /** + * In closing sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + // More. + if (code === 96) { + effects.consume(code) + size++ + return sequenceClose + } + + // Done! + if (size === sizeOpen) { + effects.exit('codeTextSequence') + effects.exit('codeText') + return ok(code) + } + + // More or less accents: mark as data. + token.type = 'codeTextData' + return data(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + */ + + + + +/** @satisfies {Extension['document']} */ +const constructs_document = { + [42]: list, + [43]: list, + [45]: list, + [48]: list, + [49]: list, + [50]: list, + [51]: list, + [52]: list, + [53]: list, + [54]: list, + [55]: list, + [56]: list, + [57]: list, + [62]: blockQuote +} + +/** @satisfies {Extension['contentInitial']} */ +const contentInitial = { + [91]: definition +} + +/** @satisfies {Extension['flowInitial']} */ +const flowInitial = { + [-2]: codeIndented, + [-1]: codeIndented, + [32]: codeIndented +} + +/** @satisfies {Extension['flow']} */ +const constructs_flow = { + [35]: headingAtx, + [42]: thematicBreak, + [45]: [setextUnderline, thematicBreak], + [60]: htmlFlow, + [61]: setextUnderline, + [95]: thematicBreak, + [96]: codeFenced, + [126]: codeFenced +} + +/** @satisfies {Extension['string']} */ +const constructs_string = { + [38]: characterReference, + [92]: characterEscape +} + +/** @satisfies {Extension['text']} */ +const constructs_text = { + [-5]: lineEnding, + [-4]: lineEnding, + [-3]: lineEnding, + [33]: labelStartImage, + [38]: characterReference, + [42]: attention, + [60]: [autolink, htmlText], + [91]: labelStartLink, + [92]: [hardBreakEscape, characterEscape], + [93]: labelEnd, + [95]: attention, + [96]: codeText +} + +/** @satisfies {Extension['insideSpan']} */ +const insideSpan = { + null: [attention, resolver] +} + +/** @satisfies {Extension['attentionMarkers']} */ +const attentionMarkers = { + null: [42, 95] +} + +/** @satisfies {Extension['disable']} */ +const disable = { + null: [] +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/parse.js +/** + * @typedef {import('micromark-util-types').Create} Create + * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + */ + + + + + + + + + +/** + * @param {ParseOptions | null | undefined} [options] + * @returns {ParseContext} + */ +function parse(options) { + const settings = options || {} + const constructs = + /** @type {FullNormalizedExtension} */ + combineExtensions([constructs_namespaceObject, ...(settings.extensions || [])]) + + /** @type {ParseContext} */ + const parser = { + defined: [], + lazy: {}, + constructs, + content: create(content), + document: create(document_document), + flow: create(flow), + string: create(string), + text: create(text_text) + } + return parser + + /** + * @param {InitialConstruct} initial + */ + function create(initial) { + return creator + /** @type {Create} */ + function creator(from) { + return createTokenizer(parser, initial, from) + } + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/preprocess.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Value} Value + */ + +/** + * @callback Preprocessor + * @param {Value} value + * @param {Encoding | null | undefined} [encoding] + * @param {boolean | null | undefined} [end=false] + * @returns {Array} + */ + +const search = /[\0\t\n\r]/g + +/** + * @returns {Preprocessor} + */ +function preprocess() { + let column = 1 + let buffer = '' + /** @type {boolean | undefined} */ + let start = true + /** @type {boolean | undefined} */ + let atCarriageReturn + return preprocessor + + /** @type {Preprocessor} */ + function preprocessor(value, encoding, end) { + /** @type {Array} */ + const chunks = [] + /** @type {RegExpMatchArray | null} */ + let match + /** @type {number} */ + let next + /** @type {number} */ + let startPosition + /** @type {number} */ + let endPosition + /** @type {Code} */ + let code + + // @ts-expect-error `Buffer` does allow an encoding. + value = buffer + value.toString(encoding) + startPosition = 0 + buffer = '' + if (start) { + // To do: `markdown-rs` actually parses BOMs (byte order mark). + if (value.charCodeAt(0) === 65279) { + startPosition++ + } + start = undefined + } + while (startPosition < value.length) { + search.lastIndex = startPosition + match = search.exec(value) + endPosition = + match && match.index !== undefined ? match.index : value.length + code = value.charCodeAt(endPosition) + if (!match) { + buffer = value.slice(startPosition) + break + } + if (code === 10 && startPosition === endPosition && atCarriageReturn) { + chunks.push(-3) + atCarriageReturn = undefined + } else { + if (atCarriageReturn) { + chunks.push(-5) + atCarriageReturn = undefined + } + if (startPosition < endPosition) { + chunks.push(value.slice(startPosition, endPosition)) + column += endPosition - startPosition + } + switch (code) { + case 0: { + chunks.push(65533) + column++ + break + } + case 9: { + next = Math.ceil(column / 4) * 4 + chunks.push(-2) + while (column++ < next) chunks.push(-1) + break + } + case 10: { + chunks.push(-4) + column = 1 + break + } + default: { + atCarriageReturn = true + column = 1 + } + } + } + startPosition = endPosition + 1 + } + if (end) { + if (atCarriageReturn) chunks.push(-5) + if (buffer) chunks.push(buffer) + chunks.push(null) + } + return chunks + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/postprocess.js +/** + * @typedef {import('micromark-util-types').Event} Event + */ + + + +/** + * @param {Array} events + * @returns {Array} + */ +function postprocess(events) { + while (!subtokenize(events)) { + // Empty + } + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-numeric-character-reference/index.js +/** + * Turn the number (in string form as either hexa- or plain decimal) coming from + * a numeric character reference into a character. + * + * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes + * non-characters and control characters safe. + * + * @param {string} value + * Value to decode. + * @param {number} base + * Numeric base. + * @returns {string} + * Character. + */ +function decodeNumericCharacterReference(value, base) { + const code = Number.parseInt(value, base) + if ( + // C0 except for HT, LF, FF, CR, space. + code < 9 || + code === 11 || + (code > 13 && code < 32) || + // Control character (DEL) of C0, and C1 controls. + (code > 126 && code < 160) || + // Lone high surrogates and low surrogates. + (code > 55295 && code < 57344) || + // Noncharacters. + (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ || + (code & 65535) === 65535 || + (code & 65535) === 65534 /* eslint-enable no-bitwise */ || + // Out of range + code > 1114111 + ) { + return '\uFFFD' + } + return String.fromCharCode(code) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-string/index.js + + +const characterEscapeOrReference = + /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi + +/** + * Decode markdown strings (which occur in places such as fenced code info + * strings, destinations, labels, and titles). + * + * The “string” content type allows character escapes and -references. + * This decodes those. + * + * @param {string} value + * Value to decode. + * @returns {string} + * Decoded value. + */ +function decodeString(value) { + return value.replace(characterEscapeOrReference, decode) +} + +/** + * @param {string} $0 + * @param {string} $1 + * @param {string} $2 + * @returns {string} + */ +function decode($0, $1, $2) { + if ($1) { + // Escape. + return $1 + } + + // Reference. + const head = $2.charCodeAt(0) + if (head === 35) { + const head = $2.charCodeAt(1) + const hex = head === 120 || head === 88 + return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10) + } + return decodeNamedCharacterReference($2) || $0 +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/unist-util-stringify-position/lib/index.js +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Point} Point + * @typedef {import('unist').Position} Position + */ + +/** + * @typedef NodeLike + * @property {string} type + * @property {PositionLike | null | undefined} [position] + * + * @typedef PositionLike + * @property {PointLike | null | undefined} [start] + * @property {PointLike | null | undefined} [end] + * + * @typedef PointLike + * @property {number | null | undefined} [line] + * @property {number | null | undefined} [column] + * @property {number | null | undefined} [offset] + */ + +/** + * Serialize the positional info of a point, position (start and end points), + * or node. + * + * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] + * Node, position, or point. + * @returns {string} + * Pretty printed positional info of a node (`string`). + * + * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) + * or a point `l:c` (when given `point`), where `l` stands for line, `c` for + * column, `s` for `start`, and `e` for end. + * An empty string (`''`) is returned if the given value is neither `node`, + * `position`, nor `point`. + */ +function stringifyPosition(value) { + // Nothing. + if (!value || typeof value !== 'object') { + return '' + } + + // Node. + if ('position' in value || 'type' in value) { + return position(value.position) + } + + // Position. + if ('start' in value || 'end' in value) { + return position(value) + } + + // Point. + if ('line' in value || 'column' in value) { + return point(value) + } + + // ? + return '' +} + +/** + * @param {Point | PointLike | null | undefined} point + * @returns {string} + */ +function point(point) { + return index(point && point.line) + ':' + index(point && point.column) +} + +/** + * @param {Position | PositionLike | null | undefined} pos + * @returns {string} + */ +function position(pos) { + return point(pos && pos.start) + '-' + point(pos && pos.end) +} + +/** + * @param {number | null | undefined} value + * @returns {number} + */ +function index(value) { + return value && typeof value === 'number' ? value : 1 +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-from-markdown/lib/index.js +/** + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Value} Value + * + * @typedef {import('unist').Parent} UnistParent + * @typedef {import('unist').Point} Point + * + * @typedef {import('mdast').PhrasingContent} PhrasingContent + * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent + * @typedef {import('mdast').Content} Content + * @typedef {import('mdast').Break} Break + * @typedef {import('mdast').Blockquote} Blockquote + * @typedef {import('mdast').Code} Code + * @typedef {import('mdast').Definition} Definition + * @typedef {import('mdast').Emphasis} Emphasis + * @typedef {import('mdast').Heading} Heading + * @typedef {import('mdast').HTML} HTML + * @typedef {import('mdast').Image} Image + * @typedef {import('mdast').ImageReference} ImageReference + * @typedef {import('mdast').InlineCode} InlineCode + * @typedef {import('mdast').Link} Link + * @typedef {import('mdast').LinkReference} LinkReference + * @typedef {import('mdast').List} List + * @typedef {import('mdast').ListItem} ListItem + * @typedef {import('mdast').Paragraph} Paragraph + * @typedef {import('mdast').Root} Root + * @typedef {import('mdast').Strong} Strong + * @typedef {import('mdast').Text} Text + * @typedef {import('mdast').ThematicBreak} ThematicBreak + * @typedef {import('mdast').ReferenceType} ReferenceType + * @typedef {import('../index.js').CompileData} CompileData + */ + +/** + * @typedef {Root | Content} Node + * @typedef {Extract} Parent + * + * @typedef {Omit & {type: 'fragment', children: Array}} Fragment + */ + +/** + * @callback Transform + * Extra transform, to change the AST afterwards. + * @param {Root} tree + * Tree to transform. + * @returns {Root | undefined | null | void} + * New tree or nothing (in which case the current tree is used). + * + * @callback Handle + * Handle a token. + * @param {CompileContext} this + * Context. + * @param {Token} token + * Current token. + * @returns {void} + * Nothing. + * + * @typedef {Record} Handles + * Token types mapping to handles + * + * @callback OnEnterError + * Handle the case where the `right` token is open, but it is closed (by the + * `left` token) or because we reached the end of the document. + * @param {Omit} this + * Context. + * @param {Token | undefined} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @callback OnExitError + * Handle the case where the `right` token is open but it is closed by + * exiting the `left` token. + * @param {Omit} this + * Context. + * @param {Token} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @typedef {[Token, OnEnterError | undefined]} TokenTuple + * Open token on the stack, with an optional error handler for when + * that token isn’t closed properly. + */ + +/** + * @typedef Config + * Configuration. + * + * We have our defaults, but extensions will add more. + * @property {Array} canContainEols + * Token types where line endings are used. + * @property {Handles} enter + * Opening handles. + * @property {Handles} exit + * Closing handles. + * @property {Array} transforms + * Tree transforms. + * + * @typedef {Partial} Extension + * Change how markdown tokens from micromark are turned into mdast. + * + * @typedef CompileContext + * mdast compiler context. + * @property {Array} stack + * Stack of nodes. + * @property {Array} tokenStack + * Stack of tokens. + * @property {(key: Key) => CompileData[Key]} getData + * Get data from the key/value store. + * @property {(key: Key, value?: CompileData[Key]) => void} setData + * Set data into the key/value store. + * @property {(this: CompileContext) => void} buffer + * Capture some of the output data. + * @property {(this: CompileContext) => string} resume + * Stop capturing and access the output data. + * @property {(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter + * Enter a token. + * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit + * Exit a token. + * @property {TokenizeContext['sliceSerialize']} sliceSerialize + * Get the string value of a token. + * @property {Config} config + * Configuration. + * + * @typedef FromMarkdownOptions + * Configuration for how to build mdast. + * @property {Array> | null | undefined} [mdastExtensions] + * Extensions for this utility to change how tokens are turned into a tree. + * + * @typedef {ParseOptions & FromMarkdownOptions} Options + * Configuration. + */ + +// To do: micromark: create a registry of tokens? +// To do: next major: don’t return given `Node` from `enter`. +// To do: next major: remove setter/getter. + + + + + + + + + + +const lib_own = {}.hasOwnProperty + +/** + * @param value + * Markdown to parse. + * @param encoding + * Character encoding for when `value` is `Buffer`. + * @param options + * Configuration. + * @returns + * mdast tree. + */ +const fromMarkdown = + /** + * @type {( + * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) & + * ((value: Value, options?: Options | null | undefined) => Root) + * )} + */ + + /** + * @param {Value} value + * @param {Encoding | Options | null | undefined} [encoding] + * @param {Options | null | undefined} [options] + * @returns {Root} + */ + function (value, encoding, options) { + if (typeof encoding !== 'string') { + options = encoding + encoding = undefined + } + return compiler(options)( + postprocess( + parse(options).document().write(preprocess()(value, encoding, true)) + ) + ) + } + +/** + * Note this compiler only understand complete buffering, not streaming. + * + * @param {Options | null | undefined} [options] + */ +function compiler(options) { + /** @type {Config} */ + const config = { + transforms: [], + canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'], + enter: { + autolink: opener(link), + autolinkProtocol: onenterdata, + autolinkEmail: onenterdata, + atxHeading: opener(heading), + blockQuote: opener(blockQuote), + characterEscape: onenterdata, + characterReference: onenterdata, + codeFenced: opener(codeFlow), + codeFencedFenceInfo: buffer, + codeFencedFenceMeta: buffer, + codeIndented: opener(codeFlow, buffer), + codeText: opener(codeText, buffer), + codeTextData: onenterdata, + data: onenterdata, + codeFlowValue: onenterdata, + definition: opener(definition), + definitionDestinationString: buffer, + definitionLabelString: buffer, + definitionTitleString: buffer, + emphasis: opener(emphasis), + hardBreakEscape: opener(hardBreak), + hardBreakTrailing: opener(hardBreak), + htmlFlow: opener(html, buffer), + htmlFlowData: onenterdata, + htmlText: opener(html, buffer), + htmlTextData: onenterdata, + image: opener(image), + label: buffer, + link: opener(link), + listItem: opener(listItem), + listItemValue: onenterlistitemvalue, + listOrdered: opener(list, onenterlistordered), + listUnordered: opener(list), + paragraph: opener(paragraph), + reference: onenterreference, + referenceString: buffer, + resourceDestinationString: buffer, + resourceTitleString: buffer, + setextHeading: opener(heading), + strong: opener(strong), + thematicBreak: opener(thematicBreak) + }, + exit: { + atxHeading: closer(), + atxHeadingSequence: onexitatxheadingsequence, + autolink: closer(), + autolinkEmail: onexitautolinkemail, + autolinkProtocol: onexitautolinkprotocol, + blockQuote: closer(), + characterEscapeValue: onexitdata, + characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, + characterReferenceMarkerNumeric: onexitcharacterreferencemarker, + characterReferenceValue: onexitcharacterreferencevalue, + codeFenced: closer(onexitcodefenced), + codeFencedFence: onexitcodefencedfence, + codeFencedFenceInfo: onexitcodefencedfenceinfo, + codeFencedFenceMeta: onexitcodefencedfencemeta, + codeFlowValue: onexitdata, + codeIndented: closer(onexitcodeindented), + codeText: closer(onexitcodetext), + codeTextData: onexitdata, + data: onexitdata, + definition: closer(), + definitionDestinationString: onexitdefinitiondestinationstring, + definitionLabelString: onexitdefinitionlabelstring, + definitionTitleString: onexitdefinitiontitlestring, + emphasis: closer(), + hardBreakEscape: closer(onexithardbreak), + hardBreakTrailing: closer(onexithardbreak), + htmlFlow: closer(onexithtmlflow), + htmlFlowData: onexitdata, + htmlText: closer(onexithtmltext), + htmlTextData: onexitdata, + image: closer(onexitimage), + label: onexitlabel, + labelText: onexitlabeltext, + lineEnding: onexitlineending, + link: closer(onexitlink), + listItem: closer(), + listOrdered: closer(), + listUnordered: closer(), + paragraph: closer(), + referenceString: onexitreferencestring, + resourceDestinationString: onexitresourcedestinationstring, + resourceTitleString: onexitresourcetitlestring, + resource: onexitresource, + setextHeading: closer(onexitsetextheading), + setextHeadingLineSequence: onexitsetextheadinglinesequence, + setextHeadingText: onexitsetextheadingtext, + strong: closer(), + thematicBreak: closer() + } + } + configure(config, (options || {}).mdastExtensions || []) + + /** @type {CompileData} */ + const data = {} + return compile + + /** + * Turn micromark events into an mdast tree. + * + * @param {Array} events + * Events. + * @returns {Root} + * mdast tree. + */ + function compile(events) { + /** @type {Root} */ + let tree = { + type: 'root', + children: [] + } + /** @type {Omit} */ + const context = { + stack: [tree], + tokenStack: [], + config, + enter, + exit, + buffer, + resume, + setData, + getData + } + /** @type {Array} */ + const listStack = [] + let index = -1 + while (++index < events.length) { + // We preprocess lists to add `listItem` tokens, and to infer whether + // items the list itself are spread out. + if ( + events[index][1].type === 'listOrdered' || + events[index][1].type === 'listUnordered' + ) { + if (events[index][0] === 'enter') { + listStack.push(index) + } else { + const tail = listStack.pop() + index = prepareList(events, tail, index) + } + } + } + index = -1 + while (++index < events.length) { + const handler = config[events[index][0]] + if (lib_own.call(handler, events[index][1].type)) { + handler[events[index][1].type].call( + Object.assign( + { + sliceSerialize: events[index][2].sliceSerialize + }, + context + ), + events[index][1] + ) + } + } + + // Handle tokens still being open. + if (context.tokenStack.length > 0) { + const tail = context.tokenStack[context.tokenStack.length - 1] + const handler = tail[1] || defaultOnError + handler.call(context, undefined, tail[0]) + } + + // Figure out `root` position. + tree.position = { + start: lib_point( + events.length > 0 + ? events[0][1].start + : { + line: 1, + column: 1, + offset: 0 + } + ), + end: lib_point( + events.length > 0 + ? events[events.length - 2][1].end + : { + line: 1, + column: 1, + offset: 0 + } + ) + } + + // Call transforms. + index = -1 + while (++index < config.transforms.length) { + tree = config.transforms[index](tree) || tree + } + return tree + } + + /** + * @param {Array} events + * @param {number} start + * @param {number} length + * @returns {number} + */ + function prepareList(events, start, length) { + let index = start - 1 + let containerBalance = -1 + let listSpread = false + /** @type {Token | undefined} */ + let listItem + /** @type {number | undefined} */ + let lineIndex + /** @type {number | undefined} */ + let firstBlankLineIndex + /** @type {boolean | undefined} */ + let atMarker + while (++index <= length) { + const event = events[index] + if ( + event[1].type === 'listUnordered' || + event[1].type === 'listOrdered' || + event[1].type === 'blockQuote' + ) { + if (event[0] === 'enter') { + containerBalance++ + } else { + containerBalance-- + } + atMarker = undefined + } else if (event[1].type === 'lineEndingBlank') { + if (event[0] === 'enter') { + if ( + listItem && + !atMarker && + !containerBalance && + !firstBlankLineIndex + ) { + firstBlankLineIndex = index + } + atMarker = undefined + } + } else if ( + event[1].type === 'linePrefix' || + event[1].type === 'listItemValue' || + event[1].type === 'listItemMarker' || + event[1].type === 'listItemPrefix' || + event[1].type === 'listItemPrefixWhitespace' + ) { + // Empty. + } else { + atMarker = undefined + } + if ( + (!containerBalance && + event[0] === 'enter' && + event[1].type === 'listItemPrefix') || + (containerBalance === -1 && + event[0] === 'exit' && + (event[1].type === 'listUnordered' || + event[1].type === 'listOrdered')) + ) { + if (listItem) { + let tailIndex = index + lineIndex = undefined + while (tailIndex--) { + const tailEvent = events[tailIndex] + if ( + tailEvent[1].type === 'lineEnding' || + tailEvent[1].type === 'lineEndingBlank' + ) { + if (tailEvent[0] === 'exit') continue + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + listSpread = true + } + tailEvent[1].type = 'lineEnding' + lineIndex = tailIndex + } else if ( + tailEvent[1].type === 'linePrefix' || + tailEvent[1].type === 'blockQuotePrefix' || + tailEvent[1].type === 'blockQuotePrefixWhitespace' || + tailEvent[1].type === 'blockQuoteMarker' || + tailEvent[1].type === 'listItemIndent' + ) { + // Empty + } else { + break + } + } + if ( + firstBlankLineIndex && + (!lineIndex || firstBlankLineIndex < lineIndex) + ) { + listItem._spread = true + } + + // Fix position. + listItem.end = Object.assign( + {}, + lineIndex ? events[lineIndex][1].start : event[1].end + ) + events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]) + index++ + length++ + } + + // Create a new list item. + if (event[1].type === 'listItemPrefix') { + listItem = { + type: 'listItem', + _spread: false, + start: Object.assign({}, event[1].start), + // @ts-expect-error: we’ll add `end` in a second. + end: undefined + } + // @ts-expect-error: `listItem` is most definitely defined, TS... + events.splice(index, 0, ['enter', listItem, event[2]]) + index++ + length++ + firstBlankLineIndex = undefined + atMarker = true + } + } + } + events[start][1]._spread = listSpread + return length + } + + /** + * Set data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @param {CompileData[Key]} [value] + * New value. + * @returns {void} + * Nothing. + */ + function setData(key, value) { + data[key] = value + } + + /** + * Get data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @returns {CompileData[Key]} + * Value. + */ + function getData(key) { + return data[key] + } + + /** + * Create an opener handle. + * + * @param {(token: Token) => Node} create + * Create a node. + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function opener(create, and) { + return open + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function open(token) { + enter.call(this, create(token), token) + if (and) and.call(this, token) + } + } + + /** + * @this {CompileContext} + * @returns {void} + */ + function buffer() { + this.stack.push({ + type: 'fragment', + children: [] + }) + } + + /** + * @template {Node} Kind + * Node type. + * @this {CompileContext} + * Context. + * @param {Kind} node + * Node to enter. + * @param {Token} token + * Corresponding token. + * @param {OnEnterError | undefined} [errorHandler] + * Handle the case where this token is open, but it is closed by something else. + * @returns {Kind} + * The given node. + */ + function enter(node, token, errorHandler) { + const parent = this.stack[this.stack.length - 1] + // @ts-expect-error: Assume `Node` can exist as a child of `parent`. + parent.children.push(node) + this.stack.push(node) + this.tokenStack.push([token, errorHandler]) + // @ts-expect-error: `end` will be patched later. + node.position = { + start: lib_point(token.start) + } + return node + } + + /** + * Create a closer handle. + * + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function closer(and) { + return close + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function close(token) { + if (and) and.call(this, token) + exit.call(this, token) + } + } + + /** + * @this {CompileContext} + * Context. + * @param {Token} token + * Corresponding token. + * @param {OnExitError | undefined} [onExitError] + * Handle the case where another token is open. + * @returns {Node} + * The closed node. + */ + function exit(token, onExitError) { + const node = this.stack.pop() + const open = this.tokenStack.pop() + if (!open) { + throw new Error( + 'Cannot close `' + + token.type + + '` (' + + stringifyPosition({ + start: token.start, + end: token.end + }) + + '): it’s not open' + ) + } else if (open[0].type !== token.type) { + if (onExitError) { + onExitError.call(this, token, open[0]) + } else { + const handler = open[1] || defaultOnError + handler.call(this, token, open[0]) + } + } + node.position.end = lib_point(token.end) + return node + } + + /** + * @this {CompileContext} + * @returns {string} + */ + function resume() { + return lib_toString(this.stack.pop()) + } + + // + // Handlers. + // + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistordered() { + setData('expectingFirstListItemValue', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistitemvalue(token) { + if (getData('expectingFirstListItemValue')) { + const ancestor = this.stack[this.stack.length - 2] + ancestor.start = Number.parseInt(this.sliceSerialize(token), 10) + setData('expectingFirstListItemValue') + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfenceinfo() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.lang = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfencemeta() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.meta = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfence() { + // Exit if this is the closing fence. + if (getData('flowCodeInside')) return + this.buffer() + setData('flowCodeInside', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefenced() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, '') + setData('flowCodeInside') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodeindented() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/(\r?\n|\r)$/g, '') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitionlabelstring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + node.label = label + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiontitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiondestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitatxheadingsequence(token) { + const node = this.stack[this.stack.length - 1] + if (!node.depth) { + const depth = this.sliceSerialize(token).length + node.depth = depth + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadingtext() { + setData('setextHeadingSlurpLineEnding', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadinglinesequence(token) { + const node = this.stack[this.stack.length - 1] + node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2 + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheading() { + setData('setextHeadingSlurpLineEnding') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterdata(token) { + const node = this.stack[this.stack.length - 1] + let tail = node.children[node.children.length - 1] + if (!tail || tail.type !== 'text') { + // Add a new text node. + tail = text() + // @ts-expect-error: we’ll add `end` later. + tail.position = { + start: lib_point(token.start) + } + // @ts-expect-error: Assume `parent` accepts `text`. + node.children.push(tail) + } + this.stack.push(tail) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitdata(token) { + const tail = this.stack.pop() + tail.value += this.sliceSerialize(token) + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlineending(token) { + const context = this.stack[this.stack.length - 1] + // If we’re at a hard break, include the line ending in there. + if (getData('atHardBreak')) { + const tail = context.children[context.children.length - 1] + tail.position.end = lib_point(token.end) + setData('atHardBreak') + return + } + if ( + !getData('setextHeadingSlurpLineEnding') && + config.canContainEols.includes(context.type) + ) { + onenterdata.call(this, token) + onexitdata.call(this, token) + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithardbreak() { + setData('atHardBreak', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmlflow() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmltext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcodetext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlink() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitimage() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabeltext(token) { + const string = this.sliceSerialize(token) + const ancestor = this.stack[this.stack.length - 2] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + ancestor.label = decodeString(string) + // @ts-expect-error: same as above. + ancestor.identifier = normalizeIdentifier(string).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabel() { + const fragment = this.stack[this.stack.length - 1] + const value = this.resume() + const node = this.stack[this.stack.length - 1] + // Assume a reference. + setData('inReference', true) + if (node.type === 'link') { + /** @type {Array} */ + // @ts-expect-error: Assume static phrasing content. + const children = fragment.children + node.children = children + } else { + node.alt = value + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcedestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcetitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresource() { + setData('inReference') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterreference() { + setData('referenceType', 'collapsed') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitreferencestring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + node.label = label + // @ts-expect-error: same as above. + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + setData('referenceType', 'full') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcharacterreferencemarker(token) { + setData('characterReferenceType', token.type) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcharacterreferencevalue(token) { + const data = this.sliceSerialize(token) + const type = getData('characterReferenceType') + /** @type {string} */ + let value + if (type) { + value = decodeNumericCharacterReference( + data, + type === 'characterReferenceMarkerNumeric' ? 10 : 16 + ) + setData('characterReferenceType') + } else { + const result = decodeNamedCharacterReference(data) + value = result + } + const tail = this.stack.pop() + tail.value += value + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkprotocol(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = this.sliceSerialize(token) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkemail(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = 'mailto:' + this.sliceSerialize(token) + } + + // + // Creaters. + // + + /** @returns {Blockquote} */ + function blockQuote() { + return { + type: 'blockquote', + children: [] + } + } + + /** @returns {Code} */ + function codeFlow() { + return { + type: 'code', + lang: null, + meta: null, + value: '' + } + } + + /** @returns {InlineCode} */ + function codeText() { + return { + type: 'inlineCode', + value: '' + } + } + + /** @returns {Definition} */ + function definition() { + return { + type: 'definition', + identifier: '', + label: null, + title: null, + url: '' + } + } + + /** @returns {Emphasis} */ + function emphasis() { + return { + type: 'emphasis', + children: [] + } + } + + /** @returns {Heading} */ + function heading() { + // @ts-expect-error `depth` will be set later. + return { + type: 'heading', + depth: undefined, + children: [] + } + } + + /** @returns {Break} */ + function hardBreak() { + return { + type: 'break' + } + } + + /** @returns {HTML} */ + function html() { + return { + type: 'html', + value: '' + } + } + + /** @returns {Image} */ + function image() { + return { + type: 'image', + title: null, + url: '', + alt: null + } + } + + /** @returns {Link} */ + function link() { + return { + type: 'link', + title: null, + url: '', + children: [] + } + } + + /** + * @param {Token} token + * @returns {List} + */ + function list(token) { + return { + type: 'list', + ordered: token.type === 'listOrdered', + start: null, + spread: token._spread, + children: [] + } + } + + /** + * @param {Token} token + * @returns {ListItem} + */ + function listItem(token) { + return { + type: 'listItem', + spread: token._spread, + checked: null, + children: [] + } + } + + /** @returns {Paragraph} */ + function paragraph() { + return { + type: 'paragraph', + children: [] + } + } + + /** @returns {Strong} */ + function strong() { + return { + type: 'strong', + children: [] + } + } + + /** @returns {Text} */ + function text() { + return { + type: 'text', + value: '' + } + } + + /** @returns {ThematicBreak} */ + function thematicBreak() { + return { + type: 'thematicBreak' + } + } +} + +/** + * Copy a point-like value. + * + * @param {Point} d + * Point-like value. + * @returns {Point} + * unist point. + */ +function lib_point(d) { + return { + line: d.line, + column: d.column, + offset: d.offset + } +} + +/** + * @param {Config} combined + * @param {Array>} extensions + * @returns {void} + */ +function configure(combined, extensions) { + let index = -1 + while (++index < extensions.length) { + const value = extensions[index] + if (Array.isArray(value)) { + configure(combined, value) + } else { + extension(combined, value) + } + } +} + +/** + * @param {Config} combined + * @param {Extension} extension + * @returns {void} + */ +function extension(combined, extension) { + /** @type {keyof Extension} */ + let key + for (key in extension) { + if (lib_own.call(extension, key)) { + if (key === 'canContainEols') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'transforms') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'enter' || key === 'exit') { + const right = extension[key] + if (right) { + Object.assign(combined[key], right) + } + } + } + } +} + +/** @type {OnEnterError} */ +function defaultOnError(left, right) { + if (left) { + throw new Error( + 'Cannot close `' + + left.type + + '` (' + + stringifyPosition({ + start: left.start, + end: left.end + }) + + '): a different token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is open' + ) + } else { + throw new Error( + 'Cannot close document, a token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is still open' + ) + } +} + +// EXTERNAL MODULE: ./node_modules/ts-dedent/esm/index.js +var esm = __webpack_require__(60513); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/createText-ca0c5216.js + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = (0,esm/* dedent */.T)(withoutMultipleNewlines); + return withoutExtraSpaces; +} +function markdownToLines(markdown) { + const preprocessedMarkdown = preprocessMarkdown(markdown); + const { children } = fromMarkdown(preprocessedMarkdown); + const lines = [[]]; + let currentLine = 0; + function processNode(node, parentType = "normal") { + if (node.type === "text") { + const textLines = node.value.split("\n"); + textLines.forEach((textLine, index) => { + if (index !== 0) { + currentLine++; + lines.push([]); + } + textLine.split(" ").forEach((word) => { + if (word) { + lines[currentLine].push({ content: word, type: parentType }); + } + }); + }); + } else if (node.type === "strong" || node.type === "emphasis") { + node.children.forEach((contentNode) => { + processNode(contentNode, node.type); + }); + } + } + children.forEach((treeNode) => { + if (treeNode.type === "paragraph") { + treeNode.children.forEach((contentNode) => { + processNode(contentNode); + }); + } + }); + return lines; +} +function markdownToHTML(markdown) { + const { children } = fromMarkdown(markdown); + function output(node) { + if (node.type === "text") { + return node.value.replace(/\n/g, "
    "); + } else if (node.type === "strong") { + return `${node.children.map(output).join("")}`; + } else if (node.type === "emphasis") { + return `${node.children.map(output).join("")}`; + } else if (node.type === "paragraph") { + return `

    ${node.children.map(output).join("")}

    `; + } + return `Unsupported markdown: ${node.type}`; + } + return children.map(output).join(""); +} +function splitTextToChars(text) { + if (Intl.Segmenter) { + return [...new Intl.Segmenter().segment(text)].map((s) => s.segment); + } + return [...text]; +} +function splitWordToFitWidth(checkFit, word) { + const characters = splitTextToChars(word.content); + return splitWordToFitWidthRecursion(checkFit, [], characters, word.type); +} +function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) { + if (remainingChars.length === 0) { + return [ + { content: usedChars.join(""), type }, + { content: "", type } + ]; + } + const [nextChar, ...rest] = remainingChars; + const newWord = [...usedChars, nextChar]; + if (checkFit([{ content: newWord.join(""), type }])) { + return splitWordToFitWidthRecursion(checkFit, newWord, rest, type); + } + if (usedChars.length === 0 && nextChar) { + usedChars.push(nextChar); + remainingChars.shift(); + } + return [ + { content: usedChars.join(""), type }, + { content: remainingChars.join(""), type } + ]; +} +function splitLineToFitWidth(line, checkFit) { + if (line.some(({ content }) => content.includes("\n"))) { + throw new Error("splitLineToFitWidth does not support newlines in the line"); + } + return splitLineToFitWidthRecursion(line, checkFit); +} +function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) { + if (words.length === 0) { + if (newLine.length > 0) { + lines.push(newLine); + } + return lines.length > 0 ? lines : []; + } + let joiner = ""; + if (words[0].content === " ") { + joiner = " "; + words.shift(); + } + const nextWord = words.shift() ?? { content: " ", type: "normal" }; + const lineWithNextWord = [...newLine]; + if (joiner !== "") { + lineWithNextWord.push({ content: joiner, type: "normal" }); + } + lineWithNextWord.push(nextWord); + if (checkFit(lineWithNextWord)) { + return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord); + } + if (newLine.length > 0) { + lines.push(newLine); + words.unshift(nextWord); + } else if (nextWord.content) { + const [line, rest] = splitWordToFitWidth(checkFit, nextWord); + lines.push([line]); + if (rest.content) { + words.unshift(rest); + } + } + return splitLineToFitWidthRecursion(words, checkFit, lines); +} +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlSpan(element, node, width, classes, addBackground = false) { + const fo = element.append("foreignObject"); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + ` + " + label + "" + ); + applyStyle(div, node.labelStyle); + div.style("display", "table-cell"); + div.style("white-space", "nowrap"); + div.style("max-width", width + "px"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + if (addBackground) { + div.attr("class", "labelBkg"); + } + let bbox = div.node().getBoundingClientRect(); + if (bbox.width === width) { + div.style("display", "table"); + div.style("white-space", "break-spaces"); + div.style("width", width + "px"); + bbox = div.node().getBoundingClientRect(); + } + fo.style("width", bbox.width); + fo.style("height", bbox.height); + return fo.node(); +} +function createTspan(textElement, lineIndex, lineHeight) { + return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); +} +function computeWidthOfText(parentNode, lineHeight, line) { + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, line); + const textLength = testSpan.node().getComputedTextLength(); + testElement.remove(); + return textLength; +} +function computeDimensionOfText(parentNode, lineHeight, text) { + var _a; + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, [{ content: text, type: "normal" }]); + const textDimension = (_a = testSpan.node()) == null ? void 0 : _a.getBoundingClientRect(); + if (textDimension) { + testElement.remove(); + } + return textDimension; +} +function createFormattedText(width, g, structuredText, addBackground = false) { + const lineHeight = 1.1; + const labelGroup = g.append("g"); + const bkg = labelGroup.insert("rect").attr("class", "background"); + const textElement = labelGroup.append("text").attr("y", "-10.1"); + let lineIndex = 0; + for (const line of structuredText) { + const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width; + const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth); + for (const preparedLine of linesUnderWidth) { + const tspan = createTspan(textElement, lineIndex, lineHeight); + updateTextContentAndStyles(tspan, preparedLine); + lineIndex++; + } + } + if (addBackground) { + const bbox = textElement.node().getBBox(); + const padding = 2; + bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); + return labelGroup.node(); + } else { + return textElement.node(); + } +} +function updateTextContentAndStyles(tspan, wrappedLine) { + tspan.text(""); + wrappedLine.forEach((word, index) => { + const innerTspan = tspan.append("tspan").attr("font-style", word.type === "emphasis" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); + if (index === 0) { + innerTspan.text(word.content); + } else { + innerTspan.text(" " + word.content); + } + }); +} +const createText = (el, text = "", { + style = "", + isTitle = false, + classes = "", + useHtmlLabels = true, + isNode = true, + width = 200, + addSvgBackground = false +} = {}) => { + mermaid_6dc72991.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,mermaid_6dc72991.M)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + // cspell: disable-line + (s) => `` + ), + labelStyle: style.replace("fill:", "color:") + }; + const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground); + return vertexNode; + } else { + const structuredText = markdownToLines(text); + const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); + return svgLabel; + } +}; + + + +/***/ }), + +/***/ 31303: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + diagram: () => (/* binding */ diagram) +}); + +// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-6dc72991.js + 8 modules +var mermaid_6dc72991 = __webpack_require__(99702); +;// CONCATENATED MODULE: ./node_modules/cytoscape/dist/cytoscape.esm.mjs +/** + * Copyright (c) 2016-2024, The Cytoscape Consortium. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the “Software”), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +function _typeof(obj) { + "@babel/helpers - typeof"; + + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }, _typeof(obj); +} +function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +} +function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } +} +function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; +} +function _defineProperty$1(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + return obj; +} +function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); +} +function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr; +} +function _iterableToArrayLimit(arr, i) { + var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; + if (_i == null) return; + var _arr = []; + var _n = true; + var _d = false; + var _s, _e; + try { + for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + return _arr; +} +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); +} +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + return arr2; +} +function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +function _createForOfIteratorHelper(o, allowArrayLike) { + var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; + if (!it) { + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) o = it; + var i = 0; + var F = function () {}; + return { + s: F, + n: function () { + if (i >= o.length) return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }, + e: function (e) { + throw e; + }, + f: F + }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + var normalCompletion = true, + didErr = false, + err; + return { + s: function () { + it = it.call(o); + }, + n: function () { + var step = it.next(); + normalCompletion = step.done; + return step; + }, + e: function (e) { + didErr = true; + err = e; + }, + f: function () { + try { + if (!normalCompletion && it.return != null) it.return(); + } finally { + if (didErr) throw err; + } + } + }; +} + +var _window = typeof window === 'undefined' ? null : window; // eslint-disable-line no-undef + +var cytoscape_esm_navigator = _window ? _window.navigator : null; +_window ? _window.document : null; +var typeofstr = _typeof(''); +var typeofobj = _typeof({}); +var typeoffn = _typeof(function () {}); +var typeofhtmlele = typeof HTMLElement === "undefined" ? "undefined" : _typeof(HTMLElement); +var instanceStr = function instanceStr(obj) { + return obj && obj.instanceString && fn$6(obj.instanceString) ? obj.instanceString() : null; +}; + +var string = function string(obj) { + return obj != null && _typeof(obj) == typeofstr; +}; +var fn$6 = function fn(obj) { + return obj != null && _typeof(obj) === typeoffn; +}; +var array = function array(obj) { + return !elementOrCollection(obj) && (Array.isArray ? Array.isArray(obj) : obj != null && obj instanceof Array); +}; +var plainObject = function plainObject(obj) { + return obj != null && _typeof(obj) === typeofobj && !array(obj) && obj.constructor === Object; +}; +var object = function object(obj) { + return obj != null && _typeof(obj) === typeofobj; +}; +var number$1 = function number(obj) { + return obj != null && _typeof(obj) === _typeof(1) && !isNaN(obj); +}; +var integer = function integer(obj) { + return number$1(obj) && Math.floor(obj) === obj; +}; +var htmlElement = function htmlElement(obj) { + if ('undefined' === typeofhtmlele) { + return undefined; + } else { + return null != obj && obj instanceof HTMLElement; + } +}; +var elementOrCollection = function elementOrCollection(obj) { + return cytoscape_esm_element(obj) || collection(obj); +}; +var cytoscape_esm_element = function element(obj) { + return instanceStr(obj) === 'collection' && obj._private.single; +}; +var collection = function collection(obj) { + return instanceStr(obj) === 'collection' && !obj._private.single; +}; +var core = function core(obj) { + return instanceStr(obj) === 'core'; +}; +var stylesheet = function stylesheet(obj) { + return instanceStr(obj) === 'stylesheet'; +}; +var cytoscape_esm_event = function event(obj) { + return instanceStr(obj) === 'event'; +}; +var emptyString = function emptyString(obj) { + if (obj === undefined || obj === null) { + // null is empty + return true; + } else if (obj === '' || obj.match(/^\s+$/)) { + return true; // empty string is empty + } + + return false; // otherwise, we don't know what we've got +}; +var domElement = function domElement(obj) { + if (typeof HTMLElement === 'undefined') { + return false; // we're not in a browser so it doesn't matter + } else { + return obj instanceof HTMLElement; + } +}; +var boundingBox = function boundingBox(obj) { + return plainObject(obj) && number$1(obj.x1) && number$1(obj.x2) && number$1(obj.y1) && number$1(obj.y2); +}; +var promise = function promise(obj) { + return object(obj) && fn$6(obj.then); +}; +var ms = function ms() { + return cytoscape_esm_navigator && cytoscape_esm_navigator.userAgent.match(/msie|trident|edge/i); +}; // probably a better way to detect this... + +var memoize$1 = function memoize(fn, keyFn) { + if (!keyFn) { + keyFn = function keyFn() { + if (arguments.length === 1) { + return arguments[0]; + } else if (arguments.length === 0) { + return 'undefined'; + } + var args = []; + for (var i = 0; i < arguments.length; i++) { + args.push(arguments[i]); + } + return args.join('$'); + }; + } + var memoizedFn = function memoizedFn() { + var self = this; + var args = arguments; + var ret; + var k = keyFn.apply(self, args); + var cache = memoizedFn.cache; + if (!(ret = cache[k])) { + ret = cache[k] = fn.apply(self, args); + } + return ret; + }; + memoizedFn.cache = {}; + return memoizedFn; +}; + +var camel2dash = memoize$1(function (str) { + return str.replace(/([A-Z])/g, function (v) { + return '-' + v.toLowerCase(); + }); +}); +var dash2camel = memoize$1(function (str) { + return str.replace(/(-\w)/g, function (v) { + return v[1].toUpperCase(); + }); +}); +var prependCamel = memoize$1(function (prefix, str) { + return prefix + str[0].toUpperCase() + str.substring(1); +}, function (prefix, str) { + return prefix + '$' + str; +}); +var capitalize = function capitalize(str) { + if (emptyString(str)) { + return str; + } + return str.charAt(0).toUpperCase() + str.substring(1); +}; + +var number = '(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))'; +var rgba = 'rgb[a]?\\((' + number + '[%]?)\\s*,\\s*(' + number + '[%]?)\\s*,\\s*(' + number + '[%]?)(?:\\s*,\\s*(' + number + '))?\\)'; +var rgbaNoBackRefs = 'rgb[a]?\\((?:' + number + '[%]?)\\s*,\\s*(?:' + number + '[%]?)\\s*,\\s*(?:' + number + '[%]?)(?:\\s*,\\s*(?:' + number + '))?\\)'; +var hsla = 'hsl[a]?\\((' + number + ')\\s*,\\s*(' + number + '[%])\\s*,\\s*(' + number + '[%])(?:\\s*,\\s*(' + number + '))?\\)'; +var hslaNoBackRefs = 'hsl[a]?\\((?:' + number + ')\\s*,\\s*(?:' + number + '[%])\\s*,\\s*(?:' + number + '[%])(?:\\s*,\\s*(?:' + number + '))?\\)'; +var hex3 = '\\#[0-9a-fA-F]{3}'; +var hex6 = '\\#[0-9a-fA-F]{6}'; + +var ascending = function ascending(a, b) { + if (a < b) { + return -1; + } else if (a > b) { + return 1; + } else { + return 0; + } +}; +var descending = function descending(a, b) { + return -1 * ascending(a, b); +}; + +var extend = Object.assign != null ? Object.assign.bind(Object) : function (tgt) { + var args = arguments; + for (var i = 1; i < args.length; i++) { + var obj = args[i]; + if (obj == null) { + continue; + } + var keys = Object.keys(obj); + for (var j = 0; j < keys.length; j++) { + var k = keys[j]; + tgt[k] = obj[k]; + } + } + return tgt; +}; + +// get [r, g, b] from #abc or #aabbcc +var hex2tuple = function hex2tuple(hex) { + if (!(hex.length === 4 || hex.length === 7) || hex[0] !== '#') { + return; + } + var shortHex = hex.length === 4; + var r, g, b; + var base = 16; + if (shortHex) { + r = parseInt(hex[1] + hex[1], base); + g = parseInt(hex[2] + hex[2], base); + b = parseInt(hex[3] + hex[3], base); + } else { + r = parseInt(hex[1] + hex[2], base); + g = parseInt(hex[3] + hex[4], base); + b = parseInt(hex[5] + hex[6], base); + } + return [r, g, b]; +}; + +// get [r, g, b, a] from hsl(0, 0, 0) or hsla(0, 0, 0, 0) +var hsl2tuple = function hsl2tuple(hsl) { + var ret; + var h, s, l, a, r, g, b; + function hue2rgb(p, q, t) { + if (t < 0) t += 1; + if (t > 1) t -= 1; + if (t < 1 / 6) return p + (q - p) * 6 * t; + if (t < 1 / 2) return q; + if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6; + return p; + } + var m = new RegExp('^' + hsla + '$').exec(hsl); + if (m) { + // get hue + h = parseInt(m[1]); + if (h < 0) { + h = (360 - -1 * h % 360) % 360; + } else if (h > 360) { + h = h % 360; + } + h /= 360; // normalise on [0, 1] + + s = parseFloat(m[2]); + if (s < 0 || s > 100) { + return; + } // saturation is [0, 100] + s = s / 100; // normalise on [0, 1] + + l = parseFloat(m[3]); + if (l < 0 || l > 100) { + return; + } // lightness is [0, 100] + l = l / 100; // normalise on [0, 1] + + a = m[4]; + if (a !== undefined) { + a = parseFloat(a); + if (a < 0 || a > 1) { + return; + } // alpha is [0, 1] + } + + // now, convert to rgb + // code from http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript + if (s === 0) { + r = g = b = Math.round(l * 255); // achromatic + } else { + var q = l < 0.5 ? l * (1 + s) : l + s - l * s; + var p = 2 * l - q; + r = Math.round(255 * hue2rgb(p, q, h + 1 / 3)); + g = Math.round(255 * hue2rgb(p, q, h)); + b = Math.round(255 * hue2rgb(p, q, h - 1 / 3)); + } + ret = [r, g, b, a]; + } + return ret; +}; + +// get [r, g, b, a] from rgb(0, 0, 0) or rgba(0, 0, 0, 0) +var rgb2tuple = function rgb2tuple(rgb) { + var ret; + var m = new RegExp('^' + rgba + '$').exec(rgb); + if (m) { + ret = []; + var isPct = []; + for (var i = 1; i <= 3; i++) { + var channel = m[i]; + if (channel[channel.length - 1] === '%') { + isPct[i] = true; + } + channel = parseFloat(channel); + if (isPct[i]) { + channel = channel / 100 * 255; // normalise to [0, 255] + } + + if (channel < 0 || channel > 255) { + return; + } // invalid channel value + + ret.push(Math.floor(channel)); + } + var atLeastOneIsPct = isPct[1] || isPct[2] || isPct[3]; + var allArePct = isPct[1] && isPct[2] && isPct[3]; + if (atLeastOneIsPct && !allArePct) { + return; + } // must all be percent values if one is + + var alpha = m[4]; + if (alpha !== undefined) { + alpha = parseFloat(alpha); + if (alpha < 0 || alpha > 1) { + return; + } // invalid alpha value + + ret.push(alpha); + } + } + return ret; +}; +var colorname2tuple = function colorname2tuple(color) { + return colors[color.toLowerCase()]; +}; +var color2tuple = function color2tuple(color) { + return (array(color) ? color : null) || colorname2tuple(color) || hex2tuple(color) || rgb2tuple(color) || hsl2tuple(color); +}; +var colors = { + // special colour names + transparent: [0, 0, 0, 0], + // NB alpha === 0 + + // regular colours + aliceblue: [240, 248, 255], + antiquewhite: [250, 235, 215], + aqua: [0, 255, 255], + aquamarine: [127, 255, 212], + azure: [240, 255, 255], + beige: [245, 245, 220], + bisque: [255, 228, 196], + black: [0, 0, 0], + blanchedalmond: [255, 235, 205], + blue: [0, 0, 255], + blueviolet: [138, 43, 226], + brown: [165, 42, 42], + burlywood: [222, 184, 135], + cadetblue: [95, 158, 160], + chartreuse: [127, 255, 0], + chocolate: [210, 105, 30], + coral: [255, 127, 80], + cornflowerblue: [100, 149, 237], + cornsilk: [255, 248, 220], + crimson: [220, 20, 60], + cyan: [0, 255, 255], + darkblue: [0, 0, 139], + darkcyan: [0, 139, 139], + darkgoldenrod: [184, 134, 11], + darkgray: [169, 169, 169], + darkgreen: [0, 100, 0], + darkgrey: [169, 169, 169], + darkkhaki: [189, 183, 107], + darkmagenta: [139, 0, 139], + darkolivegreen: [85, 107, 47], + darkorange: [255, 140, 0], + darkorchid: [153, 50, 204], + darkred: [139, 0, 0], + darksalmon: [233, 150, 122], + darkseagreen: [143, 188, 143], + darkslateblue: [72, 61, 139], + darkslategray: [47, 79, 79], + darkslategrey: [47, 79, 79], + darkturquoise: [0, 206, 209], + darkviolet: [148, 0, 211], + deeppink: [255, 20, 147], + deepskyblue: [0, 191, 255], + dimgray: [105, 105, 105], + dimgrey: [105, 105, 105], + dodgerblue: [30, 144, 255], + firebrick: [178, 34, 34], + floralwhite: [255, 250, 240], + forestgreen: [34, 139, 34], + fuchsia: [255, 0, 255], + gainsboro: [220, 220, 220], + ghostwhite: [248, 248, 255], + gold: [255, 215, 0], + goldenrod: [218, 165, 32], + gray: [128, 128, 128], + grey: [128, 128, 128], + green: [0, 128, 0], + greenyellow: [173, 255, 47], + honeydew: [240, 255, 240], + hotpink: [255, 105, 180], + indianred: [205, 92, 92], + indigo: [75, 0, 130], + ivory: [255, 255, 240], + khaki: [240, 230, 140], + lavender: [230, 230, 250], + lavenderblush: [255, 240, 245], + lawngreen: [124, 252, 0], + lemonchiffon: [255, 250, 205], + lightblue: [173, 216, 230], + lightcoral: [240, 128, 128], + lightcyan: [224, 255, 255], + lightgoldenrodyellow: [250, 250, 210], + lightgray: [211, 211, 211], + lightgreen: [144, 238, 144], + lightgrey: [211, 211, 211], + lightpink: [255, 182, 193], + lightsalmon: [255, 160, 122], + lightseagreen: [32, 178, 170], + lightskyblue: [135, 206, 250], + lightslategray: [119, 136, 153], + lightslategrey: [119, 136, 153], + lightsteelblue: [176, 196, 222], + lightyellow: [255, 255, 224], + lime: [0, 255, 0], + limegreen: [50, 205, 50], + linen: [250, 240, 230], + magenta: [255, 0, 255], + maroon: [128, 0, 0], + mediumaquamarine: [102, 205, 170], + mediumblue: [0, 0, 205], + mediumorchid: [186, 85, 211], + mediumpurple: [147, 112, 219], + mediumseagreen: [60, 179, 113], + mediumslateblue: [123, 104, 238], + mediumspringgreen: [0, 250, 154], + mediumturquoise: [72, 209, 204], + mediumvioletred: [199, 21, 133], + midnightblue: [25, 25, 112], + mintcream: [245, 255, 250], + mistyrose: [255, 228, 225], + moccasin: [255, 228, 181], + navajowhite: [255, 222, 173], + navy: [0, 0, 128], + oldlace: [253, 245, 230], + olive: [128, 128, 0], + olivedrab: [107, 142, 35], + orange: [255, 165, 0], + orangered: [255, 69, 0], + orchid: [218, 112, 214], + palegoldenrod: [238, 232, 170], + palegreen: [152, 251, 152], + paleturquoise: [175, 238, 238], + palevioletred: [219, 112, 147], + papayawhip: [255, 239, 213], + peachpuff: [255, 218, 185], + peru: [205, 133, 63], + pink: [255, 192, 203], + plum: [221, 160, 221], + powderblue: [176, 224, 230], + purple: [128, 0, 128], + red: [255, 0, 0], + rosybrown: [188, 143, 143], + royalblue: [65, 105, 225], + saddlebrown: [139, 69, 19], + salmon: [250, 128, 114], + sandybrown: [244, 164, 96], + seagreen: [46, 139, 87], + seashell: [255, 245, 238], + sienna: [160, 82, 45], + silver: [192, 192, 192], + skyblue: [135, 206, 235], + slateblue: [106, 90, 205], + slategray: [112, 128, 144], + slategrey: [112, 128, 144], + snow: [255, 250, 250], + springgreen: [0, 255, 127], + steelblue: [70, 130, 180], + tan: [210, 180, 140], + teal: [0, 128, 128], + thistle: [216, 191, 216], + tomato: [255, 99, 71], + turquoise: [64, 224, 208], + violet: [238, 130, 238], + wheat: [245, 222, 179], + white: [255, 255, 255], + whitesmoke: [245, 245, 245], + yellow: [255, 255, 0], + yellowgreen: [154, 205, 50] +}; + +// sets the value in a map (map may not be built) +var setMap = function setMap(options) { + var obj = options.map; + var keys = options.keys; + var l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (plainObject(key)) { + throw Error('Tried to set map with object key'); + } + if (i < keys.length - 1) { + // extend the map if necessary + if (obj[key] == null) { + obj[key] = {}; + } + obj = obj[key]; + } else { + // set the value + obj[key] = options.value; + } + } +}; + +// gets the value in a map even if it's not built in places +var getMap = function getMap(options) { + var obj = options.map; + var keys = options.keys; + var l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (plainObject(key)) { + throw Error('Tried to get map with object key'); + } + obj = obj[key]; + if (obj == null) { + return obj; + } + } + return obj; +}; + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +var isObject_1 = isObject; + +var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + +function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; +} + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; + +var _freeGlobal = freeGlobal; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = _freeGlobal || freeSelf || Function('return this')(); + +var _root = root; + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root.Date.now(); +}; + +var now_1 = now; + +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +var _trimmedEndIndex = trimmedEndIndex; + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +var _baseTrim = baseTrim; + +/** Built-in value references. */ +var Symbol$1 = _root.Symbol; + +var _Symbol = Symbol$1; + +/** Used for built-in method references. */ +var objectProto$5 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$4 = objectProto$5.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString$1 = objectProto$5.toString; + +/** Built-in value references. */ +var symToStringTag$1 = _Symbol ? _Symbol.toStringTag : undefined; + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty$4.call(value, symToStringTag$1), + tag = value[symToStringTag$1]; + + try { + value[symToStringTag$1] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString$1.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag$1] = tag; + } else { + delete value[symToStringTag$1]; + } + } + return result; +} + +var _getRawTag = getRawTag; + +/** Used for built-in method references. */ +var objectProto$4 = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto$4.toString; + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString.call(value); +} + +var _objectToString = objectToString; + +/** `Object#toString` result references. */ +var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var symToStringTag = _Symbol ? _Symbol.toStringTag : undefined; + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? _getRawTag(value) + : _objectToString(value); +} + +var _baseGetTag = baseGetTag; + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} + +var isObjectLike_1 = isObjectLike; + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike_1(value) && _baseGetTag(value) == symbolTag); +} + +var isSymbol_1 = isSymbol; + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol_1(value)) { + return NAN; + } + if (isObject_1(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject_1(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +var toNumber_1 = toNumber; + +/** Error message constants. */ +var FUNC_ERROR_TEXT$1 = 'Expected a function'; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ +function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT$1); + } + wait = toNumber_1(wait) || 0; + if (isObject_1(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber_1(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + timeWaiting = wait - timeSinceLastCall; + + return maxing + ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) + : timeWaiting; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } + + function timerExpired() { + var time = now_1(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; + } + + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + + function flush() { + return timerId === undefined ? result : trailingEdge(now_1()); + } + + function debounced() { + var time = now_1(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + clearTimeout(timerId); + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; +} + +var debounce_1 = debounce; + +var performance = _window ? _window.performance : null; +var pnow = performance && performance.now ? function () { + return performance.now(); +} : function () { + return Date.now(); +}; +var raf = function () { + if (_window) { + if (_window.requestAnimationFrame) { + return function (fn) { + _window.requestAnimationFrame(fn); + }; + } else if (_window.mozRequestAnimationFrame) { + return function (fn) { + _window.mozRequestAnimationFrame(fn); + }; + } else if (_window.webkitRequestAnimationFrame) { + return function (fn) { + _window.webkitRequestAnimationFrame(fn); + }; + } else if (_window.msRequestAnimationFrame) { + return function (fn) { + _window.msRequestAnimationFrame(fn); + }; + } + } + return function (fn) { + if (fn) { + setTimeout(function () { + fn(pnow()); + }, 1000 / 60); + } + }; +}(); +var requestAnimationFrame = function requestAnimationFrame(fn) { + return raf(fn); +}; +var performanceNow = pnow; + +var DEFAULT_HASH_SEED = 9261; +var K = 65599; // 37 also works pretty well +var DEFAULT_HASH_SEED_ALT = 5381; +var hashIterableInts = function hashIterableInts(iterator) { + var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED; + // sdbm/string-hash + var hash = seed; + var entry; + for (;;) { + entry = iterator.next(); + if (entry.done) { + break; + } + hash = hash * K + entry.value | 0; + } + return hash; +}; +var hashInt = function hashInt(num) { + var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED; + // sdbm/string-hash + return seed * K + num | 0; +}; +var hashIntAlt = function hashIntAlt(num) { + var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED_ALT; + // djb2/string-hash + return (seed << 5) + seed + num | 0; +}; +var combineHashes = function combineHashes(hash1, hash2) { + return hash1 * 0x200000 + hash2; +}; +var combineHashesArray = function combineHashesArray(hashes) { + return hashes[0] * 0x200000 + hashes[1]; +}; +var hashArrays = function hashArrays(hashes1, hashes2) { + return [hashInt(hashes1[0], hashes2[0]), hashIntAlt(hashes1[1], hashes2[1])]; +}; +var hashIntsArray = function hashIntsArray(ints, seed) { + var entry = { + value: 0, + done: false + }; + var i = 0; + var length = ints.length; + var iterator = { + next: function next() { + if (i < length) { + entry.value = ints[i++]; + } else { + entry.done = true; + } + return entry; + } + }; + return hashIterableInts(iterator, seed); +}; +var hashString = function hashString(str, seed) { + var entry = { + value: 0, + done: false + }; + var i = 0; + var length = str.length; + var iterator = { + next: function next() { + if (i < length) { + entry.value = str.charCodeAt(i++); + } else { + entry.done = true; + } + return entry; + } + }; + return hashIterableInts(iterator, seed); +}; +var hashStrings = function hashStrings() { + return hashStringsArray(arguments); +}; +var hashStringsArray = function hashStringsArray(strs) { + var hash; + for (var i = 0; i < strs.length; i++) { + var str = strs[i]; + if (i === 0) { + hash = hashString(str); + } else { + hash = hashString(str, hash); + } + } + return hash; +}; + +/*global console */ +var warningsEnabled = true; +var warnSupported = console.warn != null; // eslint-disable-line no-console +var traceSupported = console.trace != null; // eslint-disable-line no-console + +var MAX_INT$1 = Number.MAX_SAFE_INTEGER || 9007199254740991; +var trueify = function trueify() { + return true; +}; +var falsify = function falsify() { + return false; +}; +var zeroify = function zeroify() { + return 0; +}; +var noop$1 = function noop() {}; +var error = function error(msg) { + throw new Error(msg); +}; +var warnings = function warnings(enabled) { + if (enabled !== undefined) { + warningsEnabled = !!enabled; + } else { + return warningsEnabled; + } +}; +var warn = function warn(msg) { + /* eslint-disable no-console */ + if (!warnings()) { + return; + } + if (warnSupported) { + console.warn(msg); + } else { + console.log(msg); + if (traceSupported) { + console.trace(); + } + } +}; /* eslint-enable */ + +var clone = function clone(obj) { + return extend({}, obj); +}; + +// gets a shallow copy of the argument +var copy = function copy(obj) { + if (obj == null) { + return obj; + } + if (array(obj)) { + return obj.slice(); + } else if (plainObject(obj)) { + return clone(obj); + } else { + return obj; + } +}; +var copyArray$1 = function copyArray(arr) { + return arr.slice(); +}; +var uuid = function uuid(a, b /* placeholders */) { + for ( + // loop :) + b = a = ''; + // b - result , a - numeric letiable + a++ < 36; + // + b += a * 51 & 52 // if "a" is not 9 or 14 or 19 or 24 + ? + // return a random number or 4 + (a ^ 15 // if "a" is not 15 + ? + // generate a random number from 0 to 15 + 8 ^ Math.random() * (a ^ 20 ? 16 : 4) // unless "a" is 20, in which case a random number from 8 to 11 + : 4 // otherwise 4 + ).toString(16) : '-' // in other cases (if "a" is 9,14,19,24) insert "-" + ) { + } + return b; +}; +var _staticEmptyObject = {}; +var staticEmptyObject = function staticEmptyObject() { + return _staticEmptyObject; +}; +var defaults$g = function defaults(_defaults) { + var keys = Object.keys(_defaults); + return function (opts) { + var filledOpts = {}; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + var optVal = opts == null ? undefined : opts[key]; + filledOpts[key] = optVal === undefined ? _defaults[key] : optVal; + } + return filledOpts; + }; +}; +var removeFromArray = function removeFromArray(arr, ele, oneCopy) { + for (var i = arr.length - 1; i >= 0; i--) { + if (arr[i] === ele) { + arr.splice(i, 1); + if (oneCopy) { + break; + } + } + } +}; +var clearArray = function clearArray(arr) { + arr.splice(0, arr.length); +}; +var push = function push(arr, otherArr) { + for (var i = 0; i < otherArr.length; i++) { + var el = otherArr[i]; + arr.push(el); + } +}; +var getPrefixedProperty = function getPrefixedProperty(obj, propName, prefix) { + if (prefix) { + propName = prependCamel(prefix, propName); // e.g. (labelWidth, source) => sourceLabelWidth + } + + return obj[propName]; +}; +var setPrefixedProperty = function setPrefixedProperty(obj, propName, prefix, value) { + if (prefix) { + propName = prependCamel(prefix, propName); // e.g. (labelWidth, source) => sourceLabelWidth + } + + obj[propName] = value; +}; + +/* global Map */ +var ObjectMap = /*#__PURE__*/function () { + function ObjectMap() { + _classCallCheck(this, ObjectMap); + this._obj = {}; + } + _createClass(ObjectMap, [{ + key: "set", + value: function set(key, val) { + this._obj[key] = val; + return this; + } + }, { + key: "delete", + value: function _delete(key) { + this._obj[key] = undefined; + return this; + } + }, { + key: "clear", + value: function clear() { + this._obj = {}; + } + }, { + key: "has", + value: function has(key) { + return this._obj[key] !== undefined; + } + }, { + key: "get", + value: function get(key) { + return this._obj[key]; + } + }]); + return ObjectMap; +}(); +var Map$2 = typeof Map !== 'undefined' ? Map : ObjectMap; + +/* global Set */ + +var undef = "undefined" ; +var ObjectSet = /*#__PURE__*/function () { + function ObjectSet(arrayOrObjectSet) { + _classCallCheck(this, ObjectSet); + this._obj = Object.create(null); + this.size = 0; + if (arrayOrObjectSet != null) { + var arr; + if (arrayOrObjectSet.instanceString != null && arrayOrObjectSet.instanceString() === this.instanceString()) { + arr = arrayOrObjectSet.toArray(); + } else { + arr = arrayOrObjectSet; + } + for (var i = 0; i < arr.length; i++) { + this.add(arr[i]); + } + } + } + _createClass(ObjectSet, [{ + key: "instanceString", + value: function instanceString() { + return 'set'; + } + }, { + key: "add", + value: function add(val) { + var o = this._obj; + if (o[val] !== 1) { + o[val] = 1; + this.size++; + } + } + }, { + key: "delete", + value: function _delete(val) { + var o = this._obj; + if (o[val] === 1) { + o[val] = 0; + this.size--; + } + } + }, { + key: "clear", + value: function clear() { + this._obj = Object.create(null); + } + }, { + key: "has", + value: function has(val) { + return this._obj[val] === 1; + } + }, { + key: "toArray", + value: function toArray() { + var _this = this; + return Object.keys(this._obj).filter(function (key) { + return _this.has(key); + }); + } + }, { + key: "forEach", + value: function forEach(callback, thisArg) { + return this.toArray().forEach(callback, thisArg); + } + }]); + return ObjectSet; +}(); +var Set$1 = (typeof Set === "undefined" ? "undefined" : _typeof(Set)) !== undef ? Set : ObjectSet; + +// represents a node or an edge +var Element = function Element(cy, params) { + var restore = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + if (cy === undefined || params === undefined || !core(cy)) { + error('An element must have a core reference and parameters set'); + return; + } + var group = params.group; + + // try to automatically infer the group if unspecified + if (group == null) { + if (params.data && params.data.source != null && params.data.target != null) { + group = 'edges'; + } else { + group = 'nodes'; + } + } + + // validate group + if (group !== 'nodes' && group !== 'edges') { + error('An element must be of type `nodes` or `edges`; you specified `' + group + '`'); + return; + } + + // make the element array-like, just like a collection + this.length = 1; + this[0] = this; + + // NOTE: when something is added here, add also to ele.json() + var _p = this._private = { + cy: cy, + single: true, + // indicates this is an element + data: params.data || {}, + // data object + position: params.position || { + x: 0, + y: 0 + }, + // (x, y) position pair + autoWidth: undefined, + // width and height of nodes calculated by the renderer when set to special 'auto' value + autoHeight: undefined, + autoPadding: undefined, + compoundBoundsClean: false, + // whether the compound dimensions need to be recalculated the next time dimensions are read + listeners: [], + // array of bound listeners + group: group, + // string; 'nodes' or 'edges' + style: {}, + // properties as set by the style + rstyle: {}, + // properties for style sent from the renderer to the core + styleCxts: [], + // applied style contexts from the styler + styleKeys: {}, + // per-group keys of style property values + removed: true, + // whether it's inside the vis; true if removed (set true here since we call restore) + selected: params.selected ? true : false, + // whether it's selected + selectable: params.selectable === undefined ? true : params.selectable ? true : false, + // whether it's selectable + locked: params.locked ? true : false, + // whether the element is locked (cannot be moved) + grabbed: false, + // whether the element is grabbed by the mouse; renderer sets this privately + grabbable: params.grabbable === undefined ? true : params.grabbable ? true : false, + // whether the element can be grabbed + pannable: params.pannable === undefined ? group === 'edges' ? true : false : params.pannable ? true : false, + // whether the element has passthrough panning enabled + active: false, + // whether the element is active from user interaction + classes: new Set$1(), + // map ( className => true ) + animation: { + // object for currently-running animations + current: [], + queue: [] + }, + rscratch: {}, + // object in which the renderer can store information + scratch: params.scratch || {}, + // scratch objects + edges: [], + // array of connected edges + children: [], + // array of children + parent: params.parent && params.parent.isNode() ? params.parent : null, + // parent ref + traversalCache: {}, + // cache of output of traversal functions + backgrounding: false, + // whether background images are loading + bbCache: null, + // cache of the current bounding box + bbCacheShift: { + x: 0, + y: 0 + }, + // shift applied to cached bb to be applied on next get + bodyBounds: null, + // bounds cache of element body, w/o overlay + overlayBounds: null, + // bounds cache of element body, including overlay + labelBounds: { + // bounds cache of labels + all: null, + source: null, + target: null, + main: null + }, + arrowBounds: { + // bounds cache of edge arrows + source: null, + target: null, + 'mid-source': null, + 'mid-target': null + } + }; + if (_p.position.x == null) { + _p.position.x = 0; + } + if (_p.position.y == null) { + _p.position.y = 0; + } + + // renderedPosition overrides if specified + if (params.renderedPosition) { + var rpos = params.renderedPosition; + var pan = cy.pan(); + var zoom = cy.zoom(); + _p.position = { + x: (rpos.x - pan.x) / zoom, + y: (rpos.y - pan.y) / zoom + }; + } + var classes = []; + if (array(params.classes)) { + classes = params.classes; + } else if (string(params.classes)) { + classes = params.classes.split(/\s+/); + } + for (var i = 0, l = classes.length; i < l; i++) { + var cls = classes[i]; + if (!cls || cls === '') { + continue; + } + _p.classes.add(cls); + } + this.createEmitter(); + var bypass = params.style || params.css; + if (bypass) { + warn('Setting a `style` bypass at element creation should be done only when absolutely necessary. Try to use the stylesheet instead.'); + this.style(bypass); + } + if (restore === undefined || restore) { + this.restore(); + } +}; + +var defineSearch = function defineSearch(params) { + params = { + bfs: params.bfs || !params.dfs, + dfs: params.dfs || !params.bfs + }; + + // from pseudocode on wikipedia + return function searchFn(roots, fn, directed) { + var options; + if (plainObject(roots) && !elementOrCollection(roots)) { + options = roots; + roots = options.roots || options.root; + fn = options.visit; + directed = options.directed; + } + directed = arguments.length === 2 && !fn$6(fn) ? fn : directed; + fn = fn$6(fn) ? fn : function () {}; + var cy = this._private.cy; + var v = roots = string(roots) ? this.filter(roots) : roots; + var Q = []; + var connectedNodes = []; + var connectedBy = {}; + var id2depth = {}; + var V = {}; + var j = 0; + var found; + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + + // enqueue v + for (var i = 0; i < v.length; i++) { + var vi = v[i]; + var viId = vi.id(); + if (vi.isNode()) { + Q.unshift(vi); + if (params.bfs) { + V[viId] = true; + connectedNodes.push(vi); + } + id2depth[viId] = 0; + } + } + var _loop = function _loop() { + var v = params.bfs ? Q.shift() : Q.pop(); + var vId = v.id(); + if (params.dfs) { + if (V[vId]) { + return "continue"; + } + V[vId] = true; + connectedNodes.push(v); + } + var depth = id2depth[vId]; + var prevEdge = connectedBy[vId]; + var src = prevEdge != null ? prevEdge.source() : null; + var tgt = prevEdge != null ? prevEdge.target() : null; + var prevNode = prevEdge == null ? undefined : v.same(src) ? tgt[0] : src[0]; + var ret = void 0; + ret = fn(v, prevEdge, prevNode, j++, depth); + if (ret === true) { + found = v; + return "break"; + } + if (ret === false) { + return "break"; + } + var vwEdges = v.connectedEdges().filter(function (e) { + return (!directed || e.source().same(v)) && edges.has(e); + }); + for (var _i2 = 0; _i2 < vwEdges.length; _i2++) { + var e = vwEdges[_i2]; + var w = e.connectedNodes().filter(function (n) { + return !n.same(v) && nodes.has(n); + }); + var wId = w.id(); + if (w.length !== 0 && !V[wId]) { + w = w[0]; + Q.push(w); + if (params.bfs) { + V[wId] = true; + connectedNodes.push(w); + } + connectedBy[wId] = e; + id2depth[wId] = id2depth[vId] + 1; + } + } + }; + while (Q.length !== 0) { + var _ret = _loop(); + if (_ret === "continue") continue; + if (_ret === "break") break; + } + var connectedEles = cy.collection(); + for (var _i = 0; _i < connectedNodes.length; _i++) { + var node = connectedNodes[_i]; + var edge = connectedBy[node.id()]; + if (edge != null) { + connectedEles.push(edge); + } + connectedEles.push(node); + } + return { + path: cy.collection(connectedEles), + found: cy.collection(found) + }; + }; +}; + +// search, spanning trees, etc +var elesfn$v = { + breadthFirstSearch: defineSearch({ + bfs: true + }), + depthFirstSearch: defineSearch({ + dfs: true + }) +}; + +// nice, short mathematical alias +elesfn$v.bfs = elesfn$v.breadthFirstSearch; +elesfn$v.dfs = elesfn$v.depthFirstSearch; + +var heap$1 = createCommonjsModule(function (module, exports) { +// Generated by CoffeeScript 1.8.0 +(function() { + var Heap, defaultCmp, floor, heapify, heappop, heappush, heappushpop, heapreplace, insort, min, nlargest, nsmallest, updateItem, _siftdown, _siftup; + + floor = Math.floor, min = Math.min; + + + /* + Default comparison function to be used + */ + + defaultCmp = function(x, y) { + if (x < y) { + return -1; + } + if (x > y) { + return 1; + } + return 0; + }; + + + /* + Insert item x in list a, and keep it sorted assuming a is sorted. + + If x is already in a, insert it to the right of the rightmost x. + + Optional args lo (default 0) and hi (default a.length) bound the slice + of a to be searched. + */ + + insort = function(a, x, lo, hi, cmp) { + var mid; + if (lo == null) { + lo = 0; + } + if (cmp == null) { + cmp = defaultCmp; + } + if (lo < 0) { + throw new Error('lo must be non-negative'); + } + if (hi == null) { + hi = a.length; + } + while (lo < hi) { + mid = floor((lo + hi) / 2); + if (cmp(x, a[mid]) < 0) { + hi = mid; + } else { + lo = mid + 1; + } + } + return ([].splice.apply(a, [lo, lo - lo].concat(x)), x); + }; + + + /* + Push item onto heap, maintaining the heap invariant. + */ + + heappush = function(array, item, cmp) { + if (cmp == null) { + cmp = defaultCmp; + } + array.push(item); + return _siftdown(array, 0, array.length - 1, cmp); + }; + + + /* + Pop the smallest item off the heap, maintaining the heap invariant. + */ + + heappop = function(array, cmp) { + var lastelt, returnitem; + if (cmp == null) { + cmp = defaultCmp; + } + lastelt = array.pop(); + if (array.length) { + returnitem = array[0]; + array[0] = lastelt; + _siftup(array, 0, cmp); + } else { + returnitem = lastelt; + } + return returnitem; + }; + + + /* + Pop and return the current smallest value, and add the new item. + + This is more efficient than heappop() followed by heappush(), and can be + more appropriate when using a fixed size heap. Note that the value + returned may be larger than item! That constrains reasonable use of + this routine unless written as part of a conditional replacement: + if item > array[0] + item = heapreplace(array, item) + */ + + heapreplace = function(array, item, cmp) { + var returnitem; + if (cmp == null) { + cmp = defaultCmp; + } + returnitem = array[0]; + array[0] = item; + _siftup(array, 0, cmp); + return returnitem; + }; + + + /* + Fast version of a heappush followed by a heappop. + */ + + heappushpop = function(array, item, cmp) { + var _ref; + if (cmp == null) { + cmp = defaultCmp; + } + if (array.length && cmp(array[0], item) < 0) { + _ref = [array[0], item], item = _ref[0], array[0] = _ref[1]; + _siftup(array, 0, cmp); + } + return item; + }; + + + /* + Transform list into a heap, in-place, in O(array.length) time. + */ + + heapify = function(array, cmp) { + var i, _i, _len, _ref1, _results, _results1; + if (cmp == null) { + cmp = defaultCmp; + } + _ref1 = (function() { + _results1 = []; + for (var _j = 0, _ref = floor(array.length / 2); 0 <= _ref ? _j < _ref : _j > _ref; 0 <= _ref ? _j++ : _j--){ _results1.push(_j); } + return _results1; + }).apply(this).reverse(); + _results = []; + for (_i = 0, _len = _ref1.length; _i < _len; _i++) { + i = _ref1[_i]; + _results.push(_siftup(array, i, cmp)); + } + return _results; + }; + + + /* + Update the position of the given item in the heap. + This function should be called every time the item is being modified. + */ + + updateItem = function(array, item, cmp) { + var pos; + if (cmp == null) { + cmp = defaultCmp; + } + pos = array.indexOf(item); + if (pos === -1) { + return; + } + _siftdown(array, 0, pos, cmp); + return _siftup(array, pos, cmp); + }; + + + /* + Find the n largest elements in a dataset. + */ + + nlargest = function(array, n, cmp) { + var elem, result, _i, _len, _ref; + if (cmp == null) { + cmp = defaultCmp; + } + result = array.slice(0, n); + if (!result.length) { + return result; + } + heapify(result, cmp); + _ref = array.slice(n); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + elem = _ref[_i]; + heappushpop(result, elem, cmp); + } + return result.sort(cmp).reverse(); + }; + + + /* + Find the n smallest elements in a dataset. + */ + + nsmallest = function(array, n, cmp) { + var elem, los, result, _i, _j, _len, _ref, _ref1, _results; + if (cmp == null) { + cmp = defaultCmp; + } + if (n * 10 <= array.length) { + result = array.slice(0, n).sort(cmp); + if (!result.length) { + return result; + } + los = result[result.length - 1]; + _ref = array.slice(n); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + elem = _ref[_i]; + if (cmp(elem, los) < 0) { + insort(result, elem, 0, null, cmp); + result.pop(); + los = result[result.length - 1]; + } + } + return result; + } + heapify(array, cmp); + _results = []; + for (_j = 0, _ref1 = min(n, array.length); 0 <= _ref1 ? _j < _ref1 : _j > _ref1; 0 <= _ref1 ? ++_j : --_j) { + _results.push(heappop(array, cmp)); + } + return _results; + }; + + _siftdown = function(array, startpos, pos, cmp) { + var newitem, parent, parentpos; + if (cmp == null) { + cmp = defaultCmp; + } + newitem = array[pos]; + while (pos > startpos) { + parentpos = (pos - 1) >> 1; + parent = array[parentpos]; + if (cmp(newitem, parent) < 0) { + array[pos] = parent; + pos = parentpos; + continue; + } + break; + } + return array[pos] = newitem; + }; + + _siftup = function(array, pos, cmp) { + var childpos, endpos, newitem, rightpos, startpos; + if (cmp == null) { + cmp = defaultCmp; + } + endpos = array.length; + startpos = pos; + newitem = array[pos]; + childpos = 2 * pos + 1; + while (childpos < endpos) { + rightpos = childpos + 1; + if (rightpos < endpos && !(cmp(array[childpos], array[rightpos]) < 0)) { + childpos = rightpos; + } + array[pos] = array[childpos]; + pos = childpos; + childpos = 2 * pos + 1; + } + array[pos] = newitem; + return _siftdown(array, startpos, pos, cmp); + }; + + Heap = (function() { + Heap.push = heappush; + + Heap.pop = heappop; + + Heap.replace = heapreplace; + + Heap.pushpop = heappushpop; + + Heap.heapify = heapify; + + Heap.updateItem = updateItem; + + Heap.nlargest = nlargest; + + Heap.nsmallest = nsmallest; + + function Heap(cmp) { + this.cmp = cmp != null ? cmp : defaultCmp; + this.nodes = []; + } + + Heap.prototype.push = function(x) { + return heappush(this.nodes, x, this.cmp); + }; + + Heap.prototype.pop = function() { + return heappop(this.nodes, this.cmp); + }; + + Heap.prototype.peek = function() { + return this.nodes[0]; + }; + + Heap.prototype.contains = function(x) { + return this.nodes.indexOf(x) !== -1; + }; + + Heap.prototype.replace = function(x) { + return heapreplace(this.nodes, x, this.cmp); + }; + + Heap.prototype.pushpop = function(x) { + return heappushpop(this.nodes, x, this.cmp); + }; + + Heap.prototype.heapify = function() { + return heapify(this.nodes, this.cmp); + }; + + Heap.prototype.updateItem = function(x) { + return updateItem(this.nodes, x, this.cmp); + }; + + Heap.prototype.clear = function() { + return this.nodes = []; + }; + + Heap.prototype.empty = function() { + return this.nodes.length === 0; + }; + + Heap.prototype.size = function() { + return this.nodes.length; + }; + + Heap.prototype.clone = function() { + var heap; + heap = new Heap(); + heap.nodes = this.nodes.slice(0); + return heap; + }; + + Heap.prototype.toArray = function() { + return this.nodes.slice(0); + }; + + Heap.prototype.insert = Heap.prototype.push; + + Heap.prototype.top = Heap.prototype.peek; + + Heap.prototype.front = Heap.prototype.peek; + + Heap.prototype.has = Heap.prototype.contains; + + Heap.prototype.copy = Heap.prototype.clone; + + return Heap; + + })(); + + (function(root, factory) { + { + return module.exports = factory(); + } + })(this, function() { + return Heap; + }); + +}).call(commonjsGlobal); +}); + +var heap = heap$1; + +var dijkstraDefaults = defaults$g({ + root: null, + weight: function weight(edge) { + return 1; + }, + directed: false +}); +var elesfn$u = { + dijkstra: function dijkstra(options) { + if (!plainObject(options)) { + var args = arguments; + options = { + root: args[0], + weight: args[1], + directed: args[2] + }; + } + var _dijkstraDefaults = dijkstraDefaults(options), + root = _dijkstraDefaults.root, + weight = _dijkstraDefaults.weight, + directed = _dijkstraDefaults.directed; + var eles = this; + var weightFn = weight; + var source = string(root) ? this.filter(root)[0] : root[0]; + var dist = {}; + var prev = {}; + var knownDist = {}; + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + edges.unmergeBy(function (ele) { + return ele.isLoop(); + }); + var getDist = function getDist(node) { + return dist[node.id()]; + }; + var setDist = function setDist(node, d) { + dist[node.id()] = d; + Q.updateItem(node); + }; + var Q = new heap(function (a, b) { + return getDist(a) - getDist(b); + }); + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + dist[node.id()] = node.same(source) ? 0 : Infinity; + Q.push(node); + } + var distBetween = function distBetween(u, v) { + var uvs = (directed ? u.edgesTo(v) : u.edgesWith(v)).intersect(edges); + var smallestDistance = Infinity; + var smallestEdge; + for (var _i = 0; _i < uvs.length; _i++) { + var edge = uvs[_i]; + var _weight = weightFn(edge); + if (_weight < smallestDistance || !smallestEdge) { + smallestDistance = _weight; + smallestEdge = edge; + } + } + return { + edge: smallestEdge, + dist: smallestDistance + }; + }; + while (Q.size() > 0) { + var u = Q.pop(); + var smalletsDist = getDist(u); + var uid = u.id(); + knownDist[uid] = smalletsDist; + if (smalletsDist === Infinity) { + continue; + } + var neighbors = u.neighborhood().intersect(nodes); + for (var _i2 = 0; _i2 < neighbors.length; _i2++) { + var v = neighbors[_i2]; + var vid = v.id(); + var vDist = distBetween(u, v); + var alt = smalletsDist + vDist.dist; + if (alt < getDist(v)) { + setDist(v, alt); + prev[vid] = { + node: u, + edge: vDist.edge + }; + } + } // for + } // while + + return { + distanceTo: function distanceTo(node) { + var target = string(node) ? nodes.filter(node)[0] : node[0]; + return knownDist[target.id()]; + }, + pathTo: function pathTo(node) { + var target = string(node) ? nodes.filter(node)[0] : node[0]; + var S = []; + var u = target; + var uid = u.id(); + if (target.length > 0) { + S.unshift(target); + while (prev[uid]) { + var p = prev[uid]; + S.unshift(p.edge); + S.unshift(p.node); + u = p.node; + uid = u.id(); + } + } + return eles.spawn(S); + } + }; + } +}; + +var elesfn$t = { + // kruskal's algorithm (finds min spanning tree, assuming undirected graph) + // implemented from pseudocode from wikipedia + kruskal: function kruskal(weightFn) { + weightFn = weightFn || function (edge) { + return 1; + }; + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + var numNodes = nodes.length; + var forest = new Array(numNodes); + var A = nodes; // assumes byGroup() creates new collections that can be safely mutated + + var findSetIndex = function findSetIndex(ele) { + for (var i = 0; i < forest.length; i++) { + var eles = forest[i]; + if (eles.has(ele)) { + return i; + } + } + }; + + // start with one forest per node + for (var i = 0; i < numNodes; i++) { + forest[i] = this.spawn(nodes[i]); + } + var S = edges.sort(function (a, b) { + return weightFn(a) - weightFn(b); + }); + for (var _i = 0; _i < S.length; _i++) { + var edge = S[_i]; + var u = edge.source()[0]; + var v = edge.target()[0]; + var setUIndex = findSetIndex(u); + var setVIndex = findSetIndex(v); + var setU = forest[setUIndex]; + var setV = forest[setVIndex]; + if (setUIndex !== setVIndex) { + A.merge(edge); + + // combine forests for u and v + setU.merge(setV); + forest.splice(setVIndex, 1); + } + } + return A; + } +}; + +var aStarDefaults = defaults$g({ + root: null, + goal: null, + weight: function weight(edge) { + return 1; + }, + heuristic: function heuristic(edge) { + return 0; + }, + directed: false +}); +var elesfn$s = { + // Implemented from pseudocode from wikipedia + aStar: function aStar(options) { + var cy = this.cy(); + var _aStarDefaults = aStarDefaults(options), + root = _aStarDefaults.root, + goal = _aStarDefaults.goal, + heuristic = _aStarDefaults.heuristic, + directed = _aStarDefaults.directed, + weight = _aStarDefaults.weight; + root = cy.collection(root)[0]; + goal = cy.collection(goal)[0]; + var sid = root.id(); + var tid = goal.id(); + var gScore = {}; + var fScore = {}; + var closedSetIds = {}; + var openSet = new heap(function (a, b) { + return fScore[a.id()] - fScore[b.id()]; + }); + var openSetIds = new Set$1(); + var cameFrom = {}; + var cameFromEdge = {}; + var addToOpenSet = function addToOpenSet(ele, id) { + openSet.push(ele); + openSetIds.add(id); + }; + var cMin, cMinId; + var popFromOpenSet = function popFromOpenSet() { + cMin = openSet.pop(); + cMinId = cMin.id(); + openSetIds["delete"](cMinId); + }; + var isInOpenSet = function isInOpenSet(id) { + return openSetIds.has(id); + }; + addToOpenSet(root, sid); + gScore[sid] = 0; + fScore[sid] = heuristic(root); + + // Counter + var steps = 0; + + // Main loop + while (openSet.size() > 0) { + popFromOpenSet(); + steps++; + + // If we've found our goal, then we are done + if (cMinId === tid) { + var path = []; + var pathNode = goal; + var pathNodeId = tid; + var pathEdge = cameFromEdge[pathNodeId]; + for (;;) { + path.unshift(pathNode); + if (pathEdge != null) { + path.unshift(pathEdge); + } + pathNode = cameFrom[pathNodeId]; + if (pathNode == null) { + break; + } + pathNodeId = pathNode.id(); + pathEdge = cameFromEdge[pathNodeId]; + } + return { + found: true, + distance: gScore[cMinId], + path: this.spawn(path), + steps: steps + }; + } + + // Add cMin to processed nodes + closedSetIds[cMinId] = true; + + // Update scores for neighbors of cMin + // Take into account if graph is directed or not + var vwEdges = cMin._private.edges; + for (var i = 0; i < vwEdges.length; i++) { + var e = vwEdges[i]; + + // edge must be in set of calling eles + if (!this.hasElementWithId(e.id())) { + continue; + } + + // cMin must be the source of edge if directed + if (directed && e.data('source') !== cMinId) { + continue; + } + var wSrc = e.source(); + var wTgt = e.target(); + var w = wSrc.id() !== cMinId ? wSrc : wTgt; + var wid = w.id(); + + // node must be in set of calling eles + if (!this.hasElementWithId(wid)) { + continue; + } + + // if node is in closedSet, ignore it + if (closedSetIds[wid]) { + continue; + } + + // New tentative score for node w + var tempScore = gScore[cMinId] + weight(e); + + // Update gScore for node w if: + // w not present in openSet + // OR + // tentative gScore is less than previous value + + // w not in openSet + if (!isInOpenSet(wid)) { + gScore[wid] = tempScore; + fScore[wid] = tempScore + heuristic(w); + addToOpenSet(w, wid); + cameFrom[wid] = cMin; + cameFromEdge[wid] = e; + continue; + } + + // w already in openSet, but with greater gScore + if (tempScore < gScore[wid]) { + gScore[wid] = tempScore; + fScore[wid] = tempScore + heuristic(w); + cameFrom[wid] = cMin; + cameFromEdge[wid] = e; + } + } // End of neighbors update + } // End of main loop + + // If we've reached here, then we've not reached our goal + return { + found: false, + distance: undefined, + path: undefined, + steps: steps + }; + } +}; // elesfn + +var floydWarshallDefaults = defaults$g({ + weight: function weight(edge) { + return 1; + }, + directed: false +}); +var elesfn$r = { + // Implemented from pseudocode from wikipedia + floydWarshall: function floydWarshall(options) { + var cy = this.cy(); + var _floydWarshallDefault = floydWarshallDefaults(options), + weight = _floydWarshallDefault.weight, + directed = _floydWarshallDefault.directed; + var weightFn = weight; + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + var N = nodes.length; + var Nsq = N * N; + var indexOf = function indexOf(node) { + return nodes.indexOf(node); + }; + var atIndex = function atIndex(i) { + return nodes[i]; + }; + + // Initialize distance matrix + var dist = new Array(Nsq); + for (var n = 0; n < Nsq; n++) { + var j = n % N; + var i = (n - j) / N; + if (i === j) { + dist[n] = 0; + } else { + dist[n] = Infinity; + } + } + + // Initialize matrix used for path reconstruction + // Initialize distance matrix + var next = new Array(Nsq); + var edgeNext = new Array(Nsq); + + // Process edges + for (var _i = 0; _i < edges.length; _i++) { + var edge = edges[_i]; + var src = edge.source()[0]; + var tgt = edge.target()[0]; + if (src === tgt) { + continue; + } // exclude loops + + var s = indexOf(src); + var t = indexOf(tgt); + var st = s * N + t; // source to target index + var _weight = weightFn(edge); + + // Check if already process another edge between same 2 nodes + if (dist[st] > _weight) { + dist[st] = _weight; + next[st] = t; + edgeNext[st] = edge; + } + + // If undirected graph, process 'reversed' edge + if (!directed) { + var ts = t * N + s; // target to source index + + if (!directed && dist[ts] > _weight) { + dist[ts] = _weight; + next[ts] = s; + edgeNext[ts] = edge; + } + } + } + + // Main loop + for (var k = 0; k < N; k++) { + for (var _i2 = 0; _i2 < N; _i2++) { + var ik = _i2 * N + k; + for (var _j = 0; _j < N; _j++) { + var ij = _i2 * N + _j; + var kj = k * N + _j; + if (dist[ik] + dist[kj] < dist[ij]) { + dist[ij] = dist[ik] + dist[kj]; + next[ij] = next[ik]; + } + } + } + } + var getArgEle = function getArgEle(ele) { + return (string(ele) ? cy.filter(ele) : ele)[0]; + }; + var indexOfArgEle = function indexOfArgEle(ele) { + return indexOf(getArgEle(ele)); + }; + var res = { + distance: function distance(from, to) { + var i = indexOfArgEle(from); + var j = indexOfArgEle(to); + return dist[i * N + j]; + }, + path: function path(from, to) { + var i = indexOfArgEle(from); + var j = indexOfArgEle(to); + var fromNode = atIndex(i); + if (i === j) { + return fromNode.collection(); + } + if (next[i * N + j] == null) { + return cy.collection(); + } + var path = cy.collection(); + var prev = i; + var edge; + path.merge(fromNode); + while (i !== j) { + prev = i; + i = next[i * N + j]; + edge = edgeNext[prev * N + i]; + path.merge(edge); + path.merge(atIndex(i)); + } + return path; + } + }; + return res; + } // floydWarshall +}; // elesfn + +var bellmanFordDefaults = defaults$g({ + weight: function weight(edge) { + return 1; + }, + directed: false, + root: null +}); +var elesfn$q = { + // Implemented from pseudocode from wikipedia + bellmanFord: function bellmanFord(options) { + var _this = this; + var _bellmanFordDefaults = bellmanFordDefaults(options), + weight = _bellmanFordDefaults.weight, + directed = _bellmanFordDefaults.directed, + root = _bellmanFordDefaults.root; + var weightFn = weight; + var eles = this; + var cy = this.cy(); + var _this$byGroup = this.byGroup(), + edges = _this$byGroup.edges, + nodes = _this$byGroup.nodes; + var numNodes = nodes.length; + var infoMap = new Map$2(); + var hasNegativeWeightCycle = false; + var negativeWeightCycles = []; + root = cy.collection(root)[0]; // in case selector passed + + edges.unmergeBy(function (edge) { + return edge.isLoop(); + }); + var numEdges = edges.length; + var getInfo = function getInfo(node) { + var obj = infoMap.get(node.id()); + if (!obj) { + obj = {}; + infoMap.set(node.id(), obj); + } + return obj; + }; + var getNodeFromTo = function getNodeFromTo(to) { + return (string(to) ? cy.$(to) : to)[0]; + }; + var distanceTo = function distanceTo(to) { + return getInfo(getNodeFromTo(to)).dist; + }; + var pathTo = function pathTo(to) { + var thisStart = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : root; + var end = getNodeFromTo(to); + var path = []; + var node = end; + for (;;) { + if (node == null) { + return _this.spawn(); + } + var _getInfo = getInfo(node), + edge = _getInfo.edge, + pred = _getInfo.pred; + path.unshift(node[0]); + if (node.same(thisStart) && path.length > 0) { + break; + } + if (edge != null) { + path.unshift(edge); + } + node = pred; + } + return eles.spawn(path); + }; + + // Initializations { dist, pred, edge } + for (var i = 0; i < numNodes; i++) { + var node = nodes[i]; + var info = getInfo(node); + if (node.same(root)) { + info.dist = 0; + } else { + info.dist = Infinity; + } + info.pred = null; + info.edge = null; + } + + // Edges relaxation + var replacedEdge = false; + var checkForEdgeReplacement = function checkForEdgeReplacement(node1, node2, edge, info1, info2, weight) { + var dist = info1.dist + weight; + if (dist < info2.dist && !edge.same(info1.edge)) { + info2.dist = dist; + info2.pred = node1; + info2.edge = edge; + replacedEdge = true; + } + }; + for (var _i = 1; _i < numNodes; _i++) { + replacedEdge = false; + for (var e = 0; e < numEdges; e++) { + var edge = edges[e]; + var src = edge.source(); + var tgt = edge.target(); + var _weight = weightFn(edge); + var srcInfo = getInfo(src); + var tgtInfo = getInfo(tgt); + checkForEdgeReplacement(src, tgt, edge, srcInfo, tgtInfo, _weight); + + // If undirected graph, we need to take into account the 'reverse' edge + if (!directed) { + checkForEdgeReplacement(tgt, src, edge, tgtInfo, srcInfo, _weight); + } + } + if (!replacedEdge) { + break; + } + } + if (replacedEdge) { + // Check for negative weight cycles + var negativeWeightCycleIds = []; + for (var _e = 0; _e < numEdges; _e++) { + var _edge = edges[_e]; + var _src = _edge.source(); + var _tgt = _edge.target(); + var _weight2 = weightFn(_edge); + var srcDist = getInfo(_src).dist; + var tgtDist = getInfo(_tgt).dist; + if (srcDist + _weight2 < tgtDist || !directed && tgtDist + _weight2 < srcDist) { + if (!hasNegativeWeightCycle) { + warn('Graph contains a negative weight cycle for Bellman-Ford'); + hasNegativeWeightCycle = true; + } + if (options.findNegativeWeightCycles !== false) { + var negativeNodes = []; + if (srcDist + _weight2 < tgtDist) { + negativeNodes.push(_src); + } + if (!directed && tgtDist + _weight2 < srcDist) { + negativeNodes.push(_tgt); + } + var numNegativeNodes = negativeNodes.length; + for (var n = 0; n < numNegativeNodes; n++) { + var start = negativeNodes[n]; + var cycle = [start]; + cycle.push(getInfo(start).edge); + var _node = getInfo(start).pred; + while (cycle.indexOf(_node) === -1) { + cycle.push(_node); + cycle.push(getInfo(_node).edge); + _node = getInfo(_node).pred; + } + cycle = cycle.slice(cycle.indexOf(_node)); + var smallestId = cycle[0].id(); + var smallestIndex = 0; + for (var c = 2; c < cycle.length; c += 2) { + if (cycle[c].id() < smallestId) { + smallestId = cycle[c].id(); + smallestIndex = c; + } + } + cycle = cycle.slice(smallestIndex).concat(cycle.slice(0, smallestIndex)); + cycle.push(cycle[0]); + var cycleId = cycle.map(function (el) { + return el.id(); + }).join(","); + if (negativeWeightCycleIds.indexOf(cycleId) === -1) { + negativeWeightCycles.push(eles.spawn(cycle)); + negativeWeightCycleIds.push(cycleId); + } + } + } else { + break; + } + } + } + } + return { + distanceTo: distanceTo, + pathTo: pathTo, + hasNegativeWeightCycle: hasNegativeWeightCycle, + negativeWeightCycles: negativeWeightCycles + }; + } // bellmanFord +}; // elesfn + +var sqrt2 = Math.sqrt(2); + +// Function which colapses 2 (meta) nodes into one +// Updates the remaining edge lists +// Receives as a paramater the edge which causes the collapse +var collapse = function collapse(edgeIndex, nodeMap, remainingEdges) { + if (remainingEdges.length === 0) { + error("Karger-Stein must be run on a connected (sub)graph"); + } + var edgeInfo = remainingEdges[edgeIndex]; + var sourceIn = edgeInfo[1]; + var targetIn = edgeInfo[2]; + var partition1 = nodeMap[sourceIn]; + var partition2 = nodeMap[targetIn]; + var newEdges = remainingEdges; // re-use array + + // Delete all edges between partition1 and partition2 + for (var i = newEdges.length - 1; i >= 0; i--) { + var edge = newEdges[i]; + var src = edge[1]; + var tgt = edge[2]; + if (nodeMap[src] === partition1 && nodeMap[tgt] === partition2 || nodeMap[src] === partition2 && nodeMap[tgt] === partition1) { + newEdges.splice(i, 1); + } + } + + // All edges pointing to partition2 should now point to partition1 + for (var _i = 0; _i < newEdges.length; _i++) { + var _edge = newEdges[_i]; + if (_edge[1] === partition2) { + // Check source + newEdges[_i] = _edge.slice(); // copy + newEdges[_i][1] = partition1; + } else if (_edge[2] === partition2) { + // Check target + newEdges[_i] = _edge.slice(); // copy + newEdges[_i][2] = partition1; + } + } + + // Move all nodes from partition2 to partition1 + for (var _i2 = 0; _i2 < nodeMap.length; _i2++) { + if (nodeMap[_i2] === partition2) { + nodeMap[_i2] = partition1; + } + } + return newEdges; +}; + +// Contracts a graph until we reach a certain number of meta nodes +var contractUntil = function contractUntil(metaNodeMap, remainingEdges, size, sizeLimit) { + while (size > sizeLimit) { + // Choose an edge randomly + var edgeIndex = Math.floor(Math.random() * remainingEdges.length); + + // Collapse graph based on edge + remainingEdges = collapse(edgeIndex, metaNodeMap, remainingEdges); + size--; + } + return remainingEdges; +}; +var elesfn$p = { + // Computes the minimum cut of an undirected graph + // Returns the correct answer with high probability + kargerStein: function kargerStein() { + var _this = this; + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + edges.unmergeBy(function (edge) { + return edge.isLoop(); + }); + var numNodes = nodes.length; + var numEdges = edges.length; + var numIter = Math.ceil(Math.pow(Math.log(numNodes) / Math.LN2, 2)); + var stopSize = Math.floor(numNodes / sqrt2); + if (numNodes < 2) { + error('At least 2 nodes are required for Karger-Stein algorithm'); + return undefined; + } + + // Now store edge destination as indexes + // Format for each edge (edge index, source node index, target node index) + var edgeIndexes = []; + for (var i = 0; i < numEdges; i++) { + var e = edges[i]; + edgeIndexes.push([i, nodes.indexOf(e.source()), nodes.indexOf(e.target())]); + } + + // We will store the best cut found here + var minCutSize = Infinity; + var minCutEdgeIndexes = []; + var minCutNodeMap = new Array(numNodes); + + // Initial meta node partition + var metaNodeMap = new Array(numNodes); + var metaNodeMap2 = new Array(numNodes); + var copyNodesMap = function copyNodesMap(from, to) { + for (var _i3 = 0; _i3 < numNodes; _i3++) { + to[_i3] = from[_i3]; + } + }; + + // Main loop + for (var iter = 0; iter <= numIter; iter++) { + // Reset meta node partition + for (var _i4 = 0; _i4 < numNodes; _i4++) { + metaNodeMap[_i4] = _i4; + } + + // Contract until stop point (stopSize nodes) + var edgesState = contractUntil(metaNodeMap, edgeIndexes.slice(), numNodes, stopSize); + var edgesState2 = edgesState.slice(); // copy + + // Create a copy of the colapsed nodes state + copyNodesMap(metaNodeMap, metaNodeMap2); + + // Run 2 iterations starting in the stop state + var res1 = contractUntil(metaNodeMap, edgesState, stopSize, 2); + var res2 = contractUntil(metaNodeMap2, edgesState2, stopSize, 2); + + // Is any of the 2 results the best cut so far? + if (res1.length <= res2.length && res1.length < minCutSize) { + minCutSize = res1.length; + minCutEdgeIndexes = res1; + copyNodesMap(metaNodeMap, minCutNodeMap); + } else if (res2.length <= res1.length && res2.length < minCutSize) { + minCutSize = res2.length; + minCutEdgeIndexes = res2; + copyNodesMap(metaNodeMap2, minCutNodeMap); + } + } // end of main loop + + // Construct result + var cut = this.spawn(minCutEdgeIndexes.map(function (e) { + return edges[e[0]]; + })); + var partition1 = this.spawn(); + var partition2 = this.spawn(); + + // traverse metaNodeMap for best cut + var witnessNodePartition = minCutNodeMap[0]; + for (var _i5 = 0; _i5 < minCutNodeMap.length; _i5++) { + var partitionId = minCutNodeMap[_i5]; + var node = nodes[_i5]; + if (partitionId === witnessNodePartition) { + partition1.merge(node); + } else { + partition2.merge(node); + } + } + + // construct components corresponding to each disjoint subset of nodes + var constructComponent = function constructComponent(subset) { + var component = _this.spawn(); + subset.forEach(function (node) { + component.merge(node); + node.connectedEdges().forEach(function (edge) { + // ensure edge is within calling collection and edge is not in cut + if (_this.contains(edge) && !cut.contains(edge)) { + component.merge(edge); + } + }); + }); + return component; + }; + var components = [constructComponent(partition1), constructComponent(partition2)]; + var ret = { + cut: cut, + components: components, + // n.b. partitions are included to be compatible with the old api spec + // (could be removed in a future major version) + partition1: partition1, + partition2: partition2 + }; + return ret; + } +}; // elesfn + +var copyPosition = function copyPosition(p) { + return { + x: p.x, + y: p.y + }; +}; +var modelToRenderedPosition = function modelToRenderedPosition(p, zoom, pan) { + return { + x: p.x * zoom + pan.x, + y: p.y * zoom + pan.y + }; +}; +var renderedToModelPosition = function renderedToModelPosition(p, zoom, pan) { + return { + x: (p.x - pan.x) / zoom, + y: (p.y - pan.y) / zoom + }; +}; +var array2point = function array2point(arr) { + return { + x: arr[0], + y: arr[1] + }; +}; +var min = function min(arr) { + var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; + var min = Infinity; + for (var i = begin; i < end; i++) { + var val = arr[i]; + if (isFinite(val)) { + min = Math.min(val, min); + } + } + return min; +}; +var max = function max(arr) { + var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; + var max = -Infinity; + for (var i = begin; i < end; i++) { + var val = arr[i]; + if (isFinite(val)) { + max = Math.max(val, max); + } + } + return max; +}; +var mean = function mean(arr) { + var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; + var total = 0; + var n = 0; + for (var i = begin; i < end; i++) { + var val = arr[i]; + if (isFinite(val)) { + total += val; + n++; + } + } + return total / n; +}; +var median = function median(arr) { + var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; + var copy = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var sort = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var includeHoles = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; + if (copy) { + arr = arr.slice(begin, end); + } else { + if (end < arr.length) { + arr.splice(end, arr.length - end); + } + if (begin > 0) { + arr.splice(0, begin); + } + } + + // all non finite (e.g. Infinity, NaN) elements must be -Infinity so they go to the start + var off = 0; // offset from non-finite values + for (var i = arr.length - 1; i >= 0; i--) { + var v = arr[i]; + if (includeHoles) { + if (!isFinite(v)) { + arr[i] = -Infinity; + off++; + } + } else { + // just remove it if we don't want to consider holes + arr.splice(i, 1); + } + } + if (sort) { + arr.sort(function (a, b) { + return a - b; + }); // requires copy = true if you don't want to change the orig + } + + var len = arr.length; + var mid = Math.floor(len / 2); + if (len % 2 !== 0) { + return arr[mid + 1 + off]; + } else { + return (arr[mid - 1 + off] + arr[mid + off]) / 2; + } +}; +var deg2rad = function deg2rad(deg) { + return Math.PI * deg / 180; +}; +var getAngleFromDisp = function getAngleFromDisp(dispX, dispY) { + return Math.atan2(dispY, dispX) - Math.PI / 2; +}; +var log2 = Math.log2 || function (n) { + return Math.log(n) / Math.log(2); +}; +var signum = function signum(x) { + if (x > 0) { + return 1; + } else if (x < 0) { + return -1; + } else { + return 0; + } +}; +var dist = function dist(p1, p2) { + return Math.sqrt(sqdist(p1, p2)); +}; +var sqdist = function sqdist(p1, p2) { + var dx = p2.x - p1.x; + var dy = p2.y - p1.y; + return dx * dx + dy * dy; +}; +var inPlaceSumNormalize = function inPlaceSumNormalize(v) { + var length = v.length; + + // First, get sum of all elements + var total = 0; + for (var i = 0; i < length; i++) { + total += v[i]; + } + + // Now, divide each by the sum of all elements + for (var _i = 0; _i < length; _i++) { + v[_i] = v[_i] / total; + } + return v; +}; + +// from http://en.wikipedia.org/wiki/Bézier_curve#Quadratic_curves +var qbezierAt = function qbezierAt(p0, p1, p2, t) { + return (1 - t) * (1 - t) * p0 + 2 * (1 - t) * t * p1 + t * t * p2; +}; +var qbezierPtAt = function qbezierPtAt(p0, p1, p2, t) { + return { + x: qbezierAt(p0.x, p1.x, p2.x, t), + y: qbezierAt(p0.y, p1.y, p2.y, t) + }; +}; +var lineAt = function lineAt(p0, p1, t, d) { + var vec = { + x: p1.x - p0.x, + y: p1.y - p0.y + }; + var vecDist = dist(p0, p1); + var normVec = { + x: vec.x / vecDist, + y: vec.y / vecDist + }; + t = t == null ? 0 : t; + d = d != null ? d : t * vecDist; + return { + x: p0.x + normVec.x * d, + y: p0.y + normVec.y * d + }; +}; +var bound = function bound(min, val, max) { + return Math.max(min, Math.min(max, val)); +}; + +// makes a full bb (x1, y1, x2, y2, w, h) from implicit params +var makeBoundingBox = function makeBoundingBox(bb) { + if (bb == null) { + return { + x1: Infinity, + y1: Infinity, + x2: -Infinity, + y2: -Infinity, + w: 0, + h: 0 + }; + } else if (bb.x1 != null && bb.y1 != null) { + if (bb.x2 != null && bb.y2 != null && bb.x2 >= bb.x1 && bb.y2 >= bb.y1) { + return { + x1: bb.x1, + y1: bb.y1, + x2: bb.x2, + y2: bb.y2, + w: bb.x2 - bb.x1, + h: bb.y2 - bb.y1 + }; + } else if (bb.w != null && bb.h != null && bb.w >= 0 && bb.h >= 0) { + return { + x1: bb.x1, + y1: bb.y1, + x2: bb.x1 + bb.w, + y2: bb.y1 + bb.h, + w: bb.w, + h: bb.h + }; + } + } +}; +var copyBoundingBox = function copyBoundingBox(bb) { + return { + x1: bb.x1, + x2: bb.x2, + w: bb.w, + y1: bb.y1, + y2: bb.y2, + h: bb.h + }; +}; +var clearBoundingBox = function clearBoundingBox(bb) { + bb.x1 = Infinity; + bb.y1 = Infinity; + bb.x2 = -Infinity; + bb.y2 = -Infinity; + bb.w = 0; + bb.h = 0; +}; +var shiftBoundingBox = function shiftBoundingBox(bb, dx, dy) { + return { + x1: bb.x1 + dx, + x2: bb.x2 + dx, + y1: bb.y1 + dy, + y2: bb.y2 + dy, + w: bb.w, + h: bb.h + }; +}; +var updateBoundingBox = function updateBoundingBox(bb1, bb2) { + // update bb1 with bb2 bounds + + bb1.x1 = Math.min(bb1.x1, bb2.x1); + bb1.x2 = Math.max(bb1.x2, bb2.x2); + bb1.w = bb1.x2 - bb1.x1; + bb1.y1 = Math.min(bb1.y1, bb2.y1); + bb1.y2 = Math.max(bb1.y2, bb2.y2); + bb1.h = bb1.y2 - bb1.y1; +}; +var expandBoundingBoxByPoint = function expandBoundingBoxByPoint(bb, x, y) { + bb.x1 = Math.min(bb.x1, x); + bb.x2 = Math.max(bb.x2, x); + bb.w = bb.x2 - bb.x1; + bb.y1 = Math.min(bb.y1, y); + bb.y2 = Math.max(bb.y2, y); + bb.h = bb.y2 - bb.y1; +}; +var expandBoundingBox = function expandBoundingBox(bb) { + var padding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + bb.x1 -= padding; + bb.x2 += padding; + bb.y1 -= padding; + bb.y2 += padding; + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + return bb; +}; +var expandBoundingBoxSides = function expandBoundingBoxSides(bb) { + var padding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0]; + var top, right, bottom, left; + if (padding.length === 1) { + top = right = bottom = left = padding[0]; + } else if (padding.length === 2) { + top = bottom = padding[0]; + left = right = padding[1]; + } else if (padding.length === 4) { + var _padding = _slicedToArray(padding, 4); + top = _padding[0]; + right = _padding[1]; + bottom = _padding[2]; + left = _padding[3]; + } + bb.x1 -= left; + bb.x2 += right; + bb.y1 -= top; + bb.y2 += bottom; + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + return bb; +}; + +// assign the values of bb2 into bb1 +var assignBoundingBox = function assignBoundingBox(bb1, bb2) { + bb1.x1 = bb2.x1; + bb1.y1 = bb2.y1; + bb1.x2 = bb2.x2; + bb1.y2 = bb2.y2; + bb1.w = bb1.x2 - bb1.x1; + bb1.h = bb1.y2 - bb1.y1; +}; +var boundingBoxesIntersect = function boundingBoxesIntersect(bb1, bb2) { + // case: one bb to right of other + if (bb1.x1 > bb2.x2) { + return false; + } + if (bb2.x1 > bb1.x2) { + return false; + } + + // case: one bb to left of other + if (bb1.x2 < bb2.x1) { + return false; + } + if (bb2.x2 < bb1.x1) { + return false; + } + + // case: one bb above other + if (bb1.y2 < bb2.y1) { + return false; + } + if (bb2.y2 < bb1.y1) { + return false; + } + + // case: one bb below other + if (bb1.y1 > bb2.y2) { + return false; + } + if (bb2.y1 > bb1.y2) { + return false; + } + + // otherwise, must have some overlap + return true; +}; +var inBoundingBox = function inBoundingBox(bb, x, y) { + return bb.x1 <= x && x <= bb.x2 && bb.y1 <= y && y <= bb.y2; +}; +var pointInBoundingBox = function pointInBoundingBox(bb, pt) { + return inBoundingBox(bb, pt.x, pt.y); +}; +var boundingBoxInBoundingBox = function boundingBoxInBoundingBox(bb1, bb2) { + return inBoundingBox(bb1, bb2.x1, bb2.y1) && inBoundingBox(bb1, bb2.x2, bb2.y2); +}; +var roundRectangleIntersectLine = function roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding) { + var radius = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 'auto'; + var cornerRadius = radius === 'auto' ? getRoundRectangleRadius(width, height) : radius; + var halfWidth = width / 2; + var halfHeight = height / 2; + cornerRadius = Math.min(cornerRadius, halfWidth, halfHeight); + var doWidth = cornerRadius !== halfWidth, + doHeight = cornerRadius !== halfHeight; + + // Check intersections with straight line segments + var straightLineIntersections; + + // Top segment, left to right + if (doWidth) { + var topStartX = nodeX - halfWidth + cornerRadius - padding; + var topStartY = nodeY - halfHeight - padding; + var topEndX = nodeX + halfWidth - cornerRadius + padding; + var topEndY = topStartY; + straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false); + if (straightLineIntersections.length > 0) { + return straightLineIntersections; + } + } + + // Right segment, top to bottom + if (doHeight) { + var rightStartX = nodeX + halfWidth + padding; + var rightStartY = nodeY - halfHeight + cornerRadius - padding; + var rightEndX = rightStartX; + var rightEndY = nodeY + halfHeight - cornerRadius + padding; + straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, rightStartX, rightStartY, rightEndX, rightEndY, false); + if (straightLineIntersections.length > 0) { + return straightLineIntersections; + } + } + + // Bottom segment, left to right + if (doWidth) { + var bottomStartX = nodeX - halfWidth + cornerRadius - padding; + var bottomStartY = nodeY + halfHeight + padding; + var bottomEndX = nodeX + halfWidth - cornerRadius + padding; + var bottomEndY = bottomStartY; + straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, bottomStartX, bottomStartY, bottomEndX, bottomEndY, false); + if (straightLineIntersections.length > 0) { + return straightLineIntersections; + } + } + + // Left segment, top to bottom + if (doHeight) { + var leftStartX = nodeX - halfWidth - padding; + var leftStartY = nodeY - halfHeight + cornerRadius - padding; + var leftEndX = leftStartX; + var leftEndY = nodeY + halfHeight - cornerRadius + padding; + straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, leftStartX, leftStartY, leftEndX, leftEndY, false); + if (straightLineIntersections.length > 0) { + return straightLineIntersections; + } + } + + // Check intersections with arc segments + var arcIntersections; + + // Top Left + { + var topLeftCenterX = nodeX - halfWidth + cornerRadius; + var topLeftCenterY = nodeY - halfHeight + cornerRadius; + arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, topLeftCenterX, topLeftCenterY, cornerRadius + padding); + + // Ensure the intersection is on the desired quarter of the circle + if (arcIntersections.length > 0 && arcIntersections[0] <= topLeftCenterX && arcIntersections[1] <= topLeftCenterY) { + return [arcIntersections[0], arcIntersections[1]]; + } + } + + // Top Right + { + var topRightCenterX = nodeX + halfWidth - cornerRadius; + var topRightCenterY = nodeY - halfHeight + cornerRadius; + arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, topRightCenterX, topRightCenterY, cornerRadius + padding); + + // Ensure the intersection is on the desired quarter of the circle + if (arcIntersections.length > 0 && arcIntersections[0] >= topRightCenterX && arcIntersections[1] <= topRightCenterY) { + return [arcIntersections[0], arcIntersections[1]]; + } + } + + // Bottom Right + { + var bottomRightCenterX = nodeX + halfWidth - cornerRadius; + var bottomRightCenterY = nodeY + halfHeight - cornerRadius; + arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, bottomRightCenterX, bottomRightCenterY, cornerRadius + padding); + + // Ensure the intersection is on the desired quarter of the circle + if (arcIntersections.length > 0 && arcIntersections[0] >= bottomRightCenterX && arcIntersections[1] >= bottomRightCenterY) { + return [arcIntersections[0], arcIntersections[1]]; + } + } + + // Bottom Left + { + var bottomLeftCenterX = nodeX - halfWidth + cornerRadius; + var bottomLeftCenterY = nodeY + halfHeight - cornerRadius; + arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, bottomLeftCenterX, bottomLeftCenterY, cornerRadius + padding); + + // Ensure the intersection is on the desired quarter of the circle + if (arcIntersections.length > 0 && arcIntersections[0] <= bottomLeftCenterX && arcIntersections[1] >= bottomLeftCenterY) { + return [arcIntersections[0], arcIntersections[1]]; + } + } + return []; // if nothing +}; + +var inLineVicinity = function inLineVicinity(x, y, lx1, ly1, lx2, ly2, tolerance) { + var t = tolerance; + var x1 = Math.min(lx1, lx2); + var x2 = Math.max(lx1, lx2); + var y1 = Math.min(ly1, ly2); + var y2 = Math.max(ly1, ly2); + return x1 - t <= x && x <= x2 + t && y1 - t <= y && y <= y2 + t; +}; +var inBezierVicinity = function inBezierVicinity(x, y, x1, y1, x2, y2, x3, y3, tolerance) { + var bb = { + x1: Math.min(x1, x3, x2) - tolerance, + x2: Math.max(x1, x3, x2) + tolerance, + y1: Math.min(y1, y3, y2) - tolerance, + y2: Math.max(y1, y3, y2) + tolerance + }; + + // if outside the rough bounding box for the bezier, then it can't be a hit + if (x < bb.x1 || x > bb.x2 || y < bb.y1 || y > bb.y2) { + // console.log('bezier out of rough bb') + return false; + } else { + // console.log('do more expensive check'); + return true; + } +}; +var solveQuadratic = function solveQuadratic(a, b, c, val) { + c -= val; + var r = b * b - 4 * a * c; + if (r < 0) { + return []; + } + var sqrtR = Math.sqrt(r); + var denom = 2 * a; + var root1 = (-b + sqrtR) / denom; + var root2 = (-b - sqrtR) / denom; + return [root1, root2]; +}; +var solveCubic = function solveCubic(a, b, c, d, result) { + // Solves a cubic function, returns root in form [r1, i1, r2, i2, r3, i3], where + // r is the real component, i is the imaginary component + + // An implementation of the Cardano method from the year 1545 + // http://en.wikipedia.org/wiki/Cubic_function#The_nature_of_the_roots + + var epsilon = 0.00001; + + // avoid division by zero while keeping the overall expression close in value + if (a === 0) { + a = epsilon; + } + b /= a; + c /= a; + d /= a; + var discriminant, q, r, dum1, s, t, term1, r13; + q = (3.0 * c - b * b) / 9.0; + r = -(27.0 * d) + b * (9.0 * c - 2.0 * (b * b)); + r /= 54.0; + discriminant = q * q * q + r * r; + result[1] = 0; + term1 = b / 3.0; + if (discriminant > 0) { + s = r + Math.sqrt(discriminant); + s = s < 0 ? -Math.pow(-s, 1.0 / 3.0) : Math.pow(s, 1.0 / 3.0); + t = r - Math.sqrt(discriminant); + t = t < 0 ? -Math.pow(-t, 1.0 / 3.0) : Math.pow(t, 1.0 / 3.0); + result[0] = -term1 + s + t; + term1 += (s + t) / 2.0; + result[4] = result[2] = -term1; + term1 = Math.sqrt(3.0) * (-t + s) / 2; + result[3] = term1; + result[5] = -term1; + return; + } + result[5] = result[3] = 0; + if (discriminant === 0) { + r13 = r < 0 ? -Math.pow(-r, 1.0 / 3.0) : Math.pow(r, 1.0 / 3.0); + result[0] = -term1 + 2.0 * r13; + result[4] = result[2] = -(r13 + term1); + return; + } + q = -q; + dum1 = q * q * q; + dum1 = Math.acos(r / Math.sqrt(dum1)); + r13 = 2.0 * Math.sqrt(q); + result[0] = -term1 + r13 * Math.cos(dum1 / 3.0); + result[2] = -term1 + r13 * Math.cos((dum1 + 2.0 * Math.PI) / 3.0); + result[4] = -term1 + r13 * Math.cos((dum1 + 4.0 * Math.PI) / 3.0); + return; +}; +var sqdistToQuadraticBezier = function sqdistToQuadraticBezier(x, y, x1, y1, x2, y2, x3, y3) { + // Find minimum distance by using the minimum of the distance + // function between the given point and the curve + + // This gives the coefficients of the resulting cubic equation + // whose roots tell us where a possible minimum is + // (Coefficients are divided by 4) + + var a = 1.0 * x1 * x1 - 4 * x1 * x2 + 2 * x1 * x3 + 4 * x2 * x2 - 4 * x2 * x3 + x3 * x3 + y1 * y1 - 4 * y1 * y2 + 2 * y1 * y3 + 4 * y2 * y2 - 4 * y2 * y3 + y3 * y3; + var b = 1.0 * 9 * x1 * x2 - 3 * x1 * x1 - 3 * x1 * x3 - 6 * x2 * x2 + 3 * x2 * x3 + 9 * y1 * y2 - 3 * y1 * y1 - 3 * y1 * y3 - 6 * y2 * y2 + 3 * y2 * y3; + var c = 1.0 * 3 * x1 * x1 - 6 * x1 * x2 + x1 * x3 - x1 * x + 2 * x2 * x2 + 2 * x2 * x - x3 * x + 3 * y1 * y1 - 6 * y1 * y2 + y1 * y3 - y1 * y + 2 * y2 * y2 + 2 * y2 * y - y3 * y; + var d = 1.0 * x1 * x2 - x1 * x1 + x1 * x - x2 * x + y1 * y2 - y1 * y1 + y1 * y - y2 * y; + + // debug("coefficients: " + a / a + ", " + b / a + ", " + c / a + ", " + d / a); + + var roots = []; + + // Use the cubic solving algorithm + solveCubic(a, b, c, d, roots); + var zeroThreshold = 0.0000001; + var params = []; + for (var index = 0; index < 6; index += 2) { + if (Math.abs(roots[index + 1]) < zeroThreshold && roots[index] >= 0 && roots[index] <= 1.0) { + params.push(roots[index]); + } + } + params.push(1.0); + params.push(0.0); + var minDistanceSquared = -1; + var curX, curY, distSquared; + for (var i = 0; i < params.length; i++) { + curX = Math.pow(1.0 - params[i], 2.0) * x1 + 2.0 * (1 - params[i]) * params[i] * x2 + params[i] * params[i] * x3; + curY = Math.pow(1 - params[i], 2.0) * y1 + 2 * (1.0 - params[i]) * params[i] * y2 + params[i] * params[i] * y3; + distSquared = Math.pow(curX - x, 2) + Math.pow(curY - y, 2); + // debug('distance for param ' + params[i] + ": " + Math.sqrt(distSquared)); + if (minDistanceSquared >= 0) { + if (distSquared < minDistanceSquared) { + minDistanceSquared = distSquared; + } + } else { + minDistanceSquared = distSquared; + } + } + return minDistanceSquared; +}; +var sqdistToFiniteLine = function sqdistToFiniteLine(x, y, x1, y1, x2, y2) { + var offset = [x - x1, y - y1]; + var line = [x2 - x1, y2 - y1]; + var lineSq = line[0] * line[0] + line[1] * line[1]; + var hypSq = offset[0] * offset[0] + offset[1] * offset[1]; + var dotProduct = offset[0] * line[0] + offset[1] * line[1]; + var adjSq = dotProduct * dotProduct / lineSq; + if (dotProduct < 0) { + return hypSq; + } + if (adjSq > lineSq) { + return (x - x2) * (x - x2) + (y - y2) * (y - y2); + } + return hypSq - adjSq; +}; +var pointInsidePolygonPoints = function pointInsidePolygonPoints(x, y, points) { + var x1, y1, x2, y2; + var y3; + + // Intersect with vertical line through (x, y) + var up = 0; + // let down = 0; + for (var i = 0; i < points.length / 2; i++) { + x1 = points[i * 2]; + y1 = points[i * 2 + 1]; + if (i + 1 < points.length / 2) { + x2 = points[(i + 1) * 2]; + y2 = points[(i + 1) * 2 + 1]; + } else { + x2 = points[(i + 1 - points.length / 2) * 2]; + y2 = points[(i + 1 - points.length / 2) * 2 + 1]; + } + if (x1 == x && x2 == x) ; else if (x1 >= x && x >= x2 || x1 <= x && x <= x2) { + y3 = (x - x1) / (x2 - x1) * (y2 - y1) + y1; + if (y3 > y) { + up++; + } + + // if( y3 < y ){ + // down++; + // } + } else { + continue; + } + } + if (up % 2 === 0) { + return false; + } else { + return true; + } +}; +var pointInsidePolygon = function pointInsidePolygon(x, y, basePoints, centerX, centerY, width, height, direction, padding) { + var transformedPoints = new Array(basePoints.length); + + // Gives negative angle + var angle; + if (direction[0] != null) { + angle = Math.atan(direction[1] / direction[0]); + if (direction[0] < 0) { + angle = angle + Math.PI / 2; + } else { + angle = -angle - Math.PI / 2; + } + } else { + angle = direction; + } + var cos = Math.cos(-angle); + var sin = Math.sin(-angle); + + // console.log("base: " + basePoints); + for (var i = 0; i < transformedPoints.length / 2; i++) { + transformedPoints[i * 2] = width / 2 * (basePoints[i * 2] * cos - basePoints[i * 2 + 1] * sin); + transformedPoints[i * 2 + 1] = height / 2 * (basePoints[i * 2 + 1] * cos + basePoints[i * 2] * sin); + transformedPoints[i * 2] += centerX; + transformedPoints[i * 2 + 1] += centerY; + } + var points; + if (padding > 0) { + var expandedLineSet = expandPolygon(transformedPoints, -padding); + points = joinLines(expandedLineSet); + } else { + points = transformedPoints; + } + return pointInsidePolygonPoints(x, y, points); +}; +var pointInsideRoundPolygon = function pointInsideRoundPolygon(x, y, basePoints, centerX, centerY, width, height, corners) { + var cutPolygonPoints = new Array(basePoints.length * 2); + for (var i = 0; i < corners.length; i++) { + var corner = corners[i]; + cutPolygonPoints[i * 4 + 0] = corner.startX; + cutPolygonPoints[i * 4 + 1] = corner.startY; + cutPolygonPoints[i * 4 + 2] = corner.stopX; + cutPolygonPoints[i * 4 + 3] = corner.stopY; + var squaredDistance = Math.pow(corner.cx - x, 2) + Math.pow(corner.cy - y, 2); + if (squaredDistance <= Math.pow(corner.radius, 2)) { + return true; + } + } + return pointInsidePolygonPoints(x, y, cutPolygonPoints); +}; +var joinLines = function joinLines(lineSet) { + var vertices = new Array(lineSet.length / 2); + var currentLineStartX, currentLineStartY, currentLineEndX, currentLineEndY; + var nextLineStartX, nextLineStartY, nextLineEndX, nextLineEndY; + for (var i = 0; i < lineSet.length / 4; i++) { + currentLineStartX = lineSet[i * 4]; + currentLineStartY = lineSet[i * 4 + 1]; + currentLineEndX = lineSet[i * 4 + 2]; + currentLineEndY = lineSet[i * 4 + 3]; + if (i < lineSet.length / 4 - 1) { + nextLineStartX = lineSet[(i + 1) * 4]; + nextLineStartY = lineSet[(i + 1) * 4 + 1]; + nextLineEndX = lineSet[(i + 1) * 4 + 2]; + nextLineEndY = lineSet[(i + 1) * 4 + 3]; + } else { + nextLineStartX = lineSet[0]; + nextLineStartY = lineSet[1]; + nextLineEndX = lineSet[2]; + nextLineEndY = lineSet[3]; + } + var intersection = finiteLinesIntersect(currentLineStartX, currentLineStartY, currentLineEndX, currentLineEndY, nextLineStartX, nextLineStartY, nextLineEndX, nextLineEndY, true); + vertices[i * 2] = intersection[0]; + vertices[i * 2 + 1] = intersection[1]; + } + return vertices; +}; +var expandPolygon = function expandPolygon(points, pad) { + var expandedLineSet = new Array(points.length * 2); + var currentPointX, currentPointY, nextPointX, nextPointY; + for (var i = 0; i < points.length / 2; i++) { + currentPointX = points[i * 2]; + currentPointY = points[i * 2 + 1]; + if (i < points.length / 2 - 1) { + nextPointX = points[(i + 1) * 2]; + nextPointY = points[(i + 1) * 2 + 1]; + } else { + nextPointX = points[0]; + nextPointY = points[1]; + } + + // Current line: [currentPointX, currentPointY] to [nextPointX, nextPointY] + + // Assume CCW polygon winding + + var offsetX = nextPointY - currentPointY; + var offsetY = -(nextPointX - currentPointX); + + // Normalize + var offsetLength = Math.sqrt(offsetX * offsetX + offsetY * offsetY); + var normalizedOffsetX = offsetX / offsetLength; + var normalizedOffsetY = offsetY / offsetLength; + expandedLineSet[i * 4] = currentPointX + normalizedOffsetX * pad; + expandedLineSet[i * 4 + 1] = currentPointY + normalizedOffsetY * pad; + expandedLineSet[i * 4 + 2] = nextPointX + normalizedOffsetX * pad; + expandedLineSet[i * 4 + 3] = nextPointY + normalizedOffsetY * pad; + } + return expandedLineSet; +}; +var intersectLineEllipse = function intersectLineEllipse(x, y, centerX, centerY, ellipseWradius, ellipseHradius) { + var dispX = centerX - x; + var dispY = centerY - y; + dispX /= ellipseWradius; + dispY /= ellipseHradius; + var len = Math.sqrt(dispX * dispX + dispY * dispY); + var newLength = len - 1; + if (newLength < 0) { + return []; + } + var lenProportion = newLength / len; + return [(centerX - x) * lenProportion + x, (centerY - y) * lenProportion + y]; +}; +var checkInEllipse = function checkInEllipse(x, y, width, height, centerX, centerY, padding) { + x -= centerX; + y -= centerY; + x /= width / 2 + padding; + y /= height / 2 + padding; + return x * x + y * y <= 1; +}; + +// Returns intersections of increasing distance from line's start point +var intersectLineCircle = function intersectLineCircle(x1, y1, x2, y2, centerX, centerY, radius) { + // Calculate d, direction vector of line + var d = [x2 - x1, y2 - y1]; // Direction vector of line + var f = [x1 - centerX, y1 - centerY]; + var a = d[0] * d[0] + d[1] * d[1]; + var b = 2 * (f[0] * d[0] + f[1] * d[1]); + var c = f[0] * f[0] + f[1] * f[1] - radius * radius; + var discriminant = b * b - 4 * a * c; + if (discriminant < 0) { + return []; + } + var t1 = (-b + Math.sqrt(discriminant)) / (2 * a); + var t2 = (-b - Math.sqrt(discriminant)) / (2 * a); + var tMin = Math.min(t1, t2); + var tMax = Math.max(t1, t2); + var inRangeParams = []; + if (tMin >= 0 && tMin <= 1) { + inRangeParams.push(tMin); + } + if (tMax >= 0 && tMax <= 1) { + inRangeParams.push(tMax); + } + if (inRangeParams.length === 0) { + return []; + } + var nearIntersectionX = inRangeParams[0] * d[0] + x1; + var nearIntersectionY = inRangeParams[0] * d[1] + y1; + if (inRangeParams.length > 1) { + if (inRangeParams[0] == inRangeParams[1]) { + return [nearIntersectionX, nearIntersectionY]; + } else { + var farIntersectionX = inRangeParams[1] * d[0] + x1; + var farIntersectionY = inRangeParams[1] * d[1] + y1; + return [nearIntersectionX, nearIntersectionY, farIntersectionX, farIntersectionY]; + } + } else { + return [nearIntersectionX, nearIntersectionY]; + } +}; +var midOfThree = function midOfThree(a, b, c) { + if (b <= a && a <= c || c <= a && a <= b) { + return a; + } else if (a <= b && b <= c || c <= b && b <= a) { + return b; + } else { + return c; + } +}; + +// (x1,y1)=>(x2,y2) intersect with (x3,y3)=>(x4,y4) +var finiteLinesIntersect = function finiteLinesIntersect(x1, y1, x2, y2, x3, y3, x4, y4, infiniteLines) { + var dx13 = x1 - x3; + var dx21 = x2 - x1; + var dx43 = x4 - x3; + var dy13 = y1 - y3; + var dy21 = y2 - y1; + var dy43 = y4 - y3; + var ua_t = dx43 * dy13 - dy43 * dx13; + var ub_t = dx21 * dy13 - dy21 * dx13; + var u_b = dy43 * dx21 - dx43 * dy21; + if (u_b !== 0) { + var ua = ua_t / u_b; + var ub = ub_t / u_b; + var flptThreshold = 0.001; + var _min = 0 - flptThreshold; + var _max = 1 + flptThreshold; + if (_min <= ua && ua <= _max && _min <= ub && ub <= _max) { + return [x1 + ua * dx21, y1 + ua * dy21]; + } else { + if (!infiniteLines) { + return []; + } else { + return [x1 + ua * dx21, y1 + ua * dy21]; + } + } + } else { + if (ua_t === 0 || ub_t === 0) { + // Parallel, coincident lines. Check if overlap + + // Check endpoint of second line + if (midOfThree(x1, x2, x4) === x4) { + return [x4, y4]; + } + + // Check start point of second line + if (midOfThree(x1, x2, x3) === x3) { + return [x3, y3]; + } + + // Endpoint of first line + if (midOfThree(x3, x4, x2) === x2) { + return [x2, y2]; + } + return []; + } else { + // Parallel, non-coincident + return []; + } + } +}; + +// math.polygonIntersectLine( x, y, basePoints, centerX, centerY, width, height, padding ) +// intersect a node polygon (pts transformed) +// +// math.polygonIntersectLine( x, y, basePoints, centerX, centerY ) +// intersect the points (no transform) +var polygonIntersectLine = function polygonIntersectLine(x, y, basePoints, centerX, centerY, width, height, padding) { + var intersections = []; + var intersection; + var transformedPoints = new Array(basePoints.length); + var doTransform = true; + if (width == null) { + doTransform = false; + } + var points; + if (doTransform) { + for (var i = 0; i < transformedPoints.length / 2; i++) { + transformedPoints[i * 2] = basePoints[i * 2] * width + centerX; + transformedPoints[i * 2 + 1] = basePoints[i * 2 + 1] * height + centerY; + } + if (padding > 0) { + var expandedLineSet = expandPolygon(transformedPoints, -padding); + points = joinLines(expandedLineSet); + } else { + points = transformedPoints; + } + } else { + points = basePoints; + } + var currentX, currentY, nextX, nextY; + for (var _i2 = 0; _i2 < points.length / 2; _i2++) { + currentX = points[_i2 * 2]; + currentY = points[_i2 * 2 + 1]; + if (_i2 < points.length / 2 - 1) { + nextX = points[(_i2 + 1) * 2]; + nextY = points[(_i2 + 1) * 2 + 1]; + } else { + nextX = points[0]; + nextY = points[1]; + } + intersection = finiteLinesIntersect(x, y, centerX, centerY, currentX, currentY, nextX, nextY); + if (intersection.length !== 0) { + intersections.push(intersection[0], intersection[1]); + } + } + return intersections; +}; +var roundPolygonIntersectLine = function roundPolygonIntersectLine(x, y, basePoints, centerX, centerY, width, height, padding, corners) { + var intersections = []; + var intersection; + var lines = new Array(basePoints.length * 2); + corners.forEach(function (corner, i) { + if (i === 0) { + lines[lines.length - 2] = corner.startX; + lines[lines.length - 1] = corner.startY; + } else { + lines[i * 4 - 2] = corner.startX; + lines[i * 4 - 1] = corner.startY; + } + lines[i * 4] = corner.stopX; + lines[i * 4 + 1] = corner.stopY; + intersection = intersectLineCircle(x, y, centerX, centerY, corner.cx, corner.cy, corner.radius); + if (intersection.length !== 0) { + intersections.push(intersection[0], intersection[1]); + } + }); + for (var i = 0; i < lines.length / 4; i++) { + intersection = finiteLinesIntersect(x, y, centerX, centerY, lines[i * 4], lines[i * 4 + 1], lines[i * 4 + 2], lines[i * 4 + 3], false); + if (intersection.length !== 0) { + intersections.push(intersection[0], intersection[1]); + } + } + if (intersections.length > 2) { + var lowestIntersection = [intersections[0], intersections[1]]; + var lowestSquaredDistance = Math.pow(lowestIntersection[0] - x, 2) + Math.pow(lowestIntersection[1] - y, 2); + for (var _i3 = 1; _i3 < intersections.length / 2; _i3++) { + var squaredDistance = Math.pow(intersections[_i3 * 2] - x, 2) + Math.pow(intersections[_i3 * 2 + 1] - y, 2); + if (squaredDistance <= lowestSquaredDistance) { + lowestIntersection[0] = intersections[_i3 * 2]; + lowestIntersection[1] = intersections[_i3 * 2 + 1]; + lowestSquaredDistance = squaredDistance; + } + } + return lowestIntersection; + } + return intersections; +}; +var shortenIntersection = function shortenIntersection(intersection, offset, amount) { + var disp = [intersection[0] - offset[0], intersection[1] - offset[1]]; + var length = Math.sqrt(disp[0] * disp[0] + disp[1] * disp[1]); + var lenRatio = (length - amount) / length; + if (lenRatio < 0) { + lenRatio = 0.00001; + } + return [offset[0] + lenRatio * disp[0], offset[1] + lenRatio * disp[1]]; +}; +var generateUnitNgonPointsFitToSquare = function generateUnitNgonPointsFitToSquare(sides, rotationRadians) { + var points = generateUnitNgonPoints(sides, rotationRadians); + points = fitPolygonToSquare(points); + return points; +}; +var fitPolygonToSquare = function fitPolygonToSquare(points) { + var x, y; + var sides = points.length / 2; + var minX = Infinity, + minY = Infinity, + maxX = -Infinity, + maxY = -Infinity; + for (var i = 0; i < sides; i++) { + x = points[2 * i]; + y = points[2 * i + 1]; + minX = Math.min(minX, x); + maxX = Math.max(maxX, x); + minY = Math.min(minY, y); + maxY = Math.max(maxY, y); + } + + // stretch factors + var sx = 2 / (maxX - minX); + var sy = 2 / (maxY - minY); + for (var _i4 = 0; _i4 < sides; _i4++) { + x = points[2 * _i4] = points[2 * _i4] * sx; + y = points[2 * _i4 + 1] = points[2 * _i4 + 1] * sy; + minX = Math.min(minX, x); + maxX = Math.max(maxX, x); + minY = Math.min(minY, y); + maxY = Math.max(maxY, y); + } + if (minY < -1) { + for (var _i5 = 0; _i5 < sides; _i5++) { + y = points[2 * _i5 + 1] = points[2 * _i5 + 1] + (-1 - minY); + } + } + return points; +}; +var generateUnitNgonPoints = function generateUnitNgonPoints(sides, rotationRadians) { + var increment = 1.0 / sides * 2 * Math.PI; + var startAngle = sides % 2 === 0 ? Math.PI / 2.0 + increment / 2.0 : Math.PI / 2.0; + startAngle += rotationRadians; + var points = new Array(sides * 2); + var currentAngle; + for (var i = 0; i < sides; i++) { + currentAngle = i * increment + startAngle; + points[2 * i] = Math.cos(currentAngle); // x + points[2 * i + 1] = Math.sin(-currentAngle); // y + } + + return points; +}; + +// Set the default radius, unless half of width or height is smaller than default +var getRoundRectangleRadius = function getRoundRectangleRadius(width, height) { + return Math.min(width / 4, height / 4, 8); +}; + +// Set the default radius +var getRoundPolygonRadius = function getRoundPolygonRadius(width, height) { + return Math.min(width / 10, height / 10, 8); +}; +var getCutRectangleCornerLength = function getCutRectangleCornerLength() { + return 8; +}; +var bezierPtsToQuadCoeff = function bezierPtsToQuadCoeff(p0, p1, p2) { + return [p0 - 2 * p1 + p2, 2 * (p1 - p0), p0]; +}; + +// get curve width, height, and control point position offsets as a percentage of node height / width +var getBarrelCurveConstants = function getBarrelCurveConstants(width, height) { + return { + heightOffset: Math.min(15, 0.05 * height), + widthOffset: Math.min(100, 0.25 * width), + ctrlPtOffsetPct: 0.05 + }; +}; + +var pageRankDefaults = defaults$g({ + dampingFactor: 0.8, + precision: 0.000001, + iterations: 200, + weight: function weight(edge) { + return 1; + } +}); +var elesfn$o = { + pageRank: function pageRank(options) { + var _pageRankDefaults = pageRankDefaults(options), + dampingFactor = _pageRankDefaults.dampingFactor, + precision = _pageRankDefaults.precision, + iterations = _pageRankDefaults.iterations, + weight = _pageRankDefaults.weight; + var cy = this._private.cy; + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + var numNodes = nodes.length; + var numNodesSqd = numNodes * numNodes; + var numEdges = edges.length; + + // Construct transposed adjacency matrix + // First lets have a zeroed matrix of the right size + // We'll also keep track of the sum of each column + var matrix = new Array(numNodesSqd); + var columnSum = new Array(numNodes); + var additionalProb = (1 - dampingFactor) / numNodes; + + // Create null matrix + for (var i = 0; i < numNodes; i++) { + for (var j = 0; j < numNodes; j++) { + var n = i * numNodes + j; + matrix[n] = 0; + } + columnSum[i] = 0; + } + + // Now, process edges + for (var _i = 0; _i < numEdges; _i++) { + var edge = edges[_i]; + var srcId = edge.data('source'); + var tgtId = edge.data('target'); + + // Don't include loops in the matrix + if (srcId === tgtId) { + continue; + } + var s = nodes.indexOfId(srcId); + var t = nodes.indexOfId(tgtId); + var w = weight(edge); + var _n = t * numNodes + s; + + // Update matrix + matrix[_n] += w; + + // Update column sum + columnSum[s] += w; + } + + // Add additional probability based on damping factor + // Also, take into account columns that have sum = 0 + var p = 1.0 / numNodes + additionalProb; // Shorthand + + // Traverse matrix, column by column + for (var _j = 0; _j < numNodes; _j++) { + if (columnSum[_j] === 0) { + // No 'links' out from node jth, assume equal probability for each possible node + for (var _i2 = 0; _i2 < numNodes; _i2++) { + var _n2 = _i2 * numNodes + _j; + matrix[_n2] = p; + } + } else { + // Node jth has outgoing link, compute normalized probabilities + for (var _i3 = 0; _i3 < numNodes; _i3++) { + var _n3 = _i3 * numNodes + _j; + matrix[_n3] = matrix[_n3] / columnSum[_j] + additionalProb; + } + } + } + + // Compute dominant eigenvector using power method + var eigenvector = new Array(numNodes); + var temp = new Array(numNodes); + var previous; + + // Start with a vector of all 1's + // Also, initialize a null vector which will be used as shorthand + for (var _i4 = 0; _i4 < numNodes; _i4++) { + eigenvector[_i4] = 1; + } + for (var iter = 0; iter < iterations; iter++) { + // Temp array with all 0's + for (var _i5 = 0; _i5 < numNodes; _i5++) { + temp[_i5] = 0; + } + + // Multiply matrix with previous result + for (var _i6 = 0; _i6 < numNodes; _i6++) { + for (var _j2 = 0; _j2 < numNodes; _j2++) { + var _n4 = _i6 * numNodes + _j2; + temp[_i6] += matrix[_n4] * eigenvector[_j2]; + } + } + inPlaceSumNormalize(temp); + previous = eigenvector; + eigenvector = temp; + temp = previous; + var diff = 0; + // Compute difference (squared module) of both vectors + for (var _i7 = 0; _i7 < numNodes; _i7++) { + var delta = previous[_i7] - eigenvector[_i7]; + diff += delta * delta; + } + + // If difference is less than the desired threshold, stop iterating + if (diff < precision) { + break; + } + } + + // Construct result + var res = { + rank: function rank(node) { + node = cy.collection(node)[0]; + return eigenvector[nodes.indexOf(node)]; + } + }; + return res; + } // pageRank +}; // elesfn + +var defaults$f = defaults$g({ + root: null, + weight: function weight(edge) { + return 1; + }, + directed: false, + alpha: 0 +}); +var elesfn$n = { + degreeCentralityNormalized: function degreeCentralityNormalized(options) { + options = defaults$f(options); + var cy = this.cy(); + var nodes = this.nodes(); + var numNodes = nodes.length; + if (!options.directed) { + var degrees = {}; + var maxDegree = 0; + for (var i = 0; i < numNodes; i++) { + var node = nodes[i]; + + // add current node to the current options object and call degreeCentrality + options.root = node; + var currDegree = this.degreeCentrality(options); + if (maxDegree < currDegree.degree) { + maxDegree = currDegree.degree; + } + degrees[node.id()] = currDegree.degree; + } + return { + degree: function degree(node) { + if (maxDegree === 0) { + return 0; + } + if (string(node)) { + // from is a selector string + node = cy.filter(node); + } + return degrees[node.id()] / maxDegree; + } + }; + } else { + var indegrees = {}; + var outdegrees = {}; + var maxIndegree = 0; + var maxOutdegree = 0; + for (var _i = 0; _i < numNodes; _i++) { + var _node = nodes[_i]; + var id = _node.id(); + + // add current node to the current options object and call degreeCentrality + options.root = _node; + var _currDegree = this.degreeCentrality(options); + if (maxIndegree < _currDegree.indegree) maxIndegree = _currDegree.indegree; + if (maxOutdegree < _currDegree.outdegree) maxOutdegree = _currDegree.outdegree; + indegrees[id] = _currDegree.indegree; + outdegrees[id] = _currDegree.outdegree; + } + return { + indegree: function indegree(node) { + if (maxIndegree == 0) { + return 0; + } + if (string(node)) { + // from is a selector string + node = cy.filter(node); + } + return indegrees[node.id()] / maxIndegree; + }, + outdegree: function outdegree(node) { + if (maxOutdegree === 0) { + return 0; + } + if (string(node)) { + // from is a selector string + node = cy.filter(node); + } + return outdegrees[node.id()] / maxOutdegree; + } + }; + } + }, + // degreeCentralityNormalized + + // Implemented from the algorithm in Opsahl's paper + // "Node centrality in weighted networks: Generalizing degree and shortest paths" + // check the heading 2 "Degree" + degreeCentrality: function degreeCentrality(options) { + options = defaults$f(options); + var cy = this.cy(); + var callingEles = this; + var _options = options, + root = _options.root, + weight = _options.weight, + directed = _options.directed, + alpha = _options.alpha; + root = cy.collection(root)[0]; + if (!directed) { + var connEdges = root.connectedEdges().intersection(callingEles); + var k = connEdges.length; + var s = 0; + + // Now, sum edge weights + for (var i = 0; i < connEdges.length; i++) { + s += weight(connEdges[i]); + } + return { + degree: Math.pow(k, 1 - alpha) * Math.pow(s, alpha) + }; + } else { + var edges = root.connectedEdges(); + var incoming = edges.filter(function (edge) { + return edge.target().same(root) && callingEles.has(edge); + }); + var outgoing = edges.filter(function (edge) { + return edge.source().same(root) && callingEles.has(edge); + }); + var k_in = incoming.length; + var k_out = outgoing.length; + var s_in = 0; + var s_out = 0; + + // Now, sum incoming edge weights + for (var _i2 = 0; _i2 < incoming.length; _i2++) { + s_in += weight(incoming[_i2]); + } + + // Now, sum outgoing edge weights + for (var _i3 = 0; _i3 < outgoing.length; _i3++) { + s_out += weight(outgoing[_i3]); + } + return { + indegree: Math.pow(k_in, 1 - alpha) * Math.pow(s_in, alpha), + outdegree: Math.pow(k_out, 1 - alpha) * Math.pow(s_out, alpha) + }; + } + } // degreeCentrality +}; // elesfn + +// nice, short mathematical alias +elesfn$n.dc = elesfn$n.degreeCentrality; +elesfn$n.dcn = elesfn$n.degreeCentralityNormalised = elesfn$n.degreeCentralityNormalized; + +var defaults$e = defaults$g({ + harmonic: true, + weight: function weight() { + return 1; + }, + directed: false, + root: null +}); +var elesfn$m = { + closenessCentralityNormalized: function closenessCentralityNormalized(options) { + var _defaults = defaults$e(options), + harmonic = _defaults.harmonic, + weight = _defaults.weight, + directed = _defaults.directed; + var cy = this.cy(); + var closenesses = {}; + var maxCloseness = 0; + var nodes = this.nodes(); + var fw = this.floydWarshall({ + weight: weight, + directed: directed + }); + + // Compute closeness for every node and find the maximum closeness + for (var i = 0; i < nodes.length; i++) { + var currCloseness = 0; + var node_i = nodes[i]; + for (var j = 0; j < nodes.length; j++) { + if (i !== j) { + var d = fw.distance(node_i, nodes[j]); + if (harmonic) { + currCloseness += 1 / d; + } else { + currCloseness += d; + } + } + } + if (!harmonic) { + currCloseness = 1 / currCloseness; + } + if (maxCloseness < currCloseness) { + maxCloseness = currCloseness; + } + closenesses[node_i.id()] = currCloseness; + } + return { + closeness: function closeness(node) { + if (maxCloseness == 0) { + return 0; + } + if (string(node)) { + // from is a selector string + node = cy.filter(node)[0].id(); + } else { + // from is a node + node = node.id(); + } + return closenesses[node] / maxCloseness; + } + }; + }, + // Implemented from pseudocode from wikipedia + closenessCentrality: function closenessCentrality(options) { + var _defaults2 = defaults$e(options), + root = _defaults2.root, + weight = _defaults2.weight, + directed = _defaults2.directed, + harmonic = _defaults2.harmonic; + root = this.filter(root)[0]; + + // we need distance from this node to every other node + var dijkstra = this.dijkstra({ + root: root, + weight: weight, + directed: directed + }); + var totalDistance = 0; + var nodes = this.nodes(); + for (var i = 0; i < nodes.length; i++) { + var n = nodes[i]; + if (!n.same(root)) { + var d = dijkstra.distanceTo(n); + if (harmonic) { + totalDistance += 1 / d; + } else { + totalDistance += d; + } + } + } + return harmonic ? totalDistance : 1 / totalDistance; + } // closenessCentrality +}; // elesfn + +// nice, short mathematical alias +elesfn$m.cc = elesfn$m.closenessCentrality; +elesfn$m.ccn = elesfn$m.closenessCentralityNormalised = elesfn$m.closenessCentralityNormalized; + +var defaults$d = defaults$g({ + weight: null, + directed: false +}); +var elesfn$l = { + // Implemented from the algorithm in the paper "On Variants of Shortest-Path Betweenness Centrality and their Generic Computation" by Ulrik Brandes + betweennessCentrality: function betweennessCentrality(options) { + var _defaults = defaults$d(options), + directed = _defaults.directed, + weight = _defaults.weight; + var weighted = weight != null; + var cy = this.cy(); + + // starting + var V = this.nodes(); + var A = {}; + var _C = {}; + var max = 0; + var C = { + set: function set(key, val) { + _C[key] = val; + if (val > max) { + max = val; + } + }, + get: function get(key) { + return _C[key]; + } + }; + + // A contains the neighborhoods of every node + for (var i = 0; i < V.length; i++) { + var v = V[i]; + var vid = v.id(); + if (directed) { + A[vid] = v.outgoers().nodes(); // get outgoers of every node + } else { + A[vid] = v.openNeighborhood().nodes(); // get neighbors of every node + } + + C.set(vid, 0); + } + var _loop = function _loop(s) { + var sid = V[s].id(); + var S = []; // stack + var P = {}; + var g = {}; + var d = {}; + var Q = new heap(function (a, b) { + return d[a] - d[b]; + }); // queue + + // init dictionaries + for (var _i = 0; _i < V.length; _i++) { + var _vid = V[_i].id(); + P[_vid] = []; + g[_vid] = 0; + d[_vid] = Infinity; + } + g[sid] = 1; // sigma + d[sid] = 0; // distance to s + + Q.push(sid); + while (!Q.empty()) { + var _v = Q.pop(); + S.push(_v); + if (weighted) { + for (var j = 0; j < A[_v].length; j++) { + var w = A[_v][j]; + var vEle = cy.getElementById(_v); + var edge = void 0; + if (vEle.edgesTo(w).length > 0) { + edge = vEle.edgesTo(w)[0]; + } else { + edge = w.edgesTo(vEle)[0]; + } + var edgeWeight = weight(edge); + w = w.id(); + if (d[w] > d[_v] + edgeWeight) { + d[w] = d[_v] + edgeWeight; + if (Q.nodes.indexOf(w) < 0) { + //if w is not in Q + Q.push(w); + } else { + // update position if w is in Q + Q.updateItem(w); + } + g[w] = 0; + P[w] = []; + } + if (d[w] == d[_v] + edgeWeight) { + g[w] = g[w] + g[_v]; + P[w].push(_v); + } + } + } else { + for (var _j = 0; _j < A[_v].length; _j++) { + var _w = A[_v][_j].id(); + if (d[_w] == Infinity) { + Q.push(_w); + d[_w] = d[_v] + 1; + } + if (d[_w] == d[_v] + 1) { + g[_w] = g[_w] + g[_v]; + P[_w].push(_v); + } + } + } + } + var e = {}; + for (var _i2 = 0; _i2 < V.length; _i2++) { + e[V[_i2].id()] = 0; + } + while (S.length > 0) { + var _w2 = S.pop(); + for (var _j2 = 0; _j2 < P[_w2].length; _j2++) { + var _v2 = P[_w2][_j2]; + e[_v2] = e[_v2] + g[_v2] / g[_w2] * (1 + e[_w2]); + } + if (_w2 != V[s].id()) { + C.set(_w2, C.get(_w2) + e[_w2]); + } + } + }; + for (var s = 0; s < V.length; s++) { + _loop(s); + } + var ret = { + betweenness: function betweenness(node) { + var id = cy.collection(node).id(); + return C.get(id); + }, + betweennessNormalized: function betweennessNormalized(node) { + if (max == 0) { + return 0; + } + var id = cy.collection(node).id(); + return C.get(id) / max; + } + }; + + // alias + ret.betweennessNormalised = ret.betweennessNormalized; + return ret; + } // betweennessCentrality +}; // elesfn + +// nice, short mathematical alias +elesfn$l.bc = elesfn$l.betweennessCentrality; + +// Implemented by Zoe Xi @zoexi for GSOC 2016 + +/* eslint-disable no-unused-vars */ +var defaults$c = defaults$g({ + expandFactor: 2, + // affects time of computation and cluster granularity to some extent: M * M + inflateFactor: 2, + // affects cluster granularity (the greater the value, the more clusters): M(i,j) / E(j) + multFactor: 1, + // optional self loops for each node. Use a neutral value to improve cluster computations. + maxIterations: 20, + // maximum number of iterations of the MCL algorithm in a single run + attributes: [ + // attributes/features used to group nodes, ie. similarity values between nodes + function (edge) { + return 1; + }] +}); +/* eslint-enable */ + +var setOptions$3 = function setOptions(options) { + return defaults$c(options); +}; +/* eslint-enable */ + +var getSimilarity$1 = function getSimilarity(edge, attributes) { + var total = 0; + for (var i = 0; i < attributes.length; i++) { + total += attributes[i](edge); + } + return total; +}; +var addLoops = function addLoops(M, n, val) { + for (var i = 0; i < n; i++) { + M[i * n + i] = val; + } +}; +var normalize = function normalize(M, n) { + var sum; + for (var col = 0; col < n; col++) { + sum = 0; + for (var row = 0; row < n; row++) { + sum += M[row * n + col]; + } + for (var _row = 0; _row < n; _row++) { + M[_row * n + col] = M[_row * n + col] / sum; + } + } +}; + +// TODO: blocked matrix multiplication? +var mmult = function mmult(A, B, n) { + var C = new Array(n * n); + for (var i = 0; i < n; i++) { + for (var j = 0; j < n; j++) { + C[i * n + j] = 0; + } + for (var k = 0; k < n; k++) { + for (var _j = 0; _j < n; _j++) { + C[i * n + _j] += A[i * n + k] * B[k * n + _j]; + } + } + } + return C; +}; +var expand = function expand(M, n, expandFactor /** power **/) { + var _M = M.slice(0); + for (var p = 1; p < expandFactor; p++) { + M = mmult(M, _M, n); + } + return M; +}; +var inflate = function inflate(M, n, inflateFactor /** r **/) { + var _M = new Array(n * n); + + // M(i,j) ^ inflatePower + for (var i = 0; i < n * n; i++) { + _M[i] = Math.pow(M[i], inflateFactor); + } + normalize(_M, n); + return _M; +}; +var hasConverged = function hasConverged(M, _M, n2, roundFactor) { + // Check that both matrices have the same elements (i,j) + for (var i = 0; i < n2; i++) { + var v1 = Math.round(M[i] * Math.pow(10, roundFactor)) / Math.pow(10, roundFactor); // truncate to 'roundFactor' decimal places + var v2 = Math.round(_M[i] * Math.pow(10, roundFactor)) / Math.pow(10, roundFactor); + if (v1 !== v2) { + return false; + } + } + return true; +}; +var assign$2 = function assign(M, n, nodes, cy) { + var clusters = []; + for (var i = 0; i < n; i++) { + var cluster = []; + for (var j = 0; j < n; j++) { + // Row-wise attractors and elements that they attract belong in same cluster + if (Math.round(M[i * n + j] * 1000) / 1000 > 0) { + cluster.push(nodes[j]); + } + } + if (cluster.length !== 0) { + clusters.push(cy.collection(cluster)); + } + } + return clusters; +}; +var isDuplicate = function isDuplicate(c1, c2) { + for (var i = 0; i < c1.length; i++) { + if (!c2[i] || c1[i].id() !== c2[i].id()) { + return false; + } + } + return true; +}; +var removeDuplicates = function removeDuplicates(clusters) { + for (var i = 0; i < clusters.length; i++) { + for (var j = 0; j < clusters.length; j++) { + if (i != j && isDuplicate(clusters[i], clusters[j])) { + clusters.splice(j, 1); + } + } + } + return clusters; +}; +var markovClustering = function markovClustering(options) { + var nodes = this.nodes(); + var edges = this.edges(); + var cy = this.cy(); + + // Set parameters of algorithm: + var opts = setOptions$3(options); + + // Map each node to its position in node array + var id2position = {}; + for (var i = 0; i < nodes.length; i++) { + id2position[nodes[i].id()] = i; + } + + // Generate stochastic matrix M from input graph G (should be symmetric/undirected) + var n = nodes.length, + n2 = n * n; + var M = new Array(n2), + _M; + for (var _i = 0; _i < n2; _i++) { + M[_i] = 0; + } + for (var e = 0; e < edges.length; e++) { + var edge = edges[e]; + var _i2 = id2position[edge.source().id()]; + var j = id2position[edge.target().id()]; + var sim = getSimilarity$1(edge, opts.attributes); + M[_i2 * n + j] += sim; // G should be symmetric and undirected + M[j * n + _i2] += sim; + } + + // Begin Markov cluster algorithm + + // Step 1: Add self loops to each node, ie. add multFactor to matrix diagonal + addLoops(M, n, opts.multFactor); + + // Step 2: M = normalize( M ); + normalize(M, n); + var isStillMoving = true; + var iterations = 0; + while (isStillMoving && iterations < opts.maxIterations) { + isStillMoving = false; + + // Step 3: + _M = expand(M, n, opts.expandFactor); + + // Step 4: + M = inflate(_M, n, opts.inflateFactor); + + // Step 5: check to see if ~steady state has been reached + if (!hasConverged(M, _M, n2, 4)) { + isStillMoving = true; + } + iterations++; + } + + // Build clusters from matrix + var clusters = assign$2(M, n, nodes, cy); + + // Remove duplicate clusters due to symmetry of graph and M matrix + clusters = removeDuplicates(clusters); + return clusters; +}; +var markovClustering$1 = { + markovClustering: markovClustering, + mcl: markovClustering +}; + +// Common distance metrics for clustering algorithms +var identity = function identity(x) { + return x; +}; +var absDiff = function absDiff(p, q) { + return Math.abs(q - p); +}; +var addAbsDiff = function addAbsDiff(total, p, q) { + return total + absDiff(p, q); +}; +var addSquaredDiff = function addSquaredDiff(total, p, q) { + return total + Math.pow(q - p, 2); +}; +var sqrt = function sqrt(x) { + return Math.sqrt(x); +}; +var maxAbsDiff = function maxAbsDiff(currentMax, p, q) { + return Math.max(currentMax, absDiff(p, q)); +}; +var getDistance = function getDistance(length, getP, getQ, init, visit) { + var post = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : identity; + var ret = init; + var p, q; + for (var dim = 0; dim < length; dim++) { + p = getP(dim); + q = getQ(dim); + ret = visit(ret, p, q); + } + return post(ret); +}; +var distances = { + euclidean: function euclidean(length, getP, getQ) { + if (length >= 2) { + return getDistance(length, getP, getQ, 0, addSquaredDiff, sqrt); + } else { + // for single attr case, more efficient to avoid sqrt + return getDistance(length, getP, getQ, 0, addAbsDiff); + } + }, + squaredEuclidean: function squaredEuclidean(length, getP, getQ) { + return getDistance(length, getP, getQ, 0, addSquaredDiff); + }, + manhattan: function manhattan(length, getP, getQ) { + return getDistance(length, getP, getQ, 0, addAbsDiff); + }, + max: function max(length, getP, getQ) { + return getDistance(length, getP, getQ, -Infinity, maxAbsDiff); + } +}; + +// in case the user accidentally doesn't use camel case +distances['squared-euclidean'] = distances['squaredEuclidean']; +distances['squaredeuclidean'] = distances['squaredEuclidean']; +function clusteringDistance (method, length, getP, getQ, nodeP, nodeQ) { + var impl; + if (fn$6(method)) { + impl = method; + } else { + impl = distances[method] || distances.euclidean; + } + if (length === 0 && fn$6(method)) { + return impl(nodeP, nodeQ); + } else { + return impl(length, getP, getQ, nodeP, nodeQ); + } +} + +var defaults$b = defaults$g({ + k: 2, + m: 2, + sensitivityThreshold: 0.0001, + distance: 'euclidean', + maxIterations: 10, + attributes: [], + testMode: false, + testCentroids: null +}); +var setOptions$2 = function setOptions(options) { + return defaults$b(options); +}; + +var getDist = function getDist(type, node, centroid, attributes, mode) { + var noNodeP = mode !== 'kMedoids'; + var getP = noNodeP ? function (i) { + return centroid[i]; + } : function (i) { + return attributes[i](centroid); + }; + var getQ = function getQ(i) { + return attributes[i](node); + }; + var nodeP = centroid; + var nodeQ = node; + return clusteringDistance(type, attributes.length, getP, getQ, nodeP, nodeQ); +}; +var randomCentroids = function randomCentroids(nodes, k, attributes) { + var ndim = attributes.length; + var min = new Array(ndim); + var max = new Array(ndim); + var centroids = new Array(k); + var centroid = null; + + // Find min, max values for each attribute dimension + for (var i = 0; i < ndim; i++) { + min[i] = nodes.min(attributes[i]).value; + max[i] = nodes.max(attributes[i]).value; + } + + // Build k centroids, each represented as an n-dim feature vector + for (var c = 0; c < k; c++) { + centroid = []; + for (var _i = 0; _i < ndim; _i++) { + centroid[_i] = Math.random() * (max[_i] - min[_i]) + min[_i]; // random initial value + } + + centroids[c] = centroid; + } + return centroids; +}; +var classify = function classify(node, centroids, distance, attributes, type) { + var min = Infinity; + var index = 0; + for (var i = 0; i < centroids.length; i++) { + var dist = getDist(distance, node, centroids[i], attributes, type); + if (dist < min) { + min = dist; + index = i; + } + } + return index; +}; +var buildCluster = function buildCluster(centroid, nodes, assignment) { + var cluster = []; + var node = null; + for (var n = 0; n < nodes.length; n++) { + node = nodes[n]; + if (assignment[node.id()] === centroid) { + //console.log("Node " + node.id() + " is associated with medoid #: " + m); + cluster.push(node); + } + } + return cluster; +}; +var haveValuesConverged = function haveValuesConverged(v1, v2, sensitivityThreshold) { + return Math.abs(v2 - v1) <= sensitivityThreshold; +}; +var haveMatricesConverged = function haveMatricesConverged(v1, v2, sensitivityThreshold) { + for (var i = 0; i < v1.length; i++) { + for (var j = 0; j < v1[i].length; j++) { + var diff = Math.abs(v1[i][j] - v2[i][j]); + if (diff > sensitivityThreshold) { + return false; + } + } + } + return true; +}; +var seenBefore = function seenBefore(node, medoids, n) { + for (var i = 0; i < n; i++) { + if (node === medoids[i]) return true; + } + return false; +}; +var randomMedoids = function randomMedoids(nodes, k) { + var medoids = new Array(k); + + // For small data sets, the probability of medoid conflict is greater, + // so we need to check to see if we've already seen or chose this node before. + if (nodes.length < 50) { + // Randomly select k medoids from the n nodes + for (var i = 0; i < k; i++) { + var node = nodes[Math.floor(Math.random() * nodes.length)]; + + // If we've already chosen this node to be a medoid, don't choose it again (for small data sets). + // Instead choose a different random node. + while (seenBefore(node, medoids, i)) { + node = nodes[Math.floor(Math.random() * nodes.length)]; + } + medoids[i] = node; + } + } else { + // Relatively large data set, so pretty safe to not check and just select random nodes + for (var _i2 = 0; _i2 < k; _i2++) { + medoids[_i2] = nodes[Math.floor(Math.random() * nodes.length)]; + } + } + return medoids; +}; +var findCost = function findCost(potentialNewMedoid, cluster, attributes) { + var cost = 0; + for (var n = 0; n < cluster.length; n++) { + cost += getDist('manhattan', cluster[n], potentialNewMedoid, attributes, 'kMedoids'); + } + return cost; +}; +var kMeans = function kMeans(options) { + var cy = this.cy(); + var nodes = this.nodes(); + var node = null; + + // Set parameters of algorithm: # of clusters, distance metric, etc. + var opts = setOptions$2(options); + + // Begin k-means algorithm + var clusters = new Array(opts.k); + var assignment = {}; + var centroids; + + // Step 1: Initialize centroid positions + if (opts.testMode) { + if (typeof opts.testCentroids === 'number') { + // TODO: implement a seeded random number generator. + opts.testCentroids; + centroids = randomCentroids(nodes, opts.k, opts.attributes); + } else if (_typeof(opts.testCentroids) === 'object') { + centroids = opts.testCentroids; + } else { + centroids = randomCentroids(nodes, opts.k, opts.attributes); + } + } else { + centroids = randomCentroids(nodes, opts.k, opts.attributes); + } + var isStillMoving = true; + var iterations = 0; + while (isStillMoving && iterations < opts.maxIterations) { + // Step 2: Assign nodes to the nearest centroid + for (var n = 0; n < nodes.length; n++) { + node = nodes[n]; + // Determine which cluster this node belongs to: node id => cluster # + assignment[node.id()] = classify(node, centroids, opts.distance, opts.attributes, 'kMeans'); + } + + // Step 3: For each of the k clusters, update its centroid + isStillMoving = false; + for (var c = 0; c < opts.k; c++) { + // Get all nodes that belong to this cluster + var cluster = buildCluster(c, nodes, assignment); + if (cluster.length === 0) { + // If cluster is empty, break out early & move to next cluster + continue; + } + + // Update centroids by calculating avg of all nodes within the cluster. + var ndim = opts.attributes.length; + var centroid = centroids[c]; // [ dim_1, dim_2, dim_3, ... , dim_n ] + var newCentroid = new Array(ndim); + var sum = new Array(ndim); + for (var d = 0; d < ndim; d++) { + sum[d] = 0.0; + for (var i = 0; i < cluster.length; i++) { + node = cluster[i]; + sum[d] += opts.attributes[d](node); + } + newCentroid[d] = sum[d] / cluster.length; + + // Check to see if algorithm has converged, i.e. when centroids no longer change + if (!haveValuesConverged(newCentroid[d], centroid[d], opts.sensitivityThreshold)) { + isStillMoving = true; + } + } + centroids[c] = newCentroid; + clusters[c] = cy.collection(cluster); + } + iterations++; + } + return clusters; +}; +var kMedoids = function kMedoids(options) { + var cy = this.cy(); + var nodes = this.nodes(); + var node = null; + var opts = setOptions$2(options); + + // Begin k-medoids algorithm + var clusters = new Array(opts.k); + var medoids; + var assignment = {}; + var curCost; + var minCosts = new Array(opts.k); // minimum cost configuration for each cluster + + // Step 1: Initialize k medoids + if (opts.testMode) { + if (typeof opts.testCentroids === 'number') ; else if (_typeof(opts.testCentroids) === 'object') { + medoids = opts.testCentroids; + } else { + medoids = randomMedoids(nodes, opts.k); + } + } else { + medoids = randomMedoids(nodes, opts.k); + } + var isStillMoving = true; + var iterations = 0; + while (isStillMoving && iterations < opts.maxIterations) { + // Step 2: Assign nodes to the nearest medoid + for (var n = 0; n < nodes.length; n++) { + node = nodes[n]; + // Determine which cluster this node belongs to: node id => cluster # + assignment[node.id()] = classify(node, medoids, opts.distance, opts.attributes, 'kMedoids'); + } + isStillMoving = false; + // Step 3: For each medoid m, and for each node associated with mediod m, + // select the node with the lowest configuration cost as new medoid. + for (var m = 0; m < medoids.length; m++) { + // Get all nodes that belong to this medoid + var cluster = buildCluster(m, nodes, assignment); + if (cluster.length === 0) { + // If cluster is empty, break out early & move to next cluster + continue; + } + minCosts[m] = findCost(medoids[m], cluster, opts.attributes); // original cost + + // Select different medoid if its configuration has the lowest cost + for (var _n = 0; _n < cluster.length; _n++) { + curCost = findCost(cluster[_n], cluster, opts.attributes); + if (curCost < minCosts[m]) { + minCosts[m] = curCost; + medoids[m] = cluster[_n]; + isStillMoving = true; + } + } + clusters[m] = cy.collection(cluster); + } + iterations++; + } + return clusters; +}; +var updateCentroids = function updateCentroids(centroids, nodes, U, weight, opts) { + var numerator, denominator; + for (var n = 0; n < nodes.length; n++) { + for (var c = 0; c < centroids.length; c++) { + weight[n][c] = Math.pow(U[n][c], opts.m); + } + } + for (var _c = 0; _c < centroids.length; _c++) { + for (var dim = 0; dim < opts.attributes.length; dim++) { + numerator = 0; + denominator = 0; + for (var _n2 = 0; _n2 < nodes.length; _n2++) { + numerator += weight[_n2][_c] * opts.attributes[dim](nodes[_n2]); + denominator += weight[_n2][_c]; + } + centroids[_c][dim] = numerator / denominator; + } + } +}; +var updateMembership = function updateMembership(U, _U, centroids, nodes, opts) { + // Save previous step + for (var i = 0; i < U.length; i++) { + _U[i] = U[i].slice(); + } + var sum, numerator, denominator; + var pow = 2 / (opts.m - 1); + for (var c = 0; c < centroids.length; c++) { + for (var n = 0; n < nodes.length; n++) { + sum = 0; + for (var k = 0; k < centroids.length; k++) { + // against all other centroids + numerator = getDist(opts.distance, nodes[n], centroids[c], opts.attributes, 'cmeans'); + denominator = getDist(opts.distance, nodes[n], centroids[k], opts.attributes, 'cmeans'); + sum += Math.pow(numerator / denominator, pow); + } + U[n][c] = 1 / sum; + } + } +}; +var assign$1 = function assign(nodes, U, opts, cy) { + var clusters = new Array(opts.k); + for (var c = 0; c < clusters.length; c++) { + clusters[c] = []; + } + var max; + var index; + for (var n = 0; n < U.length; n++) { + // for each node (U is N x C matrix) + max = -Infinity; + index = -1; + // Determine which cluster the node is most likely to belong in + for (var _c2 = 0; _c2 < U[0].length; _c2++) { + if (U[n][_c2] > max) { + max = U[n][_c2]; + index = _c2; + } + } + clusters[index].push(nodes[n]); + } + + // Turn every array into a collection of nodes + for (var _c3 = 0; _c3 < clusters.length; _c3++) { + clusters[_c3] = cy.collection(clusters[_c3]); + } + return clusters; +}; +var fuzzyCMeans = function fuzzyCMeans(options) { + var cy = this.cy(); + var nodes = this.nodes(); + var opts = setOptions$2(options); + + // Begin fuzzy c-means algorithm + var clusters; + var centroids; + var U; + var _U; + var weight; + + // Step 1: Initialize letiables. + _U = new Array(nodes.length); + for (var i = 0; i < nodes.length; i++) { + // N x C matrix + _U[i] = new Array(opts.k); + } + U = new Array(nodes.length); + for (var _i3 = 0; _i3 < nodes.length; _i3++) { + // N x C matrix + U[_i3] = new Array(opts.k); + } + for (var _i4 = 0; _i4 < nodes.length; _i4++) { + var total = 0; + for (var j = 0; j < opts.k; j++) { + U[_i4][j] = Math.random(); + total += U[_i4][j]; + } + for (var _j = 0; _j < opts.k; _j++) { + U[_i4][_j] = U[_i4][_j] / total; + } + } + centroids = new Array(opts.k); + for (var _i5 = 0; _i5 < opts.k; _i5++) { + centroids[_i5] = new Array(opts.attributes.length); + } + weight = new Array(nodes.length); + for (var _i6 = 0; _i6 < nodes.length; _i6++) { + // N x C matrix + weight[_i6] = new Array(opts.k); + } + // end init FCM + + var isStillMoving = true; + var iterations = 0; + while (isStillMoving && iterations < opts.maxIterations) { + isStillMoving = false; + + // Step 2: Calculate the centroids for each step. + updateCentroids(centroids, nodes, U, weight, opts); + + // Step 3: Update the partition matrix U. + updateMembership(U, _U, centroids, nodes, opts); + + // Step 4: Check for convergence. + if (!haveMatricesConverged(U, _U, opts.sensitivityThreshold)) { + isStillMoving = true; + } + iterations++; + } + + // Assign nodes to clusters with highest probability. + clusters = assign$1(nodes, U, opts, cy); + return { + clusters: clusters, + degreeOfMembership: U + }; +}; +var kClustering = { + kMeans: kMeans, + kMedoids: kMedoids, + fuzzyCMeans: fuzzyCMeans, + fcm: fuzzyCMeans +}; + +// Implemented by Zoe Xi @zoexi for GSOC 2016 +var defaults$a = defaults$g({ + distance: 'euclidean', + // distance metric to compare nodes + linkage: 'min', + // linkage criterion : how to determine the distance between clusters of nodes + mode: 'threshold', + // mode:'threshold' => clusters must be threshold distance apart + threshold: Infinity, + // the distance threshold + // mode:'dendrogram' => the nodes are organised as leaves in a tree (siblings are close), merging makes clusters + addDendrogram: false, + // whether to add the dendrogram to the graph for viz + dendrogramDepth: 0, + // depth at which dendrogram branches are merged into the returned clusters + attributes: [] // array of attr functions +}); + +var linkageAliases = { + 'single': 'min', + 'complete': 'max' +}; +var setOptions$1 = function setOptions(options) { + var opts = defaults$a(options); + var preferredAlias = linkageAliases[opts.linkage]; + if (preferredAlias != null) { + opts.linkage = preferredAlias; + } + return opts; +}; +var mergeClosest = function mergeClosest(clusters, index, dists, mins, opts) { + // Find two closest clusters from cached mins + var minKey = 0; + var min = Infinity; + var dist; + var attrs = opts.attributes; + var getDist = function getDist(n1, n2) { + return clusteringDistance(opts.distance, attrs.length, function (i) { + return attrs[i](n1); + }, function (i) { + return attrs[i](n2); + }, n1, n2); + }; + for (var i = 0; i < clusters.length; i++) { + var key = clusters[i].key; + var _dist = dists[key][mins[key]]; + if (_dist < min) { + minKey = key; + min = _dist; + } + } + if (opts.mode === 'threshold' && min >= opts.threshold || opts.mode === 'dendrogram' && clusters.length === 1) { + return false; + } + var c1 = index[minKey]; + var c2 = index[mins[minKey]]; + var merged; + + // Merge two closest clusters + if (opts.mode === 'dendrogram') { + merged = { + left: c1, + right: c2, + key: c1.key + }; + } else { + merged = { + value: c1.value.concat(c2.value), + key: c1.key + }; + } + clusters[c1.index] = merged; + clusters.splice(c2.index, 1); + index[c1.key] = merged; + + // Update distances with new merged cluster + for (var _i = 0; _i < clusters.length; _i++) { + var cur = clusters[_i]; + if (c1.key === cur.key) { + dist = Infinity; + } else if (opts.linkage === 'min') { + dist = dists[c1.key][cur.key]; + if (dists[c1.key][cur.key] > dists[c2.key][cur.key]) { + dist = dists[c2.key][cur.key]; + } + } else if (opts.linkage === 'max') { + dist = dists[c1.key][cur.key]; + if (dists[c1.key][cur.key] < dists[c2.key][cur.key]) { + dist = dists[c2.key][cur.key]; + } + } else if (opts.linkage === 'mean') { + dist = (dists[c1.key][cur.key] * c1.size + dists[c2.key][cur.key] * c2.size) / (c1.size + c2.size); + } else { + if (opts.mode === 'dendrogram') dist = getDist(cur.value, c1.value);else dist = getDist(cur.value[0], c1.value[0]); + } + dists[c1.key][cur.key] = dists[cur.key][c1.key] = dist; // distance matrix is symmetric + } + + // Update cached mins + for (var _i2 = 0; _i2 < clusters.length; _i2++) { + var key1 = clusters[_i2].key; + if (mins[key1] === c1.key || mins[key1] === c2.key) { + var _min = key1; + for (var j = 0; j < clusters.length; j++) { + var key2 = clusters[j].key; + if (dists[key1][key2] < dists[key1][_min]) { + _min = key2; + } + } + mins[key1] = _min; + } + clusters[_i2].index = _i2; + } + + // Clean up meta data used for clustering + c1.key = c2.key = c1.index = c2.index = null; + return true; +}; +var getAllChildren = function getAllChildren(root, arr, cy) { + if (!root) return; + if (root.value) { + arr.push(root.value); + } else { + if (root.left) getAllChildren(root.left, arr); + if (root.right) getAllChildren(root.right, arr); + } +}; +var buildDendrogram = function buildDendrogram(root, cy) { + if (!root) return ''; + if (root.left && root.right) { + var leftStr = buildDendrogram(root.left, cy); + var rightStr = buildDendrogram(root.right, cy); + var node = cy.add({ + group: 'nodes', + data: { + id: leftStr + ',' + rightStr + } + }); + cy.add({ + group: 'edges', + data: { + source: leftStr, + target: node.id() + } + }); + cy.add({ + group: 'edges', + data: { + source: rightStr, + target: node.id() + } + }); + return node.id(); + } else if (root.value) { + return root.value.id(); + } +}; +var buildClustersFromTree = function buildClustersFromTree(root, k, cy) { + if (!root) return []; + var left = [], + right = [], + leaves = []; + if (k === 0) { + // don't cut tree, simply return all nodes as 1 single cluster + if (root.left) getAllChildren(root.left, left); + if (root.right) getAllChildren(root.right, right); + leaves = left.concat(right); + return [cy.collection(leaves)]; + } else if (k === 1) { + // cut at root + + if (root.value) { + // leaf node + return [cy.collection(root.value)]; + } else { + if (root.left) getAllChildren(root.left, left); + if (root.right) getAllChildren(root.right, right); + return [cy.collection(left), cy.collection(right)]; + } + } else { + if (root.value) { + return [cy.collection(root.value)]; + } else { + if (root.left) left = buildClustersFromTree(root.left, k - 1, cy); + if (root.right) right = buildClustersFromTree(root.right, k - 1, cy); + return left.concat(right); + } + } +}; + +var hierarchicalClustering = function hierarchicalClustering(options) { + var cy = this.cy(); + var nodes = this.nodes(); + + // Set parameters of algorithm: linkage type, distance metric, etc. + var opts = setOptions$1(options); + var attrs = opts.attributes; + var getDist = function getDist(n1, n2) { + return clusteringDistance(opts.distance, attrs.length, function (i) { + return attrs[i](n1); + }, function (i) { + return attrs[i](n2); + }, n1, n2); + }; + + // Begin hierarchical algorithm + var clusters = []; + var dists = []; // distances between each pair of clusters + var mins = []; // closest cluster for each cluster + var index = []; // hash of all clusters by key + + // In agglomerative (bottom-up) clustering, each node starts as its own cluster + for (var n = 0; n < nodes.length; n++) { + var cluster = { + value: opts.mode === 'dendrogram' ? nodes[n] : [nodes[n]], + key: n, + index: n + }; + clusters[n] = cluster; + index[n] = cluster; + dists[n] = []; + mins[n] = 0; + } + + // Calculate the distance between each pair of clusters + for (var i = 0; i < clusters.length; i++) { + for (var j = 0; j <= i; j++) { + var dist = void 0; + if (opts.mode === 'dendrogram') { + // modes store cluster values differently + dist = i === j ? Infinity : getDist(clusters[i].value, clusters[j].value); + } else { + dist = i === j ? Infinity : getDist(clusters[i].value[0], clusters[j].value[0]); + } + dists[i][j] = dist; + dists[j][i] = dist; + if (dist < dists[i][mins[i]]) { + mins[i] = j; // Cache mins: closest cluster to cluster i is cluster j + } + } + } + + // Find the closest pair of clusters and merge them into a single cluster. + // Update distances between new cluster and each of the old clusters, and loop until threshold reached. + var merged = mergeClosest(clusters, index, dists, mins, opts); + while (merged) { + merged = mergeClosest(clusters, index, dists, mins, opts); + } + var retClusters; + + // Dendrogram mode builds the hierarchy and adds intermediary nodes + edges + // in addition to returning the clusters. + if (opts.mode === 'dendrogram') { + retClusters = buildClustersFromTree(clusters[0], opts.dendrogramDepth, cy); + if (opts.addDendrogram) buildDendrogram(clusters[0], cy); + } else { + // Regular mode simply returns the clusters + + retClusters = new Array(clusters.length); + clusters.forEach(function (cluster, i) { + // Clean up meta data used for clustering + cluster.key = cluster.index = null; + retClusters[i] = cy.collection(cluster.value); + }); + } + return retClusters; +}; +var hierarchicalClustering$1 = { + hierarchicalClustering: hierarchicalClustering, + hca: hierarchicalClustering +}; + +// Implemented by Zoe Xi @zoexi for GSOC 2016 +var defaults$9 = defaults$g({ + distance: 'euclidean', + // distance metric to compare attributes between two nodes + preference: 'median', + // suitability of a data point to serve as an exemplar + damping: 0.8, + // damping factor between [0.5, 1) + maxIterations: 1000, + // max number of iterations to run + minIterations: 100, + // min number of iterations to run in order for clustering to stop + attributes: [// functions to quantify the similarity between any two points + // e.g. node => node.data('weight') + ] +}); +var setOptions = function setOptions(options) { + var dmp = options.damping; + var pref = options.preference; + if (!(0.5 <= dmp && dmp < 1)) { + error("Damping must range on [0.5, 1). Got: ".concat(dmp)); + } + var validPrefs = ['median', 'mean', 'min', 'max']; + if (!(validPrefs.some(function (v) { + return v === pref; + }) || number$1(pref))) { + error("Preference must be one of [".concat(validPrefs.map(function (p) { + return "'".concat(p, "'"); + }).join(', '), "] or a number. Got: ").concat(pref)); + } + return defaults$9(options); +}; + +var getSimilarity = function getSimilarity(type, n1, n2, attributes) { + var attr = function attr(n, i) { + return attributes[i](n); + }; + + // nb negative because similarity should have an inverse relationship to distance + return -clusteringDistance(type, attributes.length, function (i) { + return attr(n1, i); + }, function (i) { + return attr(n2, i); + }, n1, n2); +}; +var getPreference = function getPreference(S, preference) { + // larger preference = greater # of clusters + var p = null; + if (preference === 'median') { + p = median(S); + } else if (preference === 'mean') { + p = mean(S); + } else if (preference === 'min') { + p = min(S); + } else if (preference === 'max') { + p = max(S); + } else { + // Custom preference number, as set by user + p = preference; + } + return p; +}; +var findExemplars = function findExemplars(n, R, A) { + var indices = []; + for (var i = 0; i < n; i++) { + if (R[i * n + i] + A[i * n + i] > 0) { + indices.push(i); + } + } + return indices; +}; +var assignClusters = function assignClusters(n, S, exemplars) { + var clusters = []; + for (var i = 0; i < n; i++) { + var index = -1; + var max = -Infinity; + for (var ei = 0; ei < exemplars.length; ei++) { + var e = exemplars[ei]; + if (S[i * n + e] > max) { + index = e; + max = S[i * n + e]; + } + } + if (index > 0) { + clusters.push(index); + } + } + for (var _ei = 0; _ei < exemplars.length; _ei++) { + clusters[exemplars[_ei]] = exemplars[_ei]; + } + return clusters; +}; +var cytoscape_esm_assign = function assign(n, S, exemplars) { + var clusters = assignClusters(n, S, exemplars); + for (var ei = 0; ei < exemplars.length; ei++) { + var ii = []; + for (var c = 0; c < clusters.length; c++) { + if (clusters[c] === exemplars[ei]) { + ii.push(c); + } + } + var maxI = -1; + var maxSum = -Infinity; + for (var i = 0; i < ii.length; i++) { + var sum = 0; + for (var j = 0; j < ii.length; j++) { + sum += S[ii[j] * n + ii[i]]; + } + if (sum > maxSum) { + maxI = i; + maxSum = sum; + } + } + exemplars[ei] = ii[maxI]; + } + clusters = assignClusters(n, S, exemplars); + return clusters; +}; +var affinityPropagation = function affinityPropagation(options) { + var cy = this.cy(); + var nodes = this.nodes(); + var opts = setOptions(options); + + // Map each node to its position in node array + var id2position = {}; + for (var i = 0; i < nodes.length; i++) { + id2position[nodes[i].id()] = i; + } + + // Begin affinity propagation algorithm + + var n; // number of data points + var n2; // size of matrices + var S; // similarity matrix (1D array) + var p; // preference/suitability of a data point to serve as an exemplar + var R; // responsibility matrix (1D array) + var A; // availability matrix (1D array) + + n = nodes.length; + n2 = n * n; + + // Initialize and build S similarity matrix + S = new Array(n2); + for (var _i = 0; _i < n2; _i++) { + S[_i] = -Infinity; // for cases where two data points shouldn't be linked together + } + + for (var _i2 = 0; _i2 < n; _i2++) { + for (var j = 0; j < n; j++) { + if (_i2 !== j) { + S[_i2 * n + j] = getSimilarity(opts.distance, nodes[_i2], nodes[j], opts.attributes); + } + } + } + + // Place preferences on the diagonal of S + p = getPreference(S, opts.preference); + for (var _i3 = 0; _i3 < n; _i3++) { + S[_i3 * n + _i3] = p; + } + + // Initialize R responsibility matrix + R = new Array(n2); + for (var _i4 = 0; _i4 < n2; _i4++) { + R[_i4] = 0.0; + } + + // Initialize A availability matrix + A = new Array(n2); + for (var _i5 = 0; _i5 < n2; _i5++) { + A[_i5] = 0.0; + } + var old = new Array(n); + var Rp = new Array(n); + var se = new Array(n); + for (var _i6 = 0; _i6 < n; _i6++) { + old[_i6] = 0.0; + Rp[_i6] = 0.0; + se[_i6] = 0; + } + var e = new Array(n * opts.minIterations); + for (var _i7 = 0; _i7 < e.length; _i7++) { + e[_i7] = 0; + } + var iter; + for (iter = 0; iter < opts.maxIterations; iter++) { + // main algorithmic loop + + // Update R responsibility matrix + for (var _i8 = 0; _i8 < n; _i8++) { + var max = -Infinity, + max2 = -Infinity, + maxI = -1, + AS = 0.0; + for (var _j = 0; _j < n; _j++) { + old[_j] = R[_i8 * n + _j]; + AS = A[_i8 * n + _j] + S[_i8 * n + _j]; + if (AS >= max) { + max2 = max; + max = AS; + maxI = _j; + } else if (AS > max2) { + max2 = AS; + } + } + for (var _j2 = 0; _j2 < n; _j2++) { + R[_i8 * n + _j2] = (1 - opts.damping) * (S[_i8 * n + _j2] - max) + opts.damping * old[_j2]; + } + R[_i8 * n + maxI] = (1 - opts.damping) * (S[_i8 * n + maxI] - max2) + opts.damping * old[maxI]; + } + + // Update A availability matrix + for (var _i9 = 0; _i9 < n; _i9++) { + var sum = 0; + for (var _j3 = 0; _j3 < n; _j3++) { + old[_j3] = A[_j3 * n + _i9]; + Rp[_j3] = Math.max(0, R[_j3 * n + _i9]); + sum += Rp[_j3]; + } + sum -= Rp[_i9]; + Rp[_i9] = R[_i9 * n + _i9]; + sum += Rp[_i9]; + for (var _j4 = 0; _j4 < n; _j4++) { + A[_j4 * n + _i9] = (1 - opts.damping) * Math.min(0, sum - Rp[_j4]) + opts.damping * old[_j4]; + } + A[_i9 * n + _i9] = (1 - opts.damping) * (sum - Rp[_i9]) + opts.damping * old[_i9]; + } + + // Check for convergence + var K = 0; + for (var _i10 = 0; _i10 < n; _i10++) { + var E = A[_i10 * n + _i10] + R[_i10 * n + _i10] > 0 ? 1 : 0; + e[iter % opts.minIterations * n + _i10] = E; + K += E; + } + if (K > 0 && (iter >= opts.minIterations - 1 || iter == opts.maxIterations - 1)) { + var _sum = 0; + for (var _i11 = 0; _i11 < n; _i11++) { + se[_i11] = 0; + for (var _j5 = 0; _j5 < opts.minIterations; _j5++) { + se[_i11] += e[_j5 * n + _i11]; + } + if (se[_i11] === 0 || se[_i11] === opts.minIterations) { + _sum++; + } + } + if (_sum === n) { + // then we have convergence + break; + } + } + } + + // Identify exemplars (cluster centers) + var exemplarsIndices = findExemplars(n, R, A); + + // Assign nodes to clusters + var clusterIndices = cytoscape_esm_assign(n, S, exemplarsIndices); + var clusters = {}; + for (var c = 0; c < exemplarsIndices.length; c++) { + clusters[exemplarsIndices[c]] = []; + } + for (var _i12 = 0; _i12 < nodes.length; _i12++) { + var pos = id2position[nodes[_i12].id()]; + var clusterIndex = clusterIndices[pos]; + if (clusterIndex != null) { + // the node may have not been assigned a cluster if no valid attributes were specified + clusters[clusterIndex].push(nodes[_i12]); + } + } + var retClusters = new Array(exemplarsIndices.length); + for (var _c = 0; _c < exemplarsIndices.length; _c++) { + retClusters[_c] = cy.collection(clusters[exemplarsIndices[_c]]); + } + return retClusters; +}; +var affinityPropagation$1 = { + affinityPropagation: affinityPropagation, + ap: affinityPropagation +}; + +var hierholzerDefaults = defaults$g({ + root: undefined, + directed: false +}); +var elesfn$k = { + hierholzer: function hierholzer(options) { + if (!plainObject(options)) { + var args = arguments; + options = { + root: args[0], + directed: args[1] + }; + } + var _hierholzerDefaults = hierholzerDefaults(options), + root = _hierholzerDefaults.root, + directed = _hierholzerDefaults.directed; + var eles = this; + var dflag = false; + var oddIn; + var oddOut; + var startVertex; + if (root) startVertex = string(root) ? this.filter(root)[0].id() : root[0].id(); + var nodes = {}; + var edges = {}; + if (directed) { + eles.forEach(function (ele) { + var id = ele.id(); + if (ele.isNode()) { + var ind = ele.indegree(true); + var outd = ele.outdegree(true); + var d1 = ind - outd; + var d2 = outd - ind; + if (d1 == 1) { + if (oddIn) dflag = true;else oddIn = id; + } else if (d2 == 1) { + if (oddOut) dflag = true;else oddOut = id; + } else if (d2 > 1 || d1 > 1) { + dflag = true; + } + nodes[id] = []; + ele.outgoers().forEach(function (e) { + if (e.isEdge()) nodes[id].push(e.id()); + }); + } else { + edges[id] = [undefined, ele.target().id()]; + } + }); + } else { + eles.forEach(function (ele) { + var id = ele.id(); + if (ele.isNode()) { + var d = ele.degree(true); + if (d % 2) { + if (!oddIn) oddIn = id;else if (!oddOut) oddOut = id;else dflag = true; + } + nodes[id] = []; + ele.connectedEdges().forEach(function (e) { + return nodes[id].push(e.id()); + }); + } else { + edges[id] = [ele.source().id(), ele.target().id()]; + } + }); + } + var result = { + found: false, + trail: undefined + }; + if (dflag) return result;else if (oddOut && oddIn) { + if (directed) { + if (startVertex && oddOut != startVertex) { + return result; + } + startVertex = oddOut; + } else { + if (startVertex && oddOut != startVertex && oddIn != startVertex) { + return result; + } else if (!startVertex) { + startVertex = oddOut; + } + } + } else { + if (!startVertex) startVertex = eles[0].id(); + } + var walk = function walk(v) { + var currentNode = v; + var subtour = [v]; + var adj, adjTail, adjHead; + while (nodes[currentNode].length) { + adj = nodes[currentNode].shift(); + adjTail = edges[adj][0]; + adjHead = edges[adj][1]; + if (currentNode != adjHead) { + nodes[adjHead] = nodes[adjHead].filter(function (e) { + return e != adj; + }); + currentNode = adjHead; + } else if (!directed && currentNode != adjTail) { + nodes[adjTail] = nodes[adjTail].filter(function (e) { + return e != adj; + }); + currentNode = adjTail; + } + subtour.unshift(adj); + subtour.unshift(currentNode); + } + return subtour; + }; + var trail = []; + var subtour = []; + subtour = walk(startVertex); + while (subtour.length != 1) { + if (nodes[subtour[0]].length == 0) { + trail.unshift(eles.getElementById(subtour.shift())); + trail.unshift(eles.getElementById(subtour.shift())); + } else { + subtour = walk(subtour.shift()).concat(subtour); + } + } + trail.unshift(eles.getElementById(subtour.shift())); // final node + + for (var d in nodes) { + if (nodes[d].length) { + return result; + } + } + result.found = true; + result.trail = this.spawn(trail, true); + return result; + } +}; + +var hopcroftTarjanBiconnected = function hopcroftTarjanBiconnected() { + var eles = this; + var nodes = {}; + var id = 0; + var edgeCount = 0; + var components = []; + var stack = []; + var visitedEdges = {}; + var buildComponent = function buildComponent(x, y) { + var i = stack.length - 1; + var cutset = []; + var component = eles.spawn(); + while (stack[i].x != x || stack[i].y != y) { + cutset.push(stack.pop().edge); + i--; + } + cutset.push(stack.pop().edge); + cutset.forEach(function (edge) { + var connectedNodes = edge.connectedNodes().intersection(eles); + component.merge(edge); + connectedNodes.forEach(function (node) { + var nodeId = node.id(); + var connectedEdges = node.connectedEdges().intersection(eles); + component.merge(node); + if (!nodes[nodeId].cutVertex) { + component.merge(connectedEdges); + } else { + component.merge(connectedEdges.filter(function (edge) { + return edge.isLoop(); + })); + } + }); + }); + components.push(component); + }; + var biconnectedSearch = function biconnectedSearch(root, currentNode, parent) { + if (root === parent) edgeCount += 1; + nodes[currentNode] = { + id: id, + low: id++, + cutVertex: false + }; + var edges = eles.getElementById(currentNode).connectedEdges().intersection(eles); + if (edges.size() === 0) { + components.push(eles.spawn(eles.getElementById(currentNode))); + } else { + var sourceId, targetId, otherNodeId, edgeId; + edges.forEach(function (edge) { + sourceId = edge.source().id(); + targetId = edge.target().id(); + otherNodeId = sourceId === currentNode ? targetId : sourceId; + if (otherNodeId !== parent) { + edgeId = edge.id(); + if (!visitedEdges[edgeId]) { + visitedEdges[edgeId] = true; + stack.push({ + x: currentNode, + y: otherNodeId, + edge: edge + }); + } + if (!(otherNodeId in nodes)) { + biconnectedSearch(root, otherNodeId, currentNode); + nodes[currentNode].low = Math.min(nodes[currentNode].low, nodes[otherNodeId].low); + if (nodes[currentNode].id <= nodes[otherNodeId].low) { + nodes[currentNode].cutVertex = true; + buildComponent(currentNode, otherNodeId); + } + } else { + nodes[currentNode].low = Math.min(nodes[currentNode].low, nodes[otherNodeId].id); + } + } + }); + } + }; + eles.forEach(function (ele) { + if (ele.isNode()) { + var nodeId = ele.id(); + if (!(nodeId in nodes)) { + edgeCount = 0; + biconnectedSearch(nodeId, nodeId); + nodes[nodeId].cutVertex = edgeCount > 1; + } + } + }); + var cutVertices = Object.keys(nodes).filter(function (id) { + return nodes[id].cutVertex; + }).map(function (id) { + return eles.getElementById(id); + }); + return { + cut: eles.spawn(cutVertices), + components: components + }; +}; +var hopcroftTarjanBiconnected$1 = { + hopcroftTarjanBiconnected: hopcroftTarjanBiconnected, + htbc: hopcroftTarjanBiconnected, + htb: hopcroftTarjanBiconnected, + hopcroftTarjanBiconnectedComponents: hopcroftTarjanBiconnected +}; + +var tarjanStronglyConnected = function tarjanStronglyConnected() { + var eles = this; + var nodes = {}; + var index = 0; + var components = []; + var stack = []; + var cut = eles.spawn(eles); + var stronglyConnectedSearch = function stronglyConnectedSearch(sourceNodeId) { + stack.push(sourceNodeId); + nodes[sourceNodeId] = { + index: index, + low: index++, + explored: false + }; + var connectedEdges = eles.getElementById(sourceNodeId).connectedEdges().intersection(eles); + connectedEdges.forEach(function (edge) { + var targetNodeId = edge.target().id(); + if (targetNodeId !== sourceNodeId) { + if (!(targetNodeId in nodes)) { + stronglyConnectedSearch(targetNodeId); + } + if (!nodes[targetNodeId].explored) { + nodes[sourceNodeId].low = Math.min(nodes[sourceNodeId].low, nodes[targetNodeId].low); + } + } + }); + if (nodes[sourceNodeId].index === nodes[sourceNodeId].low) { + var componentNodes = eles.spawn(); + for (;;) { + var nodeId = stack.pop(); + componentNodes.merge(eles.getElementById(nodeId)); + nodes[nodeId].low = nodes[sourceNodeId].index; + nodes[nodeId].explored = true; + if (nodeId === sourceNodeId) { + break; + } + } + var componentEdges = componentNodes.edgesWith(componentNodes); + var component = componentNodes.merge(componentEdges); + components.push(component); + cut = cut.difference(component); + } + }; + eles.forEach(function (ele) { + if (ele.isNode()) { + var nodeId = ele.id(); + if (!(nodeId in nodes)) { + stronglyConnectedSearch(nodeId); + } + } + }); + return { + cut: cut, + components: components + }; +}; +var tarjanStronglyConnected$1 = { + tarjanStronglyConnected: tarjanStronglyConnected, + tsc: tarjanStronglyConnected, + tscc: tarjanStronglyConnected, + tarjanStronglyConnectedComponents: tarjanStronglyConnected +}; + +var elesfn$j = {}; +[elesfn$v, elesfn$u, elesfn$t, elesfn$s, elesfn$r, elesfn$q, elesfn$p, elesfn$o, elesfn$n, elesfn$m, elesfn$l, markovClustering$1, kClustering, hierarchicalClustering$1, affinityPropagation$1, elesfn$k, hopcroftTarjanBiconnected$1, tarjanStronglyConnected$1].forEach(function (props) { + extend(elesfn$j, props); +}); + +/*! +Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable +Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) +Licensed under The MIT License (http://opensource.org/licenses/MIT) +*/ + +/* promise states [Promises/A+ 2.1] */ +var STATE_PENDING = 0; /* [Promises/A+ 2.1.1] */ +var STATE_FULFILLED = 1; /* [Promises/A+ 2.1.2] */ +var STATE_REJECTED = 2; /* [Promises/A+ 2.1.3] */ + +/* promise object constructor */ +var api = function api(executor) { + /* optionally support non-constructor/plain-function call */ + if (!(this instanceof api)) return new api(executor); + + /* initialize object */ + this.id = 'Thenable/1.0.7'; + this.state = STATE_PENDING; /* initial state */ + this.fulfillValue = undefined; /* initial value */ /* [Promises/A+ 1.3, 2.1.2.2] */ + this.rejectReason = undefined; /* initial reason */ /* [Promises/A+ 1.5, 2.1.3.2] */ + this.onFulfilled = []; /* initial handlers */ + this.onRejected = []; /* initial handlers */ + + /* provide optional information-hiding proxy */ + this.proxy = { + then: this.then.bind(this) + }; + + /* support optional executor function */ + if (typeof executor === 'function') executor.call(this, this.fulfill.bind(this), this.reject.bind(this)); +}; + +/* promise API methods */ +api.prototype = { + /* promise resolving methods */ + fulfill: function fulfill(value) { + return deliver(this, STATE_FULFILLED, 'fulfillValue', value); + }, + reject: function reject(value) { + return deliver(this, STATE_REJECTED, 'rejectReason', value); + }, + /* "The then Method" [Promises/A+ 1.1, 1.2, 2.2] */ + then: function then(onFulfilled, onRejected) { + var curr = this; + var next = new api(); /* [Promises/A+ 2.2.7] */ + curr.onFulfilled.push(resolver(onFulfilled, next, 'fulfill')); /* [Promises/A+ 2.2.2/2.2.6] */ + curr.onRejected.push(resolver(onRejected, next, 'reject')); /* [Promises/A+ 2.2.3/2.2.6] */ + execute(curr); + return next.proxy; /* [Promises/A+ 2.2.7, 3.3] */ + } +}; + +/* deliver an action */ +var deliver = function deliver(curr, state, name, value) { + if (curr.state === STATE_PENDING) { + curr.state = state; /* [Promises/A+ 2.1.2.1, 2.1.3.1] */ + curr[name] = value; /* [Promises/A+ 2.1.2.2, 2.1.3.2] */ + execute(curr); + } + return curr; +}; + +/* execute all handlers */ +var execute = function execute(curr) { + if (curr.state === STATE_FULFILLED) execute_handlers(curr, 'onFulfilled', curr.fulfillValue);else if (curr.state === STATE_REJECTED) execute_handlers(curr, 'onRejected', curr.rejectReason); +}; + +/* execute particular set of handlers */ +var execute_handlers = function execute_handlers(curr, name, value) { + /* global setImmediate: true */ + /* global setTimeout: true */ + + /* short-circuit processing */ + if (curr[name].length === 0) return; + + /* iterate over all handlers, exactly once */ + var handlers = curr[name]; + curr[name] = []; /* [Promises/A+ 2.2.2.3, 2.2.3.3] */ + var func = function func() { + for (var i = 0; i < handlers.length; i++) { + handlers[i](value); + } /* [Promises/A+ 2.2.5] */ + }; + + /* execute procedure asynchronously */ /* [Promises/A+ 2.2.4, 3.1] */ + if (typeof setImmediate === 'function') setImmediate(func);else setTimeout(func, 0); +}; + +/* generate a resolver function */ +var resolver = function resolver(cb, next, method) { + return function (value) { + if (typeof cb !== 'function') /* [Promises/A+ 2.2.1, 2.2.7.3, 2.2.7.4] */ + next[method].call(next, value); /* [Promises/A+ 2.2.7.3, 2.2.7.4] */else { + var result; + try { + result = cb(value); + } /* [Promises/A+ 2.2.2.1, 2.2.3.1, 2.2.5, 3.2] */ catch (e) { + next.reject(e); /* [Promises/A+ 2.2.7.2] */ + return; + } + resolve(next, result); /* [Promises/A+ 2.2.7.1] */ + } + }; +}; + +/* "Promise Resolution Procedure" */ /* [Promises/A+ 2.3] */ +var resolve = function resolve(promise, x) { + /* sanity check arguments */ /* [Promises/A+ 2.3.1] */ + if (promise === x || promise.proxy === x) { + promise.reject(new TypeError('cannot resolve promise with itself')); + return; + } + + /* surgically check for a "then" method + (mainly to just call the "getter" of "then" only once) */ + var then; + if (_typeof(x) === 'object' && x !== null || typeof x === 'function') { + try { + then = x.then; + } /* [Promises/A+ 2.3.3.1, 3.5] */ catch (e) { + promise.reject(e); /* [Promises/A+ 2.3.3.2] */ + return; + } + } + + /* handle own Thenables [Promises/A+ 2.3.2] + and similar "thenables" [Promises/A+ 2.3.3] */ + if (typeof then === 'function') { + var resolved = false; + try { + /* call retrieved "then" method */ /* [Promises/A+ 2.3.3.3] */ + then.call(x, /* resolvePromise */ /* [Promises/A+ 2.3.3.3.1] */ + function (y) { + if (resolved) return; + resolved = true; /* [Promises/A+ 2.3.3.3.3] */ + if (y === x) /* [Promises/A+ 3.6] */ + promise.reject(new TypeError('circular thenable chain'));else resolve(promise, y); + }, /* rejectPromise */ /* [Promises/A+ 2.3.3.3.2] */ + function (r) { + if (resolved) return; + resolved = true; /* [Promises/A+ 2.3.3.3.3] */ + promise.reject(r); + }); + } catch (e) { + if (!resolved) /* [Promises/A+ 2.3.3.3.3] */ + promise.reject(e); /* [Promises/A+ 2.3.3.3.4] */ + } + + return; + } + + /* handle other values */ + promise.fulfill(x); /* [Promises/A+ 2.3.4, 2.3.3.4] */ +}; + +// so we always have Promise.all() +api.all = function (ps) { + return new api(function (resolveAll, rejectAll) { + var vals = new Array(ps.length); + var doneCount = 0; + var fulfill = function fulfill(i, val) { + vals[i] = val; + doneCount++; + if (doneCount === ps.length) { + resolveAll(vals); + } + }; + for (var i = 0; i < ps.length; i++) { + (function (i) { + var p = ps[i]; + var isPromise = p != null && p.then != null; + if (isPromise) { + p.then(function (val) { + fulfill(i, val); + }, function (err) { + rejectAll(err); + }); + } else { + var val = p; + fulfill(i, val); + } + })(i); + } + }); +}; +api.resolve = function (val) { + return new api(function (resolve, reject) { + resolve(val); + }); +}; +api.reject = function (val) { + return new api(function (resolve, reject) { + reject(val); + }); +}; +var Promise$1 = typeof Promise !== 'undefined' ? Promise : api; // eslint-disable-line no-undef + +var Animation = function Animation(target, opts, opts2) { + var isCore = core(target); + var isEle = !isCore; + var _p = this._private = extend({ + duration: 1000 + }, opts, opts2); + _p.target = target; + _p.style = _p.style || _p.css; + _p.started = false; + _p.playing = false; + _p.hooked = false; + _p.applying = false; + _p.progress = 0; + _p.completes = []; + _p.frames = []; + if (_p.complete && fn$6(_p.complete)) { + _p.completes.push(_p.complete); + } + if (isEle) { + var pos = target.position(); + _p.startPosition = _p.startPosition || { + x: pos.x, + y: pos.y + }; + _p.startStyle = _p.startStyle || target.cy().style().getAnimationStartStyle(target, _p.style); + } + if (isCore) { + var pan = target.pan(); + _p.startPan = { + x: pan.x, + y: pan.y + }; + _p.startZoom = target.zoom(); + } + + // for future timeline/animations impl + this.length = 1; + this[0] = this; +}; +var anifn = Animation.prototype; +extend(anifn, { + instanceString: function instanceString() { + return 'animation'; + }, + hook: function hook() { + var _p = this._private; + if (!_p.hooked) { + // add to target's animation queue + var q; + var tAni = _p.target._private.animation; + if (_p.queue) { + q = tAni.queue; + } else { + q = tAni.current; + } + q.push(this); + + // add to the animation loop pool + if (elementOrCollection(_p.target)) { + _p.target.cy().addToAnimationPool(_p.target); + } + _p.hooked = true; + } + return this; + }, + play: function play() { + var _p = this._private; + + // autorewind + if (_p.progress === 1) { + _p.progress = 0; + } + _p.playing = true; + _p.started = false; // needs to be started by animation loop + _p.stopped = false; + this.hook(); + + // the animation loop will start the animation... + + return this; + }, + playing: function playing() { + return this._private.playing; + }, + apply: function apply() { + var _p = this._private; + _p.applying = true; + _p.started = false; // needs to be started by animation loop + _p.stopped = false; + this.hook(); + + // the animation loop will apply the animation at this progress + + return this; + }, + applying: function applying() { + return this._private.applying; + }, + pause: function pause() { + var _p = this._private; + _p.playing = false; + _p.started = false; + return this; + }, + stop: function stop() { + var _p = this._private; + _p.playing = false; + _p.started = false; + _p.stopped = true; // to be removed from animation queues + + return this; + }, + rewind: function rewind() { + return this.progress(0); + }, + fastforward: function fastforward() { + return this.progress(1); + }, + time: function time(t) { + var _p = this._private; + if (t === undefined) { + return _p.progress * _p.duration; + } else { + return this.progress(t / _p.duration); + } + }, + progress: function progress(p) { + var _p = this._private; + var wasPlaying = _p.playing; + if (p === undefined) { + return _p.progress; + } else { + if (wasPlaying) { + this.pause(); + } + _p.progress = p; + _p.started = false; + if (wasPlaying) { + this.play(); + } + } + return this; + }, + completed: function completed() { + return this._private.progress === 1; + }, + reverse: function reverse() { + var _p = this._private; + var wasPlaying = _p.playing; + if (wasPlaying) { + this.pause(); + } + _p.progress = 1 - _p.progress; + _p.started = false; + var swap = function swap(a, b) { + var _pa = _p[a]; + if (_pa == null) { + return; + } + _p[a] = _p[b]; + _p[b] = _pa; + }; + swap('zoom', 'startZoom'); + swap('pan', 'startPan'); + swap('position', 'startPosition'); + + // swap styles + if (_p.style) { + for (var i = 0; i < _p.style.length; i++) { + var prop = _p.style[i]; + var name = prop.name; + var startStyleProp = _p.startStyle[name]; + _p.startStyle[name] = prop; + _p.style[i] = startStyleProp; + } + } + if (wasPlaying) { + this.play(); + } + return this; + }, + promise: function promise(type) { + var _p = this._private; + var arr; + switch (type) { + case 'frame': + arr = _p.frames; + break; + default: + case 'complete': + case 'completed': + arr = _p.completes; + } + return new Promise$1(function (resolve, reject) { + arr.push(function () { + resolve(); + }); + }); + } +}); +anifn.complete = anifn.completed; +anifn.run = anifn.play; +anifn.running = anifn.playing; + +var define$3 = { + animated: function animated() { + return function animatedImpl() { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + var cy = this._private.cy || this; + if (!cy.styleEnabled()) { + return false; + } + var ele = all[0]; + if (ele) { + return ele._private.animation.current.length > 0; + } + }; + }, + // animated + + clearQueue: function clearQueue() { + return function clearQueueImpl() { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + var cy = this._private.cy || this; + if (!cy.styleEnabled()) { + return this; + } + for (var i = 0; i < all.length; i++) { + var ele = all[i]; + ele._private.animation.queue = []; + } + return this; + }; + }, + // clearQueue + + delay: function delay() { + return function delayImpl(time, complete) { + var cy = this._private.cy || this; + if (!cy.styleEnabled()) { + return this; + } + return this.animate({ + delay: time, + duration: time, + complete: complete + }); + }; + }, + // delay + + delayAnimation: function delayAnimation() { + return function delayAnimationImpl(time, complete) { + var cy = this._private.cy || this; + if (!cy.styleEnabled()) { + return this; + } + return this.animation({ + delay: time, + duration: time, + complete: complete + }); + }; + }, + // delay + + animation: function animation() { + return function animationImpl(properties, params) { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + var cy = this._private.cy || this; + var isCore = !selfIsArrayLike; + var isEles = !isCore; + if (!cy.styleEnabled()) { + return this; + } + var style = cy.style(); + properties = extend({}, properties, params); + var propertiesEmpty = Object.keys(properties).length === 0; + if (propertiesEmpty) { + return new Animation(all[0], properties); // nothing to animate + } + + if (properties.duration === undefined) { + properties.duration = 400; + } + switch (properties.duration) { + case 'slow': + properties.duration = 600; + break; + case 'fast': + properties.duration = 200; + break; + } + if (isEles) { + properties.style = style.getPropsList(properties.style || properties.css); + properties.css = undefined; + } + if (isEles && properties.renderedPosition != null) { + var rpos = properties.renderedPosition; + var pan = cy.pan(); + var zoom = cy.zoom(); + properties.position = renderedToModelPosition(rpos, zoom, pan); + } + + // override pan w/ panBy if set + if (isCore && properties.panBy != null) { + var panBy = properties.panBy; + var cyPan = cy.pan(); + properties.pan = { + x: cyPan.x + panBy.x, + y: cyPan.y + panBy.y + }; + } + + // override pan w/ center if set + var center = properties.center || properties.centre; + if (isCore && center != null) { + var centerPan = cy.getCenterPan(center.eles, properties.zoom); + if (centerPan != null) { + properties.pan = centerPan; + } + } + + // override pan & zoom w/ fit if set + if (isCore && properties.fit != null) { + var fit = properties.fit; + var fitVp = cy.getFitViewport(fit.eles || fit.boundingBox, fit.padding); + if (fitVp != null) { + properties.pan = fitVp.pan; + properties.zoom = fitVp.zoom; + } + } + + // override zoom (& potentially pan) w/ zoom obj if set + if (isCore && plainObject(properties.zoom)) { + var vp = cy.getZoomedViewport(properties.zoom); + if (vp != null) { + if (vp.zoomed) { + properties.zoom = vp.zoom; + } + if (vp.panned) { + properties.pan = vp.pan; + } + } else { + properties.zoom = null; // an inavalid zoom (e.g. no delta) gets automatically destroyed + } + } + + return new Animation(all[0], properties); + }; + }, + // animate + + animate: function animate() { + return function animateImpl(properties, params) { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + var cy = this._private.cy || this; + if (!cy.styleEnabled()) { + return this; + } + if (params) { + properties = extend({}, properties, params); + } + + // manually hook and run the animation + for (var i = 0; i < all.length; i++) { + var ele = all[i]; + var queue = ele.animated() && (properties.queue === undefined || properties.queue); + var ani = ele.animation(properties, queue ? { + queue: true + } : undefined); + ani.play(); + } + return this; // chaining + }; + }, + + // animate + + stop: function stop() { + return function stopImpl(clearQueue, jumpToEnd) { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + var cy = this._private.cy || this; + if (!cy.styleEnabled()) { + return this; + } + for (var i = 0; i < all.length; i++) { + var ele = all[i]; + var _p = ele._private; + var anis = _p.animation.current; + for (var j = 0; j < anis.length; j++) { + var ani = anis[j]; + var ani_p = ani._private; + if (jumpToEnd) { + // next iteration of the animation loop, the animation + // will go straight to the end and be removed + ani_p.duration = 0; + } + } + + // clear the queue of future animations + if (clearQueue) { + _p.animation.queue = []; + } + if (!jumpToEnd) { + _p.animation.current = []; + } + } + + // we have to notify (the animation loop doesn't do it for us on `stop`) + cy.notify('draw'); + return this; + }; + } // stop +}; // define + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +var isArray_1 = isArray; + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (isArray_1(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol_1(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +var _isKey = isKey; + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject_1(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = _baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +var isFunction_1 = isFunction; + +/** Used to detect overreaching core-js shims. */ +var coreJsData = _root['__core-js_shared__']; + +var _coreJsData = coreJsData; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(_coreJsData && _coreJsData.keys && _coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +var _isMasked = isMasked; + +/** Used for built-in method references. */ +var funcProto$1 = Function.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString$1 = funcProto$1.toString; + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString$1.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +var _toSource = toSource; + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto$3 = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty$3 = objectProto$3.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty$3).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject_1(value) || _isMasked(value)) { + return false; + } + var pattern = isFunction_1(value) ? reIsNative : reIsHostCtor; + return pattern.test(_toSource(value)); +} + +var _baseIsNative = baseIsNative; + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue$1(object, key) { + return object == null ? undefined : object[key]; +} + +var _getValue = getValue$1; + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = _getValue(object, key); + return _baseIsNative(value) ? value : undefined; +} + +var _getNative = getNative; + +/* Built-in method references that are verified to be native. */ +var nativeCreate = _getNative(Object, 'create'); + +var _nativeCreate = nativeCreate; + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = _nativeCreate ? _nativeCreate(null) : {}; + this.size = 0; +} + +var _hashClear = hashClear; + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; +} + +var _hashDelete = hashDelete; + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED$1 = '__lodash_hash_undefined__'; + +/** Used for built-in method references. */ +var objectProto$2 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$2 = objectProto$2.hasOwnProperty; + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (_nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED$1 ? undefined : result; + } + return hasOwnProperty$2.call(data, key) ? data[key] : undefined; +} + +var _hashGet = hashGet; + +/** Used for built-in method references. */ +var objectProto$1 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$1 = objectProto$1.hasOwnProperty; + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return _nativeCreate ? (data[key] !== undefined) : hasOwnProperty$1.call(data, key); +} + +var _hashHas = hashHas; + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (_nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; +} + +var _hashSet = hashSet; + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `Hash`. +Hash.prototype.clear = _hashClear; +Hash.prototype['delete'] = _hashDelete; +Hash.prototype.get = _hashGet; +Hash.prototype.has = _hashHas; +Hash.prototype.set = _hashSet; + +var _Hash = Hash; + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; + this.size = 0; +} + +var _listCacheClear = listCacheClear; + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +var eq_1 = eq; + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq_1(array[length][0], key)) { + return length; + } + } + return -1; +} + +var _assocIndexOf = assocIndexOf; + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = _assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; +} + +var _listCacheDelete = listCacheDelete; + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = _assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; +} + +var _listCacheGet = listCacheGet; + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return _assocIndexOf(this.__data__, key) > -1; +} + +var _listCacheHas = listCacheHas; + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = _assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +var _listCacheSet = listCacheSet; + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = _listCacheClear; +ListCache.prototype['delete'] = _listCacheDelete; +ListCache.prototype.get = _listCacheGet; +ListCache.prototype.has = _listCacheHas; +ListCache.prototype.set = _listCacheSet; + +var _ListCache = ListCache; + +/* Built-in method references that are verified to be native. */ +var Map$1 = _getNative(_root, 'Map'); + +var _Map = Map$1; + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new _Hash, + 'map': new (_Map || _ListCache), + 'string': new _Hash + }; +} + +var _mapCacheClear = mapCacheClear; + +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} + +var _isKeyable = isKeyable; + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return _isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} + +var _getMapData = getMapData; + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + var result = _getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; +} + +var _mapCacheDelete = mapCacheDelete; + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return _getMapData(this, key).get(key); +} + +var _mapCacheGet = mapCacheGet; + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return _getMapData(this, key).has(key); +} + +var _mapCacheHas = mapCacheHas; + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + var data = _getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; +} + +var _mapCacheSet = mapCacheSet; + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = _mapCacheClear; +MapCache.prototype['delete'] = _mapCacheDelete; +MapCache.prototype.get = _mapCacheGet; +MapCache.prototype.has = _mapCacheHas; +MapCache.prototype.set = _mapCacheSet; + +var _MapCache = MapCache; + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ +function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || _MapCache); + return memoized; +} + +// Expose `MapCache`. +memoize.Cache = _MapCache; + +var memoize_1 = memoize; + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = memoize_1(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +var _memoizeCapped = memoizeCapped; + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +var _stringToPath = stringToPath; + +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +var _arrayMap = arrayMap; + +/** Used as references for various `Number` constants. */ +var INFINITY$1 = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol ? _Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray_1(value)) { + // Recursively convert values (susceptible to call stack limits). + return _arrayMap(value, baseToString) + ''; + } + if (isSymbol_1(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result; +} + +var _baseToString = baseToString; + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString$1(value) { + return value == null ? '' : _baseToString(value); +} + +var toString_1 = toString$1; + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if (isArray_1(value)) { + return value; + } + return _isKey(value, object) ? [value] : _stringToPath(toString_1(value)); +} + +var _castPath = castPath; + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol_1(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +var _toKey = toKey; + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = _castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[_toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +var _baseGet = baseGet; + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : _baseGet(object, path); + return result === undefined ? defaultValue : result; +} + +var get_1 = get; + +var defineProperty = (function() { + try { + var func = _getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +var _defineProperty = defineProperty; + +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && _defineProperty) { + _defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } +} + +var _baseAssignValue = baseAssignValue; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var cytoscape_esm_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(cytoscape_esm_hasOwnProperty.call(object, key) && eq_1(objValue, value)) || + (value === undefined && !(key in object))) { + _baseAssignValue(object, key, value); + } +} + +var _assignValue = assignValue; + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +var _isIndex = isIndex; + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!isObject_1(object)) { + return object; + } + path = _castPath(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = _toKey(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject_1(objValue) + ? objValue + : (_isIndex(path[index + 1]) ? [] : {}); + } + } + _assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +var _baseSet = baseSet; + +/** + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, ['x', '0', 'y', 'z'], 5); + * console.log(object.x[0].y.z); + * // => 5 + */ +function set(object, path, value) { + return object == null ? object : _baseSet(object, path, value); +} + +var set_1 = set; + +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +var _copyArray = copyArray; + +/** + * Converts `value` to a property path array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Util + * @param {*} value The value to convert. + * @returns {Array} Returns the new property path array. + * @example + * + * _.toPath('a.b.c'); + * // => ['a', 'b', 'c'] + * + * _.toPath('a[0].b.c'); + * // => ['a', '0', 'b', 'c'] + */ +function toPath(value) { + if (isArray_1(value)) { + return _arrayMap(value, _toKey); + } + return isSymbol_1(value) ? [value] : _copyArray(_stringToPath(toString_1(value))); +} + +var toPath_1 = toPath; + +var define$2 = { + // access data field + data: function data(params) { + var defaults = { + field: 'data', + bindingEvent: 'data', + allowBinding: false, + allowSetting: false, + allowGetting: false, + settingEvent: 'data', + settingTriggersEvent: false, + triggerFnName: 'trigger', + immutableKeys: {}, + // key => true if immutable + updateStyle: false, + beforeGet: function beforeGet(self) {}, + beforeSet: function beforeSet(self, obj) {}, + onSet: function onSet(self) {}, + canSet: function canSet(self) { + return true; + } + }; + params = extend({}, defaults, params); + return function dataImpl(name, value) { + var p = params; + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + var single = selfIsArrayLike ? self[0] : self; + + // .data('foo', ...) + if (string(name)) { + // set or get property + var isPathLike = name.indexOf('.') !== -1; // there might be a normal field with a dot + var path = isPathLike && toPath_1(name); + + // .data('foo') + if (p.allowGetting && value === undefined) { + // get + + var ret; + if (single) { + p.beforeGet(single); + + // check if it's path and a field with the same name doesn't exist + if (path && single._private[p.field][name] === undefined) { + ret = get_1(single._private[p.field], path); + } else { + ret = single._private[p.field][name]; + } + } + return ret; + + // .data('foo', 'bar') + } else if (p.allowSetting && value !== undefined) { + // set + var valid = !p.immutableKeys[name]; + if (valid) { + var change = _defineProperty$1({}, name, value); + p.beforeSet(self, change); + for (var i = 0, l = all.length; i < l; i++) { + var ele = all[i]; + if (p.canSet(ele)) { + if (path && single._private[p.field][name] === undefined) { + set_1(ele._private[p.field], path, value); + } else { + ele._private[p.field][name] = value; + } + } + } + + // update mappers if asked + if (p.updateStyle) { + self.updateStyle(); + } + + // call onSet callback + p.onSet(self); + if (p.settingTriggersEvent) { + self[p.triggerFnName](p.settingEvent); + } + } + } + + // .data({ 'foo': 'bar' }) + } else if (p.allowSetting && plainObject(name)) { + // extend + var obj = name; + var k, v; + var keys = Object.keys(obj); + p.beforeSet(self, obj); + for (var _i = 0; _i < keys.length; _i++) { + k = keys[_i]; + v = obj[k]; + var _valid = !p.immutableKeys[k]; + if (_valid) { + for (var j = 0; j < all.length; j++) { + var _ele = all[j]; + if (p.canSet(_ele)) { + _ele._private[p.field][k] = v; + } + } + } + } + + // update mappers if asked + if (p.updateStyle) { + self.updateStyle(); + } + + // call onSet callback + p.onSet(self); + if (p.settingTriggersEvent) { + self[p.triggerFnName](p.settingEvent); + } + + // .data(function(){ ... }) + } else if (p.allowBinding && fn$6(name)) { + // bind to event + var fn = name; + self.on(p.bindingEvent, fn); + + // .data() + } else if (p.allowGetting && name === undefined) { + // get whole object + var _ret; + if (single) { + p.beforeGet(single); + _ret = single._private[p.field]; + } + return _ret; + } + return self; // maintain chainability + }; // function + }, + + // data + + // remove data field + removeData: function removeData(params) { + var defaults = { + field: 'data', + event: 'data', + triggerFnName: 'trigger', + triggerEvent: false, + immutableKeys: {} // key => true if immutable + }; + + params = extend({}, defaults, params); + return function removeDataImpl(names) { + var p = params; + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + + // .removeData('foo bar') + if (string(names)) { + // then get the list of keys, and delete them + var keys = names.split(/\s+/); + var l = keys.length; + for (var i = 0; i < l; i++) { + // delete each non-empty key + var key = keys[i]; + if (emptyString(key)) { + continue; + } + var valid = !p.immutableKeys[key]; // not valid if immutable + if (valid) { + for (var i_a = 0, l_a = all.length; i_a < l_a; i_a++) { + all[i_a]._private[p.field][key] = undefined; + } + } + } + if (p.triggerEvent) { + self[p.triggerFnName](p.event); + } + + // .removeData() + } else if (names === undefined) { + // then delete all keys + + for (var _i_a = 0, _l_a = all.length; _i_a < _l_a; _i_a++) { + var _privateFields = all[_i_a]._private[p.field]; + var _keys = Object.keys(_privateFields); + for (var _i2 = 0; _i2 < _keys.length; _i2++) { + var _key = _keys[_i2]; + var validKeyToDelete = !p.immutableKeys[_key]; + if (validKeyToDelete) { + _privateFields[_key] = undefined; + } + } + } + if (p.triggerEvent) { + self[p.triggerFnName](p.event); + } + } + return self; // maintain chaining + }; // function + } // removeData +}; // define + +var define$1 = { + eventAliasesOn: function eventAliasesOn(proto) { + var p = proto; + p.addListener = p.listen = p.bind = p.on; + p.unlisten = p.unbind = p.off = p.removeListener; + p.trigger = p.emit; + + // this is just a wrapper alias of .on() + p.pon = p.promiseOn = function (events, selector) { + var self = this; + var args = Array.prototype.slice.call(arguments, 0); + return new Promise$1(function (resolve, reject) { + var callback = function callback(e) { + self.off.apply(self, offArgs); + resolve(e); + }; + var onArgs = args.concat([callback]); + var offArgs = onArgs.concat([]); + self.on.apply(self, onArgs); + }); + }; + } +}; // define + +// use this module to cherry pick functions into your prototype +var cytoscape_esm_define = {}; +[define$3, define$2, define$1].forEach(function (m) { + extend(cytoscape_esm_define, m); +}); + +var elesfn$i = { + animate: cytoscape_esm_define.animate(), + animation: cytoscape_esm_define.animation(), + animated: cytoscape_esm_define.animated(), + clearQueue: cytoscape_esm_define.clearQueue(), + delay: cytoscape_esm_define.delay(), + delayAnimation: cytoscape_esm_define.delayAnimation(), + stop: cytoscape_esm_define.stop() +}; + +var elesfn$h = { + classes: function classes(_classes) { + var self = this; + if (_classes === undefined) { + var ret = []; + self[0]._private.classes.forEach(function (cls) { + return ret.push(cls); + }); + return ret; + } else if (!array(_classes)) { + // extract classes from string + _classes = (_classes || '').match(/\S+/g) || []; + } + var changed = []; + var classesSet = new Set$1(_classes); + + // check and update each ele + for (var j = 0; j < self.length; j++) { + var ele = self[j]; + var _p = ele._private; + var eleClasses = _p.classes; + var changedEle = false; + + // check if ele has all of the passed classes + for (var i = 0; i < _classes.length; i++) { + var cls = _classes[i]; + var eleHasClass = eleClasses.has(cls); + if (!eleHasClass) { + changedEle = true; + break; + } + } + + // check if ele has classes outside of those passed + if (!changedEle) { + changedEle = eleClasses.size !== _classes.length; + } + if (changedEle) { + _p.classes = classesSet; + changed.push(ele); + } + } + + // trigger update style on those eles that had class changes + if (changed.length > 0) { + this.spawn(changed).updateStyle().emit('class'); + } + return self; + }, + addClass: function addClass(classes) { + return this.toggleClass(classes, true); + }, + hasClass: function hasClass(className) { + var ele = this[0]; + return ele != null && ele._private.classes.has(className); + }, + toggleClass: function toggleClass(classes, toggle) { + if (!array(classes)) { + // extract classes from string + classes = classes.match(/\S+/g) || []; + } + var self = this; + var toggleUndefd = toggle === undefined; + var changed = []; // eles who had classes changed + + for (var i = 0, il = self.length; i < il; i++) { + var ele = self[i]; + var eleClasses = ele._private.classes; + var changedEle = false; + for (var j = 0; j < classes.length; j++) { + var cls = classes[j]; + var hasClass = eleClasses.has(cls); + var changedNow = false; + if (toggle || toggleUndefd && !hasClass) { + eleClasses.add(cls); + changedNow = true; + } else if (!toggle || toggleUndefd && hasClass) { + eleClasses["delete"](cls); + changedNow = true; + } + if (!changedEle && changedNow) { + changed.push(ele); + changedEle = true; + } + } // for j classes + } // for i eles + + // trigger update style on those eles that had class changes + if (changed.length > 0) { + this.spawn(changed).updateStyle().emit('class'); + } + return self; + }, + removeClass: function removeClass(classes) { + return this.toggleClass(classes, false); + }, + flashClass: function flashClass(classes, duration) { + var self = this; + if (duration == null) { + duration = 250; + } else if (duration === 0) { + return self; // nothing to do really + } + + self.addClass(classes); + setTimeout(function () { + self.removeClass(classes); + }, duration); + return self; + } +}; +elesfn$h.className = elesfn$h.classNames = elesfn$h.classes; + +// tokens in the query language +var tokens = { + metaChar: '[\\!\\"\\#\\$\\%\\&\\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]', + // chars we need to escape in let names, etc + comparatorOp: '=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=', + // binary comparison op (used in data selectors) + boolOp: '\\?|\\!|\\^', + // boolean (unary) operators (used in data selectors) + string: '"(?:\\\\"|[^"])*"' + '|' + "'(?:\\\\'|[^'])*'", + // string literals (used in data selectors) -- doublequotes | singlequotes + number: number, + // number literal (used in data selectors) --- e.g. 0.1234, 1234, 12e123 + meta: 'degree|indegree|outdegree', + // allowed metadata fields (i.e. allowed functions to use from Collection) + separator: '\\s*,\\s*', + // queries are separated by commas, e.g. edge[foo = 'bar'], node.someClass + descendant: '\\s+', + child: '\\s+>\\s+', + subject: '\\$', + group: 'node|edge|\\*', + directedEdge: '\\s+->\\s+', + undirectedEdge: '\\s+<->\\s+' +}; +tokens.variable = '(?:[\\w-.]|(?:\\\\' + tokens.metaChar + '))+'; // a variable name can have letters, numbers, dashes, and periods +tokens.className = '(?:[\\w-]|(?:\\\\' + tokens.metaChar + '))+'; // a class name has the same rules as a variable except it can't have a '.' in the name +tokens.value = tokens.string + '|' + tokens.number; // a value literal, either a string or number +tokens.id = tokens.variable; // an element id (follows variable conventions) + +(function () { + var ops, op, i; + + // add @ variants to comparatorOp + ops = tokens.comparatorOp.split('|'); + for (i = 0; i < ops.length; i++) { + op = ops[i]; + tokens.comparatorOp += '|@' + op; + } + + // add ! variants to comparatorOp + ops = tokens.comparatorOp.split('|'); + for (i = 0; i < ops.length; i++) { + op = ops[i]; + if (op.indexOf('!') >= 0) { + continue; + } // skip ops that explicitly contain ! + if (op === '=') { + continue; + } // skip = b/c != is explicitly defined + + tokens.comparatorOp += '|\\!' + op; + } +})(); + +/** + * Make a new query object + * + * @prop type {Type} The type enum (int) of the query + * @prop checks List of checks to make against an ele to test for a match + */ +var newQuery = function newQuery() { + return { + checks: [] + }; +}; + +/** + * A check type enum-like object. Uses integer values for fast match() lookup. + * The ordering does not matter as long as the ints are unique. + */ +var Type = { + /** E.g. node */ + GROUP: 0, + /** A collection of elements */ + COLLECTION: 1, + /** A filter(ele) function */ + FILTER: 2, + /** E.g. [foo > 1] */ + DATA_COMPARE: 3, + /** E.g. [foo] */ + DATA_EXIST: 4, + /** E.g. [?foo] */ + DATA_BOOL: 5, + /** E.g. [[degree > 2]] */ + META_COMPARE: 6, + /** E.g. :selected */ + STATE: 7, + /** E.g. #foo */ + ID: 8, + /** E.g. .foo */ + CLASS: 9, + /** E.g. #foo <-> #bar */ + UNDIRECTED_EDGE: 10, + /** E.g. #foo -> #bar */ + DIRECTED_EDGE: 11, + /** E.g. $#foo -> #bar */ + NODE_SOURCE: 12, + /** E.g. #foo -> $#bar */ + NODE_TARGET: 13, + /** E.g. $#foo <-> #bar */ + NODE_NEIGHBOR: 14, + /** E.g. #foo > #bar */ + CHILD: 15, + /** E.g. #foo #bar */ + DESCENDANT: 16, + /** E.g. $#foo > #bar */ + PARENT: 17, + /** E.g. $#foo #bar */ + ANCESTOR: 18, + /** E.g. #foo > $bar > #baz */ + COMPOUND_SPLIT: 19, + /** Always matches, useful placeholder for subject in `COMPOUND_SPLIT` */ + TRUE: 20 +}; + +var stateSelectors = [{ + selector: ':selected', + matches: function matches(ele) { + return ele.selected(); + } +}, { + selector: ':unselected', + matches: function matches(ele) { + return !ele.selected(); + } +}, { + selector: ':selectable', + matches: function matches(ele) { + return ele.selectable(); + } +}, { + selector: ':unselectable', + matches: function matches(ele) { + return !ele.selectable(); + } +}, { + selector: ':locked', + matches: function matches(ele) { + return ele.locked(); + } +}, { + selector: ':unlocked', + matches: function matches(ele) { + return !ele.locked(); + } +}, { + selector: ':visible', + matches: function matches(ele) { + return ele.visible(); + } +}, { + selector: ':hidden', + matches: function matches(ele) { + return !ele.visible(); + } +}, { + selector: ':transparent', + matches: function matches(ele) { + return ele.transparent(); + } +}, { + selector: ':grabbed', + matches: function matches(ele) { + return ele.grabbed(); + } +}, { + selector: ':free', + matches: function matches(ele) { + return !ele.grabbed(); + } +}, { + selector: ':removed', + matches: function matches(ele) { + return ele.removed(); + } +}, { + selector: ':inside', + matches: function matches(ele) { + return !ele.removed(); + } +}, { + selector: ':grabbable', + matches: function matches(ele) { + return ele.grabbable(); + } +}, { + selector: ':ungrabbable', + matches: function matches(ele) { + return !ele.grabbable(); + } +}, { + selector: ':animated', + matches: function matches(ele) { + return ele.animated(); + } +}, { + selector: ':unanimated', + matches: function matches(ele) { + return !ele.animated(); + } +}, { + selector: ':parent', + matches: function matches(ele) { + return ele.isParent(); + } +}, { + selector: ':childless', + matches: function matches(ele) { + return ele.isChildless(); + } +}, { + selector: ':child', + matches: function matches(ele) { + return ele.isChild(); + } +}, { + selector: ':orphan', + matches: function matches(ele) { + return ele.isOrphan(); + } +}, { + selector: ':nonorphan', + matches: function matches(ele) { + return ele.isChild(); + } +}, { + selector: ':compound', + matches: function matches(ele) { + if (ele.isNode()) { + return ele.isParent(); + } else { + return ele.source().isParent() || ele.target().isParent(); + } + } +}, { + selector: ':loop', + matches: function matches(ele) { + return ele.isLoop(); + } +}, { + selector: ':simple', + matches: function matches(ele) { + return ele.isSimple(); + } +}, { + selector: ':active', + matches: function matches(ele) { + return ele.active(); + } +}, { + selector: ':inactive', + matches: function matches(ele) { + return !ele.active(); + } +}, { + selector: ':backgrounding', + matches: function matches(ele) { + return ele.backgrounding(); + } +}, { + selector: ':nonbackgrounding', + matches: function matches(ele) { + return !ele.backgrounding(); + } +}].sort(function (a, b) { + // n.b. selectors that are starting substrings of others must have the longer ones first + return descending(a.selector, b.selector); +}); +var lookup = function () { + var selToFn = {}; + var s; + for (var i = 0; i < stateSelectors.length; i++) { + s = stateSelectors[i]; + selToFn[s.selector] = s.matches; + } + return selToFn; +}(); +var stateSelectorMatches = function stateSelectorMatches(sel, ele) { + return lookup[sel](ele); +}; +var stateSelectorRegex = '(' + stateSelectors.map(function (s) { + return s.selector; +}).join('|') + ')'; + +// when a token like a variable has escaped meta characters, we need to clean the backslashes out +// so that values get compared properly in Selector.filter() +var cleanMetaChars = function cleanMetaChars(str) { + return str.replace(new RegExp('\\\\(' + tokens.metaChar + ')', 'g'), function (match, $1) { + return $1; + }); +}; +var replaceLastQuery = function replaceLastQuery(selector, examiningQuery, replacementQuery) { + selector[selector.length - 1] = replacementQuery; +}; + +// NOTE: add new expression syntax here to have it recognised by the parser; +// - a query contains all adjacent (i.e. no separator in between) expressions; +// - the current query is stored in selector[i] +// - you need to check the query objects in match() for it actually filter properly, but that's pretty straight forward +var exprs = [{ + name: 'group', + // just used for identifying when debugging + query: true, + regex: '(' + tokens.group + ')', + populate: function populate(selector, query, _ref) { + var _ref2 = _slicedToArray(_ref, 1), + group = _ref2[0]; + query.checks.push({ + type: Type.GROUP, + value: group === '*' ? group : group + 's' + }); + } +}, { + name: 'state', + query: true, + regex: stateSelectorRegex, + populate: function populate(selector, query, _ref3) { + var _ref4 = _slicedToArray(_ref3, 1), + state = _ref4[0]; + query.checks.push({ + type: Type.STATE, + value: state + }); + } +}, { + name: 'id', + query: true, + regex: '\\#(' + tokens.id + ')', + populate: function populate(selector, query, _ref5) { + var _ref6 = _slicedToArray(_ref5, 1), + id = _ref6[0]; + query.checks.push({ + type: Type.ID, + value: cleanMetaChars(id) + }); + } +}, { + name: 'className', + query: true, + regex: '\\.(' + tokens.className + ')', + populate: function populate(selector, query, _ref7) { + var _ref8 = _slicedToArray(_ref7, 1), + className = _ref8[0]; + query.checks.push({ + type: Type.CLASS, + value: cleanMetaChars(className) + }); + } +}, { + name: 'dataExists', + query: true, + regex: '\\[\\s*(' + tokens.variable + ')\\s*\\]', + populate: function populate(selector, query, _ref9) { + var _ref10 = _slicedToArray(_ref9, 1), + variable = _ref10[0]; + query.checks.push({ + type: Type.DATA_EXIST, + field: cleanMetaChars(variable) + }); + } +}, { + name: 'dataCompare', + query: true, + regex: '\\[\\s*(' + tokens.variable + ')\\s*(' + tokens.comparatorOp + ')\\s*(' + tokens.value + ')\\s*\\]', + populate: function populate(selector, query, _ref11) { + var _ref12 = _slicedToArray(_ref11, 3), + variable = _ref12[0], + comparatorOp = _ref12[1], + value = _ref12[2]; + var valueIsString = new RegExp('^' + tokens.string + '$').exec(value) != null; + if (valueIsString) { + value = value.substring(1, value.length - 1); + } else { + value = parseFloat(value); + } + query.checks.push({ + type: Type.DATA_COMPARE, + field: cleanMetaChars(variable), + operator: comparatorOp, + value: value + }); + } +}, { + name: 'dataBool', + query: true, + regex: '\\[\\s*(' + tokens.boolOp + ')\\s*(' + tokens.variable + ')\\s*\\]', + populate: function populate(selector, query, _ref13) { + var _ref14 = _slicedToArray(_ref13, 2), + boolOp = _ref14[0], + variable = _ref14[1]; + query.checks.push({ + type: Type.DATA_BOOL, + field: cleanMetaChars(variable), + operator: boolOp + }); + } +}, { + name: 'metaCompare', + query: true, + regex: '\\[\\[\\s*(' + tokens.meta + ')\\s*(' + tokens.comparatorOp + ')\\s*(' + tokens.number + ')\\s*\\]\\]', + populate: function populate(selector, query, _ref15) { + var _ref16 = _slicedToArray(_ref15, 3), + meta = _ref16[0], + comparatorOp = _ref16[1], + number = _ref16[2]; + query.checks.push({ + type: Type.META_COMPARE, + field: cleanMetaChars(meta), + operator: comparatorOp, + value: parseFloat(number) + }); + } +}, { + name: 'nextQuery', + separator: true, + regex: tokens.separator, + populate: function populate(selector, query) { + var currentSubject = selector.currentSubject; + var edgeCount = selector.edgeCount; + var compoundCount = selector.compoundCount; + var lastQ = selector[selector.length - 1]; + if (currentSubject != null) { + lastQ.subject = currentSubject; + selector.currentSubject = null; + } + lastQ.edgeCount = edgeCount; + lastQ.compoundCount = compoundCount; + selector.edgeCount = 0; + selector.compoundCount = 0; + + // go on to next query + var nextQuery = selector[selector.length++] = newQuery(); + return nextQuery; // this is the new query to be filled by the following exprs + } +}, { + name: 'directedEdge', + separator: true, + regex: tokens.directedEdge, + populate: function populate(selector, query) { + if (selector.currentSubject == null) { + // undirected edge + var edgeQuery = newQuery(); + var source = query; + var target = newQuery(); + edgeQuery.checks.push({ + type: Type.DIRECTED_EDGE, + source: source, + target: target + }); + + // the query in the selector should be the edge rather than the source + replaceLastQuery(selector, query, edgeQuery); + selector.edgeCount++; + + // we're now populating the target query with expressions that follow + return target; + } else { + // source/target + var srcTgtQ = newQuery(); + var _source = query; + var _target = newQuery(); + srcTgtQ.checks.push({ + type: Type.NODE_SOURCE, + source: _source, + target: _target + }); + + // the query in the selector should be the neighbourhood rather than the node + replaceLastQuery(selector, query, srcTgtQ); + selector.edgeCount++; + return _target; // now populating the target with the following expressions + } + } +}, { + name: 'undirectedEdge', + separator: true, + regex: tokens.undirectedEdge, + populate: function populate(selector, query) { + if (selector.currentSubject == null) { + // undirected edge + var edgeQuery = newQuery(); + var source = query; + var target = newQuery(); + edgeQuery.checks.push({ + type: Type.UNDIRECTED_EDGE, + nodes: [source, target] + }); + + // the query in the selector should be the edge rather than the source + replaceLastQuery(selector, query, edgeQuery); + selector.edgeCount++; + + // we're now populating the target query with expressions that follow + return target; + } else { + // neighbourhood + var nhoodQ = newQuery(); + var node = query; + var neighbor = newQuery(); + nhoodQ.checks.push({ + type: Type.NODE_NEIGHBOR, + node: node, + neighbor: neighbor + }); + + // the query in the selector should be the neighbourhood rather than the node + replaceLastQuery(selector, query, nhoodQ); + return neighbor; // now populating the neighbor with following expressions + } + } +}, { + name: 'child', + separator: true, + regex: tokens.child, + populate: function populate(selector, query) { + if (selector.currentSubject == null) { + // default: child query + var parentChildQuery = newQuery(); + var child = newQuery(); + var parent = selector[selector.length - 1]; + parentChildQuery.checks.push({ + type: Type.CHILD, + parent: parent, + child: child + }); + + // the query in the selector should be the '>' itself + replaceLastQuery(selector, query, parentChildQuery); + selector.compoundCount++; + + // we're now populating the child query with expressions that follow + return child; + } else if (selector.currentSubject === query) { + // compound split query + var compound = newQuery(); + var left = selector[selector.length - 1]; + var right = newQuery(); + var subject = newQuery(); + var _child = newQuery(); + var _parent = newQuery(); + + // set up the root compound q + compound.checks.push({ + type: Type.COMPOUND_SPLIT, + left: left, + right: right, + subject: subject + }); + + // populate the subject and replace the q at the old spot (within left) with TRUE + subject.checks = query.checks; // take the checks from the left + query.checks = [{ + type: Type.TRUE + }]; // checks under left refs the subject implicitly + + // set up the right q + _parent.checks.push({ + type: Type.TRUE + }); // parent implicitly refs the subject + right.checks.push({ + type: Type.PARENT, + // type is swapped on right side queries + parent: _parent, + child: _child // empty for now + }); + + replaceLastQuery(selector, left, compound); + + // update the ref since we moved things around for `query` + selector.currentSubject = subject; + selector.compoundCount++; + return _child; // now populating the right side's child + } else { + // parent query + // info for parent query + var _parent2 = newQuery(); + var _child2 = newQuery(); + var pcQChecks = [{ + type: Type.PARENT, + parent: _parent2, + child: _child2 + }]; + + // the parent-child query takes the place of the query previously being populated + _parent2.checks = query.checks; // the previous query contains the checks for the parent + query.checks = pcQChecks; // pc query takes over + + selector.compoundCount++; + return _child2; // we're now populating the child + } + } +}, { + name: 'descendant', + separator: true, + regex: tokens.descendant, + populate: function populate(selector, query) { + if (selector.currentSubject == null) { + // default: descendant query + var ancChQuery = newQuery(); + var descendant = newQuery(); + var ancestor = selector[selector.length - 1]; + ancChQuery.checks.push({ + type: Type.DESCENDANT, + ancestor: ancestor, + descendant: descendant + }); + + // the query in the selector should be the '>' itself + replaceLastQuery(selector, query, ancChQuery); + selector.compoundCount++; + + // we're now populating the descendant query with expressions that follow + return descendant; + } else if (selector.currentSubject === query) { + // compound split query + var compound = newQuery(); + var left = selector[selector.length - 1]; + var right = newQuery(); + var subject = newQuery(); + var _descendant = newQuery(); + var _ancestor = newQuery(); + + // set up the root compound q + compound.checks.push({ + type: Type.COMPOUND_SPLIT, + left: left, + right: right, + subject: subject + }); + + // populate the subject and replace the q at the old spot (within left) with TRUE + subject.checks = query.checks; // take the checks from the left + query.checks = [{ + type: Type.TRUE + }]; // checks under left refs the subject implicitly + + // set up the right q + _ancestor.checks.push({ + type: Type.TRUE + }); // ancestor implicitly refs the subject + right.checks.push({ + type: Type.ANCESTOR, + // type is swapped on right side queries + ancestor: _ancestor, + descendant: _descendant // empty for now + }); + + replaceLastQuery(selector, left, compound); + + // update the ref since we moved things around for `query` + selector.currentSubject = subject; + selector.compoundCount++; + return _descendant; // now populating the right side's descendant + } else { + // ancestor query + // info for parent query + var _ancestor2 = newQuery(); + var _descendant2 = newQuery(); + var adQChecks = [{ + type: Type.ANCESTOR, + ancestor: _ancestor2, + descendant: _descendant2 + }]; + + // the parent-child query takes the place of the query previously being populated + _ancestor2.checks = query.checks; // the previous query contains the checks for the parent + query.checks = adQChecks; // pc query takes over + + selector.compoundCount++; + return _descendant2; // we're now populating the child + } + } +}, { + name: 'subject', + modifier: true, + regex: tokens.subject, + populate: function populate(selector, query) { + if (selector.currentSubject != null && selector.currentSubject !== query) { + warn('Redefinition of subject in selector `' + selector.toString() + '`'); + return false; + } + selector.currentSubject = query; + var topQ = selector[selector.length - 1]; + var topChk = topQ.checks[0]; + var topType = topChk == null ? null : topChk.type; + if (topType === Type.DIRECTED_EDGE) { + // directed edge with subject on the target + + // change to target node check + topChk.type = Type.NODE_TARGET; + } else if (topType === Type.UNDIRECTED_EDGE) { + // undirected edge with subject on the second node + + // change to neighbor check + topChk.type = Type.NODE_NEIGHBOR; + topChk.node = topChk.nodes[1]; // second node is subject + topChk.neighbor = topChk.nodes[0]; + + // clean up unused fields for new type + topChk.nodes = null; + } + } +}]; +exprs.forEach(function (e) { + return e.regexObj = new RegExp('^' + e.regex); +}); + +/** + * Of all the expressions, find the first match in the remaining text. + * @param {string} remaining The remaining text to parse + * @returns The matched expression and the newly remaining text `{ expr, match, name, remaining }` + */ +var consumeExpr = function consumeExpr(remaining) { + var expr; + var match; + var name; + for (var j = 0; j < exprs.length; j++) { + var e = exprs[j]; + var n = e.name; + var m = remaining.match(e.regexObj); + if (m != null) { + match = m; + expr = e; + name = n; + var consumed = m[0]; + remaining = remaining.substring(consumed.length); + break; // we've consumed one expr, so we can return now + } + } + + return { + expr: expr, + match: match, + name: name, + remaining: remaining + }; +}; + +/** + * Consume all the leading whitespace + * @param {string} remaining The text to consume + * @returns The text with the leading whitespace removed + */ +var consumeWhitespace = function consumeWhitespace(remaining) { + var match = remaining.match(/^\s+/); + if (match) { + var consumed = match[0]; + remaining = remaining.substring(consumed.length); + } + return remaining; +}; + +/** + * Parse the string and store the parsed representation in the Selector. + * @param {string} selector The selector string + * @returns `true` if the selector was successfully parsed, `false` otherwise + */ +var parse = function parse(selector) { + var self = this; + var remaining = self.inputText = selector; + var currentQuery = self[0] = newQuery(); + self.length = 1; + remaining = consumeWhitespace(remaining); // get rid of leading whitespace + + for (;;) { + var exprInfo = consumeExpr(remaining); + if (exprInfo.expr == null) { + warn('The selector `' + selector + '`is invalid'); + return false; + } else { + var args = exprInfo.match.slice(1); + + // let the token populate the selector object in currentQuery + var ret = exprInfo.expr.populate(self, currentQuery, args); + if (ret === false) { + return false; // exit if population failed + } else if (ret != null) { + currentQuery = ret; // change the current query to be filled if the expr specifies + } + } + + remaining = exprInfo.remaining; + + // we're done when there's nothing left to parse + if (remaining.match(/^\s*$/)) { + break; + } + } + var lastQ = self[self.length - 1]; + if (self.currentSubject != null) { + lastQ.subject = self.currentSubject; + } + lastQ.edgeCount = self.edgeCount; + lastQ.compoundCount = self.compoundCount; + for (var i = 0; i < self.length; i++) { + var q = self[i]; + + // in future, this could potentially be allowed if there were operator precedence and detection of invalid combinations + if (q.compoundCount > 0 && q.edgeCount > 0) { + warn('The selector `' + selector + '` is invalid because it uses both a compound selector and an edge selector'); + return false; + } + if (q.edgeCount > 1) { + warn('The selector `' + selector + '` is invalid because it uses multiple edge selectors'); + return false; + } else if (q.edgeCount === 1) { + warn('The selector `' + selector + '` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.'); + } + } + return true; // success +}; + +/** + * Get the selector represented as a string. This value uses default formatting, + * so things like spacing may differ from the input text passed to the constructor. + * @returns {string} The selector string + */ +var cytoscape_esm_toString = function toString() { + if (this.toStringCache != null) { + return this.toStringCache; + } + var clean = function clean(obj) { + if (obj == null) { + return ''; + } else { + return obj; + } + }; + var cleanVal = function cleanVal(val) { + if (string(val)) { + return '"' + val + '"'; + } else { + return clean(val); + } + }; + var space = function space(val) { + return ' ' + val + ' '; + }; + var checkToString = function checkToString(check, subject) { + var type = check.type, + value = check.value; + switch (type) { + case Type.GROUP: + { + var group = clean(value); + return group.substring(0, group.length - 1); + } + case Type.DATA_COMPARE: + { + var field = check.field, + operator = check.operator; + return '[' + field + space(clean(operator)) + cleanVal(value) + ']'; + } + case Type.DATA_BOOL: + { + var _operator = check.operator, + _field = check.field; + return '[' + clean(_operator) + _field + ']'; + } + case Type.DATA_EXIST: + { + var _field2 = check.field; + return '[' + _field2 + ']'; + } + case Type.META_COMPARE: + { + var _operator2 = check.operator, + _field3 = check.field; + return '[[' + _field3 + space(clean(_operator2)) + cleanVal(value) + ']]'; + } + case Type.STATE: + { + return value; + } + case Type.ID: + { + return '#' + value; + } + case Type.CLASS: + { + return '.' + value; + } + case Type.PARENT: + case Type.CHILD: + { + return queryToString(check.parent, subject) + space('>') + queryToString(check.child, subject); + } + case Type.ANCESTOR: + case Type.DESCENDANT: + { + return queryToString(check.ancestor, subject) + ' ' + queryToString(check.descendant, subject); + } + case Type.COMPOUND_SPLIT: + { + var lhs = queryToString(check.left, subject); + var sub = queryToString(check.subject, subject); + var rhs = queryToString(check.right, subject); + return lhs + (lhs.length > 0 ? ' ' : '') + sub + rhs; + } + case Type.TRUE: + { + return ''; + } + } + }; + var queryToString = function queryToString(query, subject) { + return query.checks.reduce(function (str, chk, i) { + return str + (subject === query && i === 0 ? '$' : '') + checkToString(chk, subject); + }, ''); + }; + var str = ''; + for (var i = 0; i < this.length; i++) { + var query = this[i]; + str += queryToString(query, query.subject); + if (this.length > 1 && i < this.length - 1) { + str += ', '; + } + } + this.toStringCache = str; + return str; +}; +var parse$1 = { + parse: parse, + toString: cytoscape_esm_toString +}; + +var valCmp = function valCmp(fieldVal, operator, value) { + var matches; + var isFieldStr = string(fieldVal); + var isFieldNum = number$1(fieldVal); + var isValStr = string(value); + var fieldStr, valStr; + var caseInsensitive = false; + var notExpr = false; + var isIneqCmp = false; + if (operator.indexOf('!') >= 0) { + operator = operator.replace('!', ''); + notExpr = true; + } + if (operator.indexOf('@') >= 0) { + operator = operator.replace('@', ''); + caseInsensitive = true; + } + if (isFieldStr || isValStr || caseInsensitive) { + fieldStr = !isFieldStr && !isFieldNum ? '' : '' + fieldVal; + valStr = '' + value; + } + + // if we're doing a case insensitive comparison, then we're using a STRING comparison + // even if we're comparing numbers + if (caseInsensitive) { + fieldVal = fieldStr = fieldStr.toLowerCase(); + value = valStr = valStr.toLowerCase(); + } + switch (operator) { + case '*=': + matches = fieldStr.indexOf(valStr) >= 0; + break; + case '$=': + matches = fieldStr.indexOf(valStr, fieldStr.length - valStr.length) >= 0; + break; + case '^=': + matches = fieldStr.indexOf(valStr) === 0; + break; + case '=': + matches = fieldVal === value; + break; + case '>': + isIneqCmp = true; + matches = fieldVal > value; + break; + case '>=': + isIneqCmp = true; + matches = fieldVal >= value; + break; + case '<': + isIneqCmp = true; + matches = fieldVal < value; + break; + case '<=': + isIneqCmp = true; + matches = fieldVal <= value; + break; + default: + matches = false; + break; + } + + // apply the not op, but null vals for inequalities should always stay non-matching + if (notExpr && (fieldVal != null || !isIneqCmp)) { + matches = !matches; + } + return matches; +}; +var boolCmp = function boolCmp(fieldVal, operator) { + switch (operator) { + case '?': + return fieldVal ? true : false; + case '!': + return fieldVal ? false : true; + case '^': + return fieldVal === undefined; + } +}; +var existCmp = function existCmp(fieldVal) { + return fieldVal !== undefined; +}; +var data$1 = function data(ele, field) { + return ele.data(field); +}; +var meta = function meta(ele, field) { + return ele[field](); +}; + +/** A lookup of `match(check, ele)` functions by `Type` int */ +var match = []; + +/** + * Returns whether the query matches for the element + * @param query The `{ type, value, ... }` query object + * @param ele The element to compare against +*/ +var matches$1 = function matches(query, ele) { + return query.checks.every(function (chk) { + return match[chk.type](chk, ele); + }); +}; +match[Type.GROUP] = function (check, ele) { + var group = check.value; + return group === '*' || group === ele.group(); +}; +match[Type.STATE] = function (check, ele) { + var stateSelector = check.value; + return stateSelectorMatches(stateSelector, ele); +}; +match[Type.ID] = function (check, ele) { + var id = check.value; + return ele.id() === id; +}; +match[Type.CLASS] = function (check, ele) { + var cls = check.value; + return ele.hasClass(cls); +}; +match[Type.META_COMPARE] = function (check, ele) { + var field = check.field, + operator = check.operator, + value = check.value; + return valCmp(meta(ele, field), operator, value); +}; +match[Type.DATA_COMPARE] = function (check, ele) { + var field = check.field, + operator = check.operator, + value = check.value; + return valCmp(data$1(ele, field), operator, value); +}; +match[Type.DATA_BOOL] = function (check, ele) { + var field = check.field, + operator = check.operator; + return boolCmp(data$1(ele, field), operator); +}; +match[Type.DATA_EXIST] = function (check, ele) { + var field = check.field; + check.operator; + return existCmp(data$1(ele, field)); +}; +match[Type.UNDIRECTED_EDGE] = function (check, ele) { + var qA = check.nodes[0]; + var qB = check.nodes[1]; + var src = ele.source(); + var tgt = ele.target(); + return matches$1(qA, src) && matches$1(qB, tgt) || matches$1(qB, src) && matches$1(qA, tgt); +}; +match[Type.NODE_NEIGHBOR] = function (check, ele) { + return matches$1(check.node, ele) && ele.neighborhood().some(function (n) { + return n.isNode() && matches$1(check.neighbor, n); + }); +}; +match[Type.DIRECTED_EDGE] = function (check, ele) { + return matches$1(check.source, ele.source()) && matches$1(check.target, ele.target()); +}; +match[Type.NODE_SOURCE] = function (check, ele) { + return matches$1(check.source, ele) && ele.outgoers().some(function (n) { + return n.isNode() && matches$1(check.target, n); + }); +}; +match[Type.NODE_TARGET] = function (check, ele) { + return matches$1(check.target, ele) && ele.incomers().some(function (n) { + return n.isNode() && matches$1(check.source, n); + }); +}; +match[Type.CHILD] = function (check, ele) { + return matches$1(check.child, ele) && matches$1(check.parent, ele.parent()); +}; +match[Type.PARENT] = function (check, ele) { + return matches$1(check.parent, ele) && ele.children().some(function (c) { + return matches$1(check.child, c); + }); +}; +match[Type.DESCENDANT] = function (check, ele) { + return matches$1(check.descendant, ele) && ele.ancestors().some(function (a) { + return matches$1(check.ancestor, a); + }); +}; +match[Type.ANCESTOR] = function (check, ele) { + return matches$1(check.ancestor, ele) && ele.descendants().some(function (d) { + return matches$1(check.descendant, d); + }); +}; +match[Type.COMPOUND_SPLIT] = function (check, ele) { + return matches$1(check.subject, ele) && matches$1(check.left, ele) && matches$1(check.right, ele); +}; +match[Type.TRUE] = function () { + return true; +}; +match[Type.COLLECTION] = function (check, ele) { + var collection = check.value; + return collection.has(ele); +}; +match[Type.FILTER] = function (check, ele) { + var filter = check.value; + return filter(ele); +}; + +// filter an existing collection +var filter = function filter(collection) { + var self = this; + + // for 1 id #foo queries, just get the element + if (self.length === 1 && self[0].checks.length === 1 && self[0].checks[0].type === Type.ID) { + return collection.getElementById(self[0].checks[0].value).collection(); + } + var selectorFunction = function selectorFunction(element) { + for (var j = 0; j < self.length; j++) { + var query = self[j]; + if (matches$1(query, element)) { + return true; + } + } + return false; + }; + if (self.text() == null) { + selectorFunction = function selectorFunction() { + return true; + }; + } + return collection.filter(selectorFunction); +}; // filter + +// does selector match a single element? +var matches = function matches(ele) { + var self = this; + for (var j = 0; j < self.length; j++) { + var query = self[j]; + if (matches$1(query, ele)) { + return true; + } + } + return false; +}; // matches + +var matching = { + matches: matches, + filter: filter +}; + +var Selector = function Selector(selector) { + this.inputText = selector; + this.currentSubject = null; + this.compoundCount = 0; + this.edgeCount = 0; + this.length = 0; + if (selector == null || string(selector) && selector.match(/^\s*$/)) ; else if (elementOrCollection(selector)) { + this.addQuery({ + checks: [{ + type: Type.COLLECTION, + value: selector.collection() + }] + }); + } else if (fn$6(selector)) { + this.addQuery({ + checks: [{ + type: Type.FILTER, + value: selector + }] + }); + } else if (string(selector)) { + if (!this.parse(selector)) { + this.invalid = true; + } + } else { + error('A selector must be created from a string; found '); + } +}; +var selfn = Selector.prototype; +[parse$1, matching].forEach(function (p) { + return extend(selfn, p); +}); +selfn.text = function () { + return this.inputText; +}; +selfn.size = function () { + return this.length; +}; +selfn.eq = function (i) { + return this[i]; +}; +selfn.sameText = function (otherSel) { + return !this.invalid && !otherSel.invalid && this.text() === otherSel.text(); +}; +selfn.addQuery = function (q) { + this[this.length++] = q; +}; +selfn.selector = selfn.toString; + +var elesfn$g = { + allAre: function allAre(selector) { + var selObj = new Selector(selector); + return this.every(function (ele) { + return selObj.matches(ele); + }); + }, + is: function is(selector) { + var selObj = new Selector(selector); + return this.some(function (ele) { + return selObj.matches(ele); + }); + }, + some: function some(fn, thisArg) { + for (var i = 0; i < this.length; i++) { + var ret = !thisArg ? fn(this[i], i, this) : fn.apply(thisArg, [this[i], i, this]); + if (ret) { + return true; + } + } + return false; + }, + every: function every(fn, thisArg) { + for (var i = 0; i < this.length; i++) { + var ret = !thisArg ? fn(this[i], i, this) : fn.apply(thisArg, [this[i], i, this]); + if (!ret) { + return false; + } + } + return true; + }, + same: function same(collection) { + // cheap collection ref check + if (this === collection) { + return true; + } + collection = this.cy().collection(collection); + var thisLength = this.length; + var collectionLength = collection.length; + + // cheap length check + if (thisLength !== collectionLength) { + return false; + } + + // cheap element ref check + if (thisLength === 1) { + return this[0] === collection[0]; + } + return this.every(function (ele) { + return collection.hasElementWithId(ele.id()); + }); + }, + anySame: function anySame(collection) { + collection = this.cy().collection(collection); + return this.some(function (ele) { + return collection.hasElementWithId(ele.id()); + }); + }, + allAreNeighbors: function allAreNeighbors(collection) { + collection = this.cy().collection(collection); + var nhood = this.neighborhood(); + return collection.every(function (ele) { + return nhood.hasElementWithId(ele.id()); + }); + }, + contains: function contains(collection) { + collection = this.cy().collection(collection); + var self = this; + return collection.every(function (ele) { + return self.hasElementWithId(ele.id()); + }); + } +}; +elesfn$g.allAreNeighbours = elesfn$g.allAreNeighbors; +elesfn$g.has = elesfn$g.contains; +elesfn$g.equal = elesfn$g.equals = elesfn$g.same; + +var cache = function cache(fn, name) { + return function traversalCache(arg1, arg2, arg3, arg4) { + var selectorOrEles = arg1; + var eles = this; + var key; + if (selectorOrEles == null) { + key = ''; + } else if (elementOrCollection(selectorOrEles) && selectorOrEles.length === 1) { + key = selectorOrEles.id(); + } + if (eles.length === 1 && key) { + var _p = eles[0]._private; + var tch = _p.traversalCache = _p.traversalCache || {}; + var ch = tch[name] = tch[name] || []; + var hash = hashString(key); + var cacheHit = ch[hash]; + if (cacheHit) { + return cacheHit; + } else { + return ch[hash] = fn.call(eles, arg1, arg2, arg3, arg4); + } + } else { + return fn.call(eles, arg1, arg2, arg3, arg4); + } + }; +}; + +var elesfn$f = { + parent: function parent(selector) { + var parents = []; + + // optimisation for single ele call + if (this.length === 1) { + var parent = this[0]._private.parent; + if (parent) { + return parent; + } + } + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var _parent = ele._private.parent; + if (_parent) { + parents.push(_parent); + } + } + return this.spawn(parents, true).filter(selector); + }, + parents: function parents(selector) { + var parents = []; + var eles = this.parent(); + while (eles.nonempty()) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + parents.push(ele); + } + eles = eles.parent(); + } + return this.spawn(parents, true).filter(selector); + }, + commonAncestors: function commonAncestors(selector) { + var ancestors; + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var parents = ele.parents(); + ancestors = ancestors || parents; + ancestors = ancestors.intersect(parents); // current list must be common with current ele parents set + } + + return ancestors.filter(selector); + }, + orphans: function orphans(selector) { + return this.stdFilter(function (ele) { + return ele.isOrphan(); + }).filter(selector); + }, + nonorphans: function nonorphans(selector) { + return this.stdFilter(function (ele) { + return ele.isChild(); + }).filter(selector); + }, + children: cache(function (selector) { + var children = []; + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var eleChildren = ele._private.children; + for (var j = 0; j < eleChildren.length; j++) { + children.push(eleChildren[j]); + } + } + return this.spawn(children, true).filter(selector); + }, 'children'), + siblings: function siblings(selector) { + return this.parent().children().not(this).filter(selector); + }, + isParent: function isParent() { + var ele = this[0]; + if (ele) { + return ele.isNode() && ele._private.children.length !== 0; + } + }, + isChildless: function isChildless() { + var ele = this[0]; + if (ele) { + return ele.isNode() && ele._private.children.length === 0; + } + }, + isChild: function isChild() { + var ele = this[0]; + if (ele) { + return ele.isNode() && ele._private.parent != null; + } + }, + isOrphan: function isOrphan() { + var ele = this[0]; + if (ele) { + return ele.isNode() && ele._private.parent == null; + } + }, + descendants: function descendants(selector) { + var elements = []; + function add(eles) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + elements.push(ele); + if (ele.children().nonempty()) { + add(ele.children()); + } + } + } + add(this.children()); + return this.spawn(elements, true).filter(selector); + } +}; +function forEachCompound(eles, fn, includeSelf, recursiveStep) { + var q = []; + var did = new Set$1(); + var cy = eles.cy(); + var hasCompounds = cy.hasCompoundNodes(); + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + if (includeSelf) { + q.push(ele); + } else if (hasCompounds) { + recursiveStep(q, did, ele); + } + } + while (q.length > 0) { + var _ele = q.shift(); + fn(_ele); + did.add(_ele.id()); + if (hasCompounds) { + recursiveStep(q, did, _ele); + } + } + return eles; +} +function addChildren(q, did, ele) { + if (ele.isParent()) { + var children = ele._private.children; + for (var i = 0; i < children.length; i++) { + var child = children[i]; + if (!did.has(child.id())) { + q.push(child); + } + } + } +} + +// very efficient version of eles.add( eles.descendants() ).forEach() +// for internal use +elesfn$f.forEachDown = function (fn) { + var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + return forEachCompound(this, fn, includeSelf, addChildren); +}; +function addParent(q, did, ele) { + if (ele.isChild()) { + var parent = ele._private.parent; + if (!did.has(parent.id())) { + q.push(parent); + } + } +} +elesfn$f.forEachUp = function (fn) { + var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + return forEachCompound(this, fn, includeSelf, addParent); +}; +function addParentAndChildren(q, did, ele) { + addParent(q, did, ele); + addChildren(q, did, ele); +} +elesfn$f.forEachUpAndDown = function (fn) { + var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + return forEachCompound(this, fn, includeSelf, addParentAndChildren); +}; + +// aliases +elesfn$f.ancestors = elesfn$f.parents; + +var fn$5, elesfn$e; +fn$5 = elesfn$e = { + data: cytoscape_esm_define.data({ + field: 'data', + bindingEvent: 'data', + allowBinding: true, + allowSetting: true, + settingEvent: 'data', + settingTriggersEvent: true, + triggerFnName: 'trigger', + allowGetting: true, + immutableKeys: { + 'id': true, + 'source': true, + 'target': true, + 'parent': true + }, + updateStyle: true + }), + removeData: cytoscape_esm_define.removeData({ + field: 'data', + event: 'data', + triggerFnName: 'trigger', + triggerEvent: true, + immutableKeys: { + 'id': true, + 'source': true, + 'target': true, + 'parent': true + }, + updateStyle: true + }), + scratch: cytoscape_esm_define.data({ + field: 'scratch', + bindingEvent: 'scratch', + allowBinding: true, + allowSetting: true, + settingEvent: 'scratch', + settingTriggersEvent: true, + triggerFnName: 'trigger', + allowGetting: true, + updateStyle: true + }), + removeScratch: cytoscape_esm_define.removeData({ + field: 'scratch', + event: 'scratch', + triggerFnName: 'trigger', + triggerEvent: true, + updateStyle: true + }), + rscratch: cytoscape_esm_define.data({ + field: 'rscratch', + allowBinding: false, + allowSetting: true, + settingTriggersEvent: false, + allowGetting: true + }), + removeRscratch: cytoscape_esm_define.removeData({ + field: 'rscratch', + triggerEvent: false + }), + id: function id() { + var ele = this[0]; + if (ele) { + return ele._private.data.id; + } + } +}; + +// aliases +fn$5.attr = fn$5.data; +fn$5.removeAttr = fn$5.removeData; +var data = elesfn$e; + +var elesfn$d = {}; +function defineDegreeFunction(callback) { + return function (includeLoops) { + var self = this; + if (includeLoops === undefined) { + includeLoops = true; + } + if (self.length === 0) { + return; + } + if (self.isNode() && !self.removed()) { + var degree = 0; + var node = self[0]; + var connectedEdges = node._private.edges; + for (var i = 0; i < connectedEdges.length; i++) { + var edge = connectedEdges[i]; + if (!includeLoops && edge.isLoop()) { + continue; + } + degree += callback(node, edge); + } + return degree; + } else { + return; + } + }; +} +extend(elesfn$d, { + degree: defineDegreeFunction(function (node, edge) { + if (edge.source().same(edge.target())) { + return 2; + } else { + return 1; + } + }), + indegree: defineDegreeFunction(function (node, edge) { + if (edge.target().same(node)) { + return 1; + } else { + return 0; + } + }), + outdegree: defineDegreeFunction(function (node, edge) { + if (edge.source().same(node)) { + return 1; + } else { + return 0; + } + }) +}); +function defineDegreeBoundsFunction(degreeFn, callback) { + return function (includeLoops) { + var ret; + var nodes = this.nodes(); + for (var i = 0; i < nodes.length; i++) { + var ele = nodes[i]; + var degree = ele[degreeFn](includeLoops); + if (degree !== undefined && (ret === undefined || callback(degree, ret))) { + ret = degree; + } + } + return ret; + }; +} +extend(elesfn$d, { + minDegree: defineDegreeBoundsFunction('degree', function (degree, min) { + return degree < min; + }), + maxDegree: defineDegreeBoundsFunction('degree', function (degree, max) { + return degree > max; + }), + minIndegree: defineDegreeBoundsFunction('indegree', function (degree, min) { + return degree < min; + }), + maxIndegree: defineDegreeBoundsFunction('indegree', function (degree, max) { + return degree > max; + }), + minOutdegree: defineDegreeBoundsFunction('outdegree', function (degree, min) { + return degree < min; + }), + maxOutdegree: defineDegreeBoundsFunction('outdegree', function (degree, max) { + return degree > max; + }) +}); +extend(elesfn$d, { + totalDegree: function totalDegree(includeLoops) { + var total = 0; + var nodes = this.nodes(); + for (var i = 0; i < nodes.length; i++) { + total += nodes[i].degree(includeLoops); + } + return total; + } +}); + +var fn$4, elesfn$c; +var beforePositionSet = function beforePositionSet(eles, newPos, silent) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + if (!ele.locked()) { + var oldPos = ele._private.position; + var delta = { + x: newPos.x != null ? newPos.x - oldPos.x : 0, + y: newPos.y != null ? newPos.y - oldPos.y : 0 + }; + if (ele.isParent() && !(delta.x === 0 && delta.y === 0)) { + ele.children().shift(delta, silent); + } + ele.dirtyBoundingBoxCache(); + } + } +}; +var positionDef = { + field: 'position', + bindingEvent: 'position', + allowBinding: true, + allowSetting: true, + settingEvent: 'position', + settingTriggersEvent: true, + triggerFnName: 'emitAndNotify', + allowGetting: true, + validKeys: ['x', 'y'], + beforeGet: function beforeGet(ele) { + ele.updateCompoundBounds(); + }, + beforeSet: function beforeSet(eles, newPos) { + beforePositionSet(eles, newPos, false); + }, + onSet: function onSet(eles) { + eles.dirtyCompoundBoundsCache(); + }, + canSet: function canSet(ele) { + return !ele.locked(); + } +}; +fn$4 = elesfn$c = { + position: cytoscape_esm_define.data(positionDef), + // position but no notification to renderer + silentPosition: cytoscape_esm_define.data(extend({}, positionDef, { + allowBinding: false, + allowSetting: true, + settingTriggersEvent: false, + allowGetting: false, + beforeSet: function beforeSet(eles, newPos) { + beforePositionSet(eles, newPos, true); + }, + onSet: function onSet(eles) { + eles.dirtyCompoundBoundsCache(); + } + })), + positions: function positions(pos, silent) { + if (plainObject(pos)) { + if (silent) { + this.silentPosition(pos); + } else { + this.position(pos); + } + } else if (fn$6(pos)) { + var _fn = pos; + var cy = this.cy(); + cy.startBatch(); + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var _pos = void 0; + if (_pos = _fn(ele, i)) { + if (silent) { + ele.silentPosition(_pos); + } else { + ele.position(_pos); + } + } + } + cy.endBatch(); + } + return this; // chaining + }, + + silentPositions: function silentPositions(pos) { + return this.positions(pos, true); + }, + shift: function shift(dim, val, silent) { + var delta; + if (plainObject(dim)) { + delta = { + x: number$1(dim.x) ? dim.x : 0, + y: number$1(dim.y) ? dim.y : 0 + }; + silent = val; + } else if (string(dim) && number$1(val)) { + delta = { + x: 0, + y: 0 + }; + delta[dim] = val; + } + if (delta != null) { + var cy = this.cy(); + cy.startBatch(); + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + + // exclude any node that is a descendant of the calling collection + if (cy.hasCompoundNodes() && ele.isChild() && ele.ancestors().anySame(this)) { + continue; + } + var pos = ele.position(); + var newPos = { + x: pos.x + delta.x, + y: pos.y + delta.y + }; + if (silent) { + ele.silentPosition(newPos); + } else { + ele.position(newPos); + } + } + cy.endBatch(); + } + return this; + }, + silentShift: function silentShift(dim, val) { + if (plainObject(dim)) { + this.shift(dim, true); + } else if (string(dim) && number$1(val)) { + this.shift(dim, val, true); + } + return this; + }, + // get/set the rendered (i.e. on screen) positon of the element + renderedPosition: function renderedPosition(dim, val) { + var ele = this[0]; + var cy = this.cy(); + var zoom = cy.zoom(); + var pan = cy.pan(); + var rpos = plainObject(dim) ? dim : undefined; + var setting = rpos !== undefined || val !== undefined && string(dim); + if (ele && ele.isNode()) { + // must have an element and must be a node to return position + if (setting) { + for (var i = 0; i < this.length; i++) { + var _ele = this[i]; + if (val !== undefined) { + // set one dimension + _ele.position(dim, (val - pan[dim]) / zoom); + } else if (rpos !== undefined) { + // set whole position + _ele.position(renderedToModelPosition(rpos, zoom, pan)); + } + } + } else { + // getting + var pos = ele.position(); + rpos = modelToRenderedPosition(pos, zoom, pan); + if (dim === undefined) { + // then return the whole rendered position + return rpos; + } else { + // then return the specified dimension + return rpos[dim]; + } + } + } else if (!setting) { + return undefined; // for empty collection case + } + + return this; // chaining + }, + + // get/set the position relative to the parent + relativePosition: function relativePosition(dim, val) { + var ele = this[0]; + var cy = this.cy(); + var ppos = plainObject(dim) ? dim : undefined; + var setting = ppos !== undefined || val !== undefined && string(dim); + var hasCompoundNodes = cy.hasCompoundNodes(); + if (ele && ele.isNode()) { + // must have an element and must be a node to return position + if (setting) { + for (var i = 0; i < this.length; i++) { + var _ele2 = this[i]; + var parent = hasCompoundNodes ? _ele2.parent() : null; + var hasParent = parent && parent.length > 0; + var relativeToParent = hasParent; + if (hasParent) { + parent = parent[0]; + } + var origin = relativeToParent ? parent.position() : { + x: 0, + y: 0 + }; + if (val !== undefined) { + // set one dimension + _ele2.position(dim, val + origin[dim]); + } else if (ppos !== undefined) { + // set whole position + _ele2.position({ + x: ppos.x + origin.x, + y: ppos.y + origin.y + }); + } + } + } else { + // getting + var pos = ele.position(); + var _parent = hasCompoundNodes ? ele.parent() : null; + var _hasParent = _parent && _parent.length > 0; + var _relativeToParent = _hasParent; + if (_hasParent) { + _parent = _parent[0]; + } + var _origin = _relativeToParent ? _parent.position() : { + x: 0, + y: 0 + }; + ppos = { + x: pos.x - _origin.x, + y: pos.y - _origin.y + }; + if (dim === undefined) { + // then return the whole rendered position + return ppos; + } else { + // then return the specified dimension + return ppos[dim]; + } + } + } else if (!setting) { + return undefined; // for empty collection case + } + + return this; // chaining + } +}; + +// aliases +fn$4.modelPosition = fn$4.point = fn$4.position; +fn$4.modelPositions = fn$4.points = fn$4.positions; +fn$4.renderedPoint = fn$4.renderedPosition; +fn$4.relativePoint = fn$4.relativePosition; +var position = elesfn$c; + +var fn$3, elesfn$b; +fn$3 = elesfn$b = {}; +elesfn$b.renderedBoundingBox = function (options) { + var bb = this.boundingBox(options); + var cy = this.cy(); + var zoom = cy.zoom(); + var pan = cy.pan(); + var x1 = bb.x1 * zoom + pan.x; + var x2 = bb.x2 * zoom + pan.x; + var y1 = bb.y1 * zoom + pan.y; + var y2 = bb.y2 * zoom + pan.y; + return { + x1: x1, + x2: x2, + y1: y1, + y2: y2, + w: x2 - x1, + h: y2 - y1 + }; +}; +elesfn$b.dirtyCompoundBoundsCache = function () { + var silent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var cy = this.cy(); + if (!cy.styleEnabled() || !cy.hasCompoundNodes()) { + return this; + } + this.forEachUp(function (ele) { + if (ele.isParent()) { + var _p = ele._private; + _p.compoundBoundsClean = false; + _p.bbCache = null; + if (!silent) { + ele.emitAndNotify('bounds'); + } + } + }); + return this; +}; +elesfn$b.updateCompoundBounds = function () { + var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var cy = this.cy(); + + // not possible to do on non-compound graphs or with the style disabled + if (!cy.styleEnabled() || !cy.hasCompoundNodes()) { + return this; + } + + // save cycles when batching -- but bounds will be stale (or not exist yet) + if (!force && cy.batching()) { + return this; + } + function update(parent) { + if (!parent.isParent()) { + return; + } + var _p = parent._private; + var children = parent.children(); + var includeLabels = parent.pstyle('compound-sizing-wrt-labels').value === 'include'; + var min = { + width: { + val: parent.pstyle('min-width').pfValue, + left: parent.pstyle('min-width-bias-left'), + right: parent.pstyle('min-width-bias-right') + }, + height: { + val: parent.pstyle('min-height').pfValue, + top: parent.pstyle('min-height-bias-top'), + bottom: parent.pstyle('min-height-bias-bottom') + } + }; + var bb = children.boundingBox({ + includeLabels: includeLabels, + includeOverlays: false, + // updating the compound bounds happens outside of the regular + // cache cycle (i.e. before fired events) + useCache: false + }); + var pos = _p.position; + + // if children take up zero area then keep position and fall back on stylesheet w/h + if (bb.w === 0 || bb.h === 0) { + bb = { + w: parent.pstyle('width').pfValue, + h: parent.pstyle('height').pfValue + }; + bb.x1 = pos.x - bb.w / 2; + bb.x2 = pos.x + bb.w / 2; + bb.y1 = pos.y - bb.h / 2; + bb.y2 = pos.y + bb.h / 2; + } + function computeBiasValues(propDiff, propBias, propBiasComplement) { + var biasDiff = 0; + var biasComplementDiff = 0; + var biasTotal = propBias + propBiasComplement; + if (propDiff > 0 && biasTotal > 0) { + biasDiff = propBias / biasTotal * propDiff; + biasComplementDiff = propBiasComplement / biasTotal * propDiff; + } + return { + biasDiff: biasDiff, + biasComplementDiff: biasComplementDiff + }; + } + function computePaddingValues(width, height, paddingObject, relativeTo) { + // Assuming percentage is number from 0 to 1 + if (paddingObject.units === '%') { + switch (relativeTo) { + case 'width': + return width > 0 ? paddingObject.pfValue * width : 0; + case 'height': + return height > 0 ? paddingObject.pfValue * height : 0; + case 'average': + return width > 0 && height > 0 ? paddingObject.pfValue * (width + height) / 2 : 0; + case 'min': + return width > 0 && height > 0 ? width > height ? paddingObject.pfValue * height : paddingObject.pfValue * width : 0; + case 'max': + return width > 0 && height > 0 ? width > height ? paddingObject.pfValue * width : paddingObject.pfValue * height : 0; + default: + return 0; + } + } else if (paddingObject.units === 'px') { + return paddingObject.pfValue; + } else { + return 0; + } + } + var leftVal = min.width.left.value; + if (min.width.left.units === 'px' && min.width.val > 0) { + leftVal = leftVal * 100 / min.width.val; + } + var rightVal = min.width.right.value; + if (min.width.right.units === 'px' && min.width.val > 0) { + rightVal = rightVal * 100 / min.width.val; + } + var topVal = min.height.top.value; + if (min.height.top.units === 'px' && min.height.val > 0) { + topVal = topVal * 100 / min.height.val; + } + var bottomVal = min.height.bottom.value; + if (min.height.bottom.units === 'px' && min.height.val > 0) { + bottomVal = bottomVal * 100 / min.height.val; + } + var widthBiasDiffs = computeBiasValues(min.width.val - bb.w, leftVal, rightVal); + var diffLeft = widthBiasDiffs.biasDiff; + var diffRight = widthBiasDiffs.biasComplementDiff; + var heightBiasDiffs = computeBiasValues(min.height.val - bb.h, topVal, bottomVal); + var diffTop = heightBiasDiffs.biasDiff; + var diffBottom = heightBiasDiffs.biasComplementDiff; + _p.autoPadding = computePaddingValues(bb.w, bb.h, parent.pstyle('padding'), parent.pstyle('padding-relative-to').value); + _p.autoWidth = Math.max(bb.w, min.width.val); + pos.x = (-diffLeft + bb.x1 + bb.x2 + diffRight) / 2; + _p.autoHeight = Math.max(bb.h, min.height.val); + pos.y = (-diffTop + bb.y1 + bb.y2 + diffBottom) / 2; + } + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var _p = ele._private; + if (!_p.compoundBoundsClean || force) { + update(ele); + if (!cy.batching()) { + _p.compoundBoundsClean = true; + } + } + } + return this; +}; +var noninf = function noninf(x) { + if (x === Infinity || x === -Infinity) { + return 0; + } + return x; +}; +var updateBounds = function updateBounds(b, x1, y1, x2, y2) { + // don't update with zero area boxes + if (x2 - x1 === 0 || y2 - y1 === 0) { + return; + } + + // don't update with null dim + if (x1 == null || y1 == null || x2 == null || y2 == null) { + return; + } + b.x1 = x1 < b.x1 ? x1 : b.x1; + b.x2 = x2 > b.x2 ? x2 : b.x2; + b.y1 = y1 < b.y1 ? y1 : b.y1; + b.y2 = y2 > b.y2 ? y2 : b.y2; + b.w = b.x2 - b.x1; + b.h = b.y2 - b.y1; +}; +var updateBoundsFromBox = function updateBoundsFromBox(b, b2) { + if (b2 == null) { + return b; + } + return updateBounds(b, b2.x1, b2.y1, b2.x2, b2.y2); +}; +var prefixedProperty = function prefixedProperty(obj, field, prefix) { + return getPrefixedProperty(obj, field, prefix); +}; +var updateBoundsFromArrow = function updateBoundsFromArrow(bounds, ele, prefix) { + if (ele.cy().headless()) { + return; + } + var _p = ele._private; + var rstyle = _p.rstyle; + var halfArW = rstyle.arrowWidth / 2; + var arrowType = ele.pstyle(prefix + '-arrow-shape').value; + var x; + var y; + if (arrowType !== 'none') { + if (prefix === 'source') { + x = rstyle.srcX; + y = rstyle.srcY; + } else if (prefix === 'target') { + x = rstyle.tgtX; + y = rstyle.tgtY; + } else { + x = rstyle.midX; + y = rstyle.midY; + } + + // always store the individual arrow bounds + var bbs = _p.arrowBounds = _p.arrowBounds || {}; + var bb = bbs[prefix] = bbs[prefix] || {}; + bb.x1 = x - halfArW; + bb.y1 = y - halfArW; + bb.x2 = x + halfArW; + bb.y2 = y + halfArW; + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + expandBoundingBox(bb, 1); + updateBounds(bounds, bb.x1, bb.y1, bb.x2, bb.y2); + } +}; +var updateBoundsFromLabel = function updateBoundsFromLabel(bounds, ele, prefix) { + if (ele.cy().headless()) { + return; + } + var prefixDash; + if (prefix) { + prefixDash = prefix + '-'; + } else { + prefixDash = ''; + } + var _p = ele._private; + var rstyle = _p.rstyle; + var label = ele.pstyle(prefixDash + 'label').strValue; + if (label) { + var halign = ele.pstyle('text-halign'); + var valign = ele.pstyle('text-valign'); + var labelWidth = prefixedProperty(rstyle, 'labelWidth', prefix); + var labelHeight = prefixedProperty(rstyle, 'labelHeight', prefix); + var labelX = prefixedProperty(rstyle, 'labelX', prefix); + var labelY = prefixedProperty(rstyle, 'labelY', prefix); + var marginX = ele.pstyle(prefixDash + 'text-margin-x').pfValue; + var marginY = ele.pstyle(prefixDash + 'text-margin-y').pfValue; + var isEdge = ele.isEdge(); + var rotation = ele.pstyle(prefixDash + 'text-rotation'); + var outlineWidth = ele.pstyle('text-outline-width').pfValue; + var borderWidth = ele.pstyle('text-border-width').pfValue; + var halfBorderWidth = borderWidth / 2; + var padding = ele.pstyle('text-background-padding').pfValue; + var marginOfError = 2; // expand to work around browser dimension inaccuracies + + var lh = labelHeight; + var lw = labelWidth; + var lw_2 = lw / 2; + var lh_2 = lh / 2; + var lx1, lx2, ly1, ly2; + if (isEdge) { + lx1 = labelX - lw_2; + lx2 = labelX + lw_2; + ly1 = labelY - lh_2; + ly2 = labelY + lh_2; + } else { + switch (halign.value) { + case 'left': + lx1 = labelX - lw; + lx2 = labelX; + break; + case 'center': + lx1 = labelX - lw_2; + lx2 = labelX + lw_2; + break; + case 'right': + lx1 = labelX; + lx2 = labelX + lw; + break; + } + switch (valign.value) { + case 'top': + ly1 = labelY - lh; + ly2 = labelY; + break; + case 'center': + ly1 = labelY - lh_2; + ly2 = labelY + lh_2; + break; + case 'bottom': + ly1 = labelY; + ly2 = labelY + lh; + break; + } + } + + // shift by margin and expand by outline and border + lx1 += marginX - Math.max(outlineWidth, halfBorderWidth) - padding - marginOfError; + lx2 += marginX + Math.max(outlineWidth, halfBorderWidth) + padding + marginOfError; + ly1 += marginY - Math.max(outlineWidth, halfBorderWidth) - padding - marginOfError; + ly2 += marginY + Math.max(outlineWidth, halfBorderWidth) + padding + marginOfError; + + // always store the unrotated label bounds separately + var bbPrefix = prefix || 'main'; + var bbs = _p.labelBounds; + var bb = bbs[bbPrefix] = bbs[bbPrefix] || {}; + bb.x1 = lx1; + bb.y1 = ly1; + bb.x2 = lx2; + bb.y2 = ly2; + bb.w = lx2 - lx1; + bb.h = ly2 - ly1; + var isAutorotate = isEdge && rotation.strValue === 'autorotate'; + var isPfValue = rotation.pfValue != null && rotation.pfValue !== 0; + if (isAutorotate || isPfValue) { + var theta = isAutorotate ? prefixedProperty(_p.rstyle, 'labelAngle', prefix) : rotation.pfValue; + var cos = Math.cos(theta); + var sin = Math.sin(theta); + + // rotation point (default value for center-center) + var xo = (lx1 + lx2) / 2; + var yo = (ly1 + ly2) / 2; + if (!isEdge) { + switch (halign.value) { + case 'left': + xo = lx2; + break; + case 'right': + xo = lx1; + break; + } + switch (valign.value) { + case 'top': + yo = ly2; + break; + case 'bottom': + yo = ly1; + break; + } + } + var rotate = function rotate(x, y) { + x = x - xo; + y = y - yo; + return { + x: x * cos - y * sin + xo, + y: x * sin + y * cos + yo + }; + }; + var px1y1 = rotate(lx1, ly1); + var px1y2 = rotate(lx1, ly2); + var px2y1 = rotate(lx2, ly1); + var px2y2 = rotate(lx2, ly2); + lx1 = Math.min(px1y1.x, px1y2.x, px2y1.x, px2y2.x); + lx2 = Math.max(px1y1.x, px1y2.x, px2y1.x, px2y2.x); + ly1 = Math.min(px1y1.y, px1y2.y, px2y1.y, px2y2.y); + ly2 = Math.max(px1y1.y, px1y2.y, px2y1.y, px2y2.y); + } + var bbPrefixRot = bbPrefix + 'Rot'; + var bbRot = bbs[bbPrefixRot] = bbs[bbPrefixRot] || {}; + bbRot.x1 = lx1; + bbRot.y1 = ly1; + bbRot.x2 = lx2; + bbRot.y2 = ly2; + bbRot.w = lx2 - lx1; + bbRot.h = ly2 - ly1; + updateBounds(bounds, lx1, ly1, lx2, ly2); + updateBounds(_p.labelBounds.all, lx1, ly1, lx2, ly2); + } + return bounds; +}; +var updateBoundsFromOutline = function updateBoundsFromOutline(bounds, ele) { + if (ele.cy().headless()) { + return; + } + var outlineOpacity = ele.pstyle('outline-opacity').value; + var outlineWidth = ele.pstyle('outline-width').value; + if (outlineOpacity > 0 && outlineWidth > 0) { + var outlineOffset = ele.pstyle('outline-offset').value; + var nodeShape = ele.pstyle('shape').value; + var outlineSize = outlineWidth + outlineOffset; + var scaleX = (bounds.w + outlineSize * 2) / bounds.w; + var scaleY = (bounds.h + outlineSize * 2) / bounds.h; + var xOffset = 0; + var yOffset = 0; + if (["diamond", "pentagon", "round-triangle"].includes(nodeShape)) { + scaleX = (bounds.w + outlineSize * 2.4) / bounds.w; + yOffset = -outlineSize / 3.6; + } else if (["concave-hexagon", "rhomboid", "right-rhomboid"].includes(nodeShape)) { + scaleX = (bounds.w + outlineSize * 2.4) / bounds.w; + } else if (nodeShape === "star") { + scaleX = (bounds.w + outlineSize * 2.8) / bounds.w; + scaleY = (bounds.h + outlineSize * 2.6) / bounds.h; + yOffset = -outlineSize / 3.8; + } else if (nodeShape === "triangle") { + scaleX = (bounds.w + outlineSize * 2.8) / bounds.w; + scaleY = (bounds.h + outlineSize * 2.4) / bounds.h; + yOffset = -outlineSize / 1.4; + } else if (nodeShape === "vee") { + scaleX = (bounds.w + outlineSize * 4.4) / bounds.w; + scaleY = (bounds.h + outlineSize * 3.8) / bounds.h; + yOffset = -outlineSize * .5; + } + var hDelta = bounds.h * scaleY - bounds.h; + var wDelta = bounds.w * scaleX - bounds.w; + expandBoundingBoxSides(bounds, [Math.ceil(hDelta / 2), Math.ceil(wDelta / 2)]); + if (xOffset != 0 || yOffset !== 0) { + var oBounds = shiftBoundingBox(bounds, xOffset, yOffset); + updateBoundingBox(bounds, oBounds); + } + } +}; + +// get the bounding box of the elements (in raw model position) +var boundingBoxImpl = function boundingBoxImpl(ele, options) { + var cy = ele._private.cy; + var styleEnabled = cy.styleEnabled(); + var headless = cy.headless(); + var bounds = makeBoundingBox(); + var _p = ele._private; + var isNode = ele.isNode(); + var isEdge = ele.isEdge(); + var ex1, ex2, ey1, ey2; // extrema of body / lines + var x, y; // node pos + var rstyle = _p.rstyle; + var manualExpansion = isNode && styleEnabled ? ele.pstyle('bounds-expansion').pfValue : [0]; + + // must use `display` prop only, as reading `compound.width()` causes recursion + // (other factors like width values will be considered later in this function anyway) + var isDisplayed = function isDisplayed(ele) { + return ele.pstyle('display').value !== 'none'; + }; + var displayed = !styleEnabled || isDisplayed(ele) + + // must take into account connected nodes b/c of implicit edge hiding on display:none node + && (!isEdge || isDisplayed(ele.source()) && isDisplayed(ele.target())); + if (displayed) { + // displayed suffices, since we will find zero area eles anyway + var overlayOpacity = 0; + var overlayPadding = 0; + if (styleEnabled && options.includeOverlays) { + overlayOpacity = ele.pstyle('overlay-opacity').value; + if (overlayOpacity !== 0) { + overlayPadding = ele.pstyle('overlay-padding').value; + } + } + var underlayOpacity = 0; + var underlayPadding = 0; + if (styleEnabled && options.includeUnderlays) { + underlayOpacity = ele.pstyle('underlay-opacity').value; + if (underlayOpacity !== 0) { + underlayPadding = ele.pstyle('underlay-padding').value; + } + } + var padding = Math.max(overlayPadding, underlayPadding); + var w = 0; + var wHalf = 0; + if (styleEnabled) { + w = ele.pstyle('width').pfValue; + wHalf = w / 2; + } + if (isNode && options.includeNodes) { + var pos = ele.position(); + x = pos.x; + y = pos.y; + var _w = ele.outerWidth(); + var halfW = _w / 2; + var h = ele.outerHeight(); + var halfH = h / 2; + + // handle node dimensions + ///////////////////////// + + ex1 = x - halfW; + ex2 = x + halfW; + ey1 = y - halfH; + ey2 = y + halfH; + updateBounds(bounds, ex1, ey1, ex2, ey2); + if (styleEnabled && options.includeOutlines) { + updateBoundsFromOutline(bounds, ele); + } + } else if (isEdge && options.includeEdges) { + if (styleEnabled && !headless) { + var curveStyle = ele.pstyle('curve-style').strValue; + + // handle edge dimensions (rough box estimate) + ////////////////////////////////////////////// + + ex1 = Math.min(rstyle.srcX, rstyle.midX, rstyle.tgtX); + ex2 = Math.max(rstyle.srcX, rstyle.midX, rstyle.tgtX); + ey1 = Math.min(rstyle.srcY, rstyle.midY, rstyle.tgtY); + ey2 = Math.max(rstyle.srcY, rstyle.midY, rstyle.tgtY); + + // take into account edge width + ex1 -= wHalf; + ex2 += wHalf; + ey1 -= wHalf; + ey2 += wHalf; + updateBounds(bounds, ex1, ey1, ex2, ey2); + + // precise edges + //////////////// + + if (curveStyle === 'haystack') { + var hpts = rstyle.haystackPts; + if (hpts && hpts.length === 2) { + ex1 = hpts[0].x; + ey1 = hpts[0].y; + ex2 = hpts[1].x; + ey2 = hpts[1].y; + if (ex1 > ex2) { + var temp = ex1; + ex1 = ex2; + ex2 = temp; + } + if (ey1 > ey2) { + var _temp = ey1; + ey1 = ey2; + ey2 = _temp; + } + updateBounds(bounds, ex1 - wHalf, ey1 - wHalf, ex2 + wHalf, ey2 + wHalf); + } + } else if (curveStyle === 'bezier' || curveStyle === 'unbundled-bezier' || curveStyle.endsWith('segments') || curveStyle.endsWith('taxi')) { + var pts; + switch (curveStyle) { + case 'bezier': + case 'unbundled-bezier': + pts = rstyle.bezierPts; + break; + case 'segments': + case 'taxi': + case 'round-segments': + case 'round-taxi': + pts = rstyle.linePts; + break; + } + if (pts != null) { + for (var j = 0; j < pts.length; j++) { + var pt = pts[j]; + ex1 = pt.x - wHalf; + ex2 = pt.x + wHalf; + ey1 = pt.y - wHalf; + ey2 = pt.y + wHalf; + updateBounds(bounds, ex1, ey1, ex2, ey2); + } + } + } // bezier-like or segment-like edge + } else { + // headless or style disabled + + // fallback on source and target positions + ////////////////////////////////////////// + + var n1 = ele.source(); + var n1pos = n1.position(); + var n2 = ele.target(); + var n2pos = n2.position(); + ex1 = n1pos.x; + ex2 = n2pos.x; + ey1 = n1pos.y; + ey2 = n2pos.y; + if (ex1 > ex2) { + var _temp2 = ex1; + ex1 = ex2; + ex2 = _temp2; + } + if (ey1 > ey2) { + var _temp3 = ey1; + ey1 = ey2; + ey2 = _temp3; + } + + // take into account edge width + ex1 -= wHalf; + ex2 += wHalf; + ey1 -= wHalf; + ey2 += wHalf; + updateBounds(bounds, ex1, ey1, ex2, ey2); + } // headless or style disabled + } // edges + + // handle edge arrow size + ///////////////////////// + + if (styleEnabled && options.includeEdges && isEdge) { + updateBoundsFromArrow(bounds, ele, 'mid-source'); + updateBoundsFromArrow(bounds, ele, 'mid-target'); + updateBoundsFromArrow(bounds, ele, 'source'); + updateBoundsFromArrow(bounds, ele, 'target'); + } + + // ghost + //////// + + if (styleEnabled) { + var ghost = ele.pstyle('ghost').value === 'yes'; + if (ghost) { + var gx = ele.pstyle('ghost-offset-x').pfValue; + var gy = ele.pstyle('ghost-offset-y').pfValue; + updateBounds(bounds, bounds.x1 + gx, bounds.y1 + gy, bounds.x2 + gx, bounds.y2 + gy); + } + } + + // always store the body bounds separately from the labels + var bbBody = _p.bodyBounds = _p.bodyBounds || {}; + assignBoundingBox(bbBody, bounds); + expandBoundingBoxSides(bbBody, manualExpansion); + expandBoundingBox(bbBody, 1); // expand to work around browser dimension inaccuracies + + // overlay + ////////// + + if (styleEnabled) { + ex1 = bounds.x1; + ex2 = bounds.x2; + ey1 = bounds.y1; + ey2 = bounds.y2; + updateBounds(bounds, ex1 - padding, ey1 - padding, ex2 + padding, ey2 + padding); + } + + // always store the body bounds separately from the labels + var bbOverlay = _p.overlayBounds = _p.overlayBounds || {}; + assignBoundingBox(bbOverlay, bounds); + expandBoundingBoxSides(bbOverlay, manualExpansion); + expandBoundingBox(bbOverlay, 1); // expand to work around browser dimension inaccuracies + + // handle label dimensions + ////////////////////////// + + var bbLabels = _p.labelBounds = _p.labelBounds || {}; + if (bbLabels.all != null) { + clearBoundingBox(bbLabels.all); + } else { + bbLabels.all = makeBoundingBox(); + } + if (styleEnabled && options.includeLabels) { + if (options.includeMainLabels) { + updateBoundsFromLabel(bounds, ele, null); + } + if (isEdge) { + if (options.includeSourceLabels) { + updateBoundsFromLabel(bounds, ele, 'source'); + } + if (options.includeTargetLabels) { + updateBoundsFromLabel(bounds, ele, 'target'); + } + } + } // style enabled for labels + } // if displayed + + bounds.x1 = noninf(bounds.x1); + bounds.y1 = noninf(bounds.y1); + bounds.x2 = noninf(bounds.x2); + bounds.y2 = noninf(bounds.y2); + bounds.w = noninf(bounds.x2 - bounds.x1); + bounds.h = noninf(bounds.y2 - bounds.y1); + if (bounds.w > 0 && bounds.h > 0 && displayed) { + expandBoundingBoxSides(bounds, manualExpansion); + + // expand bounds by 1 because antialiasing can increase the visual/effective size by 1 on all sides + expandBoundingBox(bounds, 1); + } + return bounds; +}; +var getKey = function getKey(opts) { + var i = 0; + var tf = function tf(val) { + return (val ? 1 : 0) << i++; + }; + var key = 0; + key += tf(opts.incudeNodes); + key += tf(opts.includeEdges); + key += tf(opts.includeLabels); + key += tf(opts.includeMainLabels); + key += tf(opts.includeSourceLabels); + key += tf(opts.includeTargetLabels); + key += tf(opts.includeOverlays); + key += tf(opts.includeOutlines); + return key; +}; +var getBoundingBoxPosKey = function getBoundingBoxPosKey(ele) { + if (ele.isEdge()) { + var p1 = ele.source().position(); + var p2 = ele.target().position(); + var r = function r(x) { + return Math.round(x); + }; + return hashIntsArray([r(p1.x), r(p1.y), r(p2.x), r(p2.y)]); + } else { + return 0; + } +}; +var cachedBoundingBoxImpl = function cachedBoundingBoxImpl(ele, opts) { + var _p = ele._private; + var bb; + var isEdge = ele.isEdge(); + var key = opts == null ? defBbOptsKey : getKey(opts); + var usingDefOpts = key === defBbOptsKey; + var currPosKey = getBoundingBoxPosKey(ele); + var isPosKeySame = _p.bbCachePosKey === currPosKey; + var useCache = opts.useCache && isPosKeySame; + var isDirty = function isDirty(ele) { + return ele._private.bbCache == null || ele._private.styleDirty; + }; + var needRecalc = !useCache || isDirty(ele) || isEdge && isDirty(ele.source()) || isDirty(ele.target()); + if (needRecalc) { + if (!isPosKeySame) { + ele.recalculateRenderedStyle(useCache); + } + bb = boundingBoxImpl(ele, defBbOpts); + _p.bbCache = bb; + _p.bbCachePosKey = currPosKey; + } else { + bb = _p.bbCache; + } + + // not using def opts => need to build up bb from combination of sub bbs + if (!usingDefOpts) { + var isNode = ele.isNode(); + bb = makeBoundingBox(); + if (opts.includeNodes && isNode || opts.includeEdges && !isNode) { + if (opts.includeOverlays) { + updateBoundsFromBox(bb, _p.overlayBounds); + } else { + updateBoundsFromBox(bb, _p.bodyBounds); + } + } + if (opts.includeLabels) { + if (opts.includeMainLabels && (!isEdge || opts.includeSourceLabels && opts.includeTargetLabels)) { + updateBoundsFromBox(bb, _p.labelBounds.all); + } else { + if (opts.includeMainLabels) { + updateBoundsFromBox(bb, _p.labelBounds.mainRot); + } + if (opts.includeSourceLabels) { + updateBoundsFromBox(bb, _p.labelBounds.sourceRot); + } + if (opts.includeTargetLabels) { + updateBoundsFromBox(bb, _p.labelBounds.targetRot); + } + } + } + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + } + return bb; +}; +var defBbOpts = { + includeNodes: true, + includeEdges: true, + includeLabels: true, + includeMainLabels: true, + includeSourceLabels: true, + includeTargetLabels: true, + includeOverlays: true, + includeUnderlays: true, + includeOutlines: true, + useCache: true +}; +var defBbOptsKey = getKey(defBbOpts); +var filledBbOpts = defaults$g(defBbOpts); +elesfn$b.boundingBox = function (options) { + var bounds; + + // the main usecase is ele.boundingBox() for a single element with no/def options + // specified s.t. the cache is used, so check for this case to make it faster by + // avoiding the overhead of the rest of the function + if (this.length === 1 && this[0]._private.bbCache != null && !this[0]._private.styleDirty && (options === undefined || options.useCache === undefined || options.useCache === true)) { + if (options === undefined) { + options = defBbOpts; + } else { + options = filledBbOpts(options); + } + bounds = cachedBoundingBoxImpl(this[0], options); + } else { + bounds = makeBoundingBox(); + options = options || defBbOpts; + var opts = filledBbOpts(options); + var eles = this; + var cy = eles.cy(); + var styleEnabled = cy.styleEnabled(); + if (styleEnabled) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _p = ele._private; + var currPosKey = getBoundingBoxPosKey(ele); + var isPosKeySame = _p.bbCachePosKey === currPosKey; + var useCache = opts.useCache && isPosKeySame && !_p.styleDirty; + ele.recalculateRenderedStyle(useCache); + } + } + this.updateCompoundBounds(!options.useCache); + for (var _i = 0; _i < eles.length; _i++) { + var _ele = eles[_i]; + updateBoundsFromBox(bounds, cachedBoundingBoxImpl(_ele, opts)); + } + } + bounds.x1 = noninf(bounds.x1); + bounds.y1 = noninf(bounds.y1); + bounds.x2 = noninf(bounds.x2); + bounds.y2 = noninf(bounds.y2); + bounds.w = noninf(bounds.x2 - bounds.x1); + bounds.h = noninf(bounds.y2 - bounds.y1); + return bounds; +}; +elesfn$b.dirtyBoundingBoxCache = function () { + for (var i = 0; i < this.length; i++) { + var _p = this[i]._private; + _p.bbCache = null; + _p.bbCachePosKey = null; + _p.bodyBounds = null; + _p.overlayBounds = null; + _p.labelBounds.all = null; + _p.labelBounds.source = null; + _p.labelBounds.target = null; + _p.labelBounds.main = null; + _p.labelBounds.sourceRot = null; + _p.labelBounds.targetRot = null; + _p.labelBounds.mainRot = null; + _p.arrowBounds.source = null; + _p.arrowBounds.target = null; + _p.arrowBounds['mid-source'] = null; + _p.arrowBounds['mid-target'] = null; + } + this.emitAndNotify('bounds'); + return this; +}; + +// private helper to get bounding box for custom node positions +// - good for perf in certain cases but currently requires dirtying the rendered style +// - would be better to not modify the nodes but the nodes are read directly everywhere in the renderer... +// - try to use for only things like discrete layouts where the node position would change anyway +elesfn$b.boundingBoxAt = function (fn) { + var nodes = this.nodes(); + var cy = this.cy(); + var hasCompoundNodes = cy.hasCompoundNodes(); + var parents = cy.collection(); + if (hasCompoundNodes) { + parents = nodes.filter(function (node) { + return node.isParent(); + }); + nodes = nodes.not(parents); + } + if (plainObject(fn)) { + var obj = fn; + fn = function fn() { + return obj; + }; + } + var storeOldPos = function storeOldPos(node, i) { + return node._private.bbAtOldPos = fn(node, i); + }; + var getOldPos = function getOldPos(node) { + return node._private.bbAtOldPos; + }; + cy.startBatch(); + nodes.forEach(storeOldPos).silentPositions(fn); + if (hasCompoundNodes) { + parents.dirtyCompoundBoundsCache(); + parents.dirtyBoundingBoxCache(); + parents.updateCompoundBounds(true); // force update b/c we're inside a batch cycle + } + + var bb = copyBoundingBox(this.boundingBox({ + useCache: false + })); + nodes.silentPositions(getOldPos); + if (hasCompoundNodes) { + parents.dirtyCompoundBoundsCache(); + parents.dirtyBoundingBoxCache(); + parents.updateCompoundBounds(true); // force update b/c we're inside a batch cycle + } + + cy.endBatch(); + return bb; +}; +fn$3.boundingbox = fn$3.bb = fn$3.boundingBox; +fn$3.renderedBoundingbox = fn$3.renderedBoundingBox; +var bounds = elesfn$b; + +var fn$2, elesfn$a; +fn$2 = elesfn$a = {}; +var defineDimFns = function defineDimFns(opts) { + opts.uppercaseName = capitalize(opts.name); + opts.autoName = 'auto' + opts.uppercaseName; + opts.labelName = 'label' + opts.uppercaseName; + opts.outerName = 'outer' + opts.uppercaseName; + opts.uppercaseOuterName = capitalize(opts.outerName); + fn$2[opts.name] = function dimImpl() { + var ele = this[0]; + var _p = ele._private; + var cy = _p.cy; + var styleEnabled = cy._private.styleEnabled; + if (ele) { + if (styleEnabled) { + if (ele.isParent()) { + ele.updateCompoundBounds(); + return _p[opts.autoName] || 0; + } + var d = ele.pstyle(opts.name); + switch (d.strValue) { + case 'label': + ele.recalculateRenderedStyle(); + return _p.rstyle[opts.labelName] || 0; + default: + return d.pfValue; + } + } else { + return 1; + } + } + }; + fn$2['outer' + opts.uppercaseName] = function outerDimImpl() { + var ele = this[0]; + var _p = ele._private; + var cy = _p.cy; + var styleEnabled = cy._private.styleEnabled; + if (ele) { + if (styleEnabled) { + var dim = ele[opts.name](); + var border = ele.pstyle('border-width').pfValue; // n.b. 1/2 each side + var padding = 2 * ele.padding(); + return dim + border + padding; + } else { + return 1; + } + } + }; + fn$2['rendered' + opts.uppercaseName] = function renderedDimImpl() { + var ele = this[0]; + if (ele) { + var d = ele[opts.name](); + return d * this.cy().zoom(); + } + }; + fn$2['rendered' + opts.uppercaseOuterName] = function renderedOuterDimImpl() { + var ele = this[0]; + if (ele) { + var od = ele[opts.outerName](); + return od * this.cy().zoom(); + } + }; +}; +defineDimFns({ + name: 'width' +}); +defineDimFns({ + name: 'height' +}); +elesfn$a.padding = function () { + var ele = this[0]; + var _p = ele._private; + if (ele.isParent()) { + ele.updateCompoundBounds(); + if (_p.autoPadding !== undefined) { + return _p.autoPadding; + } else { + return ele.pstyle('padding').pfValue; + } + } else { + return ele.pstyle('padding').pfValue; + } +}; +elesfn$a.paddedHeight = function () { + var ele = this[0]; + return ele.height() + 2 * ele.padding(); +}; +elesfn$a.paddedWidth = function () { + var ele = this[0]; + return ele.width() + 2 * ele.padding(); +}; +var widthHeight = elesfn$a; + +var ifEdge = function ifEdge(ele, getValue) { + if (ele.isEdge()) { + return getValue(ele); + } +}; +var ifEdgeRenderedPosition = function ifEdgeRenderedPosition(ele, getPoint) { + if (ele.isEdge()) { + var cy = ele.cy(); + return modelToRenderedPosition(getPoint(ele), cy.zoom(), cy.pan()); + } +}; +var ifEdgeRenderedPositions = function ifEdgeRenderedPositions(ele, getPoints) { + if (ele.isEdge()) { + var cy = ele.cy(); + var pan = cy.pan(); + var zoom = cy.zoom(); + return getPoints(ele).map(function (p) { + return modelToRenderedPosition(p, zoom, pan); + }); + } +}; +var controlPoints = function controlPoints(ele) { + return ele.renderer().getControlPoints(ele); +}; +var segmentPoints = function segmentPoints(ele) { + return ele.renderer().getSegmentPoints(ele); +}; +var sourceEndpoint = function sourceEndpoint(ele) { + return ele.renderer().getSourceEndpoint(ele); +}; +var targetEndpoint = function targetEndpoint(ele) { + return ele.renderer().getTargetEndpoint(ele); +}; +var midpoint = function midpoint(ele) { + return ele.renderer().getEdgeMidpoint(ele); +}; +var pts = { + controlPoints: { + get: controlPoints, + mult: true + }, + segmentPoints: { + get: segmentPoints, + mult: true + }, + sourceEndpoint: { + get: sourceEndpoint + }, + targetEndpoint: { + get: targetEndpoint + }, + midpoint: { + get: midpoint + } +}; +var renderedName = function renderedName(name) { + return 'rendered' + name[0].toUpperCase() + name.substr(1); +}; +var edgePoints = Object.keys(pts).reduce(function (obj, name) { + var spec = pts[name]; + var rName = renderedName(name); + obj[name] = function () { + return ifEdge(this, spec.get); + }; + if (spec.mult) { + obj[rName] = function () { + return ifEdgeRenderedPositions(this, spec.get); + }; + } else { + obj[rName] = function () { + return ifEdgeRenderedPosition(this, spec.get); + }; + } + return obj; +}, {}); + +var dimensions = extend({}, position, bounds, widthHeight, edgePoints); + +/*! +Event object based on jQuery events, MIT license + +https://jquery.org/license/ +https://tldrlegal.com/license/mit-license +https://github.com/jquery/jquery/blob/master/src/event.js +*/ + +var Event = function Event(src, props) { + this.recycle(src, props); +}; +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +Event.prototype = { + instanceString: function instanceString() { + return 'event'; + }, + recycle: function recycle(src, props) { + this.isImmediatePropagationStopped = this.isPropagationStopped = this.isDefaultPrevented = returnFalse; + if (src != null && src.preventDefault) { + // Browser Event object + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented ? returnTrue : returnFalse; + } else if (src != null && src.type) { + // Plain object containing all event details + props = src; + } else { + // Event string + this.type = src; + } + + // Put explicitly provided properties onto the event object + if (props != null) { + // more efficient to manually copy fields we use + this.originalEvent = props.originalEvent; + this.type = props.type != null ? props.type : this.type; + this.cy = props.cy; + this.target = props.target; + this.position = props.position; + this.renderedPosition = props.renderedPosition; + this.namespace = props.namespace; + this.layout = props.layout; + } + if (this.cy != null && this.position != null && this.renderedPosition == null) { + // create a rendered position based on the passed position + var pos = this.position; + var zoom = this.cy.zoom(); + var pan = this.cy.pan(); + this.renderedPosition = { + x: pos.x * zoom + pan.x, + y: pos.y * zoom + pan.y + }; + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + }, + preventDefault: function preventDefault() { + this.isDefaultPrevented = returnTrue; + var e = this.originalEvent; + if (!e) { + return; + } + + // if preventDefault exists run it on the original event + if (e.preventDefault) { + e.preventDefault(); + } + }, + stopPropagation: function stopPropagation() { + this.isPropagationStopped = returnTrue; + var e = this.originalEvent; + if (!e) { + return; + } + + // if stopPropagation exists run it on the original event + if (e.stopPropagation) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function stopImmediatePropagation() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +var eventRegex = /^([^.]+)(\.(?:[^.]+))?$/; // regex for matching event strings (e.g. "click.namespace") +var universalNamespace = '.*'; // matches as if no namespace specified and prevents users from unbinding accidentally + +var defaults$8 = { + qualifierCompare: function qualifierCompare(q1, q2) { + return q1 === q2; + }, + eventMatches: function eventMatches( /*context, listener, eventObj*/ + ) { + return true; + }, + addEventFields: function addEventFields( /*context, evt*/ + ) {}, + callbackContext: function callbackContext(context /*, listener, eventObj*/) { + return context; + }, + beforeEmit: function beforeEmit( /* context, listener, eventObj */ + ) {}, + afterEmit: function afterEmit( /* context, listener, eventObj */ + ) {}, + bubble: function bubble( /*context*/ + ) { + return false; + }, + parent: function parent( /*context*/ + ) { + return null; + }, + context: null +}; +var defaultsKeys = Object.keys(defaults$8); +var emptyOpts = {}; +function Emitter() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : emptyOpts; + var context = arguments.length > 1 ? arguments[1] : undefined; + // micro-optimisation vs Object.assign() -- reduces Element instantiation time + for (var i = 0; i < defaultsKeys.length; i++) { + var key = defaultsKeys[i]; + this[key] = opts[key] || defaults$8[key]; + } + this.context = context || this.context; + this.listeners = []; + this.emitting = 0; +} +var p = Emitter.prototype; +var forEachEvent = function forEachEvent(self, handler, events, qualifier, callback, conf, confOverrides) { + if (fn$6(qualifier)) { + callback = qualifier; + qualifier = null; + } + if (confOverrides) { + if (conf == null) { + conf = confOverrides; + } else { + conf = extend({}, conf, confOverrides); + } + } + var eventList = array(events) ? events : events.split(/\s+/); + for (var i = 0; i < eventList.length; i++) { + var evt = eventList[i]; + if (emptyString(evt)) { + continue; + } + var match = evt.match(eventRegex); // type[.namespace] + + if (match) { + var type = match[1]; + var namespace = match[2] ? match[2] : null; + var ret = handler(self, evt, type, namespace, qualifier, callback, conf); + if (ret === false) { + break; + } // allow exiting early + } + } +}; + +var makeEventObj = function makeEventObj(self, obj) { + self.addEventFields(self.context, obj); + return new Event(obj.type, obj); +}; +var forEachEventObj = function forEachEventObj(self, handler, events) { + if (cytoscape_esm_event(events)) { + handler(self, events); + return; + } else if (plainObject(events)) { + handler(self, makeEventObj(self, events)); + return; + } + var eventList = array(events) ? events : events.split(/\s+/); + for (var i = 0; i < eventList.length; i++) { + var evt = eventList[i]; + if (emptyString(evt)) { + continue; + } + var match = evt.match(eventRegex); // type[.namespace] + + if (match) { + var type = match[1]; + var namespace = match[2] ? match[2] : null; + var eventObj = makeEventObj(self, { + type: type, + namespace: namespace, + target: self.context + }); + handler(self, eventObj); + } + } +}; +p.on = p.addListener = function (events, qualifier, callback, conf, confOverrides) { + forEachEvent(this, function (self, event, type, namespace, qualifier, callback, conf) { + if (fn$6(callback)) { + self.listeners.push({ + event: event, + // full event string + callback: callback, + // callback to run + type: type, + // the event type (e.g. 'click') + namespace: namespace, + // the event namespace (e.g. ".foo") + qualifier: qualifier, + // a restriction on whether to match this emitter + conf: conf // additional configuration + }); + } + }, events, qualifier, callback, conf, confOverrides); + return this; +}; +p.one = function (events, qualifier, callback, conf) { + return this.on(events, qualifier, callback, conf, { + one: true + }); +}; +p.removeListener = p.off = function (events, qualifier, callback, conf) { + var _this = this; + if (this.emitting !== 0) { + this.listeners = copyArray$1(this.listeners); + } + var listeners = this.listeners; + var _loop = function _loop(i) { + var listener = listeners[i]; + forEachEvent(_this, function (self, event, type, namespace, qualifier, callback /*, conf*/) { + if ((listener.type === type || events === '*') && (!namespace && listener.namespace !== '.*' || listener.namespace === namespace) && (!qualifier || self.qualifierCompare(listener.qualifier, qualifier)) && (!callback || listener.callback === callback)) { + listeners.splice(i, 1); + return false; + } + }, events, qualifier, callback, conf); + }; + for (var i = listeners.length - 1; i >= 0; i--) { + _loop(i); + } + return this; +}; +p.removeAllListeners = function () { + return this.removeListener('*'); +}; +p.emit = p.trigger = function (events, extraParams, manualCallback) { + var listeners = this.listeners; + var numListenersBeforeEmit = listeners.length; + this.emitting++; + if (!array(extraParams)) { + extraParams = [extraParams]; + } + forEachEventObj(this, function (self, eventObj) { + if (manualCallback != null) { + listeners = [{ + event: eventObj.event, + type: eventObj.type, + namespace: eventObj.namespace, + callback: manualCallback + }]; + numListenersBeforeEmit = listeners.length; + } + var _loop2 = function _loop2(i) { + var listener = listeners[i]; + if (listener.type === eventObj.type && (!listener.namespace || listener.namespace === eventObj.namespace || listener.namespace === universalNamespace) && self.eventMatches(self.context, listener, eventObj)) { + var args = [eventObj]; + if (extraParams != null) { + push(args, extraParams); + } + self.beforeEmit(self.context, listener, eventObj); + if (listener.conf && listener.conf.one) { + self.listeners = self.listeners.filter(function (l) { + return l !== listener; + }); + } + var context = self.callbackContext(self.context, listener, eventObj); + var ret = listener.callback.apply(context, args); + self.afterEmit(self.context, listener, eventObj); + if (ret === false) { + eventObj.stopPropagation(); + eventObj.preventDefault(); + } + } // if listener matches + }; + for (var i = 0; i < numListenersBeforeEmit; i++) { + _loop2(i); + } // for listener + + if (self.bubble(self.context) && !eventObj.isPropagationStopped()) { + self.parent(self.context).emit(eventObj, extraParams); + } + }, events); + this.emitting--; + return this; +}; + +var emitterOptions$1 = { + qualifierCompare: function qualifierCompare(selector1, selector2) { + if (selector1 == null || selector2 == null) { + return selector1 == null && selector2 == null; + } else { + return selector1.sameText(selector2); + } + }, + eventMatches: function eventMatches(ele, listener, eventObj) { + var selector = listener.qualifier; + if (selector != null) { + return ele !== eventObj.target && cytoscape_esm_element(eventObj.target) && selector.matches(eventObj.target); + } + return true; + }, + addEventFields: function addEventFields(ele, evt) { + evt.cy = ele.cy(); + evt.target = ele; + }, + callbackContext: function callbackContext(ele, listener, eventObj) { + return listener.qualifier != null ? eventObj.target : ele; + }, + beforeEmit: function beforeEmit(context, listener /*, eventObj*/) { + if (listener.conf && listener.conf.once) { + listener.conf.onceCollection.removeListener(listener.event, listener.qualifier, listener.callback); + } + }, + bubble: function bubble() { + return true; + }, + parent: function parent(ele) { + return ele.isChild() ? ele.parent() : ele.cy(); + } +}; +var argSelector$1 = function argSelector(arg) { + if (string(arg)) { + return new Selector(arg); + } else { + return arg; + } +}; +var elesfn$9 = { + createEmitter: function createEmitter() { + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var _p = ele._private; + if (!_p.emitter) { + _p.emitter = new Emitter(emitterOptions$1, ele); + } + } + return this; + }, + emitter: function emitter() { + return this._private.emitter; + }, + on: function on(events, selector, callback) { + var argSel = argSelector$1(selector); + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().on(events, argSel, callback); + } + return this; + }, + removeListener: function removeListener(events, selector, callback) { + var argSel = argSelector$1(selector); + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().removeListener(events, argSel, callback); + } + return this; + }, + removeAllListeners: function removeAllListeners() { + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().removeAllListeners(); + } + return this; + }, + one: function one(events, selector, callback) { + var argSel = argSelector$1(selector); + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().one(events, argSel, callback); + } + return this; + }, + once: function once(events, selector, callback) { + var argSel = argSelector$1(selector); + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().on(events, argSel, callback, { + once: true, + onceCollection: this + }); + } + }, + emit: function emit(events, extraParams) { + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().emit(events, extraParams); + } + return this; + }, + emitAndNotify: function emitAndNotify(event, extraParams) { + // for internal use only + if (this.length === 0) { + return; + } // empty collections don't need to notify anything + + // notify renderer + this.cy().notify(event, this); + this.emit(event, extraParams); + return this; + } +}; +cytoscape_esm_define.eventAliasesOn(elesfn$9); + +var elesfn$8 = { + nodes: function nodes(selector) { + return this.filter(function (ele) { + return ele.isNode(); + }).filter(selector); + }, + edges: function edges(selector) { + return this.filter(function (ele) { + return ele.isEdge(); + }).filter(selector); + }, + // internal helper to get nodes and edges as separate collections with single iteration over elements + byGroup: function byGroup() { + var nodes = this.spawn(); + var edges = this.spawn(); + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + if (ele.isNode()) { + nodes.push(ele); + } else { + edges.push(ele); + } + } + return { + nodes: nodes, + edges: edges + }; + }, + filter: function filter(_filter, thisArg) { + if (_filter === undefined) { + // check this first b/c it's the most common/performant case + return this; + } else if (string(_filter) || elementOrCollection(_filter)) { + return new Selector(_filter).filter(this); + } else if (fn$6(_filter)) { + var filterEles = this.spawn(); + var eles = this; + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var include = thisArg ? _filter.apply(thisArg, [ele, i, eles]) : _filter(ele, i, eles); + if (include) { + filterEles.push(ele); + } + } + return filterEles; + } + return this.spawn(); // if not handled by above, give 'em an empty collection + }, + + not: function not(toRemove) { + if (!toRemove) { + return this; + } else { + if (string(toRemove)) { + toRemove = this.filter(toRemove); + } + var elements = this.spawn(); + for (var i = 0; i < this.length; i++) { + var element = this[i]; + var remove = toRemove.has(element); + if (!remove) { + elements.push(element); + } + } + return elements; + } + }, + absoluteComplement: function absoluteComplement() { + var cy = this.cy(); + return cy.mutableElements().not(this); + }, + intersect: function intersect(other) { + // if a selector is specified, then filter by it instead + if (string(other)) { + var selector = other; + return this.filter(selector); + } + var elements = this.spawn(); + var col1 = this; + var col2 = other; + var col1Smaller = this.length < other.length; + var colS = col1Smaller ? col1 : col2; + var colL = col1Smaller ? col2 : col1; + for (var i = 0; i < colS.length; i++) { + var ele = colS[i]; + if (colL.has(ele)) { + elements.push(ele); + } + } + return elements; + }, + xor: function xor(other) { + var cy = this._private.cy; + if (string(other)) { + other = cy.$(other); + } + var elements = this.spawn(); + var col1 = this; + var col2 = other; + var add = function add(col, other) { + for (var i = 0; i < col.length; i++) { + var ele = col[i]; + var id = ele._private.data.id; + var inOther = other.hasElementWithId(id); + if (!inOther) { + elements.push(ele); + } + } + }; + add(col1, col2); + add(col2, col1); + return elements; + }, + diff: function diff(other) { + var cy = this._private.cy; + if (string(other)) { + other = cy.$(other); + } + var left = this.spawn(); + var right = this.spawn(); + var both = this.spawn(); + var col1 = this; + var col2 = other; + var add = function add(col, other, retEles) { + for (var i = 0; i < col.length; i++) { + var ele = col[i]; + var id = ele._private.data.id; + var inOther = other.hasElementWithId(id); + if (inOther) { + both.merge(ele); + } else { + retEles.push(ele); + } + } + }; + add(col1, col2, left); + add(col2, col1, right); + return { + left: left, + right: right, + both: both + }; + }, + add: function add(toAdd) { + var cy = this._private.cy; + if (!toAdd) { + return this; + } + if (string(toAdd)) { + var selector = toAdd; + toAdd = cy.mutableElements().filter(selector); + } + var elements = this.spawnSelf(); + for (var i = 0; i < toAdd.length; i++) { + var ele = toAdd[i]; + var add = !this.has(ele); + if (add) { + elements.push(ele); + } + } + return elements; + }, + // in place merge on calling collection + merge: function merge(toAdd) { + var _p = this._private; + var cy = _p.cy; + if (!toAdd) { + return this; + } + if (toAdd && string(toAdd)) { + var selector = toAdd; + toAdd = cy.mutableElements().filter(selector); + } + var map = _p.map; + for (var i = 0; i < toAdd.length; i++) { + var toAddEle = toAdd[i]; + var id = toAddEle._private.data.id; + var add = !map.has(id); + if (add) { + var index = this.length++; + this[index] = toAddEle; + map.set(id, { + ele: toAddEle, + index: index + }); + } + } + return this; // chaining + }, + + unmergeAt: function unmergeAt(i) { + var ele = this[i]; + var id = ele.id(); + var _p = this._private; + var map = _p.map; + + // remove ele + this[i] = undefined; + map["delete"](id); + var unmergedLastEle = i === this.length - 1; + + // replace empty spot with last ele in collection + if (this.length > 1 && !unmergedLastEle) { + var lastEleI = this.length - 1; + var lastEle = this[lastEleI]; + var lastEleId = lastEle._private.data.id; + this[lastEleI] = undefined; + this[i] = lastEle; + map.set(lastEleId, { + ele: lastEle, + index: i + }); + } + + // the collection is now 1 ele smaller + this.length--; + return this; + }, + // remove single ele in place in calling collection + unmergeOne: function unmergeOne(ele) { + ele = ele[0]; + var _p = this._private; + var id = ele._private.data.id; + var map = _p.map; + var entry = map.get(id); + if (!entry) { + return this; // no need to remove + } + + var i = entry.index; + this.unmergeAt(i); + return this; + }, + // remove eles in place on calling collection + unmerge: function unmerge(toRemove) { + var cy = this._private.cy; + if (!toRemove) { + return this; + } + if (toRemove && string(toRemove)) { + var selector = toRemove; + toRemove = cy.mutableElements().filter(selector); + } + for (var i = 0; i < toRemove.length; i++) { + this.unmergeOne(toRemove[i]); + } + return this; // chaining + }, + + unmergeBy: function unmergeBy(toRmFn) { + for (var i = this.length - 1; i >= 0; i--) { + var ele = this[i]; + if (toRmFn(ele)) { + this.unmergeAt(i); + } + } + return this; + }, + map: function map(mapFn, thisArg) { + var arr = []; + var eles = this; + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var ret = thisArg ? mapFn.apply(thisArg, [ele, i, eles]) : mapFn(ele, i, eles); + arr.push(ret); + } + return arr; + }, + reduce: function reduce(fn, initialValue) { + var val = initialValue; + var eles = this; + for (var i = 0; i < eles.length; i++) { + val = fn(val, eles[i], i, eles); + } + return val; + }, + max: function max(valFn, thisArg) { + var max = -Infinity; + var maxEle; + var eles = this; + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var val = thisArg ? valFn.apply(thisArg, [ele, i, eles]) : valFn(ele, i, eles); + if (val > max) { + max = val; + maxEle = ele; + } + } + return { + value: max, + ele: maxEle + }; + }, + min: function min(valFn, thisArg) { + var min = Infinity; + var minEle; + var eles = this; + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var val = thisArg ? valFn.apply(thisArg, [ele, i, eles]) : valFn(ele, i, eles); + if (val < min) { + min = val; + minEle = ele; + } + } + return { + value: min, + ele: minEle + }; + } +}; + +// aliases +var fn$1 = elesfn$8; +fn$1['u'] = fn$1['|'] = fn$1['+'] = fn$1.union = fn$1.or = fn$1.add; +fn$1['\\'] = fn$1['!'] = fn$1['-'] = fn$1.difference = fn$1.relativeComplement = fn$1.subtract = fn$1.not; +fn$1['n'] = fn$1['&'] = fn$1['.'] = fn$1.and = fn$1.intersection = fn$1.intersect; +fn$1['^'] = fn$1['(+)'] = fn$1['(-)'] = fn$1.symmetricDifference = fn$1.symdiff = fn$1.xor; +fn$1.fnFilter = fn$1.filterFn = fn$1.stdFilter = fn$1.filter; +fn$1.complement = fn$1.abscomp = fn$1.absoluteComplement; + +var elesfn$7 = { + isNode: function isNode() { + return this.group() === 'nodes'; + }, + isEdge: function isEdge() { + return this.group() === 'edges'; + }, + isLoop: function isLoop() { + return this.isEdge() && this.source()[0] === this.target()[0]; + }, + isSimple: function isSimple() { + return this.isEdge() && this.source()[0] !== this.target()[0]; + }, + group: function group() { + var ele = this[0]; + if (ele) { + return ele._private.group; + } + } +}; + +/** + * Elements are drawn in a specific order based on compound depth (low to high), the element type (nodes above edges), + * and z-index (low to high). These styles affect how this applies: + * + * z-compound-depth: May be `bottom | orphan | auto | top`. The first drawn is `bottom`, then `orphan` which is the + * same depth as the root of the compound graph, followed by the default value `auto` which draws in order from + * root to leaves of the compound graph. The last drawn is `top`. + * z-index-compare: May be `auto | manual`. The default value is `auto` which always draws edges under nodes. + * `manual` ignores this convention and draws based on the `z-index` value setting. + * z-index: An integer value that affects the relative draw order of elements. In general, an element with a higher + * `z-index` will be drawn on top of an element with a lower `z-index`. + */ +var zIndexSort = function zIndexSort(a, b) { + var cy = a.cy(); + var hasCompoundNodes = cy.hasCompoundNodes(); + function getDepth(ele) { + var style = ele.pstyle('z-compound-depth'); + if (style.value === 'auto') { + return hasCompoundNodes ? ele.zDepth() : 0; + } else if (style.value === 'bottom') { + return -1; + } else if (style.value === 'top') { + return MAX_INT$1; + } + // 'orphan' + return 0; + } + var depthDiff = getDepth(a) - getDepth(b); + if (depthDiff !== 0) { + return depthDiff; + } + function getEleDepth(ele) { + var style = ele.pstyle('z-index-compare'); + if (style.value === 'auto') { + return ele.isNode() ? 1 : 0; + } + // 'manual' + return 0; + } + var eleDiff = getEleDepth(a) - getEleDepth(b); + if (eleDiff !== 0) { + return eleDiff; + } + var zDiff = a.pstyle('z-index').value - b.pstyle('z-index').value; + if (zDiff !== 0) { + return zDiff; + } + // compare indices in the core (order added to graph w/ last on top) + return a.poolIndex() - b.poolIndex(); +}; + +var elesfn$6 = { + forEach: function forEach(fn, thisArg) { + if (fn$6(fn)) { + var N = this.length; + for (var i = 0; i < N; i++) { + var ele = this[i]; + var ret = thisArg ? fn.apply(thisArg, [ele, i, this]) : fn(ele, i, this); + if (ret === false) { + break; + } // exit each early on return false + } + } + + return this; + }, + toArray: function toArray() { + var array = []; + for (var i = 0; i < this.length; i++) { + array.push(this[i]); + } + return array; + }, + slice: function slice(start, end) { + var array = []; + var thisSize = this.length; + if (end == null) { + end = thisSize; + } + if (start == null) { + start = 0; + } + if (start < 0) { + start = thisSize + start; + } + if (end < 0) { + end = thisSize + end; + } + for (var i = start; i >= 0 && i < end && i < thisSize; i++) { + array.push(this[i]); + } + return this.spawn(array); + }, + size: function size() { + return this.length; + }, + eq: function eq(i) { + return this[i] || this.spawn(); + }, + first: function first() { + return this[0] || this.spawn(); + }, + last: function last() { + return this[this.length - 1] || this.spawn(); + }, + empty: function empty() { + return this.length === 0; + }, + nonempty: function nonempty() { + return !this.empty(); + }, + sort: function sort(sortFn) { + if (!fn$6(sortFn)) { + return this; + } + var sorted = this.toArray().sort(sortFn); + return this.spawn(sorted); + }, + sortByZIndex: function sortByZIndex() { + return this.sort(zIndexSort); + }, + zDepth: function zDepth() { + var ele = this[0]; + if (!ele) { + return undefined; + } + + // let cy = ele.cy(); + var _p = ele._private; + var group = _p.group; + if (group === 'nodes') { + var depth = _p.data.parent ? ele.parents().size() : 0; + if (!ele.isParent()) { + return MAX_INT$1 - 1; // childless nodes always on top + } + + return depth; + } else { + var src = _p.source; + var tgt = _p.target; + var srcDepth = src.zDepth(); + var tgtDepth = tgt.zDepth(); + return Math.max(srcDepth, tgtDepth, 0); // depth of deepest parent + } + } +}; + +elesfn$6.each = elesfn$6.forEach; +var defineSymbolIterator = function defineSymbolIterator() { + var typeofUndef = "undefined" ; + var isIteratorSupported = (typeof Symbol === "undefined" ? "undefined" : _typeof(Symbol)) != typeofUndef && _typeof(Symbol.iterator) != typeofUndef; // eslint-disable-line no-undef + + if (isIteratorSupported) { + elesfn$6[Symbol.iterator] = function () { + var _this = this; + // eslint-disable-line no-undef + var entry = { + value: undefined, + done: false + }; + var i = 0; + var length = this.length; + return _defineProperty$1({ + next: function next() { + if (i < length) { + entry.value = _this[i++]; + } else { + entry.value = undefined; + entry.done = true; + } + return entry; + } + }, Symbol.iterator, function () { + // eslint-disable-line no-undef + return this; + }); + }; + } +}; +defineSymbolIterator(); + +var getLayoutDimensionOptions = defaults$g({ + nodeDimensionsIncludeLabels: false +}); +var elesfn$5 = { + // Calculates and returns node dimensions { x, y } based on options given + layoutDimensions: function layoutDimensions(options) { + options = getLayoutDimensionOptions(options); + var dims; + if (!this.takesUpSpace()) { + dims = { + w: 0, + h: 0 + }; + } else if (options.nodeDimensionsIncludeLabels) { + var bbDim = this.boundingBox(); + dims = { + w: bbDim.w, + h: bbDim.h + }; + } else { + dims = { + w: this.outerWidth(), + h: this.outerHeight() + }; + } + + // sanitise the dimensions for external layouts (avoid division by zero) + if (dims.w === 0 || dims.h === 0) { + dims.w = dims.h = 1; + } + return dims; + }, + // using standard layout options, apply position function (w/ or w/o animation) + layoutPositions: function layoutPositions(layout, options, fn) { + var nodes = this.nodes().filter(function (n) { + return !n.isParent(); + }); + var cy = this.cy(); + var layoutEles = options.eles; // nodes & edges + var getMemoizeKey = function getMemoizeKey(node) { + return node.id(); + }; + var fnMem = memoize$1(fn, getMemoizeKey); // memoized version of position function + + layout.emit({ + type: 'layoutstart', + layout: layout + }); + layout.animations = []; + var calculateSpacing = function calculateSpacing(spacing, nodesBb, pos) { + var center = { + x: nodesBb.x1 + nodesBb.w / 2, + y: nodesBb.y1 + nodesBb.h / 2 + }; + var spacingVector = { + // scale from center of bounding box (not necessarily 0,0) + x: (pos.x - center.x) * spacing, + y: (pos.y - center.y) * spacing + }; + return { + x: center.x + spacingVector.x, + y: center.y + spacingVector.y + }; + }; + var useSpacingFactor = options.spacingFactor && options.spacingFactor !== 1; + var spacingBb = function spacingBb() { + if (!useSpacingFactor) { + return null; + } + var bb = makeBoundingBox(); + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var pos = fnMem(node, i); + expandBoundingBoxByPoint(bb, pos.x, pos.y); + } + return bb; + }; + var bb = spacingBb(); + var getFinalPos = memoize$1(function (node, i) { + var newPos = fnMem(node, i); + if (useSpacingFactor) { + var spacing = Math.abs(options.spacingFactor); + newPos = calculateSpacing(spacing, bb, newPos); + } + if (options.transform != null) { + newPos = options.transform(node, newPos); + } + return newPos; + }, getMemoizeKey); + if (options.animate) { + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var newPos = getFinalPos(node, i); + var animateNode = options.animateFilter == null || options.animateFilter(node, i); + if (animateNode) { + var ani = node.animation({ + position: newPos, + duration: options.animationDuration, + easing: options.animationEasing + }); + layout.animations.push(ani); + } else { + node.position(newPos); + } + } + if (options.fit) { + var fitAni = cy.animation({ + fit: { + boundingBox: layoutEles.boundingBoxAt(getFinalPos), + padding: options.padding + }, + duration: options.animationDuration, + easing: options.animationEasing + }); + layout.animations.push(fitAni); + } else if (options.zoom !== undefined && options.pan !== undefined) { + var zoomPanAni = cy.animation({ + zoom: options.zoom, + pan: options.pan, + duration: options.animationDuration, + easing: options.animationEasing + }); + layout.animations.push(zoomPanAni); + } + layout.animations.forEach(function (ani) { + return ani.play(); + }); + layout.one('layoutready', options.ready); + layout.emit({ + type: 'layoutready', + layout: layout + }); + Promise$1.all(layout.animations.map(function (ani) { + return ani.promise(); + })).then(function () { + layout.one('layoutstop', options.stop); + layout.emit({ + type: 'layoutstop', + layout: layout + }); + }); + } else { + nodes.positions(getFinalPos); + if (options.fit) { + cy.fit(options.eles, options.padding); + } + if (options.zoom != null) { + cy.zoom(options.zoom); + } + if (options.pan) { + cy.pan(options.pan); + } + layout.one('layoutready', options.ready); + layout.emit({ + type: 'layoutready', + layout: layout + }); + layout.one('layoutstop', options.stop); + layout.emit({ + type: 'layoutstop', + layout: layout + }); + } + return this; // chaining + }, + + layout: function layout(options) { + var cy = this.cy(); + return cy.makeLayout(extend({}, options, { + eles: this + })); + } +}; + +// aliases: +elesfn$5.createLayout = elesfn$5.makeLayout = elesfn$5.layout; + +function styleCache(key, fn, ele) { + var _p = ele._private; + var cache = _p.styleCache = _p.styleCache || []; + var val; + if ((val = cache[key]) != null) { + return val; + } else { + val = cache[key] = fn(ele); + return val; + } +} +function cacheStyleFunction(key, fn) { + key = hashString(key); + return function cachedStyleFunction(ele) { + return styleCache(key, fn, ele); + }; +} +function cachePrototypeStyleFunction(key, fn) { + key = hashString(key); + var selfFn = function selfFn(ele) { + return fn.call(ele); + }; + return function cachedPrototypeStyleFunction() { + var ele = this[0]; + if (ele) { + return styleCache(key, selfFn, ele); + } + }; +} +var elesfn$4 = { + recalculateRenderedStyle: function recalculateRenderedStyle(useCache) { + var cy = this.cy(); + var renderer = cy.renderer(); + var styleEnabled = cy.styleEnabled(); + if (renderer && styleEnabled) { + renderer.recalculateRenderedStyle(this, useCache); + } + return this; + }, + dirtyStyleCache: function dirtyStyleCache() { + var cy = this.cy(); + var dirty = function dirty(ele) { + return ele._private.styleCache = null; + }; + if (cy.hasCompoundNodes()) { + var eles; + eles = this.spawnSelf().merge(this.descendants()).merge(this.parents()); + eles.merge(eles.connectedEdges()); + eles.forEach(dirty); + } else { + this.forEach(function (ele) { + dirty(ele); + ele.connectedEdges().forEach(dirty); + }); + } + return this; + }, + // fully updates (recalculates) the style for the elements + updateStyle: function updateStyle(notifyRenderer) { + var cy = this._private.cy; + if (!cy.styleEnabled()) { + return this; + } + if (cy.batching()) { + var bEles = cy._private.batchStyleEles; + bEles.merge(this); + return this; // chaining and exit early when batching + } + + var hasCompounds = cy.hasCompoundNodes(); + var updatedEles = this; + notifyRenderer = notifyRenderer || notifyRenderer === undefined ? true : false; + if (hasCompounds) { + // then add everything up and down for compound selector checks + updatedEles = this.spawnSelf().merge(this.descendants()).merge(this.parents()); + } + + // let changedEles = style.apply( updatedEles ); + var changedEles = updatedEles; + if (notifyRenderer) { + changedEles.emitAndNotify('style'); // let renderer know we changed style + } else { + changedEles.emit('style'); // just fire the event + } + + updatedEles.forEach(function (ele) { + return ele._private.styleDirty = true; + }); + return this; // chaining + }, + + // private: clears dirty flag and recalculates style + cleanStyle: function cleanStyle() { + var cy = this.cy(); + if (!cy.styleEnabled()) { + return; + } + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + if (ele._private.styleDirty) { + // n.b. this flag should be set before apply() to avoid potential infinite recursion + ele._private.styleDirty = false; + cy.style().apply(ele); + } + } + }, + // get the internal parsed style object for the specified property + parsedStyle: function parsedStyle(property) { + var includeNonDefault = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var ele = this[0]; + var cy = ele.cy(); + if (!cy.styleEnabled()) { + return; + } + if (ele) { + this.cleanStyle(); + var overriddenStyle = ele._private.style[property]; + if (overriddenStyle != null) { + return overriddenStyle; + } else if (includeNonDefault) { + return cy.style().getDefaultProperty(property); + } else { + return null; + } + } + }, + numericStyle: function numericStyle(property) { + var ele = this[0]; + if (!ele.cy().styleEnabled()) { + return; + } + if (ele) { + var pstyle = ele.pstyle(property); + return pstyle.pfValue !== undefined ? pstyle.pfValue : pstyle.value; + } + }, + numericStyleUnits: function numericStyleUnits(property) { + var ele = this[0]; + if (!ele.cy().styleEnabled()) { + return; + } + if (ele) { + return ele.pstyle(property).units; + } + }, + // get the specified css property as a rendered value (i.e. on-screen value) + // or get the whole rendered style if no property specified (NB doesn't allow setting) + renderedStyle: function renderedStyle(property) { + var cy = this.cy(); + if (!cy.styleEnabled()) { + return this; + } + var ele = this[0]; + if (ele) { + return cy.style().getRenderedStyle(ele, property); + } + }, + // read the calculated css style of the element or override the style (via a bypass) + style: function style(name, value) { + var cy = this.cy(); + if (!cy.styleEnabled()) { + return this; + } + var updateTransitions = false; + var style = cy.style(); + if (plainObject(name)) { + // then extend the bypass + var props = name; + style.applyBypass(this, props, updateTransitions); + this.emitAndNotify('style'); // let the renderer know we've updated style + } else if (string(name)) { + if (value === undefined) { + // then get the property from the style + var ele = this[0]; + if (ele) { + return style.getStylePropertyValue(ele, name); + } else { + // empty collection => can't get any value + return; + } + } else { + // then set the bypass with the property value + style.applyBypass(this, name, value, updateTransitions); + this.emitAndNotify('style'); // let the renderer know we've updated style + } + } else if (name === undefined) { + var _ele = this[0]; + if (_ele) { + return style.getRawStyle(_ele); + } else { + // empty collection => can't get any value + return; + } + } + return this; // chaining + }, + + removeStyle: function removeStyle(names) { + var cy = this.cy(); + if (!cy.styleEnabled()) { + return this; + } + var updateTransitions = false; + var style = cy.style(); + var eles = this; + if (names === undefined) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + style.removeAllBypasses(ele, updateTransitions); + } + } else { + names = names.split(/\s+/); + for (var _i = 0; _i < eles.length; _i++) { + var _ele2 = eles[_i]; + style.removeBypasses(_ele2, names, updateTransitions); + } + } + this.emitAndNotify('style'); // let the renderer know we've updated style + + return this; // chaining + }, + + show: function show() { + this.css('display', 'element'); + return this; // chaining + }, + + hide: function hide() { + this.css('display', 'none'); + return this; // chaining + }, + + effectiveOpacity: function effectiveOpacity() { + var cy = this.cy(); + if (!cy.styleEnabled()) { + return 1; + } + var hasCompoundNodes = cy.hasCompoundNodes(); + var ele = this[0]; + if (ele) { + var _p = ele._private; + var parentOpacity = ele.pstyle('opacity').value; + if (!hasCompoundNodes) { + return parentOpacity; + } + var parents = !_p.data.parent ? null : ele.parents(); + if (parents) { + for (var i = 0; i < parents.length; i++) { + var parent = parents[i]; + var opacity = parent.pstyle('opacity').value; + parentOpacity = opacity * parentOpacity; + } + } + return parentOpacity; + } + }, + transparent: function transparent() { + var cy = this.cy(); + if (!cy.styleEnabled()) { + return false; + } + var ele = this[0]; + var hasCompoundNodes = ele.cy().hasCompoundNodes(); + if (ele) { + if (!hasCompoundNodes) { + return ele.pstyle('opacity').value === 0; + } else { + return ele.effectiveOpacity() === 0; + } + } + }, + backgrounding: function backgrounding() { + var cy = this.cy(); + if (!cy.styleEnabled()) { + return false; + } + var ele = this[0]; + return ele._private.backgrounding ? true : false; + } +}; +function checkCompound(ele, parentOk) { + var _p = ele._private; + var parents = _p.data.parent ? ele.parents() : null; + if (parents) { + for (var i = 0; i < parents.length; i++) { + var parent = parents[i]; + if (!parentOk(parent)) { + return false; + } + } + } + return true; +} +function defineDerivedStateFunction(specs) { + var ok = specs.ok; + var edgeOkViaNode = specs.edgeOkViaNode || specs.ok; + var parentOk = specs.parentOk || specs.ok; + return function () { + var cy = this.cy(); + if (!cy.styleEnabled()) { + return true; + } + var ele = this[0]; + var hasCompoundNodes = cy.hasCompoundNodes(); + if (ele) { + var _p = ele._private; + if (!ok(ele)) { + return false; + } + if (ele.isNode()) { + return !hasCompoundNodes || checkCompound(ele, parentOk); + } else { + var src = _p.source; + var tgt = _p.target; + return edgeOkViaNode(src) && (!hasCompoundNodes || checkCompound(src, edgeOkViaNode)) && (src === tgt || edgeOkViaNode(tgt) && (!hasCompoundNodes || checkCompound(tgt, edgeOkViaNode))); + } + } + }; +} +var eleTakesUpSpace = cacheStyleFunction('eleTakesUpSpace', function (ele) { + return ele.pstyle('display').value === 'element' && ele.width() !== 0 && (ele.isNode() ? ele.height() !== 0 : true); +}); +elesfn$4.takesUpSpace = cachePrototypeStyleFunction('takesUpSpace', defineDerivedStateFunction({ + ok: eleTakesUpSpace +})); +var eleInteractive = cacheStyleFunction('eleInteractive', function (ele) { + return ele.pstyle('events').value === 'yes' && ele.pstyle('visibility').value === 'visible' && eleTakesUpSpace(ele); +}); +var parentInteractive = cacheStyleFunction('parentInteractive', function (parent) { + return parent.pstyle('visibility').value === 'visible' && eleTakesUpSpace(parent); +}); +elesfn$4.interactive = cachePrototypeStyleFunction('interactive', defineDerivedStateFunction({ + ok: eleInteractive, + parentOk: parentInteractive, + edgeOkViaNode: eleTakesUpSpace +})); +elesfn$4.noninteractive = function () { + var ele = this[0]; + if (ele) { + return !ele.interactive(); + } +}; +var eleVisible = cacheStyleFunction('eleVisible', function (ele) { + return ele.pstyle('visibility').value === 'visible' && ele.pstyle('opacity').pfValue !== 0 && eleTakesUpSpace(ele); +}); +var edgeVisibleViaNode = eleTakesUpSpace; +elesfn$4.visible = cachePrototypeStyleFunction('visible', defineDerivedStateFunction({ + ok: eleVisible, + edgeOkViaNode: edgeVisibleViaNode +})); +elesfn$4.hidden = function () { + var ele = this[0]; + if (ele) { + return !ele.visible(); + } +}; +elesfn$4.isBundledBezier = cachePrototypeStyleFunction('isBundledBezier', function () { + if (!this.cy().styleEnabled()) { + return false; + } + return !this.removed() && this.pstyle('curve-style').value === 'bezier' && this.takesUpSpace(); +}); +elesfn$4.bypass = elesfn$4.css = elesfn$4.style; +elesfn$4.renderedCss = elesfn$4.renderedStyle; +elesfn$4.removeBypass = elesfn$4.removeCss = elesfn$4.removeStyle; +elesfn$4.pstyle = elesfn$4.parsedStyle; + +var elesfn$3 = {}; +function defineSwitchFunction(params) { + return function () { + var args = arguments; + var changedEles = []; + + // e.g. cy.nodes().select( data, handler ) + if (args.length === 2) { + var data = args[0]; + var handler = args[1]; + this.on(params.event, data, handler); + } + + // e.g. cy.nodes().select( handler ) + else if (args.length === 1 && fn$6(args[0])) { + var _handler = args[0]; + this.on(params.event, _handler); + } + + // e.g. cy.nodes().select() + // e.g. (private) cy.nodes().select(['tapselect']) + else if (args.length === 0 || args.length === 1 && array(args[0])) { + var addlEvents = args.length === 1 ? args[0] : null; + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var able = !params.ableField || ele._private[params.ableField]; + var changed = ele._private[params.field] != params.value; + if (params.overrideAble) { + var overrideAble = params.overrideAble(ele); + if (overrideAble !== undefined) { + able = overrideAble; + if (!overrideAble) { + return this; + } // to save cycles assume not able for all on override + } + } + + if (able) { + ele._private[params.field] = params.value; + if (changed) { + changedEles.push(ele); + } + } + } + var changedColl = this.spawn(changedEles); + changedColl.updateStyle(); // change of state => possible change of style + changedColl.emit(params.event); + if (addlEvents) { + changedColl.emit(addlEvents); + } + } + return this; + }; +} +function defineSwitchSet(params) { + elesfn$3[params.field] = function () { + var ele = this[0]; + if (ele) { + if (params.overrideField) { + var val = params.overrideField(ele); + if (val !== undefined) { + return val; + } + } + return ele._private[params.field]; + } + }; + elesfn$3[params.on] = defineSwitchFunction({ + event: params.on, + field: params.field, + ableField: params.ableField, + overrideAble: params.overrideAble, + value: true + }); + elesfn$3[params.off] = defineSwitchFunction({ + event: params.off, + field: params.field, + ableField: params.ableField, + overrideAble: params.overrideAble, + value: false + }); +} +defineSwitchSet({ + field: 'locked', + overrideField: function overrideField(ele) { + return ele.cy().autolock() ? true : undefined; + }, + on: 'lock', + off: 'unlock' +}); +defineSwitchSet({ + field: 'grabbable', + overrideField: function overrideField(ele) { + return ele.cy().autoungrabify() || ele.pannable() ? false : undefined; + }, + on: 'grabify', + off: 'ungrabify' +}); +defineSwitchSet({ + field: 'selected', + ableField: 'selectable', + overrideAble: function overrideAble(ele) { + return ele.cy().autounselectify() ? false : undefined; + }, + on: 'select', + off: 'unselect' +}); +defineSwitchSet({ + field: 'selectable', + overrideField: function overrideField(ele) { + return ele.cy().autounselectify() ? false : undefined; + }, + on: 'selectify', + off: 'unselectify' +}); +elesfn$3.deselect = elesfn$3.unselect; +elesfn$3.grabbed = function () { + var ele = this[0]; + if (ele) { + return ele._private.grabbed; + } +}; +defineSwitchSet({ + field: 'active', + on: 'activate', + off: 'unactivate' +}); +defineSwitchSet({ + field: 'pannable', + on: 'panify', + off: 'unpanify' +}); +elesfn$3.inactive = function () { + var ele = this[0]; + if (ele) { + return !ele._private.active; + } +}; + +var elesfn$2 = {}; + +// DAG functions +//////////////// + +var defineDagExtremity = function defineDagExtremity(params) { + return function dagExtremityImpl(selector) { + var eles = this; + var ret = []; + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + if (!ele.isNode()) { + continue; + } + var disqualified = false; + var edges = ele.connectedEdges(); + for (var j = 0; j < edges.length; j++) { + var edge = edges[j]; + var src = edge.source(); + var tgt = edge.target(); + if (params.noIncomingEdges && tgt === ele && src !== ele || params.noOutgoingEdges && src === ele && tgt !== ele) { + disqualified = true; + break; + } + } + if (!disqualified) { + ret.push(ele); + } + } + return this.spawn(ret, true).filter(selector); + }; +}; +var defineDagOneHop = function defineDagOneHop(params) { + return function (selector) { + var eles = this; + var oEles = []; + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + if (!ele.isNode()) { + continue; + } + var edges = ele.connectedEdges(); + for (var j = 0; j < edges.length; j++) { + var edge = edges[j]; + var src = edge.source(); + var tgt = edge.target(); + if (params.outgoing && src === ele) { + oEles.push(edge); + oEles.push(tgt); + } else if (params.incoming && tgt === ele) { + oEles.push(edge); + oEles.push(src); + } + } + } + return this.spawn(oEles, true).filter(selector); + }; +}; +var defineDagAllHops = function defineDagAllHops(params) { + return function (selector) { + var eles = this; + var sEles = []; + var sElesIds = {}; + for (;;) { + var next = params.outgoing ? eles.outgoers() : eles.incomers(); + if (next.length === 0) { + break; + } // done if none left + + var newNext = false; + for (var i = 0; i < next.length; i++) { + var n = next[i]; + var nid = n.id(); + if (!sElesIds[nid]) { + sElesIds[nid] = true; + sEles.push(n); + newNext = true; + } + } + if (!newNext) { + break; + } // done if touched all outgoers already + + eles = next; + } + return this.spawn(sEles, true).filter(selector); + }; +}; +elesfn$2.clearTraversalCache = function () { + for (var i = 0; i < this.length; i++) { + this[i]._private.traversalCache = null; + } +}; +extend(elesfn$2, { + // get the root nodes in the DAG + roots: defineDagExtremity({ + noIncomingEdges: true + }), + // get the leaf nodes in the DAG + leaves: defineDagExtremity({ + noOutgoingEdges: true + }), + // normally called children in graph theory + // these nodes =edges=> outgoing nodes + outgoers: cache(defineDagOneHop({ + outgoing: true + }), 'outgoers'), + // aka DAG descendants + successors: defineDagAllHops({ + outgoing: true + }), + // normally called parents in graph theory + // these nodes <=edges= incoming nodes + incomers: cache(defineDagOneHop({ + incoming: true + }), 'incomers'), + // aka DAG ancestors + predecessors: defineDagAllHops({ + incoming: true + }) +}); + +// Neighbourhood functions +////////////////////////// + +extend(elesfn$2, { + neighborhood: cache(function (selector) { + var elements = []; + var nodes = this.nodes(); + for (var i = 0; i < nodes.length; i++) { + // for all nodes + var node = nodes[i]; + var connectedEdges = node.connectedEdges(); + + // for each connected edge, add the edge and the other node + for (var j = 0; j < connectedEdges.length; j++) { + var edge = connectedEdges[j]; + var src = edge.source(); + var tgt = edge.target(); + var otherNode = node === src ? tgt : src; + + // need check in case of loop + if (otherNode.length > 0) { + elements.push(otherNode[0]); // add node 1 hop away + } + + // add connected edge + elements.push(edge[0]); + } + } + return this.spawn(elements, true).filter(selector); + }, 'neighborhood'), + closedNeighborhood: function closedNeighborhood(selector) { + return this.neighborhood().add(this).filter(selector); + }, + openNeighborhood: function openNeighborhood(selector) { + return this.neighborhood(selector); + } +}); + +// aliases +elesfn$2.neighbourhood = elesfn$2.neighborhood; +elesfn$2.closedNeighbourhood = elesfn$2.closedNeighborhood; +elesfn$2.openNeighbourhood = elesfn$2.openNeighborhood; + +// Edge functions +///////////////// + +extend(elesfn$2, { + source: cache(function sourceImpl(selector) { + var ele = this[0]; + var src; + if (ele) { + src = ele._private.source || ele.cy().collection(); + } + return src && selector ? src.filter(selector) : src; + }, 'source'), + target: cache(function targetImpl(selector) { + var ele = this[0]; + var tgt; + if (ele) { + tgt = ele._private.target || ele.cy().collection(); + } + return tgt && selector ? tgt.filter(selector) : tgt; + }, 'target'), + sources: defineSourceFunction({ + attr: 'source' + }), + targets: defineSourceFunction({ + attr: 'target' + }) +}); +function defineSourceFunction(params) { + return function sourceImpl(selector) { + var sources = []; + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var src = ele._private[params.attr]; + if (src) { + sources.push(src); + } + } + return this.spawn(sources, true).filter(selector); + }; +} +extend(elesfn$2, { + edgesWith: cache(defineEdgesWithFunction(), 'edgesWith'), + edgesTo: cache(defineEdgesWithFunction({ + thisIsSrc: true + }), 'edgesTo') +}); +function defineEdgesWithFunction(params) { + return function edgesWithImpl(otherNodes) { + var elements = []; + var cy = this._private.cy; + var p = params || {}; + + // get elements if a selector is specified + if (string(otherNodes)) { + otherNodes = cy.$(otherNodes); + } + for (var h = 0; h < otherNodes.length; h++) { + var edges = otherNodes[h]._private.edges; + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + var edgeData = edge._private.data; + var thisToOther = this.hasElementWithId(edgeData.source) && otherNodes.hasElementWithId(edgeData.target); + var otherToThis = otherNodes.hasElementWithId(edgeData.source) && this.hasElementWithId(edgeData.target); + var edgeConnectsThisAndOther = thisToOther || otherToThis; + if (!edgeConnectsThisAndOther) { + continue; + } + if (p.thisIsSrc || p.thisIsTgt) { + if (p.thisIsSrc && !thisToOther) { + continue; + } + if (p.thisIsTgt && !otherToThis) { + continue; + } + } + elements.push(edge); + } + } + return this.spawn(elements, true); + }; +} +extend(elesfn$2, { + connectedEdges: cache(function (selector) { + var retEles = []; + var eles = this; + for (var i = 0; i < eles.length; i++) { + var node = eles[i]; + if (!node.isNode()) { + continue; + } + var edges = node._private.edges; + for (var j = 0; j < edges.length; j++) { + var edge = edges[j]; + retEles.push(edge); + } + } + return this.spawn(retEles, true).filter(selector); + }, 'connectedEdges'), + connectedNodes: cache(function (selector) { + var retEles = []; + var eles = this; + for (var i = 0; i < eles.length; i++) { + var edge = eles[i]; + if (!edge.isEdge()) { + continue; + } + retEles.push(edge.source()[0]); + retEles.push(edge.target()[0]); + } + return this.spawn(retEles, true).filter(selector); + }, 'connectedNodes'), + parallelEdges: cache(defineParallelEdgesFunction(), 'parallelEdges'), + codirectedEdges: cache(defineParallelEdgesFunction({ + codirected: true + }), 'codirectedEdges') +}); +function defineParallelEdgesFunction(params) { + var defaults = { + codirected: false + }; + params = extend({}, defaults, params); + return function parallelEdgesImpl(selector) { + // micro-optimised for renderer + var elements = []; + var edges = this.edges(); + var p = params; + + // look at all the edges in the collection + for (var i = 0; i < edges.length; i++) { + var edge1 = edges[i]; + var edge1_p = edge1._private; + var src1 = edge1_p.source; + var srcid1 = src1._private.data.id; + var tgtid1 = edge1_p.data.target; + var srcEdges1 = src1._private.edges; + + // look at edges connected to the src node of this edge + for (var j = 0; j < srcEdges1.length; j++) { + var edge2 = srcEdges1[j]; + var edge2data = edge2._private.data; + var tgtid2 = edge2data.target; + var srcid2 = edge2data.source; + var codirected = tgtid2 === tgtid1 && srcid2 === srcid1; + var oppdirected = srcid1 === tgtid2 && tgtid1 === srcid2; + if (p.codirected && codirected || !p.codirected && (codirected || oppdirected)) { + elements.push(edge2); + } + } + } + return this.spawn(elements, true).filter(selector); + }; +} + +// Misc functions +///////////////// + +extend(elesfn$2, { + components: function components(root) { + var self = this; + var cy = self.cy(); + var visited = cy.collection(); + var unvisited = root == null ? self.nodes() : root.nodes(); + var components = []; + if (root != null && unvisited.empty()) { + // root may contain only edges + unvisited = root.sources(); // doesn't matter which node to use (undirected), so just use the source sides + } + + var visitInComponent = function visitInComponent(node, component) { + visited.merge(node); + unvisited.unmerge(node); + component.merge(node); + }; + if (unvisited.empty()) { + return self.spawn(); + } + var _loop = function _loop() { + // each iteration yields a component + var cmpt = cy.collection(); + components.push(cmpt); + var root = unvisited[0]; + visitInComponent(root, cmpt); + self.bfs({ + directed: false, + roots: root, + visit: function visit(v) { + return visitInComponent(v, cmpt); + } + }); + cmpt.forEach(function (node) { + node.connectedEdges().forEach(function (e) { + // connectedEdges() usually cached + if (self.has(e) && cmpt.has(e.source()) && cmpt.has(e.target())) { + // has() is cheap + cmpt.merge(e); // forEach() only considers nodes -- sets N at call time + } + }); + }); + }; + do { + _loop(); + } while (unvisited.length > 0); + return components; + }, + component: function component() { + var ele = this[0]; + return ele.cy().mutableElements().components(ele)[0]; + } +}); +elesfn$2.componentsOf = elesfn$2.components; + +// represents a set of nodes, edges, or both together +var Collection = function Collection(cy, elements) { + var unique = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + var removed = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; + if (cy === undefined) { + error('A collection must have a reference to the core'); + return; + } + var map = new Map$2(); + var createdElements = false; + if (!elements) { + elements = []; + } else if (elements.length > 0 && plainObject(elements[0]) && !cytoscape_esm_element(elements[0])) { + createdElements = true; + + // make elements from json and restore all at once later + var eles = []; + var elesIds = new Set$1(); + for (var i = 0, l = elements.length; i < l; i++) { + var json = elements[i]; + if (json.data == null) { + json.data = {}; + } + var _data = json.data; + + // make sure newly created elements have valid ids + if (_data.id == null) { + _data.id = uuid(); + } else if (cy.hasElementWithId(_data.id) || elesIds.has(_data.id)) { + continue; // can't create element if prior id already exists + } + + var ele = new Element(cy, json, false); + eles.push(ele); + elesIds.add(_data.id); + } + elements = eles; + } + this.length = 0; + for (var _i = 0, _l = elements.length; _i < _l; _i++) { + var element$1 = elements[_i][0]; // [0] in case elements is an array of collections, rather than array of elements + if (element$1 == null) { + continue; + } + var id = element$1._private.data.id; + if (!unique || !map.has(id)) { + if (unique) { + map.set(id, { + index: this.length, + ele: element$1 + }); + } + this[this.length] = element$1; + this.length++; + } + } + this._private = { + eles: this, + cy: cy, + get map() { + if (this.lazyMap == null) { + this.rebuildMap(); + } + return this.lazyMap; + }, + set map(m) { + this.lazyMap = m; + }, + rebuildMap: function rebuildMap() { + var m = this.lazyMap = new Map$2(); + var eles = this.eles; + for (var _i2 = 0; _i2 < eles.length; _i2++) { + var _ele = eles[_i2]; + m.set(_ele.id(), { + index: _i2, + ele: _ele + }); + } + } + }; + if (unique) { + this._private.map = map; + } + + // restore the elements if we created them from json + if (createdElements && !removed) { + this.restore(); + } +}; + +// Functions +//////////////////////////////////////////////////////////////////////////////////////////////////// + +// keep the prototypes in sync (an element has the same functions as a collection) +// and use elefn and elesfn as shorthands to the prototypes +var elesfn$1 = Element.prototype = Collection.prototype = Object.create(Array.prototype); +elesfn$1.instanceString = function () { + return 'collection'; +}; +elesfn$1.spawn = function (eles, unique) { + return new Collection(this.cy(), eles, unique); +}; +elesfn$1.spawnSelf = function () { + return this.spawn(this); +}; +elesfn$1.cy = function () { + return this._private.cy; +}; +elesfn$1.renderer = function () { + return this._private.cy.renderer(); +}; +elesfn$1.element = function () { + return this[0]; +}; +elesfn$1.collection = function () { + if (collection(this)) { + return this; + } else { + // an element + return new Collection(this._private.cy, [this]); + } +}; +elesfn$1.unique = function () { + return new Collection(this._private.cy, this, true); +}; +elesfn$1.hasElementWithId = function (id) { + id = '' + id; // id must be string + + return this._private.map.has(id); +}; +elesfn$1.getElementById = function (id) { + id = '' + id; // id must be string + + var cy = this._private.cy; + var entry = this._private.map.get(id); + return entry ? entry.ele : new Collection(cy); // get ele or empty collection +}; + +elesfn$1.$id = elesfn$1.getElementById; +elesfn$1.poolIndex = function () { + var cy = this._private.cy; + var eles = cy._private.elements; + var id = this[0]._private.data.id; + return eles._private.map.get(id).index; +}; +elesfn$1.indexOf = function (ele) { + var id = ele[0]._private.data.id; + return this._private.map.get(id).index; +}; +elesfn$1.indexOfId = function (id) { + id = '' + id; // id must be string + + return this._private.map.get(id).index; +}; +elesfn$1.json = function (obj) { + var ele = this.element(); + var cy = this.cy(); + if (ele == null && obj) { + return this; + } // can't set to no eles + + if (ele == null) { + return undefined; + } // can't get from no eles + + var p = ele._private; + if (plainObject(obj)) { + // set + + cy.startBatch(); + if (obj.data) { + ele.data(obj.data); + var _data2 = p.data; + if (ele.isEdge()) { + // source and target are immutable via data() + var move = false; + var spec = {}; + var src = obj.data.source; + var tgt = obj.data.target; + if (src != null && src != _data2.source) { + spec.source = '' + src; // id must be string + move = true; + } + if (tgt != null && tgt != _data2.target) { + spec.target = '' + tgt; // id must be string + move = true; + } + if (move) { + ele = ele.move(spec); + } + } else { + // parent is immutable via data() + var newParentValSpecd = ('parent' in obj.data); + var parent = obj.data.parent; + if (newParentValSpecd && (parent != null || _data2.parent != null) && parent != _data2.parent) { + if (parent === undefined) { + // can't set undefined imperatively, so use null + parent = null; + } + if (parent != null) { + parent = '' + parent; // id must be string + } + + ele = ele.move({ + parent: parent + }); + } + } + } + if (obj.position) { + ele.position(obj.position); + } + + // ignore group -- immutable + + var checkSwitch = function checkSwitch(k, trueFnName, falseFnName) { + var obj_k = obj[k]; + if (obj_k != null && obj_k !== p[k]) { + if (obj_k) { + ele[trueFnName](); + } else { + ele[falseFnName](); + } + } + }; + checkSwitch('removed', 'remove', 'restore'); + checkSwitch('selected', 'select', 'unselect'); + checkSwitch('selectable', 'selectify', 'unselectify'); + checkSwitch('locked', 'lock', 'unlock'); + checkSwitch('grabbable', 'grabify', 'ungrabify'); + checkSwitch('pannable', 'panify', 'unpanify'); + if (obj.classes != null) { + ele.classes(obj.classes); + } + cy.endBatch(); + return this; + } else if (obj === undefined) { + // get + + var json = { + data: copy(p.data), + position: copy(p.position), + group: p.group, + removed: p.removed, + selected: p.selected, + selectable: p.selectable, + locked: p.locked, + grabbable: p.grabbable, + pannable: p.pannable, + classes: null + }; + json.classes = ''; + var i = 0; + p.classes.forEach(function (cls) { + return json.classes += i++ === 0 ? cls : ' ' + cls; + }); + return json; + } +}; +elesfn$1.jsons = function () { + var jsons = []; + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var json = ele.json(); + jsons.push(json); + } + return jsons; +}; +elesfn$1.clone = function () { + var cy = this.cy(); + var elesArr = []; + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var json = ele.json(); + var clone = new Element(cy, json, false); // NB no restore + + elesArr.push(clone); + } + return new Collection(cy, elesArr); +}; +elesfn$1.copy = elesfn$1.clone; +elesfn$1.restore = function () { + var notifyRenderer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + var addToPool = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var self = this; + var cy = self.cy(); + var cy_p = cy._private; + + // create arrays of nodes and edges, since we need to + // restore the nodes first + var nodes = []; + var edges = []; + var elements; + for (var _i3 = 0, l = self.length; _i3 < l; _i3++) { + var ele = self[_i3]; + if (addToPool && !ele.removed()) { + // don't need to handle this ele + continue; + } + + // keep nodes first in the array and edges after + if (ele.isNode()) { + // put to front of array if node + nodes.push(ele); + } else { + // put to end of array if edge + edges.push(ele); + } + } + elements = nodes.concat(edges); + var i; + var removeFromElements = function removeFromElements() { + elements.splice(i, 1); + i--; + }; + + // now, restore each element + for (i = 0; i < elements.length; i++) { + var _ele2 = elements[i]; + var _private = _ele2._private; + var _data3 = _private.data; + + // the traversal cache should start fresh when ele is added + _ele2.clearTraversalCache(); + + // set id and validate + if (!addToPool && !_private.removed) ; else if (_data3.id === undefined) { + _data3.id = uuid(); + } else if (number$1(_data3.id)) { + _data3.id = '' + _data3.id; // now it's a string + } else if (emptyString(_data3.id) || !string(_data3.id)) { + error('Can not create element with invalid string ID `' + _data3.id + '`'); + + // can't create element if it has empty string as id or non-string id + removeFromElements(); + continue; + } else if (cy.hasElementWithId(_data3.id)) { + error('Can not create second element with ID `' + _data3.id + '`'); + + // can't create element if one already has that id + removeFromElements(); + continue; + } + var id = _data3.id; // id is finalised, now let's keep a ref + + if (_ele2.isNode()) { + // extra checks for nodes + var pos = _private.position; + + // make sure the nodes have a defined position + + if (pos.x == null) { + pos.x = 0; + } + if (pos.y == null) { + pos.y = 0; + } + } + if (_ele2.isEdge()) { + // extra checks for edges + + var edge = _ele2; + var fields = ['source', 'target']; + var fieldsLength = fields.length; + var badSourceOrTarget = false; + for (var j = 0; j < fieldsLength; j++) { + var field = fields[j]; + var val = _data3[field]; + if (number$1(val)) { + val = _data3[field] = '' + _data3[field]; // now string + } + + if (val == null || val === '') { + // can't create if source or target is not defined properly + error('Can not create edge `' + id + '` with unspecified ' + field); + badSourceOrTarget = true; + } else if (!cy.hasElementWithId(val)) { + // can't create edge if one of its nodes doesn't exist + error('Can not create edge `' + id + '` with nonexistant ' + field + ' `' + val + '`'); + badSourceOrTarget = true; + } + } + if (badSourceOrTarget) { + removeFromElements(); + continue; + } // can't create this + + var src = cy.getElementById(_data3.source); + var tgt = cy.getElementById(_data3.target); + + // only one edge in node if loop + if (src.same(tgt)) { + src._private.edges.push(edge); + } else { + src._private.edges.push(edge); + tgt._private.edges.push(edge); + } + edge._private.source = src; + edge._private.target = tgt; + } // if is edge + + // create mock ids / indexes maps for element so it can be used like collections + _private.map = new Map$2(); + _private.map.set(id, { + ele: _ele2, + index: 0 + }); + _private.removed = false; + if (addToPool) { + cy.addToPool(_ele2); + } + } // for each element + + // do compound node sanity checks + for (var _i4 = 0; _i4 < nodes.length; _i4++) { + // each node + var node = nodes[_i4]; + var _data4 = node._private.data; + if (number$1(_data4.parent)) { + // then automake string + _data4.parent = '' + _data4.parent; + } + var parentId = _data4.parent; + var specifiedParent = parentId != null; + if (specifiedParent || node._private.parent) { + var parent = node._private.parent ? cy.collection().merge(node._private.parent) : cy.getElementById(parentId); + if (parent.empty()) { + // non-existant parent; just remove it + _data4.parent = undefined; + } else if (parent[0].removed()) { + warn('Node added with missing parent, reference to parent removed'); + _data4.parent = undefined; + node._private.parent = null; + } else { + var selfAsParent = false; + var ancestor = parent; + while (!ancestor.empty()) { + if (node.same(ancestor)) { + // mark self as parent and remove from data + selfAsParent = true; + _data4.parent = undefined; // remove parent reference + + // exit or we loop forever + break; + } + ancestor = ancestor.parent(); + } + if (!selfAsParent) { + // connect with children + parent[0]._private.children.push(node); + node._private.parent = parent[0]; + + // let the core know we have a compound graph + cy_p.hasCompoundNodes = true; + } + } // else + } // if specified parent + } // for each node + + if (elements.length > 0) { + var restored = elements.length === self.length ? self : new Collection(cy, elements); + for (var _i5 = 0; _i5 < restored.length; _i5++) { + var _ele3 = restored[_i5]; + if (_ele3.isNode()) { + continue; + } + + // adding an edge invalidates the traversal caches for the parallel edges + _ele3.parallelEdges().clearTraversalCache(); + + // adding an edge invalidates the traversal cache for the connected nodes + _ele3.source().clearTraversalCache(); + _ele3.target().clearTraversalCache(); + } + var toUpdateStyle; + if (cy_p.hasCompoundNodes) { + toUpdateStyle = cy.collection().merge(restored).merge(restored.connectedNodes()).merge(restored.parent()); + } else { + toUpdateStyle = restored; + } + toUpdateStyle.dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(notifyRenderer); + if (notifyRenderer) { + restored.emitAndNotify('add'); + } else if (addToPool) { + restored.emit('add'); + } + } + return self; // chainability +}; + +elesfn$1.removed = function () { + var ele = this[0]; + return ele && ele._private.removed; +}; +elesfn$1.inside = function () { + var ele = this[0]; + return ele && !ele._private.removed; +}; +elesfn$1.remove = function () { + var notifyRenderer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + var removeFromPool = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var self = this; + var elesToRemove = []; + var elesToRemoveIds = {}; + var cy = self._private.cy; + + // add connected edges + function addConnectedEdges(node) { + var edges = node._private.edges; + for (var i = 0; i < edges.length; i++) { + add(edges[i]); + } + } + + // add descendant nodes + function addChildren(node) { + var children = node._private.children; + for (var i = 0; i < children.length; i++) { + add(children[i]); + } + } + function add(ele) { + var alreadyAdded = elesToRemoveIds[ele.id()]; + if (removeFromPool && ele.removed() || alreadyAdded) { + return; + } else { + elesToRemoveIds[ele.id()] = true; + } + if (ele.isNode()) { + elesToRemove.push(ele); // nodes are removed last + + addConnectedEdges(ele); + addChildren(ele); + } else { + elesToRemove.unshift(ele); // edges are removed first + } + } + + // make the list of elements to remove + // (may be removing more than specified due to connected edges etc) + + for (var i = 0, l = self.length; i < l; i++) { + var ele = self[i]; + add(ele); + } + function removeEdgeRef(node, edge) { + var connectedEdges = node._private.edges; + removeFromArray(connectedEdges, edge); + + // removing an edges invalidates the traversal cache for its nodes + node.clearTraversalCache(); + } + function removeParallelRef(pllEdge) { + // removing an edge invalidates the traversal caches for the parallel edges + pllEdge.clearTraversalCache(); + } + var alteredParents = []; + alteredParents.ids = {}; + function removeChildRef(parent, ele) { + ele = ele[0]; + parent = parent[0]; + var children = parent._private.children; + var pid = parent.id(); + removeFromArray(children, ele); // remove parent => child ref + + ele._private.parent = null; // remove child => parent ref + + if (!alteredParents.ids[pid]) { + alteredParents.ids[pid] = true; + alteredParents.push(parent); + } + } + self.dirtyCompoundBoundsCache(); + if (removeFromPool) { + cy.removeFromPool(elesToRemove); // remove from core pool + } + + for (var _i6 = 0; _i6 < elesToRemove.length; _i6++) { + var _ele4 = elesToRemove[_i6]; + if (_ele4.isEdge()) { + // remove references to this edge in its connected nodes + var src = _ele4.source()[0]; + var tgt = _ele4.target()[0]; + removeEdgeRef(src, _ele4); + removeEdgeRef(tgt, _ele4); + var pllEdges = _ele4.parallelEdges(); + for (var j = 0; j < pllEdges.length; j++) { + var pllEdge = pllEdges[j]; + removeParallelRef(pllEdge); + if (pllEdge.isBundledBezier()) { + pllEdge.dirtyBoundingBoxCache(); + } + } + } else { + // remove reference to parent + var parent = _ele4.parent(); + if (parent.length !== 0) { + removeChildRef(parent, _ele4); + } + } + if (removeFromPool) { + // mark as removed + _ele4._private.removed = true; + } + } + + // check to see if we have a compound graph or not + var elesStillInside = cy._private.elements; + cy._private.hasCompoundNodes = false; + for (var _i7 = 0; _i7 < elesStillInside.length; _i7++) { + var _ele5 = elesStillInside[_i7]; + if (_ele5.isParent()) { + cy._private.hasCompoundNodes = true; + break; + } + } + var removedElements = new Collection(this.cy(), elesToRemove); + if (removedElements.size() > 0) { + // must manually notify since trigger won't do this automatically once removed + + if (notifyRenderer) { + removedElements.emitAndNotify('remove'); + } else if (removeFromPool) { + removedElements.emit('remove'); + } + } + + // the parents who were modified by the removal need their style updated + for (var _i8 = 0; _i8 < alteredParents.length; _i8++) { + var _ele6 = alteredParents[_i8]; + if (!removeFromPool || !_ele6.removed()) { + _ele6.updateStyle(); + } + } + return removedElements; +}; +elesfn$1.move = function (struct) { + var cy = this._private.cy; + var eles = this; + + // just clean up refs, caches, etc. in the same way as when removing and then restoring + // (our calls to remove/restore do not remove from the graph or make events) + var notifyRenderer = false; + var modifyPool = false; + var toString = function toString(id) { + return id == null ? id : '' + id; + }; // id must be string + + if (struct.source !== undefined || struct.target !== undefined) { + var srcId = toString(struct.source); + var tgtId = toString(struct.target); + var srcExists = srcId != null && cy.hasElementWithId(srcId); + var tgtExists = tgtId != null && cy.hasElementWithId(tgtId); + if (srcExists || tgtExists) { + cy.batch(function () { + // avoid duplicate style updates + eles.remove(notifyRenderer, modifyPool); // clean up refs etc. + eles.emitAndNotify('moveout'); + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _data5 = ele._private.data; + if (ele.isEdge()) { + if (srcExists) { + _data5.source = srcId; + } + if (tgtExists) { + _data5.target = tgtId; + } + } + } + eles.restore(notifyRenderer, modifyPool); // make new refs, style, etc. + }); + + eles.emitAndNotify('move'); + } + } else if (struct.parent !== undefined) { + // move node to new parent + var parentId = toString(struct.parent); + var parentExists = parentId === null || cy.hasElementWithId(parentId); + if (parentExists) { + var pidToAssign = parentId === null ? undefined : parentId; + cy.batch(function () { + // avoid duplicate style updates + var updated = eles.remove(notifyRenderer, modifyPool); // clean up refs etc. + updated.emitAndNotify('moveout'); + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _data6 = ele._private.data; + if (ele.isNode()) { + _data6.parent = pidToAssign; + } + } + updated.restore(notifyRenderer, modifyPool); // make new refs, style, etc. + }); + + eles.emitAndNotify('move'); + } + } + return this; +}; +[elesfn$j, elesfn$i, elesfn$h, elesfn$g, elesfn$f, data, elesfn$d, dimensions, elesfn$9, elesfn$8, elesfn$7, elesfn$6, elesfn$5, elesfn$4, elesfn$3, elesfn$2].forEach(function (props) { + extend(elesfn$1, props); +}); + +var corefn$9 = { + add: function add(opts) { + var elements; + var cy = this; + + // add the elements + if (elementOrCollection(opts)) { + var eles = opts; + if (eles._private.cy === cy) { + // same instance => just restore + elements = eles.restore(); + } else { + // otherwise, copy from json + var jsons = []; + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + jsons.push(ele.json()); + } + elements = new Collection(cy, jsons); + } + } + + // specify an array of options + else if (array(opts)) { + var _jsons = opts; + elements = new Collection(cy, _jsons); + } + + // specify via opts.nodes and opts.edges + else if (plainObject(opts) && (array(opts.nodes) || array(opts.edges))) { + var elesByGroup = opts; + var _jsons2 = []; + var grs = ['nodes', 'edges']; + for (var _i = 0, il = grs.length; _i < il; _i++) { + var group = grs[_i]; + var elesArray = elesByGroup[group]; + if (array(elesArray)) { + for (var j = 0, jl = elesArray.length; j < jl; j++) { + var json = extend({ + group: group + }, elesArray[j]); + _jsons2.push(json); + } + } + } + elements = new Collection(cy, _jsons2); + } + + // specify options for one element + else { + var _json = opts; + elements = new Element(cy, _json).collection(); + } + return elements; + }, + remove: function remove(collection) { + if (elementOrCollection(collection)) ; else if (string(collection)) { + var selector = collection; + collection = this.$(selector); + } + return collection.remove(); + } +}; + +/* global Float32Array */ + +/*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License */ +function generateCubicBezier(mX1, mY1, mX2, mY2) { + var NEWTON_ITERATIONS = 4, + NEWTON_MIN_SLOPE = 0.001, + SUBDIVISION_PRECISION = 0.0000001, + SUBDIVISION_MAX_ITERATIONS = 10, + kSplineTableSize = 11, + kSampleStepSize = 1.0 / (kSplineTableSize - 1.0), + float32ArraySupported = typeof Float32Array !== 'undefined'; + + /* Must contain four arguments. */ + if (arguments.length !== 4) { + return false; + } + + /* Arguments must be numbers. */ + for (var i = 0; i < 4; ++i) { + if (typeof arguments[i] !== "number" || isNaN(arguments[i]) || !isFinite(arguments[i])) { + return false; + } + } + + /* X values must be in the [0, 1] range. */ + mX1 = Math.min(mX1, 1); + mX2 = Math.min(mX2, 1); + mX1 = Math.max(mX1, 0); + mX2 = Math.max(mX2, 0); + var mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize); + function A(aA1, aA2) { + return 1.0 - 3.0 * aA2 + 3.0 * aA1; + } + function B(aA1, aA2) { + return 3.0 * aA2 - 6.0 * aA1; + } + function C(aA1) { + return 3.0 * aA1; + } + function calcBezier(aT, aA1, aA2) { + return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; + } + function getSlope(aT, aA1, aA2) { + return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); + } + function newtonRaphsonIterate(aX, aGuessT) { + for (var _i = 0; _i < NEWTON_ITERATIONS; ++_i) { + var currentSlope = getSlope(aGuessT, mX1, mX2); + if (currentSlope === 0.0) { + return aGuessT; + } + var currentX = calcBezier(aGuessT, mX1, mX2) - aX; + aGuessT -= currentX / currentSlope; + } + return aGuessT; + } + function calcSampleValues() { + for (var _i2 = 0; _i2 < kSplineTableSize; ++_i2) { + mSampleValues[_i2] = calcBezier(_i2 * kSampleStepSize, mX1, mX2); + } + } + function binarySubdivide(aX, aA, aB) { + var currentX, + currentT, + i = 0; + do { + currentT = aA + (aB - aA) / 2.0; + currentX = calcBezier(currentT, mX1, mX2) - aX; + if (currentX > 0.0) { + aB = currentT; + } else { + aA = currentT; + } + } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS); + return currentT; + } + function getTForX(aX) { + var intervalStart = 0.0, + currentSample = 1, + lastSample = kSplineTableSize - 1; + for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) { + intervalStart += kSampleStepSize; + } + --currentSample; + var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]), + guessForT = intervalStart + dist * kSampleStepSize, + initialSlope = getSlope(guessForT, mX1, mX2); + if (initialSlope >= NEWTON_MIN_SLOPE) { + return newtonRaphsonIterate(aX, guessForT); + } else if (initialSlope === 0.0) { + return guessForT; + } else { + return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize); + } + } + var _precomputed = false; + function precompute() { + _precomputed = true; + if (mX1 !== mY1 || mX2 !== mY2) { + calcSampleValues(); + } + } + var f = function f(aX) { + if (!_precomputed) { + precompute(); + } + if (mX1 === mY1 && mX2 === mY2) { + return aX; + } + if (aX === 0) { + return 0; + } + if (aX === 1) { + return 1; + } + return calcBezier(getTForX(aX), mY1, mY2); + }; + f.getControlPoints = function () { + return [{ + x: mX1, + y: mY1 + }, { + x: mX2, + y: mY2 + }]; + }; + var str = "generateBezier(" + [mX1, mY1, mX2, mY2] + ")"; + f.toString = function () { + return str; + }; + return f; +} + +/*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */ +/* Given a tension, friction, and duration, a simulation at 60FPS will first run without a defined duration in order to calculate the full path. A second pass + then adjusts the time delta -- using the relation between actual time and duration -- to calculate the path for the duration-constrained animation. */ +var generateSpringRK4 = function () { + function springAccelerationForState(state) { + return -state.tension * state.x - state.friction * state.v; + } + function springEvaluateStateWithDerivative(initialState, dt, derivative) { + var state = { + x: initialState.x + derivative.dx * dt, + v: initialState.v + derivative.dv * dt, + tension: initialState.tension, + friction: initialState.friction + }; + return { + dx: state.v, + dv: springAccelerationForState(state) + }; + } + function springIntegrateState(state, dt) { + var a = { + dx: state.v, + dv: springAccelerationForState(state) + }, + b = springEvaluateStateWithDerivative(state, dt * 0.5, a), + c = springEvaluateStateWithDerivative(state, dt * 0.5, b), + d = springEvaluateStateWithDerivative(state, dt, c), + dxdt = 1.0 / 6.0 * (a.dx + 2.0 * (b.dx + c.dx) + d.dx), + dvdt = 1.0 / 6.0 * (a.dv + 2.0 * (b.dv + c.dv) + d.dv); + state.x = state.x + dxdt * dt; + state.v = state.v + dvdt * dt; + return state; + } + return function springRK4Factory(tension, friction, duration) { + var initState = { + x: -1, + v: 0, + tension: null, + friction: null + }, + path = [0], + time_lapsed = 0, + tolerance = 1 / 10000, + DT = 16 / 1000, + have_duration, + dt, + last_state; + tension = parseFloat(tension) || 500; + friction = parseFloat(friction) || 20; + duration = duration || null; + initState.tension = tension; + initState.friction = friction; + have_duration = duration !== null; + + /* Calculate the actual time it takes for this animation to complete with the provided conditions. */ + if (have_duration) { + /* Run the simulation without a duration. */ + time_lapsed = springRK4Factory(tension, friction); + /* Compute the adjusted time delta. */ + dt = time_lapsed / duration * DT; + } else { + dt = DT; + } + for (;;) { + /* Next/step function .*/ + last_state = springIntegrateState(last_state || initState, dt); + /* Store the position. */ + path.push(1 + last_state.x); + time_lapsed += 16; + /* If the change threshold is reached, break. */ + if (!(Math.abs(last_state.x) > tolerance && Math.abs(last_state.v) > tolerance)) { + break; + } + } + + /* If duration is not defined, return the actual time required for completing this animation. Otherwise, return a closure that holds the + computed path and returns a snapshot of the position according to a given percentComplete. */ + return !have_duration ? time_lapsed : function (percentComplete) { + return path[percentComplete * (path.length - 1) | 0]; + }; + }; +}(); + +var cubicBezier = function cubicBezier(t1, p1, t2, p2) { + var bezier = generateCubicBezier(t1, p1, t2, p2); + return function (start, end, percent) { + return start + (end - start) * bezier(percent); + }; +}; +var easings = { + 'linear': function linear(start, end, percent) { + return start + (end - start) * percent; + }, + // default easings + 'ease': cubicBezier(0.25, 0.1, 0.25, 1), + 'ease-in': cubicBezier(0.42, 0, 1, 1), + 'ease-out': cubicBezier(0, 0, 0.58, 1), + 'ease-in-out': cubicBezier(0.42, 0, 0.58, 1), + // sine + 'ease-in-sine': cubicBezier(0.47, 0, 0.745, 0.715), + 'ease-out-sine': cubicBezier(0.39, 0.575, 0.565, 1), + 'ease-in-out-sine': cubicBezier(0.445, 0.05, 0.55, 0.95), + // quad + 'ease-in-quad': cubicBezier(0.55, 0.085, 0.68, 0.53), + 'ease-out-quad': cubicBezier(0.25, 0.46, 0.45, 0.94), + 'ease-in-out-quad': cubicBezier(0.455, 0.03, 0.515, 0.955), + // cubic + 'ease-in-cubic': cubicBezier(0.55, 0.055, 0.675, 0.19), + 'ease-out-cubic': cubicBezier(0.215, 0.61, 0.355, 1), + 'ease-in-out-cubic': cubicBezier(0.645, 0.045, 0.355, 1), + // quart + 'ease-in-quart': cubicBezier(0.895, 0.03, 0.685, 0.22), + 'ease-out-quart': cubicBezier(0.165, 0.84, 0.44, 1), + 'ease-in-out-quart': cubicBezier(0.77, 0, 0.175, 1), + // quint + 'ease-in-quint': cubicBezier(0.755, 0.05, 0.855, 0.06), + 'ease-out-quint': cubicBezier(0.23, 1, 0.32, 1), + 'ease-in-out-quint': cubicBezier(0.86, 0, 0.07, 1), + // expo + 'ease-in-expo': cubicBezier(0.95, 0.05, 0.795, 0.035), + 'ease-out-expo': cubicBezier(0.19, 1, 0.22, 1), + 'ease-in-out-expo': cubicBezier(1, 0, 0, 1), + // circ + 'ease-in-circ': cubicBezier(0.6, 0.04, 0.98, 0.335), + 'ease-out-circ': cubicBezier(0.075, 0.82, 0.165, 1), + 'ease-in-out-circ': cubicBezier(0.785, 0.135, 0.15, 0.86), + // user param easings... + + 'spring': function spring(tension, friction, duration) { + if (duration === 0) { + // can't get a spring w/ duration 0 + return easings.linear; // duration 0 => jump to end so impl doesn't matter + } + + var spring = generateSpringRK4(tension, friction, duration); + return function (start, end, percent) { + return start + (end - start) * spring(percent); + }; + }, + 'cubic-bezier': cubicBezier +}; + +function getEasedValue(type, start, end, percent, easingFn) { + if (percent === 1) { + return end; + } + if (start === end) { + return end; + } + var val = easingFn(start, end, percent); + if (type == null) { + return val; + } + if (type.roundValue || type.color) { + val = Math.round(val); + } + if (type.min !== undefined) { + val = Math.max(val, type.min); + } + if (type.max !== undefined) { + val = Math.min(val, type.max); + } + return val; +} +function getValue(prop, spec) { + if (prop.pfValue != null || prop.value != null) { + if (prop.pfValue != null && (spec == null || spec.type.units !== '%')) { + return prop.pfValue; + } else { + return prop.value; + } + } else { + return prop; + } +} +function ease(startProp, endProp, percent, easingFn, propSpec) { + var type = propSpec != null ? propSpec.type : null; + if (percent < 0) { + percent = 0; + } else if (percent > 1) { + percent = 1; + } + var start = getValue(startProp, propSpec); + var end = getValue(endProp, propSpec); + if (number$1(start) && number$1(end)) { + return getEasedValue(type, start, end, percent, easingFn); + } else if (array(start) && array(end)) { + var easedArr = []; + for (var i = 0; i < end.length; i++) { + var si = start[i]; + var ei = end[i]; + if (si != null && ei != null) { + var val = getEasedValue(type, si, ei, percent, easingFn); + easedArr.push(val); + } else { + easedArr.push(ei); + } + } + return easedArr; + } + return undefined; +} + +function step$1(self, ani, now, isCore) { + var isEles = !isCore; + var _p = self._private; + var ani_p = ani._private; + var pEasing = ani_p.easing; + var startTime = ani_p.startTime; + var cy = isCore ? self : self.cy(); + var style = cy.style(); + if (!ani_p.easingImpl) { + if (pEasing == null) { + // use default + ani_p.easingImpl = easings['linear']; + } else { + // then define w/ name + var easingVals; + if (string(pEasing)) { + var easingProp = style.parse('transition-timing-function', pEasing); + easingVals = easingProp.value; + } else { + // then assume preparsed array + easingVals = pEasing; + } + var name, args; + if (string(easingVals)) { + name = easingVals; + args = []; + } else { + name = easingVals[1]; + args = easingVals.slice(2).map(function (n) { + return +n; + }); + } + if (args.length > 0) { + // create with args + if (name === 'spring') { + args.push(ani_p.duration); // need duration to generate spring + } + + ani_p.easingImpl = easings[name].apply(null, args); + } else { + // static impl by name + ani_p.easingImpl = easings[name]; + } + } + } + var easing = ani_p.easingImpl; + var percent; + if (ani_p.duration === 0) { + percent = 1; + } else { + percent = (now - startTime) / ani_p.duration; + } + if (ani_p.applying) { + percent = ani_p.progress; + } + if (percent < 0) { + percent = 0; + } else if (percent > 1) { + percent = 1; + } + if (ani_p.delay == null) { + // then update + + var startPos = ani_p.startPosition; + var endPos = ani_p.position; + if (endPos && isEles && !self.locked()) { + var newPos = {}; + if (valid(startPos.x, endPos.x)) { + newPos.x = ease(startPos.x, endPos.x, percent, easing); + } + if (valid(startPos.y, endPos.y)) { + newPos.y = ease(startPos.y, endPos.y, percent, easing); + } + self.position(newPos); + } + var startPan = ani_p.startPan; + var endPan = ani_p.pan; + var pan = _p.pan; + var animatingPan = endPan != null && isCore; + if (animatingPan) { + if (valid(startPan.x, endPan.x)) { + pan.x = ease(startPan.x, endPan.x, percent, easing); + } + if (valid(startPan.y, endPan.y)) { + pan.y = ease(startPan.y, endPan.y, percent, easing); + } + self.emit('pan'); + } + var startZoom = ani_p.startZoom; + var endZoom = ani_p.zoom; + var animatingZoom = endZoom != null && isCore; + if (animatingZoom) { + if (valid(startZoom, endZoom)) { + _p.zoom = bound(_p.minZoom, ease(startZoom, endZoom, percent, easing), _p.maxZoom); + } + self.emit('zoom'); + } + if (animatingPan || animatingZoom) { + self.emit('viewport'); + } + var props = ani_p.style; + if (props && props.length > 0 && isEles) { + for (var i = 0; i < props.length; i++) { + var prop = props[i]; + var _name = prop.name; + var end = prop; + var start = ani_p.startStyle[_name]; + var propSpec = style.properties[start.name]; + var easedVal = ease(start, end, percent, easing, propSpec); + style.overrideBypass(self, _name, easedVal); + } // for props + + self.emit('style'); + } // if + } + + ani_p.progress = percent; + return percent; +} +function valid(start, end) { + if (start == null || end == null) { + return false; + } + if (number$1(start) && number$1(end)) { + return true; + } else if (start && end) { + return true; + } + return false; +} + +function startAnimation(self, ani, now, isCore) { + var ani_p = ani._private; + ani_p.started = true; + ani_p.startTime = now - ani_p.progress * ani_p.duration; +} + +function stepAll(now, cy) { + var eles = cy._private.aniEles; + var doneEles = []; + function stepOne(ele, isCore) { + var _p = ele._private; + var current = _p.animation.current; + var queue = _p.animation.queue; + var ranAnis = false; + + // if nothing currently animating, get something from the queue + if (current.length === 0) { + var next = queue.shift(); + if (next) { + current.push(next); + } + } + var callbacks = function callbacks(_callbacks) { + for (var j = _callbacks.length - 1; j >= 0; j--) { + var cb = _callbacks[j]; + cb(); + } + _callbacks.splice(0, _callbacks.length); + }; + + // step and remove if done + for (var i = current.length - 1; i >= 0; i--) { + var ani = current[i]; + var ani_p = ani._private; + if (ani_p.stopped) { + current.splice(i, 1); + ani_p.hooked = false; + ani_p.playing = false; + ani_p.started = false; + callbacks(ani_p.frames); + continue; + } + if (!ani_p.playing && !ani_p.applying) { + continue; + } + + // an apply() while playing shouldn't do anything + if (ani_p.playing && ani_p.applying) { + ani_p.applying = false; + } + if (!ani_p.started) { + startAnimation(ele, ani, now); + } + step$1(ele, ani, now, isCore); + if (ani_p.applying) { + ani_p.applying = false; + } + callbacks(ani_p.frames); + if (ani_p.step != null) { + ani_p.step(now); + } + if (ani.completed()) { + current.splice(i, 1); + ani_p.hooked = false; + ani_p.playing = false; + ani_p.started = false; + callbacks(ani_p.completes); + } + ranAnis = true; + } + if (!isCore && current.length === 0 && queue.length === 0) { + doneEles.push(ele); + } + return ranAnis; + } // stepElement + + // handle all eles + var ranEleAni = false; + for (var e = 0; e < eles.length; e++) { + var ele = eles[e]; + var handledThisEle = stepOne(ele); + ranEleAni = ranEleAni || handledThisEle; + } // each element + + var ranCoreAni = stepOne(cy, true); + + // notify renderer + if (ranEleAni || ranCoreAni) { + if (eles.length > 0) { + cy.notify('draw', eles); + } else { + cy.notify('draw'); + } + } + + // remove elements from list of currently animating if its queues are empty + eles.unmerge(doneEles); + cy.emit('step'); +} // stepAll + +var corefn$8 = { + // pull in animation functions + animate: cytoscape_esm_define.animate(), + animation: cytoscape_esm_define.animation(), + animated: cytoscape_esm_define.animated(), + clearQueue: cytoscape_esm_define.clearQueue(), + delay: cytoscape_esm_define.delay(), + delayAnimation: cytoscape_esm_define.delayAnimation(), + stop: cytoscape_esm_define.stop(), + addToAnimationPool: function addToAnimationPool(eles) { + var cy = this; + if (!cy.styleEnabled()) { + return; + } // save cycles when no style used + + cy._private.aniEles.merge(eles); + }, + stopAnimationLoop: function stopAnimationLoop() { + this._private.animationsRunning = false; + }, + startAnimationLoop: function startAnimationLoop() { + var cy = this; + cy._private.animationsRunning = true; + if (!cy.styleEnabled()) { + return; + } // save cycles when no style used + + // NB the animation loop will exec in headless environments if style enabled + // and explicit cy.destroy() is necessary to stop the loop + + function headlessStep() { + if (!cy._private.animationsRunning) { + return; + } + requestAnimationFrame(function animationStep(now) { + stepAll(now, cy); + headlessStep(); + }); + } + var renderer = cy.renderer(); + if (renderer && renderer.beforeRender) { + // let the renderer schedule animations + renderer.beforeRender(function rendererAnimationStep(willDraw, now) { + stepAll(now, cy); + }, renderer.beforeRenderPriorities.animations); + } else { + // manage the animation loop ourselves + headlessStep(); // first call + } + } +}; + +var emitterOptions = { + qualifierCompare: function qualifierCompare(selector1, selector2) { + if (selector1 == null || selector2 == null) { + return selector1 == null && selector2 == null; + } else { + return selector1.sameText(selector2); + } + }, + eventMatches: function eventMatches(cy, listener, eventObj) { + var selector = listener.qualifier; + if (selector != null) { + return cy !== eventObj.target && cytoscape_esm_element(eventObj.target) && selector.matches(eventObj.target); + } + return true; + }, + addEventFields: function addEventFields(cy, evt) { + evt.cy = cy; + evt.target = cy; + }, + callbackContext: function callbackContext(cy, listener, eventObj) { + return listener.qualifier != null ? eventObj.target : cy; + } +}; +var argSelector = function argSelector(arg) { + if (string(arg)) { + return new Selector(arg); + } else { + return arg; + } +}; +var elesfn = { + createEmitter: function createEmitter() { + var _p = this._private; + if (!_p.emitter) { + _p.emitter = new Emitter(emitterOptions, this); + } + return this; + }, + emitter: function emitter() { + return this._private.emitter; + }, + on: function on(events, selector, callback) { + this.emitter().on(events, argSelector(selector), callback); + return this; + }, + removeListener: function removeListener(events, selector, callback) { + this.emitter().removeListener(events, argSelector(selector), callback); + return this; + }, + removeAllListeners: function removeAllListeners() { + this.emitter().removeAllListeners(); + return this; + }, + one: function one(events, selector, callback) { + this.emitter().one(events, argSelector(selector), callback); + return this; + }, + once: function once(events, selector, callback) { + this.emitter().one(events, argSelector(selector), callback); + return this; + }, + emit: function emit(events, extraParams) { + this.emitter().emit(events, extraParams); + return this; + }, + emitAndNotify: function emitAndNotify(event, eles) { + this.emit(event); + this.notify(event, eles); + return this; + } +}; +cytoscape_esm_define.eventAliasesOn(elesfn); + +var corefn$7 = { + png: function png(options) { + var renderer = this._private.renderer; + options = options || {}; + return renderer.png(options); + }, + jpg: function jpg(options) { + var renderer = this._private.renderer; + options = options || {}; + options.bg = options.bg || '#fff'; + return renderer.jpg(options); + } +}; +corefn$7.jpeg = corefn$7.jpg; + +var corefn$6 = { + layout: function layout(options) { + var cy = this; + if (options == null) { + error('Layout options must be specified to make a layout'); + return; + } + if (options.name == null) { + error('A `name` must be specified to make a layout'); + return; + } + var name = options.name; + var Layout = cy.extension('layout', name); + if (Layout == null) { + error('No such layout `' + name + '` found. Did you forget to import it and `cytoscape.use()` it?'); + return; + } + var eles; + if (string(options.eles)) { + eles = cy.$(options.eles); + } else { + eles = options.eles != null ? options.eles : cy.$(); + } + var layout = new Layout(extend({}, options, { + cy: cy, + eles: eles + })); + return layout; + } +}; +corefn$6.createLayout = corefn$6.makeLayout = corefn$6.layout; + +var corefn$5 = { + notify: function notify(eventName, eventEles) { + var _p = this._private; + if (this.batching()) { + _p.batchNotifications = _p.batchNotifications || {}; + var eles = _p.batchNotifications[eventName] = _p.batchNotifications[eventName] || this.collection(); + if (eventEles != null) { + eles.merge(eventEles); + } + return; // notifications are disabled during batching + } + + if (!_p.notificationsEnabled) { + return; + } // exit on disabled + + var renderer = this.renderer(); + + // exit if destroy() called on core or renderer in between frames #1499 #1528 + if (this.destroyed() || !renderer) { + return; + } + renderer.notify(eventName, eventEles); + }, + notifications: function notifications(bool) { + var p = this._private; + if (bool === undefined) { + return p.notificationsEnabled; + } else { + p.notificationsEnabled = bool ? true : false; + } + return this; + }, + noNotifications: function noNotifications(callback) { + this.notifications(false); + callback(); + this.notifications(true); + }, + batching: function batching() { + return this._private.batchCount > 0; + }, + startBatch: function startBatch() { + var _p = this._private; + if (_p.batchCount == null) { + _p.batchCount = 0; + } + if (_p.batchCount === 0) { + _p.batchStyleEles = this.collection(); + _p.batchNotifications = {}; + } + _p.batchCount++; + return this; + }, + endBatch: function endBatch() { + var _p = this._private; + if (_p.batchCount === 0) { + return this; + } + _p.batchCount--; + if (_p.batchCount === 0) { + // update style for dirty eles + _p.batchStyleEles.updateStyle(); + var renderer = this.renderer(); + + // notify the renderer of queued eles and event types + Object.keys(_p.batchNotifications).forEach(function (eventName) { + var eles = _p.batchNotifications[eventName]; + if (eles.empty()) { + renderer.notify(eventName); + } else { + renderer.notify(eventName, eles); + } + }); + } + return this; + }, + batch: function batch(callback) { + this.startBatch(); + callback(); + this.endBatch(); + return this; + }, + // for backwards compatibility + batchData: function batchData(map) { + var cy = this; + return this.batch(function () { + var ids = Object.keys(map); + for (var i = 0; i < ids.length; i++) { + var id = ids[i]; + var data = map[id]; + var ele = cy.getElementById(id); + ele.data(data); + } + }); + } +}; + +var rendererDefaults = defaults$g({ + hideEdgesOnViewport: false, + textureOnViewport: false, + motionBlur: false, + motionBlurOpacity: 0.05, + pixelRatio: undefined, + desktopTapThreshold: 4, + touchTapThreshold: 8, + wheelSensitivity: 1, + debug: false, + showFps: false +}); +var corefn$4 = { + renderTo: function renderTo(context, zoom, pan, pxRatio) { + var r = this._private.renderer; + r.renderTo(context, zoom, pan, pxRatio); + return this; + }, + renderer: function renderer() { + return this._private.renderer; + }, + forceRender: function forceRender() { + this.notify('draw'); + return this; + }, + resize: function resize() { + this.invalidateSize(); + this.emitAndNotify('resize'); + return this; + }, + initRenderer: function initRenderer(options) { + var cy = this; + var RendererProto = cy.extension('renderer', options.name); + if (RendererProto == null) { + error("Can not initialise: No such renderer `".concat(options.name, "` found. Did you forget to import it and `cytoscape.use()` it?")); + return; + } + if (options.wheelSensitivity !== undefined) { + warn("You have set a custom wheel sensitivity. This will make your app zoom unnaturally when using mainstream mice. You should change this value from the default only if you can guarantee that all your users will use the same hardware and OS configuration as your current machine."); + } + var rOpts = rendererDefaults(options); + rOpts.cy = cy; + cy._private.renderer = new RendererProto(rOpts); + this.notify('init'); + }, + destroyRenderer: function destroyRenderer() { + var cy = this; + cy.notify('destroy'); // destroy the renderer + + var domEle = cy.container(); + if (domEle) { + domEle._cyreg = null; + while (domEle.childNodes.length > 0) { + domEle.removeChild(domEle.childNodes[0]); + } + } + cy._private.renderer = null; // to be extra safe, remove the ref + cy.mutableElements().forEach(function (ele) { + var _p = ele._private; + _p.rscratch = {}; + _p.rstyle = {}; + _p.animation.current = []; + _p.animation.queue = []; + }); + }, + onRender: function onRender(fn) { + return this.on('render', fn); + }, + offRender: function offRender(fn) { + return this.off('render', fn); + } +}; +corefn$4.invalidateDimensions = corefn$4.resize; + +var corefn$3 = { + // get a collection + // - empty collection on no args + // - collection of elements in the graph on selector arg + // - guarantee a returned collection when elements or collection specified + collection: function collection(eles, opts) { + if (string(eles)) { + return this.$(eles); + } else if (elementOrCollection(eles)) { + return eles.collection(); + } else if (array(eles)) { + if (!opts) { + opts = {}; + } + return new Collection(this, eles, opts.unique, opts.removed); + } + return new Collection(this); + }, + nodes: function nodes(selector) { + var nodes = this.$(function (ele) { + return ele.isNode(); + }); + if (selector) { + return nodes.filter(selector); + } + return nodes; + }, + edges: function edges(selector) { + var edges = this.$(function (ele) { + return ele.isEdge(); + }); + if (selector) { + return edges.filter(selector); + } + return edges; + }, + // search the graph like jQuery + $: function $(selector) { + var eles = this._private.elements; + if (selector) { + return eles.filter(selector); + } else { + return eles.spawnSelf(); + } + }, + mutableElements: function mutableElements() { + return this._private.elements; + } +}; + +// aliases +corefn$3.elements = corefn$3.filter = corefn$3.$; + +var styfn$8 = {}; + +// keys for style blocks, e.g. ttfftt +var TRUE = 't'; +var FALSE = 'f'; + +// (potentially expensive calculation) +// apply the style to the element based on +// - its bypass +// - what selectors match it +styfn$8.apply = function (eles) { + var self = this; + var _p = self._private; + var cy = _p.cy; + var updatedEles = cy.collection(); + for (var ie = 0; ie < eles.length; ie++) { + var ele = eles[ie]; + var cxtMeta = self.getContextMeta(ele); + if (cxtMeta.empty) { + continue; + } + var cxtStyle = self.getContextStyle(cxtMeta); + var app = self.applyContextStyle(cxtMeta, cxtStyle, ele); + if (ele._private.appliedInitStyle) { + self.updateTransitions(ele, app.diffProps); + } else { + ele._private.appliedInitStyle = true; + } + var hintsDiff = self.updateStyleHints(ele); + if (hintsDiff) { + updatedEles.push(ele); + } + } // for elements + + return updatedEles; +}; +styfn$8.getPropertiesDiff = function (oldCxtKey, newCxtKey) { + var self = this; + var cache = self._private.propDiffs = self._private.propDiffs || {}; + var dualCxtKey = oldCxtKey + '-' + newCxtKey; + var cachedVal = cache[dualCxtKey]; + if (cachedVal) { + return cachedVal; + } + var diffProps = []; + var addedProp = {}; + for (var i = 0; i < self.length; i++) { + var cxt = self[i]; + var oldHasCxt = oldCxtKey[i] === TRUE; + var newHasCxt = newCxtKey[i] === TRUE; + var cxtHasDiffed = oldHasCxt !== newHasCxt; + var cxtHasMappedProps = cxt.mappedProperties.length > 0; + if (cxtHasDiffed || newHasCxt && cxtHasMappedProps) { + var props = void 0; + if (cxtHasDiffed && cxtHasMappedProps) { + props = cxt.properties; // suffices b/c mappedProperties is a subset of properties + } else if (cxtHasDiffed) { + props = cxt.properties; // need to check them all + } else if (cxtHasMappedProps) { + props = cxt.mappedProperties; // only need to check mapped + } + + for (var j = 0; j < props.length; j++) { + var prop = props[j]; + var name = prop.name; + + // if a later context overrides this property, then the fact that this context has switched/diffed doesn't matter + // (semi expensive check since it makes this function O(n^2) on context length, but worth it since overall result + // is cached) + var laterCxtOverrides = false; + for (var k = i + 1; k < self.length; k++) { + var laterCxt = self[k]; + var hasLaterCxt = newCxtKey[k] === TRUE; + if (!hasLaterCxt) { + continue; + } // can't override unless the context is active + + laterCxtOverrides = laterCxt.properties[prop.name] != null; + if (laterCxtOverrides) { + break; + } // exit early as long as one later context overrides + } + + if (!addedProp[name] && !laterCxtOverrides) { + addedProp[name] = true; + diffProps.push(name); + } + } // for props + } // if + } // for contexts + + cache[dualCxtKey] = diffProps; + return diffProps; +}; +styfn$8.getContextMeta = function (ele) { + var self = this; + var cxtKey = ''; + var diffProps; + var prevKey = ele._private.styleCxtKey || ''; + + // get the cxt key + for (var i = 0; i < self.length; i++) { + var context = self[i]; + var contextSelectorMatches = context.selector && context.selector.matches(ele); // NB: context.selector may be null for 'core' + + if (contextSelectorMatches) { + cxtKey += TRUE; + } else { + cxtKey += FALSE; + } + } // for context + + diffProps = self.getPropertiesDiff(prevKey, cxtKey); + ele._private.styleCxtKey = cxtKey; + return { + key: cxtKey, + diffPropNames: diffProps, + empty: diffProps.length === 0 + }; +}; + +// gets a computed ele style object based on matched contexts +styfn$8.getContextStyle = function (cxtMeta) { + var cxtKey = cxtMeta.key; + var self = this; + var cxtStyles = this._private.contextStyles = this._private.contextStyles || {}; + + // if already computed style, returned cached copy + if (cxtStyles[cxtKey]) { + return cxtStyles[cxtKey]; + } + var style = { + _private: { + key: cxtKey + } + }; + for (var i = 0; i < self.length; i++) { + var cxt = self[i]; + var hasCxt = cxtKey[i] === TRUE; + if (!hasCxt) { + continue; + } + for (var j = 0; j < cxt.properties.length; j++) { + var prop = cxt.properties[j]; + style[prop.name] = prop; + } + } + cxtStyles[cxtKey] = style; + return style; +}; +styfn$8.applyContextStyle = function (cxtMeta, cxtStyle, ele) { + var self = this; + var diffProps = cxtMeta.diffPropNames; + var retDiffProps = {}; + var types = self.types; + for (var i = 0; i < diffProps.length; i++) { + var diffPropName = diffProps[i]; + var cxtProp = cxtStyle[diffPropName]; + var eleProp = ele.pstyle(diffPropName); + if (!cxtProp) { + // no context prop means delete + if (!eleProp) { + continue; // no existing prop means nothing needs to be removed + // nb affects initial application on mapped values like control-point-distances + } else if (eleProp.bypass) { + cxtProp = { + name: diffPropName, + deleteBypassed: true + }; + } else { + cxtProp = { + name: diffPropName, + "delete": true + }; + } + } + + // save cycles when the context prop doesn't need to be applied + if (eleProp === cxtProp) { + continue; + } + + // save cycles when a mapped context prop doesn't need to be applied + if (cxtProp.mapped === types.fn // context prop is function mapper + && eleProp != null // some props can be null even by default (e.g. a prop that overrides another one) + && eleProp.mapping != null // ele prop is a concrete value from from a mapper + && eleProp.mapping.value === cxtProp.value // the current prop on the ele is a flat prop value for the function mapper + ) { + // NB don't write to cxtProp, as it's shared among eles (stored in stylesheet) + var mapping = eleProp.mapping; // can write to mapping, as it's a per-ele copy + var fnValue = mapping.fnValue = cxtProp.value(ele); // temporarily cache the value in case of a miss + + if (fnValue === mapping.prevFnValue) { + continue; + } + } + var retDiffProp = retDiffProps[diffPropName] = { + prev: eleProp + }; + self.applyParsedProperty(ele, cxtProp); + retDiffProp.next = ele.pstyle(diffPropName); + if (retDiffProp.next && retDiffProp.next.bypass) { + retDiffProp.next = retDiffProp.next.bypassed; + } + } + return { + diffProps: retDiffProps + }; +}; +styfn$8.updateStyleHints = function (ele) { + var _p = ele._private; + var self = this; + var propNames = self.propertyGroupNames; + var propGrKeys = self.propertyGroupKeys; + var propHash = function propHash(ele, propNames, seedKey) { + return self.getPropertiesHash(ele, propNames, seedKey); + }; + var oldStyleKey = _p.styleKey; + if (ele.removed()) { + return false; + } + var isNode = _p.group === 'nodes'; + + // get the style key hashes per prop group + // but lazily -- only use non-default prop values to reduce the number of hashes + // + + var overriddenStyles = ele._private.style; + propNames = Object.keys(overriddenStyles); + for (var i = 0; i < propGrKeys.length; i++) { + var grKey = propGrKeys[i]; + _p.styleKeys[grKey] = [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]; + } + var updateGrKey1 = function updateGrKey1(val, grKey) { + return _p.styleKeys[grKey][0] = hashInt(val, _p.styleKeys[grKey][0]); + }; + var updateGrKey2 = function updateGrKey2(val, grKey) { + return _p.styleKeys[grKey][1] = hashIntAlt(val, _p.styleKeys[grKey][1]); + }; + var updateGrKey = function updateGrKey(val, grKey) { + updateGrKey1(val, grKey); + updateGrKey2(val, grKey); + }; + var updateGrKeyWStr = function updateGrKeyWStr(strVal, grKey) { + for (var j = 0; j < strVal.length; j++) { + var ch = strVal.charCodeAt(j); + updateGrKey1(ch, grKey); + updateGrKey2(ch, grKey); + } + }; + + // - hashing works on 32 bit ints b/c we use bitwise ops + // - small numbers get cut off (e.g. 0.123 is seen as 0 by the hashing function) + // - raise up small numbers so more significant digits are seen by hashing + // - make small numbers larger than a normal value to avoid collisions + // - works in practice and it's relatively cheap + var N = 2000000000; + var cleanNum = function cleanNum(val) { + return -128 < val && val < 128 && Math.floor(val) !== val ? N - (val * 1024 | 0) : val; + }; + for (var _i = 0; _i < propNames.length; _i++) { + var name = propNames[_i]; + var parsedProp = overriddenStyles[name]; + if (parsedProp == null) { + continue; + } + var propInfo = this.properties[name]; + var type = propInfo.type; + var _grKey = propInfo.groupKey; + var normalizedNumberVal = void 0; + if (propInfo.hashOverride != null) { + normalizedNumberVal = propInfo.hashOverride(ele, parsedProp); + } else if (parsedProp.pfValue != null) { + normalizedNumberVal = parsedProp.pfValue; + } + + // might not be a number if it allows enums + var numberVal = propInfo.enums == null ? parsedProp.value : null; + var haveNormNum = normalizedNumberVal != null; + var haveUnitedNum = numberVal != null; + var haveNum = haveNormNum || haveUnitedNum; + var units = parsedProp.units; + + // numbers are cheaper to hash than strings + // 1 hash op vs n hash ops (for length n string) + if (type.number && haveNum && !type.multiple) { + var v = haveNormNum ? normalizedNumberVal : numberVal; + updateGrKey(cleanNum(v), _grKey); + if (!haveNormNum && units != null) { + updateGrKeyWStr(units, _grKey); + } + } else { + updateGrKeyWStr(parsedProp.strValue, _grKey); + } + } + + // overall style key + // + + var hash = [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]; + for (var _i2 = 0; _i2 < propGrKeys.length; _i2++) { + var _grKey2 = propGrKeys[_i2]; + var grHash = _p.styleKeys[_grKey2]; + hash[0] = hashInt(grHash[0], hash[0]); + hash[1] = hashIntAlt(grHash[1], hash[1]); + } + _p.styleKey = combineHashes(hash[0], hash[1]); + + // label dims + // + + var sk = _p.styleKeys; + _p.labelDimsKey = combineHashesArray(sk.labelDimensions); + var labelKeys = propHash(ele, ['label'], sk.labelDimensions); + _p.labelKey = combineHashesArray(labelKeys); + _p.labelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, labelKeys)); + if (!isNode) { + var sourceLabelKeys = propHash(ele, ['source-label'], sk.labelDimensions); + _p.sourceLabelKey = combineHashesArray(sourceLabelKeys); + _p.sourceLabelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, sourceLabelKeys)); + var targetLabelKeys = propHash(ele, ['target-label'], sk.labelDimensions); + _p.targetLabelKey = combineHashesArray(targetLabelKeys); + _p.targetLabelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, targetLabelKeys)); + } + + // node + // + + if (isNode) { + var _p$styleKeys = _p.styleKeys, + nodeBody = _p$styleKeys.nodeBody, + nodeBorder = _p$styleKeys.nodeBorder, + nodeOutline = _p$styleKeys.nodeOutline, + backgroundImage = _p$styleKeys.backgroundImage, + compound = _p$styleKeys.compound, + pie = _p$styleKeys.pie; + var nodeKeys = [nodeBody, nodeBorder, nodeOutline, backgroundImage, compound, pie].filter(function (k) { + return k != null; + }).reduce(hashArrays, [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]); + _p.nodeKey = combineHashesArray(nodeKeys); + _p.hasPie = pie != null && pie[0] !== DEFAULT_HASH_SEED && pie[1] !== DEFAULT_HASH_SEED_ALT; + } + return oldStyleKey !== _p.styleKey; +}; +styfn$8.clearStyleHints = function (ele) { + var _p = ele._private; + _p.styleCxtKey = ''; + _p.styleKeys = {}; + _p.styleKey = null; + _p.labelKey = null; + _p.labelStyleKey = null; + _p.sourceLabelKey = null; + _p.sourceLabelStyleKey = null; + _p.targetLabelKey = null; + _p.targetLabelStyleKey = null; + _p.nodeKey = null; + _p.hasPie = null; +}; + +// apply a property to the style (for internal use) +// returns whether application was successful +// +// now, this function flattens the property, and here's how: +// +// for parsedProp:{ bypass: true, deleteBypass: true } +// no property is generated, instead the bypass property in the +// element's style is replaced by what's pointed to by the `bypassed` +// field in the bypass property (i.e. restoring the property the +// bypass was overriding) +// +// for parsedProp:{ mapped: truthy } +// the generated flattenedProp:{ mapping: prop } +// +// for parsedProp:{ bypass: true } +// the generated flattenedProp:{ bypassed: parsedProp } +styfn$8.applyParsedProperty = function (ele, parsedProp) { + var self = this; + var prop = parsedProp; + var style = ele._private.style; + var flatProp; + var types = self.types; + var type = self.properties[prop.name].type; + var propIsBypass = prop.bypass; + var origProp = style[prop.name]; + var origPropIsBypass = origProp && origProp.bypass; + var _p = ele._private; + var flatPropMapping = 'mapping'; + var getVal = function getVal(p) { + if (p == null) { + return null; + } else if (p.pfValue != null) { + return p.pfValue; + } else { + return p.value; + } + }; + var checkTriggers = function checkTriggers() { + var fromVal = getVal(origProp); + var toVal = getVal(prop); + self.checkTriggers(ele, prop.name, fromVal, toVal); + }; + + // edge sanity checks to prevent the client from making serious mistakes + if (parsedProp.name === 'curve-style' && ele.isEdge() && ( + // loops must be bundled beziers + parsedProp.value !== 'bezier' && ele.isLoop() || + // edges connected to compound nodes can not be haystacks + parsedProp.value === 'haystack' && (ele.source().isParent() || ele.target().isParent()))) { + prop = parsedProp = this.parse(parsedProp.name, 'bezier', propIsBypass); + } + if (prop["delete"]) { + // delete the property and use the default value on falsey value + style[prop.name] = undefined; + checkTriggers(); + return true; + } + if (prop.deleteBypassed) { + // delete the property that the + if (!origProp) { + checkTriggers(); + return true; // can't delete if no prop + } else if (origProp.bypass) { + // delete bypassed + origProp.bypassed = undefined; + checkTriggers(); + return true; + } else { + return false; // we're unsuccessful deleting the bypassed + } + } + + // check if we need to delete the current bypass + if (prop.deleteBypass) { + // then this property is just here to indicate we need to delete + if (!origProp) { + checkTriggers(); + return true; // property is already not defined + } else if (origProp.bypass) { + // then replace the bypass property with the original + // because the bypassed property was already applied (and therefore parsed), we can just replace it (no reapplying necessary) + style[prop.name] = origProp.bypassed; + checkTriggers(); + return true; + } else { + return false; // we're unsuccessful deleting the bypass + } + } + + var printMappingErr = function printMappingErr() { + warn('Do not assign mappings to elements without corresponding data (i.e. ele `' + ele.id() + '` has no mapping for property `' + prop.name + '` with data field `' + prop.field + '`); try a `[' + prop.field + ']` selector to limit scope to elements with `' + prop.field + '` defined'); + }; + + // put the property in the style objects + switch (prop.mapped) { + // flatten the property if mapped + case types.mapData: + { + // flatten the field (e.g. data.foo.bar) + var fields = prop.field.split('.'); + var fieldVal = _p.data; + for (var i = 0; i < fields.length && fieldVal; i++) { + var field = fields[i]; + fieldVal = fieldVal[field]; + } + if (fieldVal == null) { + printMappingErr(); + return false; + } + var percent; + if (!number$1(fieldVal)) { + // then don't apply and fall back on the existing style + warn('Do not use continuous mappers without specifying numeric data (i.e. `' + prop.field + ': ' + fieldVal + '` for `' + ele.id() + '` is non-numeric)'); + return false; + } else { + var fieldWidth = prop.fieldMax - prop.fieldMin; + if (fieldWidth === 0) { + // safety check -- not strictly necessary as no props of zero range should be passed here + percent = 0; + } else { + percent = (fieldVal - prop.fieldMin) / fieldWidth; + } + } + + // make sure to bound percent value + if (percent < 0) { + percent = 0; + } else if (percent > 1) { + percent = 1; + } + if (type.color) { + var r1 = prop.valueMin[0]; + var r2 = prop.valueMax[0]; + var g1 = prop.valueMin[1]; + var g2 = prop.valueMax[1]; + var b1 = prop.valueMin[2]; + var b2 = prop.valueMax[2]; + var a1 = prop.valueMin[3] == null ? 1 : prop.valueMin[3]; + var a2 = prop.valueMax[3] == null ? 1 : prop.valueMax[3]; + var clr = [Math.round(r1 + (r2 - r1) * percent), Math.round(g1 + (g2 - g1) * percent), Math.round(b1 + (b2 - b1) * percent), Math.round(a1 + (a2 - a1) * percent)]; + flatProp = { + // colours are simple, so just create the flat property instead of expensive string parsing + bypass: prop.bypass, + // we're a bypass if the mapping property is a bypass + name: prop.name, + value: clr, + strValue: 'rgb(' + clr[0] + ', ' + clr[1] + ', ' + clr[2] + ')' + }; + } else if (type.number) { + var calcValue = prop.valueMin + (prop.valueMax - prop.valueMin) * percent; + flatProp = this.parse(prop.name, calcValue, prop.bypass, flatPropMapping); + } else { + return false; // can only map to colours and numbers + } + + if (!flatProp) { + // if we can't flatten the property, then don't apply the property and fall back on the existing style + printMappingErr(); + return false; + } + flatProp.mapping = prop; // keep a reference to the mapping + prop = flatProp; // the flattened (mapped) property is the one we want + + break; + } + + // direct mapping + case types.data: + { + // flatten the field (e.g. data.foo.bar) + var _fields = prop.field.split('.'); + var _fieldVal = _p.data; + for (var _i3 = 0; _i3 < _fields.length && _fieldVal; _i3++) { + var _field = _fields[_i3]; + _fieldVal = _fieldVal[_field]; + } + if (_fieldVal != null) { + flatProp = this.parse(prop.name, _fieldVal, prop.bypass, flatPropMapping); + } + if (!flatProp) { + // if we can't flatten the property, then don't apply and fall back on the existing style + printMappingErr(); + return false; + } + flatProp.mapping = prop; // keep a reference to the mapping + prop = flatProp; // the flattened (mapped) property is the one we want + + break; + } + case types.fn: + { + var fn = prop.value; + var fnRetVal = prop.fnValue != null ? prop.fnValue : fn(ele); // check for cached value before calling function + + prop.prevFnValue = fnRetVal; + if (fnRetVal == null) { + warn('Custom function mappers may not return null (i.e. `' + prop.name + '` for ele `' + ele.id() + '` is null)'); + return false; + } + flatProp = this.parse(prop.name, fnRetVal, prop.bypass, flatPropMapping); + if (!flatProp) { + warn('Custom function mappers may not return invalid values for the property type (i.e. `' + prop.name + '` for ele `' + ele.id() + '` is invalid)'); + return false; + } + flatProp.mapping = copy(prop); // keep a reference to the mapping + prop = flatProp; // the flattened (mapped) property is the one we want + + break; + } + case undefined: + break; + // just set the property + + default: + return false; + // not a valid mapping + } + + // if the property is a bypass property, then link the resultant property to the original one + if (propIsBypass) { + if (origPropIsBypass) { + // then this bypass overrides the existing one + prop.bypassed = origProp.bypassed; // steal bypassed prop from old bypass + } else { + // then link the orig prop to the new bypass + prop.bypassed = origProp; + } + style[prop.name] = prop; // and set + } else { + // prop is not bypass + if (origPropIsBypass) { + // then keep the orig prop (since it's a bypass) and link to the new prop + origProp.bypassed = prop; + } else { + // then just replace the old prop with the new one + style[prop.name] = prop; + } + } + checkTriggers(); + return true; +}; +styfn$8.cleanElements = function (eles, keepBypasses) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + this.clearStyleHints(ele); + ele.dirtyCompoundBoundsCache(); + ele.dirtyBoundingBoxCache(); + if (!keepBypasses) { + ele._private.style = {}; + } else { + var style = ele._private.style; + var propNames = Object.keys(style); + for (var j = 0; j < propNames.length; j++) { + var propName = propNames[j]; + var eleProp = style[propName]; + if (eleProp != null) { + if (eleProp.bypass) { + eleProp.bypassed = null; + } else { + style[propName] = null; + } + } + } + } + } +}; + +// updates the visual style for all elements (useful for manual style modification after init) +styfn$8.update = function () { + var cy = this._private.cy; + var eles = cy.mutableElements(); + eles.updateStyle(); +}; + +// diffProps : { name => { prev, next } } +styfn$8.updateTransitions = function (ele, diffProps) { + var self = this; + var _p = ele._private; + var props = ele.pstyle('transition-property').value; + var duration = ele.pstyle('transition-duration').pfValue; + var delay = ele.pstyle('transition-delay').pfValue; + if (props.length > 0 && duration > 0) { + var style = {}; + + // build up the style to animate towards + var anyPrev = false; + for (var i = 0; i < props.length; i++) { + var prop = props[i]; + var styProp = ele.pstyle(prop); + var diffProp = diffProps[prop]; + if (!diffProp) { + continue; + } + var prevProp = diffProp.prev; + var fromProp = prevProp; + var toProp = diffProp.next != null ? diffProp.next : styProp; + var diff = false; + var initVal = void 0; + var initDt = 0.000001; // delta time % value for initVal (allows animating out of init zero opacity) + + if (!fromProp) { + continue; + } + + // consider px values + if (number$1(fromProp.pfValue) && number$1(toProp.pfValue)) { + diff = toProp.pfValue - fromProp.pfValue; // nonzero is truthy + initVal = fromProp.pfValue + initDt * diff; + + // consider numerical values + } else if (number$1(fromProp.value) && number$1(toProp.value)) { + diff = toProp.value - fromProp.value; // nonzero is truthy + initVal = fromProp.value + initDt * diff; + + // consider colour values + } else if (array(fromProp.value) && array(toProp.value)) { + diff = fromProp.value[0] !== toProp.value[0] || fromProp.value[1] !== toProp.value[1] || fromProp.value[2] !== toProp.value[2]; + initVal = fromProp.strValue; + } + + // the previous value is good for an animation only if it's different + if (diff) { + style[prop] = toProp.strValue; // to val + this.applyBypass(ele, prop, initVal); // from val + anyPrev = true; + } + } // end if props allow ani + + // can't transition if there's nothing previous to transition from + if (!anyPrev) { + return; + } + _p.transitioning = true; + new Promise$1(function (resolve) { + if (delay > 0) { + ele.delayAnimation(delay).play().promise().then(resolve); + } else { + resolve(); + } + }).then(function () { + return ele.animation({ + style: style, + duration: duration, + easing: ele.pstyle('transition-timing-function').value, + queue: false + }).play().promise(); + }).then(function () { + // if( !isBypass ){ + self.removeBypasses(ele, props); + ele.emitAndNotify('style'); + // } + + _p.transitioning = false; + }); + } else if (_p.transitioning) { + this.removeBypasses(ele, props); + ele.emitAndNotify('style'); + _p.transitioning = false; + } +}; +styfn$8.checkTrigger = function (ele, name, fromValue, toValue, getTrigger, onTrigger) { + var prop = this.properties[name]; + var triggerCheck = getTrigger(prop); + if (triggerCheck != null && triggerCheck(fromValue, toValue)) { + onTrigger(prop); + } +}; +styfn$8.checkZOrderTrigger = function (ele, name, fromValue, toValue) { + var _this = this; + this.checkTrigger(ele, name, fromValue, toValue, function (prop) { + return prop.triggersZOrder; + }, function () { + _this._private.cy.notify('zorder', ele); + }); +}; +styfn$8.checkBoundsTrigger = function (ele, name, fromValue, toValue) { + this.checkTrigger(ele, name, fromValue, toValue, function (prop) { + return prop.triggersBounds; + }, function (prop) { + ele.dirtyCompoundBoundsCache(); + ele.dirtyBoundingBoxCache(); + + // if the prop change makes the bb of pll bezier edges invalid, + // then dirty the pll edge bb cache as well + if ( + // only for beziers -- so performance of other edges isn't affected + prop.triggersBoundsOfParallelBeziers && name === 'curve-style' && (fromValue === 'bezier' || toValue === 'bezier')) { + ele.parallelEdges().forEach(function (pllEdge) { + if (pllEdge.isBundledBezier()) { + pllEdge.dirtyBoundingBoxCache(); + } + }); + } + if (prop.triggersBoundsOfConnectedEdges && name === 'display' && (fromValue === 'none' || toValue === 'none')) { + ele.connectedEdges().forEach(function (edge) { + edge.dirtyBoundingBoxCache(); + }); + } + }); +}; +styfn$8.checkTriggers = function (ele, name, fromValue, toValue) { + ele.dirtyStyleCache(); + this.checkZOrderTrigger(ele, name, fromValue, toValue); + this.checkBoundsTrigger(ele, name, fromValue, toValue); +}; + +var styfn$7 = {}; + +// bypasses are applied to an existing style on an element, and just tacked on temporarily +// returns true iff application was successful for at least 1 specified property +styfn$7.applyBypass = function (eles, name, value, updateTransitions) { + var self = this; + var props = []; + var isBypass = true; + + // put all the properties (can specify one or many) in an array after parsing them + if (name === '*' || name === '**') { + // apply to all property names + + if (value !== undefined) { + for (var i = 0; i < self.properties.length; i++) { + var prop = self.properties[i]; + var _name = prop.name; + var parsedProp = this.parse(_name, value, true); + if (parsedProp) { + props.push(parsedProp); + } + } + } + } else if (string(name)) { + // then parse the single property + var _parsedProp = this.parse(name, value, true); + if (_parsedProp) { + props.push(_parsedProp); + } + } else if (plainObject(name)) { + // then parse each property + var specifiedProps = name; + updateTransitions = value; + var names = Object.keys(specifiedProps); + for (var _i = 0; _i < names.length; _i++) { + var _name2 = names[_i]; + var _value = specifiedProps[_name2]; + if (_value === undefined) { + // try camel case name too + _value = specifiedProps[dash2camel(_name2)]; + } + if (_value !== undefined) { + var _parsedProp2 = this.parse(_name2, _value, true); + if (_parsedProp2) { + props.push(_parsedProp2); + } + } + } + } else { + // can't do anything without well defined properties + return false; + } + + // we've failed if there are no valid properties + if (props.length === 0) { + return false; + } + + // now, apply the bypass properties on the elements + var ret = false; // return true if at least one succesful bypass applied + for (var _i2 = 0; _i2 < eles.length; _i2++) { + // for each ele + var ele = eles[_i2]; + var diffProps = {}; + var diffProp = void 0; + for (var j = 0; j < props.length; j++) { + // for each prop + var _prop = props[j]; + if (updateTransitions) { + var prevProp = ele.pstyle(_prop.name); + diffProp = diffProps[_prop.name] = { + prev: prevProp + }; + } + ret = this.applyParsedProperty(ele, copy(_prop)) || ret; + if (updateTransitions) { + diffProp.next = ele.pstyle(_prop.name); + } + } // for props + + if (ret) { + this.updateStyleHints(ele); + } + if (updateTransitions) { + this.updateTransitions(ele, diffProps, isBypass); + } + } // for eles + + return ret; +}; + +// only useful in specific cases like animation +styfn$7.overrideBypass = function (eles, name, value) { + name = camel2dash(name); + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var prop = ele._private.style[name]; + var type = this.properties[name].type; + var isColor = type.color; + var isMulti = type.mutiple; + var oldValue = !prop ? null : prop.pfValue != null ? prop.pfValue : prop.value; + if (!prop || !prop.bypass) { + // need a bypass if one doesn't exist + this.applyBypass(ele, name, value); + } else { + prop.value = value; + if (prop.pfValue != null) { + prop.pfValue = value; + } + if (isColor) { + prop.strValue = 'rgb(' + value.join(',') + ')'; + } else if (isMulti) { + prop.strValue = value.join(' '); + } else { + prop.strValue = '' + value; + } + this.updateStyleHints(ele); + } + this.checkTriggers(ele, name, oldValue, value); + } +}; +styfn$7.removeAllBypasses = function (eles, updateTransitions) { + return this.removeBypasses(eles, this.propertyNames, updateTransitions); +}; +styfn$7.removeBypasses = function (eles, props, updateTransitions) { + var isBypass = true; + for (var j = 0; j < eles.length; j++) { + var ele = eles[j]; + var diffProps = {}; + for (var i = 0; i < props.length; i++) { + var name = props[i]; + var prop = this.properties[name]; + var prevProp = ele.pstyle(prop.name); + if (!prevProp || !prevProp.bypass) { + // if a bypass doesn't exist for the prop, nothing needs to be removed + continue; + } + var value = ''; // empty => remove bypass + var parsedProp = this.parse(name, value, true); + var diffProp = diffProps[prop.name] = { + prev: prevProp + }; + this.applyParsedProperty(ele, parsedProp); + diffProp.next = ele.pstyle(prop.name); + } // for props + + this.updateStyleHints(ele); + if (updateTransitions) { + this.updateTransitions(ele, diffProps, isBypass); + } + } // for eles +}; + +var styfn$6 = {}; + +// gets what an em size corresponds to in pixels relative to a dom element +styfn$6.getEmSizeInPixels = function () { + var px = this.containerCss('font-size'); + if (px != null) { + return parseFloat(px); + } else { + return 1; // for headless + } +}; + +// gets css property from the core container +styfn$6.containerCss = function (propName) { + var cy = this._private.cy; + var domElement = cy.container(); + var containerWindow = cy.window(); + if (containerWindow && domElement && containerWindow.getComputedStyle) { + return containerWindow.getComputedStyle(domElement).getPropertyValue(propName); + } +}; + +var styfn$5 = {}; + +// gets the rendered style for an element +styfn$5.getRenderedStyle = function (ele, prop) { + if (prop) { + return this.getStylePropertyValue(ele, prop, true); + } else { + return this.getRawStyle(ele, true); + } +}; + +// gets the raw style for an element +styfn$5.getRawStyle = function (ele, isRenderedVal) { + var self = this; + ele = ele[0]; // insure it's an element + + if (ele) { + var rstyle = {}; + for (var i = 0; i < self.properties.length; i++) { + var prop = self.properties[i]; + var val = self.getStylePropertyValue(ele, prop.name, isRenderedVal); + if (val != null) { + rstyle[prop.name] = val; + rstyle[dash2camel(prop.name)] = val; + } + } + return rstyle; + } +}; +styfn$5.getIndexedStyle = function (ele, property, subproperty, index) { + var pstyle = ele.pstyle(property)[subproperty][index]; + return pstyle != null ? pstyle : ele.cy().style().getDefaultProperty(property)[subproperty][0]; +}; +styfn$5.getStylePropertyValue = function (ele, propName, isRenderedVal) { + var self = this; + ele = ele[0]; // insure it's an element + + if (ele) { + var prop = self.properties[propName]; + if (prop.alias) { + prop = prop.pointsTo; + } + var type = prop.type; + var styleProp = ele.pstyle(prop.name); + if (styleProp) { + var value = styleProp.value, + units = styleProp.units, + strValue = styleProp.strValue; + if (isRenderedVal && type.number && value != null && number$1(value)) { + var zoom = ele.cy().zoom(); + var getRenderedValue = function getRenderedValue(val) { + return val * zoom; + }; + var getValueStringWithUnits = function getValueStringWithUnits(val, units) { + return getRenderedValue(val) + units; + }; + var isArrayValue = array(value); + var haveUnits = isArrayValue ? units.every(function (u) { + return u != null; + }) : units != null; + if (haveUnits) { + if (isArrayValue) { + return value.map(function (v, i) { + return getValueStringWithUnits(v, units[i]); + }).join(' '); + } else { + return getValueStringWithUnits(value, units); + } + } else { + if (isArrayValue) { + return value.map(function (v) { + return string(v) ? v : '' + getRenderedValue(v); + }).join(' '); + } else { + return '' + getRenderedValue(value); + } + } + } else if (strValue != null) { + return strValue; + } + } + return null; + } +}; +styfn$5.getAnimationStartStyle = function (ele, aniProps) { + var rstyle = {}; + for (var i = 0; i < aniProps.length; i++) { + var aniProp = aniProps[i]; + var name = aniProp.name; + var styleProp = ele.pstyle(name); + if (styleProp !== undefined) { + // then make a prop of it + if (plainObject(styleProp)) { + styleProp = this.parse(name, styleProp.strValue); + } else { + styleProp = this.parse(name, styleProp); + } + } + if (styleProp) { + rstyle[name] = styleProp; + } + } + return rstyle; +}; +styfn$5.getPropsList = function (propsObj) { + var self = this; + var rstyle = []; + var style = propsObj; + var props = self.properties; + if (style) { + var names = Object.keys(style); + for (var i = 0; i < names.length; i++) { + var name = names[i]; + var val = style[name]; + var prop = props[name] || props[camel2dash(name)]; + var styleProp = this.parse(prop.name, val); + if (styleProp) { + rstyle.push(styleProp); + } + } + } + return rstyle; +}; +styfn$5.getNonDefaultPropertiesHash = function (ele, propNames, seed) { + var hash = seed.slice(); + var name, val, strVal, chVal; + var i, j; + for (i = 0; i < propNames.length; i++) { + name = propNames[i]; + val = ele.pstyle(name, false); + if (val == null) { + continue; + } else if (val.pfValue != null) { + hash[0] = hashInt(chVal, hash[0]); + hash[1] = hashIntAlt(chVal, hash[1]); + } else { + strVal = val.strValue; + for (j = 0; j < strVal.length; j++) { + chVal = strVal.charCodeAt(j); + hash[0] = hashInt(chVal, hash[0]); + hash[1] = hashIntAlt(chVal, hash[1]); + } + } + } + return hash; +}; +styfn$5.getPropertiesHash = styfn$5.getNonDefaultPropertiesHash; + +var styfn$4 = {}; +styfn$4.appendFromJson = function (json) { + var style = this; + for (var i = 0; i < json.length; i++) { + var context = json[i]; + var selector = context.selector; + var props = context.style || context.css; + var names = Object.keys(props); + style.selector(selector); // apply selector + + for (var j = 0; j < names.length; j++) { + var name = names[j]; + var value = props[name]; + style.css(name, value); // apply property + } + } + + return style; +}; + +// accessible cy.style() function +styfn$4.fromJson = function (json) { + var style = this; + style.resetToDefault(); + style.appendFromJson(json); + return style; +}; + +// get json from cy.style() api +styfn$4.json = function () { + var json = []; + for (var i = this.defaultLength; i < this.length; i++) { + var cxt = this[i]; + var selector = cxt.selector; + var props = cxt.properties; + var css = {}; + for (var j = 0; j < props.length; j++) { + var prop = props[j]; + css[prop.name] = prop.strValue; + } + json.push({ + selector: !selector ? 'core' : selector.toString(), + style: css + }); + } + return json; +}; + +var styfn$3 = {}; +styfn$3.appendFromString = function (string) { + var self = this; + var style = this; + var remaining = '' + string; + var selAndBlockStr; + var blockRem; + var propAndValStr; + + // remove comments from the style string + remaining = remaining.replace(/[/][*](\s|.)+?[*][/]/g, ''); + function removeSelAndBlockFromRemaining() { + // remove the parsed selector and block from the remaining text to parse + if (remaining.length > selAndBlockStr.length) { + remaining = remaining.substr(selAndBlockStr.length); + } else { + remaining = ''; + } + } + function removePropAndValFromRem() { + // remove the parsed property and value from the remaining block text to parse + if (blockRem.length > propAndValStr.length) { + blockRem = blockRem.substr(propAndValStr.length); + } else { + blockRem = ''; + } + } + for (;;) { + var nothingLeftToParse = remaining.match(/^\s*$/); + if (nothingLeftToParse) { + break; + } + var selAndBlock = remaining.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/); + if (!selAndBlock) { + warn('Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: ' + remaining); + break; + } + selAndBlockStr = selAndBlock[0]; + + // parse the selector + var selectorStr = selAndBlock[1]; + if (selectorStr !== 'core') { + var selector = new Selector(selectorStr); + if (selector.invalid) { + warn('Skipping parsing of block: Invalid selector found in string stylesheet: ' + selectorStr); + + // skip this selector and block + removeSelAndBlockFromRemaining(); + continue; + } + } + + // parse the block of properties and values + var blockStr = selAndBlock[2]; + var invalidBlock = false; + blockRem = blockStr; + var props = []; + for (;;) { + var _nothingLeftToParse = blockRem.match(/^\s*$/); + if (_nothingLeftToParse) { + break; + } + var propAndVal = blockRem.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/); + if (!propAndVal) { + warn('Skipping parsing of block: Invalid formatting of style property and value definitions found in:' + blockStr); + invalidBlock = true; + break; + } + propAndValStr = propAndVal[0]; + var propStr = propAndVal[1]; + var valStr = propAndVal[2]; + var prop = self.properties[propStr]; + if (!prop) { + warn('Skipping property: Invalid property name in: ' + propAndValStr); + + // skip this property in the block + removePropAndValFromRem(); + continue; + } + var parsedProp = style.parse(propStr, valStr); + if (!parsedProp) { + warn('Skipping property: Invalid property definition in: ' + propAndValStr); + + // skip this property in the block + removePropAndValFromRem(); + continue; + } + props.push({ + name: propStr, + val: valStr + }); + removePropAndValFromRem(); + } + if (invalidBlock) { + removeSelAndBlockFromRemaining(); + break; + } + + // put the parsed block in the style + style.selector(selectorStr); + for (var i = 0; i < props.length; i++) { + var _prop = props[i]; + style.css(_prop.name, _prop.val); + } + removeSelAndBlockFromRemaining(); + } + return style; +}; +styfn$3.fromString = function (string) { + var style = this; + style.resetToDefault(); + style.appendFromString(string); + return style; +}; + +var styfn$2 = {}; +(function () { + var number$1 = number; + var rgba = rgbaNoBackRefs; + var hsla = hslaNoBackRefs; + var hex3$1 = hex3; + var hex6$1 = hex6; + var data = function data(prefix) { + return '^' + prefix + '\\s*\\(\\s*([\\w\\.]+)\\s*\\)$'; + }; + var mapData = function mapData(prefix) { + var mapArg = number$1 + '|\\w+|' + rgba + '|' + hsla + '|' + hex3$1 + '|' + hex6$1; + return '^' + prefix + '\\s*\\(([\\w\\.]+)\\s*\\,\\s*(' + number$1 + ')\\s*\\,\\s*(' + number$1 + ')\\s*,\\s*(' + mapArg + ')\\s*\\,\\s*(' + mapArg + ')\\)$'; + }; + var urlRegexes = ['^url\\s*\\(\\s*[\'"]?(.+?)[\'"]?\\s*\\)$', '^(none)$', '^(.+)$']; + + // each visual style property has a type and needs to be validated according to it + styfn$2.types = { + time: { + number: true, + min: 0, + units: 's|ms', + implicitUnits: 'ms' + }, + percent: { + number: true, + min: 0, + max: 100, + units: '%', + implicitUnits: '%' + }, + percentages: { + number: true, + min: 0, + max: 100, + units: '%', + implicitUnits: '%', + multiple: true + }, + zeroOneNumber: { + number: true, + min: 0, + max: 1, + unitless: true + }, + zeroOneNumbers: { + number: true, + min: 0, + max: 1, + unitless: true, + multiple: true + }, + nOneOneNumber: { + number: true, + min: -1, + max: 1, + unitless: true + }, + nonNegativeInt: { + number: true, + min: 0, + integer: true, + unitless: true + }, + nonNegativeNumber: { + number: true, + min: 0, + unitless: true + }, + position: { + enums: ['parent', 'origin'] + }, + nodeSize: { + number: true, + min: 0, + enums: ['label'] + }, + number: { + number: true, + unitless: true + }, + numbers: { + number: true, + unitless: true, + multiple: true + }, + positiveNumber: { + number: true, + unitless: true, + min: 0, + strictMin: true + }, + size: { + number: true, + min: 0 + }, + bidirectionalSize: { + number: true + }, + // allows negative + bidirectionalSizeMaybePercent: { + number: true, + allowPercent: true + }, + // allows negative + bidirectionalSizes: { + number: true, + multiple: true + }, + // allows negative + sizeMaybePercent: { + number: true, + min: 0, + allowPercent: true + }, + axisDirection: { + enums: ['horizontal', 'leftward', 'rightward', 'vertical', 'upward', 'downward', 'auto'] + }, + paddingRelativeTo: { + enums: ['width', 'height', 'average', 'min', 'max'] + }, + bgWH: { + number: true, + min: 0, + allowPercent: true, + enums: ['auto'], + multiple: true + }, + bgPos: { + number: true, + allowPercent: true, + multiple: true + }, + bgRelativeTo: { + enums: ['inner', 'include-padding'], + multiple: true + }, + bgRepeat: { + enums: ['repeat', 'repeat-x', 'repeat-y', 'no-repeat'], + multiple: true + }, + bgFit: { + enums: ['none', 'contain', 'cover'], + multiple: true + }, + bgCrossOrigin: { + enums: ['anonymous', 'use-credentials', 'null'], + multiple: true + }, + bgClip: { + enums: ['none', 'node'], + multiple: true + }, + bgContainment: { + enums: ['inside', 'over'], + multiple: true + }, + color: { + color: true + }, + colors: { + color: true, + multiple: true + }, + fill: { + enums: ['solid', 'linear-gradient', 'radial-gradient'] + }, + bool: { + enums: ['yes', 'no'] + }, + bools: { + enums: ['yes', 'no'], + multiple: true + }, + lineStyle: { + enums: ['solid', 'dotted', 'dashed'] + }, + lineCap: { + enums: ['butt', 'round', 'square'] + }, + linePosition: { + enums: ['center', 'inside', 'outside'] + }, + lineJoin: { + enums: ['round', 'bevel', 'miter'] + }, + borderStyle: { + enums: ['solid', 'dotted', 'dashed', 'double'] + }, + curveStyle: { + enums: ['bezier', 'unbundled-bezier', 'haystack', 'segments', 'straight', 'straight-triangle', 'taxi', 'round-segments', 'round-taxi'] + }, + radiusType: { + enums: ['arc-radius', 'influence-radius'], + multiple: true + }, + fontFamily: { + regex: '^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$' + }, + fontStyle: { + enums: ['italic', 'normal', 'oblique'] + }, + fontWeight: { + enums: ['normal', 'bold', 'bolder', 'lighter', '100', '200', '300', '400', '500', '600', '800', '900', 100, 200, 300, 400, 500, 600, 700, 800, 900] + }, + textDecoration: { + enums: ['none', 'underline', 'overline', 'line-through'] + }, + textTransform: { + enums: ['none', 'uppercase', 'lowercase'] + }, + textWrap: { + enums: ['none', 'wrap', 'ellipsis'] + }, + textOverflowWrap: { + enums: ['whitespace', 'anywhere'] + }, + textBackgroundShape: { + enums: ['rectangle', 'roundrectangle', 'round-rectangle'] + }, + nodeShape: { + enums: ['rectangle', 'roundrectangle', 'round-rectangle', 'cutrectangle', 'cut-rectangle', 'bottomroundrectangle', 'bottom-round-rectangle', 'barrel', 'ellipse', 'triangle', 'round-triangle', 'square', 'pentagon', 'round-pentagon', 'hexagon', 'round-hexagon', 'concavehexagon', 'concave-hexagon', 'heptagon', 'round-heptagon', 'octagon', 'round-octagon', 'tag', 'round-tag', 'star', 'diamond', 'round-diamond', 'vee', 'rhomboid', 'right-rhomboid', 'polygon'] + }, + overlayShape: { + enums: ['roundrectangle', 'round-rectangle', 'ellipse'] + }, + cornerRadius: { + number: true, + min: 0, + units: 'px|em', + implicitUnits: 'px', + enums: ['auto'] + }, + compoundIncludeLabels: { + enums: ['include', 'exclude'] + }, + arrowShape: { + enums: ['tee', 'triangle', 'triangle-tee', 'circle-triangle', 'triangle-cross', 'triangle-backcurve', 'vee', 'square', 'circle', 'diamond', 'chevron', 'none'] + }, + arrowFill: { + enums: ['filled', 'hollow'] + }, + arrowWidth: { + number: true, + units: '%|px|em', + implicitUnits: 'px', + enums: ['match-line'] + }, + display: { + enums: ['element', 'none'] + }, + visibility: { + enums: ['hidden', 'visible'] + }, + zCompoundDepth: { + enums: ['bottom', 'orphan', 'auto', 'top'] + }, + zIndexCompare: { + enums: ['auto', 'manual'] + }, + valign: { + enums: ['top', 'center', 'bottom'] + }, + halign: { + enums: ['left', 'center', 'right'] + }, + justification: { + enums: ['left', 'center', 'right', 'auto'] + }, + text: { + string: true + }, + data: { + mapping: true, + regex: data('data') + }, + layoutData: { + mapping: true, + regex: data('layoutData') + }, + scratch: { + mapping: true, + regex: data('scratch') + }, + mapData: { + mapping: true, + regex: mapData('mapData') + }, + mapLayoutData: { + mapping: true, + regex: mapData('mapLayoutData') + }, + mapScratch: { + mapping: true, + regex: mapData('mapScratch') + }, + fn: { + mapping: true, + fn: true + }, + url: { + regexes: urlRegexes, + singleRegexMatchValue: true + }, + urls: { + regexes: urlRegexes, + singleRegexMatchValue: true, + multiple: true + }, + propList: { + propList: true + }, + angle: { + number: true, + units: 'deg|rad', + implicitUnits: 'rad' + }, + textRotation: { + number: true, + units: 'deg|rad', + implicitUnits: 'rad', + enums: ['none', 'autorotate'] + }, + polygonPointList: { + number: true, + multiple: true, + evenMultiple: true, + min: -1, + max: 1, + unitless: true + }, + edgeDistances: { + enums: ['intersection', 'node-position', 'endpoints'] + }, + edgeEndpoint: { + number: true, + multiple: true, + units: '%|px|em|deg|rad', + implicitUnits: 'px', + enums: ['inside-to-node', 'outside-to-node', 'outside-to-node-or-label', 'outside-to-line', 'outside-to-line-or-label'], + singleEnum: true, + validate: function validate(valArr, unitsArr) { + switch (valArr.length) { + case 2: + // can be % or px only + return unitsArr[0] !== 'deg' && unitsArr[0] !== 'rad' && unitsArr[1] !== 'deg' && unitsArr[1] !== 'rad'; + case 1: + // can be enum, deg, or rad only + return string(valArr[0]) || unitsArr[0] === 'deg' || unitsArr[0] === 'rad'; + default: + return false; + } + } + }, + easing: { + regexes: ['^(spring)\\s*\\(\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*\\)$', '^(cubic-bezier)\\s*\\(\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*\\)$'], + enums: ['linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out', 'ease-in-sine', 'ease-out-sine', 'ease-in-out-sine', 'ease-in-quad', 'ease-out-quad', 'ease-in-out-quad', 'ease-in-cubic', 'ease-out-cubic', 'ease-in-out-cubic', 'ease-in-quart', 'ease-out-quart', 'ease-in-out-quart', 'ease-in-quint', 'ease-out-quint', 'ease-in-out-quint', 'ease-in-expo', 'ease-out-expo', 'ease-in-out-expo', 'ease-in-circ', 'ease-out-circ', 'ease-in-out-circ'] + }, + gradientDirection: { + enums: ['to-bottom', 'to-top', 'to-left', 'to-right', 'to-bottom-right', 'to-bottom-left', 'to-top-right', 'to-top-left', 'to-right-bottom', 'to-left-bottom', 'to-right-top', 'to-left-top' // different order + ] + }, + + boundsExpansion: { + number: true, + multiple: true, + min: 0, + validate: function validate(valArr) { + var length = valArr.length; + return length === 1 || length === 2 || length === 4; + } + } + }; + var diff = { + zeroNonZero: function zeroNonZero(val1, val2) { + if ((val1 == null || val2 == null) && val1 !== val2) { + return true; // null cases could represent any value + } + if (val1 == 0 && val2 != 0) { + return true; + } else if (val1 != 0 && val2 == 0) { + return true; + } else { + return false; + } + }, + any: function any(val1, val2) { + return val1 != val2; + }, + emptyNonEmpty: function emptyNonEmpty(str1, str2) { + var empty1 = emptyString(str1); + var empty2 = emptyString(str2); + return empty1 && !empty2 || !empty1 && empty2; + } + }; + + // define visual style properties + // + // - n.b. adding a new group of props may require updates to updateStyleHints() + // - adding new props to an existing group gets handled automatically + + var t = styfn$2.types; + var mainLabel = [{ + name: 'label', + type: t.text, + triggersBounds: diff.any, + triggersZOrder: diff.emptyNonEmpty + }, { + name: 'text-rotation', + type: t.textRotation, + triggersBounds: diff.any + }, { + name: 'text-margin-x', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'text-margin-y', + type: t.bidirectionalSize, + triggersBounds: diff.any + }]; + var sourceLabel = [{ + name: 'source-label', + type: t.text, + triggersBounds: diff.any + }, { + name: 'source-text-rotation', + type: t.textRotation, + triggersBounds: diff.any + }, { + name: 'source-text-margin-x', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'source-text-margin-y', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'source-text-offset', + type: t.size, + triggersBounds: diff.any + }]; + var targetLabel = [{ + name: 'target-label', + type: t.text, + triggersBounds: diff.any + }, { + name: 'target-text-rotation', + type: t.textRotation, + triggersBounds: diff.any + }, { + name: 'target-text-margin-x', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'target-text-margin-y', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'target-text-offset', + type: t.size, + triggersBounds: diff.any + }]; + var labelDimensions = [{ + name: 'font-family', + type: t.fontFamily, + triggersBounds: diff.any + }, { + name: 'font-style', + type: t.fontStyle, + triggersBounds: diff.any + }, { + name: 'font-weight', + type: t.fontWeight, + triggersBounds: diff.any + }, { + name: 'font-size', + type: t.size, + triggersBounds: diff.any + }, { + name: 'text-transform', + type: t.textTransform, + triggersBounds: diff.any + }, { + name: 'text-wrap', + type: t.textWrap, + triggersBounds: diff.any + }, { + name: 'text-overflow-wrap', + type: t.textOverflowWrap, + triggersBounds: diff.any + }, { + name: 'text-max-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'text-outline-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'line-height', + type: t.positiveNumber, + triggersBounds: diff.any + }]; + var commonLabel = [{ + name: 'text-valign', + type: t.valign, + triggersBounds: diff.any + }, { + name: 'text-halign', + type: t.halign, + triggersBounds: diff.any + }, { + name: 'color', + type: t.color + }, { + name: 'text-outline-color', + type: t.color + }, { + name: 'text-outline-opacity', + type: t.zeroOneNumber + }, { + name: 'text-background-color', + type: t.color + }, { + name: 'text-background-opacity', + type: t.zeroOneNumber + }, { + name: 'text-background-padding', + type: t.size, + triggersBounds: diff.any + }, { + name: 'text-border-opacity', + type: t.zeroOneNumber + }, { + name: 'text-border-color', + type: t.color + }, { + name: 'text-border-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'text-border-style', + type: t.borderStyle, + triggersBounds: diff.any + }, { + name: 'text-background-shape', + type: t.textBackgroundShape, + triggersBounds: diff.any + }, { + name: 'text-justification', + type: t.justification + }]; + var behavior = [{ + name: 'events', + type: t.bool, + triggersZOrder: diff.any + }, { + name: 'text-events', + type: t.bool, + triggersZOrder: diff.any + }]; + var visibility = [{ + name: 'display', + type: t.display, + triggersZOrder: diff.any, + triggersBounds: diff.any, + triggersBoundsOfConnectedEdges: true + }, { + name: 'visibility', + type: t.visibility, + triggersZOrder: diff.any + }, { + name: 'opacity', + type: t.zeroOneNumber, + triggersZOrder: diff.zeroNonZero + }, { + name: 'text-opacity', + type: t.zeroOneNumber + }, { + name: 'min-zoomed-font-size', + type: t.size + }, { + name: 'z-compound-depth', + type: t.zCompoundDepth, + triggersZOrder: diff.any + }, { + name: 'z-index-compare', + type: t.zIndexCompare, + triggersZOrder: diff.any + }, { + name: 'z-index', + type: t.number, + triggersZOrder: diff.any + }]; + var overlay = [{ + name: 'overlay-padding', + type: t.size, + triggersBounds: diff.any + }, { + name: 'overlay-color', + type: t.color + }, { + name: 'overlay-opacity', + type: t.zeroOneNumber, + triggersBounds: diff.zeroNonZero + }, { + name: 'overlay-shape', + type: t.overlayShape, + triggersBounds: diff.any + }, { + name: 'overlay-corner-radius', + type: t.cornerRadius + }]; + var underlay = [{ + name: 'underlay-padding', + type: t.size, + triggersBounds: diff.any + }, { + name: 'underlay-color', + type: t.color + }, { + name: 'underlay-opacity', + type: t.zeroOneNumber, + triggersBounds: diff.zeroNonZero + }, { + name: 'underlay-shape', + type: t.overlayShape, + triggersBounds: diff.any + }, { + name: 'underlay-corner-radius', + type: t.cornerRadius + }]; + var transition = [{ + name: 'transition-property', + type: t.propList + }, { + name: 'transition-duration', + type: t.time + }, { + name: 'transition-delay', + type: t.time + }, { + name: 'transition-timing-function', + type: t.easing + }]; + var nodeSizeHashOverride = function nodeSizeHashOverride(ele, parsedProp) { + if (parsedProp.value === 'label') { + return -ele.poolIndex(); // no hash key hits is using label size (hitrate for perf probably low anyway) + } else { + return parsedProp.pfValue; + } + }; + var nodeBody = [{ + name: 'height', + type: t.nodeSize, + triggersBounds: diff.any, + hashOverride: nodeSizeHashOverride + }, { + name: 'width', + type: t.nodeSize, + triggersBounds: diff.any, + hashOverride: nodeSizeHashOverride + }, { + name: 'shape', + type: t.nodeShape, + triggersBounds: diff.any + }, { + name: 'shape-polygon-points', + type: t.polygonPointList, + triggersBounds: diff.any + }, { + name: 'corner-radius', + type: t.cornerRadius + }, { + name: 'background-color', + type: t.color + }, { + name: 'background-fill', + type: t.fill + }, { + name: 'background-opacity', + type: t.zeroOneNumber + }, { + name: 'background-blacken', + type: t.nOneOneNumber + }, { + name: 'background-gradient-stop-colors', + type: t.colors + }, { + name: 'background-gradient-stop-positions', + type: t.percentages + }, { + name: 'background-gradient-direction', + type: t.gradientDirection + }, { + name: 'padding', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'padding-relative-to', + type: t.paddingRelativeTo, + triggersBounds: diff.any + }, { + name: 'bounds-expansion', + type: t.boundsExpansion, + triggersBounds: diff.any + }]; + var nodeBorder = [{ + name: 'border-color', + type: t.color + }, { + name: 'border-opacity', + type: t.zeroOneNumber + }, { + name: 'border-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'border-style', + type: t.borderStyle + }, { + name: 'border-cap', + type: t.lineCap + }, { + name: 'border-join', + type: t.lineJoin + }, { + name: 'border-dash-pattern', + type: t.numbers + }, { + name: 'border-dash-offset', + type: t.number + }, { + name: 'border-position', + type: t.linePosition + }]; + var nodeOutline = [{ + name: 'outline-color', + type: t.color + }, { + name: 'outline-opacity', + type: t.zeroOneNumber + }, { + name: 'outline-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'outline-style', + type: t.borderStyle + }, { + name: 'outline-offset', + type: t.size, + triggersBounds: diff.any + }]; + var backgroundImage = [{ + name: 'background-image', + type: t.urls + }, { + name: 'background-image-crossorigin', + type: t.bgCrossOrigin + }, { + name: 'background-image-opacity', + type: t.zeroOneNumbers + }, { + name: 'background-image-containment', + type: t.bgContainment + }, { + name: 'background-image-smoothing', + type: t.bools + }, { + name: 'background-position-x', + type: t.bgPos + }, { + name: 'background-position-y', + type: t.bgPos + }, { + name: 'background-width-relative-to', + type: t.bgRelativeTo + }, { + name: 'background-height-relative-to', + type: t.bgRelativeTo + }, { + name: 'background-repeat', + type: t.bgRepeat + }, { + name: 'background-fit', + type: t.bgFit + }, { + name: 'background-clip', + type: t.bgClip + }, { + name: 'background-width', + type: t.bgWH + }, { + name: 'background-height', + type: t.bgWH + }, { + name: 'background-offset-x', + type: t.bgPos + }, { + name: 'background-offset-y', + type: t.bgPos + }]; + var compound = [{ + name: 'position', + type: t.position, + triggersBounds: diff.any + }, { + name: 'compound-sizing-wrt-labels', + type: t.compoundIncludeLabels, + triggersBounds: diff.any + }, { + name: 'min-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'min-width-bias-left', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'min-width-bias-right', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'min-height', + type: t.size, + triggersBounds: diff.any + }, { + name: 'min-height-bias-top', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'min-height-bias-bottom', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }]; + var edgeLine = [{ + name: 'line-style', + type: t.lineStyle + }, { + name: 'line-color', + type: t.color + }, { + name: 'line-fill', + type: t.fill + }, { + name: 'line-cap', + type: t.lineCap + }, { + name: 'line-opacity', + type: t.zeroOneNumber + }, { + name: 'line-dash-pattern', + type: t.numbers + }, { + name: 'line-dash-offset', + type: t.number + }, { + name: 'line-gradient-stop-colors', + type: t.colors + }, { + name: 'line-gradient-stop-positions', + type: t.percentages + }, { + name: 'curve-style', + type: t.curveStyle, + triggersBounds: diff.any, + triggersBoundsOfParallelBeziers: true + }, { + name: 'haystack-radius', + type: t.zeroOneNumber, + triggersBounds: diff.any + }, { + name: 'source-endpoint', + type: t.edgeEndpoint, + triggersBounds: diff.any + }, { + name: 'target-endpoint', + type: t.edgeEndpoint, + triggersBounds: diff.any + }, { + name: 'control-point-step-size', + type: t.size, + triggersBounds: diff.any + }, { + name: 'control-point-distances', + type: t.bidirectionalSizes, + triggersBounds: diff.any + }, { + name: 'control-point-weights', + type: t.numbers, + triggersBounds: diff.any + }, { + name: 'segment-distances', + type: t.bidirectionalSizes, + triggersBounds: diff.any + }, { + name: 'segment-weights', + type: t.numbers, + triggersBounds: diff.any + }, { + name: 'segment-radii', + type: t.numbers, + triggersBounds: diff.any + }, { + name: 'radius-type', + type: t.radiusType, + triggersBounds: diff.any + }, { + name: 'taxi-turn', + type: t.bidirectionalSizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'taxi-turn-min-distance', + type: t.size, + triggersBounds: diff.any + }, { + name: 'taxi-direction', + type: t.axisDirection, + triggersBounds: diff.any + }, { + name: 'taxi-radius', + type: t.number, + triggersBounds: diff.any + }, { + name: 'edge-distances', + type: t.edgeDistances, + triggersBounds: diff.any + }, { + name: 'arrow-scale', + type: t.positiveNumber, + triggersBounds: diff.any + }, { + name: 'loop-direction', + type: t.angle, + triggersBounds: diff.any + }, { + name: 'loop-sweep', + type: t.angle, + triggersBounds: diff.any + }, { + name: 'source-distance-from-node', + type: t.size, + triggersBounds: diff.any + }, { + name: 'target-distance-from-node', + type: t.size, + triggersBounds: diff.any + }]; + var ghost = [{ + name: 'ghost', + type: t.bool, + triggersBounds: diff.any + }, { + name: 'ghost-offset-x', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'ghost-offset-y', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'ghost-opacity', + type: t.zeroOneNumber + }]; + var core = [{ + name: 'selection-box-color', + type: t.color + }, { + name: 'selection-box-opacity', + type: t.zeroOneNumber + }, { + name: 'selection-box-border-color', + type: t.color + }, { + name: 'selection-box-border-width', + type: t.size + }, { + name: 'active-bg-color', + type: t.color + }, { + name: 'active-bg-opacity', + type: t.zeroOneNumber + }, { + name: 'active-bg-size', + type: t.size + }, { + name: 'outside-texture-bg-color', + type: t.color + }, { + name: 'outside-texture-bg-opacity', + type: t.zeroOneNumber + }]; + + // pie backgrounds for nodes + var pie = []; + styfn$2.pieBackgroundN = 16; // because the pie properties are numbered, give access to a constant N (for renderer use) + pie.push({ + name: 'pie-size', + type: t.sizeMaybePercent + }); + for (var i = 1; i <= styfn$2.pieBackgroundN; i++) { + pie.push({ + name: 'pie-' + i + '-background-color', + type: t.color + }); + pie.push({ + name: 'pie-' + i + '-background-size', + type: t.percent + }); + pie.push({ + name: 'pie-' + i + '-background-opacity', + type: t.zeroOneNumber + }); + } + + // edge arrows + var edgeArrow = []; + var arrowPrefixes = styfn$2.arrowPrefixes = ['source', 'mid-source', 'target', 'mid-target']; + [{ + name: 'arrow-shape', + type: t.arrowShape, + triggersBounds: diff.any + }, { + name: 'arrow-color', + type: t.color + }, { + name: 'arrow-fill', + type: t.arrowFill + }, { + name: 'arrow-width', + type: t.arrowWidth + }].forEach(function (prop) { + arrowPrefixes.forEach(function (prefix) { + var name = prefix + '-' + prop.name; + var type = prop.type, + triggersBounds = prop.triggersBounds; + edgeArrow.push({ + name: name, + type: type, + triggersBounds: triggersBounds + }); + }); + }, {}); + var props = styfn$2.properties = [].concat(behavior, transition, visibility, overlay, underlay, ghost, commonLabel, labelDimensions, mainLabel, sourceLabel, targetLabel, nodeBody, nodeBorder, nodeOutline, backgroundImage, pie, compound, edgeLine, edgeArrow, core); + var propGroups = styfn$2.propertyGroups = { + // common to all eles + behavior: behavior, + transition: transition, + visibility: visibility, + overlay: overlay, + underlay: underlay, + ghost: ghost, + // labels + commonLabel: commonLabel, + labelDimensions: labelDimensions, + mainLabel: mainLabel, + sourceLabel: sourceLabel, + targetLabel: targetLabel, + // node props + nodeBody: nodeBody, + nodeBorder: nodeBorder, + nodeOutline: nodeOutline, + backgroundImage: backgroundImage, + pie: pie, + compound: compound, + // edge props + edgeLine: edgeLine, + edgeArrow: edgeArrow, + core: core + }; + var propGroupNames = styfn$2.propertyGroupNames = {}; + var propGroupKeys = styfn$2.propertyGroupKeys = Object.keys(propGroups); + propGroupKeys.forEach(function (key) { + propGroupNames[key] = propGroups[key].map(function (prop) { + return prop.name; + }); + propGroups[key].forEach(function (prop) { + return prop.groupKey = key; + }); + }); + + // define aliases + var aliases = styfn$2.aliases = [{ + name: 'content', + pointsTo: 'label' + }, { + name: 'control-point-distance', + pointsTo: 'control-point-distances' + }, { + name: 'control-point-weight', + pointsTo: 'control-point-weights' + }, { + name: 'segment-distance', + pointsTo: 'segment-distances' + }, { + name: 'segment-weight', + pointsTo: 'segment-weights' + }, { + name: 'segment-radius', + pointsTo: 'segment-radii' + }, { + name: 'edge-text-rotation', + pointsTo: 'text-rotation' + }, { + name: 'padding-left', + pointsTo: 'padding' + }, { + name: 'padding-right', + pointsTo: 'padding' + }, { + name: 'padding-top', + pointsTo: 'padding' + }, { + name: 'padding-bottom', + pointsTo: 'padding' + }]; + + // list of property names + styfn$2.propertyNames = props.map(function (p) { + return p.name; + }); + + // allow access of properties by name ( e.g. style.properties.height ) + for (var _i = 0; _i < props.length; _i++) { + var prop = props[_i]; + props[prop.name] = prop; // allow lookup by name + } + + // map aliases + for (var _i2 = 0; _i2 < aliases.length; _i2++) { + var alias = aliases[_i2]; + var pointsToProp = props[alias.pointsTo]; + var aliasProp = { + name: alias.name, + alias: true, + pointsTo: pointsToProp + }; + + // add alias prop for parsing + props.push(aliasProp); + props[alias.name] = aliasProp; // allow lookup by name + } +})(); + +styfn$2.getDefaultProperty = function (name) { + return this.getDefaultProperties()[name]; +}; +styfn$2.getDefaultProperties = function () { + var _p = this._private; + if (_p.defaultProperties != null) { + return _p.defaultProperties; + } + var rawProps = extend({ + // core props + 'selection-box-color': '#ddd', + 'selection-box-opacity': 0.65, + 'selection-box-border-color': '#aaa', + 'selection-box-border-width': 1, + 'active-bg-color': 'black', + 'active-bg-opacity': 0.15, + 'active-bg-size': 30, + 'outside-texture-bg-color': '#000', + 'outside-texture-bg-opacity': 0.125, + // common node/edge props + 'events': 'yes', + 'text-events': 'no', + 'text-valign': 'top', + 'text-halign': 'center', + 'text-justification': 'auto', + 'line-height': 1, + 'color': '#000', + 'text-outline-color': '#000', + 'text-outline-width': 0, + 'text-outline-opacity': 1, + 'text-opacity': 1, + 'text-decoration': 'none', + 'text-transform': 'none', + 'text-wrap': 'none', + 'text-overflow-wrap': 'whitespace', + 'text-max-width': 9999, + 'text-background-color': '#000', + 'text-background-opacity': 0, + 'text-background-shape': 'rectangle', + 'text-background-padding': 0, + 'text-border-opacity': 0, + 'text-border-width': 0, + 'text-border-style': 'solid', + 'text-border-color': '#000', + 'font-family': 'Helvetica Neue, Helvetica, sans-serif', + 'font-style': 'normal', + 'font-weight': 'normal', + 'font-size': 16, + 'min-zoomed-font-size': 0, + 'text-rotation': 'none', + 'source-text-rotation': 'none', + 'target-text-rotation': 'none', + 'visibility': 'visible', + 'display': 'element', + 'opacity': 1, + 'z-compound-depth': 'auto', + 'z-index-compare': 'auto', + 'z-index': 0, + 'label': '', + 'text-margin-x': 0, + 'text-margin-y': 0, + 'source-label': '', + 'source-text-offset': 0, + 'source-text-margin-x': 0, + 'source-text-margin-y': 0, + 'target-label': '', + 'target-text-offset': 0, + 'target-text-margin-x': 0, + 'target-text-margin-y': 0, + 'overlay-opacity': 0, + 'overlay-color': '#000', + 'overlay-padding': 10, + 'overlay-shape': 'round-rectangle', + 'overlay-corner-radius': 'auto', + 'underlay-opacity': 0, + 'underlay-color': '#000', + 'underlay-padding': 10, + 'underlay-shape': 'round-rectangle', + 'underlay-corner-radius': 'auto', + 'transition-property': 'none', + 'transition-duration': 0, + 'transition-delay': 0, + 'transition-timing-function': 'linear', + // node props + 'background-blacken': 0, + 'background-color': '#999', + 'background-fill': 'solid', + 'background-opacity': 1, + 'background-image': 'none', + 'background-image-crossorigin': 'anonymous', + 'background-image-opacity': 1, + 'background-image-containment': 'inside', + 'background-image-smoothing': 'yes', + 'background-position-x': '50%', + 'background-position-y': '50%', + 'background-offset-x': 0, + 'background-offset-y': 0, + 'background-width-relative-to': 'include-padding', + 'background-height-relative-to': 'include-padding', + 'background-repeat': 'no-repeat', + 'background-fit': 'none', + 'background-clip': 'node', + 'background-width': 'auto', + 'background-height': 'auto', + 'border-color': '#000', + 'border-opacity': 1, + 'border-width': 0, + 'border-style': 'solid', + 'border-dash-pattern': [4, 2], + 'border-dash-offset': 0, + 'border-cap': 'butt', + 'border-join': 'miter', + 'border-position': 'center', + 'outline-color': '#999', + 'outline-opacity': 1, + 'outline-width': 0, + 'outline-offset': 0, + 'outline-style': 'solid', + 'height': 30, + 'width': 30, + 'shape': 'ellipse', + 'shape-polygon-points': '-1, -1, 1, -1, 1, 1, -1, 1', + 'corner-radius': 'auto', + 'bounds-expansion': 0, + // node gradient + 'background-gradient-direction': 'to-bottom', + 'background-gradient-stop-colors': '#999', + 'background-gradient-stop-positions': '0%', + // ghost props + 'ghost': 'no', + 'ghost-offset-y': 0, + 'ghost-offset-x': 0, + 'ghost-opacity': 0, + // compound props + 'padding': 0, + 'padding-relative-to': 'width', + 'position': 'origin', + 'compound-sizing-wrt-labels': 'include', + 'min-width': 0, + 'min-width-bias-left': 0, + 'min-width-bias-right': 0, + 'min-height': 0, + 'min-height-bias-top': 0, + 'min-height-bias-bottom': 0 + }, { + // node pie bg + 'pie-size': '100%' + }, [{ + name: 'pie-{{i}}-background-color', + value: 'black' + }, { + name: 'pie-{{i}}-background-size', + value: '0%' + }, { + name: 'pie-{{i}}-background-opacity', + value: 1 + }].reduce(function (css, prop) { + for (var i = 1; i <= styfn$2.pieBackgroundN; i++) { + var name = prop.name.replace('{{i}}', i); + var val = prop.value; + css[name] = val; + } + return css; + }, {}), { + // edge props + 'line-style': 'solid', + 'line-color': '#999', + 'line-fill': 'solid', + 'line-cap': 'butt', + 'line-opacity': 1, + 'line-gradient-stop-colors': '#999', + 'line-gradient-stop-positions': '0%', + 'control-point-step-size': 40, + 'control-point-weights': 0.5, + 'segment-weights': 0.5, + 'segment-distances': 20, + 'segment-radii': 15, + 'radius-type': 'arc-radius', + 'taxi-turn': '50%', + 'taxi-radius': 15, + 'taxi-turn-min-distance': 10, + 'taxi-direction': 'auto', + 'edge-distances': 'intersection', + 'curve-style': 'haystack', + 'haystack-radius': 0, + 'arrow-scale': 1, + 'loop-direction': '-45deg', + 'loop-sweep': '-90deg', + 'source-distance-from-node': 0, + 'target-distance-from-node': 0, + 'source-endpoint': 'outside-to-node', + 'target-endpoint': 'outside-to-node', + 'line-dash-pattern': [6, 3], + 'line-dash-offset': 0 + }, [{ + name: 'arrow-shape', + value: 'none' + }, { + name: 'arrow-color', + value: '#999' + }, { + name: 'arrow-fill', + value: 'filled' + }, { + name: 'arrow-width', + value: 1 + }].reduce(function (css, prop) { + styfn$2.arrowPrefixes.forEach(function (prefix) { + var name = prefix + '-' + prop.name; + var val = prop.value; + css[name] = val; + }); + return css; + }, {})); + var parsedProps = {}; + for (var i = 0; i < this.properties.length; i++) { + var prop = this.properties[i]; + if (prop.pointsTo) { + continue; + } + var name = prop.name; + var val = rawProps[name]; + var parsedProp = this.parse(name, val); + parsedProps[name] = parsedProp; + } + _p.defaultProperties = parsedProps; + return _p.defaultProperties; +}; +styfn$2.addDefaultStylesheet = function () { + this.selector(':parent').css({ + 'shape': 'rectangle', + 'padding': 10, + 'background-color': '#eee', + 'border-color': '#ccc', + 'border-width': 1 + }).selector('edge').css({ + 'width': 3 + }).selector(':loop').css({ + 'curve-style': 'bezier' + }).selector('edge:compound').css({ + 'curve-style': 'bezier', + 'source-endpoint': 'outside-to-line', + 'target-endpoint': 'outside-to-line' + }).selector(':selected').css({ + 'background-color': '#0169D9', + 'line-color': '#0169D9', + 'source-arrow-color': '#0169D9', + 'target-arrow-color': '#0169D9', + 'mid-source-arrow-color': '#0169D9', + 'mid-target-arrow-color': '#0169D9' + }).selector(':parent:selected').css({ + 'background-color': '#CCE1F9', + 'border-color': '#aec8e5' + }).selector(':active').css({ + 'overlay-color': 'black', + 'overlay-padding': 10, + 'overlay-opacity': 0.25 + }); + this.defaultLength = this.length; +}; + +var styfn$1 = {}; + +// a caching layer for property parsing +styfn$1.parse = function (name, value, propIsBypass, propIsFlat) { + var self = this; + + // function values can't be cached in all cases, and there isn't much benefit of caching them anyway + if (fn$6(value)) { + return self.parseImplWarn(name, value, propIsBypass, propIsFlat); + } + var flatKey = propIsFlat === 'mapping' || propIsFlat === true || propIsFlat === false || propIsFlat == null ? 'dontcare' : propIsFlat; + var bypassKey = propIsBypass ? 't' : 'f'; + var valueKey = '' + value; + var argHash = hashStrings(name, valueKey, bypassKey, flatKey); + var propCache = self.propCache = self.propCache || []; + var ret; + if (!(ret = propCache[argHash])) { + ret = propCache[argHash] = self.parseImplWarn(name, value, propIsBypass, propIsFlat); + } + + // - bypasses can't be shared b/c the value can be changed by animations or otherwise overridden + // - mappings can't be shared b/c mappings are per-element + if (propIsBypass || propIsFlat === 'mapping') { + // need a copy since props are mutated later in their lifecycles + ret = copy(ret); + if (ret) { + ret.value = copy(ret.value); // because it could be an array, e.g. colour + } + } + + return ret; +}; +styfn$1.parseImplWarn = function (name, value, propIsBypass, propIsFlat) { + var prop = this.parseImpl(name, value, propIsBypass, propIsFlat); + if (!prop && value != null) { + warn("The style property `".concat(name, ": ").concat(value, "` is invalid")); + } + if (prop && (prop.name === 'width' || prop.name === 'height') && value === 'label') { + warn('The style value of `label` is deprecated for `' + prop.name + '`'); + } + return prop; +}; + +// parse a property; return null on invalid; return parsed property otherwise +// fields : +// - name : the name of the property +// - value : the parsed, native-typed value of the property +// - strValue : a string value that represents the property value in valid css +// - bypass : true iff the property is a bypass property +styfn$1.parseImpl = function (name, value, propIsBypass, propIsFlat) { + var self = this; + name = camel2dash(name); // make sure the property name is in dash form (e.g. 'property-name' not 'propertyName') + + var property = self.properties[name]; + var passedValue = value; + var types = self.types; + if (!property) { + return null; + } // return null on property of unknown name + if (value === undefined) { + return null; + } // can't assign undefined + + // the property may be an alias + if (property.alias) { + property = property.pointsTo; + name = property.name; + } + var valueIsString = string(value); + if (valueIsString) { + // trim the value to make parsing easier + value = value.trim(); + } + var type = property.type; + if (!type) { + return null; + } // no type, no luck + + // check if bypass is null or empty string (i.e. indication to delete bypass property) + if (propIsBypass && (value === '' || value === null)) { + return { + name: name, + value: value, + bypass: true, + deleteBypass: true + }; + } + + // check if value is a function used as a mapper + if (fn$6(value)) { + return { + name: name, + value: value, + strValue: 'fn', + mapped: types.fn, + bypass: propIsBypass + }; + } + + // check if value is mapped + var data, mapData; + if (!valueIsString || propIsFlat || value.length < 7 || value[1] !== 'a') ; else if (value.length >= 7 && value[0] === 'd' && (data = new RegExp(types.data.regex).exec(value))) { + if (propIsBypass) { + return false; + } // mappers not allowed in bypass + + var mapped = types.data; + return { + name: name, + value: data, + strValue: '' + value, + mapped: mapped, + field: data[1], + bypass: propIsBypass + }; + } else if (value.length >= 10 && value[0] === 'm' && (mapData = new RegExp(types.mapData.regex).exec(value))) { + if (propIsBypass) { + return false; + } // mappers not allowed in bypass + if (type.multiple) { + return false; + } // impossible to map to num + + var _mapped = types.mapData; + + // we can map only if the type is a colour or a number + if (!(type.color || type.number)) { + return false; + } + var valueMin = this.parse(name, mapData[4]); // parse to validate + if (!valueMin || valueMin.mapped) { + return false; + } // can't be invalid or mapped + + var valueMax = this.parse(name, mapData[5]); // parse to validate + if (!valueMax || valueMax.mapped) { + return false; + } // can't be invalid or mapped + + // check if valueMin and valueMax are the same + if (valueMin.pfValue === valueMax.pfValue || valueMin.strValue === valueMax.strValue) { + warn('`' + name + ': ' + value + '` is not a valid mapper because the output range is zero; converting to `' + name + ': ' + valueMin.strValue + '`'); + return this.parse(name, valueMin.strValue); // can't make much of a mapper without a range + } else if (type.color) { + var c1 = valueMin.value; + var c2 = valueMax.value; + var same = c1[0] === c2[0] // red + && c1[1] === c2[1] // green + && c1[2] === c2[2] // blue + && ( + // optional alpha + c1[3] === c2[3] // same alpha outright + || (c1[3] == null || c1[3] === 1 // full opacity for colour 1? + ) && (c2[3] == null || c2[3] === 1) // full opacity for colour 2? + ); + + if (same) { + return false; + } // can't make a mapper without a range + } + + return { + name: name, + value: mapData, + strValue: '' + value, + mapped: _mapped, + field: mapData[1], + fieldMin: parseFloat(mapData[2]), + // min & max are numeric + fieldMax: parseFloat(mapData[3]), + valueMin: valueMin.value, + valueMax: valueMax.value, + bypass: propIsBypass + }; + } + if (type.multiple && propIsFlat !== 'multiple') { + var vals; + if (valueIsString) { + vals = value.split(/\s+/); + } else if (array(value)) { + vals = value; + } else { + vals = [value]; + } + if (type.evenMultiple && vals.length % 2 !== 0) { + return null; + } + var valArr = []; + var unitsArr = []; + var pfValArr = []; + var strVal = ''; + var hasEnum = false; + for (var i = 0; i < vals.length; i++) { + var p = self.parse(name, vals[i], propIsBypass, 'multiple'); + hasEnum = hasEnum || string(p.value); + valArr.push(p.value); + pfValArr.push(p.pfValue != null ? p.pfValue : p.value); + unitsArr.push(p.units); + strVal += (i > 0 ? ' ' : '') + p.strValue; + } + if (type.validate && !type.validate(valArr, unitsArr)) { + return null; + } + if (type.singleEnum && hasEnum) { + if (valArr.length === 1 && string(valArr[0])) { + return { + name: name, + value: valArr[0], + strValue: valArr[0], + bypass: propIsBypass + }; + } else { + return null; + } + } + return { + name: name, + value: valArr, + pfValue: pfValArr, + strValue: strVal, + bypass: propIsBypass, + units: unitsArr + }; + } + + // several types also allow enums + var checkEnums = function checkEnums() { + for (var _i = 0; _i < type.enums.length; _i++) { + var en = type.enums[_i]; + if (en === value) { + return { + name: name, + value: value, + strValue: '' + value, + bypass: propIsBypass + }; + } + } + return null; + }; + + // check the type and return the appropriate object + if (type.number) { + var units; + var implicitUnits = 'px'; // not set => px + + if (type.units) { + // use specified units if set + units = type.units; + } + if (type.implicitUnits) { + implicitUnits = type.implicitUnits; + } + if (!type.unitless) { + if (valueIsString) { + var unitsRegex = 'px|em' + (type.allowPercent ? '|\\%' : ''); + if (units) { + unitsRegex = units; + } // only allow explicit units if so set + var match = value.match('^(' + number + ')(' + unitsRegex + ')?' + '$'); + if (match) { + value = match[1]; + units = match[2] || implicitUnits; + } + } else if (!units || type.implicitUnits) { + units = implicitUnits; // implicitly px if unspecified + } + } + + value = parseFloat(value); + + // if not a number and enums not allowed, then the value is invalid + if (isNaN(value) && type.enums === undefined) { + return null; + } + + // check if this number type also accepts special keywords in place of numbers + // (i.e. `left`, `auto`, etc) + if (isNaN(value) && type.enums !== undefined) { + value = passedValue; + return checkEnums(); + } + + // check if value must be an integer + if (type.integer && !integer(value)) { + return null; + } + + // check value is within range + if (type.min !== undefined && (value < type.min || type.strictMin && value === type.min) || type.max !== undefined && (value > type.max || type.strictMax && value === type.max)) { + return null; + } + var ret = { + name: name, + value: value, + strValue: '' + value + (units ? units : ''), + units: units, + bypass: propIsBypass + }; + + // normalise value in pixels + if (type.unitless || units !== 'px' && units !== 'em') { + ret.pfValue = value; + } else { + ret.pfValue = units === 'px' || !units ? value : this.getEmSizeInPixels() * value; + } + + // normalise value in ms + if (units === 'ms' || units === 's') { + ret.pfValue = units === 'ms' ? value : 1000 * value; + } + + // normalise value in rad + if (units === 'deg' || units === 'rad') { + ret.pfValue = units === 'rad' ? value : deg2rad(value); + } + + // normalize value in % + if (units === '%') { + ret.pfValue = value / 100; + } + return ret; + } else if (type.propList) { + var props = []; + var propsStr = '' + value; + if (propsStr === 'none') ; else { + // go over each prop + + var propsSplit = propsStr.split(/\s*,\s*|\s+/); + for (var _i2 = 0; _i2 < propsSplit.length; _i2++) { + var propName = propsSplit[_i2].trim(); + if (self.properties[propName]) { + props.push(propName); + } else { + warn('`' + propName + '` is not a valid property name'); + } + } + if (props.length === 0) { + return null; + } + } + return { + name: name, + value: props, + strValue: props.length === 0 ? 'none' : props.join(' '), + bypass: propIsBypass + }; + } else if (type.color) { + var tuple = color2tuple(value); + if (!tuple) { + return null; + } + return { + name: name, + value: tuple, + pfValue: tuple, + strValue: 'rgb(' + tuple[0] + ',' + tuple[1] + ',' + tuple[2] + ')', + // n.b. no spaces b/c of multiple support + bypass: propIsBypass + }; + } else if (type.regex || type.regexes) { + // first check enums + if (type.enums) { + var enumProp = checkEnums(); + if (enumProp) { + return enumProp; + } + } + var regexes = type.regexes ? type.regexes : [type.regex]; + for (var _i3 = 0; _i3 < regexes.length; _i3++) { + var regex = new RegExp(regexes[_i3]); // make a regex from the type string + var m = regex.exec(value); + if (m) { + // regex matches + return { + name: name, + value: type.singleRegexMatchValue ? m[1] : m, + strValue: '' + value, + bypass: propIsBypass + }; + } + } + return null; // didn't match any + } else if (type.string) { + // just return + return { + name: name, + value: '' + value, + strValue: '' + value, + bypass: propIsBypass + }; + } else if (type.enums) { + // check enums last because it's a combo type in others + return checkEnums(); + } else { + return null; // not a type we can handle + } +}; + +var Style = function Style(cy) { + if (!(this instanceof Style)) { + return new Style(cy); + } + if (!core(cy)) { + error('A style must have a core reference'); + return; + } + this._private = { + cy: cy, + coreStyle: {} + }; + this.length = 0; + this.resetToDefault(); +}; +var styfn = Style.prototype; +styfn.instanceString = function () { + return 'style'; +}; + +// remove all contexts +styfn.clear = function () { + var _p = this._private; + var cy = _p.cy; + var eles = cy.elements(); + for (var i = 0; i < this.length; i++) { + this[i] = undefined; + } + this.length = 0; + _p.contextStyles = {}; + _p.propDiffs = {}; + this.cleanElements(eles, true); + eles.forEach(function (ele) { + var ele_p = ele[0]._private; + ele_p.styleDirty = true; + ele_p.appliedInitStyle = false; + }); + return this; // chaining +}; + +styfn.resetToDefault = function () { + this.clear(); + this.addDefaultStylesheet(); + return this; +}; + +// builds a style object for the 'core' selector +styfn.core = function (propName) { + return this._private.coreStyle[propName] || this.getDefaultProperty(propName); +}; + +// create a new context from the specified selector string and switch to that context +styfn.selector = function (selectorStr) { + // 'core' is a special case and does not need a selector + var selector = selectorStr === 'core' ? null : new Selector(selectorStr); + var i = this.length++; // new context means new index + this[i] = { + selector: selector, + properties: [], + mappedProperties: [], + index: i + }; + return this; // chaining +}; + +// add one or many css rules to the current context +styfn.css = function () { + var self = this; + var args = arguments; + if (args.length === 1) { + var map = args[0]; + for (var i = 0; i < self.properties.length; i++) { + var prop = self.properties[i]; + var mapVal = map[prop.name]; + if (mapVal === undefined) { + mapVal = map[dash2camel(prop.name)]; + } + if (mapVal !== undefined) { + this.cssRule(prop.name, mapVal); + } + } + } else if (args.length === 2) { + this.cssRule(args[0], args[1]); + } + + // do nothing if args are invalid + + return this; // chaining +}; + +styfn.style = styfn.css; + +// add a single css rule to the current context +styfn.cssRule = function (name, value) { + // name-value pair + var property = this.parse(name, value); + + // add property to current context if valid + if (property) { + var i = this.length - 1; + this[i].properties.push(property); + this[i].properties[property.name] = property; // allow access by name as well + + if (property.name.match(/pie-(\d+)-background-size/) && property.value) { + this._private.hasPie = true; + } + if (property.mapped) { + this[i].mappedProperties.push(property); + } + + // add to core style if necessary + var currentSelectorIsCore = !this[i].selector; + if (currentSelectorIsCore) { + this._private.coreStyle[property.name] = property; + } + } + return this; // chaining +}; + +styfn.append = function (style) { + if (stylesheet(style)) { + style.appendToStyle(this); + } else if (array(style)) { + this.appendFromJson(style); + } else if (string(style)) { + this.appendFromString(style); + } // you probably wouldn't want to append a Style, since you'd duplicate the default parts + + return this; +}; + +// static function +Style.fromJson = function (cy, json) { + var style = new Style(cy); + style.fromJson(json); + return style; +}; +Style.fromString = function (cy, string) { + return new Style(cy).fromString(string); +}; +[styfn$8, styfn$7, styfn$6, styfn$5, styfn$4, styfn$3, styfn$2, styfn$1].forEach(function (props) { + extend(styfn, props); +}); +Style.types = styfn.types; +Style.properties = styfn.properties; +Style.propertyGroups = styfn.propertyGroups; +Style.propertyGroupNames = styfn.propertyGroupNames; +Style.propertyGroupKeys = styfn.propertyGroupKeys; + +var corefn$2 = { + style: function style(newStyle) { + if (newStyle) { + var s = this.setStyle(newStyle); + s.update(); + } + return this._private.style; + }, + setStyle: function setStyle(style) { + var _p = this._private; + if (stylesheet(style)) { + _p.style = style.generateStyle(this); + } else if (array(style)) { + _p.style = Style.fromJson(this, style); + } else if (string(style)) { + _p.style = Style.fromString(this, style); + } else { + _p.style = Style(this); + } + return _p.style; + }, + // e.g. cy.data() changed => recalc ele mappers + updateStyle: function updateStyle() { + this.mutableElements().updateStyle(); // just send to all eles + } +}; + +var defaultSelectionType = 'single'; +var corefn$1 = { + autolock: function autolock(bool) { + if (bool !== undefined) { + this._private.autolock = bool ? true : false; + } else { + return this._private.autolock; + } + return this; // chaining + }, + + autoungrabify: function autoungrabify(bool) { + if (bool !== undefined) { + this._private.autoungrabify = bool ? true : false; + } else { + return this._private.autoungrabify; + } + return this; // chaining + }, + + autounselectify: function autounselectify(bool) { + if (bool !== undefined) { + this._private.autounselectify = bool ? true : false; + } else { + return this._private.autounselectify; + } + return this; // chaining + }, + + selectionType: function selectionType(selType) { + var _p = this._private; + if (_p.selectionType == null) { + _p.selectionType = defaultSelectionType; + } + if (selType !== undefined) { + if (selType === 'additive' || selType === 'single') { + _p.selectionType = selType; + } + } else { + return _p.selectionType; + } + return this; + }, + panningEnabled: function panningEnabled(bool) { + if (bool !== undefined) { + this._private.panningEnabled = bool ? true : false; + } else { + return this._private.panningEnabled; + } + return this; // chaining + }, + + userPanningEnabled: function userPanningEnabled(bool) { + if (bool !== undefined) { + this._private.userPanningEnabled = bool ? true : false; + } else { + return this._private.userPanningEnabled; + } + return this; // chaining + }, + + zoomingEnabled: function zoomingEnabled(bool) { + if (bool !== undefined) { + this._private.zoomingEnabled = bool ? true : false; + } else { + return this._private.zoomingEnabled; + } + return this; // chaining + }, + + userZoomingEnabled: function userZoomingEnabled(bool) { + if (bool !== undefined) { + this._private.userZoomingEnabled = bool ? true : false; + } else { + return this._private.userZoomingEnabled; + } + return this; // chaining + }, + + boxSelectionEnabled: function boxSelectionEnabled(bool) { + if (bool !== undefined) { + this._private.boxSelectionEnabled = bool ? true : false; + } else { + return this._private.boxSelectionEnabled; + } + return this; // chaining + }, + + pan: function pan() { + var args = arguments; + var pan = this._private.pan; + var dim, val, dims, x, y; + switch (args.length) { + case 0: + // .pan() + return pan; + case 1: + if (string(args[0])) { + // .pan('x') + dim = args[0]; + return pan[dim]; + } else if (plainObject(args[0])) { + // .pan({ x: 0, y: 100 }) + if (!this._private.panningEnabled) { + return this; + } + dims = args[0]; + x = dims.x; + y = dims.y; + if (number$1(x)) { + pan.x = x; + } + if (number$1(y)) { + pan.y = y; + } + this.emit('pan viewport'); + } + break; + case 2: + // .pan('x', 100) + if (!this._private.panningEnabled) { + return this; + } + dim = args[0]; + val = args[1]; + if ((dim === 'x' || dim === 'y') && number$1(val)) { + pan[dim] = val; + } + this.emit('pan viewport'); + break; + // invalid + } + + this.notify('viewport'); + return this; // chaining + }, + + panBy: function panBy(arg0, arg1) { + var args = arguments; + var pan = this._private.pan; + var dim, val, dims, x, y; + if (!this._private.panningEnabled) { + return this; + } + switch (args.length) { + case 1: + if (plainObject(arg0)) { + // .panBy({ x: 0, y: 100 }) + dims = args[0]; + x = dims.x; + y = dims.y; + if (number$1(x)) { + pan.x += x; + } + if (number$1(y)) { + pan.y += y; + } + this.emit('pan viewport'); + } + break; + case 2: + // .panBy('x', 100) + dim = arg0; + val = arg1; + if ((dim === 'x' || dim === 'y') && number$1(val)) { + pan[dim] += val; + } + this.emit('pan viewport'); + break; + // invalid + } + + this.notify('viewport'); + return this; // chaining + }, + + fit: function fit(elements, padding) { + var viewportState = this.getFitViewport(elements, padding); + if (viewportState) { + var _p = this._private; + _p.zoom = viewportState.zoom; + _p.pan = viewportState.pan; + this.emit('pan zoom viewport'); + this.notify('viewport'); + } + return this; // chaining + }, + + getFitViewport: function getFitViewport(elements, padding) { + if (number$1(elements) && padding === undefined) { + // elements is optional + padding = elements; + elements = undefined; + } + if (!this._private.panningEnabled || !this._private.zoomingEnabled) { + return; + } + var bb; + if (string(elements)) { + var sel = elements; + elements = this.$(sel); + } else if (boundingBox(elements)) { + // assume bb + var bbe = elements; + bb = { + x1: bbe.x1, + y1: bbe.y1, + x2: bbe.x2, + y2: bbe.y2 + }; + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + } else if (!elementOrCollection(elements)) { + elements = this.mutableElements(); + } + if (elementOrCollection(elements) && elements.empty()) { + return; + } // can't fit to nothing + + bb = bb || elements.boundingBox(); + var w = this.width(); + var h = this.height(); + var zoom; + padding = number$1(padding) ? padding : 0; + if (!isNaN(w) && !isNaN(h) && w > 0 && h > 0 && !isNaN(bb.w) && !isNaN(bb.h) && bb.w > 0 && bb.h > 0) { + zoom = Math.min((w - 2 * padding) / bb.w, (h - 2 * padding) / bb.h); + + // crop zoom + zoom = zoom > this._private.maxZoom ? this._private.maxZoom : zoom; + zoom = zoom < this._private.minZoom ? this._private.minZoom : zoom; + var pan = { + // now pan to middle + x: (w - zoom * (bb.x1 + bb.x2)) / 2, + y: (h - zoom * (bb.y1 + bb.y2)) / 2 + }; + return { + zoom: zoom, + pan: pan + }; + } + return; + }, + zoomRange: function zoomRange(min, max) { + var _p = this._private; + if (max == null) { + var opts = min; + min = opts.min; + max = opts.max; + } + if (number$1(min) && number$1(max) && min <= max) { + _p.minZoom = min; + _p.maxZoom = max; + } else if (number$1(min) && max === undefined && min <= _p.maxZoom) { + _p.minZoom = min; + } else if (number$1(max) && min === undefined && max >= _p.minZoom) { + _p.maxZoom = max; + } + return this; + }, + minZoom: function minZoom(zoom) { + if (zoom === undefined) { + return this._private.minZoom; + } else { + return this.zoomRange({ + min: zoom + }); + } + }, + maxZoom: function maxZoom(zoom) { + if (zoom === undefined) { + return this._private.maxZoom; + } else { + return this.zoomRange({ + max: zoom + }); + } + }, + getZoomedViewport: function getZoomedViewport(params) { + var _p = this._private; + var currentPan = _p.pan; + var currentZoom = _p.zoom; + var pos; // in rendered px + var zoom; + var bail = false; + if (!_p.zoomingEnabled) { + // zooming disabled + bail = true; + } + if (number$1(params)) { + // then set the zoom + zoom = params; + } else if (plainObject(params)) { + // then zoom about a point + zoom = params.level; + if (params.position != null) { + pos = modelToRenderedPosition(params.position, currentZoom, currentPan); + } else if (params.renderedPosition != null) { + pos = params.renderedPosition; + } + if (pos != null && !_p.panningEnabled) { + // panning disabled + bail = true; + } + } + + // crop zoom + zoom = zoom > _p.maxZoom ? _p.maxZoom : zoom; + zoom = zoom < _p.minZoom ? _p.minZoom : zoom; + + // can't zoom with invalid params + if (bail || !number$1(zoom) || zoom === currentZoom || pos != null && (!number$1(pos.x) || !number$1(pos.y))) { + return null; + } + if (pos != null) { + // set zoom about position + var pan1 = currentPan; + var zoom1 = currentZoom; + var zoom2 = zoom; + var pan2 = { + x: -zoom2 / zoom1 * (pos.x - pan1.x) + pos.x, + y: -zoom2 / zoom1 * (pos.y - pan1.y) + pos.y + }; + return { + zoomed: true, + panned: true, + zoom: zoom2, + pan: pan2 + }; + } else { + // just set the zoom + return { + zoomed: true, + panned: false, + zoom: zoom, + pan: currentPan + }; + } + }, + zoom: function zoom(params) { + if (params === undefined) { + // get + return this._private.zoom; + } else { + // set + var vp = this.getZoomedViewport(params); + var _p = this._private; + if (vp == null || !vp.zoomed) { + return this; + } + _p.zoom = vp.zoom; + if (vp.panned) { + _p.pan.x = vp.pan.x; + _p.pan.y = vp.pan.y; + } + this.emit('zoom' + (vp.panned ? ' pan' : '') + ' viewport'); + this.notify('viewport'); + return this; // chaining + } + }, + + viewport: function viewport(opts) { + var _p = this._private; + var zoomDefd = true; + var panDefd = true; + var events = []; // to trigger + var zoomFailed = false; + var panFailed = false; + if (!opts) { + return this; + } + if (!number$1(opts.zoom)) { + zoomDefd = false; + } + if (!plainObject(opts.pan)) { + panDefd = false; + } + if (!zoomDefd && !panDefd) { + return this; + } + if (zoomDefd) { + var z = opts.zoom; + if (z < _p.minZoom || z > _p.maxZoom || !_p.zoomingEnabled) { + zoomFailed = true; + } else { + _p.zoom = z; + events.push('zoom'); + } + } + if (panDefd && (!zoomFailed || !opts.cancelOnFailedZoom) && _p.panningEnabled) { + var p = opts.pan; + if (number$1(p.x)) { + _p.pan.x = p.x; + panFailed = false; + } + if (number$1(p.y)) { + _p.pan.y = p.y; + panFailed = false; + } + if (!panFailed) { + events.push('pan'); + } + } + if (events.length > 0) { + events.push('viewport'); + this.emit(events.join(' ')); + this.notify('viewport'); + } + return this; // chaining + }, + + center: function center(elements) { + var pan = this.getCenterPan(elements); + if (pan) { + this._private.pan = pan; + this.emit('pan viewport'); + this.notify('viewport'); + } + return this; // chaining + }, + + getCenterPan: function getCenterPan(elements, zoom) { + if (!this._private.panningEnabled) { + return; + } + if (string(elements)) { + var selector = elements; + elements = this.mutableElements().filter(selector); + } else if (!elementOrCollection(elements)) { + elements = this.mutableElements(); + } + if (elements.length === 0) { + return; + } // can't centre pan to nothing + + var bb = elements.boundingBox(); + var w = this.width(); + var h = this.height(); + zoom = zoom === undefined ? this._private.zoom : zoom; + var pan = { + // middle + x: (w - zoom * (bb.x1 + bb.x2)) / 2, + y: (h - zoom * (bb.y1 + bb.y2)) / 2 + }; + return pan; + }, + reset: function reset() { + if (!this._private.panningEnabled || !this._private.zoomingEnabled) { + return this; + } + this.viewport({ + pan: { + x: 0, + y: 0 + }, + zoom: 1 + }); + return this; // chaining + }, + + invalidateSize: function invalidateSize() { + this._private.sizeCache = null; + }, + size: function size() { + var _p = this._private; + var container = _p.container; + var cy = this; + return _p.sizeCache = _p.sizeCache || (container ? function () { + var style = cy.window().getComputedStyle(container); + var val = function val(name) { + return parseFloat(style.getPropertyValue(name)); + }; + return { + width: container.clientWidth - val('padding-left') - val('padding-right'), + height: container.clientHeight - val('padding-top') - val('padding-bottom') + }; + }() : { + // fallback if no container (not 0 b/c can be used for dividing etc) + width: 1, + height: 1 + }); + }, + width: function width() { + return this.size().width; + }, + height: function height() { + return this.size().height; + }, + extent: function extent() { + var pan = this._private.pan; + var zoom = this._private.zoom; + var rb = this.renderedExtent(); + var b = { + x1: (rb.x1 - pan.x) / zoom, + x2: (rb.x2 - pan.x) / zoom, + y1: (rb.y1 - pan.y) / zoom, + y2: (rb.y2 - pan.y) / zoom + }; + b.w = b.x2 - b.x1; + b.h = b.y2 - b.y1; + return b; + }, + renderedExtent: function renderedExtent() { + var width = this.width(); + var height = this.height(); + return { + x1: 0, + y1: 0, + x2: width, + y2: height, + w: width, + h: height + }; + }, + multiClickDebounceTime: function multiClickDebounceTime(_int) { + if (_int) this._private.multiClickDebounceTime = _int;else return this._private.multiClickDebounceTime; + return this; // chaining + } +}; + +// aliases +corefn$1.centre = corefn$1.center; + +// backwards compatibility +corefn$1.autolockNodes = corefn$1.autolock; +corefn$1.autoungrabifyNodes = corefn$1.autoungrabify; + +var fn = { + data: cytoscape_esm_define.data({ + field: 'data', + bindingEvent: 'data', + allowBinding: true, + allowSetting: true, + settingEvent: 'data', + settingTriggersEvent: true, + triggerFnName: 'trigger', + allowGetting: true, + updateStyle: true + }), + removeData: cytoscape_esm_define.removeData({ + field: 'data', + event: 'data', + triggerFnName: 'trigger', + triggerEvent: true, + updateStyle: true + }), + scratch: cytoscape_esm_define.data({ + field: 'scratch', + bindingEvent: 'scratch', + allowBinding: true, + allowSetting: true, + settingEvent: 'scratch', + settingTriggersEvent: true, + triggerFnName: 'trigger', + allowGetting: true, + updateStyle: true + }), + removeScratch: cytoscape_esm_define.removeData({ + field: 'scratch', + event: 'scratch', + triggerFnName: 'trigger', + triggerEvent: true, + updateStyle: true + }) +}; + +// aliases +fn.attr = fn.data; +fn.removeAttr = fn.removeData; + +var Core = function Core(opts) { + var cy = this; + opts = extend({}, opts); + var container = opts.container; + + // allow for passing a wrapped jquery object + // e.g. cytoscape({ container: $('#cy') }) + if (container && !htmlElement(container) && htmlElement(container[0])) { + container = container[0]; + } + var reg = container ? container._cyreg : null; // e.g. already registered some info (e.g. readies) via jquery + reg = reg || {}; + if (reg && reg.cy) { + reg.cy.destroy(); + reg = {}; // old instance => replace reg completely + } + + var readies = reg.readies = reg.readies || []; + if (container) { + container._cyreg = reg; + } // make sure container assoc'd reg points to this cy + reg.cy = cy; + var head = _window !== undefined && container !== undefined && !opts.headless; + var options = opts; + options.layout = extend({ + name: head ? 'grid' : 'null' + }, options.layout); + options.renderer = extend({ + name: head ? 'canvas' : 'null' + }, options.renderer); + var defVal = function defVal(def, val, altVal) { + if (val !== undefined) { + return val; + } else if (altVal !== undefined) { + return altVal; + } else { + return def; + } + }; + var _p = this._private = { + container: container, + // html dom ele container + ready: false, + // whether ready has been triggered + options: options, + // cached options + elements: new Collection(this), + // elements in the graph + listeners: [], + // list of listeners + aniEles: new Collection(this), + // elements being animated + data: options.data || {}, + // data for the core + scratch: {}, + // scratch object for core + layout: null, + renderer: null, + destroyed: false, + // whether destroy was called + notificationsEnabled: true, + // whether notifications are sent to the renderer + minZoom: 1e-50, + maxZoom: 1e50, + zoomingEnabled: defVal(true, options.zoomingEnabled), + userZoomingEnabled: defVal(true, options.userZoomingEnabled), + panningEnabled: defVal(true, options.panningEnabled), + userPanningEnabled: defVal(true, options.userPanningEnabled), + boxSelectionEnabled: defVal(true, options.boxSelectionEnabled), + autolock: defVal(false, options.autolock, options.autolockNodes), + autoungrabify: defVal(false, options.autoungrabify, options.autoungrabifyNodes), + autounselectify: defVal(false, options.autounselectify), + styleEnabled: options.styleEnabled === undefined ? head : options.styleEnabled, + zoom: number$1(options.zoom) ? options.zoom : 1, + pan: { + x: plainObject(options.pan) && number$1(options.pan.x) ? options.pan.x : 0, + y: plainObject(options.pan) && number$1(options.pan.y) ? options.pan.y : 0 + }, + animation: { + // object for currently-running animations + current: [], + queue: [] + }, + hasCompoundNodes: false, + multiClickDebounceTime: defVal(250, options.multiClickDebounceTime) + }; + this.createEmitter(); + + // set selection type + this.selectionType(options.selectionType); + + // init zoom bounds + this.zoomRange({ + min: options.minZoom, + max: options.maxZoom + }); + var loadExtData = function loadExtData(extData, next) { + var anyIsPromise = extData.some(promise); + if (anyIsPromise) { + return Promise$1.all(extData).then(next); // load all data asynchronously, then exec rest of init + } else { + next(extData); // exec synchronously for convenience + } + }; + + // start with the default stylesheet so we have something before loading an external stylesheet + if (_p.styleEnabled) { + cy.setStyle([]); + } + + // create the renderer + var rendererOptions = extend({}, options, options.renderer); // allow rendering hints in top level options + cy.initRenderer(rendererOptions); + var setElesAndLayout = function setElesAndLayout(elements, onload, ondone) { + cy.notifications(false); + + // remove old elements + var oldEles = cy.mutableElements(); + if (oldEles.length > 0) { + oldEles.remove(); + } + if (elements != null) { + if (plainObject(elements) || array(elements)) { + cy.add(elements); + } + } + cy.one('layoutready', function (e) { + cy.notifications(true); + cy.emit(e); // we missed this event by turning notifications off, so pass it on + + cy.one('load', onload); + cy.emitAndNotify('load'); + }).one('layoutstop', function () { + cy.one('done', ondone); + cy.emit('done'); + }); + var layoutOpts = extend({}, cy._private.options.layout); + layoutOpts.eles = cy.elements(); + cy.layout(layoutOpts).run(); + }; + loadExtData([options.style, options.elements], function (thens) { + var initStyle = thens[0]; + var initEles = thens[1]; + + // init style + if (_p.styleEnabled) { + cy.style().append(initStyle); + } + + // initial load + setElesAndLayout(initEles, function () { + // onready + cy.startAnimationLoop(); + _p.ready = true; + + // if a ready callback is specified as an option, the bind it + if (fn$6(options.ready)) { + cy.on('ready', options.ready); + } + + // bind all the ready handlers registered before creating this instance + for (var i = 0; i < readies.length; i++) { + var fn = readies[i]; + cy.on('ready', fn); + } + if (reg) { + reg.readies = []; + } // clear b/c we've bound them all and don't want to keep it around in case a new core uses the same div etc + + cy.emit('ready'); + }, options.done); + }); +}; +var corefn = Core.prototype; // short alias + +extend(corefn, { + instanceString: function instanceString() { + return 'core'; + }, + isReady: function isReady() { + return this._private.ready; + }, + destroyed: function destroyed() { + return this._private.destroyed; + }, + ready: function ready(fn) { + if (this.isReady()) { + this.emitter().emit('ready', [], fn); // just calls fn as though triggered via ready event + } else { + this.on('ready', fn); + } + return this; + }, + destroy: function destroy() { + var cy = this; + if (cy.destroyed()) return; + cy.stopAnimationLoop(); + cy.destroyRenderer(); + this.emit('destroy'); + cy._private.destroyed = true; + return cy; + }, + hasElementWithId: function hasElementWithId(id) { + return this._private.elements.hasElementWithId(id); + }, + getElementById: function getElementById(id) { + return this._private.elements.getElementById(id); + }, + hasCompoundNodes: function hasCompoundNodes() { + return this._private.hasCompoundNodes; + }, + headless: function headless() { + return this._private.renderer.isHeadless(); + }, + styleEnabled: function styleEnabled() { + return this._private.styleEnabled; + }, + addToPool: function addToPool(eles) { + this._private.elements.merge(eles); + return this; // chaining + }, + + removeFromPool: function removeFromPool(eles) { + this._private.elements.unmerge(eles); + return this; + }, + container: function container() { + return this._private.container || null; + }, + window: function window() { + var container = this._private.container; + if (container == null) return _window; + var ownerDocument = this._private.container.ownerDocument; + if (ownerDocument === undefined || ownerDocument == null) { + return _window; + } + return ownerDocument.defaultView || _window; + }, + mount: function mount(container) { + if (container == null) { + return; + } + var cy = this; + var _p = cy._private; + var options = _p.options; + if (!htmlElement(container) && htmlElement(container[0])) { + container = container[0]; + } + cy.stopAnimationLoop(); + cy.destroyRenderer(); + _p.container = container; + _p.styleEnabled = true; + cy.invalidateSize(); + cy.initRenderer(extend({}, options, options.renderer, { + // allow custom renderer name to be re-used, otherwise use canvas + name: options.renderer.name === 'null' ? 'canvas' : options.renderer.name + })); + cy.startAnimationLoop(); + cy.style(options.style); + cy.emit('mount'); + return cy; + }, + unmount: function unmount() { + var cy = this; + cy.stopAnimationLoop(); + cy.destroyRenderer(); + cy.initRenderer({ + name: 'null' + }); + cy.emit('unmount'); + return cy; + }, + options: function options() { + return copy(this._private.options); + }, + json: function json(obj) { + var cy = this; + var _p = cy._private; + var eles = cy.mutableElements(); + var getFreshRef = function getFreshRef(ele) { + return cy.getElementById(ele.id()); + }; + if (plainObject(obj)) { + // set + + cy.startBatch(); + if (obj.elements) { + var idInJson = {}; + var updateEles = function updateEles(jsons, gr) { + var toAdd = []; + var toMod = []; + for (var i = 0; i < jsons.length; i++) { + var json = jsons[i]; + if (!json.data.id) { + warn('cy.json() cannot handle elements without an ID attribute'); + continue; + } + var id = '' + json.data.id; // id must be string + var ele = cy.getElementById(id); + idInJson[id] = true; + if (ele.length !== 0) { + // existing element should be updated + toMod.push({ + ele: ele, + json: json + }); + } else { + // otherwise should be added + if (gr) { + json.group = gr; + toAdd.push(json); + } else { + toAdd.push(json); + } + } + } + cy.add(toAdd); + for (var _i = 0; _i < toMod.length; _i++) { + var _toMod$_i = toMod[_i], + _ele = _toMod$_i.ele, + _json = _toMod$_i.json; + _ele.json(_json); + } + }; + if (array(obj.elements)) { + // elements: [] + updateEles(obj.elements); + } else { + // elements: { nodes: [], edges: [] } + var grs = ['nodes', 'edges']; + for (var i = 0; i < grs.length; i++) { + var gr = grs[i]; + var elements = obj.elements[gr]; + if (array(elements)) { + updateEles(elements, gr); + } + } + } + var parentsToRemove = cy.collection(); + eles.filter(function (ele) { + return !idInJson[ele.id()]; + }).forEach(function (ele) { + if (ele.isParent()) { + parentsToRemove.merge(ele); + } else { + ele.remove(); + } + }); + + // so that children are not removed w/parent + parentsToRemove.forEach(function (ele) { + return ele.children().move({ + parent: null + }); + }); + + // intermediate parents may be moved by prior line, so make sure we remove by fresh refs + parentsToRemove.forEach(function (ele) { + return getFreshRef(ele).remove(); + }); + } + if (obj.style) { + cy.style(obj.style); + } + if (obj.zoom != null && obj.zoom !== _p.zoom) { + cy.zoom(obj.zoom); + } + if (obj.pan) { + if (obj.pan.x !== _p.pan.x || obj.pan.y !== _p.pan.y) { + cy.pan(obj.pan); + } + } + if (obj.data) { + cy.data(obj.data); + } + var fields = ['minZoom', 'maxZoom', 'zoomingEnabled', 'userZoomingEnabled', 'panningEnabled', 'userPanningEnabled', 'boxSelectionEnabled', 'autolock', 'autoungrabify', 'autounselectify', 'multiClickDebounceTime']; + for (var _i2 = 0; _i2 < fields.length; _i2++) { + var f = fields[_i2]; + if (obj[f] != null) { + cy[f](obj[f]); + } + } + cy.endBatch(); + return this; // chaining + } else { + // get + var flat = !!obj; + var json = {}; + if (flat) { + json.elements = this.elements().map(function (ele) { + return ele.json(); + }); + } else { + json.elements = {}; + eles.forEach(function (ele) { + var group = ele.group(); + if (!json.elements[group]) { + json.elements[group] = []; + } + json.elements[group].push(ele.json()); + }); + } + if (this._private.styleEnabled) { + json.style = cy.style().json(); + } + json.data = copy(cy.data()); + var options = _p.options; + json.zoomingEnabled = _p.zoomingEnabled; + json.userZoomingEnabled = _p.userZoomingEnabled; + json.zoom = _p.zoom; + json.minZoom = _p.minZoom; + json.maxZoom = _p.maxZoom; + json.panningEnabled = _p.panningEnabled; + json.userPanningEnabled = _p.userPanningEnabled; + json.pan = copy(_p.pan); + json.boxSelectionEnabled = _p.boxSelectionEnabled; + json.renderer = copy(options.renderer); + json.hideEdgesOnViewport = options.hideEdgesOnViewport; + json.textureOnViewport = options.textureOnViewport; + json.wheelSensitivity = options.wheelSensitivity; + json.motionBlur = options.motionBlur; + json.multiClickDebounceTime = options.multiClickDebounceTime; + return json; + } + } +}); +corefn.$id = corefn.getElementById; +[corefn$9, corefn$8, elesfn, corefn$7, corefn$6, corefn$5, corefn$4, corefn$3, corefn$2, corefn$1, fn].forEach(function (props) { + extend(corefn, props); +}); + +/* eslint-disable no-unused-vars */ +var defaults$7 = { + fit: true, + // whether to fit the viewport to the graph + directed: false, + // whether the tree is directed downwards (or edges can point in any direction if false) + padding: 30, + // padding on fit + circle: false, + // put depths in concentric circles if true, put depths top down if false + grid: false, + // whether to create an even grid into which the DAG is placed (circle:false only) + spacingFactor: 1.75, + // positive spacing factor, larger => more space between nodes (N.B. n/a if causes overlap) + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + avoidOverlap: true, + // prevents node overlap, may overflow boundingBox if not enough space + nodeDimensionsIncludeLabels: false, + // Excludes the label when calculating node bounding boxes for the layout algorithm + roots: undefined, + // the roots of the trees + depthSort: undefined, + // a sorting function to order nodes at equal depth. e.g. function(a, b){ return a.data('weight') - b.data('weight') } + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled, + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts +}; + +var deprecatedOptionDefaults = { + maximal: false, + // whether to shift nodes down their natural BFS depths in order to avoid upwards edges (DAGS only); setting acyclic to true sets maximal to true also + acyclic: false // whether the tree is acyclic and thus a node could be shifted (due to the maximal option) multiple times without causing an infinite loop; setting to true sets maximal to true also; if you are uncertain whether a tree is acyclic, set to false to avoid potential infinite loops +}; + +/* eslint-enable */ + +var getInfo = function getInfo(ele) { + return ele.scratch('breadthfirst'); +}; +var setInfo = function setInfo(ele, obj) { + return ele.scratch('breadthfirst', obj); +}; +function BreadthFirstLayout(options) { + this.options = extend({}, defaults$7, deprecatedOptionDefaults, options); +} +BreadthFirstLayout.prototype.run = function () { + var params = this.options; + var options = params; + var cy = params.cy; + var eles = options.eles; + var nodes = eles.nodes().filter(function (n) { + return !n.isParent(); + }); + var graph = eles; + var directed = options.directed; + var maximal = options.acyclic || options.maximal || options.maximalAdjustments > 0; // maximalAdjustments for compat. w/ old code; also, setting acyclic to true sets maximal to true + + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + var roots; + if (elementOrCollection(options.roots)) { + roots = options.roots; + } else if (array(options.roots)) { + var rootsArray = []; + for (var i = 0; i < options.roots.length; i++) { + var id = options.roots[i]; + var ele = cy.getElementById(id); + rootsArray.push(ele); + } + roots = cy.collection(rootsArray); + } else if (string(options.roots)) { + roots = cy.$(options.roots); + } else { + if (directed) { + roots = nodes.roots(); + } else { + var components = eles.components(); + roots = cy.collection(); + var _loop = function _loop(_i) { + var comp = components[_i]; + var maxDegree = comp.maxDegree(false); + var compRoots = comp.filter(function (ele) { + return ele.degree(false) === maxDegree; + }); + roots = roots.add(compRoots); + }; + for (var _i = 0; _i < components.length; _i++) { + _loop(_i); + } + } + } + var depths = []; + var foundByBfs = {}; + var addToDepth = function addToDepth(ele, d) { + if (depths[d] == null) { + depths[d] = []; + } + var i = depths[d].length; + depths[d].push(ele); + setInfo(ele, { + index: i, + depth: d + }); + }; + var changeDepth = function changeDepth(ele, newDepth) { + var _getInfo = getInfo(ele), + depth = _getInfo.depth, + index = _getInfo.index; + depths[depth][index] = null; + addToDepth(ele, newDepth); + }; + + // find the depths of the nodes + graph.bfs({ + roots: roots, + directed: options.directed, + visit: function visit(node, edge, pNode, i, depth) { + var ele = node[0]; + var id = ele.id(); + addToDepth(ele, depth); + foundByBfs[id] = true; + } + }); + + // check for nodes not found by bfs + var orphanNodes = []; + for (var _i2 = 0; _i2 < nodes.length; _i2++) { + var _ele = nodes[_i2]; + if (foundByBfs[_ele.id()]) { + continue; + } else { + orphanNodes.push(_ele); + } + } + + // assign the nodes a depth and index + + var assignDepthsAt = function assignDepthsAt(i) { + var eles = depths[i]; + for (var j = 0; j < eles.length; j++) { + var _ele2 = eles[j]; + if (_ele2 == null) { + eles.splice(j, 1); + j--; + continue; + } + setInfo(_ele2, { + depth: i, + index: j + }); + } + }; + var assignDepths = function assignDepths() { + for (var _i3 = 0; _i3 < depths.length; _i3++) { + assignDepthsAt(_i3); + } + }; + var adjustMaximally = function adjustMaximally(ele, shifted) { + var eInfo = getInfo(ele); + var incomers = ele.incomers().filter(function (el) { + return el.isNode() && eles.has(el); + }); + var maxDepth = -1; + var id = ele.id(); + for (var k = 0; k < incomers.length; k++) { + var incmr = incomers[k]; + var iInfo = getInfo(incmr); + maxDepth = Math.max(maxDepth, iInfo.depth); + } + if (eInfo.depth <= maxDepth) { + if (!options.acyclic && shifted[id]) { + return null; + } + var newDepth = maxDepth + 1; + changeDepth(ele, newDepth); + shifted[id] = newDepth; + return true; + } + return false; + }; + + // for the directed case, try to make the edges all go down (i.e. depth i => depth i + 1) + if (directed && maximal) { + var Q = []; + var shifted = {}; + var enqueue = function enqueue(n) { + return Q.push(n); + }; + var dequeue = function dequeue() { + return Q.shift(); + }; + nodes.forEach(function (n) { + return Q.push(n); + }); + while (Q.length > 0) { + var _ele3 = dequeue(); + var didShift = adjustMaximally(_ele3, shifted); + if (didShift) { + _ele3.outgoers().filter(function (el) { + return el.isNode() && eles.has(el); + }).forEach(enqueue); + } else if (didShift === null) { + warn('Detected double maximal shift for node `' + _ele3.id() + '`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.'); + break; // exit on failure + } + } + } + + assignDepths(); // clear holes + + // find min distance we need to leave between nodes + var minDistance = 0; + if (options.avoidOverlap) { + for (var _i4 = 0; _i4 < nodes.length; _i4++) { + var n = nodes[_i4]; + var nbb = n.layoutDimensions(options); + var w = nbb.w; + var h = nbb.h; + minDistance = Math.max(minDistance, w, h); + } + } + + // get the weighted percent for an element based on its connectivity to other levels + var cachedWeightedPercent = {}; + var getWeightedPercent = function getWeightedPercent(ele) { + if (cachedWeightedPercent[ele.id()]) { + return cachedWeightedPercent[ele.id()]; + } + var eleDepth = getInfo(ele).depth; + var neighbors = ele.neighborhood(); + var percent = 0; + var samples = 0; + for (var _i5 = 0; _i5 < neighbors.length; _i5++) { + var neighbor = neighbors[_i5]; + if (neighbor.isEdge() || neighbor.isParent() || !nodes.has(neighbor)) { + continue; + } + var bf = getInfo(neighbor); + if (bf == null) { + continue; + } + var index = bf.index; + var depth = bf.depth; + + // unassigned neighbours shouldn't affect the ordering + if (index == null || depth == null) { + continue; + } + var nDepth = depths[depth].length; + if (depth < eleDepth) { + // only get influenced by elements above + percent += index / nDepth; + samples++; + } + } + samples = Math.max(1, samples); + percent = percent / samples; + if (samples === 0) { + // put lone nodes at the start + percent = 0; + } + cachedWeightedPercent[ele.id()] = percent; + return percent; + }; + + // rearrange the indices in each depth level based on connectivity + + var sortFn = function sortFn(a, b) { + var apct = getWeightedPercent(a); + var bpct = getWeightedPercent(b); + var diff = apct - bpct; + if (diff === 0) { + return ascending(a.id(), b.id()); // make sure sort doesn't have don't-care comparisons + } else { + return diff; + } + }; + if (options.depthSort !== undefined) { + sortFn = options.depthSort; + } + + // sort each level to make connected nodes closer + for (var _i6 = 0; _i6 < depths.length; _i6++) { + depths[_i6].sort(sortFn); + assignDepthsAt(_i6); + } + + // assign orphan nodes to a new top-level depth + var orphanDepth = []; + for (var _i7 = 0; _i7 < orphanNodes.length; _i7++) { + orphanDepth.push(orphanNodes[_i7]); + } + depths.unshift(orphanDepth); + assignDepths(); + var biggestDepthSize = 0; + for (var _i8 = 0; _i8 < depths.length; _i8++) { + biggestDepthSize = Math.max(depths[_i8].length, biggestDepthSize); + } + var center = { + x: bb.x1 + bb.w / 2, + y: bb.x1 + bb.h / 2 + }; + var maxDepthSize = depths.reduce(function (max, eles) { + return Math.max(max, eles.length); + }, 0); + var getPosition = function getPosition(ele) { + var _getInfo2 = getInfo(ele), + depth = _getInfo2.depth, + index = _getInfo2.index; + var depthSize = depths[depth].length; + var distanceX = Math.max(bb.w / ((options.grid ? maxDepthSize : depthSize) + 1), minDistance); + var distanceY = Math.max(bb.h / (depths.length + 1), minDistance); + var radiusStepSize = Math.min(bb.w / 2 / depths.length, bb.h / 2 / depths.length); + radiusStepSize = Math.max(radiusStepSize, minDistance); + if (!options.circle) { + var epos = { + x: center.x + (index + 1 - (depthSize + 1) / 2) * distanceX, + y: (depth + 1) * distanceY + }; + return epos; + } else { + var radius = radiusStepSize * depth + radiusStepSize - (depths.length > 0 && depths[0].length <= 3 ? radiusStepSize / 2 : 0); + var theta = 2 * Math.PI / depths[depth].length * index; + if (depth === 0 && depths[0].length === 1) { + radius = 1; + } + return { + x: center.x + radius * Math.cos(theta), + y: center.y + radius * Math.sin(theta) + }; + } + }; + eles.nodes().layoutPositions(this, options, getPosition); + return this; // chaining +}; + +var defaults$6 = { + fit: true, + // whether to fit the viewport to the graph + padding: 30, + // the padding on fit + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + avoidOverlap: true, + // prevents node overlap, may overflow boundingBox and radius if not enough space + nodeDimensionsIncludeLabels: false, + // Excludes the label when calculating node bounding boxes for the layout algorithm + spacingFactor: undefined, + // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up + radius: undefined, + // the radius of the circle + startAngle: 3 / 2 * Math.PI, + // where nodes start in radians + sweep: undefined, + // how many radians should be between the first and last node (defaults to full circle) + clockwise: true, + // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false) + sort: undefined, + // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') } + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts +}; + +function CircleLayout(options) { + this.options = extend({}, defaults$6, options); +} +CircleLayout.prototype.run = function () { + var params = this.options; + var options = params; + var cy = params.cy; + var eles = options.eles; + var clockwise = options.counterclockwise !== undefined ? !options.counterclockwise : options.clockwise; + var nodes = eles.nodes().not(':parent'); + if (options.sort) { + nodes = nodes.sort(options.sort); + } + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + var center = { + x: bb.x1 + bb.w / 2, + y: bb.y1 + bb.h / 2 + }; + var sweep = options.sweep === undefined ? 2 * Math.PI - 2 * Math.PI / nodes.length : options.sweep; + var dTheta = sweep / Math.max(1, nodes.length - 1); + var r; + var minDistance = 0; + for (var i = 0; i < nodes.length; i++) { + var n = nodes[i]; + var nbb = n.layoutDimensions(options); + var w = nbb.w; + var h = nbb.h; + minDistance = Math.max(minDistance, w, h); + } + if (number$1(options.radius)) { + r = options.radius; + } else if (nodes.length <= 1) { + r = 0; + } else { + r = Math.min(bb.h, bb.w) / 2 - minDistance; + } + + // calculate the radius + if (nodes.length > 1 && options.avoidOverlap) { + // but only if more than one node (can't overlap) + minDistance *= 1.75; // just to have some nice spacing + + var dcos = Math.cos(dTheta) - Math.cos(0); + var dsin = Math.sin(dTheta) - Math.sin(0); + var rMin = Math.sqrt(minDistance * minDistance / (dcos * dcos + dsin * dsin)); // s.t. no nodes overlapping + r = Math.max(rMin, r); + } + var getPos = function getPos(ele, i) { + var theta = options.startAngle + i * dTheta * (clockwise ? 1 : -1); + var rx = r * Math.cos(theta); + var ry = r * Math.sin(theta); + var pos = { + x: center.x + rx, + y: center.y + ry + }; + return pos; + }; + eles.nodes().layoutPositions(this, options, getPos); + return this; // chaining +}; + +var defaults$5 = { + fit: true, + // whether to fit the viewport to the graph + padding: 30, + // the padding on fit + startAngle: 3 / 2 * Math.PI, + // where nodes start in radians + sweep: undefined, + // how many radians should be between the first and last node (defaults to full circle) + clockwise: true, + // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false) + equidistant: false, + // whether levels have an equal radial distance betwen them, may cause bounding box overflow + minNodeSpacing: 10, + // min spacing between outside of nodes (used for radius adjustment) + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + avoidOverlap: true, + // prevents node overlap, may overflow boundingBox if not enough space + nodeDimensionsIncludeLabels: false, + // Excludes the label when calculating node bounding boxes for the layout algorithm + height: undefined, + // height of layout area (overrides container height) + width: undefined, + // width of layout area (overrides container width) + spacingFactor: undefined, + // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up + concentric: function concentric(node) { + // returns numeric value for each node, placing higher nodes in levels towards the centre + return node.degree(); + }, + levelWidth: function levelWidth(nodes) { + // the variation of concentric values in each level + return nodes.maxDegree() / 4; + }, + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts +}; + +function ConcentricLayout(options) { + this.options = extend({}, defaults$5, options); +} +ConcentricLayout.prototype.run = function () { + var params = this.options; + var options = params; + var clockwise = options.counterclockwise !== undefined ? !options.counterclockwise : options.clockwise; + var cy = params.cy; + var eles = options.eles; + var nodes = eles.nodes().not(':parent'); + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + var center = { + x: bb.x1 + bb.w / 2, + y: bb.y1 + bb.h / 2 + }; + var nodeValues = []; // { node, value } + var maxNodeSize = 0; + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var value = void 0; + + // calculate the node value + value = options.concentric(node); + nodeValues.push({ + value: value, + node: node + }); + + // for style mapping + node._private.scratch.concentric = value; + } + + // in case we used the `concentric` in style + nodes.updateStyle(); + + // calculate max size now based on potentially updated mappers + for (var _i = 0; _i < nodes.length; _i++) { + var _node = nodes[_i]; + var nbb = _node.layoutDimensions(options); + maxNodeSize = Math.max(maxNodeSize, nbb.w, nbb.h); + } + + // sort node values in descreasing order + nodeValues.sort(function (a, b) { + return b.value - a.value; + }); + var levelWidth = options.levelWidth(nodes); + + // put the values into levels + var levels = [[]]; + var currentLevel = levels[0]; + for (var _i2 = 0; _i2 < nodeValues.length; _i2++) { + var val = nodeValues[_i2]; + if (currentLevel.length > 0) { + var diff = Math.abs(currentLevel[0].value - val.value); + if (diff >= levelWidth) { + currentLevel = []; + levels.push(currentLevel); + } + } + currentLevel.push(val); + } + + // create positions from levels + + var minDist = maxNodeSize + options.minNodeSpacing; // min dist between nodes + + if (!options.avoidOverlap) { + // then strictly constrain to bb + var firstLvlHasMulti = levels.length > 0 && levels[0].length > 1; + var maxR = Math.min(bb.w, bb.h) / 2 - minDist; + var rStep = maxR / (levels.length + firstLvlHasMulti ? 1 : 0); + minDist = Math.min(minDist, rStep); + } + + // find the metrics for each level + var r = 0; + for (var _i3 = 0; _i3 < levels.length; _i3++) { + var level = levels[_i3]; + var sweep = options.sweep === undefined ? 2 * Math.PI - 2 * Math.PI / level.length : options.sweep; + var dTheta = level.dTheta = sweep / Math.max(1, level.length - 1); + + // calculate the radius + if (level.length > 1 && options.avoidOverlap) { + // but only if more than one node (can't overlap) + var dcos = Math.cos(dTheta) - Math.cos(0); + var dsin = Math.sin(dTheta) - Math.sin(0); + var rMin = Math.sqrt(minDist * minDist / (dcos * dcos + dsin * dsin)); // s.t. no nodes overlapping + + r = Math.max(rMin, r); + } + level.r = r; + r += minDist; + } + if (options.equidistant) { + var rDeltaMax = 0; + var _r = 0; + for (var _i4 = 0; _i4 < levels.length; _i4++) { + var _level = levels[_i4]; + var rDelta = _level.r - _r; + rDeltaMax = Math.max(rDeltaMax, rDelta); + } + _r = 0; + for (var _i5 = 0; _i5 < levels.length; _i5++) { + var _level2 = levels[_i5]; + if (_i5 === 0) { + _r = _level2.r; + } + _level2.r = _r; + _r += rDeltaMax; + } + } + + // calculate the node positions + var pos = {}; // id => position + for (var _i6 = 0; _i6 < levels.length; _i6++) { + var _level3 = levels[_i6]; + var _dTheta = _level3.dTheta; + var _r2 = _level3.r; + for (var j = 0; j < _level3.length; j++) { + var _val = _level3[j]; + var theta = options.startAngle + (clockwise ? 1 : -1) * _dTheta * j; + var p = { + x: center.x + _r2 * Math.cos(theta), + y: center.y + _r2 * Math.sin(theta) + }; + pos[_val.node.id()] = p; + } + } + + // position the nodes + eles.nodes().layoutPositions(this, options, function (ele) { + var id = ele.id(); + return pos[id]; + }); + return this; // chaining +}; + +/* +The CoSE layout was written by Gerardo Huck. +https://www.linkedin.com/in/gerardohuck/ + +Based on the following article: +http://dl.acm.org/citation.cfm?id=1498047 + +Modifications tracked on Github. +*/ +var DEBUG; + +/** + * @brief : default layout options + */ +var defaults$4 = { + // Called on `layoutready` + ready: function ready() {}, + // Called on `layoutstop` + stop: function stop() {}, + // Whether to animate while running the layout + // true : Animate continuously as the layout is running + // false : Just show the end result + // 'end' : Animate with the end result, from the initial positions to the end positions + animate: true, + // Easing of the animation for animate:'end' + animationEasing: undefined, + // The duration of the animation for animate:'end' + animationDuration: undefined, + // A function that determines whether the node should be animated + // All nodes animated by default on animate enabled + // Non-animated nodes are positioned immediately when the layout starts + animateFilter: function animateFilter(node, i) { + return true; + }, + // The layout animates only after this many milliseconds for animate:true + // (prevents flashing on fast runs) + animationThreshold: 250, + // Number of iterations between consecutive screen positions update + refresh: 20, + // Whether to fit the network view after when done + fit: true, + // Padding on fit + padding: 30, + // Constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + boundingBox: undefined, + // Excludes the label when calculating node bounding boxes for the layout algorithm + nodeDimensionsIncludeLabels: false, + // Randomize the initial positions of the nodes (true) or use existing positions (false) + randomize: false, + // Extra spacing between components in non-compound graphs + componentSpacing: 40, + // Node repulsion (non overlapping) multiplier + nodeRepulsion: function nodeRepulsion(node) { + return 2048; + }, + // Node repulsion (overlapping) multiplier + nodeOverlap: 4, + // Ideal edge (non nested) length + idealEdgeLength: function idealEdgeLength(edge) { + return 32; + }, + // Divisor to compute edge forces + edgeElasticity: function edgeElasticity(edge) { + return 32; + }, + // Nesting factor (multiplier) to compute ideal edge length for nested edges + nestingFactor: 1.2, + // Gravity force (constant) + gravity: 1, + // Maximum number of iterations to perform + numIter: 1000, + // Initial temperature (maximum node displacement) + initialTemp: 1000, + // Cooling factor (how the temperature is reduced between consecutive iterations + coolingFactor: 0.99, + // Lower temperature threshold (below this point the layout will end) + minTemp: 1.0 +}; + +/** + * @brief : constructor + * @arg options : object containing layout options + */ +function CoseLayout(options) { + this.options = extend({}, defaults$4, options); + this.options.layout = this; + + // Exclude any edge that has a source or target node that is not in the set of passed-in nodes + var nodes = this.options.eles.nodes(); + var edges = this.options.eles.edges(); + var notEdges = edges.filter(function (e) { + var sourceId = e.source().data('id'); + var targetId = e.target().data('id'); + var hasSource = nodes.some(function (n) { + return n.data('id') === sourceId; + }); + var hasTarget = nodes.some(function (n) { + return n.data('id') === targetId; + }); + return !hasSource || !hasTarget; + }); + this.options.eles = this.options.eles.not(notEdges); +} + +/** + * @brief : runs the layout + */ +CoseLayout.prototype.run = function () { + var options = this.options; + var cy = options.cy; + var layout = this; + layout.stopped = false; + if (options.animate === true || options.animate === false) { + layout.emit({ + type: 'layoutstart', + layout: layout + }); + } + + // Set DEBUG - Global variable + if (true === options.debug) { + DEBUG = true; + } else { + DEBUG = false; + } + + // Initialize layout info + var layoutInfo = createLayoutInfo(cy, layout, options); + + // Show LayoutInfo contents if debugging + if (DEBUG) { + printLayoutInfo(layoutInfo); + } + + // If required, randomize node positions + if (options.randomize) { + randomizePositions(layoutInfo); + } + var startTime = performanceNow(); + var refresh = function refresh() { + refreshPositions(layoutInfo, cy, options); + + // Fit the graph if necessary + if (true === options.fit) { + cy.fit(options.padding); + } + }; + var mainLoop = function mainLoop(i) { + if (layout.stopped || i >= options.numIter) { + // logDebug("Layout manually stopped. Stopping computation in step " + i); + return false; + } + + // Do one step in the phisical simulation + step(layoutInfo, options); + + // Update temperature + layoutInfo.temperature = layoutInfo.temperature * options.coolingFactor; + // logDebug("New temperature: " + layoutInfo.temperature); + + if (layoutInfo.temperature < options.minTemp) { + // logDebug("Temperature drop below minimum threshold. Stopping computation in step " + i); + return false; + } + return true; + }; + var done = function done() { + if (options.animate === true || options.animate === false) { + refresh(); + + // Layout has finished + layout.one('layoutstop', options.stop); + layout.emit({ + type: 'layoutstop', + layout: layout + }); + } else { + var nodes = options.eles.nodes(); + var getScaledPos = getScaleInBoundsFn(layoutInfo, options, nodes); + nodes.layoutPositions(layout, options, getScaledPos); + } + }; + var i = 0; + var loopRet = true; + if (options.animate === true) { + var frame = function frame() { + var f = 0; + while (loopRet && f < options.refresh) { + loopRet = mainLoop(i); + i++; + f++; + } + if (!loopRet) { + // it's done + separateComponents(layoutInfo, options); + done(); + } else { + var now = performanceNow(); + if (now - startTime >= options.animationThreshold) { + refresh(); + } + requestAnimationFrame(frame); + } + }; + frame(); + } else { + while (loopRet) { + loopRet = mainLoop(i); + i++; + } + separateComponents(layoutInfo, options); + done(); + } + return this; // chaining +}; + +/** + * @brief : called on continuous layouts to stop them before they finish + */ +CoseLayout.prototype.stop = function () { + this.stopped = true; + if (this.thread) { + this.thread.stop(); + } + this.emit('layoutstop'); + return this; // chaining +}; + +CoseLayout.prototype.destroy = function () { + if (this.thread) { + this.thread.stop(); + } + return this; // chaining +}; + +/** + * @brief : Creates an object which is contains all the data + * used in the layout process + * @arg cy : cytoscape.js object + * @return : layoutInfo object initialized + */ +var createLayoutInfo = function createLayoutInfo(cy, layout, options) { + // Shortcut + var edges = options.eles.edges(); + var nodes = options.eles.nodes(); + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + var layoutInfo = { + isCompound: cy.hasCompoundNodes(), + layoutNodes: [], + idToIndex: {}, + nodeSize: nodes.size(), + graphSet: [], + indexToGraph: [], + layoutEdges: [], + edgeSize: edges.size(), + temperature: options.initialTemp, + clientWidth: bb.w, + clientHeight: bb.h, + boundingBox: bb + }; + var components = options.eles.components(); + var id2cmptId = {}; + for (var i = 0; i < components.length; i++) { + var component = components[i]; + for (var j = 0; j < component.length; j++) { + var node = component[j]; + id2cmptId[node.id()] = i; + } + } + + // Iterate over all nodes, creating layout nodes + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = nodes[i]; + var nbb = n.layoutDimensions(options); + var tempNode = {}; + tempNode.isLocked = n.locked(); + tempNode.id = n.data('id'); + tempNode.parentId = n.data('parent'); + tempNode.cmptId = id2cmptId[n.id()]; + tempNode.children = []; + tempNode.positionX = n.position('x'); + tempNode.positionY = n.position('y'); + tempNode.offsetX = 0; + tempNode.offsetY = 0; + tempNode.height = nbb.w; + tempNode.width = nbb.h; + tempNode.maxX = tempNode.positionX + tempNode.width / 2; + tempNode.minX = tempNode.positionX - tempNode.width / 2; + tempNode.maxY = tempNode.positionY + tempNode.height / 2; + tempNode.minY = tempNode.positionY - tempNode.height / 2; + tempNode.padLeft = parseFloat(n.style('padding')); + tempNode.padRight = parseFloat(n.style('padding')); + tempNode.padTop = parseFloat(n.style('padding')); + tempNode.padBottom = parseFloat(n.style('padding')); + + // forces + tempNode.nodeRepulsion = fn$6(options.nodeRepulsion) ? options.nodeRepulsion(n) : options.nodeRepulsion; + + // Add new node + layoutInfo.layoutNodes.push(tempNode); + // Add entry to id-index map + layoutInfo.idToIndex[tempNode.id] = i; + } + + // Inline implementation of a queue, used for traversing the graph in BFS order + var queue = []; + var start = 0; // Points to the start the queue + var end = -1; // Points to the end of the queue + + var tempGraph = []; + + // Second pass to add child information and + // initialize queue for hierarchical traversal + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; + var p_id = n.parentId; + // Check if node n has a parent node + if (null != p_id) { + // Add node Id to parent's list of children + layoutInfo.layoutNodes[layoutInfo.idToIndex[p_id]].children.push(n.id); + } else { + // If a node doesn't have a parent, then it's in the root graph + queue[++end] = n.id; + tempGraph.push(n.id); + } + } + + // Add root graph to graphSet + layoutInfo.graphSet.push(tempGraph); + + // Traverse the graph, level by level, + while (start <= end) { + // Get the node to visit and remove it from queue + var node_id = queue[start++]; + var node_ix = layoutInfo.idToIndex[node_id]; + var node = layoutInfo.layoutNodes[node_ix]; + var children = node.children; + if (children.length > 0) { + // Add children nodes as a new graph to graph set + layoutInfo.graphSet.push(children); + // Add children to que queue to be visited + for (var i = 0; i < children.length; i++) { + queue[++end] = children[i]; + } + } + } + + // Create indexToGraph map + for (var i = 0; i < layoutInfo.graphSet.length; i++) { + var graph = layoutInfo.graphSet[i]; + for (var j = 0; j < graph.length; j++) { + var index = layoutInfo.idToIndex[graph[j]]; + layoutInfo.indexToGraph[index] = i; + } + } + + // Iterate over all edges, creating Layout Edges + for (var i = 0; i < layoutInfo.edgeSize; i++) { + var e = edges[i]; + var tempEdge = {}; + tempEdge.id = e.data('id'); + tempEdge.sourceId = e.data('source'); + tempEdge.targetId = e.data('target'); + + // Compute ideal length + var idealLength = fn$6(options.idealEdgeLength) ? options.idealEdgeLength(e) : options.idealEdgeLength; + var elasticity = fn$6(options.edgeElasticity) ? options.edgeElasticity(e) : options.edgeElasticity; + + // Check if it's an inter graph edge + var sourceIx = layoutInfo.idToIndex[tempEdge.sourceId]; + var targetIx = layoutInfo.idToIndex[tempEdge.targetId]; + var sourceGraph = layoutInfo.indexToGraph[sourceIx]; + var targetGraph = layoutInfo.indexToGraph[targetIx]; + if (sourceGraph != targetGraph) { + // Find lowest common graph ancestor + var lca = findLCA(tempEdge.sourceId, tempEdge.targetId, layoutInfo); + + // Compute sum of node depths, relative to lca graph + var lcaGraph = layoutInfo.graphSet[lca]; + var depth = 0; + + // Source depth + var tempNode = layoutInfo.layoutNodes[sourceIx]; + while (-1 === lcaGraph.indexOf(tempNode.id)) { + tempNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[tempNode.parentId]]; + depth++; + } + + // Target depth + tempNode = layoutInfo.layoutNodes[targetIx]; + while (-1 === lcaGraph.indexOf(tempNode.id)) { + tempNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[tempNode.parentId]]; + depth++; + } + + // logDebug('LCA of nodes ' + tempEdge.sourceId + ' and ' + tempEdge.targetId + + // ". Index: " + lca + " Contents: " + lcaGraph.toString() + + // ". Depth: " + depth); + + // Update idealLength + idealLength *= depth * options.nestingFactor; + } + tempEdge.idealLength = idealLength; + tempEdge.elasticity = elasticity; + layoutInfo.layoutEdges.push(tempEdge); + } + + // Finally, return layoutInfo object + return layoutInfo; +}; + +/** + * @brief : This function finds the index of the lowest common + * graph ancestor between 2 nodes in the subtree + * (from the graph hierarchy induced tree) whose + * root is graphIx + * + * @arg node1: node1's ID + * @arg node2: node2's ID + * @arg layoutInfo: layoutInfo object + * + */ +var findLCA = function findLCA(node1, node2, layoutInfo) { + // Find their common ancester, starting from the root graph + var res = findLCA_aux(node1, node2, 0, layoutInfo); + if (2 > res.count) { + // If aux function couldn't find the common ancester, + // then it is the root graph + return 0; + } else { + return res.graph; + } +}; + +/** + * @brief : Auxiliary function used for LCA computation + * + * @arg node1 : node1's ID + * @arg node2 : node2's ID + * @arg graphIx : subgraph index + * @arg layoutInfo : layoutInfo object + * + * @return : object of the form {count: X, graph: Y}, where: + * X is the number of ancestors (max: 2) found in + * graphIx (and it's subgraphs), + * Y is the graph index of the lowest graph containing + * all X nodes + */ +var findLCA_aux = function findLCA_aux(node1, node2, graphIx, layoutInfo) { + var graph = layoutInfo.graphSet[graphIx]; + // If both nodes belongs to graphIx + if (-1 < graph.indexOf(node1) && -1 < graph.indexOf(node2)) { + return { + count: 2, + graph: graphIx + }; + } + + // Make recursive calls for all subgraphs + var c = 0; + for (var i = 0; i < graph.length; i++) { + var nodeId = graph[i]; + var nodeIx = layoutInfo.idToIndex[nodeId]; + var children = layoutInfo.layoutNodes[nodeIx].children; + + // If the node has no child, skip it + if (0 === children.length) { + continue; + } + var childGraphIx = layoutInfo.indexToGraph[layoutInfo.idToIndex[children[0]]]; + var result = findLCA_aux(node1, node2, childGraphIx, layoutInfo); + if (0 === result.count) { + // Neither node1 nor node2 are present in this subgraph + continue; + } else if (1 === result.count) { + // One of (node1, node2) is present in this subgraph + c++; + if (2 === c) { + // We've already found both nodes, no need to keep searching + break; + } + } else { + // Both nodes are present in this subgraph + return result; + } + } + return { + count: c, + graph: graphIx + }; +}; + +/** + * @brief: printsLayoutInfo into js console + * Only used for debbuging + */ +var printLayoutInfo; + +/** + * @brief : Randomizes the position of all nodes + */ +var randomizePositions = function randomizePositions(layoutInfo, cy) { + var width = layoutInfo.clientWidth; + var height = layoutInfo.clientHeight; + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; + + // No need to randomize compound nodes or locked nodes + if (0 === n.children.length && !n.isLocked) { + n.positionX = Math.random() * width; + n.positionY = Math.random() * height; + } + } +}; +var getScaleInBoundsFn = function getScaleInBoundsFn(layoutInfo, options, nodes) { + var bb = layoutInfo.boundingBox; + var coseBB = { + x1: Infinity, + x2: -Infinity, + y1: Infinity, + y2: -Infinity + }; + if (options.boundingBox) { + nodes.forEach(function (node) { + var lnode = layoutInfo.layoutNodes[layoutInfo.idToIndex[node.data('id')]]; + coseBB.x1 = Math.min(coseBB.x1, lnode.positionX); + coseBB.x2 = Math.max(coseBB.x2, lnode.positionX); + coseBB.y1 = Math.min(coseBB.y1, lnode.positionY); + coseBB.y2 = Math.max(coseBB.y2, lnode.positionY); + }); + coseBB.w = coseBB.x2 - coseBB.x1; + coseBB.h = coseBB.y2 - coseBB.y1; + } + return function (ele, i) { + var lnode = layoutInfo.layoutNodes[layoutInfo.idToIndex[ele.data('id')]]; + if (options.boundingBox) { + // then add extra bounding box constraint + var pctX = (lnode.positionX - coseBB.x1) / coseBB.w; + var pctY = (lnode.positionY - coseBB.y1) / coseBB.h; + return { + x: bb.x1 + pctX * bb.w, + y: bb.y1 + pctY * bb.h + }; + } else { + return { + x: lnode.positionX, + y: lnode.positionY + }; + } + }; +}; + +/** + * @brief : Updates the positions of nodes in the network + * @arg layoutInfo : LayoutInfo object + * @arg cy : Cytoscape object + * @arg options : Layout options + */ +var refreshPositions = function refreshPositions(layoutInfo, cy, options) { + // var s = 'Refreshing positions'; + // logDebug(s); + + var layout = options.layout; + var nodes = options.eles.nodes(); + var getScaledPos = getScaleInBoundsFn(layoutInfo, options, nodes); + nodes.positions(getScaledPos); + + // Trigger layoutReady only on first call + if (true !== layoutInfo.ready) { + // s = 'Triggering layoutready'; + // logDebug(s); + layoutInfo.ready = true; + layout.one('layoutready', options.ready); + layout.emit({ + type: 'layoutready', + layout: this + }); + } +}; + +/** + * @brief : Logs a debug message in JS console, if DEBUG is ON + */ +// var logDebug = function(text) { +// if (DEBUG) { +// console.debug(text); +// } +// }; + +/** + * @brief : Performs one iteration of the physical simulation + * @arg layoutInfo : LayoutInfo object already initialized + * @arg cy : Cytoscape object + * @arg options : Layout options + */ +var step = function step(layoutInfo, options, _step) { + // var s = "\n\n###############################"; + // s += "\nSTEP: " + step; + // s += "\n###############################\n"; + // logDebug(s); + + // Calculate node repulsions + calculateNodeForces(layoutInfo, options); + // Calculate edge forces + calculateEdgeForces(layoutInfo); + // Calculate gravity forces + calculateGravityForces(layoutInfo, options); + // Propagate forces from parent to child + propagateForces(layoutInfo); + // Update positions based on calculated forces + updatePositions(layoutInfo); +}; + +/** + * @brief : Computes the node repulsion forces + */ +var calculateNodeForces = function calculateNodeForces(layoutInfo, options) { + // Go through each of the graphs in graphSet + // Nodes only repel each other if they belong to the same graph + // var s = 'calculateNodeForces'; + // logDebug(s); + for (var i = 0; i < layoutInfo.graphSet.length; i++) { + var graph = layoutInfo.graphSet[i]; + var numNodes = graph.length; + + // s = "Set: " + graph.toString(); + // logDebug(s); + + // Now get all the pairs of nodes + // Only get each pair once, (A, B) = (B, A) + for (var j = 0; j < numNodes; j++) { + var node1 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[j]]]; + for (var k = j + 1; k < numNodes; k++) { + var node2 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[k]]]; + nodeRepulsion(node1, node2, layoutInfo, options); + } + } + } +}; +var randomDistance = function randomDistance(max) { + return -max + 2 * max * Math.random(); +}; + +/** + * @brief : Compute the node repulsion forces between a pair of nodes + */ +var nodeRepulsion = function nodeRepulsion(node1, node2, layoutInfo, options) { + // var s = "Node repulsion. Node1: " + node1.id + " Node2: " + node2.id; + + var cmptId1 = node1.cmptId; + var cmptId2 = node2.cmptId; + if (cmptId1 !== cmptId2 && !layoutInfo.isCompound) { + return; + } + + // Get direction of line connecting both node centers + var directionX = node2.positionX - node1.positionX; + var directionY = node2.positionY - node1.positionY; + var maxRandDist = 1; + // s += "\ndirectionX: " + directionX + ", directionY: " + directionY; + + // If both centers are the same, apply a random force + if (0 === directionX && 0 === directionY) { + directionX = randomDistance(maxRandDist); + directionY = randomDistance(maxRandDist); + } + var overlap = nodesOverlap(node1, node2, directionX, directionY); + if (overlap > 0) { + // s += "\nNodes DO overlap."; + // s += "\nOverlap: " + overlap; + // If nodes overlap, repulsion force is proportional + // to the overlap + var force = options.nodeOverlap * overlap; + + // Compute the module and components of the force vector + var distance = Math.sqrt(directionX * directionX + directionY * directionY); + // s += "\nDistance: " + distance; + var forceX = force * directionX / distance; + var forceY = force * directionY / distance; + } else { + // s += "\nNodes do NOT overlap."; + // If there's no overlap, force is inversely proportional + // to squared distance + + // Get clipping points for both nodes + var point1 = findClippingPoint(node1, directionX, directionY); + var point2 = findClippingPoint(node2, -1 * directionX, -1 * directionY); + + // Use clipping points to compute distance + var distanceX = point2.x - point1.x; + var distanceY = point2.y - point1.y; + var distanceSqr = distanceX * distanceX + distanceY * distanceY; + var distance = Math.sqrt(distanceSqr); + // s += "\nDistance: " + distance; + + // Compute the module and components of the force vector + var force = (node1.nodeRepulsion + node2.nodeRepulsion) / distanceSqr; + var forceX = force * distanceX / distance; + var forceY = force * distanceY / distance; + } + + // Apply force + if (!node1.isLocked) { + node1.offsetX -= forceX; + node1.offsetY -= forceY; + } + if (!node2.isLocked) { + node2.offsetX += forceX; + node2.offsetY += forceY; + } + + // s += "\nForceX: " + forceX + " ForceY: " + forceY; + // logDebug(s); + + return; +}; + +/** + * @brief : Determines whether two nodes overlap or not + * @return : Amount of overlapping (0 => no overlap) + */ +var nodesOverlap = function nodesOverlap(node1, node2, dX, dY) { + if (dX > 0) { + var overlapX = node1.maxX - node2.minX; + } else { + var overlapX = node2.maxX - node1.minX; + } + if (dY > 0) { + var overlapY = node1.maxY - node2.minY; + } else { + var overlapY = node2.maxY - node1.minY; + } + if (overlapX >= 0 && overlapY >= 0) { + return Math.sqrt(overlapX * overlapX + overlapY * overlapY); + } else { + return 0; + } +}; + +/** + * @brief : Finds the point in which an edge (direction dX, dY) intersects + * the rectangular bounding box of it's source/target node + */ +var findClippingPoint = function findClippingPoint(node, dX, dY) { + // Shorcuts + var X = node.positionX; + var Y = node.positionY; + var H = node.height || 1; + var W = node.width || 1; + var dirSlope = dY / dX; + var nodeSlope = H / W; + + // var s = 'Computing clipping point of node ' + node.id + + // " . Height: " + H + ", Width: " + W + + // "\nDirection " + dX + ", " + dY; + // + // Compute intersection + var res = {}; + + // Case: Vertical direction (up) + if (0 === dX && 0 < dY) { + res.x = X; + // s += "\nUp direction"; + res.y = Y + H / 2; + return res; + } + + // Case: Vertical direction (down) + if (0 === dX && 0 > dY) { + res.x = X; + res.y = Y + H / 2; + // s += "\nDown direction"; + + return res; + } + + // Case: Intersects the right border + if (0 < dX && -1 * nodeSlope <= dirSlope && dirSlope <= nodeSlope) { + res.x = X + W / 2; + res.y = Y + W * dY / 2 / dX; + // s += "\nRightborder"; + + return res; + } + + // Case: Intersects the left border + if (0 > dX && -1 * nodeSlope <= dirSlope && dirSlope <= nodeSlope) { + res.x = X - W / 2; + res.y = Y - W * dY / 2 / dX; + // s += "\nLeftborder"; + + return res; + } + + // Case: Intersects the top border + if (0 < dY && (dirSlope <= -1 * nodeSlope || dirSlope >= nodeSlope)) { + res.x = X + H * dX / 2 / dY; + res.y = Y + H / 2; + // s += "\nTop border"; + + return res; + } + + // Case: Intersects the bottom border + if (0 > dY && (dirSlope <= -1 * nodeSlope || dirSlope >= nodeSlope)) { + res.x = X - H * dX / 2 / dY; + res.y = Y - H / 2; + // s += "\nBottom border"; + + return res; + } + + // s += "\nClipping point found at " + res.x + ", " + res.y; + // logDebug(s); + return res; +}; + +/** + * @brief : Calculates all edge forces + */ +var calculateEdgeForces = function calculateEdgeForces(layoutInfo, options) { + // Iterate over all edges + for (var i = 0; i < layoutInfo.edgeSize; i++) { + // Get edge, source & target nodes + var edge = layoutInfo.layoutEdges[i]; + var sourceIx = layoutInfo.idToIndex[edge.sourceId]; + var source = layoutInfo.layoutNodes[sourceIx]; + var targetIx = layoutInfo.idToIndex[edge.targetId]; + var target = layoutInfo.layoutNodes[targetIx]; + + // Get direction of line connecting both node centers + var directionX = target.positionX - source.positionX; + var directionY = target.positionY - source.positionY; + + // If both centers are the same, do nothing. + // A random force has already been applied as node repulsion + if (0 === directionX && 0 === directionY) { + continue; + } + + // Get clipping points for both nodes + var point1 = findClippingPoint(source, directionX, directionY); + var point2 = findClippingPoint(target, -1 * directionX, -1 * directionY); + var lx = point2.x - point1.x; + var ly = point2.y - point1.y; + var l = Math.sqrt(lx * lx + ly * ly); + var force = Math.pow(edge.idealLength - l, 2) / edge.elasticity; + if (0 !== l) { + var forceX = force * lx / l; + var forceY = force * ly / l; + } else { + var forceX = 0; + var forceY = 0; + } + + // Add this force to target and source nodes + if (!source.isLocked) { + source.offsetX += forceX; + source.offsetY += forceY; + } + if (!target.isLocked) { + target.offsetX -= forceX; + target.offsetY -= forceY; + } + + // var s = 'Edge force between nodes ' + source.id + ' and ' + target.id; + // s += "\nDistance: " + l + " Force: (" + forceX + ", " + forceY + ")"; + // logDebug(s); + } +}; + +/** + * @brief : Computes gravity forces for all nodes + */ +var calculateGravityForces = function calculateGravityForces(layoutInfo, options) { + if (options.gravity === 0) { + return; + } + var distThreshold = 1; + + // var s = 'calculateGravityForces'; + // logDebug(s); + for (var i = 0; i < layoutInfo.graphSet.length; i++) { + var graph = layoutInfo.graphSet[i]; + var numNodes = graph.length; + + // s = "Set: " + graph.toString(); + // logDebug(s); + + // Compute graph center + if (0 === i) { + var centerX = layoutInfo.clientHeight / 2; + var centerY = layoutInfo.clientWidth / 2; + } else { + // Get Parent node for this graph, and use its position as center + var temp = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[0]]]; + var parent = layoutInfo.layoutNodes[layoutInfo.idToIndex[temp.parentId]]; + var centerX = parent.positionX; + var centerY = parent.positionY; + } + // s = "Center found at: " + centerX + ", " + centerY; + // logDebug(s); + + // Apply force to all nodes in graph + for (var j = 0; j < numNodes; j++) { + var node = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[j]]]; + // s = "Node: " + node.id; + + if (node.isLocked) { + continue; + } + var dx = centerX - node.positionX; + var dy = centerY - node.positionY; + var d = Math.sqrt(dx * dx + dy * dy); + if (d > distThreshold) { + var fx = options.gravity * dx / d; + var fy = options.gravity * dy / d; + node.offsetX += fx; + node.offsetY += fy; + // s += ": Applied force: " + fx + ", " + fy; + } + // logDebug(s); + } + } +}; + +/** + * @brief : This function propagates the existing offsets from + * parent nodes to its descendents. + * @arg layoutInfo : layoutInfo Object + * @arg cy : cytoscape Object + * @arg options : Layout options + */ +var propagateForces = function propagateForces(layoutInfo, options) { + // Inline implementation of a queue, used for traversing the graph in BFS order + var queue = []; + var start = 0; // Points to the start the queue + var end = -1; // Points to the end of the queue + + // logDebug('propagateForces'); + + // Start by visiting the nodes in the root graph + queue.push.apply(queue, layoutInfo.graphSet[0]); + end += layoutInfo.graphSet[0].length; + + // Traverse the graph, level by level, + while (start <= end) { + // Get the node to visit and remove it from queue + var nodeId = queue[start++]; + var nodeIndex = layoutInfo.idToIndex[nodeId]; + var node = layoutInfo.layoutNodes[nodeIndex]; + var children = node.children; + + // We only need to process the node if it's compound + if (0 < children.length && !node.isLocked) { + var offX = node.offsetX; + var offY = node.offsetY; + + // var s = "Propagating offset from parent node : " + node.id + + // ". OffsetX: " + offX + ". OffsetY: " + offY; + // s += "\n Children: " + children.toString(); + // logDebug(s); + + for (var i = 0; i < children.length; i++) { + var childNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[children[i]]]; + // Propagate offset + childNode.offsetX += offX; + childNode.offsetY += offY; + // Add children to queue to be visited + queue[++end] = children[i]; + } + + // Reset parent offsets + node.offsetX = 0; + node.offsetY = 0; + } + } +}; + +/** + * @brief : Updates the layout model positions, based on + * the accumulated forces + */ +var updatePositions = function updatePositions(layoutInfo, options) { + // var s = 'Updating positions'; + // logDebug(s); + + // Reset boundaries for compound nodes + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; + if (0 < n.children.length) { + // logDebug("Resetting boundaries of compound node: " + n.id); + n.maxX = undefined; + n.minX = undefined; + n.maxY = undefined; + n.minY = undefined; + } + } + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; + if (0 < n.children.length || n.isLocked) { + // No need to set compound or locked node position + // logDebug("Skipping position update of node: " + n.id); + continue; + } + // s = "Node: " + n.id + " Previous position: (" + + // n.positionX + ", " + n.positionY + ")."; + + // Limit displacement in order to improve stability + var tempForce = limitForce(n.offsetX, n.offsetY, layoutInfo.temperature); + n.positionX += tempForce.x; + n.positionY += tempForce.y; + n.offsetX = 0; + n.offsetY = 0; + n.minX = n.positionX - n.width; + n.maxX = n.positionX + n.width; + n.minY = n.positionY - n.height; + n.maxY = n.positionY + n.height; + // s += " New Position: (" + n.positionX + ", " + n.positionY + ")."; + // logDebug(s); + + // Update ancestry boudaries + updateAncestryBoundaries(n, layoutInfo); + } + + // Update size, position of compund nodes + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; + if (0 < n.children.length && !n.isLocked) { + n.positionX = (n.maxX + n.minX) / 2; + n.positionY = (n.maxY + n.minY) / 2; + n.width = n.maxX - n.minX; + n.height = n.maxY - n.minY; + // s = "Updating position, size of compound node " + n.id; + // s += "\nPositionX: " + n.positionX + ", PositionY: " + n.positionY; + // s += "\nWidth: " + n.width + ", Height: " + n.height; + // logDebug(s); + } + } +}; + +/** + * @brief : Limits a force (forceX, forceY) to be not + * greater (in modulo) than max. + 8 Preserves force direction. + */ +var limitForce = function limitForce(forceX, forceY, max) { + // var s = "Limiting force: (" + forceX + ", " + forceY + "). Max: " + max; + var force = Math.sqrt(forceX * forceX + forceY * forceY); + if (force > max) { + var res = { + x: max * forceX / force, + y: max * forceY / force + }; + } else { + var res = { + x: forceX, + y: forceY + }; + } + + // s += ".\nResult: (" + res.x + ", " + res.y + ")"; + // logDebug(s); + + return res; +}; + +/** + * @brief : Function used for keeping track of compound node + * sizes, since they should bound all their subnodes. + */ +var updateAncestryBoundaries = function updateAncestryBoundaries(node, layoutInfo) { + // var s = "Propagating new position/size of node " + node.id; + var parentId = node.parentId; + if (null == parentId) { + // If there's no parent, we are done + // s += ". No parent node."; + // logDebug(s); + return; + } + + // Get Parent Node + var p = layoutInfo.layoutNodes[layoutInfo.idToIndex[parentId]]; + var flag = false; + + // MaxX + if (null == p.maxX || node.maxX + p.padRight > p.maxX) { + p.maxX = node.maxX + p.padRight; + flag = true; + // s += "\nNew maxX for parent node " + p.id + ": " + p.maxX; + } + + // MinX + if (null == p.minX || node.minX - p.padLeft < p.minX) { + p.minX = node.minX - p.padLeft; + flag = true; + // s += "\nNew minX for parent node " + p.id + ": " + p.minX; + } + + // MaxY + if (null == p.maxY || node.maxY + p.padBottom > p.maxY) { + p.maxY = node.maxY + p.padBottom; + flag = true; + // s += "\nNew maxY for parent node " + p.id + ": " + p.maxY; + } + + // MinY + if (null == p.minY || node.minY - p.padTop < p.minY) { + p.minY = node.minY - p.padTop; + flag = true; + // s += "\nNew minY for parent node " + p.id + ": " + p.minY; + } + + // If updated boundaries, propagate changes upward + if (flag) { + // logDebug(s); + return updateAncestryBoundaries(p, layoutInfo); + } + + // s += ". No changes in boundaries/position of parent node " + p.id; + // logDebug(s); + return; +}; +var separateComponents = function separateComponents(layoutInfo, options) { + var nodes = layoutInfo.layoutNodes; + var components = []; + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var cid = node.cmptId; + var component = components[cid] = components[cid] || []; + component.push(node); + } + var totalA = 0; + for (var i = 0; i < components.length; i++) { + var c = components[i]; + if (!c) { + continue; + } + c.x1 = Infinity; + c.x2 = -Infinity; + c.y1 = Infinity; + c.y2 = -Infinity; + for (var j = 0; j < c.length; j++) { + var n = c[j]; + c.x1 = Math.min(c.x1, n.positionX - n.width / 2); + c.x2 = Math.max(c.x2, n.positionX + n.width / 2); + c.y1 = Math.min(c.y1, n.positionY - n.height / 2); + c.y2 = Math.max(c.y2, n.positionY + n.height / 2); + } + c.w = c.x2 - c.x1; + c.h = c.y2 - c.y1; + totalA += c.w * c.h; + } + components.sort(function (c1, c2) { + return c2.w * c2.h - c1.w * c1.h; + }); + var x = 0; + var y = 0; + var usedW = 0; + var rowH = 0; + var maxRowW = Math.sqrt(totalA) * layoutInfo.clientWidth / layoutInfo.clientHeight; + for (var i = 0; i < components.length; i++) { + var c = components[i]; + if (!c) { + continue; + } + for (var j = 0; j < c.length; j++) { + var n = c[j]; + if (!n.isLocked) { + n.positionX += x - c.x1; + n.positionY += y - c.y1; + } + } + x += c.w + options.componentSpacing; + usedW += c.w + options.componentSpacing; + rowH = Math.max(rowH, c.h); + if (usedW > maxRowW) { + y += rowH + options.componentSpacing; + x = 0; + usedW = 0; + rowH = 0; + } + } +}; + +var defaults$3 = { + fit: true, + // whether to fit the viewport to the graph + padding: 30, + // padding used on fit + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + avoidOverlap: true, + // prevents node overlap, may overflow boundingBox if not enough space + avoidOverlapPadding: 10, + // extra spacing around nodes when avoidOverlap: true + nodeDimensionsIncludeLabels: false, + // Excludes the label when calculating node bounding boxes for the layout algorithm + spacingFactor: undefined, + // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up + condense: false, + // uses all available space on false, uses minimal space on true + rows: undefined, + // force num of rows in the grid + cols: undefined, + // force num of columns in the grid + position: function position(node) {}, + // returns { row, col } for element + sort: undefined, + // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') } + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts +}; + +function GridLayout(options) { + this.options = extend({}, defaults$3, options); +} +GridLayout.prototype.run = function () { + var params = this.options; + var options = params; + var cy = params.cy; + var eles = options.eles; + var nodes = eles.nodes().not(':parent'); + if (options.sort) { + nodes = nodes.sort(options.sort); + } + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + if (bb.h === 0 || bb.w === 0) { + eles.nodes().layoutPositions(this, options, function (ele) { + return { + x: bb.x1, + y: bb.y1 + }; + }); + } else { + // width/height * splits^2 = cells where splits is number of times to split width + var cells = nodes.size(); + var splits = Math.sqrt(cells * bb.h / bb.w); + var rows = Math.round(splits); + var cols = Math.round(bb.w / bb.h * splits); + var small = function small(val) { + if (val == null) { + return Math.min(rows, cols); + } else { + var min = Math.min(rows, cols); + if (min == rows) { + rows = val; + } else { + cols = val; + } + } + }; + var large = function large(val) { + if (val == null) { + return Math.max(rows, cols); + } else { + var max = Math.max(rows, cols); + if (max == rows) { + rows = val; + } else { + cols = val; + } + } + }; + var oRows = options.rows; + var oCols = options.cols != null ? options.cols : options.columns; + + // if rows or columns were set in options, use those values + if (oRows != null && oCols != null) { + rows = oRows; + cols = oCols; + } else if (oRows != null && oCols == null) { + rows = oRows; + cols = Math.ceil(cells / rows); + } else if (oRows == null && oCols != null) { + cols = oCols; + rows = Math.ceil(cells / cols); + } + + // otherwise use the automatic values and adjust accordingly + + // if rounding was up, see if we can reduce rows or columns + else if (cols * rows > cells) { + var sm = small(); + var lg = large(); + + // reducing the small side takes away the most cells, so try it first + if ((sm - 1) * lg >= cells) { + small(sm - 1); + } else if ((lg - 1) * sm >= cells) { + large(lg - 1); + } + } else { + // if rounding was too low, add rows or columns + while (cols * rows < cells) { + var _sm = small(); + var _lg = large(); + + // try to add to larger side first (adds less in multiplication) + if ((_lg + 1) * _sm >= cells) { + large(_lg + 1); + } else { + small(_sm + 1); + } + } + } + var cellWidth = bb.w / cols; + var cellHeight = bb.h / rows; + if (options.condense) { + cellWidth = 0; + cellHeight = 0; + } + if (options.avoidOverlap) { + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var pos = node._private.position; + if (pos.x == null || pos.y == null) { + // for bb + pos.x = 0; + pos.y = 0; + } + var nbb = node.layoutDimensions(options); + var p = options.avoidOverlapPadding; + var w = nbb.w + p; + var h = nbb.h + p; + cellWidth = Math.max(cellWidth, w); + cellHeight = Math.max(cellHeight, h); + } + } + var cellUsed = {}; // e.g. 'c-0-2' => true + + var used = function used(row, col) { + return cellUsed['c-' + row + '-' + col] ? true : false; + }; + var use = function use(row, col) { + cellUsed['c-' + row + '-' + col] = true; + }; + + // to keep track of current cell position + var row = 0; + var col = 0; + var moveToNextCell = function moveToNextCell() { + col++; + if (col >= cols) { + col = 0; + row++; + } + }; + + // get a cache of all the manual positions + var id2manPos = {}; + for (var _i = 0; _i < nodes.length; _i++) { + var _node = nodes[_i]; + var rcPos = options.position(_node); + if (rcPos && (rcPos.row !== undefined || rcPos.col !== undefined)) { + // must have at least row or col def'd + var _pos = { + row: rcPos.row, + col: rcPos.col + }; + if (_pos.col === undefined) { + // find unused col + _pos.col = 0; + while (used(_pos.row, _pos.col)) { + _pos.col++; + } + } else if (_pos.row === undefined) { + // find unused row + _pos.row = 0; + while (used(_pos.row, _pos.col)) { + _pos.row++; + } + } + id2manPos[_node.id()] = _pos; + use(_pos.row, _pos.col); + } + } + var getPos = function getPos(element, i) { + var x, y; + if (element.locked() || element.isParent()) { + return false; + } + + // see if we have a manual position set + var rcPos = id2manPos[element.id()]; + if (rcPos) { + x = rcPos.col * cellWidth + cellWidth / 2 + bb.x1; + y = rcPos.row * cellHeight + cellHeight / 2 + bb.y1; + } else { + // otherwise set automatically + + while (used(row, col)) { + moveToNextCell(); + } + x = col * cellWidth + cellWidth / 2 + bb.x1; + y = row * cellHeight + cellHeight / 2 + bb.y1; + use(row, col); + moveToNextCell(); + } + return { + x: x, + y: y + }; + }; + nodes.layoutPositions(this, options, getPos); + } + return this; // chaining +}; + +// default layout options +var defaults$2 = { + ready: function ready() {}, + // on layoutready + stop: function stop() {} // on layoutstop +}; + +// constructor +// options : object containing layout options +function NullLayout(options) { + this.options = extend({}, defaults$2, options); +} + +// runs the layout +NullLayout.prototype.run = function () { + var options = this.options; + var eles = options.eles; // elements to consider in the layout + var layout = this; + + // cy is automatically populated for us in the constructor + // (disable eslint for next line as this serves as example layout code to external developers) + // eslint-disable-next-line no-unused-vars + options.cy; + layout.emit('layoutstart'); + + // puts all nodes at (0, 0) + // n.b. most layouts would use layoutPositions(), instead of positions() and manual events + eles.nodes().positions(function () { + return { + x: 0, + y: 0 + }; + }); + + // trigger layoutready when each node has had its position set at least once + layout.one('layoutready', options.ready); + layout.emit('layoutready'); + + // trigger layoutstop when the layout stops (e.g. finishes) + layout.one('layoutstop', options.stop); + layout.emit('layoutstop'); + return this; // chaining +}; + +// called on continuous layouts to stop them before they finish +NullLayout.prototype.stop = function () { + return this; // chaining +}; + +var defaults$1 = { + positions: undefined, + // map of (node id) => (position obj); or function(node){ return somPos; } + zoom: undefined, + // the zoom level to set (prob want fit = false if set) + pan: undefined, + // the pan level to set (prob want fit = false if set) + fit: true, + // whether to fit to viewport + padding: 30, + // padding on fit + spacingFactor: undefined, + // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts +}; + +function PresetLayout(options) { + this.options = extend({}, defaults$1, options); +} +PresetLayout.prototype.run = function () { + var options = this.options; + var eles = options.eles; + var nodes = eles.nodes(); + var posIsFn = fn$6(options.positions); + function getPosition(node) { + if (options.positions == null) { + return copyPosition(node.position()); + } + if (posIsFn) { + return options.positions(node); + } + var pos = options.positions[node._private.data.id]; + if (pos == null) { + return null; + } + return pos; + } + nodes.layoutPositions(this, options, function (node, i) { + var position = getPosition(node); + if (node.locked() || position == null) { + return false; + } + return position; + }); + return this; // chaining +}; + +var defaults = { + fit: true, + // whether to fit to viewport + padding: 30, + // fit padding + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts +}; + +function RandomLayout(options) { + this.options = extend({}, defaults, options); +} +RandomLayout.prototype.run = function () { + var options = this.options; + var cy = options.cy; + var eles = options.eles; + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + var getPos = function getPos(node, i) { + return { + x: bb.x1 + Math.round(Math.random() * bb.w), + y: bb.y1 + Math.round(Math.random() * bb.h) + }; + }; + eles.nodes().layoutPositions(this, options, getPos); + return this; // chaining +}; + +var layout = [{ + name: 'breadthfirst', + impl: BreadthFirstLayout +}, { + name: 'circle', + impl: CircleLayout +}, { + name: 'concentric', + impl: ConcentricLayout +}, { + name: 'cose', + impl: CoseLayout +}, { + name: 'grid', + impl: GridLayout +}, { + name: 'null', + impl: NullLayout +}, { + name: 'preset', + impl: PresetLayout +}, { + name: 'random', + impl: RandomLayout +}]; + +function NullRenderer(options) { + this.options = options; + this.notifications = 0; // for testing +} + +var noop = function noop() {}; +var throwImgErr = function throwImgErr() { + throw new Error('A headless instance can not render images'); +}; +NullRenderer.prototype = { + recalculateRenderedStyle: noop, + notify: function notify() { + this.notifications++; + }, + init: noop, + isHeadless: function isHeadless() { + return true; + }, + png: throwImgErr, + jpg: throwImgErr +}; + +var BRp$f = {}; +BRp$f.arrowShapeWidth = 0.3; +BRp$f.registerArrowShapes = function () { + var arrowShapes = this.arrowShapes = {}; + var renderer = this; + + // Contract for arrow shapes: + // 0, 0 is arrow tip + // (0, 1) is direction towards node + // (1, 0) is right + // + // functional api: + // collide: check x, y in shape + // roughCollide: called before collide, no false negatives + // draw: draw + // spacing: dist(arrowTip, nodeBoundary) + // gap: dist(edgeTip, nodeBoundary), edgeTip may != arrowTip + + var bbCollide = function bbCollide(x, y, size, angle, translation, edgeWidth, padding) { + var x1 = translation.x - size / 2 - padding; + var x2 = translation.x + size / 2 + padding; + var y1 = translation.y - size / 2 - padding; + var y2 = translation.y + size / 2 + padding; + var inside = x1 <= x && x <= x2 && y1 <= y && y <= y2; + return inside; + }; + var transform = function transform(x, y, size, angle, translation) { + var xRotated = x * Math.cos(angle) - y * Math.sin(angle); + var yRotated = x * Math.sin(angle) + y * Math.cos(angle); + var xScaled = xRotated * size; + var yScaled = yRotated * size; + var xTranslated = xScaled + translation.x; + var yTranslated = yScaled + translation.y; + return { + x: xTranslated, + y: yTranslated + }; + }; + var transformPoints = function transformPoints(pts, size, angle, translation) { + var retPts = []; + for (var i = 0; i < pts.length; i += 2) { + var x = pts[i]; + var y = pts[i + 1]; + retPts.push(transform(x, y, size, angle, translation)); + } + return retPts; + }; + var pointsToArr = function pointsToArr(pts) { + var ret = []; + for (var i = 0; i < pts.length; i++) { + var p = pts[i]; + ret.push(p.x, p.y); + } + return ret; + }; + var standardGap = function standardGap(edge) { + return edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').pfValue * 2; + }; + var defineArrowShape = function defineArrowShape(name, defn) { + if (string(defn)) { + defn = arrowShapes[defn]; + } + arrowShapes[name] = extend({ + name: name, + points: [-0.15, -0.3, 0.15, -0.3, 0.15, 0.3, -0.15, 0.3], + collide: function collide(x, y, size, angle, translation, padding) { + var points = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); + var inside = pointInsidePolygonPoints(x, y, points); + return inside; + }, + roughCollide: bbCollide, + draw: function draw(context, size, angle, translation) { + var points = transformPoints(this.points, size, angle, translation); + renderer.arrowShapeImpl('polygon')(context, points); + }, + spacing: function spacing(edge) { + return 0; + }, + gap: standardGap + }, defn); + }; + defineArrowShape('none', { + collide: falsify, + roughCollide: falsify, + draw: noop$1, + spacing: zeroify, + gap: zeroify + }); + defineArrowShape('triangle', { + points: [-0.15, -0.3, 0, 0, 0.15, -0.3] + }); + defineArrowShape('arrow', 'triangle'); + defineArrowShape('triangle-backcurve', { + points: arrowShapes['triangle'].points, + controlPoint: [0, -0.15], + roughCollide: bbCollide, + draw: function draw(context, size, angle, translation, edgeWidth) { + var ptsTrans = transformPoints(this.points, size, angle, translation); + var ctrlPt = this.controlPoint; + var ctrlPtTrans = transform(ctrlPt[0], ctrlPt[1], size, angle, translation); + renderer.arrowShapeImpl(this.name)(context, ptsTrans, ctrlPtTrans); + }, + gap: function gap(edge) { + return standardGap(edge) * 0.8; + } + }); + defineArrowShape('triangle-tee', { + points: [0, 0, 0.15, -0.3, -0.15, -0.3, 0, 0], + pointsTee: [-0.15, -0.4, -0.15, -0.5, 0.15, -0.5, 0.15, -0.4], + collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { + var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); + var teePts = pointsToArr(transformPoints(this.pointsTee, size + 2 * padding, angle, translation)); + var inside = pointInsidePolygonPoints(x, y, triPts) || pointInsidePolygonPoints(x, y, teePts); + return inside; + }, + draw: function draw(context, size, angle, translation, edgeWidth) { + var triPts = transformPoints(this.points, size, angle, translation); + var teePts = transformPoints(this.pointsTee, size, angle, translation); + renderer.arrowShapeImpl(this.name)(context, triPts, teePts); + } + }); + defineArrowShape('circle-triangle', { + radius: 0.15, + pointsTr: [0, -0.15, 0.15, -0.45, -0.15, -0.45, 0, -0.15], + collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { + var t = translation; + var circleInside = Math.pow(t.x - x, 2) + Math.pow(t.y - y, 2) <= Math.pow((size + 2 * padding) * this.radius, 2); + var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); + return pointInsidePolygonPoints(x, y, triPts) || circleInside; + }, + draw: function draw(context, size, angle, translation, edgeWidth) { + var triPts = transformPoints(this.pointsTr, size, angle, translation); + renderer.arrowShapeImpl(this.name)(context, triPts, translation.x, translation.y, this.radius * size); + }, + spacing: function spacing(edge) { + return renderer.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.radius; + } + }); + defineArrowShape('triangle-cross', { + points: [0, 0, 0.15, -0.3, -0.15, -0.3, 0, 0], + baseCrossLinePts: [-0.15, -0.4, + // first half of the rectangle + -0.15, -0.4, 0.15, -0.4, + // second half of the rectangle + 0.15, -0.4], + crossLinePts: function crossLinePts(size, edgeWidth) { + // shift points so that the distance between the cross points matches edge width + var p = this.baseCrossLinePts.slice(); + var shiftFactor = edgeWidth / size; + var y0 = 3; + var y1 = 5; + p[y0] = p[y0] - shiftFactor; + p[y1] = p[y1] - shiftFactor; + return p; + }, + collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { + var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); + var teePts = pointsToArr(transformPoints(this.crossLinePts(size, edgeWidth), size + 2 * padding, angle, translation)); + var inside = pointInsidePolygonPoints(x, y, triPts) || pointInsidePolygonPoints(x, y, teePts); + return inside; + }, + draw: function draw(context, size, angle, translation, edgeWidth) { + var triPts = transformPoints(this.points, size, angle, translation); + var crossLinePts = transformPoints(this.crossLinePts(size, edgeWidth), size, angle, translation); + renderer.arrowShapeImpl(this.name)(context, triPts, crossLinePts); + } + }); + defineArrowShape('vee', { + points: [-0.15, -0.3, 0, 0, 0.15, -0.3, 0, -0.15], + gap: function gap(edge) { + return standardGap(edge) * 0.525; + } + }); + defineArrowShape('circle', { + radius: 0.15, + collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { + var t = translation; + var inside = Math.pow(t.x - x, 2) + Math.pow(t.y - y, 2) <= Math.pow((size + 2 * padding) * this.radius, 2); + return inside; + }, + draw: function draw(context, size, angle, translation, edgeWidth) { + renderer.arrowShapeImpl(this.name)(context, translation.x, translation.y, this.radius * size); + }, + spacing: function spacing(edge) { + return renderer.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.radius; + } + }); + defineArrowShape('tee', { + points: [-0.15, 0, -0.15, -0.1, 0.15, -0.1, 0.15, 0], + spacing: function spacing(edge) { + return 1; + }, + gap: function gap(edge) { + return 1; + } + }); + defineArrowShape('square', { + points: [-0.15, 0.00, 0.15, 0.00, 0.15, -0.3, -0.15, -0.3] + }); + defineArrowShape('diamond', { + points: [-0.15, -0.15, 0, -0.3, 0.15, -0.15, 0, 0], + gap: function gap(edge) { + return edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').value; + } + }); + defineArrowShape('chevron', { + points: [0, 0, -0.15, -0.15, -0.1, -0.2, 0, -0.1, 0.1, -0.2, 0.15, -0.15], + gap: function gap(edge) { + return 0.95 * edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').value; + } + }); +}; + +var BRp$e = {}; + +// Project mouse +BRp$e.projectIntoViewport = function (clientX, clientY) { + var cy = this.cy; + var offsets = this.findContainerClientCoords(); + var offsetLeft = offsets[0]; + var offsetTop = offsets[1]; + var scale = offsets[4]; + var pan = cy.pan(); + var zoom = cy.zoom(); + var x = ((clientX - offsetLeft) / scale - pan.x) / zoom; + var y = ((clientY - offsetTop) / scale - pan.y) / zoom; + return [x, y]; +}; +BRp$e.findContainerClientCoords = function () { + if (this.containerBB) { + return this.containerBB; + } + var container = this.container; + var rect = container.getBoundingClientRect(); + var style = this.cy.window().getComputedStyle(container); + var styleValue = function styleValue(name) { + return parseFloat(style.getPropertyValue(name)); + }; + var padding = { + left: styleValue('padding-left'), + right: styleValue('padding-right'), + top: styleValue('padding-top'), + bottom: styleValue('padding-bottom') + }; + var border = { + left: styleValue('border-left-width'), + right: styleValue('border-right-width'), + top: styleValue('border-top-width'), + bottom: styleValue('border-bottom-width') + }; + var clientWidth = container.clientWidth; + var clientHeight = container.clientHeight; + var paddingHor = padding.left + padding.right; + var paddingVer = padding.top + padding.bottom; + var borderHor = border.left + border.right; + var scale = rect.width / (clientWidth + borderHor); + var unscaledW = clientWidth - paddingHor; + var unscaledH = clientHeight - paddingVer; + var left = rect.left + padding.left + border.left; + var top = rect.top + padding.top + border.top; + return this.containerBB = [left, top, unscaledW, unscaledH, scale]; +}; +BRp$e.invalidateContainerClientCoordsCache = function () { + this.containerBB = null; +}; +BRp$e.findNearestElement = function (x, y, interactiveElementsOnly, isTouch) { + return this.findNearestElements(x, y, interactiveElementsOnly, isTouch)[0]; +}; +BRp$e.findNearestElements = function (x, y, interactiveElementsOnly, isTouch) { + var self = this; + var r = this; + var eles = r.getCachedZSortedEles(); + var near = []; // 1 node max, 1 edge max + var zoom = r.cy.zoom(); + var hasCompounds = r.cy.hasCompoundNodes(); + var edgeThreshold = (isTouch ? 24 : 8) / zoom; + var nodeThreshold = (isTouch ? 8 : 2) / zoom; + var labelThreshold = (isTouch ? 8 : 2) / zoom; + var minSqDist = Infinity; + var nearEdge; + var nearNode; + if (interactiveElementsOnly) { + eles = eles.interactive; + } + function addEle(ele, sqDist) { + if (ele.isNode()) { + if (nearNode) { + return; // can't replace node + } else { + nearNode = ele; + near.push(ele); + } + } + if (ele.isEdge() && (sqDist == null || sqDist < minSqDist)) { + if (nearEdge) { + // then replace existing edge + // can replace only if same z-index + if (nearEdge.pstyle('z-compound-depth').value === ele.pstyle('z-compound-depth').value && nearEdge.pstyle('z-compound-depth').value === ele.pstyle('z-compound-depth').value) { + for (var i = 0; i < near.length; i++) { + if (near[i].isEdge()) { + near[i] = ele; + nearEdge = ele; + minSqDist = sqDist != null ? sqDist : minSqDist; + break; + } + } + } + } else { + near.push(ele); + nearEdge = ele; + minSqDist = sqDist != null ? sqDist : minSqDist; + } + } + } + function checkNode(node) { + var width = node.outerWidth() + 2 * nodeThreshold; + var height = node.outerHeight() + 2 * nodeThreshold; + var hw = width / 2; + var hh = height / 2; + var pos = node.position(); + var cornerRadius = node.pstyle('corner-radius').value === 'auto' ? 'auto' : node.pstyle('corner-radius').pfValue; + var rs = node._private.rscratch; + if (pos.x - hw <= x && x <= pos.x + hw // bb check x + && pos.y - hh <= y && y <= pos.y + hh // bb check y + ) { + var shape = r.nodeShapes[self.getNodeShape(node)]; + if (shape.checkPoint(x, y, 0, width, height, pos.x, pos.y, cornerRadius, rs)) { + addEle(node, 0); + return true; + } + } + } + function checkEdge(edge) { + var _p = edge._private; + var rs = _p.rscratch; + var styleWidth = edge.pstyle('width').pfValue; + var scale = edge.pstyle('arrow-scale').value; + var width = styleWidth / 2 + edgeThreshold; // more like a distance radius from centre + var widthSq = width * width; + var width2 = width * 2; + var src = _p.source; + var tgt = _p.target; + var sqDist; + if (rs.edgeType === 'segments' || rs.edgeType === 'straight' || rs.edgeType === 'haystack') { + var pts = rs.allpts; + for (var i = 0; i + 3 < pts.length; i += 2) { + if (inLineVicinity(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], width2) && widthSq > (sqDist = sqdistToFiniteLine(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3]))) { + addEle(edge, sqDist); + return true; + } + } + } else if (rs.edgeType === 'bezier' || rs.edgeType === 'multibezier' || rs.edgeType === 'self' || rs.edgeType === 'compound') { + var pts = rs.allpts; + for (var i = 0; i + 5 < rs.allpts.length; i += 4) { + if (inBezierVicinity(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], pts[i + 4], pts[i + 5], width2) && widthSq > (sqDist = sqdistToQuadraticBezier(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], pts[i + 4], pts[i + 5]))) { + addEle(edge, sqDist); + return true; + } + } + } + + // if we're close to the edge but didn't hit it, maybe we hit its arrows + + var src = src || _p.source; + var tgt = tgt || _p.target; + var arSize = self.getArrowWidth(styleWidth, scale); + var arrows = [{ + name: 'source', + x: rs.arrowStartX, + y: rs.arrowStartY, + angle: rs.srcArrowAngle + }, { + name: 'target', + x: rs.arrowEndX, + y: rs.arrowEndY, + angle: rs.tgtArrowAngle + }, { + name: 'mid-source', + x: rs.midX, + y: rs.midY, + angle: rs.midsrcArrowAngle + }, { + name: 'mid-target', + x: rs.midX, + y: rs.midY, + angle: rs.midtgtArrowAngle + }]; + for (var i = 0; i < arrows.length; i++) { + var ar = arrows[i]; + var shape = r.arrowShapes[edge.pstyle(ar.name + '-arrow-shape').value]; + var edgeWidth = edge.pstyle('width').pfValue; + if (shape.roughCollide(x, y, arSize, ar.angle, { + x: ar.x, + y: ar.y + }, edgeWidth, edgeThreshold) && shape.collide(x, y, arSize, ar.angle, { + x: ar.x, + y: ar.y + }, edgeWidth, edgeThreshold)) { + addEle(edge); + return true; + } + } + + // for compound graphs, hitting edge may actually want a connected node instead (b/c edge may have greater z-index precedence) + if (hasCompounds && near.length > 0) { + checkNode(src); + checkNode(tgt); + } + } + function preprop(obj, name, pre) { + return getPrefixedProperty(obj, name, pre); + } + function checkLabel(ele, prefix) { + var _p = ele._private; + var th = labelThreshold; + var prefixDash; + if (prefix) { + prefixDash = prefix + '-'; + } else { + prefixDash = ''; + } + ele.boundingBox(); + var bb = _p.labelBounds[prefix || 'main']; + var text = ele.pstyle(prefixDash + 'label').value; + var eventsEnabled = ele.pstyle('text-events').strValue === 'yes'; + if (!eventsEnabled || !text) { + return; + } + var lx = preprop(_p.rscratch, 'labelX', prefix); + var ly = preprop(_p.rscratch, 'labelY', prefix); + var theta = preprop(_p.rscratch, 'labelAngle', prefix); + var ox = ele.pstyle(prefixDash + 'text-margin-x').pfValue; + var oy = ele.pstyle(prefixDash + 'text-margin-y').pfValue; + var lx1 = bb.x1 - th - ox; // (-ox, -oy) as bb already includes margin + var lx2 = bb.x2 + th - ox; // and rotation is about (lx, ly) + var ly1 = bb.y1 - th - oy; + var ly2 = bb.y2 + th - oy; + if (theta) { + var cos = Math.cos(theta); + var sin = Math.sin(theta); + var rotate = function rotate(x, y) { + x = x - lx; + y = y - ly; + return { + x: x * cos - y * sin + lx, + y: x * sin + y * cos + ly + }; + }; + var px1y1 = rotate(lx1, ly1); + var px1y2 = rotate(lx1, ly2); + var px2y1 = rotate(lx2, ly1); + var px2y2 = rotate(lx2, ly2); + var points = [ + // with the margin added after the rotation is applied + px1y1.x + ox, px1y1.y + oy, px2y1.x + ox, px2y1.y + oy, px2y2.x + ox, px2y2.y + oy, px1y2.x + ox, px1y2.y + oy]; + if (pointInsidePolygonPoints(x, y, points)) { + addEle(ele); + return true; + } + } else { + // do a cheaper bb check + if (inBoundingBox(bb, x, y)) { + addEle(ele); + return true; + } + } + } + for (var i = eles.length - 1; i >= 0; i--) { + // reverse order for precedence + var ele = eles[i]; + if (ele.isNode()) { + checkNode(ele) || checkLabel(ele); + } else { + // then edge + checkEdge(ele) || checkLabel(ele) || checkLabel(ele, 'source') || checkLabel(ele, 'target'); + } + } + return near; +}; + +// 'Give me everything from this box' +BRp$e.getAllInBox = function (x1, y1, x2, y2) { + var eles = this.getCachedZSortedEles().interactive; + var box = []; + var x1c = Math.min(x1, x2); + var x2c = Math.max(x1, x2); + var y1c = Math.min(y1, y2); + var y2c = Math.max(y1, y2); + x1 = x1c; + x2 = x2c; + y1 = y1c; + y2 = y2c; + var boxBb = makeBoundingBox({ + x1: x1, + y1: y1, + x2: x2, + y2: y2 + }); + for (var e = 0; e < eles.length; e++) { + var ele = eles[e]; + if (ele.isNode()) { + var node = ele; + var nodeBb = node.boundingBox({ + includeNodes: true, + includeEdges: false, + includeLabels: false + }); + if (boundingBoxesIntersect(boxBb, nodeBb) && !boundingBoxInBoundingBox(nodeBb, boxBb)) { + box.push(node); + } + } else { + var edge = ele; + var _p = edge._private; + var rs = _p.rscratch; + if (rs.startX != null && rs.startY != null && !inBoundingBox(boxBb, rs.startX, rs.startY)) { + continue; + } + if (rs.endX != null && rs.endY != null && !inBoundingBox(boxBb, rs.endX, rs.endY)) { + continue; + } + if (rs.edgeType === 'bezier' || rs.edgeType === 'multibezier' || rs.edgeType === 'self' || rs.edgeType === 'compound' || rs.edgeType === 'segments' || rs.edgeType === 'haystack') { + var pts = _p.rstyle.bezierPts || _p.rstyle.linePts || _p.rstyle.haystackPts; + var allInside = true; + for (var i = 0; i < pts.length; i++) { + if (!pointInBoundingBox(boxBb, pts[i])) { + allInside = false; + break; + } + } + if (allInside) { + box.push(edge); + } + } else if (rs.edgeType === 'haystack' || rs.edgeType === 'straight') { + box.push(edge); + } + } + } + return box; +}; + +var BRp$d = {}; +BRp$d.calculateArrowAngles = function (edge) { + var rs = edge._private.rscratch; + var isHaystack = rs.edgeType === 'haystack'; + var isBezier = rs.edgeType === 'bezier'; + var isMultibezier = rs.edgeType === 'multibezier'; + var isSegments = rs.edgeType === 'segments'; + var isCompound = rs.edgeType === 'compound'; + var isSelf = rs.edgeType === 'self'; + + // Displacement gives direction for arrowhead orientation + var dispX, dispY; + var startX, startY, endX, endY, midX, midY; + if (isHaystack) { + startX = rs.haystackPts[0]; + startY = rs.haystackPts[1]; + endX = rs.haystackPts[2]; + endY = rs.haystackPts[3]; + } else { + startX = rs.arrowStartX; + startY = rs.arrowStartY; + endX = rs.arrowEndX; + endY = rs.arrowEndY; + } + midX = rs.midX; + midY = rs.midY; + + // source + // + + if (isSegments) { + dispX = startX - rs.segpts[0]; + dispY = startY - rs.segpts[1]; + } else if (isMultibezier || isCompound || isSelf || isBezier) { + var pts = rs.allpts; + var bX = qbezierAt(pts[0], pts[2], pts[4], 0.1); + var bY = qbezierAt(pts[1], pts[3], pts[5], 0.1); + dispX = startX - bX; + dispY = startY - bY; + } else { + dispX = startX - midX; + dispY = startY - midY; + } + rs.srcArrowAngle = getAngleFromDisp(dispX, dispY); + + // mid target + // + + var midX = rs.midX; + var midY = rs.midY; + if (isHaystack) { + midX = (startX + endX) / 2; + midY = (startY + endY) / 2; + } + dispX = endX - startX; + dispY = endY - startY; + if (isSegments) { + var pts = rs.allpts; + if (pts.length / 2 % 2 === 0) { + var i2 = pts.length / 2; + var i1 = i2 - 2; + dispX = pts[i2] - pts[i1]; + dispY = pts[i2 + 1] - pts[i1 + 1]; + } else if (rs.isRound) { + dispX = rs.midVector[1]; + dispY = -rs.midVector[0]; + } else { + var i2 = pts.length / 2 - 1; + var i1 = i2 - 2; + dispX = pts[i2] - pts[i1]; + dispY = pts[i2 + 1] - pts[i1 + 1]; + } + } else if (isMultibezier || isCompound || isSelf) { + var pts = rs.allpts; + var cpts = rs.ctrlpts; + var bp0x, bp0y; + var bp1x, bp1y; + if (cpts.length / 2 % 2 === 0) { + var p0 = pts.length / 2 - 1; // startpt + var ic = p0 + 2; + var p1 = ic + 2; + bp0x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.0); + bp0y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.0); + bp1x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.0001); + bp1y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.0001); + } else { + var ic = pts.length / 2 - 1; // ctrpt + var p0 = ic - 2; // startpt + var p1 = ic + 2; // endpt + + bp0x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.4999); + bp0y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.4999); + bp1x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.5); + bp1y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.5); + } + dispX = bp1x - bp0x; + dispY = bp1y - bp0y; + } + rs.midtgtArrowAngle = getAngleFromDisp(dispX, dispY); + rs.midDispX = dispX; + rs.midDispY = dispY; + + // mid source + // + + dispX *= -1; + dispY *= -1; + if (isSegments) { + var pts = rs.allpts; + if (pts.length / 2 % 2 === 0) ; else if (!rs.isRound) { + var i2 = pts.length / 2 - 1; + var i3 = i2 + 2; + dispX = -(pts[i3] - pts[i2]); + dispY = -(pts[i3 + 1] - pts[i2 + 1]); + } + } + rs.midsrcArrowAngle = getAngleFromDisp(dispX, dispY); + + // target + // + + if (isSegments) { + dispX = endX - rs.segpts[rs.segpts.length - 2]; + dispY = endY - rs.segpts[rs.segpts.length - 1]; + } else if (isMultibezier || isCompound || isSelf || isBezier) { + var pts = rs.allpts; + var l = pts.length; + var bX = qbezierAt(pts[l - 6], pts[l - 4], pts[l - 2], 0.9); + var bY = qbezierAt(pts[l - 5], pts[l - 3], pts[l - 1], 0.9); + dispX = endX - bX; + dispY = endY - bY; + } else { + dispX = endX - midX; + dispY = endY - midY; + } + rs.tgtArrowAngle = getAngleFromDisp(dispX, dispY); +}; +BRp$d.getArrowWidth = BRp$d.getArrowHeight = function (edgeWidth, scale) { + var cache = this.arrowWidthCache = this.arrowWidthCache || {}; + var cachedVal = cache[edgeWidth + ', ' + scale]; + if (cachedVal) { + return cachedVal; + } + cachedVal = Math.max(Math.pow(edgeWidth * 13.37, 0.9), 29) * scale; + cache[edgeWidth + ', ' + scale] = cachedVal; + return cachedVal; +}; + +/** + * Explained by Blindman67 at https://stackoverflow.com/a/44856925/11028828 + */ + +// Declare reused variable to avoid reallocating variables every time the function is called +var x, + y, + v1 = {}, + v2 = {}, + sinA, + sinA90, + radDirection, + drawDirection, + angle, + halfAngle, + cRadius, + lenOut, + radius, + limit; +var startX, startY, stopX, stopY; +var lastPoint; + +// convert 2 points into vector form, polar form, and normalised +var asVec = function asVec(p, pp, v) { + v.x = pp.x - p.x; + v.y = pp.y - p.y; + v.len = Math.sqrt(v.x * v.x + v.y * v.y); + v.nx = v.x / v.len; + v.ny = v.y / v.len; + v.ang = Math.atan2(v.ny, v.nx); +}; +var invertVec = function invertVec(originalV, invertedV) { + invertedV.x = originalV.x * -1; + invertedV.y = originalV.y * -1; + invertedV.nx = originalV.nx * -1; + invertedV.ny = originalV.ny * -1; + invertedV.ang = originalV.ang > 0 ? -(Math.PI - originalV.ang) : Math.PI + originalV.ang; +}; +var calcCornerArc = function calcCornerArc(previousPoint, currentPoint, nextPoint, radiusMax, isArcRadius) { + //----------------------------------------- + // Part 1 + previousPoint !== lastPoint ? asVec(currentPoint, previousPoint, v1) : invertVec(v2, v1); // Avoid recalculating vec if it is the invert of the last one calculated + asVec(currentPoint, nextPoint, v2); + sinA = v1.nx * v2.ny - v1.ny * v2.nx; + sinA90 = v1.nx * v2.nx - v1.ny * -v2.ny; + angle = Math.asin(Math.max(-1, Math.min(1, sinA))); + if (Math.abs(angle) < 1e-6) { + x = currentPoint.x; + y = currentPoint.y; + cRadius = radius = 0; + return; + } + //----------------------------------------- + radDirection = 1; + drawDirection = false; + if (sinA90 < 0) { + if (angle < 0) { + angle = Math.PI + angle; + } else { + angle = Math.PI - angle; + radDirection = -1; + drawDirection = true; + } + } else { + if (angle > 0) { + radDirection = -1; + drawDirection = true; + } + } + if (currentPoint.radius !== undefined) { + radius = currentPoint.radius; + } else { + radius = radiusMax; + } + //----------------------------------------- + // Part 2 + halfAngle = angle / 2; + //----------------------------------------- + + limit = Math.min(v1.len / 2, v2.len / 2); + if (isArcRadius) { + //----------------------------------------- + // Part 3 + lenOut = Math.abs(Math.cos(halfAngle) * radius / Math.sin(halfAngle)); + + //----------------------------------------- + // Special part A + if (lenOut > limit) { + lenOut = limit; + cRadius = Math.abs(lenOut * Math.sin(halfAngle) / Math.cos(halfAngle)); + } else { + cRadius = radius; + } + } else { + lenOut = Math.min(limit, radius); + cRadius = Math.abs(lenOut * Math.sin(halfAngle) / Math.cos(halfAngle)); + } + //----------------------------------------- + + //----------------------------------------- + // Part 4 + stopX = currentPoint.x + v2.nx * lenOut; + stopY = currentPoint.y + v2.ny * lenOut; + //----------------------------------------- + // Part 5 + x = stopX - v2.ny * cRadius * radDirection; + y = stopY + v2.nx * cRadius * radDirection; + //----------------------------------------- + // Additional Part : calculate start point E + startX = currentPoint.x + v1.nx * lenOut; + startY = currentPoint.y + v1.ny * lenOut; + + // Save last point to avoid recalculating vector when not needed + lastPoint = currentPoint; +}; + +/** + * Draw corner provided by {@link getRoundCorner} + * + * @param ctx :CanvasRenderingContext2D + * @param roundCorner {{cx:number, cy:number, radius:number, endAngle: number, startAngle: number, counterClockwise: boolean}} + */ +function drawPreparedRoundCorner(ctx, roundCorner) { + if (roundCorner.radius === 0) ctx.lineTo(roundCorner.cx, roundCorner.cy);else ctx.arc(roundCorner.cx, roundCorner.cy, roundCorner.radius, roundCorner.startAngle, roundCorner.endAngle, roundCorner.counterClockwise); +} + +/** + * Get round corner from a point and its previous and next neighbours in a path + * + * @param previousPoint {{x: number, y:number, radius: number?}} + * @param currentPoint {{x: number, y:number, radius: number?}} + * @param nextPoint {{x: number, y:number, radius: number?}} + * @param radiusMax :number + * @param isArcRadius :boolean + * @return {{ + * cx:number, cy:number, radius:number, + * startX:number, startY:number, + * stopX:number, stopY: number, + * endAngle: number, startAngle: number, counterClockwise: boolean + * }} + */ +function getRoundCorner(previousPoint, currentPoint, nextPoint, radiusMax) { + var isArcRadius = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + if (radiusMax === 0 || currentPoint.radius === 0) return { + cx: currentPoint.x, + cy: currentPoint.y, + radius: 0, + startX: currentPoint.x, + startY: currentPoint.y, + stopX: currentPoint.x, + stopY: currentPoint.y, + startAngle: undefined, + endAngle: undefined, + counterClockwise: undefined + }; + calcCornerArc(previousPoint, currentPoint, nextPoint, radiusMax, isArcRadius); + return { + cx: x, + cy: y, + radius: cRadius, + startX: startX, + startY: startY, + stopX: stopX, + stopY: stopY, + startAngle: v1.ang + Math.PI / 2 * radDirection, + endAngle: v2.ang - Math.PI / 2 * radDirection, + counterClockwise: drawDirection + }; +} + +var BRp$c = {}; +BRp$c.findMidptPtsEtc = function (edge, pairInfo) { + var posPts = pairInfo.posPts, + intersectionPts = pairInfo.intersectionPts, + vectorNormInverse = pairInfo.vectorNormInverse; + var midptPts; + + // n.b. assumes all edges in bezier bundle have same endpoints specified + var srcManEndpt = edge.pstyle('source-endpoint'); + var tgtManEndpt = edge.pstyle('target-endpoint'); + var haveManualEndPts = srcManEndpt.units != null && tgtManEndpt.units != null; + var recalcVectorNormInverse = function recalcVectorNormInverse(x1, y1, x2, y2) { + var dy = y2 - y1; + var dx = x2 - x1; + var l = Math.sqrt(dx * dx + dy * dy); + return { + x: -dy / l, + y: dx / l + }; + }; + var edgeDistances = edge.pstyle('edge-distances').value; + switch (edgeDistances) { + case 'node-position': + midptPts = posPts; + break; + case 'intersection': + midptPts = intersectionPts; + break; + case 'endpoints': + { + if (haveManualEndPts) { + var _this$manualEndptToPx = this.manualEndptToPx(edge.source()[0], srcManEndpt), + _this$manualEndptToPx2 = _slicedToArray(_this$manualEndptToPx, 2), + x1 = _this$manualEndptToPx2[0], + y1 = _this$manualEndptToPx2[1]; + var _this$manualEndptToPx3 = this.manualEndptToPx(edge.target()[0], tgtManEndpt), + _this$manualEndptToPx4 = _slicedToArray(_this$manualEndptToPx3, 2), + x2 = _this$manualEndptToPx4[0], + y2 = _this$manualEndptToPx4[1]; + var endPts = { + x1: x1, + y1: y1, + x2: x2, + y2: y2 + }; + vectorNormInverse = recalcVectorNormInverse(x1, y1, x2, y2); + midptPts = endPts; + } else { + warn("Edge ".concat(edge.id(), " has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint. Falling back on edge-distances:intersection (default).")); + midptPts = intersectionPts; // back to default + } + + break; + } + } + return { + midptPts: midptPts, + vectorNormInverse: vectorNormInverse + }; +}; +BRp$c.findHaystackPoints = function (edges) { + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + var _p = edge._private; + var rs = _p.rscratch; + if (!rs.haystack) { + var angle = Math.random() * 2 * Math.PI; + rs.source = { + x: Math.cos(angle), + y: Math.sin(angle) + }; + angle = Math.random() * 2 * Math.PI; + rs.target = { + x: Math.cos(angle), + y: Math.sin(angle) + }; + } + var src = _p.source; + var tgt = _p.target; + var srcPos = src.position(); + var tgtPos = tgt.position(); + var srcW = src.width(); + var tgtW = tgt.width(); + var srcH = src.height(); + var tgtH = tgt.height(); + var radius = edge.pstyle('haystack-radius').value; + var halfRadius = radius / 2; // b/c have to half width/height + + rs.haystackPts = rs.allpts = [rs.source.x * srcW * halfRadius + srcPos.x, rs.source.y * srcH * halfRadius + srcPos.y, rs.target.x * tgtW * halfRadius + tgtPos.x, rs.target.y * tgtH * halfRadius + tgtPos.y]; + rs.midX = (rs.allpts[0] + rs.allpts[2]) / 2; + rs.midY = (rs.allpts[1] + rs.allpts[3]) / 2; + + // always override as haystack in case set to different type previously + rs.edgeType = 'haystack'; + rs.haystack = true; + this.storeEdgeProjections(edge); + this.calculateArrowAngles(edge); + this.recalculateEdgeLabelProjections(edge); + this.calculateLabelAngles(edge); + } +}; +BRp$c.findSegmentsPoints = function (edge, pairInfo) { + // Segments (multiple straight lines) + + var rs = edge._private.rscratch; + var segmentWs = edge.pstyle('segment-weights'); + var segmentDs = edge.pstyle('segment-distances'); + var segmentRs = edge.pstyle('segment-radii'); + var segmentTs = edge.pstyle('radius-type'); + var segmentsN = Math.min(segmentWs.pfValue.length, segmentDs.pfValue.length); + var lastRadius = segmentRs.pfValue[segmentRs.pfValue.length - 1]; + var lastRadiusType = segmentTs.pfValue[segmentTs.pfValue.length - 1]; + rs.edgeType = 'segments'; + rs.segpts = []; + rs.radii = []; + rs.isArcRadius = []; + for (var s = 0; s < segmentsN; s++) { + var w = segmentWs.pfValue[s]; + var d = segmentDs.pfValue[s]; + var w1 = 1 - w; + var w2 = w; + var _this$findMidptPtsEtc = this.findMidptPtsEtc(edge, pairInfo), + midptPts = _this$findMidptPtsEtc.midptPts, + vectorNormInverse = _this$findMidptPtsEtc.vectorNormInverse; + var adjustedMidpt = { + x: midptPts.x1 * w1 + midptPts.x2 * w2, + y: midptPts.y1 * w1 + midptPts.y2 * w2 + }; + rs.segpts.push(adjustedMidpt.x + vectorNormInverse.x * d, adjustedMidpt.y + vectorNormInverse.y * d); + rs.radii.push(segmentRs.pfValue[s] !== undefined ? segmentRs.pfValue[s] : lastRadius); + rs.isArcRadius.push((segmentTs.pfValue[s] !== undefined ? segmentTs.pfValue[s] : lastRadiusType) === 'arc-radius'); + } +}; +BRp$c.findLoopPoints = function (edge, pairInfo, i, edgeIsUnbundled) { + // Self-edge + + var rs = edge._private.rscratch; + var dirCounts = pairInfo.dirCounts, + srcPos = pairInfo.srcPos; + var ctrlptDists = edge.pstyle('control-point-distances'); + var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined; + var loopDir = edge.pstyle('loop-direction').pfValue; + var loopSwp = edge.pstyle('loop-sweep').pfValue; + var stepSize = edge.pstyle('control-point-step-size').pfValue; + rs.edgeType = 'self'; + var j = i; + var loopDist = stepSize; + if (edgeIsUnbundled) { + j = 0; + loopDist = ctrlptDist; + } + var loopAngle = loopDir - Math.PI / 2; + var outAngle = loopAngle - loopSwp / 2; + var inAngle = loopAngle + loopSwp / 2; + + // increase by step size for overlapping loops, keyed on direction and sweep values + var dc = String(loopDir + '_' + loopSwp); + j = dirCounts[dc] === undefined ? dirCounts[dc] = 0 : ++dirCounts[dc]; + rs.ctrlpts = [srcPos.x + Math.cos(outAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.y + Math.sin(outAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.x + Math.cos(inAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.y + Math.sin(inAngle) * 1.4 * loopDist * (j / 3 + 1)]; +}; +BRp$c.findCompoundLoopPoints = function (edge, pairInfo, i, edgeIsUnbundled) { + // Compound edge + + var rs = edge._private.rscratch; + rs.edgeType = 'compound'; + var srcPos = pairInfo.srcPos, + tgtPos = pairInfo.tgtPos, + srcW = pairInfo.srcW, + srcH = pairInfo.srcH, + tgtW = pairInfo.tgtW, + tgtH = pairInfo.tgtH; + var stepSize = edge.pstyle('control-point-step-size').pfValue; + var ctrlptDists = edge.pstyle('control-point-distances'); + var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined; + var j = i; + var loopDist = stepSize; + if (edgeIsUnbundled) { + j = 0; + loopDist = ctrlptDist; + } + var loopW = 50; + var loopaPos = { + x: srcPos.x - srcW / 2, + y: srcPos.y - srcH / 2 + }; + var loopbPos = { + x: tgtPos.x - tgtW / 2, + y: tgtPos.y - tgtH / 2 + }; + var loopPos = { + x: Math.min(loopaPos.x, loopbPos.x), + y: Math.min(loopaPos.y, loopbPos.y) + }; + + // avoids cases with impossible beziers + var minCompoundStretch = 0.5; + var compoundStretchA = Math.max(minCompoundStretch, Math.log(srcW * 0.01)); + var compoundStretchB = Math.max(minCompoundStretch, Math.log(tgtW * 0.01)); + rs.ctrlpts = [loopPos.x, loopPos.y - (1 + Math.pow(loopW, 1.12) / 100) * loopDist * (j / 3 + 1) * compoundStretchA, loopPos.x - (1 + Math.pow(loopW, 1.12) / 100) * loopDist * (j / 3 + 1) * compoundStretchB, loopPos.y]; +}; +BRp$c.findStraightEdgePoints = function (edge) { + // Straight edge within bundle + + edge._private.rscratch.edgeType = 'straight'; +}; +BRp$c.findBezierPoints = function (edge, pairInfo, i, edgeIsUnbundled, edgeIsSwapped) { + var rs = edge._private.rscratch; + var stepSize = edge.pstyle('control-point-step-size').pfValue; + var ctrlptDists = edge.pstyle('control-point-distances'); + var ctrlptWs = edge.pstyle('control-point-weights'); + var bezierN = ctrlptDists && ctrlptWs ? Math.min(ctrlptDists.value.length, ctrlptWs.value.length) : 1; + var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined; + var ctrlptWeight = ctrlptWs.value[0]; + + // (Multi)bezier + + var multi = edgeIsUnbundled; + rs.edgeType = multi ? 'multibezier' : 'bezier'; + rs.ctrlpts = []; + for (var b = 0; b < bezierN; b++) { + var normctrlptDist = (0.5 - pairInfo.eles.length / 2 + i) * stepSize * (edgeIsSwapped ? -1 : 1); + var manctrlptDist = void 0; + var sign = signum(normctrlptDist); + if (multi) { + ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[b] : stepSize; // fall back on step size + ctrlptWeight = ctrlptWs.value[b]; + } + if (edgeIsUnbundled) { + // multi or single unbundled + manctrlptDist = ctrlptDist; + } else { + manctrlptDist = ctrlptDist !== undefined ? sign * ctrlptDist : undefined; + } + var distanceFromMidpoint = manctrlptDist !== undefined ? manctrlptDist : normctrlptDist; + var w1 = 1 - ctrlptWeight; + var w2 = ctrlptWeight; + var _this$findMidptPtsEtc2 = this.findMidptPtsEtc(edge, pairInfo), + midptPts = _this$findMidptPtsEtc2.midptPts, + vectorNormInverse = _this$findMidptPtsEtc2.vectorNormInverse; + var adjustedMidpt = { + x: midptPts.x1 * w1 + midptPts.x2 * w2, + y: midptPts.y1 * w1 + midptPts.y2 * w2 + }; + rs.ctrlpts.push(adjustedMidpt.x + vectorNormInverse.x * distanceFromMidpoint, adjustedMidpt.y + vectorNormInverse.y * distanceFromMidpoint); + } +}; +BRp$c.findTaxiPoints = function (edge, pairInfo) { + // Taxicab geometry with two turns maximum + + var rs = edge._private.rscratch; + rs.edgeType = 'segments'; + var VERTICAL = 'vertical'; + var HORIZONTAL = 'horizontal'; + var LEFTWARD = 'leftward'; + var RIGHTWARD = 'rightward'; + var DOWNWARD = 'downward'; + var UPWARD = 'upward'; + var AUTO = 'auto'; + var posPts = pairInfo.posPts, + srcW = pairInfo.srcW, + srcH = pairInfo.srcH, + tgtW = pairInfo.tgtW, + tgtH = pairInfo.tgtH; + var edgeDistances = edge.pstyle('edge-distances').value; + var dIncludesNodeBody = edgeDistances !== 'node-position'; + var taxiDir = edge.pstyle('taxi-direction').value; + var rawTaxiDir = taxiDir; // unprocessed value + var taxiTurn = edge.pstyle('taxi-turn'); + var turnIsPercent = taxiTurn.units === '%'; + var taxiTurnPfVal = taxiTurn.pfValue; + var turnIsNegative = taxiTurnPfVal < 0; // i.e. from target side + var minD = edge.pstyle('taxi-turn-min-distance').pfValue; + var dw = dIncludesNodeBody ? (srcW + tgtW) / 2 : 0; + var dh = dIncludesNodeBody ? (srcH + tgtH) / 2 : 0; + var pdx = posPts.x2 - posPts.x1; + var pdy = posPts.y2 - posPts.y1; + + // take away the effective w/h from the magnitude of the delta value + var subDWH = function subDWH(dxy, dwh) { + if (dxy > 0) { + return Math.max(dxy - dwh, 0); + } else { + return Math.min(dxy + dwh, 0); + } + }; + var dx = subDWH(pdx, dw); + var dy = subDWH(pdy, dh); + var isExplicitDir = false; + if (rawTaxiDir === AUTO) { + taxiDir = Math.abs(dx) > Math.abs(dy) ? HORIZONTAL : VERTICAL; + } else if (rawTaxiDir === UPWARD || rawTaxiDir === DOWNWARD) { + taxiDir = VERTICAL; + isExplicitDir = true; + } else if (rawTaxiDir === LEFTWARD || rawTaxiDir === RIGHTWARD) { + taxiDir = HORIZONTAL; + isExplicitDir = true; + } + var isVert = taxiDir === VERTICAL; + var l = isVert ? dy : dx; + var pl = isVert ? pdy : pdx; + var sgnL = signum(pl); + var forcedDir = false; + if (!(isExplicitDir && (turnIsPercent || turnIsNegative)) // forcing in this case would cause weird growing in the opposite direction + && (rawTaxiDir === DOWNWARD && pl < 0 || rawTaxiDir === UPWARD && pl > 0 || rawTaxiDir === LEFTWARD && pl > 0 || rawTaxiDir === RIGHTWARD && pl < 0)) { + sgnL *= -1; + l = sgnL * Math.abs(l); + forcedDir = true; + } + var d; + if (turnIsPercent) { + var p = taxiTurnPfVal < 0 ? 1 + taxiTurnPfVal : taxiTurnPfVal; + d = p * l; + } else { + var k = taxiTurnPfVal < 0 ? l : 0; + d = k + taxiTurnPfVal * sgnL; + } + var getIsTooClose = function getIsTooClose(d) { + return Math.abs(d) < minD || Math.abs(d) >= Math.abs(l); + }; + var isTooCloseSrc = getIsTooClose(d); + var isTooCloseTgt = getIsTooClose(Math.abs(l) - Math.abs(d)); + var isTooClose = isTooCloseSrc || isTooCloseTgt; + if (isTooClose && !forcedDir) { + // non-ideal routing + if (isVert) { + // vertical fallbacks + var lShapeInsideSrc = Math.abs(pl) <= srcH / 2; + var lShapeInsideTgt = Math.abs(pdx) <= tgtW / 2; + if (lShapeInsideSrc) { + // horizontal Z-shape (direction not respected) + var x = (posPts.x1 + posPts.x2) / 2; + var y1 = posPts.y1, + y2 = posPts.y2; + rs.segpts = [x, y1, x, y2]; + } else if (lShapeInsideTgt) { + // vertical Z-shape (distance not respected) + var y = (posPts.y1 + posPts.y2) / 2; + var x1 = posPts.x1, + x2 = posPts.x2; + rs.segpts = [x1, y, x2, y]; + } else { + // L-shape fallback (turn distance not respected, but works well with tree siblings) + rs.segpts = [posPts.x1, posPts.y2]; + } + } else { + // horizontal fallbacks + var _lShapeInsideSrc = Math.abs(pl) <= srcW / 2; + var _lShapeInsideTgt = Math.abs(pdy) <= tgtH / 2; + if (_lShapeInsideSrc) { + // vertical Z-shape (direction not respected) + var _y = (posPts.y1 + posPts.y2) / 2; + var _x = posPts.x1, + _x2 = posPts.x2; + rs.segpts = [_x, _y, _x2, _y]; + } else if (_lShapeInsideTgt) { + // horizontal Z-shape (turn distance not respected) + var _x3 = (posPts.x1 + posPts.x2) / 2; + var _y2 = posPts.y1, + _y3 = posPts.y2; + rs.segpts = [_x3, _y2, _x3, _y3]; + } else { + // L-shape (turn distance not respected, but works well for tree siblings) + rs.segpts = [posPts.x2, posPts.y1]; + } + } + } else { + // ideal routing + if (isVert) { + var _y4 = posPts.y1 + d + (dIncludesNodeBody ? srcH / 2 * sgnL : 0); + var _x4 = posPts.x1, + _x5 = posPts.x2; + rs.segpts = [_x4, _y4, _x5, _y4]; + } else { + // horizontal + var _x6 = posPts.x1 + d + (dIncludesNodeBody ? srcW / 2 * sgnL : 0); + var _y5 = posPts.y1, + _y6 = posPts.y2; + rs.segpts = [_x6, _y5, _x6, _y6]; + } + } + if (rs.isRound) { + var radius = edge.pstyle('taxi-radius').value; + var isArcRadius = edge.pstyle('radius-type').value[0] === 'arc-radius'; + rs.radii = new Array(rs.segpts.length / 2).fill(radius); + rs.isArcRadius = new Array(rs.segpts.length / 2).fill(isArcRadius); + } +}; +BRp$c.tryToCorrectInvalidPoints = function (edge, pairInfo) { + var rs = edge._private.rscratch; + + // can only correct beziers for now... + if (rs.edgeType === 'bezier') { + var srcPos = pairInfo.srcPos, + tgtPos = pairInfo.tgtPos, + srcW = pairInfo.srcW, + srcH = pairInfo.srcH, + tgtW = pairInfo.tgtW, + tgtH = pairInfo.tgtH, + srcShape = pairInfo.srcShape, + tgtShape = pairInfo.tgtShape, + srcCornerRadius = pairInfo.srcCornerRadius, + tgtCornerRadius = pairInfo.tgtCornerRadius, + srcRs = pairInfo.srcRs, + tgtRs = pairInfo.tgtRs; + var badStart = !number$1(rs.startX) || !number$1(rs.startY); + var badAStart = !number$1(rs.arrowStartX) || !number$1(rs.arrowStartY); + var badEnd = !number$1(rs.endX) || !number$1(rs.endY); + var badAEnd = !number$1(rs.arrowEndX) || !number$1(rs.arrowEndY); + var minCpADistFactor = 3; + var arrowW = this.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.arrowShapeWidth; + var minCpADist = minCpADistFactor * arrowW; + var startACpDist = dist({ + x: rs.ctrlpts[0], + y: rs.ctrlpts[1] + }, { + x: rs.startX, + y: rs.startY + }); + var closeStartACp = startACpDist < minCpADist; + var endACpDist = dist({ + x: rs.ctrlpts[0], + y: rs.ctrlpts[1] + }, { + x: rs.endX, + y: rs.endY + }); + var closeEndACp = endACpDist < minCpADist; + var overlapping = false; + if (badStart || badAStart || closeStartACp) { + overlapping = true; + + // project control point along line from src centre to outside the src shape + // (otherwise intersection will yield nothing) + var cpD = { + // delta + x: rs.ctrlpts[0] - srcPos.x, + y: rs.ctrlpts[1] - srcPos.y + }; + var cpL = Math.sqrt(cpD.x * cpD.x + cpD.y * cpD.y); // length of line + var cpM = { + // normalised delta + x: cpD.x / cpL, + y: cpD.y / cpL + }; + var radius = Math.max(srcW, srcH); + var cpProj = { + // *2 radius guarantees outside shape + x: rs.ctrlpts[0] + cpM.x * 2 * radius, + y: rs.ctrlpts[1] + cpM.y * 2 * radius + }; + var srcCtrlPtIntn = srcShape.intersectLine(srcPos.x, srcPos.y, srcW, srcH, cpProj.x, cpProj.y, 0, srcCornerRadius, srcRs); + if (closeStartACp) { + rs.ctrlpts[0] = rs.ctrlpts[0] + cpM.x * (minCpADist - startACpDist); + rs.ctrlpts[1] = rs.ctrlpts[1] + cpM.y * (minCpADist - startACpDist); + } else { + rs.ctrlpts[0] = srcCtrlPtIntn[0] + cpM.x * minCpADist; + rs.ctrlpts[1] = srcCtrlPtIntn[1] + cpM.y * minCpADist; + } + } + if (badEnd || badAEnd || closeEndACp) { + overlapping = true; + + // project control point along line from tgt centre to outside the tgt shape + // (otherwise intersection will yield nothing) + var _cpD = { + // delta + x: rs.ctrlpts[0] - tgtPos.x, + y: rs.ctrlpts[1] - tgtPos.y + }; + var _cpL = Math.sqrt(_cpD.x * _cpD.x + _cpD.y * _cpD.y); // length of line + var _cpM = { + // normalised delta + x: _cpD.x / _cpL, + y: _cpD.y / _cpL + }; + var _radius = Math.max(srcW, srcH); + var _cpProj = { + // *2 radius guarantees outside shape + x: rs.ctrlpts[0] + _cpM.x * 2 * _radius, + y: rs.ctrlpts[1] + _cpM.y * 2 * _radius + }; + var tgtCtrlPtIntn = tgtShape.intersectLine(tgtPos.x, tgtPos.y, tgtW, tgtH, _cpProj.x, _cpProj.y, 0, tgtCornerRadius, tgtRs); + if (closeEndACp) { + rs.ctrlpts[0] = rs.ctrlpts[0] + _cpM.x * (minCpADist - endACpDist); + rs.ctrlpts[1] = rs.ctrlpts[1] + _cpM.y * (minCpADist - endACpDist); + } else { + rs.ctrlpts[0] = tgtCtrlPtIntn[0] + _cpM.x * minCpADist; + rs.ctrlpts[1] = tgtCtrlPtIntn[1] + _cpM.y * minCpADist; + } + } + if (overlapping) { + // recalc endpts + this.findEndpoints(edge); + } + } +}; +BRp$c.storeAllpts = function (edge) { + var rs = edge._private.rscratch; + if (rs.edgeType === 'multibezier' || rs.edgeType === 'bezier' || rs.edgeType === 'self' || rs.edgeType === 'compound') { + rs.allpts = []; + rs.allpts.push(rs.startX, rs.startY); + for (var b = 0; b + 1 < rs.ctrlpts.length; b += 2) { + // ctrl pt itself + rs.allpts.push(rs.ctrlpts[b], rs.ctrlpts[b + 1]); + + // the midpt between ctrlpts as intermediate destination pts + if (b + 3 < rs.ctrlpts.length) { + rs.allpts.push((rs.ctrlpts[b] + rs.ctrlpts[b + 2]) / 2, (rs.ctrlpts[b + 1] + rs.ctrlpts[b + 3]) / 2); + } + } + rs.allpts.push(rs.endX, rs.endY); + var m, mt; + if (rs.ctrlpts.length / 2 % 2 === 0) { + m = rs.allpts.length / 2 - 1; + rs.midX = rs.allpts[m]; + rs.midY = rs.allpts[m + 1]; + } else { + m = rs.allpts.length / 2 - 3; + mt = 0.5; + rs.midX = qbezierAt(rs.allpts[m], rs.allpts[m + 2], rs.allpts[m + 4], mt); + rs.midY = qbezierAt(rs.allpts[m + 1], rs.allpts[m + 3], rs.allpts[m + 5], mt); + } + } else if (rs.edgeType === 'straight') { + // need to calc these after endpts + rs.allpts = [rs.startX, rs.startY, rs.endX, rs.endY]; + + // default midpt for labels etc + rs.midX = (rs.startX + rs.endX + rs.arrowStartX + rs.arrowEndX) / 4; + rs.midY = (rs.startY + rs.endY + rs.arrowStartY + rs.arrowEndY) / 4; + } else if (rs.edgeType === 'segments') { + rs.allpts = []; + rs.allpts.push(rs.startX, rs.startY); + rs.allpts.push.apply(rs.allpts, rs.segpts); + rs.allpts.push(rs.endX, rs.endY); + if (rs.isRound) { + rs.roundCorners = []; + for (var i = 2; i + 3 < rs.allpts.length; i += 2) { + var radius = rs.radii[i / 2 - 1]; + var isArcRadius = rs.isArcRadius[i / 2 - 1]; + rs.roundCorners.push(getRoundCorner({ + x: rs.allpts[i - 2], + y: rs.allpts[i - 1] + }, { + x: rs.allpts[i], + y: rs.allpts[i + 1], + radius: radius + }, { + x: rs.allpts[i + 2], + y: rs.allpts[i + 3] + }, radius, isArcRadius)); + } + } + if (rs.segpts.length % 4 === 0) { + var i2 = rs.segpts.length / 2; + var i1 = i2 - 2; + rs.midX = (rs.segpts[i1] + rs.segpts[i2]) / 2; + rs.midY = (rs.segpts[i1 + 1] + rs.segpts[i2 + 1]) / 2; + } else { + var _i = rs.segpts.length / 2 - 1; + if (!rs.isRound) { + rs.midX = rs.segpts[_i]; + rs.midY = rs.segpts[_i + 1]; + } else { + var point = { + x: rs.segpts[_i], + y: rs.segpts[_i + 1] + }; + var corner = rs.roundCorners[_i / 2]; + var v = [point.x - corner.cx, point.y - corner.cy]; + var factor = corner.radius / Math.sqrt(Math.pow(v[0], 2) + Math.pow(v[1], 2)); + v = v.map(function (c) { + return c * factor; + }); + rs.midX = corner.cx + v[0]; + rs.midY = corner.cy + v[1]; + rs.midVector = v; + } + } + } +}; +BRp$c.checkForInvalidEdgeWarning = function (edge) { + var rs = edge[0]._private.rscratch; + if (rs.nodesOverlap || number$1(rs.startX) && number$1(rs.startY) && number$1(rs.endX) && number$1(rs.endY)) { + rs.loggedErr = false; + } else { + if (!rs.loggedErr) { + rs.loggedErr = true; + warn('Edge `' + edge.id() + '` has invalid endpoints and so it is impossible to draw. Adjust your edge style (e.g. control points) accordingly or use an alternative edge type. This is expected behaviour when the source node and the target node overlap.'); + } + } +}; +BRp$c.findEdgeControlPoints = function (edges) { + var _this = this; + if (!edges || edges.length === 0) { + return; + } + var r = this; + var cy = r.cy; + var hasCompounds = cy.hasCompoundNodes(); + var hashTable = { + map: new Map$2(), + get: function get(pairId) { + var map2 = this.map.get(pairId[0]); + if (map2 != null) { + return map2.get(pairId[1]); + } else { + return null; + } + }, + set: function set(pairId, val) { + var map2 = this.map.get(pairId[0]); + if (map2 == null) { + map2 = new Map$2(); + this.map.set(pairId[0], map2); + } + map2.set(pairId[1], val); + } + }; + var pairIds = []; + var haystackEdges = []; + + // create a table of edge (src, tgt) => list of edges between them + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + var _p = edge._private; + var curveStyle = edge.pstyle('curve-style').value; + + // ignore edges who are not to be displayed + // they shouldn't take up space + if (edge.removed() || !edge.takesUpSpace()) { + continue; + } + if (curveStyle === 'haystack') { + haystackEdges.push(edge); + continue; + } + var edgeIsUnbundled = curveStyle === 'unbundled-bezier' || curveStyle.endsWith('segments') || curveStyle === 'straight' || curveStyle === 'straight-triangle' || curveStyle.endsWith('taxi'); + var edgeIsBezier = curveStyle === 'unbundled-bezier' || curveStyle === 'bezier'; + var src = _p.source; + var tgt = _p.target; + var srcIndex = src.poolIndex(); + var tgtIndex = tgt.poolIndex(); + var pairId = [srcIndex, tgtIndex].sort(); + var tableEntry = hashTable.get(pairId); + if (tableEntry == null) { + tableEntry = { + eles: [] + }; + hashTable.set(pairId, tableEntry); + pairIds.push(pairId); + } + tableEntry.eles.push(edge); + if (edgeIsUnbundled) { + tableEntry.hasUnbundled = true; + } + if (edgeIsBezier) { + tableEntry.hasBezier = true; + } + } + + // for each pair (src, tgt), create the ctrl pts + // Nested for loop is OK; total number of iterations for both loops = edgeCount + var _loop = function _loop(p) { + var pairId = pairIds[p]; + var pairInfo = hashTable.get(pairId); + var swappedpairInfo = void 0; + if (!pairInfo.hasUnbundled) { + var pllEdges = pairInfo.eles[0].parallelEdges().filter(function (e) { + return e.isBundledBezier(); + }); + clearArray(pairInfo.eles); + pllEdges.forEach(function (edge) { + return pairInfo.eles.push(edge); + }); + + // for each pair id, the edges should be sorted by index + pairInfo.eles.sort(function (edge1, edge2) { + return edge1.poolIndex() - edge2.poolIndex(); + }); + } + var firstEdge = pairInfo.eles[0]; + var src = firstEdge.source(); + var tgt = firstEdge.target(); + + // make sure src/tgt distinction is consistent w.r.t. pairId + if (src.poolIndex() > tgt.poolIndex()) { + var temp = src; + src = tgt; + tgt = temp; + } + var srcPos = pairInfo.srcPos = src.position(); + var tgtPos = pairInfo.tgtPos = tgt.position(); + var srcW = pairInfo.srcW = src.outerWidth(); + var srcH = pairInfo.srcH = src.outerHeight(); + var tgtW = pairInfo.tgtW = tgt.outerWidth(); + var tgtH = pairInfo.tgtH = tgt.outerHeight(); + var srcShape = pairInfo.srcShape = r.nodeShapes[_this.getNodeShape(src)]; + var tgtShape = pairInfo.tgtShape = r.nodeShapes[_this.getNodeShape(tgt)]; + var srcCornerRadius = pairInfo.srcCornerRadius = src.pstyle('corner-radius').value === 'auto' ? 'auto' : src.pstyle('corner-radius').pfValue; + var tgtCornerRadius = pairInfo.tgtCornerRadius = tgt.pstyle('corner-radius').value === 'auto' ? 'auto' : tgt.pstyle('corner-radius').pfValue; + var tgtRs = pairInfo.tgtRs = tgt._private.rscratch; + var srcRs = pairInfo.srcRs = src._private.rscratch; + pairInfo.dirCounts = { + 'north': 0, + 'west': 0, + 'south': 0, + 'east': 0, + 'northwest': 0, + 'southwest': 0, + 'northeast': 0, + 'southeast': 0 + }; + for (var _i2 = 0; _i2 < pairInfo.eles.length; _i2++) { + var _edge = pairInfo.eles[_i2]; + var rs = _edge[0]._private.rscratch; + var _curveStyle = _edge.pstyle('curve-style').value; + var _edgeIsUnbundled = _curveStyle === 'unbundled-bezier' || _curveStyle.endsWith('segments') || _curveStyle.endsWith('taxi'); + + // whether the normalised pair order is the reverse of the edge's src-tgt order + var edgeIsSwapped = !src.same(_edge.source()); + if (!pairInfo.calculatedIntersection && src !== tgt && (pairInfo.hasBezier || pairInfo.hasUnbundled)) { + pairInfo.calculatedIntersection = true; + + // pt outside src shape to calc distance/displacement from src to tgt + var srcOutside = srcShape.intersectLine(srcPos.x, srcPos.y, srcW, srcH, tgtPos.x, tgtPos.y, 0, srcCornerRadius, srcRs); + var srcIntn = pairInfo.srcIntn = srcOutside; + + // pt outside tgt shape to calc distance/displacement from src to tgt + var tgtOutside = tgtShape.intersectLine(tgtPos.x, tgtPos.y, tgtW, tgtH, srcPos.x, srcPos.y, 0, tgtCornerRadius, tgtRs); + var tgtIntn = pairInfo.tgtIntn = tgtOutside; + var intersectionPts = pairInfo.intersectionPts = { + x1: srcOutside[0], + x2: tgtOutside[0], + y1: srcOutside[1], + y2: tgtOutside[1] + }; + var posPts = pairInfo.posPts = { + x1: srcPos.x, + x2: tgtPos.x, + y1: srcPos.y, + y2: tgtPos.y + }; + var dy = tgtOutside[1] - srcOutside[1]; + var dx = tgtOutside[0] - srcOutside[0]; + var l = Math.sqrt(dx * dx + dy * dy); + var vector = pairInfo.vector = { + x: dx, + y: dy + }; + var vectorNorm = pairInfo.vectorNorm = { + x: vector.x / l, + y: vector.y / l + }; + var vectorNormInverse = { + x: -vectorNorm.y, + y: vectorNorm.x + }; + + // if node shapes overlap, then no ctrl pts to draw + pairInfo.nodesOverlap = !number$1(l) || tgtShape.checkPoint(srcOutside[0], srcOutside[1], 0, tgtW, tgtH, tgtPos.x, tgtPos.y, tgtCornerRadius, tgtRs) || srcShape.checkPoint(tgtOutside[0], tgtOutside[1], 0, srcW, srcH, srcPos.x, srcPos.y, srcCornerRadius, srcRs); + pairInfo.vectorNormInverse = vectorNormInverse; + swappedpairInfo = { + nodesOverlap: pairInfo.nodesOverlap, + dirCounts: pairInfo.dirCounts, + calculatedIntersection: true, + hasBezier: pairInfo.hasBezier, + hasUnbundled: pairInfo.hasUnbundled, + eles: pairInfo.eles, + srcPos: tgtPos, + tgtPos: srcPos, + srcW: tgtW, + srcH: tgtH, + tgtW: srcW, + tgtH: srcH, + srcIntn: tgtIntn, + tgtIntn: srcIntn, + srcShape: tgtShape, + tgtShape: srcShape, + posPts: { + x1: posPts.x2, + y1: posPts.y2, + x2: posPts.x1, + y2: posPts.y1 + }, + intersectionPts: { + x1: intersectionPts.x2, + y1: intersectionPts.y2, + x2: intersectionPts.x1, + y2: intersectionPts.y1 + }, + vector: { + x: -vector.x, + y: -vector.y + }, + vectorNorm: { + x: -vectorNorm.x, + y: -vectorNorm.y + }, + vectorNormInverse: { + x: -vectorNormInverse.x, + y: -vectorNormInverse.y + } + }; + } + var passedPairInfo = edgeIsSwapped ? swappedpairInfo : pairInfo; + rs.nodesOverlap = passedPairInfo.nodesOverlap; + rs.srcIntn = passedPairInfo.srcIntn; + rs.tgtIntn = passedPairInfo.tgtIntn; + rs.isRound = _curveStyle.startsWith('round'); + if (hasCompounds && (src.isParent() || src.isChild() || tgt.isParent() || tgt.isChild()) && (src.parents().anySame(tgt) || tgt.parents().anySame(src) || src.same(tgt) && src.isParent())) { + _this.findCompoundLoopPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled); + } else if (src === tgt) { + _this.findLoopPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled); + } else if (_curveStyle.endsWith('segments')) { + _this.findSegmentsPoints(_edge, passedPairInfo); + } else if (_curveStyle.endsWith('taxi')) { + _this.findTaxiPoints(_edge, passedPairInfo); + } else if (_curveStyle === 'straight' || !_edgeIsUnbundled && pairInfo.eles.length % 2 === 1 && _i2 === Math.floor(pairInfo.eles.length / 2)) { + _this.findStraightEdgePoints(_edge); + } else { + _this.findBezierPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled, edgeIsSwapped); + } + _this.findEndpoints(_edge); + _this.tryToCorrectInvalidPoints(_edge, passedPairInfo); + _this.checkForInvalidEdgeWarning(_edge); + _this.storeAllpts(_edge); + _this.storeEdgeProjections(_edge); + _this.calculateArrowAngles(_edge); + _this.recalculateEdgeLabelProjections(_edge); + _this.calculateLabelAngles(_edge); + } // for pair edges + }; + for (var p = 0; p < pairIds.length; p++) { + _loop(p); + } // for pair ids + + // haystacks avoid the expense of pairInfo stuff (intersections etc.) + this.findHaystackPoints(haystackEdges); +}; +function getPts(pts) { + var retPts = []; + if (pts == null) { + return; + } + for (var i = 0; i < pts.length; i += 2) { + var x = pts[i]; + var y = pts[i + 1]; + retPts.push({ + x: x, + y: y + }); + } + return retPts; +} +BRp$c.getSegmentPoints = function (edge) { + var rs = edge[0]._private.rscratch; + var type = rs.edgeType; + if (type === 'segments') { + this.recalculateRenderedStyle(edge); + return getPts(rs.segpts); + } +}; +BRp$c.getControlPoints = function (edge) { + var rs = edge[0]._private.rscratch; + var type = rs.edgeType; + if (type === 'bezier' || type === 'multibezier' || type === 'self' || type === 'compound') { + this.recalculateRenderedStyle(edge); + return getPts(rs.ctrlpts); + } +}; +BRp$c.getEdgeMidpoint = function (edge) { + var rs = edge[0]._private.rscratch; + this.recalculateRenderedStyle(edge); + return { + x: rs.midX, + y: rs.midY + }; +}; + +var BRp$b = {}; +BRp$b.manualEndptToPx = function (node, prop) { + var r = this; + var npos = node.position(); + var w = node.outerWidth(); + var h = node.outerHeight(); + var rs = node._private.rscratch; + if (prop.value.length === 2) { + var p = [prop.pfValue[0], prop.pfValue[1]]; + if (prop.units[0] === '%') { + p[0] = p[0] * w; + } + if (prop.units[1] === '%') { + p[1] = p[1] * h; + } + p[0] += npos.x; + p[1] += npos.y; + return p; + } else { + var angle = prop.pfValue[0]; + angle = -Math.PI / 2 + angle; // start at 12 o'clock + + var l = 2 * Math.max(w, h); + var _p = [npos.x + Math.cos(angle) * l, npos.y + Math.sin(angle) * l]; + return r.nodeShapes[this.getNodeShape(node)].intersectLine(npos.x, npos.y, w, h, _p[0], _p[1], 0, node.pstyle('corner-radius').value === 'auto' ? 'auto' : node.pstyle('corner-radius').pfValue, rs); + } +}; +BRp$b.findEndpoints = function (edge) { + var r = this; + var intersect; + var source = edge.source()[0]; + var target = edge.target()[0]; + var srcPos = source.position(); + var tgtPos = target.position(); + var tgtArShape = edge.pstyle('target-arrow-shape').value; + var srcArShape = edge.pstyle('source-arrow-shape').value; + var tgtDist = edge.pstyle('target-distance-from-node').pfValue; + var srcDist = edge.pstyle('source-distance-from-node').pfValue; + var srcRs = source._private.rscratch; + var tgtRs = target._private.rscratch; + var curveStyle = edge.pstyle('curve-style').value; + var rs = edge._private.rscratch; + var et = rs.edgeType; + var taxi = curveStyle === 'taxi'; + var self = et === 'self' || et === 'compound'; + var bezier = et === 'bezier' || et === 'multibezier' || self; + var multi = et !== 'bezier'; + var lines = et === 'straight' || et === 'segments'; + var segments = et === 'segments'; + var hasEndpts = bezier || multi || lines; + var overrideEndpts = self || taxi; + var srcManEndpt = edge.pstyle('source-endpoint'); + var srcManEndptVal = overrideEndpts ? 'outside-to-node' : srcManEndpt.value; + var srcCornerRadius = source.pstyle('corner-radius').value === 'auto' ? 'auto' : source.pstyle('corner-radius').pfValue; + var tgtManEndpt = edge.pstyle('target-endpoint'); + var tgtManEndptVal = overrideEndpts ? 'outside-to-node' : tgtManEndpt.value; + var tgtCornerRadius = target.pstyle('corner-radius').value === 'auto' ? 'auto' : target.pstyle('corner-radius').pfValue; + rs.srcManEndpt = srcManEndpt; + rs.tgtManEndpt = tgtManEndpt; + var p1; // last known point of edge on target side + var p2; // last known point of edge on source side + + var p1_i; // point to intersect with target shape + var p2_i; // point to intersect with source shape + + if (bezier) { + var cpStart = [rs.ctrlpts[0], rs.ctrlpts[1]]; + var cpEnd = multi ? [rs.ctrlpts[rs.ctrlpts.length - 2], rs.ctrlpts[rs.ctrlpts.length - 1]] : cpStart; + p1 = cpEnd; + p2 = cpStart; + } else if (lines) { + var srcArrowFromPt = !segments ? [tgtPos.x, tgtPos.y] : rs.segpts.slice(0, 2); + var tgtArrowFromPt = !segments ? [srcPos.x, srcPos.y] : rs.segpts.slice(rs.segpts.length - 2); + p1 = tgtArrowFromPt; + p2 = srcArrowFromPt; + } + if (tgtManEndptVal === 'inside-to-node') { + intersect = [tgtPos.x, tgtPos.y]; + } else if (tgtManEndpt.units) { + intersect = this.manualEndptToPx(target, tgtManEndpt); + } else if (tgtManEndptVal === 'outside-to-line') { + intersect = rs.tgtIntn; // use cached value from ctrlpt calc + } else { + if (tgtManEndptVal === 'outside-to-node' || tgtManEndptVal === 'outside-to-node-or-label') { + p1_i = p1; + } else if (tgtManEndptVal === 'outside-to-line' || tgtManEndptVal === 'outside-to-line-or-label') { + p1_i = [srcPos.x, srcPos.y]; + } + intersect = r.nodeShapes[this.getNodeShape(target)].intersectLine(tgtPos.x, tgtPos.y, target.outerWidth(), target.outerHeight(), p1_i[0], p1_i[1], 0, tgtCornerRadius, tgtRs); + if (tgtManEndptVal === 'outside-to-node-or-label' || tgtManEndptVal === 'outside-to-line-or-label') { + var trs = target._private.rscratch; + var lw = trs.labelWidth; + var lh = trs.labelHeight; + var lx = trs.labelX; + var ly = trs.labelY; + var lw2 = lw / 2; + var lh2 = lh / 2; + var va = target.pstyle('text-valign').value; + if (va === 'top') { + ly -= lh2; + } else if (va === 'bottom') { + ly += lh2; + } + var ha = target.pstyle('text-halign').value; + if (ha === 'left') { + lx -= lw2; + } else if (ha === 'right') { + lx += lw2; + } + var labelIntersect = polygonIntersectLine(p1_i[0], p1_i[1], [lx - lw2, ly - lh2, lx + lw2, ly - lh2, lx + lw2, ly + lh2, lx - lw2, ly + lh2], tgtPos.x, tgtPos.y); + if (labelIntersect.length > 0) { + var refPt = srcPos; + var intSqdist = sqdist(refPt, array2point(intersect)); + var labIntSqdist = sqdist(refPt, array2point(labelIntersect)); + var minSqDist = intSqdist; + if (labIntSqdist < intSqdist) { + intersect = labelIntersect; + minSqDist = labIntSqdist; + } + if (labelIntersect.length > 2) { + var labInt2SqDist = sqdist(refPt, { + x: labelIntersect[2], + y: labelIntersect[3] + }); + if (labInt2SqDist < minSqDist) { + intersect = [labelIntersect[2], labelIntersect[3]]; + } + } + } + } + } + var arrowEnd = shortenIntersection(intersect, p1, r.arrowShapes[tgtArShape].spacing(edge) + tgtDist); + var edgeEnd = shortenIntersection(intersect, p1, r.arrowShapes[tgtArShape].gap(edge) + tgtDist); + rs.endX = edgeEnd[0]; + rs.endY = edgeEnd[1]; + rs.arrowEndX = arrowEnd[0]; + rs.arrowEndY = arrowEnd[1]; + if (srcManEndptVal === 'inside-to-node') { + intersect = [srcPos.x, srcPos.y]; + } else if (srcManEndpt.units) { + intersect = this.manualEndptToPx(source, srcManEndpt); + } else if (srcManEndptVal === 'outside-to-line') { + intersect = rs.srcIntn; // use cached value from ctrlpt calc + } else { + if (srcManEndptVal === 'outside-to-node' || srcManEndptVal === 'outside-to-node-or-label') { + p2_i = p2; + } else if (srcManEndptVal === 'outside-to-line' || srcManEndptVal === 'outside-to-line-or-label') { + p2_i = [tgtPos.x, tgtPos.y]; + } + intersect = r.nodeShapes[this.getNodeShape(source)].intersectLine(srcPos.x, srcPos.y, source.outerWidth(), source.outerHeight(), p2_i[0], p2_i[1], 0, srcCornerRadius, srcRs); + if (srcManEndptVal === 'outside-to-node-or-label' || srcManEndptVal === 'outside-to-line-or-label') { + var srs = source._private.rscratch; + var _lw = srs.labelWidth; + var _lh = srs.labelHeight; + var _lx = srs.labelX; + var _ly = srs.labelY; + var _lw2 = _lw / 2; + var _lh2 = _lh / 2; + var _va = source.pstyle('text-valign').value; + if (_va === 'top') { + _ly -= _lh2; + } else if (_va === 'bottom') { + _ly += _lh2; + } + var _ha = source.pstyle('text-halign').value; + if (_ha === 'left') { + _lx -= _lw2; + } else if (_ha === 'right') { + _lx += _lw2; + } + var _labelIntersect = polygonIntersectLine(p2_i[0], p2_i[1], [_lx - _lw2, _ly - _lh2, _lx + _lw2, _ly - _lh2, _lx + _lw2, _ly + _lh2, _lx - _lw2, _ly + _lh2], srcPos.x, srcPos.y); + if (_labelIntersect.length > 0) { + var _refPt = tgtPos; + var _intSqdist = sqdist(_refPt, array2point(intersect)); + var _labIntSqdist = sqdist(_refPt, array2point(_labelIntersect)); + var _minSqDist = _intSqdist; + if (_labIntSqdist < _intSqdist) { + intersect = [_labelIntersect[0], _labelIntersect[1]]; + _minSqDist = _labIntSqdist; + } + if (_labelIntersect.length > 2) { + var _labInt2SqDist = sqdist(_refPt, { + x: _labelIntersect[2], + y: _labelIntersect[3] + }); + if (_labInt2SqDist < _minSqDist) { + intersect = [_labelIntersect[2], _labelIntersect[3]]; + } + } + } + } + } + var arrowStart = shortenIntersection(intersect, p2, r.arrowShapes[srcArShape].spacing(edge) + srcDist); + var edgeStart = shortenIntersection(intersect, p2, r.arrowShapes[srcArShape].gap(edge) + srcDist); + rs.startX = edgeStart[0]; + rs.startY = edgeStart[1]; + rs.arrowStartX = arrowStart[0]; + rs.arrowStartY = arrowStart[1]; + if (hasEndpts) { + if (!number$1(rs.startX) || !number$1(rs.startY) || !number$1(rs.endX) || !number$1(rs.endY)) { + rs.badLine = true; + } else { + rs.badLine = false; + } + } +}; +BRp$b.getSourceEndpoint = function (edge) { + var rs = edge[0]._private.rscratch; + this.recalculateRenderedStyle(edge); + switch (rs.edgeType) { + case 'haystack': + return { + x: rs.haystackPts[0], + y: rs.haystackPts[1] + }; + default: + return { + x: rs.arrowStartX, + y: rs.arrowStartY + }; + } +}; +BRp$b.getTargetEndpoint = function (edge) { + var rs = edge[0]._private.rscratch; + this.recalculateRenderedStyle(edge); + switch (rs.edgeType) { + case 'haystack': + return { + x: rs.haystackPts[2], + y: rs.haystackPts[3] + }; + default: + return { + x: rs.arrowEndX, + y: rs.arrowEndY + }; + } +}; + +var BRp$a = {}; +function pushBezierPts(r, edge, pts) { + var qbezierAt$1 = function qbezierAt$1(p1, p2, p3, t) { + return qbezierAt(p1, p2, p3, t); + }; + var _p = edge._private; + var bpts = _p.rstyle.bezierPts; + for (var i = 0; i < r.bezierProjPcts.length; i++) { + var p = r.bezierProjPcts[i]; + bpts.push({ + x: qbezierAt$1(pts[0], pts[2], pts[4], p), + y: qbezierAt$1(pts[1], pts[3], pts[5], p) + }); + } +} +BRp$a.storeEdgeProjections = function (edge) { + var _p = edge._private; + var rs = _p.rscratch; + var et = rs.edgeType; + + // clear the cached points state + _p.rstyle.bezierPts = null; + _p.rstyle.linePts = null; + _p.rstyle.haystackPts = null; + if (et === 'multibezier' || et === 'bezier' || et === 'self' || et === 'compound') { + _p.rstyle.bezierPts = []; + for (var i = 0; i + 5 < rs.allpts.length; i += 4) { + pushBezierPts(this, edge, rs.allpts.slice(i, i + 6)); + } + } else if (et === 'segments') { + var lpts = _p.rstyle.linePts = []; + for (var i = 0; i + 1 < rs.allpts.length; i += 2) { + lpts.push({ + x: rs.allpts[i], + y: rs.allpts[i + 1] + }); + } + } else if (et === 'haystack') { + var hpts = rs.haystackPts; + _p.rstyle.haystackPts = [{ + x: hpts[0], + y: hpts[1] + }, { + x: hpts[2], + y: hpts[3] + }]; + } + _p.rstyle.arrowWidth = this.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.arrowShapeWidth; +}; +BRp$a.recalculateEdgeProjections = function (edges) { + this.findEdgeControlPoints(edges); +}; + +/* global document */ + +var BRp$9 = {}; +BRp$9.recalculateNodeLabelProjection = function (node) { + var content = node.pstyle('label').strValue; + if (emptyString(content)) { + return; + } + var textX, textY; + var _p = node._private; + var nodeWidth = node.width(); + var nodeHeight = node.height(); + var padding = node.padding(); + var nodePos = node.position(); + var textHalign = node.pstyle('text-halign').strValue; + var textValign = node.pstyle('text-valign').strValue; + var rs = _p.rscratch; + var rstyle = _p.rstyle; + switch (textHalign) { + case 'left': + textX = nodePos.x - nodeWidth / 2 - padding; + break; + case 'right': + textX = nodePos.x + nodeWidth / 2 + padding; + break; + default: + // e.g. center + textX = nodePos.x; + } + switch (textValign) { + case 'top': + textY = nodePos.y - nodeHeight / 2 - padding; + break; + case 'bottom': + textY = nodePos.y + nodeHeight / 2 + padding; + break; + default: + // e.g. middle + textY = nodePos.y; + } + rs.labelX = textX; + rs.labelY = textY; + rstyle.labelX = textX; + rstyle.labelY = textY; + this.calculateLabelAngles(node); + this.applyLabelDimensions(node); +}; +var lineAngleFromDelta = function lineAngleFromDelta(dx, dy) { + var angle = Math.atan(dy / dx); + if (dx === 0 && angle < 0) { + angle = angle * -1; + } + return angle; +}; +var lineAngle = function lineAngle(p0, p1) { + var dx = p1.x - p0.x; + var dy = p1.y - p0.y; + return lineAngleFromDelta(dx, dy); +}; +var bezierAngle = function bezierAngle(p0, p1, p2, t) { + var t0 = bound(0, t - 0.001, 1); + var t1 = bound(0, t + 0.001, 1); + var lp0 = qbezierPtAt(p0, p1, p2, t0); + var lp1 = qbezierPtAt(p0, p1, p2, t1); + return lineAngle(lp0, lp1); +}; +BRp$9.recalculateEdgeLabelProjections = function (edge) { + var p; + var _p = edge._private; + var rs = _p.rscratch; + var r = this; + var content = { + mid: edge.pstyle('label').strValue, + source: edge.pstyle('source-label').strValue, + target: edge.pstyle('target-label').strValue + }; + if (content.mid || content.source || content.target) ; else { + return; // no labels => no calcs + } + + // add center point to style so bounding box calculations can use it + // + p = { + x: rs.midX, + y: rs.midY + }; + var setRs = function setRs(propName, prefix, value) { + setPrefixedProperty(_p.rscratch, propName, prefix, value); + setPrefixedProperty(_p.rstyle, propName, prefix, value); + }; + setRs('labelX', null, p.x); + setRs('labelY', null, p.y); + var midAngle = lineAngleFromDelta(rs.midDispX, rs.midDispY); + setRs('labelAutoAngle', null, midAngle); + var createControlPointInfo = function createControlPointInfo() { + if (createControlPointInfo.cache) { + return createControlPointInfo.cache; + } // use cache so only 1x per edge + + var ctrlpts = []; + + // store each ctrlpt info init + for (var i = 0; i + 5 < rs.allpts.length; i += 4) { + var p0 = { + x: rs.allpts[i], + y: rs.allpts[i + 1] + }; + var p1 = { + x: rs.allpts[i + 2], + y: rs.allpts[i + 3] + }; // ctrlpt + var p2 = { + x: rs.allpts[i + 4], + y: rs.allpts[i + 5] + }; + ctrlpts.push({ + p0: p0, + p1: p1, + p2: p2, + startDist: 0, + length: 0, + segments: [] + }); + } + var bpts = _p.rstyle.bezierPts; + var nProjs = r.bezierProjPcts.length; + function addSegment(cp, p0, p1, t0, t1) { + var length = dist(p0, p1); + var prevSegment = cp.segments[cp.segments.length - 1]; + var segment = { + p0: p0, + p1: p1, + t0: t0, + t1: t1, + startDist: prevSegment ? prevSegment.startDist + prevSegment.length : 0, + length: length + }; + cp.segments.push(segment); + cp.length += length; + } + + // update each ctrlpt with segment info + for (var _i = 0; _i < ctrlpts.length; _i++) { + var cp = ctrlpts[_i]; + var prevCp = ctrlpts[_i - 1]; + if (prevCp) { + cp.startDist = prevCp.startDist + prevCp.length; + } + addSegment(cp, cp.p0, bpts[_i * nProjs], 0, r.bezierProjPcts[0]); // first + + for (var j = 0; j < nProjs - 1; j++) { + addSegment(cp, bpts[_i * nProjs + j], bpts[_i * nProjs + j + 1], r.bezierProjPcts[j], r.bezierProjPcts[j + 1]); + } + addSegment(cp, bpts[_i * nProjs + nProjs - 1], cp.p2, r.bezierProjPcts[nProjs - 1], 1); // last + } + + return createControlPointInfo.cache = ctrlpts; + }; + var calculateEndProjection = function calculateEndProjection(prefix) { + var angle; + var isSrc = prefix === 'source'; + if (!content[prefix]) { + return; + } + var offset = edge.pstyle(prefix + '-text-offset').pfValue; + switch (rs.edgeType) { + case 'self': + case 'compound': + case 'bezier': + case 'multibezier': + { + var cps = createControlPointInfo(); + var selected; + var startDist = 0; + var totalDist = 0; + + // find the segment we're on + for (var i = 0; i < cps.length; i++) { + var _cp = cps[isSrc ? i : cps.length - 1 - i]; + for (var j = 0; j < _cp.segments.length; j++) { + var _seg = _cp.segments[isSrc ? j : _cp.segments.length - 1 - j]; + var lastSeg = i === cps.length - 1 && j === _cp.segments.length - 1; + startDist = totalDist; + totalDist += _seg.length; + if (totalDist >= offset || lastSeg) { + selected = { + cp: _cp, + segment: _seg + }; + break; + } + } + if (selected) { + break; + } + } + var cp = selected.cp; + var seg = selected.segment; + var tSegment = (offset - startDist) / seg.length; + var segDt = seg.t1 - seg.t0; + var t = isSrc ? seg.t0 + segDt * tSegment : seg.t1 - segDt * tSegment; + t = bound(0, t, 1); + p = qbezierPtAt(cp.p0, cp.p1, cp.p2, t); + angle = bezierAngle(cp.p0, cp.p1, cp.p2, t); + break; + } + case 'straight': + case 'segments': + case 'haystack': + { + var d = 0, + di, + d0; + var p0, p1; + var l = rs.allpts.length; + for (var _i2 = 0; _i2 + 3 < l; _i2 += 2) { + if (isSrc) { + p0 = { + x: rs.allpts[_i2], + y: rs.allpts[_i2 + 1] + }; + p1 = { + x: rs.allpts[_i2 + 2], + y: rs.allpts[_i2 + 3] + }; + } else { + p0 = { + x: rs.allpts[l - 2 - _i2], + y: rs.allpts[l - 1 - _i2] + }; + p1 = { + x: rs.allpts[l - 4 - _i2], + y: rs.allpts[l - 3 - _i2] + }; + } + di = dist(p0, p1); + d0 = d; + d += di; + if (d >= offset) { + break; + } + } + var pD = offset - d0; + var _t = pD / di; + _t = bound(0, _t, 1); + p = lineAt(p0, p1, _t); + angle = lineAngle(p0, p1); + break; + } + } + setRs('labelX', prefix, p.x); + setRs('labelY', prefix, p.y); + setRs('labelAutoAngle', prefix, angle); + }; + calculateEndProjection('source'); + calculateEndProjection('target'); + this.applyLabelDimensions(edge); +}; +BRp$9.applyLabelDimensions = function (ele) { + this.applyPrefixedLabelDimensions(ele); + if (ele.isEdge()) { + this.applyPrefixedLabelDimensions(ele, 'source'); + this.applyPrefixedLabelDimensions(ele, 'target'); + } +}; +BRp$9.applyPrefixedLabelDimensions = function (ele, prefix) { + var _p = ele._private; + var text = this.getLabelText(ele, prefix); + var labelDims = this.calculateLabelDimensions(ele, text); + var lineHeight = ele.pstyle('line-height').pfValue; + var textWrap = ele.pstyle('text-wrap').strValue; + var lines = getPrefixedProperty(_p.rscratch, 'labelWrapCachedLines', prefix) || []; + var numLines = textWrap !== 'wrap' ? 1 : Math.max(lines.length, 1); + var normPerLineHeight = labelDims.height / numLines; + var labelLineHeight = normPerLineHeight * lineHeight; + var width = labelDims.width; + var height = labelDims.height + (numLines - 1) * (lineHeight - 1) * normPerLineHeight; + setPrefixedProperty(_p.rstyle, 'labelWidth', prefix, width); + setPrefixedProperty(_p.rscratch, 'labelWidth', prefix, width); + setPrefixedProperty(_p.rstyle, 'labelHeight', prefix, height); + setPrefixedProperty(_p.rscratch, 'labelHeight', prefix, height); + setPrefixedProperty(_p.rscratch, 'labelLineHeight', prefix, labelLineHeight); +}; +BRp$9.getLabelText = function (ele, prefix) { + var _p = ele._private; + var pfd = prefix ? prefix + '-' : ''; + var text = ele.pstyle(pfd + 'label').strValue; + var textTransform = ele.pstyle('text-transform').value; + var rscratch = function rscratch(propName, value) { + if (value) { + setPrefixedProperty(_p.rscratch, propName, prefix, value); + return value; + } else { + return getPrefixedProperty(_p.rscratch, propName, prefix); + } + }; + + // for empty text, skip all processing + if (!text) { + return ''; + } + if (textTransform == 'none') ; else if (textTransform == 'uppercase') { + text = text.toUpperCase(); + } else if (textTransform == 'lowercase') { + text = text.toLowerCase(); + } + var wrapStyle = ele.pstyle('text-wrap').value; + if (wrapStyle === 'wrap') { + var labelKey = rscratch('labelKey'); + + // save recalc if the label is the same as before + if (labelKey != null && rscratch('labelWrapKey') === labelKey) { + return rscratch('labelWrapCachedText'); + } + var zwsp = "\u200B"; + var lines = text.split('\n'); + var maxW = ele.pstyle('text-max-width').pfValue; + var overflow = ele.pstyle('text-overflow-wrap').value; + var overflowAny = overflow === 'anywhere'; + var wrappedLines = []; + var wordsRegex = /[\s\u200b]+/; + var wordSeparator = overflowAny ? '' : ' '; + for (var l = 0; l < lines.length; l++) { + var line = lines[l]; + var lineDims = this.calculateLabelDimensions(ele, line); + var lineW = lineDims.width; + if (overflowAny) { + var processedLine = line.split('').join(zwsp); + line = processedLine; + } + if (lineW > maxW) { + // line is too long + var words = line.split(wordsRegex); + var subline = ''; + for (var w = 0; w < words.length; w++) { + var word = words[w]; + var testLine = subline.length === 0 ? word : subline + wordSeparator + word; + var testDims = this.calculateLabelDimensions(ele, testLine); + var testW = testDims.width; + if (testW <= maxW) { + // word fits on current line + subline += word + wordSeparator; + } else { + // word starts new line + if (subline) { + wrappedLines.push(subline); + } + subline = word + wordSeparator; + } + } + + // if there's remaining text, put it in a wrapped line + if (!subline.match(/^[\s\u200b]+$/)) { + wrappedLines.push(subline); + } + } else { + // line is already short enough + wrappedLines.push(line); + } + } // for + + rscratch('labelWrapCachedLines', wrappedLines); + text = rscratch('labelWrapCachedText', wrappedLines.join('\n')); + rscratch('labelWrapKey', labelKey); + } else if (wrapStyle === 'ellipsis') { + var _maxW = ele.pstyle('text-max-width').pfValue; + var ellipsized = ''; + var ellipsis = "\u2026"; + var incLastCh = false; + if (this.calculateLabelDimensions(ele, text).width < _maxW) { + // the label already fits + return text; + } + for (var i = 0; i < text.length; i++) { + var widthWithNextCh = this.calculateLabelDimensions(ele, ellipsized + text[i] + ellipsis).width; + if (widthWithNextCh > _maxW) { + break; + } + ellipsized += text[i]; + if (i === text.length - 1) { + incLastCh = true; + } + } + if (!incLastCh) { + ellipsized += ellipsis; + } + return ellipsized; + } // if ellipsize + + return text; +}; +BRp$9.getLabelJustification = function (ele) { + var justification = ele.pstyle('text-justification').strValue; + var textHalign = ele.pstyle('text-halign').strValue; + if (justification === 'auto') { + if (ele.isNode()) { + switch (textHalign) { + case 'left': + return 'right'; + case 'right': + return 'left'; + default: + return 'center'; + } + } else { + return 'center'; + } + } else { + return justification; + } +}; +BRp$9.calculateLabelDimensions = function (ele, text) { + var r = this; + var cacheKey = hashString(text, ele._private.labelDimsKey); + var cache = r.labelDimCache || (r.labelDimCache = []); + var existingVal = cache[cacheKey]; + if (existingVal != null) { + return existingVal; + } + var padding = 0; // add padding around text dims, as the measurement isn't that accurate + var fStyle = ele.pstyle('font-style').strValue; + var size = ele.pstyle('font-size').pfValue; + var family = ele.pstyle('font-family').strValue; + var weight = ele.pstyle('font-weight').strValue; + var canvas = this.labelCalcCanvas; + var c2d = this.labelCalcCanvasContext; + if (!canvas) { + canvas = this.labelCalcCanvas = document.createElement('canvas'); + c2d = this.labelCalcCanvasContext = canvas.getContext('2d'); + var ds = canvas.style; + ds.position = 'absolute'; + ds.left = '-9999px'; + ds.top = '-9999px'; + ds.zIndex = '-1'; + ds.visibility = 'hidden'; + ds.pointerEvents = 'none'; + } + c2d.font = "".concat(fStyle, " ").concat(weight, " ").concat(size, "px ").concat(family); + var width = 0; + var height = 0; + var lines = text.split('\n'); + for (var i = 0; i < lines.length; i++) { + var line = lines[i]; + var metrics = c2d.measureText(line); + var w = Math.ceil(metrics.width); + var h = size; + width = Math.max(w, width); + height += h; + } + width += padding; + height += padding; + return cache[cacheKey] = { + width: width, + height: height + }; +}; +BRp$9.calculateLabelAngle = function (ele, prefix) { + var _p = ele._private; + var rs = _p.rscratch; + var isEdge = ele.isEdge(); + var prefixDash = prefix ? prefix + '-' : ''; + var rot = ele.pstyle(prefixDash + 'text-rotation'); + var rotStr = rot.strValue; + if (rotStr === 'none') { + return 0; + } else if (isEdge && rotStr === 'autorotate') { + return rs.labelAutoAngle; + } else if (rotStr === 'autorotate') { + return 0; + } else { + return rot.pfValue; + } +}; +BRp$9.calculateLabelAngles = function (ele) { + var r = this; + var isEdge = ele.isEdge(); + var _p = ele._private; + var rs = _p.rscratch; + rs.labelAngle = r.calculateLabelAngle(ele); + if (isEdge) { + rs.sourceLabelAngle = r.calculateLabelAngle(ele, 'source'); + rs.targetLabelAngle = r.calculateLabelAngle(ele, 'target'); + } +}; + +var BRp$8 = {}; +var TOO_SMALL_CUT_RECT = 28; +var warnedCutRect = false; +BRp$8.getNodeShape = function (node) { + var r = this; + var shape = node.pstyle('shape').value; + if (shape === 'cutrectangle' && (node.width() < TOO_SMALL_CUT_RECT || node.height() < TOO_SMALL_CUT_RECT)) { + if (!warnedCutRect) { + warn('The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead'); + warnedCutRect = true; + } + return 'rectangle'; + } + if (node.isParent()) { + if (shape === 'rectangle' || shape === 'roundrectangle' || shape === 'round-rectangle' || shape === 'cutrectangle' || shape === 'cut-rectangle' || shape === 'barrel') { + return shape; + } else { + return 'rectangle'; + } + } + if (shape === 'polygon') { + var points = node.pstyle('shape-polygon-points').value; + return r.nodeShapes.makePolygon(points).name; + } + return shape; +}; + +var BRp$7 = {}; +BRp$7.registerCalculationListeners = function () { + var cy = this.cy; + var elesToUpdate = cy.collection(); + var r = this; + var enqueue = function enqueue(eles) { + var dirtyStyleCaches = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + elesToUpdate.merge(eles); + if (dirtyStyleCaches) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _p = ele._private; + var rstyle = _p.rstyle; + rstyle.clean = false; + rstyle.cleanConnected = false; + } + } + }; + r.binder(cy).on('bounds.* dirty.*', function onDirtyBounds(e) { + var ele = e.target; + enqueue(ele); + }).on('style.* background.*', function onDirtyStyle(e) { + var ele = e.target; + enqueue(ele, false); + }); + var updateEleCalcs = function updateEleCalcs(willDraw) { + if (willDraw) { + var fns = r.onUpdateEleCalcsFns; + + // because we need to have up-to-date style (e.g. stylesheet mappers) + // before calculating rendered style (and pstyle might not be called yet) + elesToUpdate.cleanStyle(); + for (var i = 0; i < elesToUpdate.length; i++) { + var ele = elesToUpdate[i]; + var rstyle = ele._private.rstyle; + if (ele.isNode() && !rstyle.cleanConnected) { + enqueue(ele.connectedEdges()); + rstyle.cleanConnected = true; + } + } + if (fns) { + for (var _i = 0; _i < fns.length; _i++) { + var fn = fns[_i]; + fn(willDraw, elesToUpdate); + } + } + r.recalculateRenderedStyle(elesToUpdate); + elesToUpdate = cy.collection(); + } + }; + r.flushRenderedStyleQueue = function () { + updateEleCalcs(true); + }; + r.beforeRender(updateEleCalcs, r.beforeRenderPriorities.eleCalcs); +}; +BRp$7.onUpdateEleCalcs = function (fn) { + var fns = this.onUpdateEleCalcsFns = this.onUpdateEleCalcsFns || []; + fns.push(fn); +}; +BRp$7.recalculateRenderedStyle = function (eles, useCache) { + var isCleanConnected = function isCleanConnected(ele) { + return ele._private.rstyle.cleanConnected; + }; + var edges = []; + var nodes = []; + + // the renderer can't be used for calcs when destroyed, e.g. ele.boundingBox() + if (this.destroyed) { + return; + } + + // use cache by default for perf + if (useCache === undefined) { + useCache = true; + } + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _p = ele._private; + var rstyle = _p.rstyle; + + // an edge may be implicitly dirty b/c of one of its connected nodes + // (and a request for recalc may come in between frames) + if (ele.isEdge() && (!isCleanConnected(ele.source()) || !isCleanConnected(ele.target()))) { + rstyle.clean = false; + } + + // only update if dirty and in graph + if (useCache && rstyle.clean || ele.removed()) { + continue; + } + + // only update if not display: none + if (ele.pstyle('display').value === 'none') { + continue; + } + if (_p.group === 'nodes') { + nodes.push(ele); + } else { + // edges + edges.push(ele); + } + rstyle.clean = true; + } + + // update node data from projections + for (var _i2 = 0; _i2 < nodes.length; _i2++) { + var _ele = nodes[_i2]; + var _p2 = _ele._private; + var _rstyle = _p2.rstyle; + var pos = _ele.position(); + this.recalculateNodeLabelProjection(_ele); + _rstyle.nodeX = pos.x; + _rstyle.nodeY = pos.y; + _rstyle.nodeW = _ele.pstyle('width').pfValue; + _rstyle.nodeH = _ele.pstyle('height').pfValue; + } + this.recalculateEdgeProjections(edges); + + // update edge data from projections + for (var _i3 = 0; _i3 < edges.length; _i3++) { + var _ele2 = edges[_i3]; + var _p3 = _ele2._private; + var _rstyle2 = _p3.rstyle; + var rs = _p3.rscratch; + + // update rstyle positions + _rstyle2.srcX = rs.arrowStartX; + _rstyle2.srcY = rs.arrowStartY; + _rstyle2.tgtX = rs.arrowEndX; + _rstyle2.tgtY = rs.arrowEndY; + _rstyle2.midX = rs.midX; + _rstyle2.midY = rs.midY; + _rstyle2.labelAngle = rs.labelAngle; + _rstyle2.sourceLabelAngle = rs.sourceLabelAngle; + _rstyle2.targetLabelAngle = rs.targetLabelAngle; + } +}; + +var BRp$6 = {}; +BRp$6.updateCachedGrabbedEles = function () { + var eles = this.cachedZSortedEles; + if (!eles) { + // just let this be recalculated on the next z sort tick + return; + } + eles.drag = []; + eles.nondrag = []; + var grabTargets = []; + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var rs = ele._private.rscratch; + if (ele.grabbed() && !ele.isParent()) { + grabTargets.push(ele); + } else if (rs.inDragLayer) { + eles.drag.push(ele); + } else { + eles.nondrag.push(ele); + } + } + + // put the grab target nodes last so it's on top of its neighbourhood + for (var i = 0; i < grabTargets.length; i++) { + var ele = grabTargets[i]; + eles.drag.push(ele); + } +}; +BRp$6.invalidateCachedZSortedEles = function () { + this.cachedZSortedEles = null; +}; +BRp$6.getCachedZSortedEles = function (forceRecalc) { + if (forceRecalc || !this.cachedZSortedEles) { + var eles = this.cy.mutableElements().toArray(); + eles.sort(zIndexSort); + eles.interactive = eles.filter(function (ele) { + return ele.interactive(); + }); + this.cachedZSortedEles = eles; + this.updateCachedGrabbedEles(); + } else { + eles = this.cachedZSortedEles; + } + return eles; +}; + +var BRp$5 = {}; +[BRp$e, BRp$d, BRp$c, BRp$b, BRp$a, BRp$9, BRp$8, BRp$7, BRp$6].forEach(function (props) { + extend(BRp$5, props); +}); + +var BRp$4 = {}; +BRp$4.getCachedImage = function (url, crossOrigin, onLoad) { + var r = this; + var imageCache = r.imageCache = r.imageCache || {}; + var cache = imageCache[url]; + if (cache) { + if (!cache.image.complete) { + cache.image.addEventListener('load', onLoad); + } + return cache.image; + } else { + cache = imageCache[url] = imageCache[url] || {}; + var image = cache.image = new Image(); // eslint-disable-line no-undef + + image.addEventListener('load', onLoad); + image.addEventListener('error', function () { + image.error = true; + }); + + // #1582 safari doesn't load data uris with crossOrigin properly + // https://bugs.webkit.org/show_bug.cgi?id=123978 + var dataUriPrefix = 'data:'; + var isDataUri = url.substring(0, dataUriPrefix.length).toLowerCase() === dataUriPrefix; + if (!isDataUri) { + // if crossorigin is 'null'(stringified), then manually set it to null + crossOrigin = crossOrigin === 'null' ? null : crossOrigin; + image.crossOrigin = crossOrigin; // prevent tainted canvas + } + + image.src = url; + return image; + } +}; + +var BRp$3 = {}; + +/* global document, window, ResizeObserver, MutationObserver */ + +BRp$3.registerBinding = function (target, event, handler, useCapture) { + // eslint-disable-line no-unused-vars + var args = Array.prototype.slice.apply(arguments, [1]); // copy + var b = this.binder(target); + return b.on.apply(b, args); +}; +BRp$3.binder = function (tgt) { + var r = this; + var containerWindow = r.cy.window(); + var tgtIsDom = tgt === containerWindow || tgt === containerWindow.document || tgt === containerWindow.document.body || domElement(tgt); + if (r.supportsPassiveEvents == null) { + // from https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection + var supportsPassive = false; + try { + var opts = Object.defineProperty({}, 'passive', { + get: function get() { + supportsPassive = true; + return true; + } + }); + containerWindow.addEventListener('test', null, opts); + } catch (err) { + // not supported + } + r.supportsPassiveEvents = supportsPassive; + } + var on = function on(event, handler, useCapture) { + var args = Array.prototype.slice.call(arguments); + if (tgtIsDom && r.supportsPassiveEvents) { + // replace useCapture w/ opts obj + args[2] = { + capture: useCapture != null ? useCapture : false, + passive: false, + once: false + }; + } + r.bindings.push({ + target: tgt, + args: args + }); + (tgt.addEventListener || tgt.on).apply(tgt, args); + return this; + }; + return { + on: on, + addEventListener: on, + addListener: on, + bind: on + }; +}; +BRp$3.nodeIsDraggable = function (node) { + return node && node.isNode() && !node.locked() && node.grabbable(); +}; +BRp$3.nodeIsGrabbable = function (node) { + return this.nodeIsDraggable(node) && node.interactive(); +}; +BRp$3.load = function () { + var r = this; + var containerWindow = r.cy.window(); + var isSelected = function isSelected(ele) { + return ele.selected(); + }; + var triggerEvents = function triggerEvents(target, names, e, position) { + if (target == null) { + target = r.cy; + } + for (var i = 0; i < names.length; i++) { + var name = names[i]; + target.emit({ + originalEvent: e, + type: name, + position: position + }); + } + }; + var isMultSelKeyDown = function isMultSelKeyDown(e) { + return e.shiftKey || e.metaKey || e.ctrlKey; // maybe e.altKey + }; + + var allowPanningPassthrough = function allowPanningPassthrough(down, downs) { + var allowPassthrough = true; + if (r.cy.hasCompoundNodes() && down && down.pannable()) { + // a grabbable compound node below the ele => no passthrough panning + for (var i = 0; downs && i < downs.length; i++) { + var down = downs[i]; + + //if any parent node in event hierarchy isn't pannable, reject passthrough + if (down.isNode() && down.isParent() && !down.pannable()) { + allowPassthrough = false; + break; + } + } + } else { + allowPassthrough = true; + } + return allowPassthrough; + }; + var setGrabbed = function setGrabbed(ele) { + ele[0]._private.grabbed = true; + }; + var setFreed = function setFreed(ele) { + ele[0]._private.grabbed = false; + }; + var setInDragLayer = function setInDragLayer(ele) { + ele[0]._private.rscratch.inDragLayer = true; + }; + var setOutDragLayer = function setOutDragLayer(ele) { + ele[0]._private.rscratch.inDragLayer = false; + }; + var setGrabTarget = function setGrabTarget(ele) { + ele[0]._private.rscratch.isGrabTarget = true; + }; + var removeGrabTarget = function removeGrabTarget(ele) { + ele[0]._private.rscratch.isGrabTarget = false; + }; + var addToDragList = function addToDragList(ele, opts) { + var list = opts.addToList; + var listHasEle = list.has(ele); + if (!listHasEle && ele.grabbable() && !ele.locked()) { + list.merge(ele); + setGrabbed(ele); + } + }; + + // helper function to determine which child nodes and inner edges + // of a compound node to be dragged as well as the grabbed and selected nodes + var addDescendantsToDrag = function addDescendantsToDrag(node, opts) { + if (!node.cy().hasCompoundNodes()) { + return; + } + if (opts.inDragLayer == null && opts.addToList == null) { + return; + } // nothing to do + + var innerNodes = node.descendants(); + if (opts.inDragLayer) { + innerNodes.forEach(setInDragLayer); + innerNodes.connectedEdges().forEach(setInDragLayer); + } + if (opts.addToList) { + addToDragList(innerNodes, opts); + } + }; + + // adds the given nodes and its neighbourhood to the drag layer + var addNodesToDrag = function addNodesToDrag(nodes, opts) { + opts = opts || {}; + var hasCompoundNodes = nodes.cy().hasCompoundNodes(); + if (opts.inDragLayer) { + nodes.forEach(setInDragLayer); + nodes.neighborhood().stdFilter(function (ele) { + return !hasCompoundNodes || ele.isEdge(); + }).forEach(setInDragLayer); + } + if (opts.addToList) { + nodes.forEach(function (ele) { + addToDragList(ele, opts); + }); + } + addDescendantsToDrag(nodes, opts); // always add to drag + + // also add nodes and edges related to the topmost ancestor + updateAncestorsInDragLayer(nodes, { + inDragLayer: opts.inDragLayer + }); + r.updateCachedGrabbedEles(); + }; + var addNodeToDrag = addNodesToDrag; + var freeDraggedElements = function freeDraggedElements(grabbedEles) { + if (!grabbedEles) { + return; + } + + // just go over all elements rather than doing a bunch of (possibly expensive) traversals + r.getCachedZSortedEles().forEach(function (ele) { + setFreed(ele); + setOutDragLayer(ele); + removeGrabTarget(ele); + }); + r.updateCachedGrabbedEles(); + }; + + // helper function to determine which ancestor nodes and edges should go + // to the drag layer (or should be removed from drag layer). + var updateAncestorsInDragLayer = function updateAncestorsInDragLayer(node, opts) { + if (opts.inDragLayer == null && opts.addToList == null) { + return; + } // nothing to do + + if (!node.cy().hasCompoundNodes()) { + return; + } + + // find top-level parent + var parent = node.ancestors().orphans(); + + // no parent node: no nodes to add to the drag layer + if (parent.same(node)) { + return; + } + var nodes = parent.descendants().spawnSelf().merge(parent).unmerge(node).unmerge(node.descendants()); + var edges = nodes.connectedEdges(); + if (opts.inDragLayer) { + edges.forEach(setInDragLayer); + nodes.forEach(setInDragLayer); + } + if (opts.addToList) { + nodes.forEach(function (ele) { + addToDragList(ele, opts); + }); + } + }; + var blurActiveDomElement = function blurActiveDomElement() { + if (document.activeElement != null && document.activeElement.blur != null) { + document.activeElement.blur(); + } + }; + var haveMutationsApi = typeof MutationObserver !== 'undefined'; + var haveResizeObserverApi = typeof ResizeObserver !== 'undefined'; + + // watch for when the cy container is removed from the dom + if (haveMutationsApi) { + r.removeObserver = new MutationObserver(function (mutns) { + // eslint-disable-line no-undef + for (var i = 0; i < mutns.length; i++) { + var mutn = mutns[i]; + var rNodes = mutn.removedNodes; + if (rNodes) { + for (var j = 0; j < rNodes.length; j++) { + var rNode = rNodes[j]; + if (rNode === r.container) { + r.destroy(); + break; + } + } + } + } + }); + if (r.container.parentNode) { + r.removeObserver.observe(r.container.parentNode, { + childList: true + }); + } + } else { + r.registerBinding(r.container, 'DOMNodeRemoved', function (e) { + // eslint-disable-line no-unused-vars + r.destroy(); + }); + } + var onResize = debounce_1(function () { + r.cy.resize(); + }, 100); + if (haveMutationsApi) { + r.styleObserver = new MutationObserver(onResize); // eslint-disable-line no-undef + + r.styleObserver.observe(r.container, { + attributes: true + }); + } + + // auto resize + r.registerBinding(containerWindow, 'resize', onResize); // eslint-disable-line no-undef + + if (haveResizeObserverApi) { + r.resizeObserver = new ResizeObserver(onResize); // eslint-disable-line no-undef + + r.resizeObserver.observe(r.container); + } + var forEachUp = function forEachUp(domEle, fn) { + while (domEle != null) { + fn(domEle); + domEle = domEle.parentNode; + } + }; + var invalidateCoords = function invalidateCoords() { + r.invalidateContainerClientCoordsCache(); + }; + forEachUp(r.container, function (domEle) { + r.registerBinding(domEle, 'transitionend', invalidateCoords); + r.registerBinding(domEle, 'animationend', invalidateCoords); + r.registerBinding(domEle, 'scroll', invalidateCoords); + }); + + // stop right click menu from appearing on cy + r.registerBinding(r.container, 'contextmenu', function (e) { + e.preventDefault(); + }); + var inBoxSelection = function inBoxSelection() { + return r.selection[4] !== 0; + }; + var eventInContainer = function eventInContainer(e) { + // save cycles if mouse events aren't to be captured + var containerPageCoords = r.findContainerClientCoords(); + var x = containerPageCoords[0]; + var y = containerPageCoords[1]; + var width = containerPageCoords[2]; + var height = containerPageCoords[3]; + var positions = e.touches ? e.touches : [e]; + var atLeastOnePosInside = false; + for (var i = 0; i < positions.length; i++) { + var p = positions[i]; + if (x <= p.clientX && p.clientX <= x + width && y <= p.clientY && p.clientY <= y + height) { + atLeastOnePosInside = true; + break; + } + } + if (!atLeastOnePosInside) { + return false; + } + var container = r.container; + var target = e.target; + var tParent = target.parentNode; + var containerIsTarget = false; + while (tParent) { + if (tParent === container) { + containerIsTarget = true; + break; + } + tParent = tParent.parentNode; + } + if (!containerIsTarget) { + return false; + } // if target is outisde cy container, then this event is not for us + + return true; + }; + + // Primary key + r.registerBinding(r.container, 'mousedown', function mousedownHandler(e) { + if (!eventInContainer(e)) { + return; + } + e.preventDefault(); + blurActiveDomElement(); + r.hoverData.capture = true; + r.hoverData.which = e.which; + var cy = r.cy; + var gpos = [e.clientX, e.clientY]; + var pos = r.projectIntoViewport(gpos[0], gpos[1]); + var select = r.selection; + var nears = r.findNearestElements(pos[0], pos[1], true, false); + var near = nears[0]; + var draggedElements = r.dragData.possibleDragElements; + r.hoverData.mdownPos = pos; + r.hoverData.mdownGPos = gpos; + var checkForTaphold = function checkForTaphold() { + r.hoverData.tapholdCancelled = false; + clearTimeout(r.hoverData.tapholdTimeout); + r.hoverData.tapholdTimeout = setTimeout(function () { + if (r.hoverData.tapholdCancelled) { + return; + } else { + var ele = r.hoverData.down; + if (ele) { + ele.emit({ + originalEvent: e, + type: 'taphold', + position: { + x: pos[0], + y: pos[1] + } + }); + } else { + cy.emit({ + originalEvent: e, + type: 'taphold', + position: { + x: pos[0], + y: pos[1] + } + }); + } + } + }, r.tapholdDuration); + }; + + // Right click button + if (e.which == 3) { + r.hoverData.cxtStarted = true; + var cxtEvt = { + originalEvent: e, + type: 'cxttapstart', + position: { + x: pos[0], + y: pos[1] + } + }; + if (near) { + near.activate(); + near.emit(cxtEvt); + r.hoverData.down = near; + } else { + cy.emit(cxtEvt); + } + r.hoverData.downTime = new Date().getTime(); + r.hoverData.cxtDragged = false; + + // Primary button + } else if (e.which == 1) { + if (near) { + near.activate(); + } + + // Element dragging + { + // If something is under the cursor and it is draggable, prepare to grab it + if (near != null) { + if (r.nodeIsGrabbable(near)) { + var makeEvent = function makeEvent(type) { + return { + originalEvent: e, + type: type, + position: { + x: pos[0], + y: pos[1] + } + }; + }; + var triggerGrab = function triggerGrab(ele) { + ele.emit(makeEvent('grab')); + }; + setGrabTarget(near); + if (!near.selected()) { + draggedElements = r.dragData.possibleDragElements = cy.collection(); + addNodeToDrag(near, { + addToList: draggedElements + }); + near.emit(makeEvent('grabon')).emit(makeEvent('grab')); + } else { + draggedElements = r.dragData.possibleDragElements = cy.collection(); + var selectedNodes = cy.$(function (ele) { + return ele.isNode() && ele.selected() && r.nodeIsGrabbable(ele); + }); + addNodesToDrag(selectedNodes, { + addToList: draggedElements + }); + near.emit(makeEvent('grabon')); + selectedNodes.forEach(triggerGrab); + } + r.redrawHint('eles', true); + r.redrawHint('drag', true); + } + } + r.hoverData.down = near; + r.hoverData.downs = nears; + r.hoverData.downTime = new Date().getTime(); + } + triggerEvents(near, ['mousedown', 'tapstart', 'vmousedown'], e, { + x: pos[0], + y: pos[1] + }); + if (near == null) { + select[4] = 1; + r.data.bgActivePosistion = { + x: pos[0], + y: pos[1] + }; + r.redrawHint('select', true); + r.redraw(); + } else if (near.pannable()) { + select[4] = 1; // for future pan + } + + checkForTaphold(); + } + + // Initialize selection box coordinates + select[0] = select[2] = pos[0]; + select[1] = select[3] = pos[1]; + }, false); + r.registerBinding(containerWindow, 'mousemove', function mousemoveHandler(e) { + // eslint-disable-line no-undef + var capture = r.hoverData.capture; + if (!capture && !eventInContainer(e)) { + return; + } + var preventDefault = false; + var cy = r.cy; + var zoom = cy.zoom(); + var gpos = [e.clientX, e.clientY]; + var pos = r.projectIntoViewport(gpos[0], gpos[1]); + var mdownPos = r.hoverData.mdownPos; + var mdownGPos = r.hoverData.mdownGPos; + var select = r.selection; + var near = null; + if (!r.hoverData.draggingEles && !r.hoverData.dragging && !r.hoverData.selecting) { + near = r.findNearestElement(pos[0], pos[1], true, false); + } + var last = r.hoverData.last; + var down = r.hoverData.down; + var disp = [pos[0] - select[2], pos[1] - select[3]]; + var draggedElements = r.dragData.possibleDragElements; + var isOverThresholdDrag; + if (mdownGPos) { + var dx = gpos[0] - mdownGPos[0]; + var dx2 = dx * dx; + var dy = gpos[1] - mdownGPos[1]; + var dy2 = dy * dy; + var dist2 = dx2 + dy2; + r.hoverData.isOverThresholdDrag = isOverThresholdDrag = dist2 >= r.desktopTapThreshold2; + } + var multSelKeyDown = isMultSelKeyDown(e); + if (isOverThresholdDrag) { + r.hoverData.tapholdCancelled = true; + } + var updateDragDelta = function updateDragDelta() { + var dragDelta = r.hoverData.dragDelta = r.hoverData.dragDelta || []; + if (dragDelta.length === 0) { + dragDelta.push(disp[0]); + dragDelta.push(disp[1]); + } else { + dragDelta[0] += disp[0]; + dragDelta[1] += disp[1]; + } + }; + preventDefault = true; + triggerEvents(near, ['mousemove', 'vmousemove', 'tapdrag'], e, { + x: pos[0], + y: pos[1] + }); + var goIntoBoxMode = function goIntoBoxMode() { + r.data.bgActivePosistion = undefined; + if (!r.hoverData.selecting) { + cy.emit({ + originalEvent: e, + type: 'boxstart', + position: { + x: pos[0], + y: pos[1] + } + }); + } + select[4] = 1; + r.hoverData.selecting = true; + r.redrawHint('select', true); + r.redraw(); + }; + + // trigger context drag if rmouse down + if (r.hoverData.which === 3) { + // but only if over threshold + if (isOverThresholdDrag) { + var cxtEvt = { + originalEvent: e, + type: 'cxtdrag', + position: { + x: pos[0], + y: pos[1] + } + }; + if (down) { + down.emit(cxtEvt); + } else { + cy.emit(cxtEvt); + } + r.hoverData.cxtDragged = true; + if (!r.hoverData.cxtOver || near !== r.hoverData.cxtOver) { + if (r.hoverData.cxtOver) { + r.hoverData.cxtOver.emit({ + originalEvent: e, + type: 'cxtdragout', + position: { + x: pos[0], + y: pos[1] + } + }); + } + r.hoverData.cxtOver = near; + if (near) { + near.emit({ + originalEvent: e, + type: 'cxtdragover', + position: { + x: pos[0], + y: pos[1] + } + }); + } + } + } + + // Check if we are drag panning the entire graph + } else if (r.hoverData.dragging) { + preventDefault = true; + if (cy.panningEnabled() && cy.userPanningEnabled()) { + var deltaP; + if (r.hoverData.justStartedPan) { + var mdPos = r.hoverData.mdownPos; + deltaP = { + x: (pos[0] - mdPos[0]) * zoom, + y: (pos[1] - mdPos[1]) * zoom + }; + r.hoverData.justStartedPan = false; + } else { + deltaP = { + x: disp[0] * zoom, + y: disp[1] * zoom + }; + } + cy.panBy(deltaP); + cy.emit('dragpan'); + r.hoverData.dragged = true; + } + + // Needs reproject due to pan changing viewport + pos = r.projectIntoViewport(e.clientX, e.clientY); + + // Checks primary button down & out of time & mouse not moved much + } else if (select[4] == 1 && (down == null || down.pannable())) { + if (isOverThresholdDrag) { + if (!r.hoverData.dragging && cy.boxSelectionEnabled() && (multSelKeyDown || !cy.panningEnabled() || !cy.userPanningEnabled())) { + goIntoBoxMode(); + } else if (!r.hoverData.selecting && cy.panningEnabled() && cy.userPanningEnabled()) { + var allowPassthrough = allowPanningPassthrough(down, r.hoverData.downs); + if (allowPassthrough) { + r.hoverData.dragging = true; + r.hoverData.justStartedPan = true; + select[4] = 0; + r.data.bgActivePosistion = array2point(mdownPos); + r.redrawHint('select', true); + r.redraw(); + } + } + if (down && down.pannable() && down.active()) { + down.unactivate(); + } + } + } else { + if (down && down.pannable() && down.active()) { + down.unactivate(); + } + if ((!down || !down.grabbed()) && near != last) { + if (last) { + triggerEvents(last, ['mouseout', 'tapdragout'], e, { + x: pos[0], + y: pos[1] + }); + } + if (near) { + triggerEvents(near, ['mouseover', 'tapdragover'], e, { + x: pos[0], + y: pos[1] + }); + } + r.hoverData.last = near; + } + if (down) { + if (isOverThresholdDrag) { + // then we can take action + + if (cy.boxSelectionEnabled() && multSelKeyDown) { + // then selection overrides + if (down && down.grabbed()) { + freeDraggedElements(draggedElements); + down.emit('freeon'); + draggedElements.emit('free'); + if (r.dragData.didDrag) { + down.emit('dragfreeon'); + draggedElements.emit('dragfree'); + } + } + goIntoBoxMode(); + } else if (down && down.grabbed() && r.nodeIsDraggable(down)) { + // drag node + var justStartedDrag = !r.dragData.didDrag; + if (justStartedDrag) { + r.redrawHint('eles', true); + } + r.dragData.didDrag = true; // indicate that we actually did drag the node + + // now, add the elements to the drag layer if not done already + if (!r.hoverData.draggingEles) { + addNodesToDrag(draggedElements, { + inDragLayer: true + }); + } + var totalShift = { + x: 0, + y: 0 + }; + if (number$1(disp[0]) && number$1(disp[1])) { + totalShift.x += disp[0]; + totalShift.y += disp[1]; + if (justStartedDrag) { + var dragDelta = r.hoverData.dragDelta; + if (dragDelta && number$1(dragDelta[0]) && number$1(dragDelta[1])) { + totalShift.x += dragDelta[0]; + totalShift.y += dragDelta[1]; + } + } + } + r.hoverData.draggingEles = true; + draggedElements.silentShift(totalShift).emit('position drag'); + r.redrawHint('drag', true); + r.redraw(); + } + } else { + // otherwise save drag delta for when we actually start dragging so the relative grab pos is constant + updateDragDelta(); + } + } + + // prevent the dragging from triggering text selection on the page + preventDefault = true; + } + select[2] = pos[0]; + select[3] = pos[1]; + if (preventDefault) { + if (e.stopPropagation) e.stopPropagation(); + if (e.preventDefault) e.preventDefault(); + return false; + } + }, false); + var clickTimeout, didDoubleClick, prevClickTimeStamp; + r.registerBinding(containerWindow, 'mouseup', function mouseupHandler(e) { + // eslint-disable-line no-undef + var capture = r.hoverData.capture; + if (!capture) { + return; + } + r.hoverData.capture = false; + var cy = r.cy; + var pos = r.projectIntoViewport(e.clientX, e.clientY); + var select = r.selection; + var near = r.findNearestElement(pos[0], pos[1], true, false); + var draggedElements = r.dragData.possibleDragElements; + var down = r.hoverData.down; + var multSelKeyDown = isMultSelKeyDown(e); + if (r.data.bgActivePosistion) { + r.redrawHint('select', true); + r.redraw(); + } + r.hoverData.tapholdCancelled = true; + r.data.bgActivePosistion = undefined; // not active bg now + + if (down) { + down.unactivate(); + } + if (r.hoverData.which === 3) { + var cxtEvt = { + originalEvent: e, + type: 'cxttapend', + position: { + x: pos[0], + y: pos[1] + } + }; + if (down) { + down.emit(cxtEvt); + } else { + cy.emit(cxtEvt); + } + if (!r.hoverData.cxtDragged) { + var cxtTap = { + originalEvent: e, + type: 'cxttap', + position: { + x: pos[0], + y: pos[1] + } + }; + if (down) { + down.emit(cxtTap); + } else { + cy.emit(cxtTap); + } + } + r.hoverData.cxtDragged = false; + r.hoverData.which = null; + } else if (r.hoverData.which === 1) { + triggerEvents(near, ['mouseup', 'tapend', 'vmouseup'], e, { + x: pos[0], + y: pos[1] + }); + if (!r.dragData.didDrag && + // didn't move a node around + !r.hoverData.dragged && + // didn't pan + !r.hoverData.selecting && + // not box selection + !r.hoverData.isOverThresholdDrag // didn't move too much + ) { + triggerEvents(down, ["click", "tap", "vclick"], e, { + x: pos[0], + y: pos[1] + }); + didDoubleClick = false; + if (e.timeStamp - prevClickTimeStamp <= cy.multiClickDebounceTime()) { + clickTimeout && clearTimeout(clickTimeout); + didDoubleClick = true; + prevClickTimeStamp = null; + triggerEvents(down, ["dblclick", "dbltap", "vdblclick"], e, { + x: pos[0], + y: pos[1] + }); + } else { + clickTimeout = setTimeout(function () { + if (didDoubleClick) return; + triggerEvents(down, ["oneclick", "onetap", "voneclick"], e, { + x: pos[0], + y: pos[1] + }); + }, cy.multiClickDebounceTime()); + prevClickTimeStamp = e.timeStamp; + } + } + + // Deselect all elements if nothing is currently under the mouse cursor and we aren't dragging something + if (down == null // not mousedown on node + && !r.dragData.didDrag // didn't move the node around + && !r.hoverData.selecting // not box selection + && !r.hoverData.dragged // didn't pan + && !isMultSelKeyDown(e)) { + cy.$(isSelected).unselect(['tapunselect']); + if (draggedElements.length > 0) { + r.redrawHint('eles', true); + } + r.dragData.possibleDragElements = draggedElements = cy.collection(); + } + + // Single selection + if (near == down && !r.dragData.didDrag && !r.hoverData.selecting) { + if (near != null && near._private.selectable) { + if (r.hoverData.dragging) ; else if (cy.selectionType() === 'additive' || multSelKeyDown) { + if (near.selected()) { + near.unselect(['tapunselect']); + } else { + near.select(['tapselect']); + } + } else { + if (!multSelKeyDown) { + cy.$(isSelected).unmerge(near).unselect(['tapunselect']); + near.select(['tapselect']); + } + } + r.redrawHint('eles', true); + } + } + if (r.hoverData.selecting) { + var box = cy.collection(r.getAllInBox(select[0], select[1], select[2], select[3])); + r.redrawHint('select', true); + if (box.length > 0) { + r.redrawHint('eles', true); + } + cy.emit({ + type: 'boxend', + originalEvent: e, + position: { + x: pos[0], + y: pos[1] + } + }); + var eleWouldBeSelected = function eleWouldBeSelected(ele) { + return ele.selectable() && !ele.selected(); + }; + if (cy.selectionType() === 'additive') { + box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect'); + } else { + if (!multSelKeyDown) { + cy.$(isSelected).unmerge(box).unselect(); + } + box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect'); + } + + // always need redraw in case eles unselectable + r.redraw(); + } + + // Cancel drag pan + if (r.hoverData.dragging) { + r.hoverData.dragging = false; + r.redrawHint('select', true); + r.redrawHint('eles', true); + r.redraw(); + } + if (!select[4]) { + r.redrawHint('drag', true); + r.redrawHint('eles', true); + var downWasGrabbed = down && down.grabbed(); + freeDraggedElements(draggedElements); + if (downWasGrabbed) { + down.emit('freeon'); + draggedElements.emit('free'); + if (r.dragData.didDrag) { + down.emit('dragfreeon'); + draggedElements.emit('dragfree'); + } + } + } + } // else not right mouse + + select[4] = 0; + r.hoverData.down = null; + r.hoverData.cxtStarted = false; + r.hoverData.draggingEles = false; + r.hoverData.selecting = false; + r.hoverData.isOverThresholdDrag = false; + r.dragData.didDrag = false; + r.hoverData.dragged = false; + r.hoverData.dragDelta = []; + r.hoverData.mdownPos = null; + r.hoverData.mdownGPos = null; + }, false); + var wheelHandler = function wheelHandler(e) { + if (r.scrollingPage) { + return; + } // while scrolling, ignore wheel-to-zoom + + var cy = r.cy; + var zoom = cy.zoom(); + var pan = cy.pan(); + var pos = r.projectIntoViewport(e.clientX, e.clientY); + var rpos = [pos[0] * zoom + pan.x, pos[1] * zoom + pan.y]; + if (r.hoverData.draggingEles || r.hoverData.dragging || r.hoverData.cxtStarted || inBoxSelection()) { + // if pan dragging or cxt dragging, wheel movements make no zoom + e.preventDefault(); + return; + } + if (cy.panningEnabled() && cy.userPanningEnabled() && cy.zoomingEnabled() && cy.userZoomingEnabled()) { + e.preventDefault(); + r.data.wheelZooming = true; + clearTimeout(r.data.wheelTimeout); + r.data.wheelTimeout = setTimeout(function () { + r.data.wheelZooming = false; + r.redrawHint('eles', true); + r.redraw(); + }, 150); + var diff; + if (e.deltaY != null) { + diff = e.deltaY / -250; + } else if (e.wheelDeltaY != null) { + diff = e.wheelDeltaY / 1000; + } else { + diff = e.wheelDelta / 1000; + } + diff = diff * r.wheelSensitivity; + var needsWheelFix = e.deltaMode === 1; + if (needsWheelFix) { + // fixes slow wheel events on ff/linux and ff/windows + diff *= 33; + } + var newZoom = cy.zoom() * Math.pow(10, diff); + if (e.type === 'gesturechange') { + newZoom = r.gestureStartZoom * e.scale; + } + cy.zoom({ + level: newZoom, + renderedPosition: { + x: rpos[0], + y: rpos[1] + } + }); + cy.emit(e.type === 'gesturechange' ? 'pinchzoom' : 'scrollzoom'); + } + }; + + // Functions to help with whether mouse wheel should trigger zooming + // -- + r.registerBinding(r.container, 'wheel', wheelHandler, true); + + // disable nonstandard wheel events + // r.registerBinding(r.container, 'mousewheel', wheelHandler, true); + // r.registerBinding(r.container, 'DOMMouseScroll', wheelHandler, true); + // r.registerBinding(r.container, 'MozMousePixelScroll', wheelHandler, true); // older firefox + + r.registerBinding(containerWindow, 'scroll', function scrollHandler(e) { + // eslint-disable-line no-unused-vars + r.scrollingPage = true; + clearTimeout(r.scrollingPageTimeout); + r.scrollingPageTimeout = setTimeout(function () { + r.scrollingPage = false; + }, 250); + }, true); + + // desktop safari pinch to zoom start + r.registerBinding(r.container, 'gesturestart', function gestureStartHandler(e) { + r.gestureStartZoom = r.cy.zoom(); + if (!r.hasTouchStarted) { + // don't affect touch devices like iphone + e.preventDefault(); + } + }, true); + r.registerBinding(r.container, 'gesturechange', function (e) { + if (!r.hasTouchStarted) { + // don't affect touch devices like iphone + wheelHandler(e); + } + }, true); + + // Functions to help with handling mouseout/mouseover on the Cytoscape container + // Handle mouseout on Cytoscape container + r.registerBinding(r.container, 'mouseout', function mouseOutHandler(e) { + var pos = r.projectIntoViewport(e.clientX, e.clientY); + r.cy.emit({ + originalEvent: e, + type: 'mouseout', + position: { + x: pos[0], + y: pos[1] + } + }); + }, false); + r.registerBinding(r.container, 'mouseover', function mouseOverHandler(e) { + var pos = r.projectIntoViewport(e.clientX, e.clientY); + r.cy.emit({ + originalEvent: e, + type: 'mouseover', + position: { + x: pos[0], + y: pos[1] + } + }); + }, false); + var f1x1, f1y1, f2x1, f2y1; // starting points for pinch-to-zoom + var distance1, distance1Sq; // initial distance between finger 1 and finger 2 for pinch-to-zoom + var center1, modelCenter1; // center point on start pinch to zoom + var offsetLeft, offsetTop; + var containerWidth, containerHeight; + var twoFingersStartInside; + var distance = function distance(x1, y1, x2, y2) { + return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); + }; + var distanceSq = function distanceSq(x1, y1, x2, y2) { + return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1); + }; + var touchstartHandler; + r.registerBinding(r.container, 'touchstart', touchstartHandler = function touchstartHandler(e) { + r.hasTouchStarted = true; + if (!eventInContainer(e)) { + return; + } + blurActiveDomElement(); + r.touchData.capture = true; + r.data.bgActivePosistion = undefined; + var cy = r.cy; + var now = r.touchData.now; + var earlier = r.touchData.earlier; + if (e.touches[0]) { + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + if (e.touches[1]) { + var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); + now[2] = pos[0]; + now[3] = pos[1]; + } + if (e.touches[2]) { + var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); + now[4] = pos[0]; + now[5] = pos[1]; + } + + // record starting points for pinch-to-zoom + if (e.touches[1]) { + r.touchData.singleTouchMoved = true; + freeDraggedElements(r.dragData.touchDragEles); + var offsets = r.findContainerClientCoords(); + offsetLeft = offsets[0]; + offsetTop = offsets[1]; + containerWidth = offsets[2]; + containerHeight = offsets[3]; + f1x1 = e.touches[0].clientX - offsetLeft; + f1y1 = e.touches[0].clientY - offsetTop; + f2x1 = e.touches[1].clientX - offsetLeft; + f2y1 = e.touches[1].clientY - offsetTop; + twoFingersStartInside = 0 <= f1x1 && f1x1 <= containerWidth && 0 <= f2x1 && f2x1 <= containerWidth && 0 <= f1y1 && f1y1 <= containerHeight && 0 <= f2y1 && f2y1 <= containerHeight; + var pan = cy.pan(); + var zoom = cy.zoom(); + distance1 = distance(f1x1, f1y1, f2x1, f2y1); + distance1Sq = distanceSq(f1x1, f1y1, f2x1, f2y1); + center1 = [(f1x1 + f2x1) / 2, (f1y1 + f2y1) / 2]; + modelCenter1 = [(center1[0] - pan.x) / zoom, (center1[1] - pan.y) / zoom]; + + // consider context tap + var cxtDistThreshold = 200; + var cxtDistThresholdSq = cxtDistThreshold * cxtDistThreshold; + if (distance1Sq < cxtDistThresholdSq && !e.touches[2]) { + var near1 = r.findNearestElement(now[0], now[1], true, true); + var near2 = r.findNearestElement(now[2], now[3], true, true); + if (near1 && near1.isNode()) { + near1.activate().emit({ + originalEvent: e, + type: 'cxttapstart', + position: { + x: now[0], + y: now[1] + } + }); + r.touchData.start = near1; + } else if (near2 && near2.isNode()) { + near2.activate().emit({ + originalEvent: e, + type: 'cxttapstart', + position: { + x: now[0], + y: now[1] + } + }); + r.touchData.start = near2; + } else { + cy.emit({ + originalEvent: e, + type: 'cxttapstart', + position: { + x: now[0], + y: now[1] + } + }); + } + if (r.touchData.start) { + r.touchData.start._private.grabbed = false; + } + r.touchData.cxt = true; + r.touchData.cxtDragged = false; + r.data.bgActivePosistion = undefined; + r.redraw(); + return; + } + } + if (e.touches[2]) { + // ignore + + // safari on ios pans the page otherwise (normally you should be able to preventdefault on touchmove...) + if (cy.boxSelectionEnabled()) { + e.preventDefault(); + } + } else if (e.touches[1]) ; else if (e.touches[0]) { + var nears = r.findNearestElements(now[0], now[1], true, true); + var near = nears[0]; + if (near != null) { + near.activate(); + r.touchData.start = near; + r.touchData.starts = nears; + if (r.nodeIsGrabbable(near)) { + var draggedEles = r.dragData.touchDragEles = cy.collection(); + var selectedNodes = null; + r.redrawHint('eles', true); + r.redrawHint('drag', true); + if (near.selected()) { + // reset drag elements, since near will be added again + + selectedNodes = cy.$(function (ele) { + return ele.selected() && r.nodeIsGrabbable(ele); + }); + addNodesToDrag(selectedNodes, { + addToList: draggedEles + }); + } else { + addNodeToDrag(near, { + addToList: draggedEles + }); + } + setGrabTarget(near); + var makeEvent = function makeEvent(type) { + return { + originalEvent: e, + type: type, + position: { + x: now[0], + y: now[1] + } + }; + }; + near.emit(makeEvent('grabon')); + if (selectedNodes) { + selectedNodes.forEach(function (n) { + n.emit(makeEvent('grab')); + }); + } else { + near.emit(makeEvent('grab')); + } + } + } + triggerEvents(near, ['touchstart', 'tapstart', 'vmousedown'], e, { + x: now[0], + y: now[1] + }); + if (near == null) { + r.data.bgActivePosistion = { + x: pos[0], + y: pos[1] + }; + r.redrawHint('select', true); + r.redraw(); + } + + // Tap, taphold + // ----- + + r.touchData.singleTouchMoved = false; + r.touchData.singleTouchStartTime = +new Date(); + clearTimeout(r.touchData.tapholdTimeout); + r.touchData.tapholdTimeout = setTimeout(function () { + if (r.touchData.singleTouchMoved === false && !r.pinching // if pinching, then taphold unselect shouldn't take effect + && !r.touchData.selecting // box selection shouldn't allow taphold through + ) { + triggerEvents(r.touchData.start, ['taphold'], e, { + x: now[0], + y: now[1] + }); + } + }, r.tapholdDuration); + } + if (e.touches.length >= 1) { + var sPos = r.touchData.startPosition = [null, null, null, null, null, null]; + for (var i = 0; i < now.length; i++) { + sPos[i] = earlier[i] = now[i]; + } + var touch0 = e.touches[0]; + r.touchData.startGPosition = [touch0.clientX, touch0.clientY]; + } + }, false); + var touchmoveHandler; + r.registerBinding(window, 'touchmove', touchmoveHandler = function touchmoveHandler(e) { + // eslint-disable-line no-undef + var capture = r.touchData.capture; + if (!capture && !eventInContainer(e)) { + return; + } + var select = r.selection; + var cy = r.cy; + var now = r.touchData.now; + var earlier = r.touchData.earlier; + var zoom = cy.zoom(); + if (e.touches[0]) { + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + if (e.touches[1]) { + var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); + now[2] = pos[0]; + now[3] = pos[1]; + } + if (e.touches[2]) { + var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); + now[4] = pos[0]; + now[5] = pos[1]; + } + var startGPos = r.touchData.startGPosition; + var isOverThresholdDrag; + if (capture && e.touches[0] && startGPos) { + var disp = []; + for (var j = 0; j < now.length; j++) { + disp[j] = now[j] - earlier[j]; + } + var dx = e.touches[0].clientX - startGPos[0]; + var dx2 = dx * dx; + var dy = e.touches[0].clientY - startGPos[1]; + var dy2 = dy * dy; + var dist2 = dx2 + dy2; + isOverThresholdDrag = dist2 >= r.touchTapThreshold2; + } + + // context swipe cancelling + if (capture && r.touchData.cxt) { + e.preventDefault(); + var f1x2 = e.touches[0].clientX - offsetLeft, + f1y2 = e.touches[0].clientY - offsetTop; + var f2x2 = e.touches[1].clientX - offsetLeft, + f2y2 = e.touches[1].clientY - offsetTop; + // var distance2 = distance( f1x2, f1y2, f2x2, f2y2 ); + var distance2Sq = distanceSq(f1x2, f1y2, f2x2, f2y2); + var factorSq = distance2Sq / distance1Sq; + var distThreshold = 150; + var distThresholdSq = distThreshold * distThreshold; + var factorThreshold = 1.5; + var factorThresholdSq = factorThreshold * factorThreshold; + + // cancel ctx gestures if the distance b/t the fingers increases + if (factorSq >= factorThresholdSq || distance2Sq >= distThresholdSq) { + r.touchData.cxt = false; + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + var cxtEvt = { + originalEvent: e, + type: 'cxttapend', + position: { + x: now[0], + y: now[1] + } + }; + if (r.touchData.start) { + r.touchData.start.unactivate().emit(cxtEvt); + r.touchData.start = null; + } else { + cy.emit(cxtEvt); + } + } + } + + // context swipe + if (capture && r.touchData.cxt) { + var cxtEvt = { + originalEvent: e, + type: 'cxtdrag', + position: { + x: now[0], + y: now[1] + } + }; + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + if (r.touchData.start) { + r.touchData.start.emit(cxtEvt); + } else { + cy.emit(cxtEvt); + } + if (r.touchData.start) { + r.touchData.start._private.grabbed = false; + } + r.touchData.cxtDragged = true; + var near = r.findNearestElement(now[0], now[1], true, true); + if (!r.touchData.cxtOver || near !== r.touchData.cxtOver) { + if (r.touchData.cxtOver) { + r.touchData.cxtOver.emit({ + originalEvent: e, + type: 'cxtdragout', + position: { + x: now[0], + y: now[1] + } + }); + } + r.touchData.cxtOver = near; + if (near) { + near.emit({ + originalEvent: e, + type: 'cxtdragover', + position: { + x: now[0], + y: now[1] + } + }); + } + } + + // box selection + } else if (capture && e.touches[2] && cy.boxSelectionEnabled()) { + e.preventDefault(); + r.data.bgActivePosistion = undefined; + this.lastThreeTouch = +new Date(); + if (!r.touchData.selecting) { + cy.emit({ + originalEvent: e, + type: 'boxstart', + position: { + x: now[0], + y: now[1] + } + }); + } + r.touchData.selecting = true; + r.touchData.didSelect = true; + select[4] = 1; + if (!select || select.length === 0 || select[0] === undefined) { + select[0] = (now[0] + now[2] + now[4]) / 3; + select[1] = (now[1] + now[3] + now[5]) / 3; + select[2] = (now[0] + now[2] + now[4]) / 3 + 1; + select[3] = (now[1] + now[3] + now[5]) / 3 + 1; + } else { + select[2] = (now[0] + now[2] + now[4]) / 3; + select[3] = (now[1] + now[3] + now[5]) / 3; + } + r.redrawHint('select', true); + r.redraw(); + + // pinch to zoom + } else if (capture && e.touches[1] && !r.touchData.didSelect // don't allow box selection to degrade to pinch-to-zoom + && cy.zoomingEnabled() && cy.panningEnabled() && cy.userZoomingEnabled() && cy.userPanningEnabled()) { + // two fingers => pinch to zoom + e.preventDefault(); + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + var draggedEles = r.dragData.touchDragEles; + if (draggedEles) { + r.redrawHint('drag', true); + for (var i = 0; i < draggedEles.length; i++) { + var de_p = draggedEles[i]._private; + de_p.grabbed = false; + de_p.rscratch.inDragLayer = false; + } + } + var _start = r.touchData.start; + + // (x2, y2) for fingers 1 and 2 + var f1x2 = e.touches[0].clientX - offsetLeft, + f1y2 = e.touches[0].clientY - offsetTop; + var f2x2 = e.touches[1].clientX - offsetLeft, + f2y2 = e.touches[1].clientY - offsetTop; + var distance2 = distance(f1x2, f1y2, f2x2, f2y2); + // var distance2Sq = distanceSq( f1x2, f1y2, f2x2, f2y2 ); + // var factor = Math.sqrt( distance2Sq ) / Math.sqrt( distance1Sq ); + var factor = distance2 / distance1; + if (twoFingersStartInside) { + // delta finger1 + var df1x = f1x2 - f1x1; + var df1y = f1y2 - f1y1; + + // delta finger 2 + var df2x = f2x2 - f2x1; + var df2y = f2y2 - f2y1; + + // translation is the normalised vector of the two fingers movement + // i.e. so pinching cancels out and moving together pans + var tx = (df1x + df2x) / 2; + var ty = (df1y + df2y) / 2; + + // now calculate the zoom + var zoom1 = cy.zoom(); + var zoom2 = zoom1 * factor; + var pan1 = cy.pan(); + + // the model center point converted to the current rendered pos + var ctrx = modelCenter1[0] * zoom1 + pan1.x; + var ctry = modelCenter1[1] * zoom1 + pan1.y; + var pan2 = { + x: -zoom2 / zoom1 * (ctrx - pan1.x - tx) + ctrx, + y: -zoom2 / zoom1 * (ctry - pan1.y - ty) + ctry + }; + + // remove dragged eles + if (_start && _start.active()) { + var draggedEles = r.dragData.touchDragEles; + freeDraggedElements(draggedEles); + r.redrawHint('drag', true); + r.redrawHint('eles', true); + _start.unactivate().emit('freeon'); + draggedEles.emit('free'); + if (r.dragData.didDrag) { + _start.emit('dragfreeon'); + draggedEles.emit('dragfree'); + } + } + cy.viewport({ + zoom: zoom2, + pan: pan2, + cancelOnFailedZoom: true + }); + cy.emit('pinchzoom'); + distance1 = distance2; + f1x1 = f1x2; + f1y1 = f1y2; + f2x1 = f2x2; + f2y1 = f2y2; + r.pinching = true; + } + + // Re-project + if (e.touches[0]) { + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + if (e.touches[1]) { + var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); + now[2] = pos[0]; + now[3] = pos[1]; + } + if (e.touches[2]) { + var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); + now[4] = pos[0]; + now[5] = pos[1]; + } + } else if (e.touches[0] && !r.touchData.didSelect // don't allow box selection to degrade to single finger events like panning + ) { + var start = r.touchData.start; + var last = r.touchData.last; + var near; + if (!r.hoverData.draggingEles && !r.swipePanning) { + near = r.findNearestElement(now[0], now[1], true, true); + } + if (capture && start != null) { + e.preventDefault(); + } + + // dragging nodes + if (capture && start != null && r.nodeIsDraggable(start)) { + if (isOverThresholdDrag) { + // then dragging can happen + var draggedEles = r.dragData.touchDragEles; + var justStartedDrag = !r.dragData.didDrag; + if (justStartedDrag) { + addNodesToDrag(draggedEles, { + inDragLayer: true + }); + } + r.dragData.didDrag = true; + var totalShift = { + x: 0, + y: 0 + }; + if (number$1(disp[0]) && number$1(disp[1])) { + totalShift.x += disp[0]; + totalShift.y += disp[1]; + if (justStartedDrag) { + r.redrawHint('eles', true); + var dragDelta = r.touchData.dragDelta; + if (dragDelta && number$1(dragDelta[0]) && number$1(dragDelta[1])) { + totalShift.x += dragDelta[0]; + totalShift.y += dragDelta[1]; + } + } + } + r.hoverData.draggingEles = true; + draggedEles.silentShift(totalShift).emit('position drag'); + r.redrawHint('drag', true); + if (r.touchData.startPosition[0] == earlier[0] && r.touchData.startPosition[1] == earlier[1]) { + r.redrawHint('eles', true); + } + r.redraw(); + } else { + // otherwise keep track of drag delta for later + var dragDelta = r.touchData.dragDelta = r.touchData.dragDelta || []; + if (dragDelta.length === 0) { + dragDelta.push(disp[0]); + dragDelta.push(disp[1]); + } else { + dragDelta[0] += disp[0]; + dragDelta[1] += disp[1]; + } + } + } + + // touchmove + { + triggerEvents(start || near, ['touchmove', 'tapdrag', 'vmousemove'], e, { + x: now[0], + y: now[1] + }); + if ((!start || !start.grabbed()) && near != last) { + if (last) { + last.emit({ + originalEvent: e, + type: 'tapdragout', + position: { + x: now[0], + y: now[1] + } + }); + } + if (near) { + near.emit({ + originalEvent: e, + type: 'tapdragover', + position: { + x: now[0], + y: now[1] + } + }); + } + } + r.touchData.last = near; + } + + // check to cancel taphold + if (capture) { + for (var i = 0; i < now.length; i++) { + if (now[i] && r.touchData.startPosition[i] && isOverThresholdDrag) { + r.touchData.singleTouchMoved = true; + } + } + } + + // panning + if (capture && (start == null || start.pannable()) && cy.panningEnabled() && cy.userPanningEnabled()) { + var allowPassthrough = allowPanningPassthrough(start, r.touchData.starts); + if (allowPassthrough) { + e.preventDefault(); + if (!r.data.bgActivePosistion) { + r.data.bgActivePosistion = array2point(r.touchData.startPosition); + } + if (r.swipePanning) { + cy.panBy({ + x: disp[0] * zoom, + y: disp[1] * zoom + }); + cy.emit('dragpan'); + } else if (isOverThresholdDrag) { + r.swipePanning = true; + cy.panBy({ + x: dx * zoom, + y: dy * zoom + }); + cy.emit('dragpan'); + if (start) { + start.unactivate(); + r.redrawHint('select', true); + r.touchData.start = null; + } + } + } + + // Re-project + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + } + for (var j = 0; j < now.length; j++) { + earlier[j] = now[j]; + } + + // the active bg indicator should be removed when making a swipe that is neither for dragging nodes or panning + if (capture && e.touches.length > 0 && !r.hoverData.draggingEles && !r.swipePanning && r.data.bgActivePosistion != null) { + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + r.redraw(); + } + }, false); + var touchcancelHandler; + r.registerBinding(containerWindow, 'touchcancel', touchcancelHandler = function touchcancelHandler(e) { + // eslint-disable-line no-unused-vars + var start = r.touchData.start; + r.touchData.capture = false; + if (start) { + start.unactivate(); + } + }); + var touchendHandler, didDoubleTouch, touchTimeout, prevTouchTimeStamp; + r.registerBinding(containerWindow, 'touchend', touchendHandler = function touchendHandler(e) { + // eslint-disable-line no-unused-vars + var start = r.touchData.start; + var capture = r.touchData.capture; + if (capture) { + if (e.touches.length === 0) { + r.touchData.capture = false; + } + e.preventDefault(); + } else { + return; + } + var select = r.selection; + r.swipePanning = false; + r.hoverData.draggingEles = false; + var cy = r.cy; + var zoom = cy.zoom(); + var now = r.touchData.now; + var earlier = r.touchData.earlier; + if (e.touches[0]) { + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + if (e.touches[1]) { + var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); + now[2] = pos[0]; + now[3] = pos[1]; + } + if (e.touches[2]) { + var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); + now[4] = pos[0]; + now[5] = pos[1]; + } + if (start) { + start.unactivate(); + } + var ctxTapend; + if (r.touchData.cxt) { + ctxTapend = { + originalEvent: e, + type: 'cxttapend', + position: { + x: now[0], + y: now[1] + } + }; + if (start) { + start.emit(ctxTapend); + } else { + cy.emit(ctxTapend); + } + if (!r.touchData.cxtDragged) { + var ctxTap = { + originalEvent: e, + type: 'cxttap', + position: { + x: now[0], + y: now[1] + } + }; + if (start) { + start.emit(ctxTap); + } else { + cy.emit(ctxTap); + } + } + if (r.touchData.start) { + r.touchData.start._private.grabbed = false; + } + r.touchData.cxt = false; + r.touchData.start = null; + r.redraw(); + return; + } + + // no more box selection if we don't have three fingers + if (!e.touches[2] && cy.boxSelectionEnabled() && r.touchData.selecting) { + r.touchData.selecting = false; + var box = cy.collection(r.getAllInBox(select[0], select[1], select[2], select[3])); + select[0] = undefined; + select[1] = undefined; + select[2] = undefined; + select[3] = undefined; + select[4] = 0; + r.redrawHint('select', true); + cy.emit({ + type: 'boxend', + originalEvent: e, + position: { + x: now[0], + y: now[1] + } + }); + var eleWouldBeSelected = function eleWouldBeSelected(ele) { + return ele.selectable() && !ele.selected(); + }; + box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect'); + if (box.nonempty()) { + r.redrawHint('eles', true); + } + r.redraw(); + } + if (start != null) { + start.unactivate(); + } + if (e.touches[2]) { + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + } else if (e.touches[1]) ; else if (e.touches[0]) ; else if (!e.touches[0]) { + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + var draggedEles = r.dragData.touchDragEles; + if (start != null) { + var startWasGrabbed = start._private.grabbed; + freeDraggedElements(draggedEles); + r.redrawHint('drag', true); + r.redrawHint('eles', true); + if (startWasGrabbed) { + start.emit('freeon'); + draggedEles.emit('free'); + if (r.dragData.didDrag) { + start.emit('dragfreeon'); + draggedEles.emit('dragfree'); + } + } + triggerEvents(start, ['touchend', 'tapend', 'vmouseup', 'tapdragout'], e, { + x: now[0], + y: now[1] + }); + start.unactivate(); + r.touchData.start = null; + } else { + var near = r.findNearestElement(now[0], now[1], true, true); + triggerEvents(near, ['touchend', 'tapend', 'vmouseup', 'tapdragout'], e, { + x: now[0], + y: now[1] + }); + } + var dx = r.touchData.startPosition[0] - now[0]; + var dx2 = dx * dx; + var dy = r.touchData.startPosition[1] - now[1]; + var dy2 = dy * dy; + var dist2 = dx2 + dy2; + var rdist2 = dist2 * zoom * zoom; + + // Tap event, roughly same as mouse click event for touch + if (!r.touchData.singleTouchMoved) { + if (!start) { + cy.$(':selected').unselect(['tapunselect']); + } + triggerEvents(start, ['tap', 'vclick'], e, { + x: now[0], + y: now[1] + }); + didDoubleTouch = false; + if (e.timeStamp - prevTouchTimeStamp <= cy.multiClickDebounceTime()) { + touchTimeout && clearTimeout(touchTimeout); + didDoubleTouch = true; + prevTouchTimeStamp = null; + triggerEvents(start, ['dbltap', 'vdblclick'], e, { + x: now[0], + y: now[1] + }); + } else { + touchTimeout = setTimeout(function () { + if (didDoubleTouch) return; + triggerEvents(start, ['onetap', 'voneclick'], e, { + x: now[0], + y: now[1] + }); + }, cy.multiClickDebounceTime()); + prevTouchTimeStamp = e.timeStamp; + } + } + + // Prepare to select the currently touched node, only if it hasn't been dragged past a certain distance + if (start != null && !r.dragData.didDrag // didn't drag nodes around + && start._private.selectable && rdist2 < r.touchTapThreshold2 && !r.pinching // pinch to zoom should not affect selection + ) { + if (cy.selectionType() === 'single') { + cy.$(isSelected).unmerge(start).unselect(['tapunselect']); + start.select(['tapselect']); + } else { + if (start.selected()) { + start.unselect(['tapunselect']); + } else { + start.select(['tapselect']); + } + } + r.redrawHint('eles', true); + } + r.touchData.singleTouchMoved = true; + } + for (var j = 0; j < now.length; j++) { + earlier[j] = now[j]; + } + r.dragData.didDrag = false; // reset for next touchstart + + if (e.touches.length === 0) { + r.touchData.dragDelta = []; + r.touchData.startPosition = [null, null, null, null, null, null]; + r.touchData.startGPosition = null; + r.touchData.didSelect = false; + } + if (e.touches.length < 2) { + if (e.touches.length === 1) { + // the old start global pos'n may not be the same finger that remains + r.touchData.startGPosition = [e.touches[0].clientX, e.touches[0].clientY]; + } + r.pinching = false; + r.redrawHint('eles', true); + r.redraw(); + } + + //r.redraw(); + }, false); + + // fallback compatibility layer for ms pointer events + if (typeof TouchEvent === 'undefined') { + var pointers = []; + var makeTouch = function makeTouch(e) { + return { + clientX: e.clientX, + clientY: e.clientY, + force: 1, + identifier: e.pointerId, + pageX: e.pageX, + pageY: e.pageY, + radiusX: e.width / 2, + radiusY: e.height / 2, + screenX: e.screenX, + screenY: e.screenY, + target: e.target + }; + }; + var makePointer = function makePointer(e) { + return { + event: e, + touch: makeTouch(e) + }; + }; + var addPointer = function addPointer(e) { + pointers.push(makePointer(e)); + }; + var removePointer = function removePointer(e) { + for (var i = 0; i < pointers.length; i++) { + var p = pointers[i]; + if (p.event.pointerId === e.pointerId) { + pointers.splice(i, 1); + return; + } + } + }; + var updatePointer = function updatePointer(e) { + var p = pointers.filter(function (p) { + return p.event.pointerId === e.pointerId; + })[0]; + p.event = e; + p.touch = makeTouch(e); + }; + var addTouchesToEvent = function addTouchesToEvent(e) { + e.touches = pointers.map(function (p) { + return p.touch; + }); + }; + var pointerIsMouse = function pointerIsMouse(e) { + return e.pointerType === 'mouse' || e.pointerType === 4; + }; + r.registerBinding(r.container, 'pointerdown', function (e) { + if (pointerIsMouse(e)) { + return; + } // mouse already handled + + e.preventDefault(); + addPointer(e); + addTouchesToEvent(e); + touchstartHandler(e); + }); + r.registerBinding(r.container, 'pointerup', function (e) { + if (pointerIsMouse(e)) { + return; + } // mouse already handled + + removePointer(e); + addTouchesToEvent(e); + touchendHandler(e); + }); + r.registerBinding(r.container, 'pointercancel', function (e) { + if (pointerIsMouse(e)) { + return; + } // mouse already handled + + removePointer(e); + addTouchesToEvent(e); + touchcancelHandler(e); + }); + r.registerBinding(r.container, 'pointermove', function (e) { + if (pointerIsMouse(e)) { + return; + } // mouse already handled + + e.preventDefault(); + updatePointer(e); + addTouchesToEvent(e); + touchmoveHandler(e); + }); + } +}; + +var BRp$2 = {}; +BRp$2.generatePolygon = function (name, points) { + return this.nodeShapes[name] = { + renderer: this, + name: name, + points: points, + draw: function draw(context, centerX, centerY, width, height, cornerRadius) { + this.renderer.nodeShapeImpl('polygon', context, centerX, centerY, width, height, this.points); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding, cornerRadius) { + return polygonIntersectLine(x, y, this.points, nodeX, nodeY, width / 2, height / 2, padding); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY, cornerRadius) { + return pointInsidePolygon(x, y, this.points, centerX, centerY, width, height, [0, -1], padding); + } + }; +}; +BRp$2.generateEllipse = function () { + return this.nodeShapes['ellipse'] = { + renderer: this, + name: 'ellipse', + draw: function draw(context, centerX, centerY, width, height, cornerRadius) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding, cornerRadius) { + return intersectLineEllipse(x, y, nodeX, nodeY, width / 2 + padding, height / 2 + padding); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY, cornerRadius) { + return checkInEllipse(x, y, width, height, centerX, centerY, padding); + } + }; +}; +BRp$2.generateRoundPolygon = function (name, points) { + return this.nodeShapes[name] = { + renderer: this, + name: name, + points: points, + getOrCreateCorners: function getOrCreateCorners(centerX, centerY, width, height, cornerRadius, rs, field) { + if (rs[field] !== undefined && rs[field + '-cx'] === centerX && rs[field + '-cy'] === centerY) { + return rs[field]; + } + rs[field] = new Array(points.length / 2); + rs[field + '-cx'] = centerX; + rs[field + '-cy'] = centerY; + var halfW = width / 2; + var halfH = height / 2; + cornerRadius = cornerRadius === 'auto' ? getRoundPolygonRadius(width, height) : cornerRadius; + var p = new Array(points.length / 2); + for (var _i = 0; _i < points.length / 2; _i++) { + p[_i] = { + x: centerX + halfW * points[_i * 2], + y: centerY + halfH * points[_i * 2 + 1] + }; + } + var i, + p1, + p2, + p3, + len = p.length; + p1 = p[len - 1]; + // for each point + for (i = 0; i < len; i++) { + p2 = p[i % len]; + p3 = p[(i + 1) % len]; + rs[field][i] = getRoundCorner(p1, p2, p3, cornerRadius); + p1 = p2; + p2 = p3; + } + return rs[field]; + }, + draw: function draw(context, centerX, centerY, width, height, cornerRadius, rs) { + this.renderer.nodeShapeImpl('round-polygon', context, centerX, centerY, width, height, this.points, this.getOrCreateCorners(centerX, centerY, width, height, cornerRadius, rs, 'drawCorners')); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding, cornerRadius, rs) { + return roundPolygonIntersectLine(x, y, this.points, nodeX, nodeY, width, height, padding, this.getOrCreateCorners(nodeX, nodeY, width, height, cornerRadius, rs, 'corners')); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY, cornerRadius, rs) { + return pointInsideRoundPolygon(x, y, this.points, centerX, centerY, width, height, this.getOrCreateCorners(centerX, centerY, width, height, cornerRadius, rs, 'corners')); + } + }; +}; +BRp$2.generateRoundRectangle = function () { + return this.nodeShapes['round-rectangle'] = this.nodeShapes['roundrectangle'] = { + renderer: this, + name: 'round-rectangle', + points: generateUnitNgonPointsFitToSquare(4, 0), + draw: function draw(context, centerX, centerY, width, height, cornerRadius) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height, this.points, cornerRadius); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding, cornerRadius) { + return roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding, cornerRadius); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY, cornerRadius) { + var halfWidth = width / 2; + var halfHeight = height / 2; + cornerRadius = cornerRadius === 'auto' ? getRoundRectangleRadius(width, height) : cornerRadius; + cornerRadius = Math.min(halfWidth, halfHeight, cornerRadius); + var diam = cornerRadius * 2; + + // Check hBox + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - diam, [0, -1], padding)) { + return true; + } + + // Check vBox + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - diam, height, [0, -1], padding)) { + return true; + } + + // Check top left quarter circle + if (checkInEllipse(x, y, diam, diam, centerX - halfWidth + cornerRadius, centerY - halfHeight + cornerRadius, padding)) { + return true; + } + + // Check top right quarter circle + if (checkInEllipse(x, y, diam, diam, centerX + halfWidth - cornerRadius, centerY - halfHeight + cornerRadius, padding)) { + return true; + } + + // Check bottom right quarter circle + if (checkInEllipse(x, y, diam, diam, centerX + halfWidth - cornerRadius, centerY + halfHeight - cornerRadius, padding)) { + return true; + } + + // Check bottom left quarter circle + if (checkInEllipse(x, y, diam, diam, centerX - halfWidth + cornerRadius, centerY + halfHeight - cornerRadius, padding)) { + return true; + } + return false; + } + }; +}; +BRp$2.generateCutRectangle = function () { + return this.nodeShapes['cut-rectangle'] = this.nodeShapes['cutrectangle'] = { + renderer: this, + name: 'cut-rectangle', + cornerLength: getCutRectangleCornerLength(), + points: generateUnitNgonPointsFitToSquare(4, 0), + draw: function draw(context, centerX, centerY, width, height, cornerRadius) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height, null, cornerRadius); + }, + generateCutTrianglePts: function generateCutTrianglePts(width, height, centerX, centerY, cornerRadius) { + var cl = cornerRadius === 'auto' ? this.cornerLength : cornerRadius; + var hh = height / 2; + var hw = width / 2; + var xBegin = centerX - hw; + var xEnd = centerX + hw; + var yBegin = centerY - hh; + var yEnd = centerY + hh; + + // points are in clockwise order, inner (imaginary) triangle pt on [4, 5] + return { + topLeft: [xBegin, yBegin + cl, xBegin + cl, yBegin, xBegin + cl, yBegin + cl], + topRight: [xEnd - cl, yBegin, xEnd, yBegin + cl, xEnd - cl, yBegin + cl], + bottomRight: [xEnd, yEnd - cl, xEnd - cl, yEnd, xEnd - cl, yEnd - cl], + bottomLeft: [xBegin + cl, yEnd, xBegin, yEnd - cl, xBegin + cl, yEnd - cl] + }; + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding, cornerRadius) { + var cPts = this.generateCutTrianglePts(width + 2 * padding, height + 2 * padding, nodeX, nodeY, cornerRadius); + var pts = [].concat.apply([], [cPts.topLeft.splice(0, 4), cPts.topRight.splice(0, 4), cPts.bottomRight.splice(0, 4), cPts.bottomLeft.splice(0, 4)]); + return polygonIntersectLine(x, y, pts, nodeX, nodeY); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY, cornerRadius) { + var cl = cornerRadius === 'auto' ? this.cornerLength : cornerRadius; + // Check hBox + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - 2 * cl, [0, -1], padding)) { + return true; + } + + // Check vBox + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - 2 * cl, height, [0, -1], padding)) { + return true; + } + var cutTrianglePts = this.generateCutTrianglePts(width, height, centerX, centerY); + return pointInsidePolygonPoints(x, y, cutTrianglePts.topLeft) || pointInsidePolygonPoints(x, y, cutTrianglePts.topRight) || pointInsidePolygonPoints(x, y, cutTrianglePts.bottomRight) || pointInsidePolygonPoints(x, y, cutTrianglePts.bottomLeft); + } + }; +}; +BRp$2.generateBarrel = function () { + return this.nodeShapes['barrel'] = { + renderer: this, + name: 'barrel', + points: generateUnitNgonPointsFitToSquare(4, 0), + draw: function draw(context, centerX, centerY, width, height, cornerRadius) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding, cornerRadius) { + // use two fixed t values for the bezier curve approximation + + var t0 = 0.15; + var t1 = 0.5; + var t2 = 0.85; + var bPts = this.generateBarrelBezierPts(width + 2 * padding, height + 2 * padding, nodeX, nodeY); + var approximateBarrelCurvePts = function approximateBarrelCurvePts(pts) { + // approximate curve pts based on the two t values + var m0 = qbezierPtAt({ + x: pts[0], + y: pts[1] + }, { + x: pts[2], + y: pts[3] + }, { + x: pts[4], + y: pts[5] + }, t0); + var m1 = qbezierPtAt({ + x: pts[0], + y: pts[1] + }, { + x: pts[2], + y: pts[3] + }, { + x: pts[4], + y: pts[5] + }, t1); + var m2 = qbezierPtAt({ + x: pts[0], + y: pts[1] + }, { + x: pts[2], + y: pts[3] + }, { + x: pts[4], + y: pts[5] + }, t2); + return [pts[0], pts[1], m0.x, m0.y, m1.x, m1.y, m2.x, m2.y, pts[4], pts[5]]; + }; + var pts = [].concat(approximateBarrelCurvePts(bPts.topLeft), approximateBarrelCurvePts(bPts.topRight), approximateBarrelCurvePts(bPts.bottomRight), approximateBarrelCurvePts(bPts.bottomLeft)); + return polygonIntersectLine(x, y, pts, nodeX, nodeY); + }, + generateBarrelBezierPts: function generateBarrelBezierPts(width, height, centerX, centerY) { + var hh = height / 2; + var hw = width / 2; + var xBegin = centerX - hw; + var xEnd = centerX + hw; + var yBegin = centerY - hh; + var yEnd = centerY + hh; + var curveConstants = getBarrelCurveConstants(width, height); + var hOffset = curveConstants.heightOffset; + var wOffset = curveConstants.widthOffset; + var ctrlPtXOffset = curveConstants.ctrlPtOffsetPct * width; + + // points are in clockwise order, inner (imaginary) control pt on [4, 5] + var pts = { + topLeft: [xBegin, yBegin + hOffset, xBegin + ctrlPtXOffset, yBegin, xBegin + wOffset, yBegin], + topRight: [xEnd - wOffset, yBegin, xEnd - ctrlPtXOffset, yBegin, xEnd, yBegin + hOffset], + bottomRight: [xEnd, yEnd - hOffset, xEnd - ctrlPtXOffset, yEnd, xEnd - wOffset, yEnd], + bottomLeft: [xBegin + wOffset, yEnd, xBegin + ctrlPtXOffset, yEnd, xBegin, yEnd - hOffset] + }; + pts.topLeft.isTop = true; + pts.topRight.isTop = true; + pts.bottomLeft.isBottom = true; + pts.bottomRight.isBottom = true; + return pts; + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY, cornerRadius) { + var curveConstants = getBarrelCurveConstants(width, height); + var hOffset = curveConstants.heightOffset; + var wOffset = curveConstants.widthOffset; + + // Check hBox + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - 2 * hOffset, [0, -1], padding)) { + return true; + } + + // Check vBox + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - 2 * wOffset, height, [0, -1], padding)) { + return true; + } + var barrelCurvePts = this.generateBarrelBezierPts(width, height, centerX, centerY); + var getCurveT = function getCurveT(x, y, curvePts) { + var x0 = curvePts[4]; + var x1 = curvePts[2]; + var x2 = curvePts[0]; + var y0 = curvePts[5]; + // var y1 = curvePts[ 3 ]; + var y2 = curvePts[1]; + var xMin = Math.min(x0, x2); + var xMax = Math.max(x0, x2); + var yMin = Math.min(y0, y2); + var yMax = Math.max(y0, y2); + if (xMin <= x && x <= xMax && yMin <= y && y <= yMax) { + var coeff = bezierPtsToQuadCoeff(x0, x1, x2); + var roots = solveQuadratic(coeff[0], coeff[1], coeff[2], x); + var validRoots = roots.filter(function (r) { + return 0 <= r && r <= 1; + }); + if (validRoots.length > 0) { + return validRoots[0]; + } + } + return null; + }; + var curveRegions = Object.keys(barrelCurvePts); + for (var i = 0; i < curveRegions.length; i++) { + var corner = curveRegions[i]; + var cornerPts = barrelCurvePts[corner]; + var t = getCurveT(x, y, cornerPts); + if (t == null) { + continue; + } + var y0 = cornerPts[5]; + var y1 = cornerPts[3]; + var y2 = cornerPts[1]; + var bezY = qbezierAt(y0, y1, y2, t); + if (cornerPts.isTop && bezY <= y) { + return true; + } + if (cornerPts.isBottom && y <= bezY) { + return true; + } + } + return false; + } + }; +}; +BRp$2.generateBottomRoundrectangle = function () { + return this.nodeShapes['bottom-round-rectangle'] = this.nodeShapes['bottomroundrectangle'] = { + renderer: this, + name: 'bottom-round-rectangle', + points: generateUnitNgonPointsFitToSquare(4, 0), + draw: function draw(context, centerX, centerY, width, height, cornerRadius) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height, this.points, cornerRadius); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding, cornerRadius) { + var topStartX = nodeX - (width / 2 + padding); + var topStartY = nodeY - (height / 2 + padding); + var topEndY = topStartY; + var topEndX = nodeX + (width / 2 + padding); + var topIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false); + if (topIntersections.length > 0) { + return topIntersections; + } + return roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding, cornerRadius); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY, cornerRadius) { + cornerRadius = cornerRadius === 'auto' ? getRoundRectangleRadius(width, height) : cornerRadius; + var diam = 2 * cornerRadius; + + // Check hBox + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - diam, [0, -1], padding)) { + return true; + } + + // Check vBox + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - diam, height, [0, -1], padding)) { + return true; + } + + // check non-rounded top side + var outerWidth = width / 2 + 2 * padding; + var outerHeight = height / 2 + 2 * padding; + var points = [centerX - outerWidth, centerY - outerHeight, centerX - outerWidth, centerY, centerX + outerWidth, centerY, centerX + outerWidth, centerY - outerHeight]; + if (pointInsidePolygonPoints(x, y, points)) { + return true; + } + + // Check bottom right quarter circle + if (checkInEllipse(x, y, diam, diam, centerX + width / 2 - cornerRadius, centerY + height / 2 - cornerRadius, padding)) { + return true; + } + + // Check bottom left quarter circle + if (checkInEllipse(x, y, diam, diam, centerX - width / 2 + cornerRadius, centerY + height / 2 - cornerRadius, padding)) { + return true; + } + return false; + } + }; +}; +BRp$2.registerNodeShapes = function () { + var nodeShapes = this.nodeShapes = {}; + var renderer = this; + this.generateEllipse(); + this.generatePolygon('triangle', generateUnitNgonPointsFitToSquare(3, 0)); + this.generateRoundPolygon('round-triangle', generateUnitNgonPointsFitToSquare(3, 0)); + this.generatePolygon('rectangle', generateUnitNgonPointsFitToSquare(4, 0)); + nodeShapes['square'] = nodeShapes['rectangle']; + this.generateRoundRectangle(); + this.generateCutRectangle(); + this.generateBarrel(); + this.generateBottomRoundrectangle(); + { + var diamondPoints = [0, 1, 1, 0, 0, -1, -1, 0]; + this.generatePolygon('diamond', diamondPoints); + this.generateRoundPolygon('round-diamond', diamondPoints); + } + this.generatePolygon('pentagon', generateUnitNgonPointsFitToSquare(5, 0)); + this.generateRoundPolygon('round-pentagon', generateUnitNgonPointsFitToSquare(5, 0)); + this.generatePolygon('hexagon', generateUnitNgonPointsFitToSquare(6, 0)); + this.generateRoundPolygon('round-hexagon', generateUnitNgonPointsFitToSquare(6, 0)); + this.generatePolygon('heptagon', generateUnitNgonPointsFitToSquare(7, 0)); + this.generateRoundPolygon('round-heptagon', generateUnitNgonPointsFitToSquare(7, 0)); + this.generatePolygon('octagon', generateUnitNgonPointsFitToSquare(8, 0)); + this.generateRoundPolygon('round-octagon', generateUnitNgonPointsFitToSquare(8, 0)); + var star5Points = new Array(20); + { + var outerPoints = generateUnitNgonPoints(5, 0); + var innerPoints = generateUnitNgonPoints(5, Math.PI / 5); + + // Outer radius is 1; inner radius of star is smaller + var innerRadius = 0.5 * (3 - Math.sqrt(5)); + innerRadius *= 1.57; + for (var i = 0; i < innerPoints.length / 2; i++) { + innerPoints[i * 2] *= innerRadius; + innerPoints[i * 2 + 1] *= innerRadius; + } + for (var i = 0; i < 20 / 4; i++) { + star5Points[i * 4] = outerPoints[i * 2]; + star5Points[i * 4 + 1] = outerPoints[i * 2 + 1]; + star5Points[i * 4 + 2] = innerPoints[i * 2]; + star5Points[i * 4 + 3] = innerPoints[i * 2 + 1]; + } + } + star5Points = fitPolygonToSquare(star5Points); + this.generatePolygon('star', star5Points); + this.generatePolygon('vee', [-1, -1, 0, -0.333, 1, -1, 0, 1]); + this.generatePolygon('rhomboid', [-1, -1, 0.333, -1, 1, 1, -0.333, 1]); + this.generatePolygon('right-rhomboid', [-0.333, -1, 1, -1, 0.333, 1, -1, 1]); + this.nodeShapes['concavehexagon'] = this.generatePolygon('concave-hexagon', [-1, -0.95, -0.75, 0, -1, 0.95, 1, 0.95, 0.75, 0, 1, -0.95]); + { + var tagPoints = [-1, -1, 0.25, -1, 1, 0, 0.25, 1, -1, 1]; + this.generatePolygon('tag', tagPoints); + this.generateRoundPolygon('round-tag', tagPoints); + } + nodeShapes.makePolygon = function (points) { + // use caching on user-specified polygons so they are as fast as native shapes + + var key = points.join('$'); + var name = 'polygon-' + key; + var shape; + if (shape = this[name]) { + // got cached shape + return shape; + } + + // create and cache new shape + return renderer.generatePolygon(name, points); + }; +}; + +var BRp$1 = {}; +BRp$1.timeToRender = function () { + return this.redrawTotalTime / this.redrawCount; +}; +BRp$1.redraw = function (options) { + options = options || staticEmptyObject(); + var r = this; + if (r.averageRedrawTime === undefined) { + r.averageRedrawTime = 0; + } + if (r.lastRedrawTime === undefined) { + r.lastRedrawTime = 0; + } + if (r.lastDrawTime === undefined) { + r.lastDrawTime = 0; + } + r.requestedFrame = true; + r.renderOptions = options; +}; +BRp$1.beforeRender = function (fn, priority) { + // the renderer can't add tick callbacks when destroyed + if (this.destroyed) { + return; + } + if (priority == null) { + error('Priority is not optional for beforeRender'); + } + var cbs = this.beforeRenderCallbacks; + cbs.push({ + fn: fn, + priority: priority + }); + + // higher priority callbacks executed first + cbs.sort(function (a, b) { + return b.priority - a.priority; + }); +}; +var beforeRenderCallbacks = function beforeRenderCallbacks(r, willDraw, startTime) { + var cbs = r.beforeRenderCallbacks; + for (var i = 0; i < cbs.length; i++) { + cbs[i].fn(willDraw, startTime); + } +}; +BRp$1.startRenderLoop = function () { + var r = this; + var cy = r.cy; + if (r.renderLoopStarted) { + return; + } else { + r.renderLoopStarted = true; + } + var renderFn = function renderFn(requestTime) { + if (r.destroyed) { + return; + } + if (cy.batching()) ; else if (r.requestedFrame && !r.skipFrame) { + beforeRenderCallbacks(r, true, requestTime); + var startTime = performanceNow(); + r.render(r.renderOptions); + var endTime = r.lastDrawTime = performanceNow(); + if (r.averageRedrawTime === undefined) { + r.averageRedrawTime = endTime - startTime; + } + if (r.redrawCount === undefined) { + r.redrawCount = 0; + } + r.redrawCount++; + if (r.redrawTotalTime === undefined) { + r.redrawTotalTime = 0; + } + var duration = endTime - startTime; + r.redrawTotalTime += duration; + r.lastRedrawTime = duration; + + // use a weighted average with a bias from the previous average so we don't spike so easily + r.averageRedrawTime = r.averageRedrawTime / 2 + duration / 2; + r.requestedFrame = false; + } else { + beforeRenderCallbacks(r, false, requestTime); + } + r.skipFrame = false; + requestAnimationFrame(renderFn); + }; + requestAnimationFrame(renderFn); +}; + +var BaseRenderer = function BaseRenderer(options) { + this.init(options); +}; +var BR = BaseRenderer; +var BRp = BR.prototype; +BRp.clientFunctions = ['redrawHint', 'render', 'renderTo', 'matchCanvasSize', 'nodeShapeImpl', 'arrowShapeImpl']; +BRp.init = function (options) { + var r = this; + r.options = options; + r.cy = options.cy; + var ctr = r.container = options.cy.container(); + var containerWindow = r.cy.window(); + + // prepend a stylesheet in the head such that + if (containerWindow) { + var document = containerWindow.document; + var head = document.head; + var stylesheetId = '__________cytoscape_stylesheet'; + var className = '__________cytoscape_container'; + var stylesheetAlreadyExists = document.getElementById(stylesheetId) != null; + if (ctr.className.indexOf(className) < 0) { + ctr.className = (ctr.className || '') + ' ' + className; + } + if (!stylesheetAlreadyExists) { + var stylesheet = document.createElement('style'); + stylesheet.id = stylesheetId; + stylesheet.textContent = '.' + className + ' { position: relative; }'; + head.insertBefore(stylesheet, head.children[0]); // first so lowest priority + } + + var computedStyle = containerWindow.getComputedStyle(ctr); + var position = computedStyle.getPropertyValue('position'); + if (position === 'static') { + warn('A Cytoscape container has style position:static and so can not use UI extensions properly'); + } + } + r.selection = [undefined, undefined, undefined, undefined, 0]; // Coordinates for selection box, plus enabled flag + + r.bezierProjPcts = [0.05, 0.225, 0.4, 0.5, 0.6, 0.775, 0.95]; + + //--Pointer-related data + r.hoverData = { + down: null, + last: null, + downTime: null, + triggerMode: null, + dragging: false, + initialPan: [null, null], + capture: false + }; + r.dragData = { + possibleDragElements: [] + }; + r.touchData = { + start: null, + capture: false, + // These 3 fields related to tap, taphold events + startPosition: [null, null, null, null, null, null], + singleTouchStartTime: null, + singleTouchMoved: true, + now: [null, null, null, null, null, null], + earlier: [null, null, null, null, null, null] + }; + r.redraws = 0; + r.showFps = options.showFps; + r.debug = options.debug; + r.hideEdgesOnViewport = options.hideEdgesOnViewport; + r.textureOnViewport = options.textureOnViewport; + r.wheelSensitivity = options.wheelSensitivity; + r.motionBlurEnabled = options.motionBlur; // on by default + r.forcedPixelRatio = number$1(options.pixelRatio) ? options.pixelRatio : null; + r.motionBlur = options.motionBlur; // for initial kick off + r.motionBlurOpacity = options.motionBlurOpacity; + r.motionBlurTransparency = 1 - r.motionBlurOpacity; + r.motionBlurPxRatio = 1; + r.mbPxRBlurry = 1; //0.8; + r.minMbLowQualFrames = 4; + r.fullQualityMb = false; + r.clearedForMotionBlur = []; + r.desktopTapThreshold = options.desktopTapThreshold; + r.desktopTapThreshold2 = options.desktopTapThreshold * options.desktopTapThreshold; + r.touchTapThreshold = options.touchTapThreshold; + r.touchTapThreshold2 = options.touchTapThreshold * options.touchTapThreshold; + r.tapholdDuration = 500; + r.bindings = []; + r.beforeRenderCallbacks = []; + r.beforeRenderPriorities = { + // higher priority execs before lower one + animations: 400, + eleCalcs: 300, + eleTxrDeq: 200, + lyrTxrDeq: 150, + lyrTxrSkip: 100 + }; + r.registerNodeShapes(); + r.registerArrowShapes(); + r.registerCalculationListeners(); +}; +BRp.notify = function (eventName, eles) { + var r = this; + var cy = r.cy; + + // the renderer can't be notified after it's destroyed + if (this.destroyed) { + return; + } + if (eventName === 'init') { + r.load(); + return; + } + if (eventName === 'destroy') { + r.destroy(); + return; + } + if (eventName === 'add' || eventName === 'remove' || eventName === 'move' && cy.hasCompoundNodes() || eventName === 'load' || eventName === 'zorder' || eventName === 'mount') { + r.invalidateCachedZSortedEles(); + } + if (eventName === 'viewport') { + r.redrawHint('select', true); + } + if (eventName === 'load' || eventName === 'resize' || eventName === 'mount') { + r.invalidateContainerClientCoordsCache(); + r.matchCanvasSize(r.container); + } + r.redrawHint('eles', true); + r.redrawHint('drag', true); + this.startRenderLoop(); + this.redraw(); +}; +BRp.destroy = function () { + var r = this; + r.destroyed = true; + r.cy.stopAnimationLoop(); + for (var i = 0; i < r.bindings.length; i++) { + var binding = r.bindings[i]; + var b = binding; + var tgt = b.target; + (tgt.off || tgt.removeEventListener).apply(tgt, b.args); + } + r.bindings = []; + r.beforeRenderCallbacks = []; + r.onUpdateEleCalcsFns = []; + if (r.removeObserver) { + r.removeObserver.disconnect(); + } + if (r.styleObserver) { + r.styleObserver.disconnect(); + } + if (r.resizeObserver) { + r.resizeObserver.disconnect(); + } + if (r.labelCalcDiv) { + try { + document.body.removeChild(r.labelCalcDiv); // eslint-disable-line no-undef + } catch (e) { + // ie10 issue #1014 + } + } +}; +BRp.isHeadless = function () { + return false; +}; +[BRp$f, BRp$5, BRp$4, BRp$3, BRp$2, BRp$1].forEach(function (props) { + extend(BRp, props); +}); + +var fullFpsTime = 1000 / 60; // assume 60 frames per second + +var defs = { + setupDequeueing: function setupDequeueing(opts) { + return function setupDequeueingImpl() { + var self = this; + var r = this.renderer; + if (self.dequeueingSetup) { + return; + } else { + self.dequeueingSetup = true; + } + var queueRedraw = debounce_1(function () { + r.redrawHint('eles', true); + r.redrawHint('drag', true); + r.redraw(); + }, opts.deqRedrawThreshold); + var dequeue = function dequeue(willDraw, frameStartTime) { + var startTime = performanceNow(); + var avgRenderTime = r.averageRedrawTime; + var renderTime = r.lastRedrawTime; + var deqd = []; + var extent = r.cy.extent(); + var pixelRatio = r.getPixelRatio(); + + // if we aren't in a tick that causes a draw, then the rendered style + // queue won't automatically be flushed before dequeueing starts + if (!willDraw) { + r.flushRenderedStyleQueue(); + } + while (true) { + // eslint-disable-line no-constant-condition + var now = performanceNow(); + var duration = now - startTime; + var frameDuration = now - frameStartTime; + if (renderTime < fullFpsTime) { + // if we're rendering faster than the ideal fps, then do dequeueing + // during all of the remaining frame time + + var timeAvailable = fullFpsTime - (willDraw ? avgRenderTime : 0); + if (frameDuration >= opts.deqFastCost * timeAvailable) { + break; + } + } else { + if (willDraw) { + if (duration >= opts.deqCost * renderTime || duration >= opts.deqAvgCost * avgRenderTime) { + break; + } + } else if (frameDuration >= opts.deqNoDrawCost * fullFpsTime) { + break; + } + } + var thisDeqd = opts.deq(self, pixelRatio, extent); + if (thisDeqd.length > 0) { + for (var i = 0; i < thisDeqd.length; i++) { + deqd.push(thisDeqd[i]); + } + } else { + break; + } + } + + // callbacks on dequeue + if (deqd.length > 0) { + opts.onDeqd(self, deqd); + if (!willDraw && opts.shouldRedraw(self, deqd, pixelRatio, extent)) { + queueRedraw(); + } + } + }; + var priority = opts.priority || noop$1; + r.beforeRender(dequeue, priority(self)); + }; + } +}; + +// Allows lookups for (ele, lvl) => cache. +// Uses keys so elements may share the same cache. +var ElementTextureCacheLookup = /*#__PURE__*/function () { + function ElementTextureCacheLookup(getKey) { + var doesEleInvalidateKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : falsify; + _classCallCheck(this, ElementTextureCacheLookup); + this.idsByKey = new Map$2(); + this.keyForId = new Map$2(); + this.cachesByLvl = new Map$2(); + this.lvls = []; + this.getKey = getKey; + this.doesEleInvalidateKey = doesEleInvalidateKey; + } + _createClass(ElementTextureCacheLookup, [{ + key: "getIdsFor", + value: function getIdsFor(key) { + if (key == null) { + error("Can not get id list for null key"); + } + var idsByKey = this.idsByKey; + var ids = this.idsByKey.get(key); + if (!ids) { + ids = new Set$1(); + idsByKey.set(key, ids); + } + return ids; + } + }, { + key: "addIdForKey", + value: function addIdForKey(key, id) { + if (key != null) { + this.getIdsFor(key).add(id); + } + } + }, { + key: "deleteIdForKey", + value: function deleteIdForKey(key, id) { + if (key != null) { + this.getIdsFor(key)["delete"](id); + } + } + }, { + key: "getNumberOfIdsForKey", + value: function getNumberOfIdsForKey(key) { + if (key == null) { + return 0; + } else { + return this.getIdsFor(key).size; + } + } + }, { + key: "updateKeyMappingFor", + value: function updateKeyMappingFor(ele) { + var id = ele.id(); + var prevKey = this.keyForId.get(id); + var currKey = this.getKey(ele); + this.deleteIdForKey(prevKey, id); + this.addIdForKey(currKey, id); + this.keyForId.set(id, currKey); + } + }, { + key: "deleteKeyMappingFor", + value: function deleteKeyMappingFor(ele) { + var id = ele.id(); + var prevKey = this.keyForId.get(id); + this.deleteIdForKey(prevKey, id); + this.keyForId["delete"](id); + } + }, { + key: "keyHasChangedFor", + value: function keyHasChangedFor(ele) { + var id = ele.id(); + var prevKey = this.keyForId.get(id); + var newKey = this.getKey(ele); + return prevKey !== newKey; + } + }, { + key: "isInvalid", + value: function isInvalid(ele) { + return this.keyHasChangedFor(ele) || this.doesEleInvalidateKey(ele); + } + }, { + key: "getCachesAt", + value: function getCachesAt(lvl) { + var cachesByLvl = this.cachesByLvl, + lvls = this.lvls; + var caches = cachesByLvl.get(lvl); + if (!caches) { + caches = new Map$2(); + cachesByLvl.set(lvl, caches); + lvls.push(lvl); + } + return caches; + } + }, { + key: "getCache", + value: function getCache(key, lvl) { + return this.getCachesAt(lvl).get(key); + } + }, { + key: "get", + value: function get(ele, lvl) { + var key = this.getKey(ele); + var cache = this.getCache(key, lvl); + + // getting for an element may need to add to the id list b/c eles can share keys + if (cache != null) { + this.updateKeyMappingFor(ele); + } + return cache; + } + }, { + key: "getForCachedKey", + value: function getForCachedKey(ele, lvl) { + var key = this.keyForId.get(ele.id()); // n.b. use cached key, not newly computed key + var cache = this.getCache(key, lvl); + return cache; + } + }, { + key: "hasCache", + value: function hasCache(key, lvl) { + return this.getCachesAt(lvl).has(key); + } + }, { + key: "has", + value: function has(ele, lvl) { + var key = this.getKey(ele); + return this.hasCache(key, lvl); + } + }, { + key: "setCache", + value: function setCache(key, lvl, cache) { + cache.key = key; + this.getCachesAt(lvl).set(key, cache); + } + }, { + key: "set", + value: function set(ele, lvl, cache) { + var key = this.getKey(ele); + this.setCache(key, lvl, cache); + this.updateKeyMappingFor(ele); + } + }, { + key: "deleteCache", + value: function deleteCache(key, lvl) { + this.getCachesAt(lvl)["delete"](key); + } + }, { + key: "delete", + value: function _delete(ele, lvl) { + var key = this.getKey(ele); + this.deleteCache(key, lvl); + } + }, { + key: "invalidateKey", + value: function invalidateKey(key) { + var _this = this; + this.lvls.forEach(function (lvl) { + return _this.deleteCache(key, lvl); + }); + } + + // returns true if no other eles reference the invalidated cache (n.b. other eles may need the cache with the same key) + }, { + key: "invalidate", + value: function invalidate(ele) { + var id = ele.id(); + var key = this.keyForId.get(id); // n.b. use stored key rather than current (potential key) + + this.deleteKeyMappingFor(ele); + var entireKeyInvalidated = this.doesEleInvalidateKey(ele); + if (entireKeyInvalidated) { + // clear mapping for current key + this.invalidateKey(key); + } + return entireKeyInvalidated || this.getNumberOfIdsForKey(key) === 0; + } + }]); + return ElementTextureCacheLookup; +}(); + +var minTxrH = 25; // the size of the texture cache for small height eles (special case) +var txrStepH = 50; // the min size of the regular cache, and the size it increases with each step up +var minLvl$1 = -4; // when scaling smaller than that we don't need to re-render +var maxLvl$1 = 3; // when larger than this scale just render directly (caching is not helpful) +var maxZoom$1 = 7.99; // beyond this zoom level, layered textures are not used +var eleTxrSpacing = 8; // spacing between elements on textures to avoid blitting overlaps +var defTxrWidth = 1024; // default/minimum texture width +var maxTxrW = 1024; // the maximum width of a texture +var maxTxrH = 1024; // the maximum height of a texture +var minUtility = 0.2; // if usage of texture is less than this, it is retired +var maxFullness = 0.8; // fullness of texture after which queue removal is checked +var maxFullnessChecks = 10; // dequeued after this many checks +var deqCost$1 = 0.15; // % of add'l rendering cost allowed for dequeuing ele caches each frame +var deqAvgCost$1 = 0.1; // % of add'l rendering cost compared to average overall redraw time +var deqNoDrawCost$1 = 0.9; // % of avg frame time that can be used for dequeueing when not drawing +var deqFastCost$1 = 0.9; // % of frame time to be used when >60fps +var deqRedrawThreshold$1 = 100; // time to batch redraws together from dequeueing to allow more dequeueing calcs to happen in the meanwhile +var maxDeqSize$1 = 1; // number of eles to dequeue and render at higher texture in each batch + +var getTxrReasons = { + dequeue: 'dequeue', + downscale: 'downscale', + highQuality: 'highQuality' +}; +var initDefaults = defaults$g({ + getKey: null, + doesEleInvalidateKey: falsify, + drawElement: null, + getBoundingBox: null, + getRotationPoint: null, + getRotationOffset: null, + isVisible: trueify, + allowEdgeTxrCaching: true, + allowParentTxrCaching: true +}); +var ElementTextureCache = function ElementTextureCache(renderer, initOptions) { + var self = this; + self.renderer = renderer; + self.onDequeues = []; + var opts = initDefaults(initOptions); + extend(self, opts); + self.lookup = new ElementTextureCacheLookup(opts.getKey, opts.doesEleInvalidateKey); + self.setupDequeueing(); +}; +var ETCp = ElementTextureCache.prototype; +ETCp.reasons = getTxrReasons; + +// the list of textures in which new subtextures for elements can be placed +ETCp.getTextureQueue = function (txrH) { + var self = this; + self.eleImgCaches = self.eleImgCaches || {}; + return self.eleImgCaches[txrH] = self.eleImgCaches[txrH] || []; +}; + +// the list of usused textures which can be recycled (in use in texture queue) +ETCp.getRetiredTextureQueue = function (txrH) { + var self = this; + var rtxtrQs = self.eleImgCaches.retired = self.eleImgCaches.retired || {}; + var rtxtrQ = rtxtrQs[txrH] = rtxtrQs[txrH] || []; + return rtxtrQ; +}; + +// queue of element draw requests at different scale levels +ETCp.getElementQueue = function () { + var self = this; + var q = self.eleCacheQueue = self.eleCacheQueue || new heap(function (a, b) { + return b.reqs - a.reqs; + }); + return q; +}; + +// queue of element draw requests at different scale levels (element id lookup) +ETCp.getElementKeyToQueue = function () { + var self = this; + var k2q = self.eleKeyToCacheQueue = self.eleKeyToCacheQueue || {}; + return k2q; +}; +ETCp.getElement = function (ele, bb, pxRatio, lvl, reason) { + var self = this; + var r = this.renderer; + var zoom = r.cy.zoom(); + var lookup = this.lookup; + if (!bb || bb.w === 0 || bb.h === 0 || isNaN(bb.w) || isNaN(bb.h) || !ele.visible() || ele.removed()) { + return null; + } + if (!self.allowEdgeTxrCaching && ele.isEdge() || !self.allowParentTxrCaching && ele.isParent()) { + return null; + } + if (lvl == null) { + lvl = Math.ceil(log2(zoom * pxRatio)); + } + if (lvl < minLvl$1) { + lvl = minLvl$1; + } else if (zoom >= maxZoom$1 || lvl > maxLvl$1) { + return null; + } + var scale = Math.pow(2, lvl); + var eleScaledH = bb.h * scale; + var eleScaledW = bb.w * scale; + var scaledLabelShown = r.eleTextBiggerThanMin(ele, scale); + if (!this.isVisible(ele, scaledLabelShown)) { + return null; + } + var eleCache = lookup.get(ele, lvl); + + // if this get was on an unused/invalidated cache, then restore the texture usage metric + if (eleCache && eleCache.invalidated) { + eleCache.invalidated = false; + eleCache.texture.invalidatedWidth -= eleCache.width; + } + if (eleCache) { + return eleCache; + } + var txrH; // which texture height this ele belongs to + + if (eleScaledH <= minTxrH) { + txrH = minTxrH; + } else if (eleScaledH <= txrStepH) { + txrH = txrStepH; + } else { + txrH = Math.ceil(eleScaledH / txrStepH) * txrStepH; + } + if (eleScaledH > maxTxrH || eleScaledW > maxTxrW) { + return null; // caching large elements is not efficient + } + + var txrQ = self.getTextureQueue(txrH); + + // first try the second last one in case it has space at the end + var txr = txrQ[txrQ.length - 2]; + var addNewTxr = function addNewTxr() { + return self.recycleTexture(txrH, eleScaledW) || self.addTexture(txrH, eleScaledW); + }; + + // try the last one if there is no second last one + if (!txr) { + txr = txrQ[txrQ.length - 1]; + } + + // if the last one doesn't exist, we need a first one + if (!txr) { + txr = addNewTxr(); + } + + // if there's no room in the current texture, we need a new one + if (txr.width - txr.usedWidth < eleScaledW) { + txr = addNewTxr(); + } + var scalableFrom = function scalableFrom(otherCache) { + return otherCache && otherCache.scaledLabelShown === scaledLabelShown; + }; + var deqing = reason && reason === getTxrReasons.dequeue; + var highQualityReq = reason && reason === getTxrReasons.highQuality; + var downscaleReq = reason && reason === getTxrReasons.downscale; + var higherCache; // the nearest cache with a higher level + for (var l = lvl + 1; l <= maxLvl$1; l++) { + var c = lookup.get(ele, l); + if (c) { + higherCache = c; + break; + } + } + var oneUpCache = higherCache && higherCache.level === lvl + 1 ? higherCache : null; + var downscale = function downscale() { + txr.context.drawImage(oneUpCache.texture.canvas, oneUpCache.x, 0, oneUpCache.width, oneUpCache.height, txr.usedWidth, 0, eleScaledW, eleScaledH); + }; + + // reset ele area in texture + txr.context.setTransform(1, 0, 0, 1, 0, 0); + txr.context.clearRect(txr.usedWidth, 0, eleScaledW, txrH); + if (scalableFrom(oneUpCache)) { + // then we can relatively cheaply rescale the existing image w/o rerendering + downscale(); + } else if (scalableFrom(higherCache)) { + // then use the higher cache for now and queue the next level down + // to cheaply scale towards the smaller level + + if (highQualityReq) { + for (var _l = higherCache.level; _l > lvl; _l--) { + oneUpCache = self.getElement(ele, bb, pxRatio, _l, getTxrReasons.downscale); + } + downscale(); + } else { + self.queueElement(ele, higherCache.level - 1); + return higherCache; + } + } else { + var lowerCache; // the nearest cache with a lower level + if (!deqing && !highQualityReq && !downscaleReq) { + for (var _l2 = lvl - 1; _l2 >= minLvl$1; _l2--) { + var _c = lookup.get(ele, _l2); + if (_c) { + lowerCache = _c; + break; + } + } + } + if (scalableFrom(lowerCache)) { + // then use the lower quality cache for now and queue the better one for later + + self.queueElement(ele, lvl); + return lowerCache; + } + txr.context.translate(txr.usedWidth, 0); + txr.context.scale(scale, scale); + this.drawElement(txr.context, ele, bb, scaledLabelShown, false); + txr.context.scale(1 / scale, 1 / scale); + txr.context.translate(-txr.usedWidth, 0); + } + eleCache = { + x: txr.usedWidth, + texture: txr, + level: lvl, + scale: scale, + width: eleScaledW, + height: eleScaledH, + scaledLabelShown: scaledLabelShown + }; + txr.usedWidth += Math.ceil(eleScaledW + eleTxrSpacing); + txr.eleCaches.push(eleCache); + lookup.set(ele, lvl, eleCache); + self.checkTextureFullness(txr); + return eleCache; +}; +ETCp.invalidateElements = function (eles) { + for (var i = 0; i < eles.length; i++) { + this.invalidateElement(eles[i]); + } +}; +ETCp.invalidateElement = function (ele) { + var self = this; + var lookup = self.lookup; + var caches = []; + var invalid = lookup.isInvalid(ele); + if (!invalid) { + return; // override the invalidation request if the element key has not changed + } + + for (var lvl = minLvl$1; lvl <= maxLvl$1; lvl++) { + var cache = lookup.getForCachedKey(ele, lvl); + if (cache) { + caches.push(cache); + } + } + var noOtherElesUseCache = lookup.invalidate(ele); + if (noOtherElesUseCache) { + for (var i = 0; i < caches.length; i++) { + var _cache = caches[i]; + var txr = _cache.texture; + + // remove space from the texture it belongs to + txr.invalidatedWidth += _cache.width; + + // mark the cache as invalidated + _cache.invalidated = true; + + // retire the texture if its utility is low + self.checkTextureUtility(txr); + } + } + + // remove from queue since the old req was for the old state + self.removeFromQueue(ele); +}; +ETCp.checkTextureUtility = function (txr) { + // invalidate all entries in the cache if the cache size is small + if (txr.invalidatedWidth >= minUtility * txr.width) { + this.retireTexture(txr); + } +}; +ETCp.checkTextureFullness = function (txr) { + // if texture has been mostly filled and passed over several times, remove + // it from the queue so we don't need to waste time looking at it to put new things + + var self = this; + var txrQ = self.getTextureQueue(txr.height); + if (txr.usedWidth / txr.width > maxFullness && txr.fullnessChecks >= maxFullnessChecks) { + removeFromArray(txrQ, txr); + } else { + txr.fullnessChecks++; + } +}; +ETCp.retireTexture = function (txr) { + var self = this; + var txrH = txr.height; + var txrQ = self.getTextureQueue(txrH); + var lookup = this.lookup; + + // retire the texture from the active / searchable queue: + + removeFromArray(txrQ, txr); + txr.retired = true; + + // remove the refs from the eles to the caches: + + var eleCaches = txr.eleCaches; + for (var i = 0; i < eleCaches.length; i++) { + var eleCache = eleCaches[i]; + lookup.deleteCache(eleCache.key, eleCache.level); + } + clearArray(eleCaches); + + // add the texture to a retired queue so it can be recycled in future: + + var rtxtrQ = self.getRetiredTextureQueue(txrH); + rtxtrQ.push(txr); +}; +ETCp.addTexture = function (txrH, minW) { + var self = this; + var txrQ = self.getTextureQueue(txrH); + var txr = {}; + txrQ.push(txr); + txr.eleCaches = []; + txr.height = txrH; + txr.width = Math.max(defTxrWidth, minW); + txr.usedWidth = 0; + txr.invalidatedWidth = 0; + txr.fullnessChecks = 0; + txr.canvas = self.renderer.makeOffscreenCanvas(txr.width, txr.height); + txr.context = txr.canvas.getContext('2d'); + return txr; +}; +ETCp.recycleTexture = function (txrH, minW) { + var self = this; + var txrQ = self.getTextureQueue(txrH); + var rtxtrQ = self.getRetiredTextureQueue(txrH); + for (var i = 0; i < rtxtrQ.length; i++) { + var txr = rtxtrQ[i]; + if (txr.width >= minW) { + txr.retired = false; + txr.usedWidth = 0; + txr.invalidatedWidth = 0; + txr.fullnessChecks = 0; + clearArray(txr.eleCaches); + txr.context.setTransform(1, 0, 0, 1, 0, 0); + txr.context.clearRect(0, 0, txr.width, txr.height); + removeFromArray(rtxtrQ, txr); + txrQ.push(txr); + return txr; + } + } +}; +ETCp.queueElement = function (ele, lvl) { + var self = this; + var q = self.getElementQueue(); + var k2q = self.getElementKeyToQueue(); + var key = this.getKey(ele); + var existingReq = k2q[key]; + if (existingReq) { + // use the max lvl b/c in between lvls are cheap to make + existingReq.level = Math.max(existingReq.level, lvl); + existingReq.eles.merge(ele); + existingReq.reqs++; + q.updateItem(existingReq); + } else { + var req = { + eles: ele.spawn().merge(ele), + level: lvl, + reqs: 1, + key: key + }; + q.push(req); + k2q[key] = req; + } +}; +ETCp.dequeue = function (pxRatio /*, extent*/) { + var self = this; + var q = self.getElementQueue(); + var k2q = self.getElementKeyToQueue(); + var dequeued = []; + var lookup = self.lookup; + for (var i = 0; i < maxDeqSize$1; i++) { + if (q.size() > 0) { + var req = q.pop(); + var key = req.key; + var ele = req.eles[0]; // all eles have the same key + var cacheExists = lookup.hasCache(ele, req.level); + + // clear out the key to req lookup + k2q[key] = null; + + // dequeueing isn't necessary with an existing cache + if (cacheExists) { + continue; + } + dequeued.push(req); + var bb = self.getBoundingBox(ele); + self.getElement(ele, bb, pxRatio, req.level, getTxrReasons.dequeue); + } else { + break; + } + } + return dequeued; +}; +ETCp.removeFromQueue = function (ele) { + var self = this; + var q = self.getElementQueue(); + var k2q = self.getElementKeyToQueue(); + var key = this.getKey(ele); + var req = k2q[key]; + if (req != null) { + if (req.eles.length === 1) { + // remove if last ele in the req + // bring to front of queue + req.reqs = MAX_INT$1; + q.updateItem(req); + q.pop(); // remove from queue + + k2q[key] = null; // remove from lookup map + } else { + // otherwise just remove ele from req + req.eles.unmerge(ele); + } + } +}; +ETCp.onDequeue = function (fn) { + this.onDequeues.push(fn); +}; +ETCp.offDequeue = function (fn) { + removeFromArray(this.onDequeues, fn); +}; +ETCp.setupDequeueing = defs.setupDequeueing({ + deqRedrawThreshold: deqRedrawThreshold$1, + deqCost: deqCost$1, + deqAvgCost: deqAvgCost$1, + deqNoDrawCost: deqNoDrawCost$1, + deqFastCost: deqFastCost$1, + deq: function deq(self, pxRatio, extent) { + return self.dequeue(pxRatio, extent); + }, + onDeqd: function onDeqd(self, deqd) { + for (var i = 0; i < self.onDequeues.length; i++) { + var fn = self.onDequeues[i]; + fn(deqd); + } + }, + shouldRedraw: function shouldRedraw(self, deqd, pxRatio, extent) { + for (var i = 0; i < deqd.length; i++) { + var eles = deqd[i].eles; + for (var j = 0; j < eles.length; j++) { + var bb = eles[j].boundingBox(); + if (boundingBoxesIntersect(bb, extent)) { + return true; + } + } + } + return false; + }, + priority: function priority(self) { + return self.renderer.beforeRenderPriorities.eleTxrDeq; + } +}); + +var defNumLayers = 1; // default number of layers to use +var minLvl = -4; // when scaling smaller than that we don't need to re-render +var maxLvl = 2; // when larger than this scale just render directly (caching is not helpful) +var maxZoom = 3.99; // beyond this zoom level, layered textures are not used +var deqRedrawThreshold = 50; // time to batch redraws together from dequeueing to allow more dequeueing calcs to happen in the meanwhile +var refineEleDebounceTime = 50; // time to debounce sharper ele texture updates +var deqCost = 0.15; // % of add'l rendering cost allowed for dequeuing ele caches each frame +var deqAvgCost = 0.1; // % of add'l rendering cost compared to average overall redraw time +var deqNoDrawCost = 0.9; // % of avg frame time that can be used for dequeueing when not drawing +var deqFastCost = 0.9; // % of frame time to be used when >60fps +var maxDeqSize = 1; // number of eles to dequeue and render at higher texture in each batch +var invalidThreshold = 250; // time threshold for disabling b/c of invalidations +var maxLayerArea = 4000 * 4000; // layers can't be bigger than this +var useHighQualityEleTxrReqs = true; // whether to use high quality ele txr requests (generally faster and cheaper in the longterm) + +// var log = function(){ console.log.apply( console, arguments ); }; + +var LayeredTextureCache = function LayeredTextureCache(renderer) { + var self = this; + var r = self.renderer = renderer; + var cy = r.cy; + self.layersByLevel = {}; // e.g. 2 => [ layer1, layer2, ..., layerN ] + + self.firstGet = true; + self.lastInvalidationTime = performanceNow() - 2 * invalidThreshold; + self.skipping = false; + self.eleTxrDeqs = cy.collection(); + self.scheduleElementRefinement = debounce_1(function () { + self.refineElementTextures(self.eleTxrDeqs); + self.eleTxrDeqs.unmerge(self.eleTxrDeqs); + }, refineEleDebounceTime); + r.beforeRender(function (willDraw, now) { + if (now - self.lastInvalidationTime <= invalidThreshold) { + self.skipping = true; + } else { + self.skipping = false; + } + }, r.beforeRenderPriorities.lyrTxrSkip); + var qSort = function qSort(a, b) { + return b.reqs - a.reqs; + }; + self.layersQueue = new heap(qSort); + self.setupDequeueing(); +}; +var LTCp = LayeredTextureCache.prototype; +var layerIdPool = 0; +var MAX_INT = Math.pow(2, 53) - 1; +LTCp.makeLayer = function (bb, lvl) { + var scale = Math.pow(2, lvl); + var w = Math.ceil(bb.w * scale); + var h = Math.ceil(bb.h * scale); + var canvas = this.renderer.makeOffscreenCanvas(w, h); + var layer = { + id: layerIdPool = ++layerIdPool % MAX_INT, + bb: bb, + level: lvl, + width: w, + height: h, + canvas: canvas, + context: canvas.getContext('2d'), + eles: [], + elesQueue: [], + reqs: 0 + }; + + // log('make layer %s with w %s and h %s and lvl %s', layer.id, layer.width, layer.height, layer.level); + + var cxt = layer.context; + var dx = -layer.bb.x1; + var dy = -layer.bb.y1; + + // do the transform on creation to save cycles (it's the same for all eles) + cxt.scale(scale, scale); + cxt.translate(dx, dy); + return layer; +}; +LTCp.getLayers = function (eles, pxRatio, lvl) { + var self = this; + var r = self.renderer; + var cy = r.cy; + var zoom = cy.zoom(); + var firstGet = self.firstGet; + self.firstGet = false; + + // log('--\nget layers with %s eles', eles.length); + //log eles.map(function(ele){ return ele.id() }) ); + + if (lvl == null) { + lvl = Math.ceil(log2(zoom * pxRatio)); + if (lvl < minLvl) { + lvl = minLvl; + } else if (zoom >= maxZoom || lvl > maxLvl) { + return null; + } + } + self.validateLayersElesOrdering(lvl, eles); + var layersByLvl = self.layersByLevel; + var scale = Math.pow(2, lvl); + var layers = layersByLvl[lvl] = layersByLvl[lvl] || []; + var bb; + var lvlComplete = self.levelIsComplete(lvl, eles); + var tmpLayers; + var checkTempLevels = function checkTempLevels() { + var canUseAsTmpLvl = function canUseAsTmpLvl(l) { + self.validateLayersElesOrdering(l, eles); + if (self.levelIsComplete(l, eles)) { + tmpLayers = layersByLvl[l]; + return true; + } + }; + var checkLvls = function checkLvls(dir) { + if (tmpLayers) { + return; + } + for (var l = lvl + dir; minLvl <= l && l <= maxLvl; l += dir) { + if (canUseAsTmpLvl(l)) { + break; + } + } + }; + checkLvls(+1); + checkLvls(-1); + + // remove the invalid layers; they will be replaced as needed later in this function + for (var i = layers.length - 1; i >= 0; i--) { + var layer = layers[i]; + if (layer.invalid) { + removeFromArray(layers, layer); + } + } + }; + if (!lvlComplete) { + // if the current level is incomplete, then use the closest, best quality layerset temporarily + // and later queue the current layerset so we can get the proper quality level soon + + checkTempLevels(); + } else { + // log('level complete, using existing layers\n--'); + return layers; + } + var getBb = function getBb() { + if (!bb) { + bb = makeBoundingBox(); + for (var i = 0; i < eles.length; i++) { + updateBoundingBox(bb, eles[i].boundingBox()); + } + } + return bb; + }; + var makeLayer = function makeLayer(opts) { + opts = opts || {}; + var after = opts.after; + getBb(); + var area = bb.w * scale * (bb.h * scale); + if (area > maxLayerArea) { + return null; + } + var layer = self.makeLayer(bb, lvl); + if (after != null) { + var index = layers.indexOf(after) + 1; + layers.splice(index, 0, layer); + } else if (opts.insert === undefined || opts.insert) { + // no after specified => first layer made so put at start + layers.unshift(layer); + } + + // if( tmpLayers ){ + //self.queueLayer( layer ); + // } + + return layer; + }; + if (self.skipping && !firstGet) { + // log('skip layers'); + return null; + } + + // log('do layers'); + + var layer = null; + var maxElesPerLayer = eles.length / defNumLayers; + var allowLazyQueueing = !firstGet; + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var rs = ele._private.rscratch; + var caches = rs.imgLayerCaches = rs.imgLayerCaches || {}; + + // log('look at ele', ele.id()); + + var existingLayer = caches[lvl]; + if (existingLayer) { + // reuse layer for later eles + // log('reuse layer for', ele.id()); + layer = existingLayer; + continue; + } + if (!layer || layer.eles.length >= maxElesPerLayer || !boundingBoxInBoundingBox(layer.bb, ele.boundingBox())) { + // log('make new layer for ele %s', ele.id()); + + layer = makeLayer({ + insert: true, + after: layer + }); + + // if now layer can be built then we can't use layers at this level + if (!layer) { + return null; + } + + // log('new layer with id %s', layer.id); + } + + if (tmpLayers || allowLazyQueueing) { + // log('queue ele %s in layer %s', ele.id(), layer.id); + self.queueLayer(layer, ele); + } else { + // log('draw ele %s in layer %s', ele.id(), layer.id); + self.drawEleInLayer(layer, ele, lvl, pxRatio); + } + layer.eles.push(ele); + caches[lvl] = layer; + } + + // log('--'); + + if (tmpLayers) { + // then we only queued the current layerset and can't draw it yet + return tmpLayers; + } + if (allowLazyQueueing) { + // log('lazy queue level', lvl); + return null; + } + return layers; +}; + +// a layer may want to use an ele cache of a higher level to avoid blurriness +// so the layer level might not equal the ele level +LTCp.getEleLevelForLayerLevel = function (lvl, pxRatio) { + return lvl; +}; +LTCp.drawEleInLayer = function (layer, ele, lvl, pxRatio) { + var self = this; + var r = this.renderer; + var context = layer.context; + var bb = ele.boundingBox(); + if (bb.w === 0 || bb.h === 0 || !ele.visible()) { + return; + } + lvl = self.getEleLevelForLayerLevel(lvl, pxRatio); + { + r.setImgSmoothing(context, false); + } + { + r.drawCachedElement(context, ele, null, null, lvl, useHighQualityEleTxrReqs); + } + { + r.setImgSmoothing(context, true); + } +}; +LTCp.levelIsComplete = function (lvl, eles) { + var self = this; + var layers = self.layersByLevel[lvl]; + if (!layers || layers.length === 0) { + return false; + } + var numElesInLayers = 0; + for (var i = 0; i < layers.length; i++) { + var layer = layers[i]; + + // if there are any eles needed to be drawn yet, the level is not complete + if (layer.reqs > 0) { + return false; + } + + // if the layer is invalid, the level is not complete + if (layer.invalid) { + return false; + } + numElesInLayers += layer.eles.length; + } + + // we should have exactly the number of eles passed in to be complete + if (numElesInLayers !== eles.length) { + return false; + } + return true; +}; +LTCp.validateLayersElesOrdering = function (lvl, eles) { + var layers = this.layersByLevel[lvl]; + if (!layers) { + return; + } + + // if in a layer the eles are not in the same order, then the layer is invalid + // (i.e. there is an ele in between the eles in the layer) + + for (var i = 0; i < layers.length; i++) { + var layer = layers[i]; + var offset = -1; + + // find the offset + for (var j = 0; j < eles.length; j++) { + if (layer.eles[0] === eles[j]) { + offset = j; + break; + } + } + if (offset < 0) { + // then the layer has nonexistent elements and is invalid + this.invalidateLayer(layer); + continue; + } + + // the eles in the layer must be in the same continuous order, else the layer is invalid + + var o = offset; + for (var j = 0; j < layer.eles.length; j++) { + if (layer.eles[j] !== eles[o + j]) { + // log('invalidate based on ordering', layer.id); + + this.invalidateLayer(layer); + break; + } + } + } +}; +LTCp.updateElementsInLayers = function (eles, update) { + var self = this; + var isEles = cytoscape_esm_element(eles[0]); + + // collect udpated elements (cascaded from the layers) and update each + // layer itself along the way + for (var i = 0; i < eles.length; i++) { + var req = isEles ? null : eles[i]; + var ele = isEles ? eles[i] : eles[i].ele; + var rs = ele._private.rscratch; + var caches = rs.imgLayerCaches = rs.imgLayerCaches || {}; + for (var l = minLvl; l <= maxLvl; l++) { + var layer = caches[l]; + if (!layer) { + continue; + } + + // if update is a request from the ele cache, then it affects only + // the matching level + if (req && self.getEleLevelForLayerLevel(layer.level) !== req.level) { + continue; + } + update(layer, ele, req); + } + } +}; +LTCp.haveLayers = function () { + var self = this; + var haveLayers = false; + for (var l = minLvl; l <= maxLvl; l++) { + var layers = self.layersByLevel[l]; + if (layers && layers.length > 0) { + haveLayers = true; + break; + } + } + return haveLayers; +}; +LTCp.invalidateElements = function (eles) { + var self = this; + if (eles.length === 0) { + return; + } + self.lastInvalidationTime = performanceNow(); + + // log('update invalidate layer time from eles'); + + if (eles.length === 0 || !self.haveLayers()) { + return; + } + self.updateElementsInLayers(eles, function invalAssocLayers(layer, ele, req) { + self.invalidateLayer(layer); + }); +}; +LTCp.invalidateLayer = function (layer) { + // log('update invalidate layer time'); + + this.lastInvalidationTime = performanceNow(); + if (layer.invalid) { + return; + } // save cycles + + var lvl = layer.level; + var eles = layer.eles; + var layers = this.layersByLevel[lvl]; + + // log('invalidate layer', layer.id ); + + removeFromArray(layers, layer); + // layer.eles = []; + + layer.elesQueue = []; + layer.invalid = true; + if (layer.replacement) { + layer.replacement.invalid = true; + } + for (var i = 0; i < eles.length; i++) { + var caches = eles[i]._private.rscratch.imgLayerCaches; + if (caches) { + caches[lvl] = null; + } + } +}; +LTCp.refineElementTextures = function (eles) { + var self = this; + + // log('refine', eles.length); + + self.updateElementsInLayers(eles, function refineEachEle(layer, ele, req) { + var rLyr = layer.replacement; + if (!rLyr) { + rLyr = layer.replacement = self.makeLayer(layer.bb, layer.level); + rLyr.replaces = layer; + rLyr.eles = layer.eles; + + // log('make replacement layer %s for %s with level %s', rLyr.id, layer.id, rLyr.level); + } + + if (!rLyr.reqs) { + for (var i = 0; i < rLyr.eles.length; i++) { + self.queueLayer(rLyr, rLyr.eles[i]); + } + + // log('queue replacement layer refinement', rLyr.id); + } + }); +}; + +LTCp.enqueueElementRefinement = function (ele) { + this.eleTxrDeqs.merge(ele); + this.scheduleElementRefinement(); +}; +LTCp.queueLayer = function (layer, ele) { + var self = this; + var q = self.layersQueue; + var elesQ = layer.elesQueue; + var hasId = elesQ.hasId = elesQ.hasId || {}; + + // if a layer is going to be replaced, queuing is a waste of time + if (layer.replacement) { + return; + } + if (ele) { + if (hasId[ele.id()]) { + return; + } + elesQ.push(ele); + hasId[ele.id()] = true; + } + if (layer.reqs) { + layer.reqs++; + q.updateItem(layer); + } else { + layer.reqs = 1; + q.push(layer); + } +}; +LTCp.dequeue = function (pxRatio) { + var self = this; + var q = self.layersQueue; + var deqd = []; + var eleDeqs = 0; + while (eleDeqs < maxDeqSize) { + if (q.size() === 0) { + break; + } + var layer = q.peek(); + + // if a layer has been or will be replaced, then don't waste time with it + if (layer.replacement) { + // log('layer %s in queue skipped b/c it already has a replacement', layer.id); + q.pop(); + continue; + } + + // if this is a replacement layer that has been superceded, then forget it + if (layer.replaces && layer !== layer.replaces.replacement) { + // log('layer is no longer the most uptodate replacement; dequeued', layer.id) + q.pop(); + continue; + } + if (layer.invalid) { + // log('replacement layer %s is invalid; dequeued', layer.id); + q.pop(); + continue; + } + var ele = layer.elesQueue.shift(); + if (ele) { + // log('dequeue layer %s', layer.id); + + self.drawEleInLayer(layer, ele, layer.level, pxRatio); + eleDeqs++; + } + if (deqd.length === 0) { + // we need only one entry in deqd to queue redrawing etc + deqd.push(true); + } + + // if the layer has all its eles done, then remove from the queue + if (layer.elesQueue.length === 0) { + q.pop(); + layer.reqs = 0; + + // log('dequeue of layer %s complete', layer.id); + + // when a replacement layer is dequeued, it replaces the old layer in the level + if (layer.replaces) { + self.applyLayerReplacement(layer); + } + self.requestRedraw(); + } + } + return deqd; +}; +LTCp.applyLayerReplacement = function (layer) { + var self = this; + var layersInLevel = self.layersByLevel[layer.level]; + var replaced = layer.replaces; + var index = layersInLevel.indexOf(replaced); + + // if the replaced layer is not in the active list for the level, then replacing + // refs would be a mistake (i.e. overwriting the true active layer) + if (index < 0 || replaced.invalid) { + // log('replacement layer would have no effect', layer.id); + return; + } + layersInLevel[index] = layer; // replace level ref + + // replace refs in eles + for (var i = 0; i < layer.eles.length; i++) { + var _p = layer.eles[i]._private; + var cache = _p.imgLayerCaches = _p.imgLayerCaches || {}; + if (cache) { + cache[layer.level] = layer; + } + } + + // log('apply replacement layer %s over %s', layer.id, replaced.id); + + self.requestRedraw(); +}; +LTCp.requestRedraw = debounce_1(function () { + var r = this.renderer; + r.redrawHint('eles', true); + r.redrawHint('drag', true); + r.redraw(); +}, 100); +LTCp.setupDequeueing = defs.setupDequeueing({ + deqRedrawThreshold: deqRedrawThreshold, + deqCost: deqCost, + deqAvgCost: deqAvgCost, + deqNoDrawCost: deqNoDrawCost, + deqFastCost: deqFastCost, + deq: function deq(self, pxRatio) { + return self.dequeue(pxRatio); + }, + onDeqd: noop$1, + shouldRedraw: trueify, + priority: function priority(self) { + return self.renderer.beforeRenderPriorities.lyrTxrDeq; + } +}); + +var CRp$a = {}; +var impl; +function polygon(context, points) { + for (var i = 0; i < points.length; i++) { + var pt = points[i]; + context.lineTo(pt.x, pt.y); + } +} +function triangleBackcurve(context, points, controlPoint) { + var firstPt; + for (var i = 0; i < points.length; i++) { + var pt = points[i]; + if (i === 0) { + firstPt = pt; + } + context.lineTo(pt.x, pt.y); + } + context.quadraticCurveTo(controlPoint.x, controlPoint.y, firstPt.x, firstPt.y); +} +function triangleTee(context, trianglePoints, teePoints) { + if (context.beginPath) { + context.beginPath(); + } + var triPts = trianglePoints; + for (var i = 0; i < triPts.length; i++) { + var pt = triPts[i]; + context.lineTo(pt.x, pt.y); + } + var teePts = teePoints; + var firstTeePt = teePoints[0]; + context.moveTo(firstTeePt.x, firstTeePt.y); + for (var i = 1; i < teePts.length; i++) { + var pt = teePts[i]; + context.lineTo(pt.x, pt.y); + } + if (context.closePath) { + context.closePath(); + } +} +function circleTriangle(context, trianglePoints, rx, ry, r) { + if (context.beginPath) { + context.beginPath(); + } + context.arc(rx, ry, r, 0, Math.PI * 2, false); + var triPts = trianglePoints; + var firstTrPt = triPts[0]; + context.moveTo(firstTrPt.x, firstTrPt.y); + for (var i = 0; i < triPts.length; i++) { + var pt = triPts[i]; + context.lineTo(pt.x, pt.y); + } + if (context.closePath) { + context.closePath(); + } +} +function circle(context, rx, ry, r) { + context.arc(rx, ry, r, 0, Math.PI * 2, false); +} +CRp$a.arrowShapeImpl = function (name) { + return (impl || (impl = { + 'polygon': polygon, + 'triangle-backcurve': triangleBackcurve, + 'triangle-tee': triangleTee, + 'circle-triangle': circleTriangle, + 'triangle-cross': triangleTee, + 'circle': circle + }))[name]; +}; + +var CRp$9 = {}; +CRp$9.drawElement = function (context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity) { + var r = this; + if (ele.isNode()) { + r.drawNode(context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity); + } else { + r.drawEdge(context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity); + } +}; +CRp$9.drawElementOverlay = function (context, ele) { + var r = this; + if (ele.isNode()) { + r.drawNodeOverlay(context, ele); + } else { + r.drawEdgeOverlay(context, ele); + } +}; +CRp$9.drawElementUnderlay = function (context, ele) { + var r = this; + if (ele.isNode()) { + r.drawNodeUnderlay(context, ele); + } else { + r.drawEdgeUnderlay(context, ele); + } +}; +CRp$9.drawCachedElementPortion = function (context, ele, eleTxrCache, pxRatio, lvl, reason, getRotation, getOpacity) { + var r = this; + var bb = eleTxrCache.getBoundingBox(ele); + if (bb.w === 0 || bb.h === 0) { + return; + } // ignore zero size case + + var eleCache = eleTxrCache.getElement(ele, bb, pxRatio, lvl, reason); + if (eleCache != null) { + var opacity = getOpacity(r, ele); + if (opacity === 0) { + return; + } + var theta = getRotation(r, ele); + var x1 = bb.x1, + y1 = bb.y1, + w = bb.w, + h = bb.h; + var x, y, sx, sy, smooth; + if (theta !== 0) { + var rotPt = eleTxrCache.getRotationPoint(ele); + sx = rotPt.x; + sy = rotPt.y; + context.translate(sx, sy); + context.rotate(theta); + smooth = r.getImgSmoothing(context); + if (!smooth) { + r.setImgSmoothing(context, true); + } + var off = eleTxrCache.getRotationOffset(ele); + x = off.x; + y = off.y; + } else { + x = x1; + y = y1; + } + var oldGlobalAlpha; + if (opacity !== 1) { + oldGlobalAlpha = context.globalAlpha; + context.globalAlpha = oldGlobalAlpha * opacity; + } + context.drawImage(eleCache.texture.canvas, eleCache.x, 0, eleCache.width, eleCache.height, x, y, w, h); + if (opacity !== 1) { + context.globalAlpha = oldGlobalAlpha; + } + if (theta !== 0) { + context.rotate(-theta); + context.translate(-sx, -sy); + if (!smooth) { + r.setImgSmoothing(context, false); + } + } + } else { + eleTxrCache.drawElement(context, ele); // direct draw fallback + } +}; + +var getZeroRotation = function getZeroRotation() { + return 0; +}; +var getLabelRotation = function getLabelRotation(r, ele) { + return r.getTextAngle(ele, null); +}; +var getSourceLabelRotation = function getSourceLabelRotation(r, ele) { + return r.getTextAngle(ele, 'source'); +}; +var getTargetLabelRotation = function getTargetLabelRotation(r, ele) { + return r.getTextAngle(ele, 'target'); +}; +var getOpacity = function getOpacity(r, ele) { + return ele.effectiveOpacity(); +}; +var getTextOpacity = function getTextOpacity(e, ele) { + return ele.pstyle('text-opacity').pfValue * ele.effectiveOpacity(); +}; +CRp$9.drawCachedElement = function (context, ele, pxRatio, extent, lvl, requestHighQuality) { + var r = this; + var _r$data = r.data, + eleTxrCache = _r$data.eleTxrCache, + lblTxrCache = _r$data.lblTxrCache, + slbTxrCache = _r$data.slbTxrCache, + tlbTxrCache = _r$data.tlbTxrCache; + var bb = ele.boundingBox(); + var reason = requestHighQuality === true ? eleTxrCache.reasons.highQuality : null; + if (bb.w === 0 || bb.h === 0 || !ele.visible()) { + return; + } + if (!extent || boundingBoxesIntersect(bb, extent)) { + var isEdge = ele.isEdge(); + var badLine = ele.element()._private.rscratch.badLine; + r.drawElementUnderlay(context, ele); + r.drawCachedElementPortion(context, ele, eleTxrCache, pxRatio, lvl, reason, getZeroRotation, getOpacity); + if (!isEdge || !badLine) { + r.drawCachedElementPortion(context, ele, lblTxrCache, pxRatio, lvl, reason, getLabelRotation, getTextOpacity); + } + if (isEdge && !badLine) { + r.drawCachedElementPortion(context, ele, slbTxrCache, pxRatio, lvl, reason, getSourceLabelRotation, getTextOpacity); + r.drawCachedElementPortion(context, ele, tlbTxrCache, pxRatio, lvl, reason, getTargetLabelRotation, getTextOpacity); + } + r.drawElementOverlay(context, ele); + } +}; +CRp$9.drawElements = function (context, eles) { + var r = this; + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + r.drawElement(context, ele); + } +}; +CRp$9.drawCachedElements = function (context, eles, pxRatio, extent) { + var r = this; + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + r.drawCachedElement(context, ele, pxRatio, extent); + } +}; +CRp$9.drawCachedNodes = function (context, eles, pxRatio, extent) { + var r = this; + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + if (!ele.isNode()) { + continue; + } + r.drawCachedElement(context, ele, pxRatio, extent); + } +}; +CRp$9.drawLayeredElements = function (context, eles, pxRatio, extent) { + var r = this; + var layers = r.data.lyrTxrCache.getLayers(eles, pxRatio); + if (layers) { + for (var i = 0; i < layers.length; i++) { + var layer = layers[i]; + var bb = layer.bb; + if (bb.w === 0 || bb.h === 0) { + continue; + } + context.drawImage(layer.canvas, bb.x1, bb.y1, bb.w, bb.h); + } + } else { + // fall back on plain caching if no layers + r.drawCachedElements(context, eles, pxRatio, extent); + } +}; + +var CRp$8 = {}; +CRp$8.drawEdge = function (context, edge, shiftToOriginWithBb) { + var drawLabel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var shouldDrawOverlay = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var shouldDrawOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; + var r = this; + var rs = edge._private.rscratch; + if (shouldDrawOpacity && !edge.visible()) { + return; + } + + // if bezier ctrl pts can not be calculated, then die + if (rs.badLine || rs.allpts == null || isNaN(rs.allpts[0])) { + // isNaN in case edge is impossible and browser bugs (e.g. safari) + return; + } + var bb; + if (shiftToOriginWithBb) { + bb = shiftToOriginWithBb; + context.translate(-bb.x1, -bb.y1); + } + var opacity = shouldDrawOpacity ? edge.pstyle('opacity').value : 1; + var lineOpacity = shouldDrawOpacity ? edge.pstyle('line-opacity').value : 1; + var curveStyle = edge.pstyle('curve-style').value; + var lineStyle = edge.pstyle('line-style').value; + var edgeWidth = edge.pstyle('width').pfValue; + var lineCap = edge.pstyle('line-cap').value; + var effectiveLineOpacity = opacity * lineOpacity; + // separate arrow opacity would require arrow-opacity property + var effectiveArrowOpacity = opacity * lineOpacity; + var drawLine = function drawLine() { + var strokeOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : effectiveLineOpacity; + if (curveStyle === 'straight-triangle') { + r.eleStrokeStyle(context, edge, strokeOpacity); + r.drawEdgeTrianglePath(edge, context, rs.allpts); + } else { + context.lineWidth = edgeWidth; + context.lineCap = lineCap; + r.eleStrokeStyle(context, edge, strokeOpacity); + r.drawEdgePath(edge, context, rs.allpts, lineStyle); + context.lineCap = 'butt'; // reset for other drawing functions + } + }; + + var drawOverlay = function drawOverlay() { + if (!shouldDrawOverlay) { + return; + } + r.drawEdgeOverlay(context, edge); + }; + var drawUnderlay = function drawUnderlay() { + if (!shouldDrawOverlay) { + return; + } + r.drawEdgeUnderlay(context, edge); + }; + var drawArrows = function drawArrows() { + var arrowOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : effectiveArrowOpacity; + r.drawArrowheads(context, edge, arrowOpacity); + }; + var drawText = function drawText() { + r.drawElementText(context, edge, null, drawLabel); + }; + context.lineJoin = 'round'; + var ghost = edge.pstyle('ghost').value === 'yes'; + if (ghost) { + var gx = edge.pstyle('ghost-offset-x').pfValue; + var gy = edge.pstyle('ghost-offset-y').pfValue; + var ghostOpacity = edge.pstyle('ghost-opacity').value; + var effectiveGhostOpacity = effectiveLineOpacity * ghostOpacity; + context.translate(gx, gy); + drawLine(effectiveGhostOpacity); + drawArrows(effectiveGhostOpacity); + context.translate(-gx, -gy); + } + drawUnderlay(); + drawLine(); + drawArrows(); + drawOverlay(); + drawText(); + if (shiftToOriginWithBb) { + context.translate(bb.x1, bb.y1); + } +}; +var drawEdgeOverlayUnderlay = function drawEdgeOverlayUnderlay(overlayOrUnderlay) { + if (!['overlay', 'underlay'].includes(overlayOrUnderlay)) { + throw new Error('Invalid state'); + } + return function (context, edge) { + if (!edge.visible()) { + return; + } + var opacity = edge.pstyle("".concat(overlayOrUnderlay, "-opacity")).value; + if (opacity === 0) { + return; + } + var r = this; + var usePaths = r.usePaths(); + var rs = edge._private.rscratch; + var padding = edge.pstyle("".concat(overlayOrUnderlay, "-padding")).pfValue; + var width = 2 * padding; + var color = edge.pstyle("".concat(overlayOrUnderlay, "-color")).value; + context.lineWidth = width; + if (rs.edgeType === 'self' && !usePaths) { + context.lineCap = 'butt'; + } else { + context.lineCap = 'round'; + } + r.colorStrokeStyle(context, color[0], color[1], color[2], opacity); + r.drawEdgePath(edge, context, rs.allpts, 'solid'); + }; +}; +CRp$8.drawEdgeOverlay = drawEdgeOverlayUnderlay('overlay'); +CRp$8.drawEdgeUnderlay = drawEdgeOverlayUnderlay('underlay'); +CRp$8.drawEdgePath = function (edge, context, pts, type) { + var rs = edge._private.rscratch; + var canvasCxt = context; + var path; + var pathCacheHit = false; + var usePaths = this.usePaths(); + var lineDashPattern = edge.pstyle('line-dash-pattern').pfValue; + var lineDashOffset = edge.pstyle('line-dash-offset').pfValue; + if (usePaths) { + var pathCacheKey = pts.join('$'); + var keyMatches = rs.pathCacheKey && rs.pathCacheKey === pathCacheKey; + if (keyMatches) { + path = context = rs.pathCache; + pathCacheHit = true; + } else { + path = context = new Path2D(); + rs.pathCacheKey = pathCacheKey; + rs.pathCache = path; + } + } + if (canvasCxt.setLineDash) { + // for very outofdate browsers + switch (type) { + case 'dotted': + canvasCxt.setLineDash([1, 1]); + break; + case 'dashed': + canvasCxt.setLineDash(lineDashPattern); + canvasCxt.lineDashOffset = lineDashOffset; + break; + case 'solid': + canvasCxt.setLineDash([]); + break; + } + } + if (!pathCacheHit && !rs.badLine) { + if (context.beginPath) { + context.beginPath(); + } + context.moveTo(pts[0], pts[1]); + switch (rs.edgeType) { + case 'bezier': + case 'self': + case 'compound': + case 'multibezier': + for (var i = 2; i + 3 < pts.length; i += 4) { + context.quadraticCurveTo(pts[i], pts[i + 1], pts[i + 2], pts[i + 3]); + } + break; + case 'straight': + case 'haystack': + for (var _i = 2; _i + 1 < pts.length; _i += 2) { + context.lineTo(pts[_i], pts[_i + 1]); + } + break; + case 'segments': + if (rs.isRound) { + var _iterator = _createForOfIteratorHelper(rs.roundCorners), + _step; + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var corner = _step.value; + drawPreparedRoundCorner(context, corner); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + context.lineTo(pts[pts.length - 2], pts[pts.length - 1]); + } else { + for (var _i2 = 2; _i2 + 1 < pts.length; _i2 += 2) { + context.lineTo(pts[_i2], pts[_i2 + 1]); + } + } + break; + } + } + context = canvasCxt; + if (usePaths) { + context.stroke(path); + } else { + context.stroke(); + } + + // reset any line dashes + if (context.setLineDash) { + // for very outofdate browsers + context.setLineDash([]); + } +}; +CRp$8.drawEdgeTrianglePath = function (edge, context, pts) { + // use line stroke style for triangle fill style + context.fillStyle = context.strokeStyle; + var edgeWidth = edge.pstyle('width').pfValue; + for (var i = 0; i + 1 < pts.length; i += 2) { + var vector = [pts[i + 2] - pts[i], pts[i + 3] - pts[i + 1]]; + var length = Math.sqrt(vector[0] * vector[0] + vector[1] * vector[1]); + var normal = [vector[1] / length, -vector[0] / length]; + var triangleHead = [normal[0] * edgeWidth / 2, normal[1] * edgeWidth / 2]; + context.beginPath(); + context.moveTo(pts[i] - triangleHead[0], pts[i + 1] - triangleHead[1]); + context.lineTo(pts[i] + triangleHead[0], pts[i + 1] + triangleHead[1]); + context.lineTo(pts[i + 2], pts[i + 3]); + context.closePath(); + context.fill(); + } +}; +CRp$8.drawArrowheads = function (context, edge, opacity) { + var rs = edge._private.rscratch; + var isHaystack = rs.edgeType === 'haystack'; + if (!isHaystack) { + this.drawArrowhead(context, edge, 'source', rs.arrowStartX, rs.arrowStartY, rs.srcArrowAngle, opacity); + } + this.drawArrowhead(context, edge, 'mid-target', rs.midX, rs.midY, rs.midtgtArrowAngle, opacity); + this.drawArrowhead(context, edge, 'mid-source', rs.midX, rs.midY, rs.midsrcArrowAngle, opacity); + if (!isHaystack) { + this.drawArrowhead(context, edge, 'target', rs.arrowEndX, rs.arrowEndY, rs.tgtArrowAngle, opacity); + } +}; +CRp$8.drawArrowhead = function (context, edge, prefix, x, y, angle, opacity) { + if (isNaN(x) || x == null || isNaN(y) || y == null || isNaN(angle) || angle == null) { + return; + } + var self = this; + var arrowShape = edge.pstyle(prefix + '-arrow-shape').value; + if (arrowShape === 'none') { + return; + } + var arrowClearFill = edge.pstyle(prefix + '-arrow-fill').value === 'hollow' ? 'both' : 'filled'; + var arrowFill = edge.pstyle(prefix + '-arrow-fill').value; + var edgeWidth = edge.pstyle('width').pfValue; + var pArrowWidth = edge.pstyle(prefix + '-arrow-width'); + var arrowWidth = pArrowWidth.value === 'match-line' ? edgeWidth : pArrowWidth.pfValue; + if (pArrowWidth.units === '%') arrowWidth *= edgeWidth; + var edgeOpacity = edge.pstyle('opacity').value; + if (opacity === undefined) { + opacity = edgeOpacity; + } + var gco = context.globalCompositeOperation; + if (opacity !== 1 || arrowFill === 'hollow') { + // then extra clear is needed + context.globalCompositeOperation = 'destination-out'; + self.colorFillStyle(context, 255, 255, 255, 1); + self.colorStrokeStyle(context, 255, 255, 255, 1); + self.drawArrowShape(edge, context, arrowClearFill, edgeWidth, arrowShape, arrowWidth, x, y, angle); + context.globalCompositeOperation = gco; + } // otherwise, the opaque arrow clears it for free :) + + var color = edge.pstyle(prefix + '-arrow-color').value; + self.colorFillStyle(context, color[0], color[1], color[2], opacity); + self.colorStrokeStyle(context, color[0], color[1], color[2], opacity); + self.drawArrowShape(edge, context, arrowFill, edgeWidth, arrowShape, arrowWidth, x, y, angle); +}; +CRp$8.drawArrowShape = function (edge, context, fill, edgeWidth, shape, shapeWidth, x, y, angle) { + var r = this; + var usePaths = this.usePaths() && shape !== 'triangle-cross'; + var pathCacheHit = false; + var path; + var canvasContext = context; + var translation = { + x: x, + y: y + }; + var scale = edge.pstyle('arrow-scale').value; + var size = this.getArrowWidth(edgeWidth, scale); + var shapeImpl = r.arrowShapes[shape]; + if (usePaths) { + var cache = r.arrowPathCache = r.arrowPathCache || []; + var key = hashString(shape); + var cachedPath = cache[key]; + if (cachedPath != null) { + path = context = cachedPath; + pathCacheHit = true; + } else { + path = context = new Path2D(); + cache[key] = path; + } + } + if (!pathCacheHit) { + if (context.beginPath) { + context.beginPath(); + } + if (usePaths) { + // store in the path cache with values easily manipulated later + shapeImpl.draw(context, 1, 0, { + x: 0, + y: 0 + }, 1); + } else { + shapeImpl.draw(context, size, angle, translation, edgeWidth); + } + if (context.closePath) { + context.closePath(); + } + } + context = canvasContext; + if (usePaths) { + // set transform to arrow position/orientation + context.translate(x, y); + context.rotate(angle); + context.scale(size, size); + } + if (fill === 'filled' || fill === 'both') { + if (usePaths) { + context.fill(path); + } else { + context.fill(); + } + } + if (fill === 'hollow' || fill === 'both') { + context.lineWidth = shapeWidth / (usePaths ? size : 1); + context.lineJoin = 'miter'; + if (usePaths) { + context.stroke(path); + } else { + context.stroke(); + } + } + if (usePaths) { + // reset transform by applying inverse + context.scale(1 / size, 1 / size); + context.rotate(-angle); + context.translate(-x, -y); + } +}; + +var CRp$7 = {}; +CRp$7.safeDrawImage = function (context, img, ix, iy, iw, ih, x, y, w, h) { + // detect problematic cases for old browsers with bad images (cheaper than try-catch) + if (iw <= 0 || ih <= 0 || w <= 0 || h <= 0) { + return; + } + try { + context.drawImage(img, ix, iy, iw, ih, x, y, w, h); + } catch (e) { + warn(e); + } +}; +CRp$7.drawInscribedImage = function (context, img, node, index, nodeOpacity) { + var r = this; + var pos = node.position(); + var nodeX = pos.x; + var nodeY = pos.y; + var styleObj = node.cy().style(); + var getIndexedStyle = styleObj.getIndexedStyle.bind(styleObj); + var fit = getIndexedStyle(node, 'background-fit', 'value', index); + var repeat = getIndexedStyle(node, 'background-repeat', 'value', index); + var nodeW = node.width(); + var nodeH = node.height(); + var paddingX2 = node.padding() * 2; + var nodeTW = nodeW + (getIndexedStyle(node, 'background-width-relative-to', 'value', index) === 'inner' ? 0 : paddingX2); + var nodeTH = nodeH + (getIndexedStyle(node, 'background-height-relative-to', 'value', index) === 'inner' ? 0 : paddingX2); + var rs = node._private.rscratch; + var clip = getIndexedStyle(node, 'background-clip', 'value', index); + var shouldClip = clip === 'node'; + var imgOpacity = getIndexedStyle(node, 'background-image-opacity', 'value', index) * nodeOpacity; + var smooth = getIndexedStyle(node, 'background-image-smoothing', 'value', index); + var cornerRadius = node.pstyle('corner-radius').value; + if (cornerRadius !== 'auto') cornerRadius = node.pstyle('corner-radius').pfValue; + var imgW = img.width || img.cachedW; + var imgH = img.height || img.cachedH; + + // workaround for broken browsers like ie + if (null == imgW || null == imgH) { + document.body.appendChild(img); // eslint-disable-line no-undef + + imgW = img.cachedW = img.width || img.offsetWidth; + imgH = img.cachedH = img.height || img.offsetHeight; + document.body.removeChild(img); // eslint-disable-line no-undef + } + + var w = imgW; + var h = imgH; + if (getIndexedStyle(node, 'background-width', 'value', index) !== 'auto') { + if (getIndexedStyle(node, 'background-width', 'units', index) === '%') { + w = getIndexedStyle(node, 'background-width', 'pfValue', index) * nodeTW; + } else { + w = getIndexedStyle(node, 'background-width', 'pfValue', index); + } + } + if (getIndexedStyle(node, 'background-height', 'value', index) !== 'auto') { + if (getIndexedStyle(node, 'background-height', 'units', index) === '%') { + h = getIndexedStyle(node, 'background-height', 'pfValue', index) * nodeTH; + } else { + h = getIndexedStyle(node, 'background-height', 'pfValue', index); + } + } + if (w === 0 || h === 0) { + return; // no point in drawing empty image (and chrome is broken in this case) + } + + if (fit === 'contain') { + var scale = Math.min(nodeTW / w, nodeTH / h); + w *= scale; + h *= scale; + } else if (fit === 'cover') { + var scale = Math.max(nodeTW / w, nodeTH / h); + w *= scale; + h *= scale; + } + var x = nodeX - nodeTW / 2; // left + var posXUnits = getIndexedStyle(node, 'background-position-x', 'units', index); + var posXPfVal = getIndexedStyle(node, 'background-position-x', 'pfValue', index); + if (posXUnits === '%') { + x += (nodeTW - w) * posXPfVal; + } else { + x += posXPfVal; + } + var offXUnits = getIndexedStyle(node, 'background-offset-x', 'units', index); + var offXPfVal = getIndexedStyle(node, 'background-offset-x', 'pfValue', index); + if (offXUnits === '%') { + x += (nodeTW - w) * offXPfVal; + } else { + x += offXPfVal; + } + var y = nodeY - nodeTH / 2; // top + var posYUnits = getIndexedStyle(node, 'background-position-y', 'units', index); + var posYPfVal = getIndexedStyle(node, 'background-position-y', 'pfValue', index); + if (posYUnits === '%') { + y += (nodeTH - h) * posYPfVal; + } else { + y += posYPfVal; + } + var offYUnits = getIndexedStyle(node, 'background-offset-y', 'units', index); + var offYPfVal = getIndexedStyle(node, 'background-offset-y', 'pfValue', index); + if (offYUnits === '%') { + y += (nodeTH - h) * offYPfVal; + } else { + y += offYPfVal; + } + if (rs.pathCache) { + x -= nodeX; + y -= nodeY; + nodeX = 0; + nodeY = 0; + } + var gAlpha = context.globalAlpha; + context.globalAlpha = imgOpacity; + var smoothingEnabled = r.getImgSmoothing(context); + var isSmoothingSwitched = false; + if (smooth === 'no' && smoothingEnabled) { + r.setImgSmoothing(context, false); + isSmoothingSwitched = true; + } else if (smooth === 'yes' && !smoothingEnabled) { + r.setImgSmoothing(context, true); + isSmoothingSwitched = true; + } + if (repeat === 'no-repeat') { + if (shouldClip) { + context.save(); + if (rs.pathCache) { + context.clip(rs.pathCache); + } else { + r.nodeShapes[r.getNodeShape(node)].draw(context, nodeX, nodeY, nodeTW, nodeTH, cornerRadius, rs); + context.clip(); + } + } + r.safeDrawImage(context, img, 0, 0, imgW, imgH, x, y, w, h); + if (shouldClip) { + context.restore(); + } + } else { + var pattern = context.createPattern(img, repeat); + context.fillStyle = pattern; + r.nodeShapes[r.getNodeShape(node)].draw(context, nodeX, nodeY, nodeTW, nodeTH, cornerRadius, rs); + context.translate(x, y); + context.fill(); + context.translate(-x, -y); + } + context.globalAlpha = gAlpha; + if (isSmoothingSwitched) { + r.setImgSmoothing(context, smoothingEnabled); + } +}; + +var CRp$6 = {}; +CRp$6.eleTextBiggerThanMin = function (ele, scale) { + if (!scale) { + var zoom = ele.cy().zoom(); + var pxRatio = this.getPixelRatio(); + var lvl = Math.ceil(log2(zoom * pxRatio)); // the effective texture level + + scale = Math.pow(2, lvl); + } + var computedSize = ele.pstyle('font-size').pfValue * scale; + var minSize = ele.pstyle('min-zoomed-font-size').pfValue; + if (computedSize < minSize) { + return false; + } + return true; +}; +CRp$6.drawElementText = function (context, ele, shiftToOriginWithBb, force, prefix) { + var useEleOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; + var r = this; + if (force == null) { + if (useEleOpacity && !r.eleTextBiggerThanMin(ele)) { + return; + } + } else if (force === false) { + return; + } + if (ele.isNode()) { + var label = ele.pstyle('label'); + if (!label || !label.value) { + return; + } + var justification = r.getLabelJustification(ele); + context.textAlign = justification; + context.textBaseline = 'bottom'; + } else { + var badLine = ele.element()._private.rscratch.badLine; + var _label = ele.pstyle('label'); + var srcLabel = ele.pstyle('source-label'); + var tgtLabel = ele.pstyle('target-label'); + if (badLine || (!_label || !_label.value) && (!srcLabel || !srcLabel.value) && (!tgtLabel || !tgtLabel.value)) { + return; + } + context.textAlign = 'center'; + context.textBaseline = 'bottom'; + } + var applyRotation = !shiftToOriginWithBb; + var bb; + if (shiftToOriginWithBb) { + bb = shiftToOriginWithBb; + context.translate(-bb.x1, -bb.y1); + } + if (prefix == null) { + r.drawText(context, ele, null, applyRotation, useEleOpacity); + if (ele.isEdge()) { + r.drawText(context, ele, 'source', applyRotation, useEleOpacity); + r.drawText(context, ele, 'target', applyRotation, useEleOpacity); + } + } else { + r.drawText(context, ele, prefix, applyRotation, useEleOpacity); + } + if (shiftToOriginWithBb) { + context.translate(bb.x1, bb.y1); + } +}; +CRp$6.getFontCache = function (context) { + var cache; + this.fontCaches = this.fontCaches || []; + for (var i = 0; i < this.fontCaches.length; i++) { + cache = this.fontCaches[i]; + if (cache.context === context) { + return cache; + } + } + cache = { + context: context + }; + this.fontCaches.push(cache); + return cache; +}; + +// set up canvas context with font +// returns transformed text string +CRp$6.setupTextStyle = function (context, ele) { + var useEleOpacity = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + // Font style + var labelStyle = ele.pstyle('font-style').strValue; + var labelSize = ele.pstyle('font-size').pfValue + 'px'; + var labelFamily = ele.pstyle('font-family').strValue; + var labelWeight = ele.pstyle('font-weight').strValue; + var opacity = useEleOpacity ? ele.effectiveOpacity() * ele.pstyle('text-opacity').value : 1; + var outlineOpacity = ele.pstyle('text-outline-opacity').value * opacity; + var color = ele.pstyle('color').value; + var outlineColor = ele.pstyle('text-outline-color').value; + context.font = labelStyle + ' ' + labelWeight + ' ' + labelSize + ' ' + labelFamily; + context.lineJoin = 'round'; // so text outlines aren't jagged + + this.colorFillStyle(context, color[0], color[1], color[2], opacity); + this.colorStrokeStyle(context, outlineColor[0], outlineColor[1], outlineColor[2], outlineOpacity); +}; + +// TODO ensure re-used +function roundRect(ctx, x, y, width, height) { + var radius = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 5; + var stroke = arguments.length > 6 ? arguments[6] : undefined; + ctx.beginPath(); + ctx.moveTo(x + radius, y); + ctx.lineTo(x + width - radius, y); + ctx.quadraticCurveTo(x + width, y, x + width, y + radius); + ctx.lineTo(x + width, y + height - radius); + ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height); + ctx.lineTo(x + radius, y + height); + ctx.quadraticCurveTo(x, y + height, x, y + height - radius); + ctx.lineTo(x, y + radius); + ctx.quadraticCurveTo(x, y, x + radius, y); + ctx.closePath(); + if (stroke) ctx.stroke();else ctx.fill(); +} +CRp$6.getTextAngle = function (ele, prefix) { + var theta; + var _p = ele._private; + var rscratch = _p.rscratch; + var pdash = prefix ? prefix + '-' : ''; + var rotation = ele.pstyle(pdash + 'text-rotation'); + var textAngle = getPrefixedProperty(rscratch, 'labelAngle', prefix); + if (rotation.strValue === 'autorotate') { + theta = ele.isEdge() ? textAngle : 0; + } else if (rotation.strValue === 'none') { + theta = 0; + } else { + theta = rotation.pfValue; + } + return theta; +}; +CRp$6.drawText = function (context, ele, prefix) { + var applyRotation = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var useEleOpacity = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var _p = ele._private; + var rscratch = _p.rscratch; + var parentOpacity = useEleOpacity ? ele.effectiveOpacity() : 1; + if (useEleOpacity && (parentOpacity === 0 || ele.pstyle('text-opacity').value === 0)) { + return; + } + + // use 'main' as an alias for the main label (i.e. null prefix) + if (prefix === 'main') { + prefix = null; + } + var textX = getPrefixedProperty(rscratch, 'labelX', prefix); + var textY = getPrefixedProperty(rscratch, 'labelY', prefix); + var orgTextX, orgTextY; // used for rotation + var text = this.getLabelText(ele, prefix); + if (text != null && text !== '' && !isNaN(textX) && !isNaN(textY)) { + this.setupTextStyle(context, ele, useEleOpacity); + var pdash = prefix ? prefix + '-' : ''; + var textW = getPrefixedProperty(rscratch, 'labelWidth', prefix); + var textH = getPrefixedProperty(rscratch, 'labelHeight', prefix); + var marginX = ele.pstyle(pdash + 'text-margin-x').pfValue; + var marginY = ele.pstyle(pdash + 'text-margin-y').pfValue; + var isEdge = ele.isEdge(); + var halign = ele.pstyle('text-halign').value; + var valign = ele.pstyle('text-valign').value; + if (isEdge) { + halign = 'center'; + valign = 'center'; + } + textX += marginX; + textY += marginY; + var theta; + if (!applyRotation) { + theta = 0; + } else { + theta = this.getTextAngle(ele, prefix); + } + if (theta !== 0) { + orgTextX = textX; + orgTextY = textY; + context.translate(orgTextX, orgTextY); + context.rotate(theta); + textX = 0; + textY = 0; + } + switch (valign) { + case 'top': + break; + case 'center': + textY += textH / 2; + break; + case 'bottom': + textY += textH; + break; + } + var backgroundOpacity = ele.pstyle('text-background-opacity').value; + var borderOpacity = ele.pstyle('text-border-opacity').value; + var textBorderWidth = ele.pstyle('text-border-width').pfValue; + var backgroundPadding = ele.pstyle('text-background-padding').pfValue; + var styleShape = ele.pstyle('text-background-shape').strValue; + var rounded = styleShape.indexOf('round') === 0; + var roundRadius = 2; + if (backgroundOpacity > 0 || textBorderWidth > 0 && borderOpacity > 0) { + var bgX = textX - backgroundPadding; + switch (halign) { + case 'left': + bgX -= textW; + break; + case 'center': + bgX -= textW / 2; + break; + } + var bgY = textY - textH - backgroundPadding; + var bgW = textW + 2 * backgroundPadding; + var bgH = textH + 2 * backgroundPadding; + if (backgroundOpacity > 0) { + var textFill = context.fillStyle; + var textBackgroundColor = ele.pstyle('text-background-color').value; + context.fillStyle = 'rgba(' + textBackgroundColor[0] + ',' + textBackgroundColor[1] + ',' + textBackgroundColor[2] + ',' + backgroundOpacity * parentOpacity + ')'; + if (rounded) { + roundRect(context, bgX, bgY, bgW, bgH, roundRadius); + } else { + context.fillRect(bgX, bgY, bgW, bgH); + } + context.fillStyle = textFill; + } + if (textBorderWidth > 0 && borderOpacity > 0) { + var textStroke = context.strokeStyle; + var textLineWidth = context.lineWidth; + var textBorderColor = ele.pstyle('text-border-color').value; + var textBorderStyle = ele.pstyle('text-border-style').value; + context.strokeStyle = 'rgba(' + textBorderColor[0] + ',' + textBorderColor[1] + ',' + textBorderColor[2] + ',' + borderOpacity * parentOpacity + ')'; + context.lineWidth = textBorderWidth; + if (context.setLineDash) { + // for very outofdate browsers + switch (textBorderStyle) { + case 'dotted': + context.setLineDash([1, 1]); + break; + case 'dashed': + context.setLineDash([4, 2]); + break; + case 'double': + context.lineWidth = textBorderWidth / 4; // 50% reserved for white between the two borders + context.setLineDash([]); + break; + case 'solid': + context.setLineDash([]); + break; + } + } + if (rounded) { + roundRect(context, bgX, bgY, bgW, bgH, roundRadius, 'stroke'); + } else { + context.strokeRect(bgX, bgY, bgW, bgH); + } + if (textBorderStyle === 'double') { + var whiteWidth = textBorderWidth / 2; + if (rounded) { + roundRect(context, bgX + whiteWidth, bgY + whiteWidth, bgW - whiteWidth * 2, bgH - whiteWidth * 2, roundRadius, 'stroke'); + } else { + context.strokeRect(bgX + whiteWidth, bgY + whiteWidth, bgW - whiteWidth * 2, bgH - whiteWidth * 2); + } + } + if (context.setLineDash) { + // for very outofdate browsers + context.setLineDash([]); + } + context.lineWidth = textLineWidth; + context.strokeStyle = textStroke; + } + } + var lineWidth = 2 * ele.pstyle('text-outline-width').pfValue; // *2 b/c the stroke is drawn centred on the middle + + if (lineWidth > 0) { + context.lineWidth = lineWidth; + } + if (ele.pstyle('text-wrap').value === 'wrap') { + var lines = getPrefixedProperty(rscratch, 'labelWrapCachedLines', prefix); + var lineHeight = getPrefixedProperty(rscratch, 'labelLineHeight', prefix); + var halfTextW = textW / 2; + var justification = this.getLabelJustification(ele); + if (justification === 'auto') ; else if (halign === 'left') { + // auto justification : right + if (justification === 'left') { + textX += -textW; + } else if (justification === 'center') { + textX += -halfTextW; + } // else same as auto + } else if (halign === 'center') { + // auto justfication : center + if (justification === 'left') { + textX += -halfTextW; + } else if (justification === 'right') { + textX += halfTextW; + } // else same as auto + } else if (halign === 'right') { + // auto justification : left + if (justification === 'center') { + textX += halfTextW; + } else if (justification === 'right') { + textX += textW; + } // else same as auto + } + + switch (valign) { + case 'top': + textY -= (lines.length - 1) * lineHeight; + break; + case 'center': + case 'bottom': + textY -= (lines.length - 1) * lineHeight; + break; + } + for (var l = 0; l < lines.length; l++) { + if (lineWidth > 0) { + context.strokeText(lines[l], textX, textY); + } + context.fillText(lines[l], textX, textY); + textY += lineHeight; + } + } else { + if (lineWidth > 0) { + context.strokeText(text, textX, textY); + } + context.fillText(text, textX, textY); + } + if (theta !== 0) { + context.rotate(-theta); + context.translate(-orgTextX, -orgTextY); + } + } +}; + +/* global Path2D */ +var CRp$5 = {}; +CRp$5.drawNode = function (context, node, shiftToOriginWithBb) { + var drawLabel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var shouldDrawOverlay = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var shouldDrawOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; + var r = this; + var nodeWidth, nodeHeight; + var _p = node._private; + var rs = _p.rscratch; + var pos = node.position(); + if (!number$1(pos.x) || !number$1(pos.y)) { + return; // can't draw node with undefined position + } + + if (shouldDrawOpacity && !node.visible()) { + return; + } + var eleOpacity = shouldDrawOpacity ? node.effectiveOpacity() : 1; + var usePaths = r.usePaths(); + var path; + var pathCacheHit = false; + var padding = node.padding(); + nodeWidth = node.width() + 2 * padding; + nodeHeight = node.height() + 2 * padding; + + // + // setup shift + + var bb; + if (shiftToOriginWithBb) { + bb = shiftToOriginWithBb; + context.translate(-bb.x1, -bb.y1); + } + + // + // load bg image + + var bgImgProp = node.pstyle('background-image'); + var urls = bgImgProp.value; + var urlDefined = new Array(urls.length); + var image = new Array(urls.length); + var numImages = 0; + for (var i = 0; i < urls.length; i++) { + var url = urls[i]; + var defd = urlDefined[i] = url != null && url !== 'none'; + if (defd) { + var bgImgCrossOrigin = node.cy().style().getIndexedStyle(node, 'background-image-crossorigin', 'value', i); + numImages++; + + // get image, and if not loaded then ask to redraw when later loaded + image[i] = r.getCachedImage(url, bgImgCrossOrigin, function () { + _p.backgroundTimestamp = Date.now(); + node.emitAndNotify('background'); + }); + } + } + + // + // setup styles + + var darkness = node.pstyle('background-blacken').value; + var borderWidth = node.pstyle('border-width').pfValue; + var bgOpacity = node.pstyle('background-opacity').value * eleOpacity; + var borderColor = node.pstyle('border-color').value; + var borderStyle = node.pstyle('border-style').value; + var borderJoin = node.pstyle('border-join').value; + var borderCap = node.pstyle('border-cap').value; + var borderPosition = node.pstyle('border-position').value; + var borderPattern = node.pstyle('border-dash-pattern').pfValue; + var borderOffset = node.pstyle('border-dash-offset').pfValue; + var borderOpacity = node.pstyle('border-opacity').value * eleOpacity; + var outlineWidth = node.pstyle('outline-width').pfValue; + var outlineColor = node.pstyle('outline-color').value; + var outlineStyle = node.pstyle('outline-style').value; + var outlineOpacity = node.pstyle('outline-opacity').value * eleOpacity; + var outlineOffset = node.pstyle('outline-offset').value; + var cornerRadius = node.pstyle('corner-radius').value; + if (cornerRadius !== 'auto') cornerRadius = node.pstyle('corner-radius').pfValue; + var setupShapeColor = function setupShapeColor() { + var bgOpy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : bgOpacity; + r.eleFillStyle(context, node, bgOpy); + }; + var setupBorderColor = function setupBorderColor() { + var bdrOpy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : borderOpacity; + r.colorStrokeStyle(context, borderColor[0], borderColor[1], borderColor[2], bdrOpy); + }; + var setupOutlineColor = function setupOutlineColor() { + var otlnOpy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : outlineOpacity; + r.colorStrokeStyle(context, outlineColor[0], outlineColor[1], outlineColor[2], otlnOpy); + }; + + // + // setup shape + + var getPath = function getPath(width, height, shape, points) { + var pathCache = r.nodePathCache = r.nodePathCache || []; + var key = hashStrings(shape === 'polygon' ? shape + ',' + points.join(',') : shape, '' + height, '' + width, '' + cornerRadius); + var cachedPath = pathCache[key]; + var path; + var cacheHit = false; + if (cachedPath != null) { + path = cachedPath; + cacheHit = true; + rs.pathCache = path; + } else { + path = new Path2D(); + pathCache[key] = rs.pathCache = path; + } + return { + path: path, + cacheHit: cacheHit + }; + }; + var styleShape = node.pstyle('shape').strValue; + var shapePts = node.pstyle('shape-polygon-points').pfValue; + if (usePaths) { + context.translate(pos.x, pos.y); + var shapePath = getPath(nodeWidth, nodeHeight, styleShape, shapePts); + path = shapePath.path; + pathCacheHit = shapePath.cacheHit; + } + var drawShape = function drawShape() { + if (!pathCacheHit) { + var npos = pos; + if (usePaths) { + npos = { + x: 0, + y: 0 + }; + } + r.nodeShapes[r.getNodeShape(node)].draw(path || context, npos.x, npos.y, nodeWidth, nodeHeight, cornerRadius, rs); + } + if (usePaths) { + context.fill(path); + } else { + context.fill(); + } + }; + var drawImages = function drawImages() { + var nodeOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : eleOpacity; + var inside = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var prevBging = _p.backgrounding; + var totalCompleted = 0; + for (var _i = 0; _i < image.length; _i++) { + var bgContainment = node.cy().style().getIndexedStyle(node, 'background-image-containment', 'value', _i); + if (inside && bgContainment === 'over' || !inside && bgContainment === 'inside') { + totalCompleted++; + continue; + } + if (urlDefined[_i] && image[_i].complete && !image[_i].error) { + totalCompleted++; + r.drawInscribedImage(context, image[_i], node, _i, nodeOpacity); + } + } + _p.backgrounding = !(totalCompleted === numImages); + if (prevBging !== _p.backgrounding) { + // update style b/c :backgrounding state changed + node.updateStyle(false); + } + }; + var drawPie = function drawPie() { + var redrawShape = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var pieOpacity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : eleOpacity; + if (r.hasPie(node)) { + r.drawPie(context, node, pieOpacity); + + // redraw/restore path if steps after pie need it + if (redrawShape) { + if (!usePaths) { + r.nodeShapes[r.getNodeShape(node)].draw(context, pos.x, pos.y, nodeWidth, nodeHeight, cornerRadius, rs); + } + } + } + }; + var darken = function darken() { + var darkenOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : eleOpacity; + var opacity = (darkness > 0 ? darkness : -darkness) * darkenOpacity; + var c = darkness > 0 ? 0 : 255; + if (darkness !== 0) { + r.colorFillStyle(context, c, c, c, opacity); + if (usePaths) { + context.fill(path); + } else { + context.fill(); + } + } + }; + var drawBorder = function drawBorder() { + if (borderWidth > 0) { + context.lineWidth = borderWidth; + context.lineCap = borderCap; + context.lineJoin = borderJoin; + if (context.setLineDash) { + // for very outofdate browsers + switch (borderStyle) { + case 'dotted': + context.setLineDash([1, 1]); + break; + case 'dashed': + context.setLineDash(borderPattern); + context.lineDashOffset = borderOffset; + break; + case 'solid': + case 'double': + context.setLineDash([]); + break; + } + } + if (borderPosition !== 'center') { + context.save(); + context.lineWidth *= 2; + if (borderPosition === 'inside') { + usePaths ? context.clip(path) : context.clip(); + } else { + var region = new Path2D(); + region.rect(-nodeWidth / 2 - borderWidth, -nodeHeight / 2 - borderWidth, nodeWidth + 2 * borderWidth, nodeHeight + 2 * borderWidth); + region.addPath(path); + context.clip(region, 'evenodd'); + } + usePaths ? context.stroke(path) : context.stroke(); + context.restore(); + } else { + usePaths ? context.stroke(path) : context.stroke(); + } + if (borderStyle === 'double') { + context.lineWidth = borderWidth / 3; + var gco = context.globalCompositeOperation; + context.globalCompositeOperation = 'destination-out'; + if (usePaths) { + context.stroke(path); + } else { + context.stroke(); + } + context.globalCompositeOperation = gco; + } + + // reset in case we changed the border style + if (context.setLineDash) { + // for very outofdate browsers + context.setLineDash([]); + } + } + }; + var drawOutline = function drawOutline() { + if (outlineWidth > 0) { + context.lineWidth = outlineWidth; + context.lineCap = 'butt'; + if (context.setLineDash) { + // for very outofdate browsers + switch (outlineStyle) { + case 'dotted': + context.setLineDash([1, 1]); + break; + case 'dashed': + context.setLineDash([4, 2]); + break; + case 'solid': + case 'double': + context.setLineDash([]); + break; + } + } + var npos = pos; + if (usePaths) { + npos = { + x: 0, + y: 0 + }; + } + var shape = r.getNodeShape(node); + var bWidth = borderWidth; + if (borderPosition === 'inside') bWidth = 0; + if (borderPosition === 'outside') bWidth *= 2; + var scaleX = (nodeWidth + bWidth + (outlineWidth + outlineOffset)) / nodeWidth; + var scaleY = (nodeHeight + bWidth + (outlineWidth + outlineOffset)) / nodeHeight; + var sWidth = nodeWidth * scaleX; + var sHeight = nodeHeight * scaleY; + var points = r.nodeShapes[shape].points; + var _path; + if (usePaths) { + var outlinePath = getPath(sWidth, sHeight, shape, points); + _path = outlinePath.path; + } + + // draw the outline path, either by using expanded points or by scaling + // the dimensions, depending on shape + if (shape === "ellipse") { + r.drawEllipsePath(_path || context, npos.x, npos.y, sWidth, sHeight); + } else if (['round-diamond', 'round-heptagon', 'round-hexagon', 'round-octagon', 'round-pentagon', 'round-polygon', 'round-triangle', 'round-tag'].includes(shape)) { + var sMult = 0; + var offsetX = 0; + var offsetY = 0; + if (shape === 'round-diamond') { + sMult = (bWidth + outlineOffset + outlineWidth) * 1.4; + } else if (shape === 'round-heptagon') { + sMult = (bWidth + outlineOffset + outlineWidth) * 1.075; + offsetY = -(bWidth / 2 + outlineOffset + outlineWidth) / 35; + } else if (shape === 'round-hexagon') { + sMult = (bWidth + outlineOffset + outlineWidth) * 1.12; + } else if (shape === 'round-pentagon') { + sMult = (bWidth + outlineOffset + outlineWidth) * 1.13; + offsetY = -(bWidth / 2 + outlineOffset + outlineWidth) / 15; + } else if (shape === 'round-tag') { + sMult = (bWidth + outlineOffset + outlineWidth) * 1.12; + offsetX = (bWidth / 2 + outlineWidth + outlineOffset) * .07; + } else if (shape === 'round-triangle') { + sMult = (bWidth + outlineOffset + outlineWidth) * (Math.PI / 2); + offsetY = -(bWidth + outlineOffset / 2 + outlineWidth) / Math.PI; + } + if (sMult !== 0) { + scaleX = (nodeWidth + sMult) / nodeWidth; + sWidth = nodeWidth * scaleX; + if (!['round-hexagon', 'round-tag'].includes(shape)) { + scaleY = (nodeHeight + sMult) / nodeHeight; + sHeight = nodeHeight * scaleY; + } + } + cornerRadius = cornerRadius === 'auto' ? getRoundPolygonRadius(sWidth, sHeight) : cornerRadius; + var halfW = sWidth / 2; + var halfH = sHeight / 2; + var radius = cornerRadius + (bWidth + outlineWidth + outlineOffset) / 2; + var p = new Array(points.length / 2); + var corners = new Array(points.length / 2); + for (var _i3 = 0; _i3 < points.length / 2; _i3++) { + p[_i3] = { + x: npos.x + offsetX + halfW * points[_i3 * 2], + y: npos.y + offsetY + halfH * points[_i3 * 2 + 1] + }; + } + var _i2, + p1, + p2, + p3, + len = p.length; + p1 = p[len - 1]; + // for each point + for (_i2 = 0; _i2 < len; _i2++) { + p2 = p[_i2 % len]; + p3 = p[(_i2 + 1) % len]; + corners[_i2] = getRoundCorner(p1, p2, p3, radius); + p1 = p2; + p2 = p3; + } + r.drawRoundPolygonPath(_path || context, npos.x + offsetX, npos.y + offsetY, nodeWidth * scaleX, nodeHeight * scaleY, points, corners); + } else if (['roundrectangle', 'round-rectangle'].includes(shape)) { + cornerRadius = cornerRadius === 'auto' ? getRoundRectangleRadius(sWidth, sHeight) : cornerRadius; + r.drawRoundRectanglePath(_path || context, npos.x, npos.y, sWidth, sHeight, cornerRadius + (bWidth + outlineWidth + outlineOffset) / 2); + } else if (['cutrectangle', 'cut-rectangle'].includes(shape)) { + cornerRadius = cornerRadius === 'auto' ? getCutRectangleCornerLength() : cornerRadius; + r.drawCutRectanglePath(_path || context, npos.x, npos.y, sWidth, sHeight, null, cornerRadius + (bWidth + outlineWidth + outlineOffset) / 4); + } else if (['bottomroundrectangle', 'bottom-round-rectangle'].includes(shape)) { + cornerRadius = cornerRadius === 'auto' ? getRoundRectangleRadius(sWidth, sHeight) : cornerRadius; + r.drawBottomRoundRectanglePath(_path || context, npos.x, npos.y, sWidth, sHeight, cornerRadius + (bWidth + outlineWidth + outlineOffset) / 2); + } else if (shape === "barrel") { + r.drawBarrelPath(_path || context, npos.x, npos.y, sWidth, sHeight); + } else if (shape.startsWith("polygon") || ['rhomboid', 'right-rhomboid', 'round-tag', 'tag', 'vee'].includes(shape)) { + var pad = (bWidth + outlineWidth + outlineOffset) / nodeWidth; + points = joinLines(expandPolygon(points, pad)); + r.drawPolygonPath(_path || context, npos.x, npos.y, nodeWidth, nodeHeight, points); + } else { + var _pad = (bWidth + outlineWidth + outlineOffset) / nodeWidth; + points = joinLines(expandPolygon(points, -_pad)); + r.drawPolygonPath(_path || context, npos.x, npos.y, nodeWidth, nodeHeight, points); + } + if (usePaths) { + context.stroke(_path); + } else { + context.stroke(); + } + if (outlineStyle === 'double') { + context.lineWidth = bWidth / 3; + var gco = context.globalCompositeOperation; + context.globalCompositeOperation = 'destination-out'; + if (usePaths) { + context.stroke(_path); + } else { + context.stroke(); + } + context.globalCompositeOperation = gco; + } + + // reset in case we changed the border style + if (context.setLineDash) { + // for very outofdate browsers + context.setLineDash([]); + } + } + }; + var drawOverlay = function drawOverlay() { + if (shouldDrawOverlay) { + r.drawNodeOverlay(context, node, pos, nodeWidth, nodeHeight); + } + }; + var drawUnderlay = function drawUnderlay() { + if (shouldDrawOverlay) { + r.drawNodeUnderlay(context, node, pos, nodeWidth, nodeHeight); + } + }; + var drawText = function drawText() { + r.drawElementText(context, node, null, drawLabel); + }; + var ghost = node.pstyle('ghost').value === 'yes'; + if (ghost) { + var gx = node.pstyle('ghost-offset-x').pfValue; + var gy = node.pstyle('ghost-offset-y').pfValue; + var ghostOpacity = node.pstyle('ghost-opacity').value; + var effGhostOpacity = ghostOpacity * eleOpacity; + context.translate(gx, gy); + setupOutlineColor(); + drawOutline(); + setupShapeColor(ghostOpacity * bgOpacity); + drawShape(); + drawImages(effGhostOpacity, true); + setupBorderColor(ghostOpacity * borderOpacity); + drawBorder(); + drawPie(darkness !== 0 || borderWidth !== 0); + drawImages(effGhostOpacity, false); + darken(effGhostOpacity); + context.translate(-gx, -gy); + } + if (usePaths) { + context.translate(-pos.x, -pos.y); + } + drawUnderlay(); + if (usePaths) { + context.translate(pos.x, pos.y); + } + setupOutlineColor(); + drawOutline(); + setupShapeColor(); + drawShape(); + drawImages(eleOpacity, true); + setupBorderColor(); + drawBorder(); + drawPie(darkness !== 0 || borderWidth !== 0); + drawImages(eleOpacity, false); + darken(); + if (usePaths) { + context.translate(-pos.x, -pos.y); + } + drawText(); + drawOverlay(); + + // + // clean up shift + + if (shiftToOriginWithBb) { + context.translate(bb.x1, bb.y1); + } +}; +var drawNodeOverlayUnderlay = function drawNodeOverlayUnderlay(overlayOrUnderlay) { + if (!['overlay', 'underlay'].includes(overlayOrUnderlay)) { + throw new Error('Invalid state'); + } + return function (context, node, pos, nodeWidth, nodeHeight) { + var r = this; + if (!node.visible()) { + return; + } + var padding = node.pstyle("".concat(overlayOrUnderlay, "-padding")).pfValue; + var opacity = node.pstyle("".concat(overlayOrUnderlay, "-opacity")).value; + var color = node.pstyle("".concat(overlayOrUnderlay, "-color")).value; + var shape = node.pstyle("".concat(overlayOrUnderlay, "-shape")).value; + var radius = node.pstyle("".concat(overlayOrUnderlay, "-corner-radius")).value; + if (opacity > 0) { + pos = pos || node.position(); + if (nodeWidth == null || nodeHeight == null) { + var _padding = node.padding(); + nodeWidth = node.width() + 2 * _padding; + nodeHeight = node.height() + 2 * _padding; + } + r.colorFillStyle(context, color[0], color[1], color[2], opacity); + r.nodeShapes[shape].draw(context, pos.x, pos.y, nodeWidth + padding * 2, nodeHeight + padding * 2, radius); + context.fill(); + } + }; +}; +CRp$5.drawNodeOverlay = drawNodeOverlayUnderlay('overlay'); +CRp$5.drawNodeUnderlay = drawNodeOverlayUnderlay('underlay'); + +// does the node have at least one pie piece? +CRp$5.hasPie = function (node) { + node = node[0]; // ensure ele ref + + return node._private.hasPie; +}; +CRp$5.drawPie = function (context, node, nodeOpacity, pos) { + node = node[0]; // ensure ele ref + pos = pos || node.position(); + var cyStyle = node.cy().style(); + var pieSize = node.pstyle('pie-size'); + var x = pos.x; + var y = pos.y; + var nodeW = node.width(); + var nodeH = node.height(); + var radius = Math.min(nodeW, nodeH) / 2; // must fit in node + var lastPercent = 0; // what % to continue drawing pie slices from on [0, 1] + var usePaths = this.usePaths(); + if (usePaths) { + x = 0; + y = 0; + } + if (pieSize.units === '%') { + radius = radius * pieSize.pfValue; + } else if (pieSize.pfValue !== undefined) { + radius = pieSize.pfValue / 2; + } + for (var i = 1; i <= cyStyle.pieBackgroundN; i++) { + // 1..N + var size = node.pstyle('pie-' + i + '-background-size').value; + var color = node.pstyle('pie-' + i + '-background-color').value; + var opacity = node.pstyle('pie-' + i + '-background-opacity').value * nodeOpacity; + var percent = size / 100; // map integer range [0, 100] to [0, 1] + + // percent can't push beyond 1 + if (percent + lastPercent > 1) { + percent = 1 - lastPercent; + } + var angleStart = 1.5 * Math.PI + 2 * Math.PI * lastPercent; // start at 12 o'clock and go clockwise + var angleDelta = 2 * Math.PI * percent; + var angleEnd = angleStart + angleDelta; + + // ignore if + // - zero size + // - we're already beyond the full circle + // - adding the current slice would go beyond the full circle + if (size === 0 || lastPercent >= 1 || lastPercent + percent > 1) { + continue; + } + context.beginPath(); + context.moveTo(x, y); + context.arc(x, y, radius, angleStart, angleEnd); + context.closePath(); + this.colorFillStyle(context, color[0], color[1], color[2], opacity); + context.fill(); + lastPercent += percent; + } +}; + +var CRp$4 = {}; +var motionBlurDelay = 100; + +// var isFirefox = typeof InstallTrigger !== 'undefined'; + +CRp$4.getPixelRatio = function () { + var context = this.data.contexts[0]; + if (this.forcedPixelRatio != null) { + return this.forcedPixelRatio; + } + var backingStore = context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1; + return (window.devicePixelRatio || 1) / backingStore; // eslint-disable-line no-undef +}; + +CRp$4.paintCache = function (context) { + var caches = this.paintCaches = this.paintCaches || []; + var needToCreateCache = true; + var cache; + for (var i = 0; i < caches.length; i++) { + cache = caches[i]; + if (cache.context === context) { + needToCreateCache = false; + break; + } + } + if (needToCreateCache) { + cache = { + context: context + }; + caches.push(cache); + } + return cache; +}; +CRp$4.createGradientStyleFor = function (context, shapeStyleName, ele, fill, opacity) { + var gradientStyle; + var usePaths = this.usePaths(); + var colors = ele.pstyle(shapeStyleName + '-gradient-stop-colors').value, + positions = ele.pstyle(shapeStyleName + '-gradient-stop-positions').pfValue; + if (fill === 'radial-gradient') { + if (ele.isEdge()) { + var start = ele.sourceEndpoint(), + end = ele.targetEndpoint(), + mid = ele.midpoint(); + var d1 = dist(start, mid); + var d2 = dist(end, mid); + gradientStyle = context.createRadialGradient(mid.x, mid.y, 0, mid.x, mid.y, Math.max(d1, d2)); + } else { + var pos = usePaths ? { + x: 0, + y: 0 + } : ele.position(), + width = ele.paddedWidth(), + height = ele.paddedHeight(); + gradientStyle = context.createRadialGradient(pos.x, pos.y, 0, pos.x, pos.y, Math.max(width, height)); + } + } else { + if (ele.isEdge()) { + var _start = ele.sourceEndpoint(), + _end = ele.targetEndpoint(); + gradientStyle = context.createLinearGradient(_start.x, _start.y, _end.x, _end.y); + } else { + var _pos = usePaths ? { + x: 0, + y: 0 + } : ele.position(), + _width = ele.paddedWidth(), + _height = ele.paddedHeight(), + halfWidth = _width / 2, + halfHeight = _height / 2; + var direction = ele.pstyle('background-gradient-direction').value; + switch (direction) { + case 'to-bottom': + gradientStyle = context.createLinearGradient(_pos.x, _pos.y - halfHeight, _pos.x, _pos.y + halfHeight); + break; + case 'to-top': + gradientStyle = context.createLinearGradient(_pos.x, _pos.y + halfHeight, _pos.x, _pos.y - halfHeight); + break; + case 'to-left': + gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y, _pos.x - halfWidth, _pos.y); + break; + case 'to-right': + gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y, _pos.x + halfWidth, _pos.y); + break; + case 'to-bottom-right': + case 'to-right-bottom': + gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y - halfHeight, _pos.x + halfWidth, _pos.y + halfHeight); + break; + case 'to-top-right': + case 'to-right-top': + gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y + halfHeight, _pos.x + halfWidth, _pos.y - halfHeight); + break; + case 'to-bottom-left': + case 'to-left-bottom': + gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y - halfHeight, _pos.x - halfWidth, _pos.y + halfHeight); + break; + case 'to-top-left': + case 'to-left-top': + gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y + halfHeight, _pos.x - halfWidth, _pos.y - halfHeight); + break; + } + } + } + if (!gradientStyle) return null; // invalid gradient style + + var hasPositions = positions.length === colors.length; + var length = colors.length; + for (var i = 0; i < length; i++) { + gradientStyle.addColorStop(hasPositions ? positions[i] : i / (length - 1), 'rgba(' + colors[i][0] + ',' + colors[i][1] + ',' + colors[i][2] + ',' + opacity + ')'); + } + return gradientStyle; +}; +CRp$4.gradientFillStyle = function (context, ele, fill, opacity) { + var gradientStyle = this.createGradientStyleFor(context, 'background', ele, fill, opacity); + if (!gradientStyle) return null; // error + context.fillStyle = gradientStyle; +}; +CRp$4.colorFillStyle = function (context, r, g, b, a) { + context.fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; + // turn off for now, seems context does its own caching + + // var cache = this.paintCache(context); + + // var fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; + + // if( cache.fillStyle !== fillStyle ){ + // context.fillStyle = cache.fillStyle = fillStyle; + // } +}; + +CRp$4.eleFillStyle = function (context, ele, opacity) { + var backgroundFill = ele.pstyle('background-fill').value; + if (backgroundFill === 'linear-gradient' || backgroundFill === 'radial-gradient') { + this.gradientFillStyle(context, ele, backgroundFill, opacity); + } else { + var backgroundColor = ele.pstyle('background-color').value; + this.colorFillStyle(context, backgroundColor[0], backgroundColor[1], backgroundColor[2], opacity); + } +}; +CRp$4.gradientStrokeStyle = function (context, ele, fill, opacity) { + var gradientStyle = this.createGradientStyleFor(context, 'line', ele, fill, opacity); + if (!gradientStyle) return null; // error + context.strokeStyle = gradientStyle; +}; +CRp$4.colorStrokeStyle = function (context, r, g, b, a) { + context.strokeStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; + // turn off for now, seems context does its own caching + + // var cache = this.paintCache(context); + + // var strokeStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; + + // if( cache.strokeStyle !== strokeStyle ){ + // context.strokeStyle = cache.strokeStyle = strokeStyle; + // } +}; + +CRp$4.eleStrokeStyle = function (context, ele, opacity) { + var lineFill = ele.pstyle('line-fill').value; + if (lineFill === 'linear-gradient' || lineFill === 'radial-gradient') { + this.gradientStrokeStyle(context, ele, lineFill, opacity); + } else { + var lineColor = ele.pstyle('line-color').value; + this.colorStrokeStyle(context, lineColor[0], lineColor[1], lineColor[2], opacity); + } +}; + +// Resize canvas +CRp$4.matchCanvasSize = function (container) { + var r = this; + var data = r.data; + var bb = r.findContainerClientCoords(); + var width = bb[2]; + var height = bb[3]; + var pixelRatio = r.getPixelRatio(); + var mbPxRatio = r.motionBlurPxRatio; + if (container === r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_NODE] || container === r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_DRAG]) { + pixelRatio = mbPxRatio; + } + var canvasWidth = width * pixelRatio; + var canvasHeight = height * pixelRatio; + var canvas; + if (canvasWidth === r.canvasWidth && canvasHeight === r.canvasHeight) { + return; // save cycles if same + } + + r.fontCaches = null; // resizing resets the style + + var canvasContainer = data.canvasContainer; + canvasContainer.style.width = width + 'px'; + canvasContainer.style.height = height + 'px'; + for (var i = 0; i < r.CANVAS_LAYERS; i++) { + canvas = data.canvases[i]; + canvas.width = canvasWidth; + canvas.height = canvasHeight; + canvas.style.width = width + 'px'; + canvas.style.height = height + 'px'; + } + for (var i = 0; i < r.BUFFER_COUNT; i++) { + canvas = data.bufferCanvases[i]; + canvas.width = canvasWidth; + canvas.height = canvasHeight; + canvas.style.width = width + 'px'; + canvas.style.height = height + 'px'; + } + r.textureMult = 1; + if (pixelRatio <= 1) { + canvas = data.bufferCanvases[r.TEXTURE_BUFFER]; + r.textureMult = 2; + canvas.width = canvasWidth * r.textureMult; + canvas.height = canvasHeight * r.textureMult; + } + r.canvasWidth = canvasWidth; + r.canvasHeight = canvasHeight; +}; +CRp$4.renderTo = function (cxt, zoom, pan, pxRatio) { + this.render({ + forcedContext: cxt, + forcedZoom: zoom, + forcedPan: pan, + drawAllLayers: true, + forcedPxRatio: pxRatio + }); +}; +CRp$4.render = function (options) { + options = options || staticEmptyObject(); + var forcedContext = options.forcedContext; + var drawAllLayers = options.drawAllLayers; + var drawOnlyNodeLayer = options.drawOnlyNodeLayer; + var forcedZoom = options.forcedZoom; + var forcedPan = options.forcedPan; + var r = this; + var pixelRatio = options.forcedPxRatio === undefined ? this.getPixelRatio() : options.forcedPxRatio; + var cy = r.cy; + var data = r.data; + var needDraw = data.canvasNeedsRedraw; + var textureDraw = r.textureOnViewport && !forcedContext && (r.pinching || r.hoverData.dragging || r.swipePanning || r.data.wheelZooming); + var motionBlur = options.motionBlur !== undefined ? options.motionBlur : r.motionBlur; + var mbPxRatio = r.motionBlurPxRatio; + var hasCompoundNodes = cy.hasCompoundNodes(); + var inNodeDragGesture = r.hoverData.draggingEles; + var inBoxSelection = r.hoverData.selecting || r.touchData.selecting ? true : false; + motionBlur = motionBlur && !forcedContext && r.motionBlurEnabled && !inBoxSelection; + var motionBlurFadeEffect = motionBlur; + if (!forcedContext) { + if (r.prevPxRatio !== pixelRatio) { + r.invalidateContainerClientCoordsCache(); + r.matchCanvasSize(r.container); + r.redrawHint('eles', true); + r.redrawHint('drag', true); + } + r.prevPxRatio = pixelRatio; + } + if (!forcedContext && r.motionBlurTimeout) { + clearTimeout(r.motionBlurTimeout); + } + if (motionBlur) { + if (r.mbFrames == null) { + r.mbFrames = 0; + } + r.mbFrames++; + if (r.mbFrames < 3) { + // need several frames before even high quality motionblur + motionBlurFadeEffect = false; + } + + // go to lower quality blurry frames when several m/b frames have been rendered (avoids flashing) + if (r.mbFrames > r.minMbLowQualFrames) { + //r.fullQualityMb = false; + r.motionBlurPxRatio = r.mbPxRBlurry; + } + } + if (r.clearingMotionBlur) { + r.motionBlurPxRatio = 1; + } + + // b/c drawToContext() may be async w.r.t. redraw(), keep track of last texture frame + // because a rogue async texture frame would clear needDraw + if (r.textureDrawLastFrame && !textureDraw) { + needDraw[r.NODE] = true; + needDraw[r.SELECT_BOX] = true; + } + var style = cy.style(); + var zoom = cy.zoom(); + var effectiveZoom = forcedZoom !== undefined ? forcedZoom : zoom; + var pan = cy.pan(); + var effectivePan = { + x: pan.x, + y: pan.y + }; + var vp = { + zoom: zoom, + pan: { + x: pan.x, + y: pan.y + } + }; + var prevVp = r.prevViewport; + var viewportIsDiff = prevVp === undefined || vp.zoom !== prevVp.zoom || vp.pan.x !== prevVp.pan.x || vp.pan.y !== prevVp.pan.y; + + // we want the low quality motionblur only when the viewport is being manipulated etc (where it's not noticed) + if (!viewportIsDiff && !(inNodeDragGesture && !hasCompoundNodes)) { + r.motionBlurPxRatio = 1; + } + if (forcedPan) { + effectivePan = forcedPan; + } + + // apply pixel ratio + + effectiveZoom *= pixelRatio; + effectivePan.x *= pixelRatio; + effectivePan.y *= pixelRatio; + var eles = r.getCachedZSortedEles(); + function mbclear(context, x, y, w, h) { + var gco = context.globalCompositeOperation; + context.globalCompositeOperation = 'destination-out'; + r.colorFillStyle(context, 255, 255, 255, r.motionBlurTransparency); + context.fillRect(x, y, w, h); + context.globalCompositeOperation = gco; + } + function setContextTransform(context, clear) { + var ePan, eZoom, w, h; + if (!r.clearingMotionBlur && (context === data.bufferContexts[r.MOTIONBLUR_BUFFER_NODE] || context === data.bufferContexts[r.MOTIONBLUR_BUFFER_DRAG])) { + ePan = { + x: pan.x * mbPxRatio, + y: pan.y * mbPxRatio + }; + eZoom = zoom * mbPxRatio; + w = r.canvasWidth * mbPxRatio; + h = r.canvasHeight * mbPxRatio; + } else { + ePan = effectivePan; + eZoom = effectiveZoom; + w = r.canvasWidth; + h = r.canvasHeight; + } + context.setTransform(1, 0, 0, 1, 0, 0); + if (clear === 'motionBlur') { + mbclear(context, 0, 0, w, h); + } else if (!forcedContext && (clear === undefined || clear)) { + context.clearRect(0, 0, w, h); + } + if (!drawAllLayers) { + context.translate(ePan.x, ePan.y); + context.scale(eZoom, eZoom); + } + if (forcedPan) { + context.translate(forcedPan.x, forcedPan.y); + } + if (forcedZoom) { + context.scale(forcedZoom, forcedZoom); + } + } + if (!textureDraw) { + r.textureDrawLastFrame = false; + } + if (textureDraw) { + r.textureDrawLastFrame = true; + if (!r.textureCache) { + r.textureCache = {}; + r.textureCache.bb = cy.mutableElements().boundingBox(); + r.textureCache.texture = r.data.bufferCanvases[r.TEXTURE_BUFFER]; + var cxt = r.data.bufferContexts[r.TEXTURE_BUFFER]; + cxt.setTransform(1, 0, 0, 1, 0, 0); + cxt.clearRect(0, 0, r.canvasWidth * r.textureMult, r.canvasHeight * r.textureMult); + r.render({ + forcedContext: cxt, + drawOnlyNodeLayer: true, + forcedPxRatio: pixelRatio * r.textureMult + }); + var vp = r.textureCache.viewport = { + zoom: cy.zoom(), + pan: cy.pan(), + width: r.canvasWidth, + height: r.canvasHeight + }; + vp.mpan = { + x: (0 - vp.pan.x) / vp.zoom, + y: (0 - vp.pan.y) / vp.zoom + }; + } + needDraw[r.DRAG] = false; + needDraw[r.NODE] = false; + var context = data.contexts[r.NODE]; + var texture = r.textureCache.texture; + var vp = r.textureCache.viewport; + context.setTransform(1, 0, 0, 1, 0, 0); + if (motionBlur) { + mbclear(context, 0, 0, vp.width, vp.height); + } else { + context.clearRect(0, 0, vp.width, vp.height); + } + var outsideBgColor = style.core('outside-texture-bg-color').value; + var outsideBgOpacity = style.core('outside-texture-bg-opacity').value; + r.colorFillStyle(context, outsideBgColor[0], outsideBgColor[1], outsideBgColor[2], outsideBgOpacity); + context.fillRect(0, 0, vp.width, vp.height); + var zoom = cy.zoom(); + setContextTransform(context, false); + context.clearRect(vp.mpan.x, vp.mpan.y, vp.width / vp.zoom / pixelRatio, vp.height / vp.zoom / pixelRatio); + context.drawImage(texture, vp.mpan.x, vp.mpan.y, vp.width / vp.zoom / pixelRatio, vp.height / vp.zoom / pixelRatio); + } else if (r.textureOnViewport && !forcedContext) { + // clear the cache since we don't need it + r.textureCache = null; + } + var extent = cy.extent(); + var vpManip = r.pinching || r.hoverData.dragging || r.swipePanning || r.data.wheelZooming || r.hoverData.draggingEles || r.cy.animated(); + var hideEdges = r.hideEdgesOnViewport && vpManip; + var needMbClear = []; + needMbClear[r.NODE] = !needDraw[r.NODE] && motionBlur && !r.clearedForMotionBlur[r.NODE] || r.clearingMotionBlur; + if (needMbClear[r.NODE]) { + r.clearedForMotionBlur[r.NODE] = true; + } + needMbClear[r.DRAG] = !needDraw[r.DRAG] && motionBlur && !r.clearedForMotionBlur[r.DRAG] || r.clearingMotionBlur; + if (needMbClear[r.DRAG]) { + r.clearedForMotionBlur[r.DRAG] = true; + } + if (needDraw[r.NODE] || drawAllLayers || drawOnlyNodeLayer || needMbClear[r.NODE]) { + var useBuffer = motionBlur && !needMbClear[r.NODE] && mbPxRatio !== 1; + var context = forcedContext || (useBuffer ? r.data.bufferContexts[r.MOTIONBLUR_BUFFER_NODE] : data.contexts[r.NODE]); + var clear = motionBlur && !useBuffer ? 'motionBlur' : undefined; + setContextTransform(context, clear); + if (hideEdges) { + r.drawCachedNodes(context, eles.nondrag, pixelRatio, extent); + } else { + r.drawLayeredElements(context, eles.nondrag, pixelRatio, extent); + } + if (r.debug) { + r.drawDebugPoints(context, eles.nondrag); + } + if (!drawAllLayers && !motionBlur) { + needDraw[r.NODE] = false; + } + } + if (!drawOnlyNodeLayer && (needDraw[r.DRAG] || drawAllLayers || needMbClear[r.DRAG])) { + var useBuffer = motionBlur && !needMbClear[r.DRAG] && mbPxRatio !== 1; + var context = forcedContext || (useBuffer ? r.data.bufferContexts[r.MOTIONBLUR_BUFFER_DRAG] : data.contexts[r.DRAG]); + setContextTransform(context, motionBlur && !useBuffer ? 'motionBlur' : undefined); + if (hideEdges) { + r.drawCachedNodes(context, eles.drag, pixelRatio, extent); + } else { + r.drawCachedElements(context, eles.drag, pixelRatio, extent); + } + if (r.debug) { + r.drawDebugPoints(context, eles.drag); + } + if (!drawAllLayers && !motionBlur) { + needDraw[r.DRAG] = false; + } + } + if (r.showFps || !drawOnlyNodeLayer && needDraw[r.SELECT_BOX] && !drawAllLayers) { + var context = forcedContext || data.contexts[r.SELECT_BOX]; + setContextTransform(context); + if (r.selection[4] == 1 && (r.hoverData.selecting || r.touchData.selecting)) { + var zoom = r.cy.zoom(); + var borderWidth = style.core('selection-box-border-width').value / zoom; + context.lineWidth = borderWidth; + context.fillStyle = 'rgba(' + style.core('selection-box-color').value[0] + ',' + style.core('selection-box-color').value[1] + ',' + style.core('selection-box-color').value[2] + ',' + style.core('selection-box-opacity').value + ')'; + context.fillRect(r.selection[0], r.selection[1], r.selection[2] - r.selection[0], r.selection[3] - r.selection[1]); + if (borderWidth > 0) { + context.strokeStyle = 'rgba(' + style.core('selection-box-border-color').value[0] + ',' + style.core('selection-box-border-color').value[1] + ',' + style.core('selection-box-border-color').value[2] + ',' + style.core('selection-box-opacity').value + ')'; + context.strokeRect(r.selection[0], r.selection[1], r.selection[2] - r.selection[0], r.selection[3] - r.selection[1]); + } + } + if (data.bgActivePosistion && !r.hoverData.selecting) { + var zoom = r.cy.zoom(); + var pos = data.bgActivePosistion; + context.fillStyle = 'rgba(' + style.core('active-bg-color').value[0] + ',' + style.core('active-bg-color').value[1] + ',' + style.core('active-bg-color').value[2] + ',' + style.core('active-bg-opacity').value + ')'; + context.beginPath(); + context.arc(pos.x, pos.y, style.core('active-bg-size').pfValue / zoom, 0, 2 * Math.PI); + context.fill(); + } + var timeToRender = r.lastRedrawTime; + if (r.showFps && timeToRender) { + timeToRender = Math.round(timeToRender); + var fps = Math.round(1000 / timeToRender); + context.setTransform(1, 0, 0, 1, 0, 0); + context.fillStyle = 'rgba(255, 0, 0, 0.75)'; + context.strokeStyle = 'rgba(255, 0, 0, 0.75)'; + context.lineWidth = 1; + context.fillText('1 frame = ' + timeToRender + ' ms = ' + fps + ' fps', 0, 20); + var maxFps = 60; + context.strokeRect(0, 30, 250, 20); + context.fillRect(0, 30, 250 * Math.min(fps / maxFps, 1), 20); + } + if (!drawAllLayers) { + needDraw[r.SELECT_BOX] = false; + } + } + + // motionblur: blit rendered blurry frames + if (motionBlur && mbPxRatio !== 1) { + var cxtNode = data.contexts[r.NODE]; + var txtNode = r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_NODE]; + var cxtDrag = data.contexts[r.DRAG]; + var txtDrag = r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_DRAG]; + var drawMotionBlur = function drawMotionBlur(cxt, txt, needClear) { + cxt.setTransform(1, 0, 0, 1, 0, 0); + if (needClear || !motionBlurFadeEffect) { + cxt.clearRect(0, 0, r.canvasWidth, r.canvasHeight); + } else { + mbclear(cxt, 0, 0, r.canvasWidth, r.canvasHeight); + } + var pxr = mbPxRatio; + cxt.drawImage(txt, + // img + 0, 0, + // sx, sy + r.canvasWidth * pxr, r.canvasHeight * pxr, + // sw, sh + 0, 0, + // x, y + r.canvasWidth, r.canvasHeight // w, h + ); + }; + + if (needDraw[r.NODE] || needMbClear[r.NODE]) { + drawMotionBlur(cxtNode, txtNode, needMbClear[r.NODE]); + needDraw[r.NODE] = false; + } + if (needDraw[r.DRAG] || needMbClear[r.DRAG]) { + drawMotionBlur(cxtDrag, txtDrag, needMbClear[r.DRAG]); + needDraw[r.DRAG] = false; + } + } + r.prevViewport = vp; + if (r.clearingMotionBlur) { + r.clearingMotionBlur = false; + r.motionBlurCleared = true; + r.motionBlur = true; + } + if (motionBlur) { + r.motionBlurTimeout = setTimeout(function () { + r.motionBlurTimeout = null; + r.clearedForMotionBlur[r.NODE] = false; + r.clearedForMotionBlur[r.DRAG] = false; + r.motionBlur = false; + r.clearingMotionBlur = !textureDraw; + r.mbFrames = 0; + needDraw[r.NODE] = true; + needDraw[r.DRAG] = true; + r.redraw(); + }, motionBlurDelay); + } + if (!forcedContext) { + cy.emit('render'); + } +}; + +var CRp$3 = {}; + +// @O Polygon drawing +CRp$3.drawPolygonPath = function (context, x, y, width, height, points) { + var halfW = width / 2; + var halfH = height / 2; + if (context.beginPath) { + context.beginPath(); + } + context.moveTo(x + halfW * points[0], y + halfH * points[1]); + for (var i = 1; i < points.length / 2; i++) { + context.lineTo(x + halfW * points[i * 2], y + halfH * points[i * 2 + 1]); + } + context.closePath(); +}; +CRp$3.drawRoundPolygonPath = function (context, x, y, width, height, points, corners) { + corners.forEach(function (corner) { + return drawPreparedRoundCorner(context, corner); + }); + context.closePath(); +}; + +// Round rectangle drawing +CRp$3.drawRoundRectanglePath = function (context, x, y, width, height, radius) { + var halfWidth = width / 2; + var halfHeight = height / 2; + var cornerRadius = radius === 'auto' ? getRoundRectangleRadius(width, height) : Math.min(radius, halfHeight, halfWidth); + if (context.beginPath) { + context.beginPath(); + } + + // Start at top middle + context.moveTo(x, y - halfHeight); + // Arc from middle top to right side + context.arcTo(x + halfWidth, y - halfHeight, x + halfWidth, y, cornerRadius); + // Arc from right side to bottom + context.arcTo(x + halfWidth, y + halfHeight, x, y + halfHeight, cornerRadius); + // Arc from bottom to left side + context.arcTo(x - halfWidth, y + halfHeight, x - halfWidth, y, cornerRadius); + // Arc from left side to topBorder + context.arcTo(x - halfWidth, y - halfHeight, x, y - halfHeight, cornerRadius); + // Join line + context.lineTo(x, y - halfHeight); + context.closePath(); +}; +CRp$3.drawBottomRoundRectanglePath = function (context, x, y, width, height, radius) { + var halfWidth = width / 2; + var halfHeight = height / 2; + var cornerRadius = radius === 'auto' ? getRoundRectangleRadius(width, height) : radius; + if (context.beginPath) { + context.beginPath(); + } + + // Start at top middle + context.moveTo(x, y - halfHeight); + context.lineTo(x + halfWidth, y - halfHeight); + context.lineTo(x + halfWidth, y); + context.arcTo(x + halfWidth, y + halfHeight, x, y + halfHeight, cornerRadius); + context.arcTo(x - halfWidth, y + halfHeight, x - halfWidth, y, cornerRadius); + context.lineTo(x - halfWidth, y - halfHeight); + context.lineTo(x, y - halfHeight); + context.closePath(); +}; +CRp$3.drawCutRectanglePath = function (context, x, y, width, height, points, corners) { + var halfWidth = width / 2; + var halfHeight = height / 2; + var cornerLength = corners === 'auto' ? getCutRectangleCornerLength() : corners; + if (context.beginPath) { + context.beginPath(); + } + context.moveTo(x - halfWidth + cornerLength, y - halfHeight); + context.lineTo(x + halfWidth - cornerLength, y - halfHeight); + context.lineTo(x + halfWidth, y - halfHeight + cornerLength); + context.lineTo(x + halfWidth, y + halfHeight - cornerLength); + context.lineTo(x + halfWidth - cornerLength, y + halfHeight); + context.lineTo(x - halfWidth + cornerLength, y + halfHeight); + context.lineTo(x - halfWidth, y + halfHeight - cornerLength); + context.lineTo(x - halfWidth, y - halfHeight + cornerLength); + context.closePath(); +}; +CRp$3.drawBarrelPath = function (context, x, y, width, height) { + var halfWidth = width / 2; + var halfHeight = height / 2; + var xBegin = x - halfWidth; + var xEnd = x + halfWidth; + var yBegin = y - halfHeight; + var yEnd = y + halfHeight; + var barrelCurveConstants = getBarrelCurveConstants(width, height); + var wOffset = barrelCurveConstants.widthOffset; + var hOffset = barrelCurveConstants.heightOffset; + var ctrlPtXOffset = barrelCurveConstants.ctrlPtOffsetPct * wOffset; + if (context.beginPath) { + context.beginPath(); + } + context.moveTo(xBegin, yBegin + hOffset); + context.lineTo(xBegin, yEnd - hOffset); + context.quadraticCurveTo(xBegin + ctrlPtXOffset, yEnd, xBegin + wOffset, yEnd); + context.lineTo(xEnd - wOffset, yEnd); + context.quadraticCurveTo(xEnd - ctrlPtXOffset, yEnd, xEnd, yEnd - hOffset); + context.lineTo(xEnd, yBegin + hOffset); + context.quadraticCurveTo(xEnd - ctrlPtXOffset, yBegin, xEnd - wOffset, yBegin); + context.lineTo(xBegin + wOffset, yBegin); + context.quadraticCurveTo(xBegin + ctrlPtXOffset, yBegin, xBegin, yBegin + hOffset); + context.closePath(); +}; +var sin0 = Math.sin(0); +var cos0 = Math.cos(0); +var sin = {}; +var cos = {}; +var ellipseStepSize = Math.PI / 40; +for (var i = 0 * Math.PI; i < 2 * Math.PI; i += ellipseStepSize) { + sin[i] = Math.sin(i); + cos[i] = Math.cos(i); +} +CRp$3.drawEllipsePath = function (context, centerX, centerY, width, height) { + if (context.beginPath) { + context.beginPath(); + } + if (context.ellipse) { + context.ellipse(centerX, centerY, width / 2, height / 2, 0, 0, 2 * Math.PI); + } else { + var xPos, yPos; + var rw = width / 2; + var rh = height / 2; + for (var i = 0 * Math.PI; i < 2 * Math.PI; i += ellipseStepSize) { + xPos = centerX - rw * sin[i] * sin0 + rw * cos[i] * cos0; + yPos = centerY + rh * cos[i] * sin0 + rh * sin[i] * cos0; + if (i === 0) { + context.moveTo(xPos, yPos); + } else { + context.lineTo(xPos, yPos); + } + } + } + context.closePath(); +}; + +/* global atob, ArrayBuffer, Uint8Array, Blob */ +var CRp$2 = {}; +CRp$2.createBuffer = function (w, h) { + var buffer = document.createElement('canvas'); // eslint-disable-line no-undef + buffer.width = w; + buffer.height = h; + return [buffer, buffer.getContext('2d')]; +}; +CRp$2.bufferCanvasImage = function (options) { + var cy = this.cy; + var eles = cy.mutableElements(); + var bb = eles.boundingBox(); + var ctrRect = this.findContainerClientCoords(); + var width = options.full ? Math.ceil(bb.w) : ctrRect[2]; + var height = options.full ? Math.ceil(bb.h) : ctrRect[3]; + var specdMaxDims = number$1(options.maxWidth) || number$1(options.maxHeight); + var pxRatio = this.getPixelRatio(); + var scale = 1; + if (options.scale !== undefined) { + width *= options.scale; + height *= options.scale; + scale = options.scale; + } else if (specdMaxDims) { + var maxScaleW = Infinity; + var maxScaleH = Infinity; + if (number$1(options.maxWidth)) { + maxScaleW = scale * options.maxWidth / width; + } + if (number$1(options.maxHeight)) { + maxScaleH = scale * options.maxHeight / height; + } + scale = Math.min(maxScaleW, maxScaleH); + width *= scale; + height *= scale; + } + if (!specdMaxDims) { + width *= pxRatio; + height *= pxRatio; + scale *= pxRatio; + } + var buffCanvas = document.createElement('canvas'); // eslint-disable-line no-undef + + buffCanvas.width = width; + buffCanvas.height = height; + buffCanvas.style.width = width + 'px'; + buffCanvas.style.height = height + 'px'; + var buffCxt = buffCanvas.getContext('2d'); + + // Rasterize the layers, but only if container has nonzero size + if (width > 0 && height > 0) { + buffCxt.clearRect(0, 0, width, height); + buffCxt.globalCompositeOperation = 'source-over'; + var zsortedEles = this.getCachedZSortedEles(); + if (options.full) { + // draw the full bounds of the graph + buffCxt.translate(-bb.x1 * scale, -bb.y1 * scale); + buffCxt.scale(scale, scale); + this.drawElements(buffCxt, zsortedEles); + buffCxt.scale(1 / scale, 1 / scale); + buffCxt.translate(bb.x1 * scale, bb.y1 * scale); + } else { + // draw the current view + var pan = cy.pan(); + var translation = { + x: pan.x * scale, + y: pan.y * scale + }; + scale *= cy.zoom(); + buffCxt.translate(translation.x, translation.y); + buffCxt.scale(scale, scale); + this.drawElements(buffCxt, zsortedEles); + buffCxt.scale(1 / scale, 1 / scale); + buffCxt.translate(-translation.x, -translation.y); + } + + // need to fill bg at end like this in order to fill cleared transparent pixels in jpgs + if (options.bg) { + buffCxt.globalCompositeOperation = 'destination-over'; + buffCxt.fillStyle = options.bg; + buffCxt.rect(0, 0, width, height); + buffCxt.fill(); + } + } + return buffCanvas; +}; +function b64ToBlob(b64, mimeType) { + var bytes = atob(b64); + var buff = new ArrayBuffer(bytes.length); + var buffUint8 = new Uint8Array(buff); + for (var i = 0; i < bytes.length; i++) { + buffUint8[i] = bytes.charCodeAt(i); + } + return new Blob([buff], { + type: mimeType + }); +} +function b64UriToB64(b64uri) { + var i = b64uri.indexOf(','); + return b64uri.substr(i + 1); +} +function output(options, canvas, mimeType) { + var getB64Uri = function getB64Uri() { + return canvas.toDataURL(mimeType, options.quality); + }; + switch (options.output) { + case 'blob-promise': + return new Promise$1(function (resolve, reject) { + try { + canvas.toBlob(function (blob) { + if (blob != null) { + resolve(blob); + } else { + reject(new Error('`canvas.toBlob()` sent a null value in its callback')); + } + }, mimeType, options.quality); + } catch (err) { + reject(err); + } + }); + case 'blob': + return b64ToBlob(b64UriToB64(getB64Uri()), mimeType); + case 'base64': + return b64UriToB64(getB64Uri()); + case 'base64uri': + default: + return getB64Uri(); + } +} +CRp$2.png = function (options) { + return output(options, this.bufferCanvasImage(options), 'image/png'); +}; +CRp$2.jpg = function (options) { + return output(options, this.bufferCanvasImage(options), 'image/jpeg'); +}; + +var CRp$1 = {}; +CRp$1.nodeShapeImpl = function (name, context, centerX, centerY, width, height, points, corners) { + switch (name) { + case 'ellipse': + return this.drawEllipsePath(context, centerX, centerY, width, height); + case 'polygon': + return this.drawPolygonPath(context, centerX, centerY, width, height, points); + case 'round-polygon': + return this.drawRoundPolygonPath(context, centerX, centerY, width, height, points, corners); + case 'roundrectangle': + case 'round-rectangle': + return this.drawRoundRectanglePath(context, centerX, centerY, width, height, corners); + case 'cutrectangle': + case 'cut-rectangle': + return this.drawCutRectanglePath(context, centerX, centerY, width, height, points, corners); + case 'bottomroundrectangle': + case 'bottom-round-rectangle': + return this.drawBottomRoundRectanglePath(context, centerX, centerY, width, height, corners); + case 'barrel': + return this.drawBarrelPath(context, centerX, centerY, width, height); + } +}; + +var CR = CanvasRenderer; +var CRp = CanvasRenderer.prototype; +CRp.CANVAS_LAYERS = 3; +// +CRp.SELECT_BOX = 0; +CRp.DRAG = 1; +CRp.NODE = 2; +CRp.BUFFER_COUNT = 3; +// +CRp.TEXTURE_BUFFER = 0; +CRp.MOTIONBLUR_BUFFER_NODE = 1; +CRp.MOTIONBLUR_BUFFER_DRAG = 2; +function CanvasRenderer(options) { + var r = this; + r.data = { + canvases: new Array(CRp.CANVAS_LAYERS), + contexts: new Array(CRp.CANVAS_LAYERS), + canvasNeedsRedraw: new Array(CRp.CANVAS_LAYERS), + bufferCanvases: new Array(CRp.BUFFER_COUNT), + bufferContexts: new Array(CRp.CANVAS_LAYERS) + }; + var tapHlOffAttr = '-webkit-tap-highlight-color'; + var tapHlOffStyle = 'rgba(0,0,0,0)'; + r.data.canvasContainer = document.createElement('div'); // eslint-disable-line no-undef + var containerStyle = r.data.canvasContainer.style; + r.data.canvasContainer.style[tapHlOffAttr] = tapHlOffStyle; + containerStyle.position = 'relative'; + containerStyle.zIndex = '0'; + containerStyle.overflow = 'hidden'; + var container = options.cy.container(); + container.appendChild(r.data.canvasContainer); + container.style[tapHlOffAttr] = tapHlOffStyle; + var styleMap = { + '-webkit-user-select': 'none', + '-moz-user-select': '-moz-none', + 'user-select': 'none', + '-webkit-tap-highlight-color': 'rgba(0,0,0,0)', + 'outline-style': 'none' + }; + if (ms()) { + styleMap['-ms-touch-action'] = 'none'; + styleMap['touch-action'] = 'none'; + } + for (var i = 0; i < CRp.CANVAS_LAYERS; i++) { + var canvas = r.data.canvases[i] = document.createElement('canvas'); // eslint-disable-line no-undef + r.data.contexts[i] = canvas.getContext('2d'); + Object.keys(styleMap).forEach(function (k) { + canvas.style[k] = styleMap[k]; + }); + canvas.style.position = 'absolute'; + canvas.setAttribute('data-id', 'layer' + i); + canvas.style.zIndex = String(CRp.CANVAS_LAYERS - i); + r.data.canvasContainer.appendChild(canvas); + r.data.canvasNeedsRedraw[i] = false; + } + r.data.topCanvas = r.data.canvases[0]; + r.data.canvases[CRp.NODE].setAttribute('data-id', 'layer' + CRp.NODE + '-node'); + r.data.canvases[CRp.SELECT_BOX].setAttribute('data-id', 'layer' + CRp.SELECT_BOX + '-selectbox'); + r.data.canvases[CRp.DRAG].setAttribute('data-id', 'layer' + CRp.DRAG + '-drag'); + for (var i = 0; i < CRp.BUFFER_COUNT; i++) { + r.data.bufferCanvases[i] = document.createElement('canvas'); // eslint-disable-line no-undef + r.data.bufferContexts[i] = r.data.bufferCanvases[i].getContext('2d'); + r.data.bufferCanvases[i].style.position = 'absolute'; + r.data.bufferCanvases[i].setAttribute('data-id', 'buffer' + i); + r.data.bufferCanvases[i].style.zIndex = String(-i - 1); + r.data.bufferCanvases[i].style.visibility = 'hidden'; + //r.data.canvasContainer.appendChild(r.data.bufferCanvases[i]); + } + + r.pathsEnabled = true; + var emptyBb = makeBoundingBox(); + var getBoxCenter = function getBoxCenter(bb) { + return { + x: (bb.x1 + bb.x2) / 2, + y: (bb.y1 + bb.y2) / 2 + }; + }; + var getCenterOffset = function getCenterOffset(bb) { + return { + x: -bb.w / 2, + y: -bb.h / 2 + }; + }; + var backgroundTimestampHasChanged = function backgroundTimestampHasChanged(ele) { + var _p = ele[0]._private; + var same = _p.oldBackgroundTimestamp === _p.backgroundTimestamp; + return !same; + }; + var getStyleKey = function getStyleKey(ele) { + return ele[0]._private.nodeKey; + }; + var getLabelKey = function getLabelKey(ele) { + return ele[0]._private.labelStyleKey; + }; + var getSourceLabelKey = function getSourceLabelKey(ele) { + return ele[0]._private.sourceLabelStyleKey; + }; + var getTargetLabelKey = function getTargetLabelKey(ele) { + return ele[0]._private.targetLabelStyleKey; + }; + var drawElement = function drawElement(context, ele, bb, scaledLabelShown, useEleOpacity) { + return r.drawElement(context, ele, bb, false, false, useEleOpacity); + }; + var drawLabel = function drawLabel(context, ele, bb, scaledLabelShown, useEleOpacity) { + return r.drawElementText(context, ele, bb, scaledLabelShown, 'main', useEleOpacity); + }; + var drawSourceLabel = function drawSourceLabel(context, ele, bb, scaledLabelShown, useEleOpacity) { + return r.drawElementText(context, ele, bb, scaledLabelShown, 'source', useEleOpacity); + }; + var drawTargetLabel = function drawTargetLabel(context, ele, bb, scaledLabelShown, useEleOpacity) { + return r.drawElementText(context, ele, bb, scaledLabelShown, 'target', useEleOpacity); + }; + var getElementBox = function getElementBox(ele) { + ele.boundingBox(); + return ele[0]._private.bodyBounds; + }; + var getLabelBox = function getLabelBox(ele) { + ele.boundingBox(); + return ele[0]._private.labelBounds.main || emptyBb; + }; + var getSourceLabelBox = function getSourceLabelBox(ele) { + ele.boundingBox(); + return ele[0]._private.labelBounds.source || emptyBb; + }; + var getTargetLabelBox = function getTargetLabelBox(ele) { + ele.boundingBox(); + return ele[0]._private.labelBounds.target || emptyBb; + }; + var isLabelVisibleAtScale = function isLabelVisibleAtScale(ele, scaledLabelShown) { + return scaledLabelShown; + }; + var getElementRotationPoint = function getElementRotationPoint(ele) { + return getBoxCenter(getElementBox(ele)); + }; + var addTextMargin = function addTextMargin(prefix, pt, ele) { + var pre = prefix ? prefix + '-' : ''; + return { + x: pt.x + ele.pstyle(pre + 'text-margin-x').pfValue, + y: pt.y + ele.pstyle(pre + 'text-margin-y').pfValue + }; + }; + var getRsPt = function getRsPt(ele, x, y) { + var rs = ele[0]._private.rscratch; + return { + x: rs[x], + y: rs[y] + }; + }; + var getLabelRotationPoint = function getLabelRotationPoint(ele) { + return addTextMargin('', getRsPt(ele, 'labelX', 'labelY'), ele); + }; + var getSourceLabelRotationPoint = function getSourceLabelRotationPoint(ele) { + return addTextMargin('source', getRsPt(ele, 'sourceLabelX', 'sourceLabelY'), ele); + }; + var getTargetLabelRotationPoint = function getTargetLabelRotationPoint(ele) { + return addTextMargin('target', getRsPt(ele, 'targetLabelX', 'targetLabelY'), ele); + }; + var getElementRotationOffset = function getElementRotationOffset(ele) { + return getCenterOffset(getElementBox(ele)); + }; + var getSourceLabelRotationOffset = function getSourceLabelRotationOffset(ele) { + return getCenterOffset(getSourceLabelBox(ele)); + }; + var getTargetLabelRotationOffset = function getTargetLabelRotationOffset(ele) { + return getCenterOffset(getTargetLabelBox(ele)); + }; + var getLabelRotationOffset = function getLabelRotationOffset(ele) { + var bb = getLabelBox(ele); + var p = getCenterOffset(getLabelBox(ele)); + if (ele.isNode()) { + switch (ele.pstyle('text-halign').value) { + case 'left': + p.x = -bb.w; + break; + case 'right': + p.x = 0; + break; + } + switch (ele.pstyle('text-valign').value) { + case 'top': + p.y = -bb.h; + break; + case 'bottom': + p.y = 0; + break; + } + } + return p; + }; + var eleTxrCache = r.data.eleTxrCache = new ElementTextureCache(r, { + getKey: getStyleKey, + doesEleInvalidateKey: backgroundTimestampHasChanged, + drawElement: drawElement, + getBoundingBox: getElementBox, + getRotationPoint: getElementRotationPoint, + getRotationOffset: getElementRotationOffset, + allowEdgeTxrCaching: false, + allowParentTxrCaching: false + }); + var lblTxrCache = r.data.lblTxrCache = new ElementTextureCache(r, { + getKey: getLabelKey, + drawElement: drawLabel, + getBoundingBox: getLabelBox, + getRotationPoint: getLabelRotationPoint, + getRotationOffset: getLabelRotationOffset, + isVisible: isLabelVisibleAtScale + }); + var slbTxrCache = r.data.slbTxrCache = new ElementTextureCache(r, { + getKey: getSourceLabelKey, + drawElement: drawSourceLabel, + getBoundingBox: getSourceLabelBox, + getRotationPoint: getSourceLabelRotationPoint, + getRotationOffset: getSourceLabelRotationOffset, + isVisible: isLabelVisibleAtScale + }); + var tlbTxrCache = r.data.tlbTxrCache = new ElementTextureCache(r, { + getKey: getTargetLabelKey, + drawElement: drawTargetLabel, + getBoundingBox: getTargetLabelBox, + getRotationPoint: getTargetLabelRotationPoint, + getRotationOffset: getTargetLabelRotationOffset, + isVisible: isLabelVisibleAtScale + }); + var lyrTxrCache = r.data.lyrTxrCache = new LayeredTextureCache(r); + r.onUpdateEleCalcs(function invalidateTextureCaches(willDraw, eles) { + // each cache should check for sub-key diff to see that the update affects that cache particularly + eleTxrCache.invalidateElements(eles); + lblTxrCache.invalidateElements(eles); + slbTxrCache.invalidateElements(eles); + tlbTxrCache.invalidateElements(eles); + + // any change invalidates the layers + lyrTxrCache.invalidateElements(eles); + + // update the old bg timestamp so diffs can be done in the ele txr caches + for (var _i = 0; _i < eles.length; _i++) { + var _p = eles[_i]._private; + _p.oldBackgroundTimestamp = _p.backgroundTimestamp; + } + }); + var refineInLayers = function refineInLayers(reqs) { + for (var i = 0; i < reqs.length; i++) { + lyrTxrCache.enqueueElementRefinement(reqs[i].ele); + } + }; + eleTxrCache.onDequeue(refineInLayers); + lblTxrCache.onDequeue(refineInLayers); + slbTxrCache.onDequeue(refineInLayers); + tlbTxrCache.onDequeue(refineInLayers); +} +CRp.redrawHint = function (group, bool) { + var r = this; + switch (group) { + case 'eles': + r.data.canvasNeedsRedraw[CRp.NODE] = bool; + break; + case 'drag': + r.data.canvasNeedsRedraw[CRp.DRAG] = bool; + break; + case 'select': + r.data.canvasNeedsRedraw[CRp.SELECT_BOX] = bool; + break; + } +}; + +// whether to use Path2D caching for drawing +var pathsImpld = typeof Path2D !== 'undefined'; +CRp.path2dEnabled = function (on) { + if (on === undefined) { + return this.pathsEnabled; + } + this.pathsEnabled = on ? true : false; +}; +CRp.usePaths = function () { + return pathsImpld && this.pathsEnabled; +}; +CRp.setImgSmoothing = function (context, bool) { + if (context.imageSmoothingEnabled != null) { + context.imageSmoothingEnabled = bool; + } else { + context.webkitImageSmoothingEnabled = bool; + context.mozImageSmoothingEnabled = bool; + context.msImageSmoothingEnabled = bool; + } +}; +CRp.getImgSmoothing = function (context) { + if (context.imageSmoothingEnabled != null) { + return context.imageSmoothingEnabled; + } else { + return context.webkitImageSmoothingEnabled || context.mozImageSmoothingEnabled || context.msImageSmoothingEnabled; + } +}; +CRp.makeOffscreenCanvas = function (width, height) { + var canvas; + if ((typeof OffscreenCanvas === "undefined" ? "undefined" : _typeof(OffscreenCanvas)) !== ("undefined" )) { + canvas = new OffscreenCanvas(width, height); + } else { + canvas = document.createElement('canvas'); // eslint-disable-line no-undef + canvas.width = width; + canvas.height = height; + } + return canvas; +}; +[CRp$a, CRp$9, CRp$8, CRp$7, CRp$6, CRp$5, CRp$4, CRp$3, CRp$2, CRp$1].forEach(function (props) { + extend(CRp, props); +}); + +var renderer = [{ + name: 'null', + impl: NullRenderer +}, { + name: 'base', + impl: BR +}, { + name: 'canvas', + impl: CR +}]; + +var incExts = [{ + type: 'layout', + extensions: layout +}, { + type: 'renderer', + extensions: renderer +}]; + +// registered extensions to cytoscape, indexed by name +var extensions = {}; + +// registered modules for extensions, indexed by name +var modules = {}; +function setExtension(type, name, registrant) { + var ext = registrant; + var overrideErr = function overrideErr(field) { + warn('Can not register `' + name + '` for `' + type + '` since `' + field + '` already exists in the prototype and can not be overridden'); + }; + if (type === 'core') { + if (Core.prototype[name]) { + return overrideErr(name); + } else { + Core.prototype[name] = registrant; + } + } else if (type === 'collection') { + if (Collection.prototype[name]) { + return overrideErr(name); + } else { + Collection.prototype[name] = registrant; + } + } else if (type === 'layout') { + // fill in missing layout functions in the prototype + + var Layout = function Layout(options) { + this.options = options; + registrant.call(this, options); + + // make sure layout has _private for use w/ std apis like .on() + if (!plainObject(this._private)) { + this._private = {}; + } + this._private.cy = options.cy; + this._private.listeners = []; + this.createEmitter(); + }; + var layoutProto = Layout.prototype = Object.create(registrant.prototype); + var optLayoutFns = []; + for (var i = 0; i < optLayoutFns.length; i++) { + var fnName = optLayoutFns[i]; + layoutProto[fnName] = layoutProto[fnName] || function () { + return this; + }; + } + + // either .start() or .run() is defined, so autogen the other + if (layoutProto.start && !layoutProto.run) { + layoutProto.run = function () { + this.start(); + return this; + }; + } else if (!layoutProto.start && layoutProto.run) { + layoutProto.start = function () { + this.run(); + return this; + }; + } + var regStop = registrant.prototype.stop; + layoutProto.stop = function () { + var opts = this.options; + if (opts && opts.animate) { + var anis = this.animations; + if (anis) { + for (var _i = 0; _i < anis.length; _i++) { + anis[_i].stop(); + } + } + } + if (regStop) { + regStop.call(this); + } else { + this.emit('layoutstop'); + } + return this; + }; + if (!layoutProto.destroy) { + layoutProto.destroy = function () { + return this; + }; + } + layoutProto.cy = function () { + return this._private.cy; + }; + var getCy = function getCy(layout) { + return layout._private.cy; + }; + var emitterOpts = { + addEventFields: function addEventFields(layout, evt) { + evt.layout = layout; + evt.cy = getCy(layout); + evt.target = layout; + }, + bubble: function bubble() { + return true; + }, + parent: function parent(layout) { + return getCy(layout); + } + }; + extend(layoutProto, { + createEmitter: function createEmitter() { + this._private.emitter = new Emitter(emitterOpts, this); + return this; + }, + emitter: function emitter() { + return this._private.emitter; + }, + on: function on(evt, cb) { + this.emitter().on(evt, cb); + return this; + }, + one: function one(evt, cb) { + this.emitter().one(evt, cb); + return this; + }, + once: function once(evt, cb) { + this.emitter().one(evt, cb); + return this; + }, + removeListener: function removeListener(evt, cb) { + this.emitter().removeListener(evt, cb); + return this; + }, + removeAllListeners: function removeAllListeners() { + this.emitter().removeAllListeners(); + return this; + }, + emit: function emit(evt, params) { + this.emitter().emit(evt, params); + return this; + } + }); + cytoscape_esm_define.eventAliasesOn(layoutProto); + ext = Layout; // replace with our wrapped layout + } else if (type === 'renderer' && name !== 'null' && name !== 'base') { + // user registered renderers inherit from base + + var BaseRenderer = getExtension('renderer', 'base'); + var bProto = BaseRenderer.prototype; + var RegistrantRenderer = registrant; + var rProto = registrant.prototype; + var Renderer = function Renderer() { + BaseRenderer.apply(this, arguments); + RegistrantRenderer.apply(this, arguments); + }; + var proto = Renderer.prototype; + for (var pName in bProto) { + var pVal = bProto[pName]; + var existsInR = rProto[pName] != null; + if (existsInR) { + return overrideErr(pName); + } + proto[pName] = pVal; // take impl from base + } + + for (var _pName in rProto) { + proto[_pName] = rProto[_pName]; // take impl from registrant + } + + bProto.clientFunctions.forEach(function (name) { + proto[name] = proto[name] || function () { + error('Renderer does not implement `renderer.' + name + '()` on its prototype'); + }; + }); + ext = Renderer; + } else if (type === '__proto__' || type === 'constructor' || type === 'prototype') { + // to avoid potential prototype pollution + return error(type + ' is an illegal type to be registered, possibly lead to prototype pollutions'); + } + return setMap({ + map: extensions, + keys: [type, name], + value: ext + }); +} +function getExtension(type, name) { + return getMap({ + map: extensions, + keys: [type, name] + }); +} +function setModule(type, name, moduleType, moduleName, registrant) { + return setMap({ + map: modules, + keys: [type, name, moduleType, moduleName], + value: registrant + }); +} +function getModule(type, name, moduleType, moduleName) { + return getMap({ + map: modules, + keys: [type, name, moduleType, moduleName] + }); +} +var extension = function extension() { + // e.g. extension('renderer', 'svg') + if (arguments.length === 2) { + return getExtension.apply(null, arguments); + } + + // e.g. extension('renderer', 'svg', { ... }) + else if (arguments.length === 3) { + return setExtension.apply(null, arguments); + } + + // e.g. extension('renderer', 'svg', 'nodeShape', 'ellipse') + else if (arguments.length === 4) { + return getModule.apply(null, arguments); + } + + // e.g. extension('renderer', 'svg', 'nodeShape', 'ellipse', { ... }) + else if (arguments.length === 5) { + return setModule.apply(null, arguments); + } else { + error('Invalid extension access syntax'); + } +}; + +// allows a core instance to access extensions internally +Core.prototype.extension = extension; + +// included extensions +incExts.forEach(function (group) { + group.extensions.forEach(function (ext) { + setExtension(group.type, ext.name, ext.impl); + }); +}); + +// a dummy stylesheet object that doesn't need a reference to the core +// (useful for init) +var Stylesheet = function Stylesheet() { + if (!(this instanceof Stylesheet)) { + return new Stylesheet(); + } + this.length = 0; +}; +var sheetfn = Stylesheet.prototype; +sheetfn.instanceString = function () { + return 'stylesheet'; +}; + +// just store the selector to be parsed later +sheetfn.selector = function (selector) { + var i = this.length++; + this[i] = { + selector: selector, + properties: [] + }; + return this; // chaining +}; + +// just store the property to be parsed later +sheetfn.css = function (name, value) { + var i = this.length - 1; + if (string(name)) { + this[i].properties.push({ + name: name, + value: value + }); + } else if (plainObject(name)) { + var map = name; + var propNames = Object.keys(map); + for (var j = 0; j < propNames.length; j++) { + var key = propNames[j]; + var mapVal = map[key]; + if (mapVal == null) { + continue; + } + var prop = Style.properties[key] || Style.properties[dash2camel(key)]; + if (prop == null) { + continue; + } + var _name = prop.name; + var _value = mapVal; + this[i].properties.push({ + name: _name, + value: _value + }); + } + } + return this; // chaining +}; + +sheetfn.style = sheetfn.css; + +// generate a real style object from the dummy stylesheet +sheetfn.generateStyle = function (cy) { + var style = new Style(cy); + return this.appendToStyle(style); +}; + +// append a dummy stylesheet object on a real style object +sheetfn.appendToStyle = function (style) { + for (var i = 0; i < this.length; i++) { + var context = this[i]; + var selector = context.selector; + var props = context.properties; + style.selector(selector); // apply selector + + for (var j = 0; j < props.length; j++) { + var prop = props[j]; + style.css(prop.name, prop.value); // apply property + } + } + + return style; +}; + +var version = "3.29.2"; + +var cytoscape = function cytoscape(options) { + // if no options specified, use default + if (options === undefined) { + options = {}; + } + + // create instance + if (plainObject(options)) { + return new Core(options); + } + + // allow for registration of extensions + else if (string(options)) { + return extension.apply(extension, arguments); + } +}; + +// e.g. cytoscape.use( require('cytoscape-foo'), bar ) +cytoscape.use = function (ext) { + var args = Array.prototype.slice.call(arguments, 1); // args to pass to ext + + args.unshift(cytoscape); // cytoscape is first arg to ext + + ext.apply(null, args); + return this; +}; +cytoscape.warnings = function (bool) { + return warnings(bool); +}; + +// replaced by build system +cytoscape.version = version; + +// expose public apis (mostly for extensions) +cytoscape.stylesheet = cytoscape.Stylesheet = Stylesheet; + + + +// EXTERNAL MODULE: ./node_modules/cytoscape-cose-bilkent/cytoscape-cose-bilkent.js +var cytoscape_cose_bilkent = __webpack_require__(43457); +// EXTERNAL MODULE: ./node_modules/d3/src/index.js + 197 modules +var src = __webpack_require__(26312); +// EXTERNAL MODULE: ./node_modules/mermaid/dist/createText-ca0c5216.js + 52 modules +var createText_ca0c5216 = __webpack_require__(18897); +// EXTERNAL MODULE: ./node_modules/khroma/dist/methods/is_dark.js + 2 modules +var is_dark = __webpack_require__(3219); +// EXTERNAL MODULE: ./node_modules/khroma/dist/methods/lighten.js +var lighten = __webpack_require__(78041); +// EXTERNAL MODULE: ./node_modules/khroma/dist/methods/darken.js +var darken = __webpack_require__(75263); +// EXTERNAL MODULE: ./node_modules/dayjs/dayjs.min.js +var dayjs_min = __webpack_require__(74353); +// EXTERNAL MODULE: ./node_modules/@braintree/sanitize-url/dist/index.js +var sanitize_url_dist = __webpack_require__(16750); +// EXTERNAL MODULE: ./node_modules/dompurify/dist/purify.es.mjs +var purify_es = __webpack_require__(99418); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/mindmap-definition-307c710a.js + + + + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 4], $V1 = [1, 13], $V2 = [1, 12], $V3 = [1, 15], $V4 = [1, 16], $V5 = [1, 20], $V6 = [1, 19], $V7 = [6, 7, 8], $V8 = [1, 26], $V9 = [1, 24], $Va = [1, 25], $Vb = [6, 7, 11], $Vc = [1, 6, 13, 15, 16, 19, 22], $Vd = [1, 33], $Ve = [1, 34], $Vf = [1, 6, 7, 11, 13, 15, 16, 19, 22]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "mindMap": 4, "spaceLines": 5, "SPACELINE": 6, "NL": 7, "MINDMAP": 8, "document": 9, "stop": 10, "EOF": 11, "statement": 12, "SPACELIST": 13, "node": 14, "ICON": 15, "CLASS": 16, "nodeWithId": 17, "nodeWithoutId": 18, "NODE_DSTART": 19, "NODE_DESCR": 20, "NODE_DEND": 21, "NODE_ID": 22, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 6: "SPACELINE", 7: "NL", 8: "MINDMAP", 11: "EOF", 13: "SPACELIST", 15: "ICON", 16: "CLASS", 19: "NODE_DSTART", 20: "NODE_DESCR", 21: "NODE_DEND", 22: "NODE_ID" }, + productions_: [0, [3, 1], [3, 2], [5, 1], [5, 2], [5, 2], [4, 2], [4, 3], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [9, 3], [9, 2], [12, 2], [12, 2], [12, 2], [12, 1], [12, 1], [12, 1], [12, 1], [12, 1], [14, 1], [14, 1], [18, 3], [17, 1], [17, 4]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 6: + case 7: + return yy; + case 8: + yy.getLogger().trace("Stop NL "); + break; + case 9: + yy.getLogger().trace("Stop EOF "); + break; + case 11: + yy.getLogger().trace("Stop NL2 "); + break; + case 12: + yy.getLogger().trace("Stop EOF2 "); + break; + case 15: + yy.getLogger().info("Node: ", $$[$0].id); + yy.addNode($$[$0 - 1].length, $$[$0].id, $$[$0].descr, $$[$0].type); + break; + case 16: + yy.getLogger().trace("Icon: ", $$[$0]); + yy.decorateNode({ icon: $$[$0] }); + break; + case 17: + case 21: + yy.decorateNode({ class: $$[$0] }); + break; + case 18: + yy.getLogger().trace("SPACELIST"); + break; + case 19: + yy.getLogger().trace("Node: ", $$[$0].id); + yy.addNode(0, $$[$0].id, $$[$0].descr, $$[$0].type); + break; + case 20: + yy.decorateNode({ icon: $$[$0] }); + break; + case 25: + yy.getLogger().trace("node found ..", $$[$0 - 2]); + this.$ = { id: $$[$0 - 1], descr: $$[$0 - 1], type: yy.getType($$[$0 - 2], $$[$0]) }; + break; + case 26: + this.$ = { id: $$[$0], descr: $$[$0], type: yy.nodeType.DEFAULT }; + break; + case 27: + yy.getLogger().trace("node found ..", $$[$0 - 3]); + this.$ = { id: $$[$0 - 3], descr: $$[$0 - 1], type: yy.getType($$[$0 - 2], $$[$0]) }; + break; + } + }, + table: [{ 3: 1, 4: 2, 5: 3, 6: [1, 5], 8: $V0 }, { 1: [3] }, { 1: [2, 1] }, { 4: 6, 6: [1, 7], 7: [1, 8], 8: $V0 }, { 6: $V1, 7: [1, 10], 9: 9, 12: 11, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, o($V7, [2, 3]), { 1: [2, 2] }, o($V7, [2, 4]), o($V7, [2, 5]), { 1: [2, 6], 6: $V1, 12: 21, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, { 6: $V1, 9: 22, 12: 11, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, { 6: $V8, 7: $V9, 10: 23, 11: $Va }, o($Vb, [2, 22], { 17: 17, 18: 18, 14: 27, 15: [1, 28], 16: [1, 29], 19: $V5, 22: $V6 }), o($Vb, [2, 18]), o($Vb, [2, 19]), o($Vb, [2, 20]), o($Vb, [2, 21]), o($Vb, [2, 23]), o($Vb, [2, 24]), o($Vb, [2, 26], { 19: [1, 30] }), { 20: [1, 31] }, { 6: $V8, 7: $V9, 10: 32, 11: $Va }, { 1: [2, 7], 6: $V1, 12: 21, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, o($Vc, [2, 14], { 7: $Vd, 11: $Ve }), o($Vf, [2, 8]), o($Vf, [2, 9]), o($Vf, [2, 10]), o($Vb, [2, 15]), o($Vb, [2, 16]), o($Vb, [2, 17]), { 20: [1, 35] }, { 21: [1, 36] }, o($Vc, [2, 13], { 7: $Vd, 11: $Ve }), o($Vf, [2, 11]), o($Vf, [2, 12]), { 21: [1, 37] }, o($Vb, [2, 25]), o($Vb, [2, 27])], + defaultActions: { 2: [2, 1], 6: [2, 2] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + yy.getLogger().trace("Found comment", yy_.yytext); + return 6; + case 1: + return 8; + case 2: + this.begin("CLASS"); + break; + case 3: + this.popState(); + return 16; + case 4: + this.popState(); + break; + case 5: + yy.getLogger().trace("Begin icon"); + this.begin("ICON"); + break; + case 6: + yy.getLogger().trace("SPACELINE"); + return 6; + case 7: + return 7; + case 8: + return 15; + case 9: + yy.getLogger().trace("end icon"); + this.popState(); + break; + case 10: + yy.getLogger().trace("Exploding node"); + this.begin("NODE"); + return 19; + case 11: + yy.getLogger().trace("Cloud"); + this.begin("NODE"); + return 19; + case 12: + yy.getLogger().trace("Explosion Bang"); + this.begin("NODE"); + return 19; + case 13: + yy.getLogger().trace("Cloud Bang"); + this.begin("NODE"); + return 19; + case 14: + this.begin("NODE"); + return 19; + case 15: + this.begin("NODE"); + return 19; + case 16: + this.begin("NODE"); + return 19; + case 17: + this.begin("NODE"); + return 19; + case 18: + return 13; + case 19: + return 22; + case 20: + return 11; + case 21: + this.begin("NSTR2"); + break; + case 22: + return "NODE_DESCR"; + case 23: + this.popState(); + break; + case 24: + yy.getLogger().trace("Starting NSTR"); + this.begin("NSTR"); + break; + case 25: + yy.getLogger().trace("description:", yy_.yytext); + return "NODE_DESCR"; + case 26: + this.popState(); + break; + case 27: + this.popState(); + yy.getLogger().trace("node end ))"); + return "NODE_DEND"; + case 28: + this.popState(); + yy.getLogger().trace("node end )"); + return "NODE_DEND"; + case 29: + this.popState(); + yy.getLogger().trace("node end ...", yy_.yytext); + return "NODE_DEND"; + case 30: + this.popState(); + yy.getLogger().trace("node end (("); + return "NODE_DEND"; + case 31: + this.popState(); + yy.getLogger().trace("node end (-"); + return "NODE_DEND"; + case 32: + this.popState(); + yy.getLogger().trace("node end (-"); + return "NODE_DEND"; + case 33: + this.popState(); + yy.getLogger().trace("node end (("); + return "NODE_DEND"; + case 34: + this.popState(); + yy.getLogger().trace("node end (("); + return "NODE_DEND"; + case 35: + yy.getLogger().trace("Long description:", yy_.yytext); + return 20; + case 36: + yy.getLogger().trace("Long description:", yy_.yytext); + return 20; + } + }, + rules: [/^(?:\s*%%.*)/i, /^(?:mindmap\b)/i, /^(?::::)/i, /^(?:.+)/i, /^(?:\n)/i, /^(?:::icon\()/i, /^(?:[\s]+[\n])/i, /^(?:[\n]+)/i, /^(?:[^\)]+)/i, /^(?:\))/i, /^(?:-\))/i, /^(?:\(-)/i, /^(?:\)\))/i, /^(?:\))/i, /^(?:\(\()/i, /^(?:\{\{)/i, /^(?:\()/i, /^(?:\[)/i, /^(?:[\s]+)/i, /^(?:[^\(\[\n\)\{\}]+)/i, /^(?:$)/i, /^(?:["][`])/i, /^(?:[^`"]+)/i, /^(?:[`]["])/i, /^(?:["])/i, /^(?:[^"]+)/i, /^(?:["])/i, /^(?:[\)]\))/i, /^(?:[\)])/i, /^(?:[\]])/i, /^(?:\}\})/i, /^(?:\(-)/i, /^(?:-\))/i, /^(?:\(\()/i, /^(?:\()/i, /^(?:[^\)\]\(\}]+)/i, /^(?:.+(?!\(\())/i], + conditions: { "CLASS": { "rules": [3, 4], "inclusive": false }, "ICON": { "rules": [8, 9], "inclusive": false }, "NSTR2": { "rules": [22, 23], "inclusive": false }, "NSTR": { "rules": [25, 26], "inclusive": false }, "NODE": { "rules": [21, 24, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +let nodes = []; +let cnt = 0; +let mindmap_definition_307c710a_elements = {}; +const clear = () => { + nodes = []; + cnt = 0; + mindmap_definition_307c710a_elements = {}; +}; +const getParent = function(level) { + for (let i = nodes.length - 1; i >= 0; i--) { + if (nodes[i].level < level) { + return nodes[i]; + } + } + return null; +}; +const getMindmap = () => { + return nodes.length > 0 ? nodes[0] : null; +}; +const addNode = (level, id, descr, type) => { + var _a, _b; + mermaid_6dc72991.l.info("addNode", level, id, descr, type); + const conf = (0,mermaid_6dc72991.c)(); + let padding = ((_a = conf.mindmap) == null ? void 0 : _a.padding) ?? mermaid_6dc72991.B.mindmap.padding; + switch (type) { + case nodeType.ROUNDED_RECT: + case nodeType.RECT: + case nodeType.HEXAGON: + padding *= 2; + } + const node = { + id: cnt++, + nodeId: (0,mermaid_6dc72991.d)(id, conf), + level, + descr: (0,mermaid_6dc72991.d)(descr, conf), + type, + children: [], + width: ((_b = conf.mindmap) == null ? void 0 : _b.maxNodeWidth) ?? mermaid_6dc72991.B.mindmap.maxNodeWidth, + padding + }; + const parent = getParent(level); + if (parent) { + parent.children.push(node); + nodes.push(node); + } else { + if (nodes.length === 0) { + nodes.push(node); + } else { + throw new Error( + 'There can be only one root. No parent could be found for ("' + node.descr + '")' + ); + } + } +}; +const nodeType = { + DEFAULT: 0, + NO_BORDER: 0, + ROUNDED_RECT: 1, + RECT: 2, + CIRCLE: 3, + CLOUD: 4, + BANG: 5, + HEXAGON: 6 +}; +const getType = (startStr, endStr) => { + mermaid_6dc72991.l.debug("In get type", startStr, endStr); + switch (startStr) { + case "[": + return nodeType.RECT; + case "(": + return endStr === ")" ? nodeType.ROUNDED_RECT : nodeType.CLOUD; + case "((": + return nodeType.CIRCLE; + case ")": + return nodeType.CLOUD; + case "))": + return nodeType.BANG; + case "{{": + return nodeType.HEXAGON; + default: + return nodeType.DEFAULT; + } +}; +const setElementForId = (id, element) => { + mindmap_definition_307c710a_elements[id] = element; +}; +const decorateNode = (decoration) => { + if (!decoration) { + return; + } + const config = (0,mermaid_6dc72991.c)(); + const node = nodes[nodes.length - 1]; + if (decoration.icon) { + node.icon = (0,mermaid_6dc72991.d)(decoration.icon, config); + } + if (decoration.class) { + node.class = (0,mermaid_6dc72991.d)(decoration.class, config); + } +}; +const type2Str = (type) => { + switch (type) { + case nodeType.DEFAULT: + return "no-border"; + case nodeType.RECT: + return "rect"; + case nodeType.ROUNDED_RECT: + return "rounded-rect"; + case nodeType.CIRCLE: + return "circle"; + case nodeType.CLOUD: + return "cloud"; + case nodeType.BANG: + return "bang"; + case nodeType.HEXAGON: + return "hexgon"; + default: + return "no-border"; + } +}; +const getLogger = () => mermaid_6dc72991.l; +const getElementById = (id) => mindmap_definition_307c710a_elements[id]; +const db = { + clear, + addNode, + getMindmap, + nodeType, + getType, + setElementForId, + decorateNode, + type2Str, + getLogger, + getElementById +}; +const db$1 = db; +const MAX_SECTIONS = 12; +const defaultBkg = function(db2, elem, node, section) { + const rd = 5; + elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + db2.type2Str(node.type)).attr( + "d", + `M0 ${node.height - rd} v${-node.height + 2 * rd} q0,-5 5,-5 h${node.width - 2 * rd} q5,0 5,5 v${node.height - rd} H0 Z` + ); + elem.append("line").attr("class", "node-line-" + section).attr("x1", 0).attr("y1", node.height).attr("x2", node.width).attr("y2", node.height); +}; +const rectBkg = function(db2, elem, node) { + elem.append("rect").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + db2.type2Str(node.type)).attr("height", node.height).attr("width", node.width); +}; +const cloudBkg = function(db2, elem, node) { + const w = node.width; + const h = node.height; + const r1 = 0.15 * w; + const r2 = 0.25 * w; + const r3 = 0.35 * w; + const r4 = 0.2 * w; + elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + db2.type2Str(node.type)).attr( + "d", + `M0 0 a${r1},${r1} 0 0,1 ${w * 0.25},${-1 * w * 0.1} + a${r3},${r3} 1 0,1 ${w * 0.4},${-1 * w * 0.1} + a${r2},${r2} 1 0,1 ${w * 0.35},${1 * w * 0.2} + + a${r1},${r1} 1 0,1 ${w * 0.15},${1 * h * 0.35} + a${r4},${r4} 1 0,1 ${-1 * w * 0.15},${1 * h * 0.65} + + a${r2},${r1} 1 0,1 ${-1 * w * 0.25},${w * 0.15} + a${r3},${r3} 1 0,1 ${-1 * w * 0.5},${0} + a${r1},${r1} 1 0,1 ${-1 * w * 0.25},${-1 * w * 0.15} + + a${r1},${r1} 1 0,1 ${-1 * w * 0.1},${-1 * h * 0.35} + a${r4},${r4} 1 0,1 ${w * 0.1},${-1 * h * 0.65} + + H0 V0 Z` + ); +}; +const bangBkg = function(db2, elem, node) { + const w = node.width; + const h = node.height; + const r = 0.15 * w; + elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + db2.type2Str(node.type)).attr( + "d", + `M0 0 a${r},${r} 1 0,0 ${w * 0.25},${-1 * h * 0.1} + a${r},${r} 1 0,0 ${w * 0.25},${0} + a${r},${r} 1 0,0 ${w * 0.25},${0} + a${r},${r} 1 0,0 ${w * 0.25},${1 * h * 0.1} + + a${r},${r} 1 0,0 ${w * 0.15},${1 * h * 0.33} + a${r * 0.8},${r * 0.8} 1 0,0 ${0},${1 * h * 0.34} + a${r},${r} 1 0,0 ${-1 * w * 0.15},${1 * h * 0.33} + + a${r},${r} 1 0,0 ${-1 * w * 0.25},${h * 0.15} + a${r},${r} 1 0,0 ${-1 * w * 0.25},${0} + a${r},${r} 1 0,0 ${-1 * w * 0.25},${0} + a${r},${r} 1 0,0 ${-1 * w * 0.25},${-1 * h * 0.15} + + a${r},${r} 1 0,0 ${-1 * w * 0.1},${-1 * h * 0.33} + a${r * 0.8},${r * 0.8} 1 0,0 ${0},${-1 * h * 0.34} + a${r},${r} 1 0,0 ${w * 0.1},${-1 * h * 0.33} + + H0 V0 Z` + ); +}; +const circleBkg = function(db2, elem, node) { + elem.append("circle").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + db2.type2Str(node.type)).attr("r", node.width / 2); +}; +function insertPolygonShape(parent, w, h, points, node) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("transform", "translate(" + (node.width - w) / 2 + ", " + h + ")"); +} +const hexagonBkg = function(_db, elem, node) { + const h = node.height; + const f = 4; + const m = h / f; + const w = node.width - node.padding + 2 * m; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + insertPolygonShape(elem, w, h, points, node); +}; +const roundedRectBkg = function(db2, elem, node) { + elem.append("rect").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + db2.type2Str(node.type)).attr("height", node.height).attr("rx", node.padding).attr("ry", node.padding).attr("width", node.width); +}; +const drawNode = function(db2, elem, node, fullSection, conf) { + const htmlLabels = conf.htmlLabels; + const section = fullSection % (MAX_SECTIONS - 1); + const nodeElem = elem.append("g"); + node.section = section; + let sectionClass = "section-" + section; + if (section < 0) { + sectionClass += " section-root"; + } + nodeElem.attr("class", (node.class ? node.class + " " : "") + "mindmap-node " + sectionClass); + const bkgElem = nodeElem.append("g"); + const textElem = nodeElem.append("g"); + const description = node.descr.replace(/()/g, "\n"); + (0,createText_ca0c5216.a)(textElem, description, { + useHtmlLabels: htmlLabels, + width: node.width, + classes: "mindmap-node-label" + }); + if (!htmlLabels) { + textElem.attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle"); + } + const bbox = textElem.node().getBBox(); + const [fontSize] = (0,mermaid_6dc72991.D)(conf.fontSize); + node.height = bbox.height + fontSize * 1.1 * 0.5 + node.padding; + node.width = bbox.width + 2 * node.padding; + if (node.icon) { + if (node.type === db2.nodeType.CIRCLE) { + node.height += 50; + node.width += 50; + const icon = nodeElem.append("foreignObject").attr("height", "50px").attr("width", node.width).attr("style", "text-align: center;"); + icon.append("div").attr("class", "icon-container").append("i").attr("class", "node-icon-" + section + " " + node.icon); + textElem.attr( + "transform", + "translate(" + node.width / 2 + ", " + (node.height / 2 - 1.5 * node.padding) + ")" + ); + } else { + node.width += 50; + const orgHeight = node.height; + node.height = Math.max(orgHeight, 60); + const heightDiff = Math.abs(node.height - orgHeight); + const icon = nodeElem.append("foreignObject").attr("width", "60px").attr("height", node.height).attr("style", "text-align: center;margin-top:" + heightDiff / 2 + "px;"); + icon.append("div").attr("class", "icon-container").append("i").attr("class", "node-icon-" + section + " " + node.icon); + textElem.attr( + "transform", + "translate(" + (25 + node.width / 2) + ", " + (heightDiff / 2 + node.padding / 2) + ")" + ); + } + } else { + if (!htmlLabels) { + const dx = node.width / 2; + const dy = node.padding / 2; + textElem.attr("transform", "translate(" + dx + ", " + dy + ")"); + } else { + const dx = (node.width - bbox.width) / 2; + const dy = (node.height - bbox.height) / 2; + textElem.attr("transform", "translate(" + dx + ", " + dy + ")"); + } + } + switch (node.type) { + case db2.nodeType.DEFAULT: + defaultBkg(db2, bkgElem, node, section); + break; + case db2.nodeType.ROUNDED_RECT: + roundedRectBkg(db2, bkgElem, node); + break; + case db2.nodeType.RECT: + rectBkg(db2, bkgElem, node); + break; + case db2.nodeType.CIRCLE: + bkgElem.attr("transform", "translate(" + node.width / 2 + ", " + +node.height / 2 + ")"); + circleBkg(db2, bkgElem, node); + break; + case db2.nodeType.CLOUD: + cloudBkg(db2, bkgElem, node); + break; + case db2.nodeType.BANG: + bangBkg(db2, bkgElem, node); + break; + case db2.nodeType.HEXAGON: + hexagonBkg(db2, bkgElem, node); + break; + } + db2.setElementForId(node.id, nodeElem); + return node.height; +}; +const positionNode = function(db2, node) { + const nodeElem = db2.getElementById(node.id); + const x = node.x || 0; + const y = node.y || 0; + nodeElem.attr("transform", "translate(" + x + "," + y + ")"); +}; +cytoscape.use(cytoscape_cose_bilkent); +function drawNodes(db2, svg, mindmap, section, conf) { + drawNode(db2, svg, mindmap, section, conf); + if (mindmap.children) { + mindmap.children.forEach((child, index) => { + drawNodes(db2, svg, child, section < 0 ? index : section, conf); + }); + } +} +function drawEdges(edgesEl, cy) { + cy.edges().map((edge, id) => { + const data = edge.data(); + if (edge[0]._private.bodyBounds) { + const bounds = edge[0]._private.rscratch; + mermaid_6dc72991.l.trace("Edge: ", id, data); + edgesEl.insert("path").attr( + "d", + `M ${bounds.startX},${bounds.startY} L ${bounds.midX},${bounds.midY} L${bounds.endX},${bounds.endY} ` + ).attr("class", "edge section-edge-" + data.section + " edge-depth-" + data.depth); + } + }); +} +function addNodes(mindmap, cy, conf, level) { + cy.add({ + group: "nodes", + data: { + id: mindmap.id.toString(), + labelText: mindmap.descr, + height: mindmap.height, + width: mindmap.width, + level, + nodeId: mindmap.id, + padding: mindmap.padding, + type: mindmap.type + }, + position: { + x: mindmap.x, + y: mindmap.y + } + }); + if (mindmap.children) { + mindmap.children.forEach((child) => { + addNodes(child, cy, conf, level + 1); + cy.add({ + group: "edges", + data: { + id: `${mindmap.id}_${child.id}`, + source: mindmap.id, + target: child.id, + depth: level, + section: child.section + } + }); + }); + } +} +function layoutMindmap(node, conf) { + return new Promise((resolve) => { + const renderEl = (0,src/* select */.Ltv)("body").append("div").attr("id", "cy").attr("style", "display:none"); + const cy = cytoscape({ + container: document.getElementById("cy"), + // container to render in + style: [ + { + selector: "edge", + style: { + "curve-style": "bezier" + } + } + ] + }); + renderEl.remove(); + addNodes(node, cy, conf, 0); + cy.nodes().forEach(function(n) { + n.layoutDimensions = () => { + const data = n.data(); + return { w: data.width, h: data.height }; + }; + }); + cy.layout({ + name: "cose-bilkent", + // @ts-ignore Types for cose-bilkent are not correct? + quality: "proof", + styleEnabled: false, + animate: false + }).run(); + cy.ready((e) => { + mermaid_6dc72991.l.info("Ready", e); + resolve(cy); + }); + }); +} +function positionNodes(db2, cy) { + cy.nodes().map((node, id) => { + const data = node.data(); + data.x = node.position().x; + data.y = node.position().y; + positionNode(db2, data); + const el = db2.getElementById(data.nodeId); + mermaid_6dc72991.l.info("Id:", id, "Position: (", node.position().x, ", ", node.position().y, ")", data); + el.attr( + "transform", + `translate(${node.position().x - data.width / 2}, ${node.position().y - data.height / 2})` + ); + el.attr("attr", `apa-${id})`); + }); +} +const draw = async (text, id, _version, diagObj) => { + var _a, _b; + mermaid_6dc72991.l.debug("Rendering mindmap diagram\n" + text); + const db2 = diagObj.db; + const mm = db2.getMindmap(); + if (!mm) { + return; + } + const conf = (0,mermaid_6dc72991.c)(); + conf.htmlLabels = false; + const svg = (0,mermaid_6dc72991.A)(id); + const edgesElem = svg.append("g"); + edgesElem.attr("class", "mindmap-edges"); + const nodesElem = svg.append("g"); + nodesElem.attr("class", "mindmap-nodes"); + drawNodes(db2, nodesElem, mm, -1, conf); + const cy = await layoutMindmap(mm, conf); + drawEdges(edgesElem, cy); + positionNodes(db2, cy); + (0,mermaid_6dc72991.o)( + void 0, + svg, + ((_a = conf.mindmap) == null ? void 0 : _a.padding) ?? mermaid_6dc72991.B.mindmap.padding, + ((_b = conf.mindmap) == null ? void 0 : _b.useMaxWidth) ?? mermaid_6dc72991.B.mindmap.useMaxWidth + ); +}; +const mindmap_definition_307c710a_renderer = { + draw +}; +const genSections = (options) => { + let sections = ""; + for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { + options["lineColor" + i] = options["lineColor" + i] || options["cScaleInv" + i]; + if ((0,is_dark/* default */.A)(options["lineColor" + i])) { + options["lineColor" + i] = (0,lighten/* default */.A)(options["lineColor" + i], 20); + } else { + options["lineColor" + i] = (0,darken/* default */.A)(options["lineColor" + i], 20); + } + } + for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { + const sw = "" + (17 - 3 * i); + sections += ` + .section-${i - 1} rect, .section-${i - 1} path, .section-${i - 1} circle, .section-${i - 1} polygon, .section-${i - 1} path { + fill: ${options["cScale" + i]}; + } + .section-${i - 1} text { + fill: ${options["cScaleLabel" + i]}; + } + .node-icon-${i - 1} { + font-size: 40px; + color: ${options["cScaleLabel" + i]}; + } + .section-edge-${i - 1}{ + stroke: ${options["cScale" + i]}; + } + .edge-depth-${i - 1}{ + stroke-width: ${sw}; + } + .section-${i - 1} line { + stroke: ${options["cScaleInv" + i]} ; + stroke-width: 3; + } + + .disabled, .disabled circle, .disabled text { + fill: lightgray; + } + .disabled text { + fill: #efefef; + } + `; + } + return sections; +}; +const getStyles = (options) => ` + .edge { + stroke-width: 3; + } + ${genSections(options)} + .section-root rect, .section-root path, .section-root circle, .section-root polygon { + fill: ${options.git0}; + } + .section-root text { + fill: ${options.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } + .mindmap-node-label { + dy: 1em; + alignment-baseline: middle; + text-anchor: middle; + dominant-baseline: middle; + text-align: center; + } +`; +const styles = getStyles; +const diagram = { + db: db$1, + renderer: mindmap_definition_307c710a_renderer, + parser: parser$1, + styles +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/3068.021ebcf1.js b/assets/js/3068.021ebcf1.js new file mode 100644 index 0000000000..85639e3d60 --- /dev/null +++ b/assets/js/3068.021ebcf1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3068],{3068:(e,t,s)=>{s.d(t,{diagram:()=>V});var o=s(91245),i=s(697),a=s(26312),n=s(99702),r=s(35364);s(74353),s(16750),s(42838),s(21176),s(14075);const d="rect",c="rectWithTitle",l="statediagram",p=`${l}-state`,b="transition",g=`${b} note-edge`,h=`${l}-note`,u=`${l}-cluster`,y=`${l}-cluster-alt`,f="parent",w="note",m="----",x=`${m}${w}`,$=`${m}${f}`,T="fill:none",S="fill: #333",k="text",v="normal";let D={},A=0;function B(e="",t=0,s="",o=m){return`state-${e}${null!==s&&s.length>0?`${o}${s}`:""}-${t}`}const L=(e,t,s,i,a,r)=>{const l=s.id,b=null==(m=i[l])?"":m.classes?m.classes.join(" "):"";var m;if("root"!==l){let t=d;!0===s.start&&(t="start"),!1===s.start&&(t="end"),s.type!==o.D&&(t=s.type),D[l]||(D[l]={id:l,shape:t,description:n.e.sanitizeText(l,(0,n.c)()),classes:`${b} ${p}`});const i=D[l];s.description&&(Array.isArray(i.description)?(i.shape=c,i.description.push(s.description)):i.description.length>0?(i.shape=c,i.description===l?i.description=[s.description]:i.description=[i.description,s.description]):(i.shape=d,i.description=s.description),i.description=n.e.sanitizeTextOrArray(i.description,(0,n.c)())),1===i.description.length&&i.shape===c&&(i.shape=d),!i.type&&s.doc&&(n.l.info("Setting cluster for ",l,E(s)),i.type="group",i.dir=E(s),i.shape=s.type===o.a?"divider":"roundedWithTitle",i.classes=i.classes+" "+u+" "+(r?y:""));const a={labelStyle:"",shape:i.shape,labelText:i.description,classes:i.classes,style:"",id:l,dir:i.dir,domId:B(l,A),type:i.type,padding:15,centerLabel:!0};if(s.note){const t={labelStyle:"",shape:"note",labelText:s.note.text,classes:h,style:"",id:l+x+"-"+A,domId:B(l,A,w),type:i.type,padding:15},o={labelStyle:"",shape:"noteGroup",labelText:s.note.text,classes:i.classes,style:"",id:l+$,domId:B(l,A,f),type:"group",padding:0};A++;const n=l+$;e.setNode(n,o),e.setNode(t.id,t),e.setNode(l,a),e.setParent(l,n),e.setParent(t.id,n);let r=l,d=t.id;"left of"===s.note.position&&(r=t.id,d=l),e.setEdge(r,d,{arrowhead:"none",arrowType:"",style:T,labelStyle:"",classes:g,arrowheadStyle:S,labelpos:"c",labelType:k,thickness:v})}else e.setNode(l,a)}t&&"root"!==t.id&&(n.l.trace("Setting node ",l," to be child of its parent ",t.id),e.setParent(l,t.id)),s.doc&&(n.l.trace("Adding nodes children "),C(e,s,s.doc,i,a,!r))},C=(e,t,s,i,a,r)=>{n.l.trace("items",s),s.forEach((s=>{switch(s.stmt){case o.b:case o.D:L(e,t,s,i,a,r);break;case o.S:{L(e,t,s.state1,i,a,r),L(e,t,s.state2,i,a,r);const o={id:"edge"+A,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:T,labelStyle:"",label:n.e.sanitizeText(s.description,(0,n.c)()),arrowheadStyle:S,labelpos:"c",labelType:k,thickness:v,classes:b};e.setEdge(s.state1.id,s.state2.id,o,A),A++}}}))},E=(e,t=o.c)=>{let s=t;if(e.doc)for(let o=0;o{e.state||(e.state={}),e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute,o.d.clear()}}}}]); \ No newline at end of file diff --git a/assets/js/32311569.ecdf1b16.js b/assets/js/32311569.ecdf1b16.js new file mode 100644 index 0000000000..003f0bba79 --- /dev/null +++ b/assets/js/32311569.ecdf1b16.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2581],{97237:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>a,toc:()=>E});var t=r(74848),c=r(28453);const s={},o="RATE_PER_STREAM",a={id:"about/references/RATE_PER_STREAM",title:"RATE_PER_STREAM",description:"INSTALLATIONS /",source:"@site/docs/about/references/RATE_PER_STREAM.md",sourceDirName:"about/references",slug:"/about/references/RATE_PER_STREAM",permalink:"/ecalc/docs/about/references/RATE_PER_STREAM",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/RATE_PER_STREAM.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"RATE_FRACTIONS",permalink:"/ecalc/docs/about/references/RATE_FRACTIONS"},next:{title:"REGULARITY",permalink:"/ecalc/docs/about/references/REGULARITY"}},i={},E=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,c.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"rate_per_stream",children:"RATE_PER_STREAM"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/RATE_PER_STREAM",children:"RATE_PER_STREAM"})]}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:["Used to define the rate for each stream for the VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," types using a list of ",(0,t.jsx)(n.code,{children:"expression"})]}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"RATE_PER_STREAM:\n - \n - \n"})}),"\n",(0,t.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"RATE_PER_STREAM:\n - SIM1:GAS_PROD\n - SIM1:GAS_SALES\n"})})]})}function d(e={}){const{wrapper:n}={...(0,c.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>o,x:()=>a});var t=r(96540);const c={},s=t.createContext(c);function o(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:o(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/331.af64ff0c.js b/assets/js/331.af64ff0c.js new file mode 100644 index 0000000000..944cfb4076 --- /dev/null +++ b/assets/js/331.af64ff0c.js @@ -0,0 +1,10814 @@ +"use strict"; +exports.id = 331; +exports.ids = [331]; +exports.modules = { + +/***/ 21176: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Zp: () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(8058); +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(5664); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(48585); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(39142); +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(34098); +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(74722); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(91395); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(697); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.A(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.A( + map/* default */.A(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.A(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.A(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.T(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.A(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.A(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.A(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.A(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.A(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.A('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.A(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.A(g.outEdges(v), function (e) { + if (has/* default */.A(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.A(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.A(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/merge.js + 6 modules +var merge = __webpack_require__(98879); +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(81942); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(23068); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(61882); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.A)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(29008); +;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.A, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(52528); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(79841); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(49574); +;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.A)(iteratee, 3); + + (0,_baseForOwn/* default */.A)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.A)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(69592); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.A, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js +var _root = __webpack_require__(41917); +;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default */.A.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.A(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.T().setGraph(g.graph()); + forEach/* default */.A(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.A(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.T({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.A(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.A(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.A(range/* default */.A(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.A(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.A(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.A(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.A(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.A(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.A(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.A(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.A(layers, function (vs, i) { + if (isUndefined/* default */.A(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.A(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.A(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.A(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.A(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.A(children, dfs); + } + + if (has/* default */.A(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.A(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.A(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.A(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.A(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.A(edge.points, reverseYOne); + if (has/* default */.A(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.A(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.A(edge.points, swapXYOne); + if (has/* default */.A(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.A(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.A(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.A)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.A(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.A(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.A(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.T({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.A(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.A(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.A(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(38446); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(27422); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.A)(collection)) { + var iteratee = (0,_baseIteratee/* default */.A)(predicate, 3); + collection = (0,keys/* default */.A)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(25707); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(74342); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.A)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.A)(array, (0,_baseIteratee/* default */.A)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(11662); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.A(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.A(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(69471); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(9779); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(88496); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(53098); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.A)(value) && (0,isObjectLike/* default */.A)(value) && (0,_baseGetTag/* default */.A)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(70805); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.A)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.A)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.A)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.A)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.A(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.A(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.A(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.A(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.A(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.A(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.A(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.A(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(73046); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.A(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.A(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.A(tree.neighbors(v), function (w) { + if (!has/* default */.A(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.A(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.A(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(38207); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(89463); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.A(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.A(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.A(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.A(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.A(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.A(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.A( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(91641); +;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.A)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.A(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.T({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.A(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.A(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.A(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.A(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.A('_root')))); + return v; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(52851); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.A); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(13588); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(45572); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(66318); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(52568); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(52789); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.A)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.A)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.A)(iteratees, function(iteratee) { + if ((0,isArray/* default */.A)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.A)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.A]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.A)(iteratees, (0,_baseUnary/* default */.A)(_baseIteratee/* default */.A)); + + var result = (0,_baseMap/* default */.A)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.A)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(24326); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(6832); +;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.A)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.A)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.A)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.A)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.A(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.A( + map/* default */.A(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.A(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.A(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.A( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.A(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.A(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.A(range/* default */.A(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.A(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.A(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.A(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.A(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.A( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.A(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.A(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.A(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.A(entryV) && !isUndefined/* default */.A(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.A(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.A(uEntry.barycenter) || + isUndefined/* default */.A(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.A(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.A(entry.out, handleOut(entry)); + } + + return map/* default */.A( + filter/* default */.A(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.A(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.A(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.A(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.A(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.A(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.A(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.A(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.A([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.A(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.A(entries, function (entry) { + entry.vs = flatten/* default */.A( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.A(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.A(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.A(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.A(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.T(); + forEach/* default */.A(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.A(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.A(layering, function (layer) { + forEach/* default */.A(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.A(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.A(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.A(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(99922); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.A)(object, (0,_castFunction/* default */.A)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(4574); +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(77996); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.A)(object, (0,_castFunction/* default */.A)(iteratee), keysIn/* default */.A); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.A(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.A(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.A(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.A(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.A(range/* default */.A(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.A(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.A(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.A(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.A(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.A(layering, function (layer) { + forEach/* default */.A(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.A(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.A(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.A(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.T(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.A(layering, function (layer) { + var u; + forEach/* default */.A(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.A(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.A(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.A(['u', 'd'], function (vert) { + forEach/* default */.A(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.A(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.A(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = merge/* default */.A(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.A(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.A(layering).reverse(); + forEach/* default */.A(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.A(adjustedLayering, function (inner) { + return values/* default */.A(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.A(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.A(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.A(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.A(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.A(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.A(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.A(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.A(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.T({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + merge/* default */.A({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.A(graph, graphAttrs)) + ); + + forEach/* default */.A(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.A(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.A(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + merge/* default */.A({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.A(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.A(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.A(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.A(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.A(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.A(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.A(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.A(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.A(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.A(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.A(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.A(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.A(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.A(layers, function (layer) { + var orderShift = 0; + forEach/* default */.A(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.A(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.A(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.A(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.A(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 73046: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + T: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(48585); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(39142); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(89610); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(27422); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(11662); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(66401); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(8058); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(69592); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(13588); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(24326); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(62062); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(25707); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.A)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(64099); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(39857); +;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(29959); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.A && (1 / (0,_setToArray/* default */.A)(new _Set/* default */.A([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.A(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.A)(set); + } + isCommon = false; + includes = _cacheHas/* default */.A; + seen = new _SetCache/* default */.A; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(53533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.A)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.A)(arrays, 1, isArrayLikeObject/* default */.A, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(38207); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(89463); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.A(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.A(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.A(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.A(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.A(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.A(newDefault)) { + newDefault = constant/* default */.A(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.A(this._nodes); + } + sources() { + var self = this; + return filter/* default */.A(this.nodes(), function (v) { + return isEmpty/* default */.A(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.A(this.nodes(), function (v) { + return isEmpty/* default */.A(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.A(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.A(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.A(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.A(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.A(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.A(keys/* default */.A(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.A(keys/* default */.A(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.A(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.A(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.A(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.A(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.A(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.A(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.A(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.A(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.A(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.A(newDefault)) { + newDefault = constant/* default */.A(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.A(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.A(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.A(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.A(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.A(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.A(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.A(inV); + if (!u) { + return edges; + } + return filter/* default */.A(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.A(outV); + if (!w) { + return edges; + } + return filter/* default */.A(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.A(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 697: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ T: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.T) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73046); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 62062: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(29471); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.A; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 72641: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 2634: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 45572: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 76912: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 91641: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(11754); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(72641); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(52851); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(22031); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(27422); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.A)(source, (0,keys/* default */.A)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(77996); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.A)(source, (0,keysIn/* default */.A)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(80154); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(39759); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(14792); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.A)(source, (0,_getSymbols/* default */.A)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(76912); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(15647); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(13153); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.A : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.A)(result, (0,_getSymbols/* default */.A)(object)); + object = (0,_getPrototype/* default */.A)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.A)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(19042); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(33831); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.A)(object, keysIn/* default */.A, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(9779); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(90565); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.A)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(241); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(1801); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.A)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.A)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(18598); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(99912); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(53098); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.A)(value) && (0,_getTag/* default */.A)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(52789); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(64841); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.A && _nodeUtil/* default */.A.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.A)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(23149); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.A)(value) && (0,_getTag/* default */.A)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.A && _nodeUtil/* default */.A.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.A)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.A)(value)) { + return value; + } + var isArr = (0,isArray/* default */.A)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.A)(value, result); + } + } else { + var tag = (0,_getTag/* default */.A)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.A)(value)) { + return (0,_cloneBuffer/* default */.A)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.A)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.A); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.A) + : (isFlat ? keysIn/* default */.A : keys/* default */.A); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.A)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.A)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 6240: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(79841); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(38446); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.A)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.A); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 25707: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 13588: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(76912); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(241); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(52274); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.A ? _Symbol/* default */.A.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.A)(value) || (0,isArguments/* default */.A)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.A)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 79841: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4574); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27422); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 66318: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30901); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 33831: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76912); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 49574: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(11754); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(62062); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(64099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.A : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.A)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(241); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(43988); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(66984); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(29959); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.A(object), new _Uint8Array/* default */.A(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.A)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.A); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(19042); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.A)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.A)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(9779); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(99912); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(33858); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.A)(object), + othIsArr = (0,isArray/* default */.A)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.A)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.A)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.A)(object)) { + if (!(0,isBuffer/* default */.A)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.A); + return (objIsArr || (0,isTypedArray/* default */.A)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.A); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.A); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(53098); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.A)(value) && !(0,isObjectLike/* default */.A)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.A; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(23149); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.A)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(27422); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.A)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(66318); +;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.A)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(39188); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(86586); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(30901); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.A)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.A)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.A)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(29008); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(70805); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.A)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.A)(path) ? (0,_baseProperty/* default */.A)((0,_toKey/* default */.A)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.A; + } + if (typeof value == 'object') { + return (0,isArray/* default */.A)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 52568: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6240); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38446); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 70805: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 64099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 99922: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(29008); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 7819: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(86586); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(46632); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.A)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(28894); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.A)(value)) { + return value; + } + return (0,_isKey/* default */.A)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.A)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 19042: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33831); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(14792); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27422); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 14792: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2634); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13153); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 85054: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(52274); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(92049); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(25353); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5254); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30901); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 86586: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(61882); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 29959: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 30901: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61882); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 23068: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(24326); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(66984); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6832); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(77996); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 11662: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(2634); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(6240); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.A)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(49574); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.A)(collection) ? _arrayFilter/* default */.A : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.A)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 34098: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13588); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 8058: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72641); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6240); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99922); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 48585: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(85054); +;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.A)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 39188: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(85054); +;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.A)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 61882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88496); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(53098); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 69592: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 27422: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(83607); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(69471); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38446); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 74722: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(45572); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(49574); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(52568); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 81942: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(66318); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(52851); +// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(7819); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(25353); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(23149); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(30901); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.A)(object)) { + return object; + } + path = (0,_castPath/* default */.A)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.A)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.A)(objValue) + ? objValue + : ((0,_isIndex/* default */.A)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.A)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.A)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.A)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(39188); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.A)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(34098); +// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(76875); +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(67525); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.A)((0,_overRest/* default */.A)(func, undefined, flatten/* default */.A), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 91395: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(6832); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(74342); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.A)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.A)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.A)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.A)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 89463: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(6240); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(49574); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.A)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.A)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.A); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 13153: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 74342: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(23149); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(61882); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.A)(value)) { + return NAN; + } + if ((0,isObject/* default */.A)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.A)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 28894: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(241); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(45572); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(61882); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.A)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.A)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.A)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 5664: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(28894); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 38207: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(45572); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.A)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(27422); +;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.A)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 31331: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(91245); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(21176); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(697); +/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(99702); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74353); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(16750); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(99418); + + + + + + + + + + + + + + +const idCache = {}; +const set = (key, val) => { + idCache[key] = val; +}; +const get = (k) => idCache[k]; +const keys = () => Object.keys(idCache); +const size = () => keys().length; +const idCache$1 = { + get, + set, + keys, + size +}; +const drawStartState = (g) => g.append("circle").attr("class", "start-state").attr("r", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit).attr("cx", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit).attr("cy", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit); +const drawDivider = (g) => g.append("line").style("stroke", "grey").style("stroke-dasharray", "3").attr("x1", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight).attr("class", "divider").attr("x2", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight * 2).attr("y1", 0).attr("y2", 0); +const drawSimpleState = (g, stateDef) => { + const state = g.append("text").attr("x", 2 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight + 2 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("font-size", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.fontSize).attr("class", "state-title").text(stateDef.id); + const classBox = state.node().getBBox(); + g.insert("rect", ":first-child").attr("x", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("width", classBox.width + 2 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("height", classBox.height + 2 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("rx", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.radius); + return state; +}; +const drawDescrState = (g, stateDef) => { + const addTspan = function(textEl, txt, isFirst2) { + const tSpan = textEl.append("tspan").attr("x", 2 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).text(txt); + if (!isFirst2) { + tSpan.attr("dy", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight); + } + }; + const title = g.append("text").attr("x", 2 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight + 1.3 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("font-size", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.fontSize).attr("class", "state-title").text(stateDef.descriptions[0]); + const titleBox = title.node().getBBox(); + const titleHeight = titleBox.height; + const description = g.append("text").attr("x", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr( + "y", + titleHeight + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding * 0.4 + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.dividerMargin + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight + ).attr("class", "state-description"); + let isFirst = true; + let isSecond = true; + stateDef.descriptions.forEach(function(descr) { + if (!isFirst) { + addTspan(description, descr, isSecond); + isSecond = false; + } + isFirst = false; + }); + const descrLine = g.append("line").attr("x1", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y1", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + titleHeight + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.dividerMargin / 2).attr("y2", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + titleHeight + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.dividerMargin / 2).attr("class", "descr-divider"); + const descrBox = description.node().getBBox(); + const width = Math.max(descrBox.width, titleBox.width); + descrLine.attr("x2", width + 3 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding); + g.insert("rect", ":first-child").attr("x", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("width", width + 2 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("height", descrBox.height + titleHeight + 2 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("rx", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.radius); + return g; +}; +const addTitleAndBox = (g, stateDef, altBkg) => { + const pad = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding; + const dblPad = 2 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding; + const orgBox = g.node().getBBox(); + const orgWidth = orgBox.width; + const orgX = orgBox.x; + const title = g.append("text").attr("x", 0).attr("y", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.titleShift).attr("font-size", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.fontSize).attr("class", "state-title").text(stateDef.id); + const titleBox = title.node().getBBox(); + const titleWidth = titleBox.width + dblPad; + let width = Math.max(titleWidth, orgWidth); + if (width === orgWidth) { + width = width + dblPad; + } + let startX; + const graphBox = g.node().getBBox(); + if (stateDef.doc) + ; + startX = orgX - pad; + if (titleWidth > orgWidth) { + startX = (orgWidth - width) / 2 + pad; + } + if (Math.abs(orgX - graphBox.x) < pad && titleWidth > orgWidth) { + startX = orgX - (titleWidth - orgWidth) / 2; + } + const lineY = 1 - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight; + g.insert("rect", ":first-child").attr("x", startX).attr("y", lineY).attr("class", altBkg ? "alt-composit" : "composit").attr("width", width).attr( + "height", + graphBox.height + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.titleShift + 1 + ).attr("rx", "0"); + title.attr("x", startX + pad); + if (titleWidth <= orgWidth) { + title.attr("x", orgX + (width - dblPad) / 2 - titleWidth / 2 + pad); + } + g.insert("rect", ":first-child").attr("x", startX).attr( + "y", + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.titleShift - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + ).attr("width", width).attr("height", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight * 3).attr("rx", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.radius); + g.insert("rect", ":first-child").attr("x", startX).attr( + "y", + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.titleShift - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + ).attr("width", width).attr("height", graphBox.height + 3 + 2 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight).attr("rx", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.radius); + return g; +}; +const drawEndState = (g) => { + g.append("circle").attr("class", "end-state-outer").attr("r", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.miniPadding).attr( + "cx", + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.miniPadding + ).attr( + "cy", + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.miniPadding + ); + return g.append("circle").attr("class", "end-state-inner").attr("r", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit).attr("cx", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit + 2).attr("cy", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit + 2); +}; +const drawForkJoinState = (g, stateDef) => { + let width = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.forkWidth; + let height = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.forkHeight; + if (stateDef.parentId) { + let tmp = width; + width = height; + height = tmp; + } + return g.append("rect").style("stroke", "black").style("fill", "black").attr("width", width).attr("height", height).attr("x", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding); +}; +const _drawLongText = (_text, x, y, g) => { + let textHeight = 0; + const textElem = g.append("text"); + textElem.style("text-anchor", "start"); + textElem.attr("class", "noteText"); + let text = _text.replace(/\r\n/g, "
    "); + text = text.replace(/\n/g, "
    "); + const lines = text.split(_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.e.lineBreakRegex); + let tHeight = 1.25 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.noteMargin; + for (const line2 of lines) { + const txt = line2.trim(); + if (txt.length > 0) { + const span = textElem.append("tspan"); + span.text(txt); + if (tHeight === 0) { + const textBounds = span.node().getBBox(); + tHeight += textBounds.height; + } + textHeight += tHeight; + span.attr("x", x + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.noteMargin); + span.attr("y", y + textHeight + 1.25 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.noteMargin); + } + } + return { textWidth: textElem.node().getBBox().width, textHeight }; +}; +const drawNote = (text, g) => { + g.attr("class", "state-note"); + const note = g.append("rect").attr("x", 0).attr("y", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding); + const rectElem = g.append("g"); + const { textWidth, textHeight } = _drawLongText(text, 0, 0, rectElem); + note.attr("height", textHeight + 2 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.noteMargin); + note.attr("width", textWidth + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.noteMargin * 2); + return note; +}; +const drawState = function(elem, stateDef) { + const id = stateDef.id; + const stateInfo = { + id, + label: stateDef.id, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", id).attr("class", "stateGroup"); + if (stateDef.type === "start") { + drawStartState(g); + } + if (stateDef.type === "end") { + drawEndState(g); + } + if (stateDef.type === "fork" || stateDef.type === "join") { + drawForkJoinState(g, stateDef); + } + if (stateDef.type === "note") { + drawNote(stateDef.note.text, g); + } + if (stateDef.type === "divider") { + drawDivider(g); + } + if (stateDef.type === "default" && stateDef.descriptions.length === 0) { + drawSimpleState(g, stateDef); + } + if (stateDef.type === "default" && stateDef.descriptions.length > 0) { + drawDescrState(g, stateDef); + } + const stateBox = g.node().getBBox(); + stateInfo.width = stateBox.width + 2 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding; + stateInfo.height = stateBox.height + 2 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding; + idCache$1.set(id, stateInfo); + return stateInfo; +}; +let edgeCount = 0; +const drawEdge = function(elem, path, relation) { + const getRelationType = function(type) { + switch (type) { + case _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.AGGREGATION: + return "aggregation"; + case _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.EXTENSION: + return "extension"; + case _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.COMPOSITION: + return "composition"; + case _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.DEPENDENCY: + return "dependency"; + } + }; + path.points = path.points.filter((p) => !Number.isNaN(p.y)); + const lineData = path.points; + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .n8j)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .qrM); + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", "edge" + edgeCount).attr("class", "transition"); + let url = ""; + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + svgPath.attr( + "marker-end", + "url(" + url + "#" + getRelationType(_styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.DEPENDENCY) + "End)" + ); + if (relation.title !== void 0) { + const label = elem.append("g").attr("class", "stateLabel"); + const { x, y } = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.u.calcLabelPosition(path.points); + const rows = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.e.getRows(relation.title); + let titleHeight = 0; + const titleRows = []; + let maxWidth = 0; + let minX = 0; + for (let i = 0; i <= rows.length; i++) { + const title = label.append("text").attr("text-anchor", "middle").text(rows[i]).attr("x", x).attr("y", y + titleHeight); + const boundsTmp = title.node().getBBox(); + maxWidth = Math.max(maxWidth, boundsTmp.width); + minX = Math.min(minX, boundsTmp.x); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.info(boundsTmp.x, x, y + titleHeight); + if (titleHeight === 0) { + const titleBox = title.node().getBBox(); + titleHeight = titleBox.height; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Title height", titleHeight, y); + } + titleRows.push(title); + } + let boxHeight = titleHeight * rows.length; + if (rows.length > 1) { + const heightAdj = (rows.length - 1) * titleHeight * 0.5; + titleRows.forEach((title, i) => title.attr("y", y + i * titleHeight - heightAdj)); + boxHeight = titleHeight * rows.length; + } + const bounds = label.node().getBBox(); + label.insert("rect", ":first-child").attr("class", "box").attr("x", x - maxWidth / 2 - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding / 2).attr("y", y - boxHeight / 2 - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding / 2 - 3.5).attr("width", maxWidth + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("height", boxHeight + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.info(bounds); + } + edgeCount++; +}; +let conf; +const transformationLog = {}; +const setConf = function() { +}; +const insertMarkers = function(elem) { + elem.append("defs").append("marker").attr("id", "dependencyEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); +}; +const draw = function(text, id, _version, diagObj) { + conf = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state; + const securityLevel = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Rendering diagram " + text); + const diagram2 = root.select(`[id='${id}']`); + insertMarkers(diagram2); + const rootDoc = diagObj.db.getRootDoc(); + renderDoc(rootDoc, diagram2, void 0, false, root, doc, diagObj); + const padding = conf.padding; + const bounds = diagram2.node().getBBox(); + const width = bounds.width + padding * 2; + const height = bounds.height + padding * 2; + const svgWidth = width * 1.75; + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.i)(diagram2, height, svgWidth, conf.useMaxWidth); + diagram2.attr( + "viewBox", + `${bounds.x - conf.padding} ${bounds.y - conf.padding} ` + width + " " + height + ); +}; +const getLabelWidth = (text) => { + return text ? text.length * conf.fontSizeFactor : 1; +}; +const renderDoc = (doc, diagram2, parentId, altBkg, root, domDocument, diagObj) => { + const graph = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .T({ + compound: true, + multigraph: true + }); + let i; + let edgeFreeDoc = true; + for (i = 0; i < doc.length; i++) { + if (doc[i].stmt === "relation") { + edgeFreeDoc = false; + break; + } + } + if (parentId) { + graph.setGraph({ + rankdir: "LR", + multigraph: true, + compound: true, + // acyclicer: 'greedy', + ranker: "tight-tree", + ranksep: edgeFreeDoc ? 1 : conf.edgeLengthFactor, + nodeSep: edgeFreeDoc ? 1 : 50, + isMultiGraph: true + // ranksep: 5, + // nodesep: 1 + }); + } else { + graph.setGraph({ + rankdir: "TB", + multigraph: true, + compound: true, + // isCompound: true, + // acyclicer: 'greedy', + // ranker: 'longest-path' + ranksep: edgeFreeDoc ? 1 : conf.edgeLengthFactor, + nodeSep: edgeFreeDoc ? 1 : 50, + ranker: "tight-tree", + // ranker: 'network-simplex' + isMultiGraph: true + }); + } + graph.setDefaultEdgeLabel(function() { + return {}; + }); + diagObj.db.extract(doc); + const states = diagObj.db.getStates(); + const relations = diagObj.db.getRelations(); + const keys2 = Object.keys(states); + for (const key of keys2) { + const stateDef = states[key]; + if (parentId) { + stateDef.parentId = parentId; + } + let node; + if (stateDef.doc) { + let sub = diagram2.append("g").attr("id", stateDef.id).attr("class", "stateGroup"); + node = renderDoc(stateDef.doc, sub, stateDef.id, !altBkg, root, domDocument, diagObj); + { + sub = addTitleAndBox(sub, stateDef, altBkg); + let boxBounds = sub.node().getBBox(); + node.width = boxBounds.width; + node.height = boxBounds.height + conf.padding / 2; + transformationLog[stateDef.id] = { y: conf.compositTitleSize }; + } + } else { + node = drawState(diagram2, stateDef); + } + if (stateDef.note) { + const noteDef = { + descriptions: [], + id: stateDef.id + "-note", + note: stateDef.note, + type: "note" + }; + const note = drawState(diagram2, noteDef); + if (stateDef.note.position === "left of") { + graph.setNode(node.id + "-note", note); + graph.setNode(node.id, node); + } else { + graph.setNode(node.id, node); + graph.setNode(node.id + "-note", note); + } + graph.setParent(node.id, node.id + "-group"); + graph.setParent(node.id + "-note", node.id + "-group"); + } else { + graph.setNode(node.id, node); + } + } + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Count=", graph.nodeCount(), graph); + let cnt = 0; + relations.forEach(function(relation) { + cnt++; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Setting edge", relation); + graph.setEdge( + relation.id1, + relation.id2, + { + relation, + width: getLabelWidth(relation.title), + height: conf.labelHeight * _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.e.getRows(relation.title).length, + labelpos: "c" + }, + "id" + cnt + ); + }); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__/* .layout */ .Zp)(graph); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Graph after layout", graph.nodes()); + const svgElem = diagram2.node(); + graph.nodes().forEach(function(v) { + if (v !== void 0 && graph.node(v) !== void 0) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.warn("Node " + v + ": " + JSON.stringify(graph.node(v))); + root.select("#" + svgElem.id + " #" + v).attr( + "transform", + "translate(" + (graph.node(v).x - graph.node(v).width / 2) + "," + (graph.node(v).y + (transformationLog[v] ? transformationLog[v].y : 0) - graph.node(v).height / 2) + " )" + ); + root.select("#" + svgElem.id + " #" + v).attr("data-x-shift", graph.node(v).x - graph.node(v).width / 2); + const dividers = domDocument.querySelectorAll("#" + svgElem.id + " #" + v + " .divider"); + dividers.forEach((divider) => { + const parent = divider.parentElement; + let pWidth = 0; + let pShift = 0; + if (parent) { + if (parent.parentElement) { + pWidth = parent.parentElement.getBBox().width; + } + pShift = parseInt(parent.getAttribute("data-x-shift"), 10); + if (Number.isNaN(pShift)) { + pShift = 0; + } + } + divider.setAttribute("x1", 0 - pShift + 8); + divider.setAttribute("x2", pWidth - pShift - 8); + }); + } else { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("No Node " + v + ": " + JSON.stringify(graph.node(v))); + } + }); + let stateBox = svgElem.getBBox(); + graph.edges().forEach(function(e) { + if (e !== void 0 && graph.edge(e) !== void 0) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(graph.edge(e))); + drawEdge(diagram2, graph.edge(e), graph.edge(e).relation); + } + }); + stateBox = svgElem.getBBox(); + const stateInfo = { + id: parentId ? parentId : "root", + label: parentId ? parentId : "root", + width: 0, + height: 0 + }; + stateInfo.width = stateBox.width + 2 * conf.padding; + stateInfo.height = stateBox.height + 2 * conf.padding; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Doc rendered", stateInfo, graph); + return stateInfo; +}; +const renderer = { + setConf, + draw +}; +const diagram = { + parser: _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.p, + db: _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.d, + renderer, + styles: _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.s, + init: (cnf) => { + if (!cnf.state) { + cnf.state = {}; + } + cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; + _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.d.clear(); + } +}; + + + +/***/ }), + +/***/ 91245: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ D: () => (/* binding */ DEFAULT_STATE_TYPE), +/* harmony export */ S: () => (/* binding */ STMT_RELATION), +/* harmony export */ a: () => (/* binding */ DIVIDER_TYPE), +/* harmony export */ b: () => (/* binding */ STMT_STATE), +/* harmony export */ c: () => (/* binding */ DEFAULT_NESTED_DOC_DIR), +/* harmony export */ d: () => (/* binding */ db), +/* harmony export */ p: () => (/* binding */ parser$1), +/* harmony export */ s: () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99702); + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 2], $V1 = [1, 3], $V2 = [1, 4], $V3 = [2, 4], $V4 = [1, 9], $V5 = [1, 11], $V6 = [1, 15], $V7 = [1, 16], $V8 = [1, 17], $V9 = [1, 18], $Va = [1, 30], $Vb = [1, 19], $Vc = [1, 20], $Vd = [1, 21], $Ve = [1, 22], $Vf = [1, 23], $Vg = [1, 25], $Vh = [1, 26], $Vi = [1, 27], $Vj = [1, 28], $Vk = [1, 29], $Vl = [1, 32], $Vm = [1, 33], $Vn = [1, 34], $Vo = [1, 35], $Vp = [1, 31], $Vq = [1, 4, 5, 15, 16, 18, 20, 21, 23, 24, 25, 26, 27, 28, 32, 34, 36, 37, 41, 44, 45, 46, 47, 50], $Vr = [1, 4, 5, 13, 14, 15, 16, 18, 20, 21, 23, 24, 25, 26, 27, 28, 32, 34, 36, 37, 41, 44, 45, 46, 47, 50], $Vs = [4, 5, 15, 16, 18, 20, 21, 23, 24, 25, 26, 27, 28, 32, 34, 36, 37, 41, 44, 45, 46, 47, 50]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "SPACE": 4, "NL": 5, "SD": 6, "document": 7, "line": 8, "statement": 9, "classDefStatement": 10, "cssClassStatement": 11, "idStatement": 12, "DESCR": 13, "-->": 14, "HIDE_EMPTY": 15, "scale": 16, "WIDTH": 17, "COMPOSIT_STATE": 18, "STRUCT_START": 19, "STRUCT_STOP": 20, "STATE_DESCR": 21, "AS": 22, "ID": 23, "FORK": 24, "JOIN": 25, "CHOICE": 26, "CONCURRENT": 27, "note": 28, "notePosition": 29, "NOTE_TEXT": 30, "direction": 31, "acc_title": 32, "acc_title_value": 33, "acc_descr": 34, "acc_descr_value": 35, "acc_descr_multiline_value": 36, "classDef": 37, "CLASSDEF_ID": 38, "CLASSDEF_STYLEOPTS": 39, "DEFAULT": 40, "class": 41, "CLASSENTITY_IDS": 42, "STYLECLASS": 43, "direction_tb": 44, "direction_bt": 45, "direction_rl": 46, "direction_lr": 47, "eol": 48, ";": 49, "EDGE_STATE": 50, "STYLE_SEPARATOR": 51, "left_of": 52, "right_of": 53, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "SPACE", 5: "NL", 6: "SD", 13: "DESCR", 14: "-->", 15: "HIDE_EMPTY", 16: "scale", 17: "WIDTH", 18: "COMPOSIT_STATE", 19: "STRUCT_START", 20: "STRUCT_STOP", 21: "STATE_DESCR", 22: "AS", 23: "ID", 24: "FORK", 25: "JOIN", 26: "CHOICE", 27: "CONCURRENT", 28: "note", 30: "NOTE_TEXT", 32: "acc_title", 33: "acc_title_value", 34: "acc_descr", 35: "acc_descr_value", 36: "acc_descr_multiline_value", 37: "classDef", 38: "CLASSDEF_ID", 39: "CLASSDEF_STYLEOPTS", 40: "DEFAULT", 41: "class", 42: "CLASSENTITY_IDS", 43: "STYLECLASS", 44: "direction_tb", 45: "direction_bt", 46: "direction_rl", 47: "direction_lr", 49: ";", 50: "EDGE_STATE", 51: "STYLE_SEPARATOR", 52: "left_of", 53: "right_of" }, + productions_: [0, [3, 2], [3, 2], [3, 2], [7, 0], [7, 2], [8, 2], [8, 1], [8, 1], [9, 1], [9, 1], [9, 1], [9, 2], [9, 3], [9, 4], [9, 1], [9, 2], [9, 1], [9, 4], [9, 3], [9, 6], [9, 1], [9, 1], [9, 1], [9, 1], [9, 4], [9, 4], [9, 1], [9, 2], [9, 2], [9, 1], [10, 3], [10, 3], [11, 3], [31, 1], [31, 1], [31, 1], [31, 1], [48, 1], [48, 1], [12, 1], [12, 1], [12, 3], [12, 3], [29, 1], [29, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 3: + yy.setRootDoc($$[$0]); + return $$[$0]; + case 4: + this.$ = []; + break; + case 5: + if ($$[$0] != "nl") { + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + } + break; + case 6: + case 7: + this.$ = $$[$0]; + break; + case 8: + this.$ = "nl"; + break; + case 11: + this.$ = $$[$0]; + break; + case 12: + const stateStmt = $$[$0 - 1]; + stateStmt.description = yy.trimColon($$[$0]); + this.$ = stateStmt; + break; + case 13: + this.$ = { stmt: "relation", state1: $$[$0 - 2], state2: $$[$0] }; + break; + case 14: + const relDescription = yy.trimColon($$[$0]); + this.$ = { stmt: "relation", state1: $$[$0 - 3], state2: $$[$0 - 1], description: relDescription }; + break; + case 18: + this.$ = { stmt: "state", id: $$[$0 - 3], type: "default", description: "", doc: $$[$0 - 1] }; + break; + case 19: + var id = $$[$0]; + var description = $$[$0 - 2].trim(); + if ($$[$0].match(":")) { + var parts = $$[$0].split(":"); + id = parts[0]; + description = [description, parts[1]]; + } + this.$ = { stmt: "state", id, type: "default", description }; + break; + case 20: + this.$ = { stmt: "state", id: $$[$0 - 3], type: "default", description: $$[$0 - 5], doc: $$[$0 - 1] }; + break; + case 21: + this.$ = { stmt: "state", id: $$[$0], type: "fork" }; + break; + case 22: + this.$ = { stmt: "state", id: $$[$0], type: "join" }; + break; + case 23: + this.$ = { stmt: "state", id: $$[$0], type: "choice" }; + break; + case 24: + this.$ = { stmt: "state", id: yy.getDividerId(), type: "divider" }; + break; + case 25: + this.$ = { stmt: "state", id: $$[$0 - 1].trim(), note: { position: $$[$0 - 2].trim(), text: $$[$0].trim() } }; + break; + case 28: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 29: + case 30: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 31: + case 32: + this.$ = { stmt: "classDef", id: $$[$0 - 1].trim(), classes: $$[$0].trim() }; + break; + case 33: + this.$ = { stmt: "applyClass", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() }; + break; + case 34: + yy.setDirection("TB"); + this.$ = { stmt: "dir", value: "TB" }; + break; + case 35: + yy.setDirection("BT"); + this.$ = { stmt: "dir", value: "BT" }; + break; + case 36: + yy.setDirection("RL"); + this.$ = { stmt: "dir", value: "RL" }; + break; + case 37: + yy.setDirection("LR"); + this.$ = { stmt: "dir", value: "LR" }; + break; + case 40: + case 41: + this.$ = { stmt: "state", id: $$[$0].trim(), type: "default", description: "" }; + break; + case 42: + this.$ = { stmt: "state", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: "default", description: "" }; + break; + case 43: + this.$ = { stmt: "state", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: "default", description: "" }; + break; + } + }, + table: [{ 3: 1, 4: $V0, 5: $V1, 6: $V2 }, { 1: [3] }, { 3: 5, 4: $V0, 5: $V1, 6: $V2 }, { 3: 6, 4: $V0, 5: $V1, 6: $V2 }, o([1, 4, 5, 15, 16, 18, 21, 23, 24, 25, 26, 27, 28, 32, 34, 36, 37, 41, 44, 45, 46, 47, 50], $V3, { 7: 7 }), { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3], 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 15: $V6, 16: $V7, 18: $V8, 21: $V9, 23: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 31: 24, 32: $Vg, 34: $Vh, 36: $Vi, 37: $Vj, 41: $Vk, 44: $Vl, 45: $Vm, 46: $Vn, 47: $Vo, 50: $Vp }, o($Vq, [2, 5]), { 9: 36, 10: 12, 11: 13, 12: 14, 15: $V6, 16: $V7, 18: $V8, 21: $V9, 23: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 31: 24, 32: $Vg, 34: $Vh, 36: $Vi, 37: $Vj, 41: $Vk, 44: $Vl, 45: $Vm, 46: $Vn, 47: $Vo, 50: $Vp }, o($Vq, [2, 7]), o($Vq, [2, 8]), o($Vq, [2, 9]), o($Vq, [2, 10]), o($Vq, [2, 11], { 13: [1, 37], 14: [1, 38] }), o($Vq, [2, 15]), { 17: [1, 39] }, o($Vq, [2, 17], { 19: [1, 40] }), { 22: [1, 41] }, o($Vq, [2, 21]), o($Vq, [2, 22]), o($Vq, [2, 23]), o($Vq, [2, 24]), { 29: 42, 30: [1, 43], 52: [1, 44], 53: [1, 45] }, o($Vq, [2, 27]), { 33: [1, 46] }, { 35: [1, 47] }, o($Vq, [2, 30]), { 38: [1, 48], 40: [1, 49] }, { 42: [1, 50] }, o($Vr, [2, 40], { 51: [1, 51] }), o($Vr, [2, 41], { 51: [1, 52] }), o($Vq, [2, 34]), o($Vq, [2, 35]), o($Vq, [2, 36]), o($Vq, [2, 37]), o($Vq, [2, 6]), o($Vq, [2, 12]), { 12: 53, 23: $Va, 50: $Vp }, o($Vq, [2, 16]), o($Vs, $V3, { 7: 54 }), { 23: [1, 55] }, { 23: [1, 56] }, { 22: [1, 57] }, { 23: [2, 44] }, { 23: [2, 45] }, o($Vq, [2, 28]), o($Vq, [2, 29]), { 39: [1, 58] }, { 39: [1, 59] }, { 43: [1, 60] }, { 23: [1, 61] }, { 23: [1, 62] }, o($Vq, [2, 13], { 13: [1, 63] }), { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 15: $V6, 16: $V7, 18: $V8, 20: [1, 64], 21: $V9, 23: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 31: 24, 32: $Vg, 34: $Vh, 36: $Vi, 37: $Vj, 41: $Vk, 44: $Vl, 45: $Vm, 46: $Vn, 47: $Vo, 50: $Vp }, o($Vq, [2, 19], { 19: [1, 65] }), { 30: [1, 66] }, { 23: [1, 67] }, o($Vq, [2, 31]), o($Vq, [2, 32]), o($Vq, [2, 33]), o($Vr, [2, 42]), o($Vr, [2, 43]), o($Vq, [2, 14]), o($Vq, [2, 18]), o($Vs, $V3, { 7: 68 }), o($Vq, [2, 25]), o($Vq, [2, 26]), { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 15: $V6, 16: $V7, 18: $V8, 20: [1, 69], 21: $V9, 23: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 31: 24, 32: $Vg, 34: $Vh, 36: $Vi, 37: $Vj, 41: $Vk, 44: $Vl, 45: $Vm, 46: $Vn, 47: $Vo, 50: $Vp }, o($Vq, [2, 20])], + defaultActions: { 5: [2, 1], 6: [2, 2], 44: [2, 44], 45: [2, 45] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + return 40; + case 1: + return 44; + case 2: + return 45; + case 3: + return 46; + case 4: + return 47; + case 5: + break; + case 6: + break; + case 7: + return 5; + case 8: + break; + case 9: + break; + case 10: + break; + case 11: + break; + case 12: + this.pushState("SCALE"); + return 16; + case 13: + return 17; + case 14: + this.popState(); + break; + case 15: + this.begin("acc_title"); + return 32; + case 16: + this.popState(); + return "acc_title_value"; + case 17: + this.begin("acc_descr"); + return 34; + case 18: + this.popState(); + return "acc_descr_value"; + case 19: + this.begin("acc_descr_multiline"); + break; + case 20: + this.popState(); + break; + case 21: + return "acc_descr_multiline_value"; + case 22: + this.pushState("CLASSDEF"); + return 37; + case 23: + this.popState(); + this.pushState("CLASSDEFID"); + return "DEFAULT_CLASSDEF_ID"; + case 24: + this.popState(); + this.pushState("CLASSDEFID"); + return 38; + case 25: + this.popState(); + return 39; + case 26: + this.pushState("CLASS"); + return 41; + case 27: + this.popState(); + this.pushState("CLASS_STYLE"); + return 42; + case 28: + this.popState(); + return 43; + case 29: + this.pushState("SCALE"); + return 16; + case 30: + return 17; + case 31: + this.popState(); + break; + case 32: + this.pushState("STATE"); + break; + case 33: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 24; + case 34: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 25; + case 35: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -10).trim(); + return 26; + case 36: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 24; + case 37: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 25; + case 38: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -10).trim(); + return 26; + case 39: + return 44; + case 40: + return 45; + case 41: + return 46; + case 42: + return 47; + case 43: + this.pushState("STATE_STRING"); + break; + case 44: + this.pushState("STATE_ID"); + return "AS"; + case 45: + this.popState(); + return "ID"; + case 46: + this.popState(); + break; + case 47: + return "STATE_DESCR"; + case 48: + return 18; + case 49: + this.popState(); + break; + case 50: + this.popState(); + this.pushState("struct"); + return 19; + case 51: + break; + case 52: + this.popState(); + return 20; + case 53: + break; + case 54: + this.begin("NOTE"); + return 28; + case 55: + this.popState(); + this.pushState("NOTE_ID"); + return 52; + case 56: + this.popState(); + this.pushState("NOTE_ID"); + return 53; + case 57: + this.popState(); + this.pushState("FLOATING_NOTE"); + break; + case 58: + this.popState(); + this.pushState("FLOATING_NOTE_ID"); + return "AS"; + case 59: + break; + case 60: + return "NOTE_TEXT"; + case 61: + this.popState(); + return "ID"; + case 62: + this.popState(); + this.pushState("NOTE_TEXT"); + return 23; + case 63: + this.popState(); + yy_.yytext = yy_.yytext.substr(2).trim(); + return 30; + case 64: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 30; + case 65: + return 6; + case 66: + return 6; + case 67: + return 15; + case 68: + return 50; + case 69: + return 23; + case 70: + yy_.yytext = yy_.yytext.trim(); + return 13; + case 71: + return 14; + case 72: + return 27; + case 73: + return 51; + case 74: + return 5; + case 75: + return "INVALID"; + } + }, + rules: [/^(?:default\b)/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:[\s]+)/i, /^(?:((?!\n)\s)+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:scale\s+)/i, /^(?:\d+)/i, /^(?:\s+width\b)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:classDef\s+)/i, /^(?:DEFAULT\s+)/i, /^(?:\w+\s+)/i, /^(?:[^\n]*)/i, /^(?:class\s+)/i, /^(?:(\w+)+((,\s*\w+)*))/i, /^(?:[^\n]*)/i, /^(?:scale\s+)/i, /^(?:\d+)/i, /^(?:\s+width\b)/i, /^(?:state\s+)/i, /^(?:.*<>)/i, /^(?:.*<>)/i, /^(?:.*<>)/i, /^(?:.*\[\[fork\]\])/i, /^(?:.*\[\[join\]\])/i, /^(?:.*\[\[choice\]\])/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:["])/i, /^(?:\s*as\s+)/i, /^(?:[^\n\{]*)/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[^\n\s\{]+)/i, /^(?:\n)/i, /^(?:\{)/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:\})/i, /^(?:[\n])/i, /^(?:note\s+)/i, /^(?:left of\b)/i, /^(?:right of\b)/i, /^(?:")/i, /^(?:\s*as\s*)/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[^\n]*)/i, /^(?:\s*[^:\n\s\-]+)/i, /^(?:\s*:[^:\n;]+)/i, /^(?:[\s\S]*?end note\b)/i, /^(?:stateDiagram\s+)/i, /^(?:stateDiagram-v2\s+)/i, /^(?:hide empty description\b)/i, /^(?:\[\*\])/i, /^(?:[^:\n\s\-\{]+)/i, /^(?:\s*:[^:\n;]+)/i, /^(?:-->)/i, /^(?:--)/i, /^(?::::)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "LINE": { "rules": [9, 10], "inclusive": false }, "struct": { "rules": [9, 10, 22, 26, 32, 39, 40, 41, 42, 51, 52, 53, 54, 68, 69, 70, 71, 72], "inclusive": false }, "FLOATING_NOTE_ID": { "rules": [61], "inclusive": false }, "FLOATING_NOTE": { "rules": [58, 59, 60], "inclusive": false }, "NOTE_TEXT": { "rules": [63, 64], "inclusive": false }, "NOTE_ID": { "rules": [62], "inclusive": false }, "NOTE": { "rules": [55, 56, 57], "inclusive": false }, "CLASS_STYLE": { "rules": [28], "inclusive": false }, "CLASS": { "rules": [27], "inclusive": false }, "CLASSDEFID": { "rules": [25], "inclusive": false }, "CLASSDEF": { "rules": [23, 24], "inclusive": false }, "acc_descr_multiline": { "rules": [20, 21], "inclusive": false }, "acc_descr": { "rules": [18], "inclusive": false }, "acc_title": { "rules": [16], "inclusive": false }, "SCALE": { "rules": [13, 14, 30, 31], "inclusive": false }, "ALIAS": { "rules": [], "inclusive": false }, "STATE_ID": { "rules": [45], "inclusive": false }, "STATE_STRING": { "rules": [46, 47], "inclusive": false }, "FORK_STATE": { "rules": [], "inclusive": false }, "STATE": { "rules": [9, 10, 33, 34, 35, 36, 37, 38, 43, 44, 48, 49, 50], "inclusive": false }, "ID": { "rules": [9, 10], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 15, 17, 19, 22, 26, 29, 32, 50, 54, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const DEFAULT_DIAGRAM_DIRECTION = "LR"; +const DEFAULT_NESTED_DOC_DIR = "TB"; +const STMT_STATE = "state"; +const STMT_RELATION = "relation"; +const STMT_CLASSDEF = "classDef"; +const STMT_APPLYCLASS = "applyClass"; +const DEFAULT_STATE_TYPE = "default"; +const DIVIDER_TYPE = "divider"; +const START_NODE = "[*]"; +const START_TYPE = "start"; +const END_NODE = START_NODE; +const END_TYPE = "end"; +const COLOR_KEYWORD = "color"; +const FILL_KEYWORD = "fill"; +const BG_FILL = "bgFill"; +const STYLECLASS_SEP = ","; +function newClassesList() { + return {}; +} +let direction = DEFAULT_DIAGRAM_DIRECTION; +let rootDoc = []; +let classes = newClassesList(); +const newDoc = () => { + return { + relations: [], + states: {}, + documents: {} + }; +}; +let documents = { + root: newDoc() +}; +let currentDocument = documents.root; +let startEndCount = 0; +let dividerCnt = 0; +const lineType = { + LINE: 0, + DOTTED_LINE: 1 +}; +const relationType = { + AGGREGATION: 0, + EXTENSION: 1, + COMPOSITION: 2, + DEPENDENCY: 3 +}; +const clone = (o) => JSON.parse(JSON.stringify(o)); +const setRootDoc = (o) => { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting root doc", o); + rootDoc = o; +}; +const getRootDoc = () => rootDoc; +const docTranslator = (parent, node, first) => { + if (node.stmt === STMT_RELATION) { + docTranslator(parent, node.state1, true); + docTranslator(parent, node.state2, false); + } else { + if (node.stmt === STMT_STATE) { + if (node.id === "[*]") { + node.id = first ? parent.id + "_start" : parent.id + "_end"; + node.start = first; + } else { + node.id = node.id.trim(); + } + } + if (node.doc) { + const doc = []; + let currentDoc = []; + let i; + for (i = 0; i < node.doc.length; i++) { + if (node.doc[i].type === DIVIDER_TYPE) { + const newNode = clone(node.doc[i]); + newNode.doc = clone(currentDoc); + doc.push(newNode); + currentDoc = []; + } else { + currentDoc.push(node.doc[i]); + } + } + if (doc.length > 0 && currentDoc.length > 0) { + const newNode = { + stmt: STMT_STATE, + id: (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.I)(), + type: "divider", + doc: clone(currentDoc) + }; + doc.push(clone(newNode)); + node.doc = doc; + } + node.doc.forEach((docNode) => docTranslator(node, docNode, true)); + } + } +}; +const getRootDocV2 = () => { + docTranslator({ id: "root" }, { id: "root", doc: rootDoc }, true); + return { id: "root", doc: rootDoc }; +}; +const extract = (_doc) => { + let doc; + if (_doc.doc) { + doc = _doc.doc; + } else { + doc = _doc; + } + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info(doc); + clear(true); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Extract", doc); + doc.forEach((item) => { + switch (item.stmt) { + case STMT_STATE: + addState( + item.id.trim(), + item.type, + item.doc, + item.description, + item.note, + item.classes, + item.styles, + item.textStyles + ); + break; + case STMT_RELATION: + addRelation(item.state1, item.state2, item.description); + break; + case STMT_CLASSDEF: + addStyleClass(item.id.trim(), item.classes); + break; + case STMT_APPLYCLASS: + setCssClass(item.id.trim(), item.styleClass); + break; + } + }); +}; +const addState = function(id, type = DEFAULT_STATE_TYPE, doc = null, descr = null, note = null, classes2 = null, styles2 = null, textStyles = null) { + const trimmedId = id == null ? void 0 : id.trim(); + if (currentDocument.states[trimmedId] === void 0) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Adding state ", trimmedId, descr); + currentDocument.states[trimmedId] = { + id: trimmedId, + descriptions: [], + type, + doc, + note, + classes: [], + styles: [], + textStyles: [] + }; + } else { + if (!currentDocument.states[trimmedId].doc) { + currentDocument.states[trimmedId].doc = doc; + } + if (!currentDocument.states[trimmedId].type) { + currentDocument.states[trimmedId].type = type; + } + } + if (descr) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state description", trimmedId, descr); + if (typeof descr === "string") { + addDescription(trimmedId, descr.trim()); + } + if (typeof descr === "object") { + descr.forEach((des) => addDescription(trimmedId, des.trim())); + } + } + if (note) { + currentDocument.states[trimmedId].note = note; + currentDocument.states[trimmedId].note.text = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText( + currentDocument.states[trimmedId].note.text, + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.c)() + ); + } + if (classes2) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state classes", trimmedId, classes2); + const classesList = typeof classes2 === "string" ? [classes2] : classes2; + classesList.forEach((cssClass) => setCssClass(trimmedId, cssClass.trim())); + } + if (styles2) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state styles", trimmedId, styles2); + const stylesList = typeof styles2 === "string" ? [styles2] : styles2; + stylesList.forEach((style) => setStyle(trimmedId, style.trim())); + } + if (textStyles) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state styles", trimmedId, styles2); + const textStylesList = typeof textStyles === "string" ? [textStyles] : textStyles; + textStylesList.forEach((textStyle) => setTextStyle(trimmedId, textStyle.trim())); + } +}; +const clear = function(saveCommon) { + documents = { + root: newDoc() + }; + currentDocument = documents.root; + startEndCount = 0; + classes = newClassesList(); + if (!saveCommon) { + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.v)(); + } +}; +const getState = function(id) { + return currentDocument.states[id]; +}; +const getStates = function() { + return currentDocument.states; +}; +const logDocuments = function() { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Documents = ", documents); +}; +const getRelations = function() { + return currentDocument.relations; +}; +function startIdIfNeeded(id = "") { + let fixedId = id; + if (id === START_NODE) { + startEndCount++; + fixedId = `${START_TYPE}${startEndCount}`; + } + return fixedId; +} +function startTypeIfNeeded(id = "", type = DEFAULT_STATE_TYPE) { + return id === START_NODE ? START_TYPE : type; +} +function endIdIfNeeded(id = "") { + let fixedId = id; + if (id === END_NODE) { + startEndCount++; + fixedId = `${END_TYPE}${startEndCount}`; + } + return fixedId; +} +function endTypeIfNeeded(id = "", type = DEFAULT_STATE_TYPE) { + return id === END_NODE ? END_TYPE : type; +} +function addRelationObjs(item1, item2, relationTitle) { + let id1 = startIdIfNeeded(item1.id.trim()); + let type1 = startTypeIfNeeded(item1.id.trim(), item1.type); + let id2 = startIdIfNeeded(item2.id.trim()); + let type2 = startTypeIfNeeded(item2.id.trim(), item2.type); + addState( + id1, + type1, + item1.doc, + item1.description, + item1.note, + item1.classes, + item1.styles, + item1.textStyles + ); + addState( + id2, + type2, + item2.doc, + item2.description, + item2.note, + item2.classes, + item2.styles, + item2.textStyles + ); + currentDocument.relations.push({ + id1, + id2, + relationTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(relationTitle, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.c)()) + }); +} +const addRelation = function(item1, item2, title) { + if (typeof item1 === "object") { + addRelationObjs(item1, item2, title); + } else { + const id1 = startIdIfNeeded(item1.trim()); + const type1 = startTypeIfNeeded(item1); + const id2 = endIdIfNeeded(item2.trim()); + const type2 = endTypeIfNeeded(item2); + addState(id1, type1); + addState(id2, type2); + currentDocument.relations.push({ + id1, + id2, + title: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(title, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.c)()) + }); + } +}; +const addDescription = function(id, descr) { + const theState = currentDocument.states[id]; + const _descr = descr.startsWith(":") ? descr.replace(":", "").trim() : descr; + theState.descriptions.push(_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(_descr, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.c)())); +}; +const cleanupLabel = function(label) { + if (label.substring(0, 1) === ":") { + return label.substr(2).trim(); + } else { + return label.trim(); + } +}; +const getDividerId = () => { + dividerCnt++; + return "divider-id-" + dividerCnt; +}; +const addStyleClass = function(id, styleAttributes = "") { + if (classes[id] === void 0) { + classes[id] = { id, styles: [], textStyles: [] }; + } + const foundClass = classes[id]; + if (styleAttributes !== void 0 && styleAttributes !== null) { + styleAttributes.split(STYLECLASS_SEP).forEach((attrib) => { + const fixedAttrib = attrib.replace(/([^;]*);/, "$1").trim(); + if (attrib.match(COLOR_KEYWORD)) { + const newStyle1 = fixedAttrib.replace(FILL_KEYWORD, BG_FILL); + const newStyle2 = newStyle1.replace(COLOR_KEYWORD, FILL_KEYWORD); + foundClass.textStyles.push(newStyle2); + } + foundClass.styles.push(fixedAttrib); + }); + } +}; +const getClasses = function() { + return classes; +}; +const setCssClass = function(itemIds, cssClassName) { + itemIds.split(",").forEach(function(id) { + let foundState = getState(id); + if (foundState === void 0) { + const trimmedId = id.trim(); + addState(trimmedId); + foundState = getState(trimmedId); + } + foundState.classes.push(cssClassName); + }); +}; +const setStyle = function(itemId, styleText) { + const item = getState(itemId); + if (item !== void 0) { + item.textStyles.push(styleText); + } +}; +const setTextStyle = function(itemId, cssClassName) { + const item = getState(itemId); + if (item !== void 0) { + item.textStyles.push(cssClassName); + } +}; +const getDirection = () => direction; +const setDirection = (dir) => { + direction = dir; +}; +const trimColon = (str) => str && str[0] === ":" ? str.substr(1).trim() : str.trim(); +const db = { + getConfig: () => (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.c)().state, + addState, + clear, + getState, + getStates, + getRelations, + getClasses, + getDirection, + addRelation, + getDividerId, + setDirection, + cleanupLabel, + lineType, + relationType, + logDocuments, + getRootDoc, + setRootDoc, + getRootDocV2, + extract, + trimColon, + getAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.g, + setAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.s, + getAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.a, + setAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.b, + addStyleClass, + setCssClass, + addDescription, + setDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.q, + getDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.t +}; +const getStyles = (options) => ` +defs #statediagram-barbEnd { + fill: ${options.transitionColor}; + stroke: ${options.transitionColor}; + } +g.stateGroup text { + fill: ${options.nodeBorder}; + stroke: none; + font-size: 10px; +} +g.stateGroup text { + fill: ${options.textColor}; + stroke: none; + font-size: 10px; + +} +g.stateGroup .state-title { + font-weight: bolder; + fill: ${options.stateLabelColor}; +} + +g.stateGroup rect { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; +} + +g.stateGroup line { + stroke: ${options.lineColor}; + stroke-width: 1; +} + +.transition { + stroke: ${options.transitionColor}; + stroke-width: 1; + fill: none; +} + +.stateGroup .composit { + fill: ${options.background}; + border-bottom: 1px +} + +.stateGroup .alt-composit { + fill: #e0e0e0; + border-bottom: 1px +} + +.state-note { + stroke: ${options.noteBorderColor}; + fill: ${options.noteBkgColor}; + + text { + fill: ${options.noteTextColor}; + stroke: none; + font-size: 10px; + } +} + +.stateLabel .box { + stroke: none; + stroke-width: 0; + fill: ${options.mainBkg}; + opacity: 0.5; +} + +.edgeLabel .label rect { + fill: ${options.labelBackgroundColor}; + opacity: 0.5; +} +.edgeLabel .label text { + fill: ${options.transitionLabelColor || options.tertiaryTextColor}; +} +.label div .edgeLabel { + color: ${options.transitionLabelColor || options.tertiaryTextColor}; +} + +.stateLabel text { + fill: ${options.stateLabelColor}; + font-size: 10px; + font-weight: bold; +} + +.node circle.state-start { + fill: ${options.specialStateColor}; + stroke: ${options.specialStateColor}; +} + +.node .fork-join { + fill: ${options.specialStateColor}; + stroke: ${options.specialStateColor}; +} + +.node circle.state-end { + fill: ${options.innerEndBackground}; + stroke: ${options.background}; + stroke-width: 1.5 +} +.end-state-inner { + fill: ${options.compositeBackground || options.background}; + // stroke: ${options.background}; + stroke-width: 1.5 +} + +.node rect { + fill: ${options.stateBkg || options.mainBkg}; + stroke: ${options.stateBorder || options.nodeBorder}; + stroke-width: 1px; +} +.node polygon { + fill: ${options.mainBkg}; + stroke: ${options.stateBorder || options.nodeBorder};; + stroke-width: 1px; +} +#statediagram-barbEnd { + fill: ${options.lineColor}; +} + +.statediagram-cluster rect { + fill: ${options.compositeTitleBackground}; + stroke: ${options.stateBorder || options.nodeBorder}; + stroke-width: 1px; +} + +.cluster-label, .nodeLabel { + color: ${options.stateLabelColor}; +} + +.statediagram-cluster rect.outer { + rx: 5px; + ry: 5px; +} +.statediagram-state .divider { + stroke: ${options.stateBorder || options.nodeBorder}; +} + +.statediagram-state .title-state { + rx: 5px; + ry: 5px; +} +.statediagram-cluster.statediagram-cluster .inner { + fill: ${options.compositeBackground || options.background}; +} +.statediagram-cluster.statediagram-cluster-alt .inner { + fill: ${options.altBackground ? options.altBackground : "#efefef"}; +} + +.statediagram-cluster .inner { + rx:0; + ry:0; +} + +.statediagram-state rect.basic { + rx: 5px; + ry: 5px; +} +.statediagram-state rect.divider { + stroke-dasharray: 10,10; + fill: ${options.altBackground ? options.altBackground : "#efefef"}; +} + +.note-edge { + stroke-dasharray: 5; +} + +.statediagram-note rect { + fill: ${options.noteBkgColor}; + stroke: ${options.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} +.statediagram-note rect { + fill: ${options.noteBkgColor}; + stroke: ${options.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} + +.statediagram-note text { + fill: ${options.noteTextColor}; +} + +.statediagram-note .nodeLabel { + color: ${options.noteTextColor}; +} +.statediagram .edgeLabel { + color: red; // ${options.noteTextColor}; +} + +#dependencyStart, #dependencyEnd { + fill: ${options.lineColor}; + stroke: ${options.lineColor}; + stroke-width: 1; +} + +.statediagramTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; +} +`; +const styles = getStyles; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/33498b04.3c79c15f.js b/assets/js/33498b04.3c79c15f.js new file mode 100644 index 0000000000..09ab815e64 --- /dev/null +++ b/assets/js/33498b04.3c79c15f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5458],{98071:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>c,frontMatter:()=>i,metadata:()=>a,toc:()=>m});var r=s(74848),o=s(28453);const i={title:"Simplified variable speed compressor train",sidebar_position:2},t=void 0,a={id:"about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",title:"Simplified variable speed compressor train",description:"The simplified variable speed compressor train model is a model of a compressor train where the inter stage pressures",source:"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model.md",sourceDirName:"about/modelling/setup/models/compressor_modelling/compressor_models_types",slug:"/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Simplified variable speed compressor train",sidebar_position:2},sidebar:"about",previous:{title:"Single speed compressor train",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model"},next:{title:"Variable speed compressor train",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model"}},d={},m=[{value:"Format",id:"format",level:2},{value:"Simplified compressor train model with known compressor stages",id:"simplified-compressor-train-model-with-known-compressor-stages",level:3},{value:"Simplified compressor train model with unknown number of compressor stages",id:"simplified-compressor-train-model-with-unknown-number-of-compressor-stages",level:3},{value:"Examples",id:"examples",level:2},{value:"A (single) compressor with a user-defined variable speed compressor chart and fluid composition",id:"a-single-compressor-with-a-user-defined-variable-speed-compressor-chart-and-fluid-composition",level:3},{value:"A (single) turbine driven compressor with a generic compressor chart with design point and predefined composition",id:"a-single-turbine-driven-compressor-with-a-generic-compressor-chart-with-design-point-and-predefined-composition",level:3},{value:"A compressor train with two stages where the first stage has unknown spec while the second has a predefined chart",id:"a-compressor-train-with-two-stages-where-the-first-stage-has-unknown-spec-while-the-second-has-a-predefined-chart",level:3},{value:"A compressor train where the number of stages are unknown",id:"a-compressor-train-where-the-number-of-stages-are-unknown",level:3}];function l(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.p,{children:"The simplified variable speed compressor train model is a model of a compressor train where the inter stage pressures\nare assumed based on an assumption of equal pressure fractions for each stage. Based on this, the compressor work is\ncalculated independently for each compressor as if it was a standalone compressor, neglecting that they are in fact on\nthe same shaft and thus have a common speed."}),"\n",(0,r.jsxs)(n.p,{children:["This model supports both ",(0,r.jsx)(n.code,{children:"user defined compressor charts"})," and\n",(0,r.jsx)(n.code,{children:"generic compressor charts"}),". See ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",children:"compressor charts"})," for more information."]}),"\n",(0,r.jsxs)(n.p,{children:["In addition, a ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/fluid_model",children:"FLUID MODEL"})," must be specified."]}),"\n",(0,r.jsx)(n.p,{children:"The model comes in two versions, one where the compressor stages are known (pre defined), and one where the compressor\nstages are calculated at run-time based on input data."}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: \n POWER_ADJUSTMENT_CONSTANT: \n MAXIMUM_POWER: \n CALCULATE_MAX_RATE: \n"})}),"\n",(0,r.jsx)(n.h3,{id:"simplified-compressor-train-model-with-known-compressor-stages",children:"Simplified compressor train model with known compressor stages"}),"\n",(0,r.jsx)(n.p,{children:"When the compressor stages are known, each stage is defined with a compressor chart and an inlet temperature:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: \n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: \n COMPRESSOR_CHART: \n - INLET_TEMPERATURE: \n COMPRESSOR_CHART: \n - ... and so forth for each stage in the train\n POWER_ADJUSTMENT_CONSTANT: \n MAXIMUM_POWER: \n"})}),"\n",(0,r.jsx)(n.h3,{id:"simplified-compressor-train-model-with-unknown-number-of-compressor-stages",children:"Simplified compressor train model with unknown number of compressor stages"}),"\n",(0,r.jsx)(n.p,{children:"When the number of compressor stages are not known, one may specify the maximum pressure ratio per stage.\nWhen the maximum pressure ratio is set, the number of compressors will be determined at run time (based on input data)\nsuch that the number of compressors is large enough to ensure no pressure ratios are above a given maximum pressure\nratio per stage, but not larger."}),"\n",(0,r.jsx)(n.p,{children:"This model is intended for (but not limited to) the use of a generic compressor chart. Especially one can test with the\ngeneric compressor chart which are adjusted at run time (based on input data), for example to explore future\nrebuilds/designs where no specifications/data is yet available from vendors et.c."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: \n COMPRESSOR_TRAIN:\n MAXIMUM_PRESSURE_RATIO_PER_STAGE: \n COMPRESSOR_CHART: \n INLET_TEMPERATURE: \n POWER_ADJUSTMENT_CONSTANT: \n"})}),"\n",(0,r.jsx)(n.h2,{id:"examples",children:"Examples"}),"\n",(0,r.jsx)(n.h3,{id:"a-single-compressor-with-a-user-defined-variable-speed-compressor-chart-and-fluid-composition",children:"A (single) compressor with a user-defined variable speed compressor chart and fluid composition"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: FRACTION\n CURVES:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n - SPEED: 10767\n RATE: [4052, 4500, 4999, 5492, 6000, 6439,]\n HEAD: [16447, 16081, 15546, 14640, 13454, 11973,]\n EFFICIENCY: [0.72, 0.73, 0.74, 0.74, 0.72, 0.70]\n\n - NAME: fluid_model_1\n TYPE: FLUID\n FLUID_MODEL_TYPE: COMPOSITION\n EOS_MODEL: SRK\n COMPOSITION:\n nitrogen: 0.74373\n CO2: 2.415619\n methane: 85.60145\n ethane: 6.707826\n propane: 2.611471\n i_butane: 0.45077\n n_butane: 0.691702\n i_pentane: 0.210714\n n_pentane: 0.197937\n n_hexane: 0.368786\n\n - NAME: simplified_compressor_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: fluid_model_1\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: predefined_variable_speed_compressor_chart\n"})}),"\n",(0,r.jsx)(n.h3,{id:"a-single-turbine-driven-compressor-with-a-generic-compressor-chart-with-design-point-and-predefined-composition",children:"A (single) turbine driven compressor with a generic compressor chart with design point and predefined composition"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: generic_from_design_point_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_DESIGN_POINT\n POLYTROPIC_EFFICIENCY: 0.75\n DESIGN_RATE: 7000\n DESIGN_HEAD: 50\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: KJ_PER_KG\n EFFICIENCY: FRACTION\n\n - NAME: medium_fluid\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: SRK\n GAS_TYPE: MEDIUM\n\n - NAME: simplified_compressor_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: medium_fluid\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: generic_from_design_point_compressor_chart\n\n - NAME: compressor_train_turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # MJ/Sm3\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362] # fractions between 0 and 1\n\n - NAME: simplified_compressor_model_with_turbine\n TYPE: COMPRESSOR_WITH_TURBINE\n COMPRESSOR_MODEL: simplified_compressor_model\n TURBINE_MODEL: compressor_train_turbine\n"})}),"\n",(0,r.jsx)(n.h3,{id:"a-compressor-train-with-two-stages-where-the-first-stage-has-unknown-spec-while-the-second-has-a-predefined-chart",children:"A compressor train with two stages where the first stage has unknown spec while the second has a predefined chart"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" MODELS:\n - NAME: generic_from_input_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_INPUT\n\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: FRACTION\n CURVES:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n - SPEED: 10767\n RATE: [4052, 4500, 4999, 5492, 6000, 6439,]\n HEAD: [16447, 16081, 15546, 14640, 13454, 11973,]\n EFFICIENCY: [0.72, 0.73, 0.74, 0.74, 0.72, 0.70]\n\n - NAME: dry_fluid\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: SRK\n GAS_TYPE: DRY\n\n - NAME: simplified_compressor_train_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: dry_fluid\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: generic_from_input_compressor_chart\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: predefined_variable_speed_compressor_chart\n"})}),"\n",(0,r.jsx)(n.h3,{id:"a-compressor-train-where-the-number-of-stages-are-unknown",children:"A compressor train where the number of stages are unknown"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" MODELS:\n - NAME: generic_from_input_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_INPUT\n POLYTROPIC_EFFICIENCY: 0.75\n UNITS:\n EFFICIENCY: FRACTION\n\n - NAME: dry_fluid\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: SRK\n GAS_TYPE: DRY\n\n - NAME: simplified_compressor_train_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: dry_fluid\n COMPRESSOR_TRAIN:\n MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5\n COMPRESSOR_CHART: generic_from_input_compressor_chart\n INLET_TEMPERATURE: 30\n"})})]})}function c(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>t,x:()=>a});var r=s(96540);const o={},i=r.createContext(o);function t(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3390a8e0.280e220b.js b/assets/js/3390a8e0.280e220b.js new file mode 100644 index 0000000000..09d285792b --- /dev/null +++ b/assets/js/3390a8e0.280e220b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2570],{3799:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>c,metadata:()=>i,toc:()=>l});var t=r(74848),s=r(28453);const c={},o="CONDITION",i={id:"about/references/CONDITION",title:"CONDITION",description:"INSTALLATIONS /",source:"@site/docs/about/references/CONDITION.md",sourceDirName:"about/references",slug:"/about/references/CONDITION",permalink:"/ecalc/docs/about/references/CONDITION",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/CONDITION.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"COMPRESSOR_TRAIN_MODEL",permalink:"/ecalc/docs/about/references/COMPRESSOR_TRAIN_MODEL"},next:{title:"CONDITIONS",permalink:"/ecalc/docs/about/references/CONDITIONS"}},d={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"condition",children:"CONDITION"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/CONDITION",children:"CONDITION"})]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Required"}),(0,t.jsx)(n.th,{children:"Child of"}),(0,t.jsx)(n.th,{children:"Children/Options"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"No"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ENERGY_USAGE_MODEL"})}),(0,t.jsx)(n.td,{children:"None"})]})})]}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:["All energy usage models may have a keyword ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/CONDITION",children:"CONDITION"}),"\nwhich specifies conditions for the consumer to be used. At points in the time series where the condition\nevaluates to ",(0,t.jsx)(n.code,{children:"0"})," (or ",(0,t.jsx)(n.code,{children:"False"}),"), the energy consumption will be ",(0,t.jsx)(n.code,{children:"0"}),".\nThis is practical for some otherwise\nconstant consumers.\nFor example, if you use the category ",(0,t.jsx)(n.code,{children:"FIXED-PRODUCTION-LOAD"})," and you want it to depend on whether or not there is production, the ",(0,t.jsx)(n.code,{children:"CONDITION"})," keyword can be specified."]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"CONDITION"})," supports the functionality described in ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/EXPRESSION",children:"Expressions"}),", but is ",(0,t.jsx)(n.strong,{children:"required"})," to evaluate to ",(0,t.jsx)(n.code,{children:"True/False"})," or ",(0,t.jsx)(n.code,{children:"1/0"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"CONDITION: \n"})}),"\n",(0,t.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.p,{children:"A simple example is shown below where the load is only present whenever the oil production is positive:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"- NAME: production_load\n CATEGORY: FIXED-PRODUCTION-LOAD\n ENERGY_USAGE_MODEL:\n LOAD: 5\n CONDITION: SIM1;OIL_PROD:PLA > 0\n"})}),"\n",(0,t.jsxs)(n.p,{children:["This condition is an expression. See ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/EXPRESSION",children:"Expressions"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>o,x:()=>i});var t=r(96540);const s={},c=t.createContext(s);function o(e){const n=t.useContext(c);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/33fb585a.0eed8140.js b/assets/js/33fb585a.0eed8140.js new file mode 100644 index 0000000000..86b394c63a --- /dev/null +++ b/assets/js/33fb585a.0eed8140.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5004],{86164:t=>{t.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Documentation","description":"This section of the documentation lists instructions and guidelines on how to contribute to the documentation","slug":"/category/documentation","permalink":"/ecalc/docs/category/documentation","sidebar":"contribute","navigation":{"next":{"title":"Overview","permalink":"/ecalc/docs/contribute/documentation-guide/documentation"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/3409ab5c.07103752.js b/assets/js/3409ab5c.07103752.js new file mode 100644 index 0000000000..8a3f926952 --- /dev/null +++ b/assets/js/3409ab5c.07103752.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[262],{90151:(s,e,a)=>{a.r(e),a.d(e,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>m,metadata:()=>r,toc:()=>t});var n=a(74848),l=a(28453);const m={title:"Pump modelling",sidebar_position:1,description:"Pump modelling theory"},i=void 0,r={id:"about/modelling/theory/pump_modelling",title:"Pump modelling",description:"Pump modelling theory",source:"@site/docs/about/modelling/theory/pump_modelling.md",sourceDirName:"about/modelling/theory",slug:"/about/modelling/theory/pump_modelling",permalink:"/ecalc/docs/about/modelling/theory/pump_modelling",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/theory/pump_modelling.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Pump modelling",sidebar_position:1,description:"Pump modelling theory"},sidebar:"about",previous:{title:"Theory",permalink:"/ecalc/docs/about/modelling/theory/"},next:{title:"Compressor modelling",permalink:"/ecalc/docs/about/modelling/theory/compressor_modelling"}},c={},t=[];function h(s){const e={annotation:"annotation",img:"img",math:"math",mfrac:"mfrac",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",msub:"msub",p:"p",semantics:"semantics",span:"span",...(0,l.R)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.p,{children:"As liquid can be assumed incompressible, pump calculations are simpler compared to compressor calculations. The pumped fluid can be characterized with its density, and no fluid calculations are necessary."}),"\n",(0,n.jsx)(e.p,{children:"The power demand of a pump is calculated as"}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"w"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"h"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"_"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"e"})]}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"f"}),(0,n.jsx)(e.mi,{children:"f"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{children:"y"})]})]}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"power = \\frac{head * mass\\_rate}{efficiency}."})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02691em"},children:"w"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"er"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"2.2749em",verticalAlign:"-0.8804em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.3944em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.10764em"},children:"ff"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"c"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"cy"})]})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.7em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"h"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"ma"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"ss"}),(0,n.jsx)(e.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"})]})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.8804em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]}),(0,n.jsx)(e.span,{className:"mord",children:"."})]})]})]})}),"\n",(0,n.jsx)(e.p,{children:"Here, the relationship between head and pressures is given by"}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"h"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{stretchy:"false",children:"("}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mn,{children:"2"})]}),(0,n.jsx)(e.mo,{children:"\u2212"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mn,{children:"1"})]}),(0,n.jsx)(e.mo,{stretchy:"false",children:")"})]}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"l"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"q"}),(0,n.jsx)(e.mi,{children:"u"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"_"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"y"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"g"})]})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"head = \\frac{(P_2-P_1)}{liquid\\_density * g}"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6944em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"h"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"2.423em",verticalAlign:"-0.996em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.427em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"q"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"u"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(e.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"s"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"g"})]})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen",children:"("}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"2"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2212"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"1"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mclose",children:")"})]})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.996em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]})]})]})]})}),"\n",(0,n.jsxs)(e.p,{children:["where ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mn,{children:"1"})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"P_1"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"1"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," and ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mn,{children:"2"})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"P_2"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"2"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," are the pump suction and discharge pressures, respectively, and ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"g"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"g"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"g"})]})})]})," is the gravitational constant."]}),"\n",(0,n.jsx)(e.p,{children:"eCalc uses the pump chart to relate liquid flow, head and efficiency for the pump, as well as defining the operational envelope for the pump."}),"\n",(0,n.jsx)(e.p,{children:"For single speed pumps, eCalc does extrapolations corresponding to minflow (liquid recirculation) and choking to keep the pump operation within the operational envelope."}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.img,{src:a(43954).A+"",width:"502",height:"449"})," ",(0,n.jsx)(e.img,{src:a(95841).A+"",width:"484",height:"443"})]})]})}function d(s={}){const{wrapper:e}={...(0,l.R)(),...s.components};return e?(0,n.jsx)(e,{...s,children:(0,n.jsx)(h,{...s})}):h(s)}},43954:(s,e,a)=>{a.d(e,{A:()=>n});const n=a.p+"assets/images/pumpchart_eff-136e9a9dd1af0700084ddf17be0d4453.PNG"},95841:(s,e,a)=>{a.d(e,{A:()=>n});const n=a.p+"assets/images/pumpchart_head-ec0fc7f624752c8c95bd7c3f828090a3.PNG"},28453:(s,e,a)=>{a.d(e,{R:()=>i,x:()=>r});var n=a(96540);const l={},m=n.createContext(l);function i(s){const e=n.useContext(m);return n.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function r(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(l):s.components||l:i(s.components),n.createElement(m.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/3451a9ae.a366cef9.js b/assets/js/3451a9ae.a366cef9.js new file mode 100644 index 0000000000..c214a208c9 --- /dev/null +++ b/assets/js/3451a9ae.a366cef9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7572],{93203:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>a,default:()=>d,frontMatter:()=>l,metadata:()=>i,toc:()=>c});var s=t(74848),o=t(28453);const l={slug:"v8.19-release",title:"v8.19",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:-28},a="eCalc",i={id:"changelog/v8-19",title:"v8.19",description:"Features",source:"@site/docs/changelog/v8-19.md",sourceDirName:"changelog",slug:"/changelog/v8.19-release",permalink:"/ecalc/docs/changelog/v8.19-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-19.md",tags:[{inline:!0,label:"release",permalink:"/ecalc/docs/tags/release"},{inline:!0,label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:-28,frontMatter:{slug:"v8.19-release",title:"v8.19",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:-28},sidebar:"changelog",previous:{title:"v8.20",permalink:"/ecalc/docs/changelog/v8.20-release"},next:{title:"v8.18",permalink:"/ecalc/docs/changelog/v8.18-release"}},r={},c=[{value:"Features",id:"features",level:2},{value:"Bug Fixes",id:"bug-fixes",level:2}];function u(e){const n={h1:"h1",h2:"h2",li:"li",ul:"ul",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"ecalc",children:"eCalc"}),"\n",(0,s.jsx)(n.h2,{id:"features",children:"Features"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Implement adjustment factors for genset: Make sure fuel consumption is scaled according to the adjustment factor and constant given in facility inputs.Make venting emitters emission names case insensitive: Avoid splitting same emission-types into separate ones, due to different use of upper- and lower case."}),"\n",(0,s.jsx)(n.li,{children:"Improve error message for extra pfs columns: Improve error message to point at the problematic column (or both columns if they are in the model)."}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"bug-fixes",children:"Bug Fixes"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Error message for compressor model in turbine."}),"\n",(0,s.jsx)(n.li,{children:"Do not allow multiple energy model types: It is not allowed to switch types of energy_usage_models when using temporal models. This will now give error."}),"\n"]})]})}function d(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>i});var s=t(96540);const o={},l=s.createContext(o);function a(e){const n=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),s.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/34864e1f.78d111db.js b/assets/js/34864e1f.78d111db.js new file mode 100644 index 0000000000..dad3a7f440 --- /dev/null +++ b/assets/js/34864e1f.78d111db.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1344],{97128:(n,e,i)=>{i.r(e),i.d(e,{assets:()=>r,contentTitle:()=>d,default:()=>h,frontMatter:()=>t,metadata:()=>l,toc:()=>a});var s=i(74848),o=i(28453);const t={title:"v8.12 to v8.13",description:"v8.12 to v8.13 migration",sidebar_position:-8},d="v8.12 to v8.13",l={id:"about/migration_guides/v8.12_to_v8.13",title:"v8.12 to v8.13",description:"v8.12 to v8.13 migration",source:"@site/docs/about/migration_guides/v8.12_to_v8.13.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/v8.12_to_v8.13",permalink:"/ecalc/docs/about/migration_guides/v8.12_to_v8.13",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/v8.12_to_v8.13.md",tags:[],version:"current",sidebarPosition:-8,frontMatter:{title:"v8.12 to v8.13",description:"v8.12 to v8.13 migration",sidebar_position:-8},sidebar:"about",previous:{title:"v8.13 to v8.14",permalink:"/ecalc/docs/about/migration_guides/v8.13_to_v8.14"},next:{title:"v8.7 to v8.8",permalink:"/ecalc/docs/about/migration_guides/v8.7_to_v8.8"}},r={},a=[{value:"Yaml migration",id:"yaml-migration",level:2},{value:"1. Changes to VENTING_EMITTERS",id:"1-changes-to-venting_emitters",level:3}];function c(n){const e={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...n.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(e.h1,{id:"v812-to-v813",children:"v8.12 to v8.13"}),"\n",(0,s.jsx)(e.p,{children:"In this migration guide you will find:"}),"\n",(0,s.jsxs)(e.ol,{children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.a,{href:"#yaml-migration",children:"YAML changes"})}),"\n"]}),"\n",(0,s.jsx)(e.h2,{id:"yaml-migration",children:"Yaml migration"}),"\n",(0,s.jsx)(e.h3,{id:"1-changes-to-venting_emitters",children:"1. Changes to VENTING_EMITTERS"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["Introducing ",(0,s.jsx)(e.code,{children:"VENTING_EMITTERS"})," ",(0,s.jsx)(e.code,{children:"TYPE"})]}),"\n",(0,s.jsxs)(e.li,{children:["Two types can be defined in ",(0,s.jsx)(e.code,{children:"TYPE"}),": ",(0,s.jsx)(e.code,{children:"DIRECT_EMISSION"})," and ",(0,s.jsx)(e.code,{children:"OIL_VOLUME"})]}),"\n",(0,s.jsxs)(e.li,{children:["For the ",(0,s.jsx)(e.code,{children:"DIRECT_EMISSION"})," type the following should be specified:","\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"EMISSIONS"})," (",(0,s.jsx)(e.code,{children:"EMISSION"})," is deprecated): Multiple emissions can be specified, each defined by ",(0,s.jsx)(e.code,{children:"NAME"})," and ",(0,s.jsx)(e.code,{children:"RATE"})]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["For the ",(0,s.jsx)(e.code,{children:"OIL_VOLUME"})," type the following should be specified:","\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"VOLUME"}),": The oil volume/rate associated with loading/storage are defined using ",(0,s.jsx)(e.code,{children:"RATE"}),". Multiple emissions are specified using the ",(0,s.jsx)(e.code,{children:"EMISSIONS"})," keyword. Each emission is defined by ",(0,s.jsx)(e.code,{children:"NAME"})," and ",(0,s.jsx)(e.code,{children:"EMISSION_FACTOR"}),". The emission factor is used to calculate emissions as a fraction of oil loading/storage volumes."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"Previously, the format looked like this:"}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-yaml",children:"VENTING_EMITTERS:\n - NAME: \n CATEGORY: \n # This is old\n EMISSION:\n # This is old\n NAME: \n # This is old\n RATE:\n # This is old\n VALUE: \n # This is old\n UNIT: \n # This is old\n TYPE: \n"})}),"\n",(0,s.jsxs)(e.p,{children:["The new valid definition of ",(0,s.jsx)(e.code,{children:"VENTING_EMITTERS"})," in the yaml is now, for type ",(0,s.jsx)(e.code,{children:"DIRECT_EMISSION"}),":"]}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-yaml",children:"VENTING_EMITTERS:\n - NAME: \n CATEGORY: \n # This is new\n TYPE: DIRECT_EMISSION\n # This is new\n EMISSIONS:\n # This is new\n - NAME: \n # This is new\n RATE:\n # This is new\n VALUE: \n # This is new\n UNIT: \n # This is new\n TYPE: \n # This is new\n - NAME: \n # This is new\n RATE:\n # This is new\n VALUE: \n # This is new\n UNIT: \n # This is new\n TYPE: \n"})}),"\n",(0,s.jsxs)(e.p,{children:["The new valid definition of ",(0,s.jsx)(e.code,{children:"VENTING_EMITTERS"})," in the yaml is now, for type ",(0,s.jsx)(e.code,{children:"OIL_VOLUME"}),":"]}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-yaml",children:"VENTING_EMITTERS:\n - NAME: \n CATEGORY: \n # This is new\n TYPE: OIL_VOLUME\n # This is new\n VOLUME:\n # This is new\n RATE:\n # This is new\n VALUE: \n # This is new\n UNIT: \n # This is new\n TYPE: \n # This is new\n EMISSIONS:\n # This is new\n - NAME: \n # This is new\n EMISSION_FACTOR: \n # This is new\n - NAME: \n # This is new\n EMISSION_FACTOR: \n"})}),"\n",(0,s.jsxs)(e.p,{children:["Example with the new yaml-definition of ",(0,s.jsx)(e.code,{children:"VENTING_EMITTERS"}),", for ",(0,s.jsx)(e.code,{children:"DIRECT_EMISSION"})," type:"]}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-yaml",children:"VENTING_EMITTERS:\n - NAME: SomeVentingEmitter\n CATEGORY: COLD-VENTING-FUGITIVE\n # This is new\n TYPE: DIRECT_EMISSION\n # This is new\n EMISSIONS:\n # This is new\n - NAME: CO2\n # This is new\n RATE:\n # This is new\n VALUE: 2\n # This is new\n UNIT: kg/d\n # This is new\n TYPE: STREAM_DAY\n # This is new\n - NAME: CH4\n # This is new\n RATE:\n # This is new\n VALUE: 4\n # This is new\n UNIT: kg/d\n # This is new\n TYPE: STREAM_DAY\n\n"})})]})}function h(n={}){const{wrapper:e}={...(0,o.R)(),...n.components};return e?(0,s.jsx)(e,{...n,children:(0,s.jsx)(c,{...n})}):c(n)}},28453:(n,e,i)=>{i.d(e,{R:()=>d,x:()=>l});var s=i(96540);const o={},t=s.createContext(o);function d(n){const e=s.useContext(t);return s.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function l(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(o):n.components||o:d(n.components),s.createElement(t.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/3626.55925cb3.js b/assets/js/3626.55925cb3.js new file mode 100644 index 0000000000..761319a090 --- /dev/null +++ b/assets/js/3626.55925cb3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3626],{63626:(t,e,s)=>{s.d(e,{d:()=>D,p:()=>r,s:()=>_});var n=s(26312),i=s(99702),u=function(){var t=function(t,e,s,n){for(s=s||{},n=t.length;n--;s[t[n]]=e);return s},e=[1,17],s=[1,18],n=[1,19],i=[1,39],u=[1,40],r=[1,25],a=[1,23],c=[1,24],o=[1,31],l=[1,32],h=[1,33],A=[1,34],p=[1,35],d=[1,36],y=[1,26],E=[1,27],C=[1,28],m=[1,29],f=[1,43],b=[1,30],F=[1,42],g=[1,44],k=[1,41],T=[1,45],B=[1,9],D=[1,8,9],_=[1,56],S=[1,57],N=[1,58],L=[1,59],$=[1,60],v=[1,61],O=[1,62],x=[1,8,9,39],I=[1,74],R=[1,8,9,12,13,21,37,39,42,59,60,61,62,63,64,65,70,72],w=[1,8,9,12,13,19,21,37,39,42,46,59,60,61,62,63,64,65,70,72,74,80,95,97,98],P=[13,74,80,95,97,98],M=[13,64,65,74,80,95,97,98],G=[13,59,60,61,62,63,74,80,95,97,98],U=[1,93],z=[1,110],K=[1,108],Y=[1,102],j=[1,103],Q=[1,104],X=[1,105],W=[1,106],q=[1,107],H=[1,109],J=[1,8,9,37,39,42],V=[1,8,9,21],Z=[1,8,9,78],tt=[1,8,9,21,73,74,78,80,81,82,83,84,85],et={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,className:17,classLiteralName:18,GENERICTYPE:19,relationStatement:20,LABEL:21,namespaceStatement:22,classStatement:23,memberStatement:24,annotationStatement:25,clickStatement:26,styleStatement:27,cssClassStatement:28,noteStatement:29,direction:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,namespaceIdentifier:36,STRUCT_START:37,classStatements:38,STRUCT_STOP:39,NAMESPACE:40,classIdentifier:41,STYLE_SEPARATOR:42,members:43,CLASS:44,ANNOTATION_START:45,ANNOTATION_END:46,MEMBER:47,SEPARATOR:48,relation:49,NOTE_FOR:50,noteText:51,NOTE:52,direction_tb:53,direction_bt:54,direction_rl:55,direction_lr:56,relationType:57,lineType:58,AGGREGATION:59,EXTENSION:60,COMPOSITION:61,DEPENDENCY:62,LOLLIPOP:63,LINE:64,DOTTED_LINE:65,CALLBACK:66,LINK:67,LINK_TARGET:68,CLICK:69,CALLBACK_NAME:70,CALLBACK_ARGS:71,HREF:72,STYLE:73,ALPHA:74,stylesOpt:75,CSSCLASS:76,style:77,COMMA:78,styleComponent:79,NUM:80,COLON:81,UNIT:82,SPACE:83,BRKT:84,PCT:85,commentToken:86,textToken:87,graphCodeTokens:88,textNoTagsToken:89,TAGSTART:90,TAGEND:91,"==":92,"--":93,DEFAULT:94,MINUS:95,keywords:96,UNICODE_TEXT:97,BQUOTE_STR:98,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",19:"GENERICTYPE",21:"LABEL",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",37:"STRUCT_START",39:"STRUCT_STOP",40:"NAMESPACE",42:"STYLE_SEPARATOR",44:"CLASS",45:"ANNOTATION_START",46:"ANNOTATION_END",47:"MEMBER",48:"SEPARATOR",50:"NOTE_FOR",52:"NOTE",53:"direction_tb",54:"direction_bt",55:"direction_rl",56:"direction_lr",59:"AGGREGATION",60:"EXTENSION",61:"COMPOSITION",62:"DEPENDENCY",63:"LOLLIPOP",64:"LINE",65:"DOTTED_LINE",66:"CALLBACK",67:"LINK",68:"LINK_TARGET",69:"CLICK",70:"CALLBACK_NAME",71:"CALLBACK_ARGS",72:"HREF",73:"STYLE",74:"ALPHA",76:"CSSCLASS",78:"COMMA",80:"NUM",81:"COLON",82:"UNIT",83:"SPACE",84:"BRKT",85:"PCT",88:"graphCodeTokens",90:"TAGSTART",91:"TAGEND",92:"==",93:"--",94:"DEFAULT",95:"MINUS",96:"keywords",97:"UNICODE_TEXT",98:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,2],[17,1],[17,1],[17,2],[17,2],[17,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[22,4],[22,5],[36,2],[38,1],[38,2],[38,3],[23,1],[23,3],[23,4],[23,6],[41,2],[41,3],[25,4],[43,1],[43,2],[24,1],[24,2],[24,1],[24,1],[20,3],[20,4],[20,4],[20,5],[29,3],[29,2],[30,1],[30,1],[30,1],[30,1],[49,3],[49,2],[49,2],[49,1],[57,1],[57,1],[57,1],[57,1],[57,1],[58,1],[58,1],[26,3],[26,4],[26,3],[26,4],[26,4],[26,5],[26,3],[26,4],[26,4],[26,5],[26,4],[26,5],[26,5],[26,6],[27,3],[28,3],[75,1],[75,3],[77,1],[77,2],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[86,1],[86,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[89,1],[89,1],[89,1],[89,1],[16,1],[16,1],[16,1],[16,1],[18,1],[51,1]],performAction:function(t,e,s,n,i,u,r){var a=u.length-1;switch(i){case 8:this.$=u[a-1];break;case 9:case 11:case 12:this.$=u[a];break;case 10:case 13:case 89:this.$=u[a-1]+u[a];break;case 14:case 15:this.$=u[a-1]+"~"+u[a]+"~";break;case 16:n.addRelation(u[a]);break;case 17:u[a-1].title=n.cleanupLabel(u[a]),n.addRelation(u[a-1]);break;case 27:this.$=u[a].trim(),n.setAccTitle(this.$);break;case 28:case 29:this.$=u[a].trim(),n.setAccDescription(this.$);break;case 30:n.addClassesToNamespace(u[a-3],u[a-1]);break;case 31:n.addClassesToNamespace(u[a-4],u[a-1]);break;case 32:this.$=u[a],n.addNamespace(u[a]);break;case 33:case 43:case 86:this.$=[u[a]];break;case 34:this.$=[u[a-1]];break;case 35:u[a].unshift(u[a-2]),this.$=u[a];break;case 37:n.setCssClass(u[a-2],u[a]);break;case 38:n.addMembers(u[a-3],u[a-1]);break;case 39:n.setCssClass(u[a-5],u[a-3]),n.addMembers(u[a-5],u[a-1]);break;case 40:this.$=u[a],n.addClass(u[a]);break;case 41:this.$=u[a-1],n.addClass(u[a-1]),n.setClassLabel(u[a-1],u[a]);break;case 42:n.addAnnotation(u[a],u[a-2]);break;case 44:u[a].push(u[a-1]),this.$=u[a];break;case 45:case 47:case 48:break;case 46:n.addMember(u[a-1],n.cleanupLabel(u[a]));break;case 49:this.$={id1:u[a-2],id2:u[a],relation:u[a-1],relationTitle1:"none",relationTitle2:"none"};break;case 50:this.$={id1:u[a-3],id2:u[a],relation:u[a-1],relationTitle1:u[a-2],relationTitle2:"none"};break;case 51:this.$={id1:u[a-3],id2:u[a],relation:u[a-2],relationTitle1:"none",relationTitle2:u[a-1]};break;case 52:this.$={id1:u[a-4],id2:u[a],relation:u[a-2],relationTitle1:u[a-3],relationTitle2:u[a-1]};break;case 53:n.addNote(u[a],u[a-1]);break;case 54:n.addNote(u[a]);break;case 55:n.setDirection("TB");break;case 56:n.setDirection("BT");break;case 57:n.setDirection("RL");break;case 58:n.setDirection("LR");break;case 59:this.$={type1:u[a-2],type2:u[a],lineType:u[a-1]};break;case 60:this.$={type1:"none",type2:u[a],lineType:u[a-1]};break;case 61:this.$={type1:u[a-1],type2:"none",lineType:u[a]};break;case 62:this.$={type1:"none",type2:"none",lineType:u[a]};break;case 63:this.$=n.relationType.AGGREGATION;break;case 64:this.$=n.relationType.EXTENSION;break;case 65:this.$=n.relationType.COMPOSITION;break;case 66:this.$=n.relationType.DEPENDENCY;break;case 67:this.$=n.relationType.LOLLIPOP;break;case 68:this.$=n.lineType.LINE;break;case 69:this.$=n.lineType.DOTTED_LINE;break;case 70:case 76:this.$=u[a-2],n.setClickEvent(u[a-1],u[a]);break;case 71:case 77:this.$=u[a-3],n.setClickEvent(u[a-2],u[a-1]),n.setTooltip(u[a-2],u[a]);break;case 72:this.$=u[a-2],n.setLink(u[a-1],u[a]);break;case 73:this.$=u[a-3],n.setLink(u[a-2],u[a-1],u[a]);break;case 74:this.$=u[a-3],n.setLink(u[a-2],u[a-1]),n.setTooltip(u[a-2],u[a]);break;case 75:this.$=u[a-4],n.setLink(u[a-3],u[a-2],u[a]),n.setTooltip(u[a-3],u[a-1]);break;case 78:this.$=u[a-3],n.setClickEvent(u[a-2],u[a-1],u[a]);break;case 79:this.$=u[a-4],n.setClickEvent(u[a-3],u[a-2],u[a-1]),n.setTooltip(u[a-3],u[a]);break;case 80:this.$=u[a-3],n.setLink(u[a-2],u[a]);break;case 81:this.$=u[a-4],n.setLink(u[a-3],u[a-1],u[a]);break;case 82:this.$=u[a-4],n.setLink(u[a-3],u[a-1]),n.setTooltip(u[a-3],u[a]);break;case 83:this.$=u[a-5],n.setLink(u[a-4],u[a-2],u[a]),n.setTooltip(u[a-4],u[a-1]);break;case 84:this.$=u[a-2],n.setCssStyle(u[a-1],u[a]);break;case 85:n.setCssClass(u[a-1],u[a]);break;case 87:u[a-2].push(u[a]),this.$=u[a-2]}},table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:37,17:20,18:38,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,31:e,33:s,35:n,36:21,40:i,41:22,44:u,45:r,47:a,48:c,50:o,52:l,53:h,54:A,55:p,56:d,66:y,67:E,69:C,73:m,74:f,76:b,80:F,95:g,97:k,98:T},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},t(B,[2,5],{8:[1,46]}),{8:[1,47]},t(D,[2,16],{21:[1,48]}),t(D,[2,18]),t(D,[2,19]),t(D,[2,20]),t(D,[2,21]),t(D,[2,22]),t(D,[2,23]),t(D,[2,24]),t(D,[2,25]),t(D,[2,26]),{32:[1,49]},{34:[1,50]},t(D,[2,29]),t(D,[2,45],{49:51,57:54,58:55,13:[1,52],21:[1,53],59:_,60:S,61:N,62:L,63:$,64:v,65:O}),{37:[1,63]},t(x,[2,36],{37:[1,65],42:[1,64]}),t(D,[2,47]),t(D,[2,48]),{16:66,74:f,80:F,95:g,97:k},{16:37,17:67,18:38,74:f,80:F,95:g,97:k,98:T},{16:37,17:68,18:38,74:f,80:F,95:g,97:k,98:T},{16:37,17:69,18:38,74:f,80:F,95:g,97:k,98:T},{74:[1,70]},{13:[1,71]},{16:37,17:72,18:38,74:f,80:F,95:g,97:k,98:T},{13:I,51:73},t(D,[2,55]),t(D,[2,56]),t(D,[2,57]),t(D,[2,58]),t(R,[2,11],{16:37,18:38,17:75,19:[1,76],74:f,80:F,95:g,97:k,98:T}),t(R,[2,12],{19:[1,77]}),{15:78,16:79,74:f,80:F,95:g,97:k},{16:37,17:80,18:38,74:f,80:F,95:g,97:k,98:T},t(w,[2,112]),t(w,[2,113]),t(w,[2,114]),t(w,[2,115]),t([1,8,9,12,13,19,21,37,39,42,59,60,61,62,63,64,65,70,72],[2,116]),t(B,[2,6],{10:5,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,17:20,36:21,41:22,16:37,18:38,5:81,31:e,33:s,35:n,40:i,44:u,45:r,47:a,48:c,50:o,52:l,53:h,54:A,55:p,56:d,66:y,67:E,69:C,73:m,74:f,76:b,80:F,95:g,97:k,98:T}),{5:82,10:5,16:37,17:20,18:38,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,31:e,33:s,35:n,36:21,40:i,41:22,44:u,45:r,47:a,48:c,50:o,52:l,53:h,54:A,55:p,56:d,66:y,67:E,69:C,73:m,74:f,76:b,80:F,95:g,97:k,98:T},t(D,[2,17]),t(D,[2,27]),t(D,[2,28]),{13:[1,84],16:37,17:83,18:38,74:f,80:F,95:g,97:k,98:T},{49:85,57:54,58:55,59:_,60:S,61:N,62:L,63:$,64:v,65:O},t(D,[2,46]),{58:86,64:v,65:O},t(P,[2,62],{57:87,59:_,60:S,61:N,62:L,63:$}),t(M,[2,63]),t(M,[2,64]),t(M,[2,65]),t(M,[2,66]),t(M,[2,67]),t(G,[2,68]),t(G,[2,69]),{8:[1,89],23:90,38:88,41:22,44:u},{16:91,74:f,80:F,95:g,97:k},{43:92,47:U},{46:[1,94]},{13:[1,95]},{13:[1,96]},{70:[1,97],72:[1,98]},{21:z,73:K,74:Y,75:99,77:100,79:101,80:j,81:Q,82:X,83:W,84:q,85:H},{74:[1,111]},{13:I,51:112},t(D,[2,54]),t(D,[2,117]),t(R,[2,13]),t(R,[2,14]),t(R,[2,15]),{37:[2,32]},{15:113,16:79,37:[2,9],74:f,80:F,95:g,97:k},t(J,[2,40],{11:114,12:[1,115]}),t(B,[2,7]),{9:[1,116]},t(V,[2,49]),{16:37,17:117,18:38,74:f,80:F,95:g,97:k,98:T},{13:[1,119],16:37,17:118,18:38,74:f,80:F,95:g,97:k,98:T},t(P,[2,61],{57:120,59:_,60:S,61:N,62:L,63:$}),t(P,[2,60]),{39:[1,121]},{23:90,38:122,41:22,44:u},{8:[1,123],39:[2,33]},t(x,[2,37],{37:[1,124]}),{39:[1,125]},{39:[2,43],43:126,47:U},{16:37,17:127,18:38,74:f,80:F,95:g,97:k,98:T},t(D,[2,70],{13:[1,128]}),t(D,[2,72],{13:[1,130],68:[1,129]}),t(D,[2,76],{13:[1,131],71:[1,132]}),{13:[1,133]},t(D,[2,84],{78:[1,134]}),t(Z,[2,86],{79:135,21:z,73:K,74:Y,80:j,81:Q,82:X,83:W,84:q,85:H}),t(tt,[2,88]),t(tt,[2,90]),t(tt,[2,91]),t(tt,[2,92]),t(tt,[2,93]),t(tt,[2,94]),t(tt,[2,95]),t(tt,[2,96]),t(tt,[2,97]),t(tt,[2,98]),t(D,[2,85]),t(D,[2,53]),{37:[2,10]},t(J,[2,41]),{13:[1,136]},{1:[2,4]},t(V,[2,51]),t(V,[2,50]),{16:37,17:137,18:38,74:f,80:F,95:g,97:k,98:T},t(P,[2,59]),t(D,[2,30]),{39:[1,138]},{23:90,38:139,39:[2,34],41:22,44:u},{43:140,47:U},t(x,[2,38]),{39:[2,44]},t(D,[2,42]),t(D,[2,71]),t(D,[2,73]),t(D,[2,74],{68:[1,141]}),t(D,[2,77]),t(D,[2,78],{13:[1,142]}),t(D,[2,80],{13:[1,144],68:[1,143]}),{21:z,73:K,74:Y,77:145,79:101,80:j,81:Q,82:X,83:W,84:q,85:H},t(tt,[2,89]),{14:[1,146]},t(V,[2,52]),t(D,[2,31]),{39:[2,35]},{39:[1,147]},t(D,[2,75]),t(D,[2,79]),t(D,[2,81]),t(D,[2,82],{68:[1,148]}),t(Z,[2,87],{79:135,21:z,73:K,74:Y,80:j,81:Q,82:X,83:W,84:q,85:H}),t(J,[2,8]),t(x,[2,39]),t(D,[2,83])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],78:[2,32],113:[2,10],116:[2,4],126:[2,44],139:[2,35]},parseError:function(t,e){if(!e.recoverable){var s=new Error(t);throw s.hash=e,s}this.trace(t)},parse:function(t){var e=this,s=[0],n=[],i=[null],u=[],r=this.table,a="",c=0,o=0,l=u.slice.call(arguments,1),h=Object.create(this.lexer),A={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(A.yy[p]=this.yy[p]);h.setInput(t,A.yy),A.yy.lexer=h,A.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var d=h.yylloc;u.push(d);var y=h.options&&h.options.ranges;"function"==typeof A.yy.parseError?this.parseError=A.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var E,C,m,f,b,F,g,k,T,B={};;){if(C=s[s.length-1],this.defaultActions[C]?m=this.defaultActions[C]:(null==E&&(T=void 0,"number"!=typeof(T=n.pop()||h.lex()||1)&&(T instanceof Array&&(T=(n=T).pop()),T=e.symbols_[T]||T),E=T),m=r[C]&&r[C][E]),void 0===m||!m.length||!m[0]){var D="";for(b in k=[],r[C])this.terminals_[b]&&b>2&&k.push("'"+this.terminals_[b]+"'");D=h.showPosition?"Parse error on line "+(c+1)+":\n"+h.showPosition()+"\nExpecting "+k.join(", ")+", got '"+(this.terminals_[E]||E)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==E?"end of input":"'"+(this.terminals_[E]||E)+"'"),this.parseError(D,{text:h.match,token:this.terminals_[E]||E,line:h.yylineno,loc:d,expected:k})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+C+", token: "+E);switch(m[0]){case 1:s.push(E),i.push(h.yytext),u.push(h.yylloc),s.push(m[1]),E=null,o=h.yyleng,a=h.yytext,c=h.yylineno,d=h.yylloc;break;case 2:if(F=this.productions_[m[1]][1],B.$=i[i.length-F],B._$={first_line:u[u.length-(F||1)].first_line,last_line:u[u.length-1].last_line,first_column:u[u.length-(F||1)].first_column,last_column:u[u.length-1].last_column},y&&(B._$.range=[u[u.length-(F||1)].range[0],u[u.length-1].range[1]]),void 0!==(f=this.performAction.apply(B,[a,o,c,A.yy,m[1],i,u].concat(l))))return f;F&&(s=s.slice(0,-1*F*2),i=i.slice(0,-1*F),u=u.slice(0,-1*F)),s.push(this.productions_[m[1]][0]),i.push(B.$),u.push(B._$),g=r[s[s.length-2]][s[s.length-1]],s.push(g);break;case 3:return!0}}return!0}},st={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,s=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),s.length-1&&(this.yylineno-=s.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:s?(s.length===n.length?this.yylloc.first_column:0)+n[n.length-s.length].length-s[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var s,n,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(n=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],s=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;if(this._backtrack){for(var u in i)this[u]=i[u];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,s,n;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),u=0;ue[0].length)){if(e=s,n=u,this.options.backtrack_lexer){if(!1!==(t=this.test_match(s,i[u])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[n]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,s,n){switch(s){case 0:return 53;case 1:return 54;case 2:return 55;case 3:return 56;case 4:case 5:case 14:case 30:case 35:case 39:case 46:break;case 6:return this.begin("acc_title"),31;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),33;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:case 19:case 22:case 24:case 57:case 60:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:case 34:return 8;case 15:case 16:return 7;case 17:case 36:case 44:return"EDGE_STATE";case 18:this.begin("callback_name");break;case 20:this.popState(),this.begin("callback_args");break;case 21:return 70;case 23:return 71;case 25:return"STR";case 26:this.begin("string");break;case 27:return 73;case 28:return this.begin("namespace"),40;case 29:case 38:return this.popState(),8;case 31:return this.begin("namespace-body"),37;case 32:case 42:return this.popState(),39;case 33:case 43:return"EOF_IN_STRUCT";case 37:return this.begin("class"),44;case 40:return this.popState(),this.popState(),39;case 41:return this.begin("class-body"),37;case 45:return"OPEN_IN_STRUCT";case 47:return"MEMBER";case 48:return 76;case 49:return 66;case 50:return 67;case 51:return 69;case 52:return 50;case 53:return 52;case 54:return 45;case 55:return 46;case 56:return 72;case 58:return"GENERICTYPE";case 59:this.begin("generic");break;case 61:return"BQUOTE_STR";case 62:this.begin("bqstring");break;case 63:case 64:case 65:case 66:return 68;case 67:case 68:return 60;case 69:case 70:return 62;case 71:return 61;case 72:return 59;case 73:return 63;case 74:return 64;case 75:return 65;case 76:return 21;case 77:return 42;case 78:return 95;case 79:return"DOT";case 80:return"PLUS";case 81:return 81;case 82:return 78;case 83:case 84:return 84;case 85:return 85;case 86:case 87:return"EQUALS";case 88:return 74;case 89:return 12;case 90:return 14;case 91:return"PUNCTUATION";case 92:return 80;case 93:return 97;case 94:case 95:return 83;case 96:return 9}},rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:\[\*\])/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:style\b)/,/^(?:namespace\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:\[\*\])/,/^(?:class\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\[\*\])/,/^(?:[{])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?::)/,/^(?:,)/,/^(?:#)/,/^(?:#)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:\[)/,/^(?:\])/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[26,32,33,34,35,36,37,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},namespace:{rules:[26,28,29,30,31,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},"class-body":{rules:[26,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},class:{rules:[26,38,39,40,41,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},acc_descr_multiline:{rules:[11,12,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},acc_descr:{rules:[9,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},acc_title:{rules:[7,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},callback_args:{rules:[22,23,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},callback_name:{rules:[19,20,21,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},href:{rules:[26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},struct:{rules:[26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},generic:{rules:[26,48,49,50,51,52,53,54,55,56,57,58,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},bqstring:{rules:[26,48,49,50,51,52,53,54,55,56,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},string:{rules:[24,25,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,28,37,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96],inclusive:!0}}};function nt(){this.yy={}}return et.lexer=st,nt.prototype=et,et.Parser=nt,new nt}();u.parser=u;const r=u,a=["#","+","~","-",""];class c{constructor(t,e){this.memberType=e,this.visibility="",this.classifier="";const s=(0,i.d)(t,(0,i.c)());this.parseMember(s)}getDisplayDetails(){let t=this.visibility+(0,i.x)(this.id);"method"===this.memberType&&(t+=`(${(0,i.x)(this.parameters.trim())})`,this.returnType&&(t+=" : "+(0,i.x)(this.returnType))),t=t.trim();return{displayText:t,cssStyle:this.parseClassifier()}}parseMember(t){let e="";if("method"===this.memberType){const s=/([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/,n=t.match(s);if(n){const t=n[1]?n[1].trim():"";if(a.includes(t)&&(this.visibility=t),this.id=n[2].trim(),this.parameters=n[3]?n[3].trim():"",e=n[4]?n[4].trim():"",this.returnType=n[5]?n[5].trim():"",""===e){const t=this.returnType.substring(this.returnType.length-1);t.match(/[$*]/)&&(e=t,this.returnType=this.returnType.substring(0,this.returnType.length-1))}}}else{const s=t.length,n=t.substring(0,1),i=t.substring(s-1);a.includes(n)&&(this.visibility=n),i.match(/[$*]/)&&(e=i),this.id=t.substring(""===this.visibility?0:1,""===e?s:s-1)}this.classifier=e}parseClassifier(){switch(this.classifier){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}}}const o="classId-";let l=[],h={},A=[],p=0,d={},y=0,E=[];const C=t=>i.e.sanitizeText(t,(0,i.c)()),m=function(t){const e=i.e.sanitizeText(t,(0,i.c)());let s="",n=e;if(e.indexOf("~")>0){const t=e.split("~");n=C(t[0]),s=C(t[1])}return{className:n,type:s}},f=function(t){const e=i.e.sanitizeText(t,(0,i.c)()),{className:s,type:n}=m(e);if(Object.hasOwn(h,s))return;const u=i.e.sanitizeText(s,(0,i.c)());h[u]={id:u,type:n,label:u,cssClasses:[],methods:[],members:[],annotations:[],styles:[],domId:o+u+"-"+p},p++},b=function(t){const e=i.e.sanitizeText(t,(0,i.c)());if(e in h)return h[e].domId;throw new Error("Class not found: "+e)},F=function(t,e){f(t);const s=m(t).className,n=h[s];if("string"==typeof e){const t=e.trim();t.startsWith("<<")&&t.endsWith(">>")?n.annotations.push(C(t.substring(2,t.length-2))):t.indexOf(")")>0?n.methods.push(new c(t,"method")):t&&n.members.push(new c(t,"attribute"))}},g=function(t,e){t.split(",").forEach((function(t){let s=t;t[0].match(/\d/)&&(s=o+s),void 0!==h[s]&&h[s].cssClasses.push(e)}))},k=function(t,e,s){const n=i.e.sanitizeText(t,(0,i.c)());if("loose"!==(0,i.c)().securityLevel)return;if(void 0===e)return;const u=n;if(void 0!==h[u]){const t=b(u);let n=[];if("string"==typeof s){n=s.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let t=0;t")),t.classed("hover",!0)})).on("mouseout",(function(){e.transition().duration(500).style("opacity",0);(0,n.Ltv)(this).classed("hover",!1)}))};E.push(T);let B="TB";const D={setAccTitle:i.s,getAccTitle:i.g,getAccDescription:i.a,setAccDescription:i.b,getConfig:()=>(0,i.c)().class,addClass:f,bindFunctions:function(t){E.forEach((function(e){e(t)}))},clear:function(){l=[],h={},A=[],E=[],E.push(T),d={},y=0,(0,i.v)()},getClass:function(t){return h[t]},getClasses:function(){return h},getNotes:function(){return A},addAnnotation:function(t,e){const s=m(t).className;h[s].annotations.push(e)},addNote:function(t,e){const s={id:`note${A.length}`,class:e,text:t};A.push(s)},getRelations:function(){return l},addRelation:function(t){i.l.debug("Adding relation: "+JSON.stringify(t)),f(t.id1),f(t.id2),t.id1=m(t.id1).className,t.id2=m(t.id2).className,t.relationTitle1=i.e.sanitizeText(t.relationTitle1.trim(),(0,i.c)()),t.relationTitle2=i.e.sanitizeText(t.relationTitle2.trim(),(0,i.c)()),l.push(t)},getDirection:()=>B,setDirection:t=>{B=t},addMember:F,addMembers:function(t,e){Array.isArray(e)&&(e.reverse(),e.forEach((e=>F(t,e))))},cleanupLabel:function(t){return t.startsWith(":")&&(t=t.substring(1)),C(t.trim())},lineType:{LINE:0,DOTTED_LINE:1},relationType:{AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3,LOLLIPOP:4},setClickEvent:function(t,e,s){t.split(",").forEach((function(t){k(t,e,s),h[t].haveCallback=!0})),g(t,"clickable")},setCssClass:g,setLink:function(t,e,s){const n=(0,i.c)();t.split(",").forEach((function(t){let u=t;t[0].match(/\d/)&&(u=o+u),void 0!==h[u]&&(h[u].link=i.u.formatUrl(e,n),"sandbox"===n.securityLevel?h[u].linkTarget="_top":h[u].linkTarget="string"==typeof s?C(s):"_blank")})),g(t,"clickable")},getTooltip:function(t,e){return e?d[e].classes[t].tooltip:h[t].tooltip},setTooltip:function(t,e){t.split(",").forEach((function(t){void 0!==e&&(h[t].tooltip=C(e))}))},lookUpDomId:b,setDiagramTitle:i.q,getDiagramTitle:i.t,setClassLabel:function(t,e){const s=i.e.sanitizeText(t,(0,i.c)());e&&(e=C(e));const{className:n}=m(s);h[n].label=e},addNamespace:function(t){void 0===d[t]&&(d[t]={id:t,classes:{},children:{},domId:o+t+"-"+y},y++)},addClassesToNamespace:function(t,e){if(void 0!==d[t])for(const s of e){const{className:e}=m(s);h[e].parent=t,d[t].classes[e]=h[e]}},getNamespace:function(t){return d[t]},getNamespaces:function(){return d},setCssStyle:function(t,e){const s=h[t];if(e&&s)for(const n of e)n.includes(",")?s.styles.push(...n.split(",")):s.styles.push(n)}},_=t=>`g.classGroup text {\n fill: ${t.nodeBorder||t.classText};\n stroke: none;\n font-family: ${t.fontFamily};\n font-size: 10px;\n\n .title {\n font-weight: bolder;\n }\n\n}\n\n.nodeLabel, .edgeLabel {\n color: ${t.classText};\n}\n.edgeLabel .label rect {\n fill: ${t.mainBkg};\n}\n.label text {\n fill: ${t.classText};\n}\n.edgeLabel .label span {\n background: ${t.mainBkg};\n}\n\n.classTitle {\n font-weight: bolder;\n}\n.node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n stroke-width: 1px;\n }\n\n\n.divider {\n stroke: ${t.nodeBorder};\n stroke-width: 1;\n}\n\ng.clickable {\n cursor: pointer;\n}\n\ng.classGroup rect {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n}\n\ng.classGroup line {\n stroke: ${t.nodeBorder};\n stroke-width: 1;\n}\n\n.classLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ${t.mainBkg};\n opacity: 0.5;\n}\n\n.classLabel .label {\n fill: ${t.nodeBorder};\n font-size: 10px;\n}\n\n.relation {\n stroke: ${t.lineColor};\n stroke-width: 1;\n fill: none;\n}\n\n.dashed-line{\n stroke-dasharray: 3;\n}\n\n.dotted-line{\n stroke-dasharray: 1 2;\n}\n\n#compositionStart, .composition {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#compositionEnd, .composition {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionStart, .extension {\n fill: transparent !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionEnd, .extension {\n fill: transparent !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationStart, .aggregation {\n fill: transparent !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationEnd, .aggregation {\n fill: transparent !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#lollipopStart, .lollipop {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#lollipopEnd, .lollipop {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n.edgeTerminals {\n font-size: 11px;\n line-height: initial;\n}\n\n.classTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n}\n`}}]); \ No newline at end of file diff --git a/assets/js/3706.3ef4ee36.js b/assets/js/3706.3ef4ee36.js new file mode 100644 index 0000000000..c43a37b15d --- /dev/null +++ b/assets/js/3706.3ef4ee36.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3706],{43706:(t,e,i)=>{i.d(e,{diagram:()=>T});var n=i(99702),r=i(26312),s=i(21176),a=i(697),l=(i(74353),i(16750),i(42838),function(){var t=function(t,e,i,n){for(i=i||{},n=t.length;n--;i[t[n]]=e);return i},e=[1,3],i=[1,4],n=[1,5],r=[1,6],s=[5,6,8,9,11,13,31,32,33,34,35,36,44,62,63],a=[1,18],l=[2,7],c=[1,22],o=[1,23],h=[1,24],u=[1,25],y=[1,26],d=[1,27],p=[1,20],_=[1,28],E=[1,29],g=[62,63],R=[5,8,9,11,13,31,32,33,34,35,36,44,51,53,62,63],m=[1,47],f=[1,48],I=[1,49],b=[1,50],k=[1,51],S=[1,52],T=[1,53],N=[53,54],x=[1,64],A=[1,60],v=[1,61],q=[1,62],$=[1,63],O=[1,65],w=[1,69],C=[1,70],L=[1,67],F=[1,68],M=[5,8,9,11,13,31,32,33,34,35,36,44,62,63],D={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,requirementType:17,requirementName:18,STRUCT_START:19,requirementBody:20,ID:21,COLONSEP:22,id:23,TEXT:24,text:25,RISK:26,riskLevel:27,VERIFYMTHD:28,verifyType:29,STRUCT_STOP:30,REQUIREMENT:31,FUNCTIONAL_REQUIREMENT:32,INTERFACE_REQUIREMENT:33,PERFORMANCE_REQUIREMENT:34,PHYSICAL_REQUIREMENT:35,DESIGN_CONSTRAINT:36,LOW_RISK:37,MED_RISK:38,HIGH_RISK:39,VERIFY_ANALYSIS:40,VERIFY_DEMONSTRATION:41,VERIFY_INSPECTION:42,VERIFY_TEST:43,ELEMENT:44,elementName:45,elementBody:46,TYPE:47,type:48,DOCREF:49,ref:50,END_ARROW_L:51,relationship:52,LINE:53,END_ARROW_R:54,CONTAINS:55,COPIES:56,DERIVES:57,SATISFIES:58,VERIFIES:59,REFINES:60,TRACES:61,unqString:62,qString:63,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",19:"STRUCT_START",21:"ID",22:"COLONSEP",24:"TEXT",26:"RISK",28:"VERIFYMTHD",30:"STRUCT_STOP",31:"REQUIREMENT",32:"FUNCTIONAL_REQUIREMENT",33:"INTERFACE_REQUIREMENT",34:"PERFORMANCE_REQUIREMENT",35:"PHYSICAL_REQUIREMENT",36:"DESIGN_CONSTRAINT",37:"LOW_RISK",38:"MED_RISK",39:"HIGH_RISK",40:"VERIFY_ANALYSIS",41:"VERIFY_DEMONSTRATION",42:"VERIFY_INSPECTION",43:"VERIFY_TEST",44:"ELEMENT",47:"TYPE",49:"DOCREF",51:"END_ARROW_L",53:"LINE",54:"END_ARROW_R",55:"CONTAINS",56:"COPIES",57:"DERIVES",58:"SATISFIES",59:"VERIFIES",60:"REFINES",61:"TRACES",62:"unqString",63:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[14,5],[20,5],[20,5],[20,5],[20,5],[20,2],[20,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[27,1],[27,1],[27,1],[29,1],[29,1],[29,1],[29,1],[15,5],[46,5],[46,5],[46,2],[46,1],[16,5],[16,5],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[18,1],[18,1],[23,1],[23,1],[25,1],[25,1],[45,1],[45,1],[48,1],[48,1],[50,1],[50,1]],performAction:function(t,e,i,n,r,s,a){var l=s.length-1;switch(r){case 4:this.$=s[l].trim(),n.setAccTitle(this.$);break;case 5:case 6:this.$=s[l].trim(),n.setAccDescription(this.$);break;case 7:this.$=[];break;case 13:n.addRequirement(s[l-3],s[l-4]);break;case 14:n.setNewReqId(s[l-2]);break;case 15:n.setNewReqText(s[l-2]);break;case 16:n.setNewReqRisk(s[l-2]);break;case 17:n.setNewReqVerifyMethod(s[l-2]);break;case 20:this.$=n.RequirementType.REQUIREMENT;break;case 21:this.$=n.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 22:this.$=n.RequirementType.INTERFACE_REQUIREMENT;break;case 23:this.$=n.RequirementType.PERFORMANCE_REQUIREMENT;break;case 24:this.$=n.RequirementType.PHYSICAL_REQUIREMENT;break;case 25:this.$=n.RequirementType.DESIGN_CONSTRAINT;break;case 26:this.$=n.RiskLevel.LOW_RISK;break;case 27:this.$=n.RiskLevel.MED_RISK;break;case 28:this.$=n.RiskLevel.HIGH_RISK;break;case 29:this.$=n.VerifyType.VERIFY_ANALYSIS;break;case 30:this.$=n.VerifyType.VERIFY_DEMONSTRATION;break;case 31:this.$=n.VerifyType.VERIFY_INSPECTION;break;case 32:this.$=n.VerifyType.VERIFY_TEST;break;case 33:n.addElement(s[l-3]);break;case 34:n.setNewElementType(s[l-2]);break;case 35:n.setNewElementDocRef(s[l-2]);break;case 38:n.addRelationship(s[l-2],s[l],s[l-4]);break;case 39:n.addRelationship(s[l-2],s[l-4],s[l]);break;case 40:this.$=n.Relationships.CONTAINS;break;case 41:this.$=n.Relationships.COPIES;break;case 42:this.$=n.Relationships.DERIVES;break;case 43:this.$=n.Relationships.SATISFIES;break;case 44:this.$=n.Relationships.VERIFIES;break;case 45:this.$=n.Relationships.REFINES;break;case 46:this.$=n.Relationships.TRACES}},table:[{3:1,4:2,6:e,9:i,11:n,13:r},{1:[3]},{3:8,4:2,5:[1,7],6:e,9:i,11:n,13:r},{5:[1,9]},{10:[1,10]},{12:[1,11]},t(s,[2,6]),{3:12,4:2,6:e,9:i,11:n,13:r},{1:[2,2]},{4:17,5:a,7:13,8:l,9:i,11:n,13:r,14:14,15:15,16:16,17:19,23:21,31:c,32:o,33:h,34:u,35:y,36:d,44:p,62:_,63:E},t(s,[2,4]),t(s,[2,5]),{1:[2,1]},{8:[1,30]},{4:17,5:a,7:31,8:l,9:i,11:n,13:r,14:14,15:15,16:16,17:19,23:21,31:c,32:o,33:h,34:u,35:y,36:d,44:p,62:_,63:E},{4:17,5:a,7:32,8:l,9:i,11:n,13:r,14:14,15:15,16:16,17:19,23:21,31:c,32:o,33:h,34:u,35:y,36:d,44:p,62:_,63:E},{4:17,5:a,7:33,8:l,9:i,11:n,13:r,14:14,15:15,16:16,17:19,23:21,31:c,32:o,33:h,34:u,35:y,36:d,44:p,62:_,63:E},{4:17,5:a,7:34,8:l,9:i,11:n,13:r,14:14,15:15,16:16,17:19,23:21,31:c,32:o,33:h,34:u,35:y,36:d,44:p,62:_,63:E},{4:17,5:a,7:35,8:l,9:i,11:n,13:r,14:14,15:15,16:16,17:19,23:21,31:c,32:o,33:h,34:u,35:y,36:d,44:p,62:_,63:E},{18:36,62:[1,37],63:[1,38]},{45:39,62:[1,40],63:[1,41]},{51:[1,42],53:[1,43]},t(g,[2,20]),t(g,[2,21]),t(g,[2,22]),t(g,[2,23]),t(g,[2,24]),t(g,[2,25]),t(R,[2,49]),t(R,[2,50]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{19:[1,44]},{19:[2,47]},{19:[2,48]},{19:[1,45]},{19:[2,53]},{19:[2,54]},{52:46,55:m,56:f,57:I,58:b,59:k,60:S,61:T},{52:54,55:m,56:f,57:I,58:b,59:k,60:S,61:T},{5:[1,55]},{5:[1,56]},{53:[1,57]},t(N,[2,40]),t(N,[2,41]),t(N,[2,42]),t(N,[2,43]),t(N,[2,44]),t(N,[2,45]),t(N,[2,46]),{54:[1,58]},{5:x,20:59,21:A,24:v,26:q,28:$,30:O},{5:w,30:C,46:66,47:L,49:F},{23:71,62:_,63:E},{23:72,62:_,63:E},t(M,[2,13]),{22:[1,73]},{22:[1,74]},{22:[1,75]},{22:[1,76]},{5:x,20:77,21:A,24:v,26:q,28:$,30:O},t(M,[2,19]),t(M,[2,33]),{22:[1,78]},{22:[1,79]},{5:w,30:C,46:80,47:L,49:F},t(M,[2,37]),t(M,[2,38]),t(M,[2,39]),{23:81,62:_,63:E},{25:82,62:[1,83],63:[1,84]},{27:85,37:[1,86],38:[1,87],39:[1,88]},{29:89,40:[1,90],41:[1,91],42:[1,92],43:[1,93]},t(M,[2,18]),{48:94,62:[1,95],63:[1,96]},{50:97,62:[1,98],63:[1,99]},t(M,[2,36]),{5:[1,100]},{5:[1,101]},{5:[2,51]},{5:[2,52]},{5:[1,102]},{5:[2,26]},{5:[2,27]},{5:[2,28]},{5:[1,103]},{5:[2,29]},{5:[2,30]},{5:[2,31]},{5:[2,32]},{5:[1,104]},{5:[2,55]},{5:[2,56]},{5:[1,105]},{5:[2,57]},{5:[2,58]},{5:x,20:106,21:A,24:v,26:q,28:$,30:O},{5:x,20:107,21:A,24:v,26:q,28:$,30:O},{5:x,20:108,21:A,24:v,26:q,28:$,30:O},{5:x,20:109,21:A,24:v,26:q,28:$,30:O},{5:w,30:C,46:110,47:L,49:F},{5:w,30:C,46:111,47:L,49:F},t(M,[2,14]),t(M,[2,15]),t(M,[2,16]),t(M,[2,17]),t(M,[2,34]),t(M,[2,35])],defaultActions:{8:[2,2],12:[2,1],30:[2,3],31:[2,8],32:[2,9],33:[2,10],34:[2,11],35:[2,12],37:[2,47],38:[2,48],40:[2,53],41:[2,54],83:[2,51],84:[2,52],86:[2,26],87:[2,27],88:[2,28],90:[2,29],91:[2,30],92:[2,31],93:[2,32],95:[2,55],96:[2,56],98:[2,57],99:[2,58]},parseError:function(t,e){if(!e.recoverable){var i=new Error(t);throw i.hash=e,i}this.trace(t)},parse:function(t){var e=this,i=[0],n=[],r=[null],s=[],a=this.table,l="",c=0,o=0,h=s.slice.call(arguments,1),u=Object.create(this.lexer),y={yy:{}};for(var d in this.yy)Object.prototype.hasOwnProperty.call(this.yy,d)&&(y.yy[d]=this.yy[d]);u.setInput(t,y.yy),y.yy.lexer=u,y.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var p=u.yylloc;s.push(p);var _=u.options&&u.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var E,g,R,m,f,I,b,k,S,T={};;){if(g=i[i.length-1],this.defaultActions[g]?R=this.defaultActions[g]:(null==E&&(S=void 0,"number"!=typeof(S=n.pop()||u.lex()||1)&&(S instanceof Array&&(S=(n=S).pop()),S=e.symbols_[S]||S),E=S),R=a[g]&&a[g][E]),void 0===R||!R.length||!R[0]){var N="";for(f in k=[],a[g])this.terminals_[f]&&f>2&&k.push("'"+this.terminals_[f]+"'");N=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+k.join(", ")+", got '"+(this.terminals_[E]||E)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==E?"end of input":"'"+(this.terminals_[E]||E)+"'"),this.parseError(N,{text:u.match,token:this.terminals_[E]||E,line:u.yylineno,loc:p,expected:k})}if(R[0]instanceof Array&&R.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+E);switch(R[0]){case 1:i.push(E),r.push(u.yytext),s.push(u.yylloc),i.push(R[1]),E=null,o=u.yyleng,l=u.yytext,c=u.yylineno,p=u.yylloc;break;case 2:if(I=this.productions_[R[1]][1],T.$=r[r.length-I],T._$={first_line:s[s.length-(I||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(I||1)].first_column,last_column:s[s.length-1].last_column},_&&(T._$.range=[s[s.length-(I||1)].range[0],s[s.length-1].range[1]]),void 0!==(m=this.performAction.apply(T,[l,o,c,y.yy,R[1],r,s].concat(h))))return m;I&&(i=i.slice(0,-1*I*2),r=r.slice(0,-1*I),s=s.slice(0,-1*I)),i.push(this.productions_[R[1]][0]),r.push(T.$),s.push(T._$),b=a[i[i.length-2]][i[i.length-1]],i.push(b);break;case 3:return!0}}return!0}},P={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,i=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===n.length?this.yylloc.first_column:0)+n[n.length-i.length].length-i[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var i,n,r;if(this.options.backtrack_lexer&&(r={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(r.yylloc.range=this.yylloc.range.slice(0))),(n=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],i=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),i)return i;if(this._backtrack){for(var s in r)this[s]=r[s];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,i,n;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var r=this._currentRules(),s=0;se[0].length)){if(e=i,n=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(i,r[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,r[n]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,i,n){switch(i){case 0:return"title";case 1:return this.begin("acc_title"),9;case 2:return this.popState(),"acc_title_value";case 3:return this.begin("acc_descr"),11;case 4:return this.popState(),"acc_descr_value";case 5:this.begin("acc_descr_multiline");break;case 6:case 48:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:return 5;case 9:case 10:case 11:break;case 12:return 8;case 13:return 6;case 14:return 19;case 15:return 30;case 16:return 22;case 17:return 21;case 18:return 24;case 19:return 26;case 20:return 28;case 21:return 31;case 22:return 32;case 23:return 33;case 24:return 34;case 25:return 35;case 26:return 36;case 27:return 37;case 28:return 38;case 29:return 39;case 30:return 40;case 31:return 41;case 32:return 42;case 33:return 43;case 34:return 44;case 35:return 55;case 36:return 56;case 37:return 57;case 38:return 58;case 39:return 59;case 40:return 60;case 41:return 61;case 42:return 47;case 43:return 49;case 44:return 51;case 45:return 54;case 46:return 53;case 47:this.begin("string");break;case 49:return"qString";case 50:return e.yytext=e.yytext.trim(),62}},rules:[/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^\r\n\{\<\>\-\=]*)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[48,49],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,50],inclusive:!0}}};function V(){this.yy={}}return D.lexer=P,V.prototype=D,D.Parser=V,new V}());l.parser=l;const c=l;let o=[],h={},u={},y={},d={};const p={RequirementType:{REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"},RiskLevel:{LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"},VerifyType:{VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"},Relationships:{CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"},getConfig:()=>(0,n.c)().req,addRequirement:(t,e)=>(void 0===u[t]&&(u[t]={name:t,type:e,id:h.id,text:h.text,risk:h.risk,verifyMethod:h.verifyMethod}),h={},u[t]),getRequirements:()=>u,setNewReqId:t=>{void 0!==h&&(h.id=t)},setNewReqText:t=>{void 0!==h&&(h.text=t)},setNewReqRisk:t=>{void 0!==h&&(h.risk=t)},setNewReqVerifyMethod:t=>{void 0!==h&&(h.verifyMethod=t)},setAccTitle:n.s,getAccTitle:n.g,setAccDescription:n.b,getAccDescription:n.a,addElement:t=>(void 0===d[t]&&(d[t]={name:t,type:y.type,docRef:y.docRef},n.l.info("Added new requirement: ",t)),y={},d[t]),getElements:()=>d,setNewElementType:t=>{void 0!==y&&(y.type=t)},setNewElementDocRef:t=>{void 0!==y&&(y.docRef=t)},addRelationship:(t,e,i)=>{o.push({type:t,src:e,dst:i})},getRelationships:()=>o,clear:()=>{o=[],h={},u={},y={},d={},(0,n.v)()}},_={CONTAINS:"contains",ARROW:"arrow"},E=_,g=(t,e)=>{let i=t.append("defs").append("marker").attr("id",_.CONTAINS+"_line_ending").attr("refX",0).attr("refY",e.line_height/2).attr("markerWidth",e.line_height).attr("markerHeight",e.line_height).attr("orient","auto").append("g");i.append("circle").attr("cx",e.line_height/2).attr("cy",e.line_height/2).attr("r",e.line_height/2).attr("fill","none"),i.append("line").attr("x1",0).attr("x2",e.line_height).attr("y1",e.line_height/2).attr("y2",e.line_height/2).attr("stroke-width",1),i.append("line").attr("y1",0).attr("y2",e.line_height).attr("x1",e.line_height/2).attr("x2",e.line_height/2).attr("stroke-width",1),t.append("defs").append("marker").attr("id",_.ARROW+"_line_ending").attr("refX",e.line_height).attr("refY",.5*e.line_height).attr("markerWidth",e.line_height).attr("markerHeight",e.line_height).attr("orient","auto").append("path").attr("d",`M0,0\n L${e.line_height},${e.line_height/2}\n M${e.line_height},${e.line_height/2}\n L0,${e.line_height}`).attr("stroke-width",1)};let R={},m=0;const f=(t,e)=>t.insert("rect","#"+e).attr("class","req reqBox").attr("x",0).attr("y",0).attr("width",R.rect_min_width+"px").attr("height",R.rect_min_height+"px"),I=(t,e,i)=>{let n=R.rect_min_width/2,r=t.append("text").attr("class","req reqLabel reqTitle").attr("id",e).attr("x",n).attr("y",R.rect_padding).attr("dominant-baseline","hanging"),s=0;i.forEach((t=>{0==s?r.append("tspan").attr("text-anchor","middle").attr("x",R.rect_min_width/2).attr("dy",0).text(t):r.append("tspan").attr("text-anchor","middle").attr("x",R.rect_min_width/2).attr("dy",.75*R.line_height).text(t),s++}));let a=1.5*R.rect_padding+s*R.line_height*.75;return t.append("line").attr("class","req-title-line").attr("x1","0").attr("x2",R.rect_min_width).attr("y1",a).attr("y2",a),{titleNode:r,y:a}},b=(t,e,i,n)=>{let r=t.append("text").attr("class","req reqLabel").attr("id",e).attr("x",R.rect_padding).attr("y",n).attr("dominant-baseline","hanging"),s=0;let a=[];return i.forEach((t=>{let e=t.length;for(;e>30&&s<3;){let i=t.substring(0,30);e=(t=t.substring(30,t.length)).length,a[a.length]=i,s++}if(3==s){let t=a[a.length-1];a[a.length-1]=t.substring(0,t.length-4)+"..."}else a[a.length]=t;s=0})),a.forEach((t=>{r.append("tspan").attr("x",R.rect_padding).attr("dy",R.line_height).text(t)})),r},k=function(t,e,i,s,a){const l=i.edge(S(e.src),S(e.dst)),c=(0,r.n8j)().x((function(t){return t.x})).y((function(t){return t.y})),o=t.insert("path","#"+s).attr("class","er relationshipLine").attr("d",c(l.points)).attr("fill","none");e.type==a.db.Relationships.CONTAINS?o.attr("marker-start","url("+n.e.getUrl(R.arrowMarkerAbsolute)+"#"+e.type+"_line_ending)"):(o.attr("stroke-dasharray","10,7"),o.attr("marker-end","url("+n.e.getUrl(R.arrowMarkerAbsolute)+"#"+E.ARROW+"_line_ending)")),((t,e,i,n)=>{const r=e.node().getTotalLength(),s=e.node().getPointAtLength(.5*r),a="rel"+m;m++;const l=t.append("text").attr("class","req relationshipLabel").attr("id",a).attr("x",s.x).attr("y",s.y).attr("text-anchor","middle").attr("dominant-baseline","middle").text(n).node().getBBox();t.insert("rect","#"+a).attr("class","req reqLabelBox").attr("x",s.x-l.width/2).attr("y",s.y-l.height/2).attr("width",l.width).attr("height",l.height).attr("fill","white").attr("fill-opacity","85%")})(t,o,0,`<<${e.type}>>`)},S=t=>t.replace(/\s/g,"").replace(/\./g,"_"),T={parser:c,db:p,renderer:{draw:(t,e,i,l)=>{R=(0,n.c)().requirement;const c=R.securityLevel;let o;"sandbox"===c&&(o=(0,r.Ltv)("#i"+e));const h=("sandbox"===c?(0,r.Ltv)(o.nodes()[0].contentDocument.body):(0,r.Ltv)("body")).select(`[id='${e}']`);g(h,R);const u=new a.T({multigraph:!1,compound:!1,directed:!0}).setGraph({rankdir:R.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel((function(){return{}}));let y=l.db.getRequirements(),d=l.db.getElements(),p=l.db.getRelationships();var _,E,m;_=y,E=u,m=h,Object.keys(_).forEach((t=>{let e=_[t];t=S(t),n.l.info("Added new requirement: ",t);const i=m.append("g").attr("id",t),r=f(i,"req-"+t);let s=I(i,t+"_title",[`<<${e.type}>>`,`${e.name}`]);b(i,t+"_body",[`Id: ${e.id}`,`Text: ${e.text}`,`Risk: ${e.risk}`,`Verification: ${e.verifyMethod}`],s.y);const a=r.node().getBBox();E.setNode(t,{width:a.width,height:a.height,shape:"rect",id:t})})),((t,e,i)=>{Object.keys(t).forEach((n=>{let r=t[n];const s=S(n),a=i.append("g").attr("id",s),l="element-"+s,c=f(a,l);let o=I(a,l+"_title",["<>",`${n}`]);b(a,l+"_body",[`Type: ${r.type||"Not Specified"}`,`Doc Ref: ${r.docRef||"None"}`],o.y);const h=c.node().getBBox();e.setNode(s,{width:h.width,height:h.height,shape:"rect",id:s})}))})(d,u,h),((t,e)=>{t.forEach((function(t){let i=S(t.src),n=S(t.dst);e.setEdge(i,n,{relationship:t})}))})(p,u),(0,s.Zp)(u),function(t,e){e.nodes().forEach((function(i){void 0!==i&&void 0!==e.node(i)&&(t.select("#"+i),t.select("#"+i).attr("transform","translate("+(e.node(i).x-e.node(i).width/2)+","+(e.node(i).y-e.node(i).height/2)+" )"))}))}(h,u),p.forEach((function(t){k(h,t,u,e,l)}));const T=R.rect_padding,N=h.node().getBBox(),x=N.width+2*T,A=N.height+2*T;(0,n.i)(h,A,x,R.useMaxWidth),h.attr("viewBox",`${N.x-T} ${N.y-T} ${x} ${A}`)}},styles:t=>`\n\n marker {\n fill: ${t.relationColor};\n stroke: ${t.relationColor};\n }\n\n marker.cross {\n stroke: ${t.lineColor};\n }\n\n svg {\n font-family: ${t.fontFamily};\n font-size: ${t.fontSize};\n }\n\n .reqBox {\n fill: ${t.requirementBackground};\n fill-opacity: 1.0;\n stroke: ${t.requirementBorderColor};\n stroke-width: ${t.requirementBorderSize};\n }\n \n .reqTitle, .reqLabel{\n fill: ${t.requirementTextColor};\n }\n .reqLabelBox {\n fill: ${t.relationLabelBackground};\n fill-opacity: 1.0;\n }\n\n .req-title-line {\n stroke: ${t.requirementBorderColor};\n stroke-width: ${t.requirementBorderSize};\n }\n .relationshipLine {\n stroke: ${t.relationColor};\n stroke-width: 1;\n }\n .relationshipLabel {\n fill: ${t.relationLabelColor};\n }\n\n`}}}]); \ No newline at end of file diff --git a/assets/js/3720c009.784ce305.js b/assets/js/3720c009.784ce305.js new file mode 100644 index 0000000000..94de3a6562 --- /dev/null +++ b/assets/js/3720c009.784ce305.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4787],{30876:(t,e,a)=>{a.r(e),a.d(e,{default:()=>p});a(96540);var s=a(34164),n=a(1003),r=a(17559),l=a(21312);const c=()=>(0,l.T)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});var i=a(56133),o=a(51107);const g={tag:"tag_Nnez"};var u=a(74848);function h(t){let{letterEntry:e}=t;return(0,u.jsxs)("article",{children:[(0,u.jsx)(o.A,{as:"h2",id:e.letter,children:e.letter}),(0,u.jsx)("ul",{className:"padding--none",children:e.tags.map((t=>(0,u.jsx)("li",{className:g.tag,children:(0,u.jsx)(i.A,{...t})},t.permalink)))}),(0,u.jsx)("hr",{})]})}function d(t){let{tags:e}=t;const a=function(t){const e={};return Object.values(t).forEach((t=>{const a=function(t){return t[0].toUpperCase()}(t.label);e[a]??=[],e[a].push(t)})),Object.entries(e).sort(((t,e)=>{let[a]=t,[s]=e;return a.localeCompare(s)})).map((t=>{let[e,a]=t;return{letter:e,tags:a.sort(((t,e)=>t.label.localeCompare(e.label)))}}))}(e);return(0,u.jsx)("section",{className:"margin-vert--lg",children:a.map((t=>(0,u.jsx)(h,{letterEntry:t},t.letter)))})}var j=a(41463);function m(t){let{title:e}=t;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(n.be,{title:e}),(0,u.jsx)(j.A,{tag:"doc_tags_list"})]})}function x(t){let{tags:e,title:a}=t;return(0,u.jsx)(n.e3,{className:(0,s.A)(r.G.page.docsTagsListPage),children:(0,u.jsx)("div",{className:"container margin-vert--lg",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("main",{className:"col col--8 col--offset-2",children:[(0,u.jsx)(o.A,{as:"h1",children:a}),(0,u.jsx)(d,{tags:e})]})})})})}function p(t){const e=c();return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(m,{...t,title:e}),(0,u.jsx)(x,{...t,title:e})]})}},56133:(t,e,a)=>{a.d(e,{A:()=>c});a(96540);var s=a(34164),n=a(28774);const r={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var l=a(74848);function c(t){let{permalink:e,label:a,count:c,description:i}=t;return(0,l.jsxs)(n.A,{href:e,title:i,className:(0,s.A)(r.tag,c?r.tagWithCount:r.tagRegular),children:[a,c&&(0,l.jsx)("span",{children:c})]})}}}]); \ No newline at end of file diff --git a/assets/js/376.dedd6ca6.js b/assets/js/376.dedd6ca6.js new file mode 100644 index 0000000000..7c19cb3ba3 --- /dev/null +++ b/assets/js/376.dedd6ca6.js @@ -0,0 +1,1242 @@ +"use strict"; +exports.id = 376; +exports.ids = [376]; +exports.modules = { + +/***/ 42376: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99702); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(3219); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(78041); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(75263); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74353); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(16750); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99418); + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [6, 8, 10, 11, 12, 14, 16, 17, 20, 21], $V1 = [1, 9], $V2 = [1, 10], $V3 = [1, 11], $V4 = [1, 12], $V5 = [1, 13], $V6 = [1, 16], $V7 = [1, 17]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "timeline": 4, "document": 5, "EOF": 6, "line": 7, "SPACE": 8, "statement": 9, "NEWLINE": 10, "title": 11, "acc_title": 12, "acc_title_value": 13, "acc_descr": 14, "acc_descr_value": 15, "acc_descr_multiline_value": 16, "section": 17, "period_statement": 18, "event_statement": 19, "period": 20, "event": 21, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "timeline", 6: "EOF", 8: "SPACE", 10: "NEWLINE", 11: "title", 12: "acc_title", 13: "acc_title_value", 14: "acc_descr", 15: "acc_descr_value", 16: "acc_descr_multiline_value", 17: "section", 20: "period", 21: "event" }, + productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [9, 1], [9, 2], [9, 2], [9, 1], [9, 1], [9, 1], [9, 1], [18, 1], [19, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 1: + return $$[$0 - 1]; + case 2: + this.$ = []; + break; + case 3: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 4: + case 5: + this.$ = $$[$0]; + break; + case 6: + case 7: + this.$ = []; + break; + case 8: + yy.getCommonDb().setDiagramTitle($$[$0].substr(6)); + this.$ = $$[$0].substr(6); + break; + case 9: + this.$ = $$[$0].trim(); + yy.getCommonDb().setAccTitle(this.$); + break; + case 10: + case 11: + this.$ = $$[$0].trim(); + yy.getCommonDb().setAccDescription(this.$); + break; + case 12: + yy.addSection($$[$0].substr(8)); + this.$ = $$[$0].substr(8); + break; + case 15: + yy.addTask($$[$0], 0, ""); + this.$ = $$[$0]; + break; + case 16: + yy.addEvent($$[$0].substr(2)); + this.$ = $$[$0]; + break; + } + }, + table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: [1, 6], 9: 7, 10: [1, 8], 11: $V1, 12: $V2, 14: $V3, 16: $V4, 17: $V5, 18: 14, 19: 15, 20: $V6, 21: $V7 }, o($V0, [2, 7], { 1: [2, 1] }), o($V0, [2, 3]), { 9: 18, 11: $V1, 12: $V2, 14: $V3, 16: $V4, 17: $V5, 18: 14, 19: 15, 20: $V6, 21: $V7 }, o($V0, [2, 5]), o($V0, [2, 6]), o($V0, [2, 8]), { 13: [1, 19] }, { 15: [1, 20] }, o($V0, [2, 11]), o($V0, [2, 12]), o($V0, [2, 13]), o($V0, [2, 14]), o($V0, [2, 15]), o($V0, [2, 16]), o($V0, [2, 4]), o($V0, [2, 9]), o($V0, [2, 10])], + defaultActions: {}, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + break; + case 1: + break; + case 2: + return 10; + case 3: + break; + case 4: + break; + case 5: + return 4; + case 6: + return 11; + case 7: + this.begin("acc_title"); + return 12; + case 8: + this.popState(); + return "acc_title_value"; + case 9: + this.begin("acc_descr"); + return 14; + case 10: + this.popState(); + return "acc_descr_value"; + case 11: + this.begin("acc_descr_multiline"); + break; + case 12: + this.popState(); + break; + case 13: + return "acc_descr_multiline_value"; + case 14: + return 17; + case 15: + return 21; + case 16: + return 20; + case 17: + return 6; + case 18: + return "INVALID"; + } + }, + rules: [/^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:timeline\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:section\s[^#:\n;]+)/i, /^(?::\s[^#:\n;]+)/i, /^(?:[^#:\n;]+)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "acc_descr_multiline": { "rules": [12, 13], "inclusive": false }, "acc_descr": { "rules": [10], "inclusive": false }, "acc_title": { "rules": [8], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 18], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +let currentSection = ""; +let currentTaskId = 0; +const sections = []; +const tasks = []; +const rawTasks = []; +const getCommonDb = () => _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.L; +const clear = function() { + sections.length = 0; + tasks.length = 0; + currentSection = ""; + rawTasks.length = 0; + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.v)(); +}; +const addSection = function(txt) { + currentSection = txt; + sections.push(txt); +}; +const getSections = function() { + return sections; +}; +const getTasks = function() { + let allItemsProcessed = compileTasks(); + const maxDepth = 100; + let iterationCount = 0; + while (!allItemsProcessed && iterationCount < maxDepth) { + allItemsProcessed = compileTasks(); + iterationCount++; + } + tasks.push(...rawTasks); + return tasks; +}; +const addTask = function(period, length, event) { + const rawTask = { + id: currentTaskId++, + section: currentSection, + type: currentSection, + task: period, + score: length ? length : 0, + //if event is defined, then add it the events array + events: event ? [event] : [] + }; + rawTasks.push(rawTask); +}; +const addEvent = function(event) { + const currentTask = rawTasks.find((task) => task.id === currentTaskId - 1); + currentTask.events.push(event); +}; +const addTaskOrg = function(descr) { + const newTask = { + section: currentSection, + type: currentSection, + description: descr, + task: descr, + classes: [] + }; + tasks.push(newTask); +}; +const compileTasks = function() { + const compileTask = function(pos) { + return rawTasks[pos].processed; + }; + let allProcessed = true; + for (const [i, rawTask] of rawTasks.entries()) { + compileTask(i); + allProcessed = allProcessed && rawTask.processed; + } + return allProcessed; +}; +const timelineDb = { + clear, + getCommonDb, + addSection, + getSections, + getTasks, + addTask, + addTaskOrg, + addEvent +}; +const db = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + addEvent, + addSection, + addTask, + addTaskOrg, + clear, + default: timelineDb, + getCommonDb, + getSections, + getTasks +}, Symbol.toStringTag, { value: "Module" })); +const MAX_SECTIONS = 12; +const drawRect = function(elem, rectData) { + const rectElem = elem.append("rect"); + rectElem.attr("x", rectData.x); + rectElem.attr("y", rectData.y); + rectElem.attr("fill", rectData.fill); + rectElem.attr("stroke", rectData.stroke); + rectElem.attr("width", rectData.width); + rectElem.attr("height", rectData.height); + rectElem.attr("rx", rectData.rx); + rectElem.attr("ry", rectData.ry); + if (rectData.class !== void 0) { + rectElem.attr("class", rectData.class); + } + return rectElem; +}; +const drawFace = function(element, faceData) { + const radius = 15; + const circleElement = element.append("circle").attr("cx", faceData.cx).attr("cy", faceData.cy).attr("class", "face").attr("r", radius).attr("stroke-width", 2).attr("overflow", "visible"); + const face = element.append("g"); + face.append("circle").attr("cx", faceData.cx - radius / 3).attr("cy", faceData.cy - radius / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); + face.append("circle").attr("cx", faceData.cx + radius / 3).attr("cy", faceData.cy - radius / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); + function smile(face2) { + const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .JLW)().startAngle(Math.PI / 2).endAngle(3 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2); + face2.append("path").attr("class", "mouth").attr("d", arc$1).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 2) + ")"); + } + function sad(face2) { + const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .JLW)().startAngle(3 * Math.PI / 2).endAngle(5 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2); + face2.append("path").attr("class", "mouth").attr("d", arc$1).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 7) + ")"); + } + function ambivalent(face2) { + face2.append("line").attr("class", "mouth").attr("stroke", 2).attr("x1", faceData.cx - 5).attr("y1", faceData.cy + 7).attr("x2", faceData.cx + 5).attr("y2", faceData.cy + 7).attr("class", "mouth").attr("stroke-width", "1px").attr("stroke", "#666"); + } + if (faceData.score > 3) { + smile(face); + } else if (faceData.score < 3) { + sad(face); + } else { + ambivalent(face); + } + return circleElement; +}; +const drawCircle = function(element, circleData) { + const circleElement = element.append("circle"); + circleElement.attr("cx", circleData.cx); + circleElement.attr("cy", circleData.cy); + circleElement.attr("class", "actor-" + circleData.pos); + circleElement.attr("fill", circleData.fill); + circleElement.attr("stroke", circleData.stroke); + circleElement.attr("r", circleData.r); + if (circleElement.class !== void 0) { + circleElement.attr("class", circleElement.class); + } + if (circleData.title !== void 0) { + circleElement.append("title").text(circleData.title); + } + return circleElement; +}; +const drawText = function(elem, textData) { + const nText = textData.text.replace(//gi, " "); + const textElem = elem.append("text"); + textElem.attr("x", textData.x); + textElem.attr("y", textData.y); + textElem.attr("class", "legend"); + textElem.style("text-anchor", textData.anchor); + if (textData.class !== void 0) { + textElem.attr("class", textData.class); + } + const span = textElem.append("tspan"); + span.attr("x", textData.x + textData.textMargin * 2); + span.text(nText); + return textElem; +}; +const drawLabel = function(elem, txtObject) { + function genPoints(x, y, width, height, cut) { + return x + "," + y + " " + (x + width) + "," + y + " " + (x + width) + "," + (y + height - cut) + " " + (x + width - cut * 1.2) + "," + (y + height) + " " + x + "," + (y + height); + } + const polygon = elem.append("polygon"); + polygon.attr("points", genPoints(txtObject.x, txtObject.y, 50, 20, 7)); + polygon.attr("class", "labelBox"); + txtObject.y = txtObject.y + txtObject.labelMargin; + txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin; + drawText(elem, txtObject); +}; +const drawSection = function(elem, section, conf) { + const g = elem.append("g"); + const rect = getNoteRect(); + rect.x = section.x; + rect.y = section.y; + rect.fill = section.fill; + rect.width = conf.width; + rect.height = conf.height; + rect.class = "journey-section section-type-" + section.num; + rect.rx = 3; + rect.ry = 3; + drawRect(g, rect); + _drawTextCandidateFunc(conf)( + section.text, + g, + rect.x, + rect.y, + rect.width, + rect.height, + { class: "journey-section section-type-" + section.num }, + conf, + section.colour + ); +}; +let taskCount = -1; +const drawTask = function(elem, task, conf) { + const center = task.x + conf.width / 2; + const g = elem.append("g"); + taskCount++; + const maxHeight = 300 + 5 * 30; + g.append("line").attr("id", "task" + taskCount).attr("x1", center).attr("y1", task.y).attr("x2", center).attr("y2", maxHeight).attr("class", "task-line").attr("stroke-width", "1px").attr("stroke-dasharray", "4 2").attr("stroke", "#666"); + drawFace(g, { + cx: center, + cy: 300 + (5 - task.score) * 30, + score: task.score + }); + const rect = getNoteRect(); + rect.x = task.x; + rect.y = task.y; + rect.fill = task.fill; + rect.width = conf.width; + rect.height = conf.height; + rect.class = "task task-type-" + task.num; + rect.rx = 3; + rect.ry = 3; + drawRect(g, rect); + task.x + 14; + _drawTextCandidateFunc(conf)( + task.task, + g, + rect.x, + rect.y, + rect.width, + rect.height, + { class: "task" }, + conf, + task.colour + ); +}; +const drawBackgroundRect = function(elem, bounds) { + const rectElem = drawRect(elem, { + x: bounds.startx, + y: bounds.starty, + width: bounds.stopx - bounds.startx, + height: bounds.stopy - bounds.starty, + fill: bounds.fill, + class: "rect" + }); + rectElem.lower(); +}; +const getTextObj = function() { + return { + x: 0, + y: 0, + fill: void 0, + "text-anchor": "start", + width: 100, + height: 100, + textMargin: 0, + rx: 0, + ry: 0 + }; +}; +const getNoteRect = function() { + return { + x: 0, + y: 0, + width: 100, + anchor: "start", + height: 100, + rx: 0, + ry: 0 + }; +}; +const _drawTextCandidateFunc = function() { + function byText(content, g, x, y, width, height, textAttrs, colour) { + const text = g.append("text").attr("x", x + width / 2).attr("y", y + height / 2 + 5).style("font-color", colour).style("text-anchor", "middle").text(content); + _setTextAttrs(text, textAttrs); + } + function byTspan(content, g, x, y, width, height, textAttrs, conf, colour) { + const { taskFontSize, taskFontFamily } = conf; + const lines = content.split(//gi); + for (let i = 0; i < lines.length; i++) { + const dy = i * taskFontSize - taskFontSize * (lines.length - 1) / 2; + const text = g.append("text").attr("x", x + width / 2).attr("y", y).attr("fill", colour).style("text-anchor", "middle").style("font-size", taskFontSize).style("font-family", taskFontFamily); + text.append("tspan").attr("x", x + width / 2).attr("dy", dy).text(lines[i]); + text.attr("y", y + height / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); + _setTextAttrs(text, textAttrs); + } + } + function byFo(content, g, x, y, width, height, textAttrs, conf) { + const body = g.append("switch"); + const f = body.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height).attr("position", "fixed"); + const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); + text.append("div").attr("class", "label").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); + byTspan(content, body, x, y, width, height, textAttrs, conf); + _setTextAttrs(text, textAttrs); + } + function _setTextAttrs(toText, fromTextAttrsDict) { + for (const key in fromTextAttrsDict) { + if (key in fromTextAttrsDict) { + toText.attr(key, fromTextAttrsDict[key]); + } + } + } + return function(conf) { + return conf.textPlacement === "fo" ? byFo : conf.textPlacement === "old" ? byText : byTspan; + }; +}(); +const initGraphics = function(graphics) { + graphics.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 5).attr("refY", 2).attr("markerWidth", 6).attr("markerHeight", 4).attr("orient", "auto").append("path").attr("d", "M 0,0 V 4 L6,2 Z"); +}; +function wrap(text, width) { + text.each(function() { + var text2 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(this), words = text2.text().split(/(\s+|
    )/).reverse(), word, line = [], lineHeight = 1.1, y = text2.attr("y"), dy = parseFloat(text2.attr("dy")), tspan = text2.text(null).append("tspan").attr("x", 0).attr("y", y).attr("dy", dy + "em"); + for (let j = 0; j < words.length; j++) { + word = words[words.length - 1 - j]; + line.push(word); + tspan.text(line.join(" ").trim()); + if (tspan.node().getComputedTextLength() > width || word === "
    ") { + line.pop(); + tspan.text(line.join(" ").trim()); + if (word === "
    ") { + line = [""]; + } else { + line = [word]; + } + tspan = text2.append("tspan").attr("x", 0).attr("y", y).attr("dy", lineHeight + "em").text(word); + } + } + }); +} +const drawNode = function(elem, node, fullSection, conf) { + const section = fullSection % MAX_SECTIONS - 1; + const nodeElem = elem.append("g"); + node.section = section; + nodeElem.attr( + "class", + (node.class ? node.class + " " : "") + "timeline-node " + ("section-" + section) + ); + const bkgElem = nodeElem.append("g"); + const textElem = nodeElem.append("g"); + const txt = textElem.append("text").text(node.descr).attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle").call(wrap, node.width); + const bbox = txt.node().getBBox(); + const fontSize = conf.fontSize && conf.fontSize.replace ? conf.fontSize.replace("px", "") : conf.fontSize; + node.height = bbox.height + fontSize * 1.1 * 0.5 + node.padding; + node.height = Math.max(node.height, node.maxHeight); + node.width = node.width + 2 * node.padding; + textElem.attr("transform", "translate(" + node.width / 2 + ", " + node.padding / 2 + ")"); + defaultBkg(bkgElem, node, section); + return node; +}; +const getVirtualNodeHeight = function(elem, node, conf) { + const textElem = elem.append("g"); + const txt = textElem.append("text").text(node.descr).attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle").call(wrap, node.width); + const bbox = txt.node().getBBox(); + const fontSize = conf.fontSize && conf.fontSize.replace ? conf.fontSize.replace("px", "") : conf.fontSize; + textElem.remove(); + return bbox.height + fontSize * 1.1 * 0.5 + node.padding; +}; +const defaultBkg = function(elem, node, section) { + const rd = 5; + elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + node.type).attr( + "d", + `M0 ${node.height - rd} v${-node.height + 2 * rd} q0,-5 5,-5 h${node.width - 2 * rd} q5,0 5,5 v${node.height - rd} H0 Z` + ); + elem.append("line").attr("class", "node-line-" + section).attr("x1", 0).attr("y1", node.height).attr("x2", node.width).attr("y2", node.height); +}; +const svgDraw = { + drawRect, + drawCircle, + drawSection, + drawText, + drawLabel, + drawTask, + drawBackgroundRect, + getTextObj, + getNoteRect, + initGraphics, + drawNode, + getVirtualNodeHeight +}; +const draw = function(text, id, version, diagObj) { + var _a, _b; + const conf = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + const LEFT_MARGIN = conf.leftMargin ?? 50; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("timeline", diagObj.db); + const securityLevel = conf.securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("body"); + const svg = root.select("#" + id); + svg.append("g"); + const tasks2 = diagObj.db.getTasks(); + const title = diagObj.db.getCommonDb().getDiagramTitle(); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("task", tasks2); + svgDraw.initGraphics(svg); + const sections2 = diagObj.db.getSections(); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("sections", sections2); + let maxSectionHeight = 0; + let maxTaskHeight = 0; + let depthY = 0; + let sectionBeginY = 0; + let masterX = 50 + LEFT_MARGIN; + let masterY = 50; + sectionBeginY = 50; + let sectionNumber = 0; + let hasSections = true; + sections2.forEach(function(section) { + const sectionNode = { + number: sectionNumber, + descr: section, + section: sectionNumber, + width: 150, + padding: 20, + maxHeight: maxSectionHeight + }; + const sectionHeight = svgDraw.getVirtualNodeHeight(svg, sectionNode, conf); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("sectionHeight before draw", sectionHeight); + maxSectionHeight = Math.max(maxSectionHeight, sectionHeight + 20); + }); + let maxEventCount = 0; + let maxEventLineLength = 0; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("tasks.length", tasks2.length); + for (const [i, task] of tasks2.entries()) { + const taskNode = { + number: i, + descr: task, + section: task.section, + width: 150, + padding: 20, + maxHeight: maxTaskHeight + }; + const taskHeight = svgDraw.getVirtualNodeHeight(svg, taskNode, conf); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("taskHeight before draw", taskHeight); + maxTaskHeight = Math.max(maxTaskHeight, taskHeight + 20); + maxEventCount = Math.max(maxEventCount, task.events.length); + let maxEventLineLengthTemp = 0; + for (let j = 0; j < task.events.length; j++) { + const event = task.events[j]; + const eventNode = { + descr: event, + section: task.section, + number: task.section, + width: 150, + padding: 20, + maxHeight: 50 + }; + maxEventLineLengthTemp += svgDraw.getVirtualNodeHeight(svg, eventNode, conf); + } + maxEventLineLength = Math.max(maxEventLineLength, maxEventLineLengthTemp); + } + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("maxSectionHeight before draw", maxSectionHeight); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("maxTaskHeight before draw", maxTaskHeight); + if (sections2 && sections2.length > 0) { + sections2.forEach((section) => { + const tasksForSection = tasks2.filter((task) => task.section === section); + const sectionNode = { + number: sectionNumber, + descr: section, + section: sectionNumber, + width: 200 * Math.max(tasksForSection.length, 1) - 50, + padding: 20, + maxHeight: maxSectionHeight + }; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("sectionNode", sectionNode); + const sectionNodeWrapper = svg.append("g"); + const node = svgDraw.drawNode(sectionNodeWrapper, sectionNode, sectionNumber, conf); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("sectionNode output", node); + sectionNodeWrapper.attr("transform", `translate(${masterX}, ${sectionBeginY})`); + masterY += maxSectionHeight + 50; + if (tasksForSection.length > 0) { + drawTasks( + svg, + tasksForSection, + sectionNumber, + masterX, + masterY, + maxTaskHeight, + conf, + maxEventCount, + maxEventLineLength, + maxSectionHeight, + false + ); + } + masterX += 200 * Math.max(tasksForSection.length, 1); + masterY = sectionBeginY; + sectionNumber++; + }); + } else { + hasSections = false; + drawTasks( + svg, + tasks2, + sectionNumber, + masterX, + masterY, + maxTaskHeight, + conf, + maxEventCount, + maxEventLineLength, + maxSectionHeight, + true + ); + } + const box = svg.node().getBBox(); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("bounds", box); + if (title) { + svg.append("text").text(title).attr("x", box.width / 2 - LEFT_MARGIN).attr("font-size", "4ex").attr("font-weight", "bold").attr("y", 20); + } + depthY = hasSections ? maxSectionHeight + maxTaskHeight + 150 : maxTaskHeight + 100; + const lineWrapper = svg.append("g").attr("class", "lineWrapper"); + lineWrapper.append("line").attr("x1", LEFT_MARGIN).attr("y1", depthY).attr("x2", box.width + 3 * LEFT_MARGIN).attr("y2", depthY).attr("stroke-width", 4).attr("stroke", "black").attr("marker-end", "url(#arrowhead)"); + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.o)( + void 0, + svg, + ((_a = conf.timeline) == null ? void 0 : _a.padding) ?? 50, + ((_b = conf.timeline) == null ? void 0 : _b.useMaxWidth) ?? false + ); +}; +const drawTasks = function(diagram2, tasks2, sectionColor, masterX, masterY, maxTaskHeight, conf, maxEventCount, maxEventLineLength, maxSectionHeight, isWithoutSections) { + var _a; + for (const task of tasks2) { + const taskNode = { + descr: task.task, + section: sectionColor, + number: sectionColor, + width: 150, + padding: 20, + maxHeight: maxTaskHeight + }; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("taskNode", taskNode); + const taskWrapper = diagram2.append("g").attr("class", "taskWrapper"); + const node = svgDraw.drawNode(taskWrapper, taskNode, sectionColor, conf); + const taskHeight = node.height; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("taskHeight after draw", taskHeight); + taskWrapper.attr("transform", `translate(${masterX}, ${masterY})`); + maxTaskHeight = Math.max(maxTaskHeight, taskHeight); + if (task.events) { + const lineWrapper = diagram2.append("g").attr("class", "lineWrapper"); + let lineLength = maxTaskHeight; + masterY += 100; + lineLength = lineLength + drawEvents(diagram2, task.events, sectionColor, masterX, masterY, conf); + masterY -= 100; + lineWrapper.append("line").attr("x1", masterX + 190 / 2).attr("y1", masterY + maxTaskHeight).attr("x2", masterX + 190 / 2).attr( + "y2", + masterY + maxTaskHeight + (isWithoutSections ? maxTaskHeight : maxSectionHeight) + maxEventLineLength + 120 + ).attr("stroke-width", 2).attr("stroke", "black").attr("marker-end", "url(#arrowhead)").attr("stroke-dasharray", "5,5"); + } + masterX = masterX + 200; + if (isWithoutSections && !((_a = conf.timeline) == null ? void 0 : _a.disableMulticolor)) { + sectionColor++; + } + } + masterY = masterY - 10; +}; +const drawEvents = function(diagram2, events, sectionColor, masterX, masterY, conf) { + let maxEventHeight = 0; + const eventBeginY = masterY; + masterY = masterY + 100; + for (const event of events) { + const eventNode = { + descr: event, + section: sectionColor, + number: sectionColor, + width: 150, + padding: 20, + maxHeight: 50 + }; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("eventNode", eventNode); + const eventWrapper = diagram2.append("g").attr("class", "eventWrapper"); + const node = svgDraw.drawNode(eventWrapper, eventNode, sectionColor, conf); + const eventHeight = node.height; + maxEventHeight = maxEventHeight + eventHeight; + eventWrapper.attr("transform", `translate(${masterX}, ${masterY})`); + masterY = masterY + 10 + eventHeight; + } + masterY = eventBeginY; + return maxEventHeight; +}; +const renderer = { + setConf: () => { + }, + draw +}; +const genSections = (options) => { + let sections2 = ""; + for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { + options["lineColor" + i] = options["lineColor" + i] || options["cScaleInv" + i]; + if ((0,khroma__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)(options["lineColor" + i])) { + options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A)(options["lineColor" + i], 20); + } else { + options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A)(options["lineColor" + i], 20); + } + } + for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { + const sw = "" + (17 - 3 * i); + sections2 += ` + .section-${i - 1} rect, .section-${i - 1} path, .section-${i - 1} circle, .section-${i - 1} path { + fill: ${options["cScale" + i]}; + } + .section-${i - 1} text { + fill: ${options["cScaleLabel" + i]}; + } + .node-icon-${i - 1} { + font-size: 40px; + color: ${options["cScaleLabel" + i]}; + } + .section-edge-${i - 1}{ + stroke: ${options["cScale" + i]}; + } + .edge-depth-${i - 1}{ + stroke-width: ${sw}; + } + .section-${i - 1} line { + stroke: ${options["cScaleInv" + i]} ; + stroke-width: 3; + } + + .lineWrapper line{ + stroke: ${options["cScaleLabel" + i]} ; + } + + .disabled, .disabled circle, .disabled text { + fill: lightgray; + } + .disabled text { + fill: #efefef; + } + `; + } + return sections2; +}; +const getStyles = (options) => ` + .edge { + stroke-width: 3; + } + ${genSections(options)} + .section-root rect, .section-root path, .section-root circle { + fill: ${options.git0}; + } + .section-root text { + fill: ${options.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } + .eventWrapper { + filter: brightness(120%); + } +`; +const styles = getStyles; +const diagram = { + db, + renderer, + parser: parser$1, + styles +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/386ea0a5.a59c5988.js b/assets/js/386ea0a5.a59c5988.js new file mode 100644 index 0000000000..09c3122a51 --- /dev/null +++ b/assets/js/386ea0a5.a59c5988.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8272],{56171:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>s,default:()=>l,frontMatter:()=>c,metadata:()=>i,toc:()=>d});var t=r(74848),o=r(28453);const c={},s="DESIGN_HEAD",i={id:"about/references/DESIGN_HEAD",title:"DESIGN_HEAD",description:"Description",source:"@site/docs/about/references/DESIGN_HEAD.md",sourceDirName:"about/references",slug:"/about/references/DESIGN_HEAD",permalink:"/ecalc/docs/about/references/DESIGN_HEAD",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/DESIGN_HEAD.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CURVES",permalink:"/ecalc/docs/about/references/CURVES"},next:{title:"DESIGN_RATE",permalink:"/ecalc/docs/about/references/DESIGN_RATE"}},a={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function E(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"design_head",children:"DESIGN_HEAD"}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"DESIGN_HEAD"})," is required to be specified under the ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/MODELS",children:"MODELS"})," keyword when\nthe model is of ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/TYPE",children:"TYPE"})," ",(0,t.jsx)(n.code,{children:"COMPRESSOR_CHART"})," ",(0,t.jsx)(n.strong,{children:"and"})," the ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/CHART_TYPE",children:"CHART_TYPE"}),"\nis ",(0,t.jsx)(n.code,{children:"GENERIC_FROM_DESIGN_POINT"}),". For more details see ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/#generic-compressor-chart-with-predefined-design-point",children:"Generic compressor chart with predefined design point"})]}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: COMPRESSOR_CHART\n CHART_TYPE: \n POLYTROPIC_EFFICIENCY: \n DESIGN_RATE: \n DESIGN_HEAD: \n UNITS:\n RATE: \n HEAD: \n EFFICIENCY: \n ...\n"})}),"\n",(0,t.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: generic_from_design_point_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_DESIGN_POINT\n POLYTROPIC_EFFICIENCY: 0.75\n DESIGN_RATE: 7000\n DESIGN_HEAD: 50\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: KJ_PER_KG\n EFFICIENCY: FRACTION\n"})})]})}function l(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(E,{...e})}):E(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>s,x:()=>i});var t=r(96540);const o={},c=t.createContext(o);function s(e){const n=t.useContext(c);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),t.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/38d592cf.4449eff9.js b/assets/js/38d592cf.4449eff9.js new file mode 100644 index 0000000000..9206be5e66 --- /dev/null +++ b/assets/js/38d592cf.4449eff9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9193],{15440:(s,e,a)=>{a.r(e),a.d(e,{assets:()=>t,contentTitle:()=>m,default:()=>d,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var n=a(74848),l=a(28453);const i={title:"Compressor modelling",sidebar_position:2,description:"Compressor modelling theory"},m=void 0,r={id:"about/modelling/theory/compressor_modelling",title:"Compressor modelling",description:"Compressor modelling theory",source:"@site/docs/about/modelling/theory/compressor_modelling.md",sourceDirName:"about/modelling/theory",slug:"/about/modelling/theory/compressor_modelling",permalink:"/ecalc/docs/about/modelling/theory/compressor_modelling",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/theory/compressor_modelling.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Compressor modelling",sidebar_position:2,description:"Compressor modelling theory"},sidebar:"about",previous:{title:"Pump modelling",permalink:"/ecalc/docs/about/modelling/theory/pump_modelling"},next:{title:"Setup an eCalc\u2122 Model",permalink:"/ecalc/docs/about/modelling/setup/"}},t={},c=[];function h(s){const e={a:"a",annotation:"annotation",code:"code",img:"img",math:"math",mfrac:"mfrac",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",msub:"msub",msubsup:"msubsup",msup:"msup",p:"p",semantics:"semantics",span:"span",...(0,l.R)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.p,{children:"A compressor model describes what happens to a fluid going through a compressor and calculates how much power is\nrequired in the process."}),"\n",(0,n.jsxs)(e.p,{children:["At the suction side, one need information about the fluid (natural gas) which has a (static) specification of the\ncomposition, a specified rate, a temperature and a pressure. As the fluid is going through the compressor in a fluid\ndynamic process, the enthalpy changes, resulting in a new state and both the pressure and the\ntemperature of the fluid is increased, while the volume is decreased. This change is calculated using an\nequation-of-state (EOS) model. See ",(0,n.jsx)(e.a,{href:"/ecalc/docs/about/modelling/setup/models/fluid_model",children:(0,n.jsx)(e.code,{children:"Fluid model"})})]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.img,{src:a(23531).A+"",width:"1626",height:"738"})}),"\n",(0,n.jsx)(e.p,{children:"eCalc does not perform fluid dynamic modeling. Instead, the behaviour of the compressor is described by a polytropic\ncompressor chart which specifies both the operational domain of the compressor, but also relates volume rate, head and\nefficiency for the compressor."}),"\n",(0,n.jsxs)(e.p,{children:["An isentropic (adiabatic) compression is the process where no heat is added or removed from a system. In a polytropic\nprocess, changes in the gas characteristics is considered. Dynamic natural gas compressors typically follow a polytropic\nprocess defined by the formula ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mn,{children:"1"})]}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"V"}),(0,n.jsx)(e.mn,{children:"1"}),(0,n.jsx)(e.mi,{children:"n"})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mn,{children:"2"})]}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"V"}),(0,n.jsx)(e.mn,{children:"2"}),(0,n.jsx)(e.mi,{children:"n"})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"P_\\mathrm{1} V_\\mathrm{1}^n = P_\\mathrm{2} V_\\mathrm{2}^n"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9314em",verticalAlign:"-0.2481em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"1"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"V"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.6644em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.4519em",marginLeft:"-0.2222em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"1"})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2481em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9314em",verticalAlign:"-0.2481em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"2"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"V"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.6644em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.4519em",marginLeft:"-0.2222em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"2"})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2481em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})]})]}),", where ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"n"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"n"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.4306em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"})]})})]})," is the\npolytropic exponent which is experimentally determined for a given compressor."]}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.img,{src:a(52258).A+"",width:"901",height:"762"}),"\nThe power need for compression is given by"]}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"w"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"l"}),(0,n.jsx)(e.mi,{children:"y"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"_"}),(0,n.jsx)(e.mi,{children:"h"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"_"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"e"})]}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"f"}),(0,n.jsx)(e.mi,{children:"f"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{children:"y"})]})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"power = \\frac{polytropic\\_head * mass\\_rate}{efficiency}"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02691em"},children:"w"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"er"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"2.2749em",verticalAlign:"-0.8804em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.3944em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.10764em"},children:"ff"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"c"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"cy"})]})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.7em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"ro"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"c"}),(0,n.jsx)(e.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"h"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"ma"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"ss"}),(0,n.jsx)(e.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"})]})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.8804em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]})]})]})]})}),"\n",(0,n.jsx)(e.p,{children:"and the relationship between polytropic head and the pressures are"}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"l"}),(0,n.jsx)(e.mi,{children:"y"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"_"}),(0,n.jsx)(e.mi,{children:"h"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mo,{children:"\u2212"}),(0,n.jsx)(e.mn,{children:"1"})]})]}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"Z"}),(0,n.jsx)(e.mi,{children:"R"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"T"}),(0,n.jsx)(e.mn,{children:"1"})]})]}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"M"}),(0,n.jsx)(e.mi,{children:"W"})]})]}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{fence:"true",children:"("}),(0,n.jsxs)(e.msup,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{fence:"true",children:"("}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mn,{children:"1"})]}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mn,{children:"2"})]})]}),(0,n.jsx)(e.mo,{fence:"true",children:")"})]}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mo,{children:"\u2212"}),(0,n.jsx)(e.mn,{children:"1"})]}),(0,n.jsx)(e.mi,{children:"n"})]})]}),(0,n.jsx)(e.mo,{children:"\u2212"}),(0,n.jsx)(e.mn,{children:"1"}),(0,n.jsx)(e.mo,{fence:"true",children:")"})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"polytropic\\_head = \\frac{n}{n-1} \\frac{Z R T_1}{MW} \\left( \\left(\\frac{P_1}{P_2} \\right)^{\\frac{n-1}{n}} -1 \\right)"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.0044em",verticalAlign:"-0.31em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"ro"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"c"}),(0,n.jsx)(e.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"h"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"3.044em",verticalAlign:"-1.25em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.1076em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2212"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord",children:"1"})]})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.7693em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.3603em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.10903em"},children:"M"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"W"})]})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"ZR"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"1"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.686em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsxs)(e.span,{className:"minner",children:[(0,n.jsx)(e.span,{className:"mopen delimcenter",style:{top:"0em"},children:(0,n.jsx)(e.span,{className:"delimsizing size4",children:"("})}),(0,n.jsxs)(e.span,{className:"minner",children:[(0,n.jsxs)(e.span,{className:"minner",children:[(0,n.jsx)(e.span,{className:"mopen delimcenter",style:{top:"0em"},children:(0,n.jsx)(e.span,{className:"delimsizing size3",children:"("})}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.3603em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"2"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"1"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.836em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]}),(0,n.jsx)(e.span,{className:"mclose delimcenter",style:{top:"0em"},children:(0,n.jsx)(e.span,{className:"delimsizing size3",children:")"})})]}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsx)(e.span,{className:"vlist-t",children:(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"1.7939em"},children:(0,n.jsxs)(e.span,{style:{top:"-4.2029em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter sizing reset-size3 size6"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.8443em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.656em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size3 size1 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.2255em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line mtight",style:{borderBottomWidth:"0.049em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.384em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size3 size1 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mbin mtight",children:"\u2212"}),(0,n.jsx)(e.span,{className:"mord mtight",children:"1"})]})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.344em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter sizing reset-size3 size6"})]})})})]})})})})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2212"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord",children:"1"}),(0,n.jsx)(e.span,{className:"mclose delimcenter",style:{top:"0em"},children:(0,n.jsx)(e.span,{className:"delimsizing size4",children:")"})})]})]})]})]})}),"\n",(0,n.jsxs)(e.p,{children:["where ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"n"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"n"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.4306em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"})]})})]})," is the polytropic exponent, ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"Z"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"Z"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"Z"})]})})]})," the compressibility, ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"R"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"R"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"})]})})]})," is the gas constant, ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"T"}),(0,n.jsx)(e.mn,{children:"1"})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"T_1"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"1"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," is the inlet temperature and ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"M"}),(0,n.jsx)(e.mi,{children:"W"})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"MW"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.10903em"},children:"M"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"W"})]})})]})," the molecular weight."]}),"\n",(0,n.jsx)(e.p,{children:"Further, the polytropic exponent is approximated as"}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"\u03ba"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"l"}),(0,n.jsx)(e.mi,{children:"y"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"_"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"f"}),(0,n.jsx)(e.mi,{children:"f"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{children:"y"})]}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"\u03ba"}),(0,n.jsx)(e.mo,{children:"\u2212"}),(0,n.jsx)(e.mn,{children:"1"})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\frac{\\kappa * polytropic\\_efficiency}{\\kappa -1}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"2.1638em",verticalAlign:"-0.7693em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.3944em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"\u03ba"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2212"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord",children:"1"})]})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.7em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"\u03ba"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"ro"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"c"}),(0,n.jsx)(e.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.10764em"},children:"ff"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"c"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"cy"})]})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.7693em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]})]})})]})}),"\n",(0,n.jsxs)(e.p,{children:["where ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"\u03ba"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\kappa"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.4306em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"\u03ba"})]})})]})," is the heat capacity ratio of the fluid."]}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"\u03ba"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\kappa"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.4306em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"\u03ba"})]})})]})," and ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"Z"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"Z"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"Z"})]})})]})," are not for inlet conditions, but average values for the fluid throughout the process, and\nthe polytropic process and the calculations are iterated until these converge."]}),"\n",(0,n.jsx)(e.p,{children:"If there is only one compressor, the outlet pressure for each compressor is known, and the polytropic head and\nefficiency may be calculated from directly from the above polytropic head and efficiency formulas."}),"\n",(0,n.jsx)(e.p,{children:"However, for compressor trains, the intermediate pressures are not known ahead, instead one may use the fact that all\ncompressors run with the same speed as they are mounted on the same shaft."}),"\n",(0,n.jsxs)(e.p,{children:["To calculate the energy usage for the compressor train using the common speed, eCalc uses a forward model to\ncalculate the outlet stream given the inlet stream and a given speed. Then, this model is iterated until the discharge pressure is equal to the requested discharge pressure for evaluation. To use this model, see\n",(0,n.jsx)(e.code,{children:"Variable speed compressor train model"})," An alternative is to neglect the common speed property of the train, an instead assume (incorrectly but maybe good\nenough for some purposes) that the pressure fraction is equal for all stages. With this assumption, the intermediate pressures can be calculated and each stage may be calculated independently without the speed iteration. To use this model, see\n",(0,n.jsx)(e.code,{children:"Simplified variable speed compressor train model"}),"."]}),"\n",(0,n.jsxs)(e.p,{children:["In some cases, the shaft of the compressor train can only run on a single fixed speed. In these cases eCalc needs\ninformation about how the pressure should be controlled to meet the required discharge pressure. Available pressure\ncontrol options are choking and recirculating using anti-surge valves. To use this model, see ",(0,n.jsx)(e.code,{children:"Single speed compressor train model"}),"."]}),"\n",(0,n.jsxs)(e.p,{children:["In other cases, the compressor trains have more complex setup and process control which needs a more flexible model. The\nfigure below shows an example where one may have two inlet streams with different pressures and potentially different\ngas compositions and one outlet stream for export gas with a pressure control. To use a model suitable for such cases,\nsee ",(0,n.jsx)(e.code,{children:"Variable speed compressor train model with multiple streams and pressures"}),"."]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.img,{src:a(26995).A+"",width:"1475",height:"659"})})]})}function d(s={}){const{wrapper:e}={...(0,l.R)(),...s.components};return e?(0,n.jsx)(e,{...s,children:(0,n.jsx)(h,{...s})}):h(s)}},23531:(s,e,a)=>{a.d(e,{A:()=>n});const n=a.p+"assets/images/process_compressor-3493b127c832898d93b5231594efa8d3.png"},52258:(s,e,a)=>{a.d(e,{A:()=>n});const n=a.p+"assets/images/process_compressor_chart-28c5f110972461aba840e82b0962c3d2.png"},26995:(s,e,a)=>{a.d(e,{A:()=>n});const n=a.p+"assets/images/process_compressor_train_multiple_streams-415751902a6078520845f70740eaa1af.png"},28453:(s,e,a)=>{a.d(e,{R:()=>m,x:()=>r});var n=a(96540);const l={},i=n.createContext(l);function m(s){const e=n.useContext(i);return n.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function r(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(l):s.components||l:m(s.components),n.createElement(i.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/3ac409ea.3e145ceb.js b/assets/js/3ac409ea.3e145ceb.js new file mode 100644 index 0000000000..0548510436 --- /dev/null +++ b/assets/js/3ac409ea.3e145ceb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7741],{78497:e=>{e.exports=JSON.parse('{"tags":[{"label":"release","permalink":"/ecalc/docs/tags/release","count":30},{"label":"eCalc","permalink":"/ecalc/docs/tags/e-calc","count":30}]}')}}]); \ No newline at end of file diff --git a/assets/js/3be812e9.2ce31a7e.js b/assets/js/3be812e9.2ce31a7e.js new file mode 100644 index 0000000000..f08480258d --- /dev/null +++ b/assets/js/3be812e9.2ce31a7e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5236],{77125:(s,e,a)=>{a.r(e),a.d(e,{assets:()=>m,contentTitle:()=>t,default:()=>d,frontMatter:()=>l,metadata:()=>r,toc:()=>c});var n=a(74848),i=a(28453);const l={},t="FACTOR",r={id:"about/references/FACTOR",title:"FACTOR",description:"[...] /",source:"@site/docs/about/references/FACTOR.mdx",sourceDirName:"about/references",slug:"/about/references/FACTOR",permalink:"/ecalc/docs/about/references/FACTOR",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/FACTOR.mdx",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FACILITY_INPUTS",permalink:"/ecalc/docs/about/references/FACILITY_INPUTS"},next:{title:"FILE",permalink:"/ecalc/docs/about/references/FILE"}},m={},c=[{value:"Description",id:"description",level:2},{value:"Use in ADJUSTMENT",id:"use-in-adjustment",level:3},{value:"Use in EMISSIONS",id:"use-in-emissions",level:3},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"Use in ADJUSTMENT",id:"use-in-adjustment-1",level:3},{value:"Use in EMISSIONS",id:"use-in-emissions-1",level:3}];function h(s){const e={a:"a",admonition:"admonition",annotation:"annotation",code:"code",h1:"h1",h2:"h2",h3:"h3",math:"math",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",msub:"msub",p:"p",pre:"pre",semantics:"semantics",span:"span",...(0,i.R)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.h1,{id:"factor",children:"FACTOR"}),"\n",(0,n.jsxs)(e.p,{children:["[...] /\n",(0,n.jsx)(e.a,{href:"FACTOR",children:"FACTOR"})]}),"\n",(0,n.jsx)(e.h2,{id:"description",children:"Description"}),"\n",(0,n.jsxs)(e.p,{children:["The keyword ",(0,n.jsx)(e.a,{href:"FACTOR",children:"FACTOR"})," can be used to add a multiplier. The\n",(0,n.jsx)(e.a,{href:"FACTOR",children:"FACTOR"})," keyword can be used in various places in the eCalc configuration file.\nA factor can either be a number, or an ",(0,n.jsx)(e.code,{children:"expression "}),"."]}),"\n",(0,n.jsx)(e.admonition,{title:"Warning",type:"warning",children:(0,n.jsxs)(e.p,{children:["The ",(0,n.jsx)(e.a,{href:"FACTOR",children:"FACTOR"})," keyword will have slightly different behavior depending on in which keyword\nit is used. Carefully read the documentation below!"]})}),"\n",(0,n.jsxs)(e.h3,{id:"use-in-adjustment",children:["Use in ",(0,n.jsx)(e.a,{href:"ADJUSTMENT",children:"ADJUSTMENT"})]}),"\n",(0,n.jsx)(e.p,{children:"Adjustment of input data with a factor."}),"\n",(0,n.jsxs)(e.h3,{id:"use-in-emissions",children:["Use in ",(0,n.jsx)(e.a,{href:"/ecalc/docs/about/references/EMISSIONS",children:"EMISSIONS"})]}),"\n",(0,n.jsxs)(e.p,{children:["A single value with unit kg/Sm",(0,n.jsx)("sup",{children:"3"})," defines the CO",(0,n.jsx)("sub",{children:"2"})," factor for the fuel gas used on the\ninstallation. That is, how many kilograms of CO",(0,n.jsx)("sub",{children:"2"})," are emitted"]}),"\n",(0,n.jsx)(e.h2,{id:"format",children:"Format"}),"\n",(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-yaml",children:"FACTOR: \n"})}),"\n",(0,n.jsx)(e.h2,{id:"example",children:"Example"}),"\n",(0,n.jsxs)(e.h3,{id:"use-in-adjustment-1",children:["Use in ",(0,n.jsx)(e.a,{href:"ADJUSTMENT",children:"ADJUSTMENT"})]}),"\n",(0,n.jsx)(e.p,{children:"Say you have input that that is of by 3% percentage.\nYou could fix this like:"}),"\n",(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-yaml",children:"NAME: some_facility_input\nFILE: filename.csv\nTYPE: FACILITY_INPUT_TYPE\nADJUSTMENT:\n FACTOR: 1.03\n"})}),"\n",(0,n.jsxs)(e.p,{children:["The resulting energy consumption ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"j"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"u"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"s"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"t"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"e"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"E_\\mathrm{adjusted}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"adjusted"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]}),", i.e. fuel or power, will then be"]}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"j"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"u"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"s"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"t"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"e"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"})]})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsx)(e.mn,{children:"1.03"}),(0,n.jsx)(e.mo,{children:"\xd7"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"o"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"r"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"g"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"n"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"l"})]})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"E_\\mathrm{adjusted} = 1.03 \\times E_\\mathrm{original}"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"adjusted"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.7278em",verticalAlign:"-0.0833em"}}),(0,n.jsx)(e.span,{className:"mord",children:"1.03"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\xd7"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"original"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})]})]})}),"\n",(0,n.jsxs)(e.p,{children:["where ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"o"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"r"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"g"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"n"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"l"})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"E_\\mathrm{original}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"original"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," is the energy consumption before the adjustment."]}),"\n",(0,n.jsxs)(e.h3,{id:"use-in-emissions-1",children:["Use in ",(0,n.jsx)(e.a,{href:"/ecalc/docs/about/references/EMISSIONS",children:"EMISSIONS"})]}),"\n",(0,n.jsxs)(e.p,{children:["Say your fuel emits 2.5 kg CO",(0,n.jsx)("sub",{children:"2"})," per Sm",(0,n.jsx)("sup",{children:"3"})," of burned fuel, you can model this like:"]}),"\n",(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-yaml",children:"FUEL_TYPES:\n - NAME: my_fuel\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.5 # [kg/Sm3]\n"})})]})}function d(s={}){const{wrapper:e}={...(0,i.R)(),...s.components};return e?(0,n.jsx)(e,{...s,children:(0,n.jsx)(h,{...s})}):h(s)}},28453:(s,e,a)=>{a.d(e,{R:()=>t,x:()=>r});var n=a(96540);const i={},l=n.createContext(i);function t(s){const e=n.useContext(l);return n.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function r(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(i):s.components||i:t(s.components),n.createElement(l.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/3d5bbd33.c1ee4223.js b/assets/js/3d5bbd33.c1ee4223.js new file mode 100644 index 0000000000..42ad8487bd --- /dev/null +++ b/assets/js/3d5bbd33.c1ee4223.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7003],{65838:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>_,frontMatter:()=>r,metadata:()=>i,toc:()=>l});var t=o(74848),s=o(28453);const r={},c="MAXIMUM_POWER",i={id:"about/references/MAXIMUM_POWER",title:"MAXIMUM_POWER",description:"MODELS /",source:"@site/docs/about/references/MAXIMUM_POWER.md",sourceDirName:"about/references",slug:"/about/references/MAXIMUM_POWER",permalink:"/ecalc/docs/about/references/MAXIMUM_POWER",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/MAXIMUM_POWER.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"MAXIMUM_DISCHARGE_PRESSURE",permalink:"/ecalc/docs/about/references/MAXIMUM_DISCHARGE_PRESSURE"},next:{title:"MAXIMUM_PRESSURE_RATIO_PER_STAGE",permalink:"/ecalc/docs/about/references/MAXIMUM_PRESSURE_RATIO_PER_STAGE"}},a={},l=[{value:"Description",id:"description",level:2},{value:"Functionality",id:"functionality",level:2},{value:"Format",id:"format",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"maximum_power",children:"MAXIMUM_POWER"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/MODELS",children:"MODELS"})," /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/MAXIMUM_POWER",children:"MAXIMUM_POWER"})]}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"MAXIMUM_POWER"})," is an optional constant giving the maximum power (MW) that the compressor train can use."]}),"\n",(0,t.jsx)(n.h2,{id:"functionality",children:"Functionality"}),"\n",(0,t.jsxs)(n.p,{children:["It is an optional setting and supported for compressor train models ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",children:"SINGLE_SPEED_COMPRESSOR_TRAIN"}),", ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",children:"SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN"}),", ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",children:"VARIABLE_SPEED_COMPRESSOR_TRAIN"}),", ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: \n COMPRESSOR_TRAIN:\n POWER_ADJUSTMENT_CONSTANT: \n MAXIMUM_POWER: \n CALCULATE_MAX_RATE: \n ...\n"})})]})}function _(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,n,o)=>{o.d(n,{R:()=>c,x:()=>i});var t=o(96540);const s={},r=t.createContext(s);function c(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3e38e310.5f46b2fe.js b/assets/js/3e38e310.5f46b2fe.js new file mode 100644 index 0000000000..55ca9e0e22 --- /dev/null +++ b/assets/js/3e38e310.5f46b2fe.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9341],{99268:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>a,metadata:()=>r,toc:()=>c});var s=i(74848),t=i(28453);const a={slug:"v8.3-release",title:"v8.3",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:-13},l="eCalc v8.3",r={id:"changelog/v8-3",title:"v8.3",description:"eCalc\u2122 v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See",source:"@site/docs/changelog/v8-3.md",sourceDirName:"changelog",slug:"/changelog/v8.3-release",permalink:"/ecalc/docs/changelog/v8.3-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-3.md",tags:[{inline:!0,label:"release",permalink:"/ecalc/docs/tags/release"},{inline:!0,label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:-13,frontMatter:{slug:"v8.3-release",title:"v8.3",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:-13},sidebar:"changelog",previous:{title:"v8.4",permalink:"/ecalc/docs/changelog/v8.4-release"},next:{title:"v8.2",permalink:"/ecalc/docs/changelog/v8.2-release"}},o={},c=[{value:"New Features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking changes",id:"breaking-changes",level:2},{value:"Input: YAML / Resource files",id:"input-yaml--resource-files",level:3}];function d(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"ecalc-v83",children:"eCalc v8.3"}),"\n",(0,s.jsx)(n.p,{children:"eCalc\u2122 v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See\r\nthe migration guide for details on changes, where relevant."}),"\n",(0,s.jsx)(n.h2,{id:"new-features",children:"New Features"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"To save time in calibration and help diagnose pump issues: When calibrating or seeing why a pump is invalid, the most important thing to look at is the head. Now the head is available in the JSON file."}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"fixes",children:"Fixes"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"A bug in the mixing of fluid-streams in compressor trains were fixed. This bug caused the density at standard conditions not to be updated, leading to the standard rates being wrong. This is expected to change the results of some eCalc Models"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,s.jsx)(n.p,{children:"Some breaking changes are needed to keep improving eCalc, remove ambiguity and prepare eCalc for the future:"}),"\n",(0,s.jsx)(n.h3,{id:"input-yaml--resource-files",children:"Input: YAML / Resource files"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["It is no longer accepted to change ",(0,s.jsx)(n.code,{children:"ENERGY_USAGE_MODEL TYPE"})," over time, within one consumer. In case ",(0,s.jsx)(n.code,{children:"TYPE"})," evolution is needed, the model can be split in two consumers."]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>l,x:()=>r});var s=i(96540);const t={},a=s.createContext(t);function l(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/40912a5c.b11b4ca5.js b/assets/js/40912a5c.b11b4ca5.js new file mode 100644 index 0000000000..ea86ab9dce --- /dev/null +++ b/assets/js/40912a5c.b11b4ca5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2810],{54368:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>_,frontMatter:()=>t,metadata:()=>l,toc:()=>c});var s=r(74848),o=r(28453);const t={},i="CALCULATE_MAX_RATE",l={id:"about/references/CALCULATE_MAX_RATE",title:"CALCULATE_MAX_RATE",description:"MODELS /",source:"@site/docs/about/references/CALCULATE_MAX_RATE.md",sourceDirName:"about/references",slug:"/about/references/CALCULATE_MAX_RATE",permalink:"/ecalc/docs/about/references/CALCULATE_MAX_RATE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/CALCULATE_MAX_RATE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CABLE_LOSS",permalink:"/ecalc/docs/about/references/CABLE_LOSS"},next:{title:"CATEGORY",permalink:"/ecalc/docs/about/references/CATEGORY"}},a={},c=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"calculate_max_rate",children:"CALCULATE_MAX_RATE"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/MODELS",children:"MODELS"})," /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/CALCULATE_MAX_RATE",children:"CALCULATE_MAX_RATE"})]}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(n.p,{children:["The keyword ",(0,s.jsx)(n.a,{href:"CALCULATE_MAX_RATE",children:"CALCULATE_MAX_RATE"})," is optional with default value ",(0,s.jsx)(n.code,{children:"False"}),". When set to ",(0,s.jsx)(n.code,{children:"True"}),", the\nmaximum standard rate the compressor train model can handle, based on the input suction and discharge pressures, will\nbe calculated and reported in the results. This will be done for all dates according to the requested output frequency."]}),"\n",(0,s.jsx)(n.p,{children:"Calculation of maximum standard rate is supported for compressor train models of type:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",children:"SINGLE_SPEED_COMPRESSOR_TRAIN"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",children:"SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",children:"VARIABLE_SPEED_COMPRESSOR_TRAIN"})}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{title:"Warning",type:"warning",children:(0,s.jsx)(n.p,{children:"The CALCULATE_MAX_RATE keyword will in most cases add significantly to the run time of the model.\nOnly use when needed!"})}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: \n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: \n COMPRESSOR_CHART: \n - ... and so forth for each stage in the train\n CALCULATE_MAX_RATE: \n ...\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: simplified_compressor_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: fluid_model_1\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: predefined_variable_speed_compressor_chart\n CALCULATE_MAX_RATE: True\n"})})]})}function _(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>i,x:()=>l});var s=r(96540);const o={},t=s.createContext(o);function i(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/40d6382c.cdc08712.js b/assets/js/40d6382c.cdc08712.js new file mode 100644 index 0000000000..da5d5d6b50 --- /dev/null +++ b/assets/js/40d6382c.cdc08712.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6245],{65312:(t,e,i)=>{i.r(e),i.d(e,{assets:()=>c,contentTitle:()=>a,default:()=>l,frontMatter:()=>r,metadata:()=>s,toc:()=>u});var n=i(74848),o=i(28453);const r={title:"Migrating eCalc versions",sidebar_position:1e3,description:"Getting started with eCalc"},a=void 0,s={id:"about/migration_guides/index",title:"Migrating eCalc versions",description:"Getting started with eCalc",source:"@site/docs/about/migration_guides/index.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/",permalink:"/ecalc/docs/about/migration_guides/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/index.md",tags:[],version:"current",sidebarPosition:1e3,frontMatter:{title:"Migrating eCalc versions",sidebar_position:1e3,description:"Getting started with eCalc"},sidebar:"about",previous:{title:"!include",permalink:"/ecalc/docs/about/references/include"},next:{title:"v8.22 to v8.23",permalink:"/ecalc/docs/about/migration_guides/v8.22_to_v8.23"}},c={},u=[];function d(t){return(0,n.jsx)(n.Fragment,{})}function l(t={}){const{wrapper:e}={...(0,o.R)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(d,{...t})}):d()}},28453:(t,e,i)=>{i.d(e,{R:()=>a,x:()=>s});var n=i(96540);const o={},r=n.createContext(o);function a(t){const e=n.useContext(r);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function s(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(o):t.components||o:a(t.components),n.createElement(r.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/4162.389f54aa.js b/assets/js/4162.389f54aa.js new file mode 100644 index 0000000000..29dc4bcc45 --- /dev/null +++ b/assets/js/4162.389f54aa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4162],{75937:(e,t,i)=>{i.d(t,{A:()=>r});var s=i(72453),n=i(74886);const r=(e,t)=>s.A.lang.round(n.A.parse(e)[t])},50053:(e,t,i)=>{i.d(t,{A:()=>n});var s=i(91641);const n=function(e){return(0,s.A)(e,4)}},14162:(e,t,i)=>{i.d(t,{diagram:()=>X});var s,n,r=i(99702),l=i(50053),o=i(75937),a=i(25582),c=i(98055),h=i(697),u=i(26312),d=(i(74353),i(16750),i(42838),function(){var e=function(e,t,i,s){for(i=i||{},s=e.length;s--;i[e[s]]=t);return i},t=[1,7],i=[1,13],s=[1,14],n=[1,15],r=[1,19],l=[1,16],o=[1,17],a=[1,18],c=[8,30],h=[8,21,28,29,30,31,32,40,44,47],u=[1,23],d=[1,24],g=[8,15,16,21,28,29,30,31,32,40,44,47],y=[8,15,16,21,27,28,29,30,31,32,40,44,47],p=[1,49],b={trace:function(){},yy:{},symbols_:{error:2,spaceLines:3,SPACELINE:4,NL:5,separator:6,SPACE:7,EOF:8,start:9,BLOCK_DIAGRAM_KEY:10,document:11,stop:12,statement:13,link:14,LINK:15,START_LINK:16,LINK_LABEL:17,STR:18,nodeStatement:19,columnsStatement:20,SPACE_BLOCK:21,blockStatement:22,classDefStatement:23,cssClassStatement:24,styleStatement:25,node:26,SIZE:27,COLUMNS:28,"id-block":29,end:30,block:31,NODE_ID:32,nodeShapeNLabel:33,dirList:34,DIR:35,NODE_DSTART:36,NODE_DEND:37,BLOCK_ARROW_START:38,BLOCK_ARROW_END:39,classDef:40,CLASSDEF_ID:41,CLASSDEF_STYLEOPTS:42,DEFAULT:43,class:44,CLASSENTITY_IDS:45,STYLECLASS:46,style:47,STYLE_ENTITY_IDS:48,STYLE_DEFINITION_DATA:49,$accept:0,$end:1},terminals_:{2:"error",4:"SPACELINE",5:"NL",7:"SPACE",8:"EOF",10:"BLOCK_DIAGRAM_KEY",15:"LINK",16:"START_LINK",17:"LINK_LABEL",18:"STR",21:"SPACE_BLOCK",27:"SIZE",28:"COLUMNS",29:"id-block",30:"end",31:"block",32:"NODE_ID",35:"DIR",36:"NODE_DSTART",37:"NODE_DEND",38:"BLOCK_ARROW_START",39:"BLOCK_ARROW_END",40:"classDef",41:"CLASSDEF_ID",42:"CLASSDEF_STYLEOPTS",43:"DEFAULT",44:"class",45:"CLASSENTITY_IDS",46:"STYLECLASS",47:"style",48:"STYLE_ENTITY_IDS",49:"STYLE_DEFINITION_DATA"},productions_:[0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[34,1],[34,2],[33,3],[33,4],[23,3],[23,3],[24,3],[25,3]],performAction:function(e,t,i,s,n,r,l){var o=r.length-1;switch(n){case 4:s.getLogger().debug("Rule: separator (NL) ");break;case 5:s.getLogger().debug("Rule: separator (Space) ");break;case 6:s.getLogger().debug("Rule: separator (EOF) ");break;case 7:s.getLogger().debug("Rule: hierarchy: ",r[o-1]),s.setHierarchy(r[o-1]);break;case 8:s.getLogger().debug("Stop NL ");break;case 9:s.getLogger().debug("Stop EOF ");break;case 10:s.getLogger().debug("Stop NL2 ");break;case 11:s.getLogger().debug("Stop EOF2 ");break;case 12:s.getLogger().debug("Rule: statement: ",r[o]),"number"==typeof r[o].length?this.$=r[o]:this.$=[r[o]];break;case 13:s.getLogger().debug("Rule: statement #2: ",r[o-1]),this.$=[r[o-1]].concat(r[o]);break;case 14:s.getLogger().debug("Rule: link: ",r[o],e),this.$={edgeTypeStr:r[o],label:""};break;case 15:s.getLogger().debug("Rule: LABEL link: ",r[o-3],r[o-1],r[o]),this.$={edgeTypeStr:r[o],label:r[o-1]};break;case 18:const t=parseInt(r[o]),i=s.generateId();this.$={id:i,type:"space",label:"",width:t,children:[]};break;case 23:s.getLogger().debug("Rule: (nodeStatement link node) ",r[o-2],r[o-1],r[o]," typestr: ",r[o-1].edgeTypeStr);const n=s.edgeStrToEdgeData(r[o-1].edgeTypeStr);this.$=[{id:r[o-2].id,label:r[o-2].label,type:r[o-2].type,directions:r[o-2].directions},{id:r[o-2].id+"-"+r[o].id,start:r[o-2].id,end:r[o].id,label:r[o-1].label,type:"edge",directions:r[o].directions,arrowTypeEnd:n,arrowTypeStart:"arrow_open"},{id:r[o].id,label:r[o].label,type:s.typeStr2Type(r[o].typeStr),directions:r[o].directions}];break;case 24:s.getLogger().debug("Rule: nodeStatement (abc88 node size) ",r[o-1],r[o]),this.$={id:r[o-1].id,label:r[o-1].label,type:s.typeStr2Type(r[o-1].typeStr),directions:r[o-1].directions,widthInColumns:parseInt(r[o],10)};break;case 25:s.getLogger().debug("Rule: nodeStatement (node) ",r[o]),this.$={id:r[o].id,label:r[o].label,type:s.typeStr2Type(r[o].typeStr),directions:r[o].directions,widthInColumns:1};break;case 26:s.getLogger().debug("APA123",this?this:"na"),s.getLogger().debug("COLUMNS: ",r[o]),this.$={type:"column-setting",columns:"auto"===r[o]?-1:parseInt(r[o])};break;case 27:s.getLogger().debug("Rule: id-block statement : ",r[o-2],r[o-1]),s.generateId(),this.$={...r[o-2],type:"composite",children:r[o-1]};break;case 28:s.getLogger().debug("Rule: blockStatement : ",r[o-2],r[o-1],r[o]);const l=s.generateId();this.$={id:l,type:"composite",label:"",children:r[o-1]};break;case 29:s.getLogger().debug("Rule: node (NODE_ID separator): ",r[o]),this.$={id:r[o]};break;case 30:s.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ",r[o-1],r[o]),this.$={id:r[o-1],label:r[o].label,typeStr:r[o].typeStr,directions:r[o].directions};break;case 31:s.getLogger().debug("Rule: dirList: ",r[o]),this.$=[r[o]];break;case 32:s.getLogger().debug("Rule: dirList: ",r[o-1],r[o]),this.$=[r[o-1]].concat(r[o]);break;case 33:s.getLogger().debug("Rule: nodeShapeNLabel: ",r[o-2],r[o-1],r[o]),this.$={typeStr:r[o-2]+r[o],label:r[o-1]};break;case 34:s.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ",r[o-3],r[o-2]," #3:",r[o-1],r[o]),this.$={typeStr:r[o-3]+r[o],label:r[o-2],directions:r[o-1]};break;case 35:case 36:this.$={type:"classDef",id:r[o-1].trim(),css:r[o].trim()};break;case 37:this.$={type:"applyClass",id:r[o-1].trim(),styleClass:r[o].trim()};break;case 38:this.$={type:"applyStyles",id:r[o-1].trim(),stylesStr:r[o].trim()}}},table:[{9:1,10:[1,2]},{1:[3]},{11:3,13:4,19:5,20:6,21:t,22:8,23:9,24:10,25:11,26:12,28:i,29:s,31:n,32:r,40:l,44:o,47:a},{8:[1,20]},e(c,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,21:t,28:i,29:s,31:n,32:r,40:l,44:o,47:a}),e(h,[2,16],{14:22,15:u,16:d}),e(h,[2,17]),e(h,[2,18]),e(h,[2,19]),e(h,[2,20]),e(h,[2,21]),e(h,[2,22]),e(g,[2,25],{27:[1,25]}),e(h,[2,26]),{19:26,26:12,32:r},{11:27,13:4,19:5,20:6,21:t,22:8,23:9,24:10,25:11,26:12,28:i,29:s,31:n,32:r,40:l,44:o,47:a},{41:[1,28],43:[1,29]},{45:[1,30]},{48:[1,31]},e(y,[2,29],{33:32,36:[1,33],38:[1,34]}),{1:[2,7]},e(c,[2,13]),{26:35,32:r},{32:[2,14]},{17:[1,36]},e(g,[2,24]),{11:37,13:4,14:22,15:u,16:d,19:5,20:6,21:t,22:8,23:9,24:10,25:11,26:12,28:i,29:s,31:n,32:r,40:l,44:o,47:a},{30:[1,38]},{42:[1,39]},{42:[1,40]},{46:[1,41]},{49:[1,42]},e(y,[2,30]),{18:[1,43]},{18:[1,44]},e(g,[2,23]),{18:[1,45]},{30:[1,46]},e(h,[2,28]),e(h,[2,35]),e(h,[2,36]),e(h,[2,37]),e(h,[2,38]),{37:[1,47]},{34:48,35:p},{15:[1,50]},e(h,[2,27]),e(y,[2,33]),{39:[1,51]},{34:52,35:p,39:[2,31]},{32:[2,15]},e(y,[2,34]),{39:[2,32]}],defaultActions:{20:[2,7],23:[2,14],50:[2,15],52:[2,32]},parseError:function(e,t){if(!t.recoverable){var i=new Error(e);throw i.hash=t,i}this.trace(e)},parse:function(e){var t=this,i=[0],s=[],n=[null],r=[],l=this.table,o="",a=0,c=0,h=r.slice.call(arguments,1),u=Object.create(this.lexer),d={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(d.yy[g]=this.yy[g]);u.setInput(e,d.yy),d.yy.lexer=u,d.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var y=u.yylloc;r.push(y);var p=u.options&&u.options.ranges;"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,x,L,S,f,m,_,k,E,w={};;){if(x=i[i.length-1],this.defaultActions[x]?L=this.defaultActions[x]:(null==b&&(E=void 0,"number"!=typeof(E=s.pop()||u.lex()||1)&&(E instanceof Array&&(E=(s=E).pop()),E=t.symbols_[E]||E),b=E),L=l[x]&&l[x][b]),void 0===L||!L.length||!L[0]){var v="";for(f in k=[],l[x])this.terminals_[f]&&f>2&&k.push("'"+this.terminals_[f]+"'");v=u.showPosition?"Parse error on line "+(a+1)+":\n"+u.showPosition()+"\nExpecting "+k.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(a+1)+": Unexpected "+(1==b?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(v,{text:u.match,token:this.terminals_[b]||b,line:u.yylineno,loc:y,expected:k})}if(L[0]instanceof Array&&L.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+b);switch(L[0]){case 1:i.push(b),n.push(u.yytext),r.push(u.yylloc),i.push(L[1]),b=null,c=u.yyleng,o=u.yytext,a=u.yylineno,y=u.yylloc;break;case 2:if(m=this.productions_[L[1]][1],w.$=n[n.length-m],w._$={first_line:r[r.length-(m||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(m||1)].first_column,last_column:r[r.length-1].last_column},p&&(w._$.range=[r[r.length-(m||1)].range[0],r[r.length-1].range[1]]),void 0!==(S=this.performAction.apply(w,[o,c,a,d.yy,L[1],n,r].concat(h))))return S;m&&(i=i.slice(0,-1*m*2),n=n.slice(0,-1*m),r=r.slice(0,-1*m)),i.push(this.productions_[L[1]][0]),n.push(w.$),r.push(w._$),_=l[i[i.length-2]][i[i.length-1]],i.push(_);break;case 3:return!0}}return!0}},x={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,i=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var s=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===s.length?this.yylloc.first_column:0)+s[s.length-i.length].length-i[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var i,s,n;if(this.options.backtrack_lexer&&(n={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(n.yylloc.range=this.yylloc.range.slice(0))),(s=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=s.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:s?s[s.length-1].length-s[s.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],i=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),i)return i;if(this._backtrack){for(var r in n)this[r]=n[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,i,s;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),r=0;rt[0].length)){if(t=i,s=r,this.options.backtrack_lexer){if(!1!==(e=this.test_match(i,n[r])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,n[s]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(e,t,i,s){switch(i){case 0:return 10;case 1:return e.getLogger().debug("Found space-block"),31;case 2:return e.getLogger().debug("Found nl-block"),31;case 3:return e.getLogger().debug("Found space-block"),29;case 4:e.getLogger().debug(".",t.yytext);break;case 5:e.getLogger().debug("_",t.yytext);break;case 6:return 5;case 7:return t.yytext=-1,28;case 8:return t.yytext=t.yytext.replace(/columns\s+/,""),e.getLogger().debug("COLUMNS (LEX)",t.yytext),28;case 9:case 77:case 78:case 100:this.pushState("md_string");break;case 10:return"MD_STR";case 11:case 35:case 80:this.popState();break;case 12:this.pushState("string");break;case 13:e.getLogger().debug("LEX: POPPING STR:",t.yytext),this.popState();break;case 14:return e.getLogger().debug("LEX: STR end:",t.yytext),"STR";case 15:return t.yytext=t.yytext.replace(/space\:/,""),e.getLogger().debug("SPACE NUM (LEX)",t.yytext),21;case 16:return t.yytext="1",e.getLogger().debug("COLUMNS (LEX)",t.yytext),21;case 17:return 43;case 18:return"LINKSTYLE";case 19:return"INTERPOLATE";case 20:return this.pushState("CLASSDEF"),40;case 21:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 22:return this.popState(),this.pushState("CLASSDEFID"),41;case 23:return this.popState(),42;case 24:return this.pushState("CLASS"),44;case 25:return this.popState(),this.pushState("CLASS_STYLE"),45;case 26:return this.popState(),46;case 27:return this.pushState("STYLE_STMNT"),47;case 28:return this.popState(),this.pushState("STYLE_DEFINITION"),48;case 29:return this.popState(),49;case 30:return this.pushState("acc_title"),"acc_title";case 31:return this.popState(),"acc_title_value";case 32:return this.pushState("acc_descr"),"acc_descr";case 33:return this.popState(),"acc_descr_value";case 34:this.pushState("acc_descr_multiline");break;case 36:return"acc_descr_multiline_value";case 37:return 30;case 38:case 39:case 41:case 42:case 45:return this.popState(),e.getLogger().debug("Lex: (("),"NODE_DEND";case 40:return this.popState(),e.getLogger().debug("Lex: ))"),"NODE_DEND";case 43:return this.popState(),e.getLogger().debug("Lex: (-"),"NODE_DEND";case 44:return this.popState(),e.getLogger().debug("Lex: -)"),"NODE_DEND";case 46:return this.popState(),e.getLogger().debug("Lex: ]]"),"NODE_DEND";case 47:return this.popState(),e.getLogger().debug("Lex: ("),"NODE_DEND";case 48:return this.popState(),e.getLogger().debug("Lex: ])"),"NODE_DEND";case 49:case 50:return this.popState(),e.getLogger().debug("Lex: /]"),"NODE_DEND";case 51:return this.popState(),e.getLogger().debug("Lex: )]"),"NODE_DEND";case 52:return this.popState(),e.getLogger().debug("Lex: )"),"NODE_DEND";case 53:return this.popState(),e.getLogger().debug("Lex: ]>"),"NODE_DEND";case 54:return this.popState(),e.getLogger().debug("Lex: ]"),"NODE_DEND";case 55:return e.getLogger().debug("Lexa: -)"),this.pushState("NODE"),36;case 56:return e.getLogger().debug("Lexa: (-"),this.pushState("NODE"),36;case 57:return e.getLogger().debug("Lexa: ))"),this.pushState("NODE"),36;case 58:case 60:case 61:case 62:case 65:return e.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;case 59:return e.getLogger().debug("Lex: ((("),this.pushState("NODE"),36;case 63:return e.getLogger().debug("Lexc: >"),this.pushState("NODE"),36;case 64:return e.getLogger().debug("Lexa: (["),this.pushState("NODE"),36;case 66:case 67:case 68:case 69:case 70:case 71:case 72:return this.pushState("NODE"),36;case 73:return e.getLogger().debug("Lexa: ["),this.pushState("NODE"),36;case 74:return this.pushState("BLOCK_ARROW"),e.getLogger().debug("LEX ARR START"),38;case 75:return e.getLogger().debug("Lex: NODE_ID",t.yytext),32;case 76:return e.getLogger().debug("Lex: EOF",t.yytext),8;case 79:return"NODE_DESCR";case 81:e.getLogger().debug("Lex: Starting string"),this.pushState("string");break;case 82:e.getLogger().debug("LEX ARR: Starting string"),this.pushState("string");break;case 83:return e.getLogger().debug("LEX: NODE_DESCR:",t.yytext),"NODE_DESCR";case 84:e.getLogger().debug("LEX POPPING"),this.popState();break;case 85:e.getLogger().debug("Lex: =>BAE"),this.pushState("ARROW_DIR");break;case 86:return t.yytext=t.yytext.replace(/^,\s*/,""),e.getLogger().debug("Lex (right): dir:",t.yytext),"DIR";case 87:return t.yytext=t.yytext.replace(/^,\s*/,""),e.getLogger().debug("Lex (left):",t.yytext),"DIR";case 88:return t.yytext=t.yytext.replace(/^,\s*/,""),e.getLogger().debug("Lex (x):",t.yytext),"DIR";case 89:return t.yytext=t.yytext.replace(/^,\s*/,""),e.getLogger().debug("Lex (y):",t.yytext),"DIR";case 90:return t.yytext=t.yytext.replace(/^,\s*/,""),e.getLogger().debug("Lex (up):",t.yytext),"DIR";case 91:return t.yytext=t.yytext.replace(/^,\s*/,""),e.getLogger().debug("Lex (down):",t.yytext),"DIR";case 92:return t.yytext="]>",e.getLogger().debug("Lex (ARROW_DIR end):",t.yytext),this.popState(),this.popState(),"BLOCK_ARROW_END";case 93:return e.getLogger().debug("Lex: LINK","#"+t.yytext+"#"),15;case 94:case 95:case 96:return e.getLogger().debug("Lex: LINK",t.yytext),15;case 97:case 98:case 99:return e.getLogger().debug("Lex: START_LINK",t.yytext),this.pushState("LLABEL"),16;case 101:return e.getLogger().debug("Lex: Starting string"),this.pushState("string"),"LINK_LABEL";case 102:return this.popState(),e.getLogger().debug("Lex: LINK","#"+t.yytext+"#"),15;case 103:case 104:return this.popState(),e.getLogger().debug("Lex: LINK",t.yytext),15;case 105:return e.getLogger().debug("Lex: COLON",t.yytext),t.yytext=t.yytext.slice(1),27}},rules:[/^(?:block-beta\b)/,/^(?:block\s+)/,/^(?:block\n+)/,/^(?:block:)/,/^(?:[\s]+)/,/^(?:[\n]+)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:columns\s+auto\b)/,/^(?:columns\s+[\d]+)/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:space[:]\d+)/,/^(?:space\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\s+)/,/^(?:DEFAULT\s+)/,/^(?:\w+\s+)/,/^(?:[^\n]*)/,/^(?:class\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:style\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:end\b\s*)/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:[\)]\))/,/^(?:\}\})/,/^(?:\})/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\()/,/^(?:\]\])/,/^(?:\()/,/^(?:\]\))/,/^(?:\\\])/,/^(?:\/\])/,/^(?:\)\])/,/^(?:[\)])/,/^(?:\]>)/,/^(?:[\]])/,/^(?:-\))/,/^(?:\(-)/,/^(?:\)\))/,/^(?:\))/,/^(?:\(\(\()/,/^(?:\(\()/,/^(?:\{\{)/,/^(?:\{)/,/^(?:>)/,/^(?:\(\[)/,/^(?:\()/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\[\\)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:\[)/,/^(?:<\[)/,/^(?:[^\(\[\n\-\)\{\}\s\<\>:]+)/,/^(?:$)/,/^(?:["][`])/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:\]>\s*\()/,/^(?:,?\s*right\s*)/,/^(?:,?\s*left\s*)/,/^(?:,?\s*x\s*)/,/^(?:,?\s*y\s*)/,/^(?:,?\s*up\s*)/,/^(?:,?\s*down\s*)/,/^(?:\)\s*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*~~[\~]+\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:["][`])/,/^(?:["])/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?::\d+)/],conditions:{STYLE_DEFINITION:{rules:[29],inclusive:!1},STYLE_STMNT:{rules:[28],inclusive:!1},CLASSDEFID:{rules:[23],inclusive:!1},CLASSDEF:{rules:[21,22],inclusive:!1},CLASS_STYLE:{rules:[26],inclusive:!1},CLASS:{rules:[25],inclusive:!1},LLABEL:{rules:[100,101,102,103,104],inclusive:!1},ARROW_DIR:{rules:[86,87,88,89,90,91,92],inclusive:!1},BLOCK_ARROW:{rules:[77,82,85],inclusive:!1},NODE:{rules:[38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,78,81],inclusive:!1},md_string:{rules:[10,11,79,80],inclusive:!1},space:{rules:[],inclusive:!1},string:{rules:[13,14,83,84],inclusive:!1},acc_descr_multiline:{rules:[35,36],inclusive:!1},acc_descr:{rules:[33],inclusive:!1},acc_title:{rules:[31],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,12,15,16,17,18,19,20,24,27,30,32,34,37,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,93,94,95,96,97,98,99,105],inclusive:!0}}};function L(){this.yy={}}return b.lexer=x,L.prototype=b,b.Parser=L,new L}());d.parser=d;const g=d;let y={},p=[],b={};const x="color",L="fill",S=(0,r.c)();let f={};const m=function(e,t=""){void 0===f[e]&&(f[e]={id:e,styles:[],textStyles:[]});const i=f[e];null!=t&&t.split(",").forEach((e=>{const t=e.replace(/([^;]*);/,"$1").trim();if(e.match(x)){const e=t.replace(L,"bgFill").replace(x,L);i.textStyles.push(e)}i.styles.push(t)}))},_=function(e,t=""){const i=y[e];null!=t&&(i.styles=t.split(","))},k=function(e,t){e.split(",").forEach((function(e){let i=y[e];if(void 0===i){const t=e.trim();y[t]={id:t,type:"na",children:[]},i=y[t]}i.classes||(i.classes=[]),i.classes.push(t)}))},E=(e,t)=>{const i=e.flat(),s=[];for(const o of i)if(o.label&&(o.label=(n=o.label,r.e.sanitizeText(n,S))),"classDef"!==o.type)if("applyClass"!==o.type)if("applyStyles"!==o.type)if("column-setting"===o.type)t.columns=o.columns||-1;else if("edge"===o.type)b[o.id]?b[o.id]++:b[o.id]=1,o.id=b[o.id]+"-"+o.id,p.push(o);else{o.label||("composite"===o.type?o.label="":o.label=o.id);const e=!y[o.id];if(e?y[o.id]=o:("na"!==o.type&&(y[o.id].type=o.type),o.label!==o.id&&(y[o.id].label=o.label)),o.children&&E(o.children,o),"space"===o.type){const e=o.width||1;for(let t=0;t(0,r.F)().block,typeStr2Type:function(e){switch(r.l.debug("typeStr2Type",e),e){case"[]":return"square";case"()":return r.l.debug("we have a round"),"round";case"(())":return"circle";case">]":return"rect_left_inv_arrow";case"{}":return"diamond";case"{{}}":return"hexagon";case"([])":return"stadium";case"[[]]":return"subroutine";case"[()]":return"cylinder";case"((()))":return"doublecircle";case"[//]":return"lean_right";case"[\\\\]":return"lean_left";case"[/\\]":return"trapezoid";case"[\\/]":return"inv_trapezoid";case"<[]>":return"block_arrow";default:return"na"}},edgeTypeStr2Type:function(e){return r.l.debug("typeStr2Type",e),"=="===e?"thick":"normal"},edgeStrToEdgeData:function(e){switch(e.trim()){case"--x":return"arrow_cross";case"--o":return"arrow_circle";default:return"arrow_point"}},getLogger:()=>console,getBlocksFlat:()=>[...Object.values(y)],getBlocks:()=>w||[],getEdges:()=>p,setHierarchy:e=>{v.children=e,E(e,v),w=v.children},getBlock:e=>y[e],setBlock:e=>{y[e.id]=e},getColumns:e=>{const t=y[e];return t?t.columns?t.columns:t.children?t.children.length:-1:-1},getClasses:function(){return f},clear:()=>{r.l.debug("Clear called"),(0,r.v)(),v={id:"root",type:"composite",children:[],columns:-1},y={root:v},w=[],f={},p=[],b={}},generateId:()=>(D++,"id-"+Math.random().toString(36).substr(2,12)+"-"+D)},N=(e,t)=>{const i=o.A,s=i(e,"r"),n=i(e,"g"),r=i(e,"b");return a.A(s,n,r,t)},I=e=>`.label {\n font-family: ${e.fontFamily};\n color: ${e.nodeTextColor||e.textColor};\n }\n .cluster-label text {\n fill: ${e.titleColor};\n }\n .cluster-label span,p {\n color: ${e.titleColor};\n }\n\n\n\n .label text,span,p {\n fill: ${e.nodeTextColor||e.textColor};\n color: ${e.nodeTextColor||e.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${e.mainBkg};\n stroke: ${e.nodeBorder};\n stroke-width: 1px;\n }\n .flowchart-label text {\n text-anchor: middle;\n }\n // .flowchart-label .text-outer-tspan {\n // text-anchor: middle;\n // }\n // .flowchart-label .text-inner-tspan {\n // text-anchor: start;\n // }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${e.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${e.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${e.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${e.edgeLabelBackground};\n rect {\n opacity: 0.5;\n background-color: ${e.edgeLabelBackground};\n fill: ${e.edgeLabelBackground};\n }\n text-align: center;\n }\n\n /* For html labels only */\n .labelBkg {\n background-color: ${N(e.edgeLabelBackground,.5)};\n // background-color:\n }\n\n .node .cluster {\n // fill: ${N(e.mainBkg,.5)};\n fill: ${N(e.clusterBkg,.5)};\n stroke: ${N(e.clusterBorder,.2)};\n box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px;\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${e.titleColor};\n }\n\n .cluster span,p {\n color: ${e.titleColor};\n }\n /* .cluster div {\n color: ${e.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${e.fontFamily};\n font-size: 12px;\n background: ${e.tertiaryColor};\n border: 1px solid ${e.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${e.textColor};\n }\n`;function T(e,t,i=!1){var s,n,l;const o=e;let a="default";((null==(s=null==o?void 0:o.classes)?void 0:s.length)||0)>0&&(a=((null==o?void 0:o.classes)||[]).join(" ")),a+=" flowchart-label";let c,h=0,u="";switch(o.type){case"round":h=5,u="rect";break;case"composite":h=0,u="composite",c=0;break;case"square":case"group":default:u="rect";break;case"diamond":u="question";break;case"hexagon":u="hexagon";break;case"block_arrow":u="block_arrow";break;case"odd":case"rect_left_inv_arrow":u="rect_left_inv_arrow";break;case"lean_right":u="lean_right";break;case"lean_left":u="lean_left";break;case"trapezoid":u="trapezoid";break;case"inv_trapezoid":u="inv_trapezoid";break;case"circle":u="circle";break;case"ellipse":u="ellipse";break;case"stadium":u="stadium";break;case"subroutine":u="subroutine";break;case"cylinder":u="cylinder";break;case"doublecircle":u="doublecircle"}const d=(0,r.k)((null==o?void 0:o.styles)||[]),g=o.label,y=o.size||{width:0,height:0,x:0,y:0};return{labelStyle:d.labelStyle,shape:u,labelText:g,rx:h,ry:h,class:a,style:d.style,id:o.id,directions:o.directions,width:y.width,height:y.height,x:y.x,y:y.y,positioned:i,intersect:void 0,type:o.type,padding:c??((null==(l=null==(n=(0,r.F)())?void 0:n.block)?void 0:l.padding)||0)}}async function z(e,t,i){const s=T(t,0,!1);if("group"===s.type)return;const n=await(0,c.e)(e,s),r=n.node().getBBox(),l=i.getBlock(s.id);l.size={width:r.width,height:r.height,x:0,y:0,node:n},i.setBlock(l),n.remove()}async function A(e,t,i){const s=T(t,0,!0);"space"!==i.getBlock(s.id).type&&(await(0,c.e)(e,s),t.intersect=null==s?void 0:s.intersect,(0,c.p)(s))}async function C(e,t,i,s){for(const n of t)await s(e,n,i),n.children&&await C(e,n.children,i,s)}const O=(null==(n=null==(s=(0,r.c)())?void 0:s.block)?void 0:n.padding)||8;function R(e,t){if(0===e||!Number.isInteger(e))throw new Error("Columns must be an integer !== 0.");if(t<0||!Number.isInteger(t))throw new Error("Position must be a non-negative integer."+t);if(e<0)return{px:t,py:0};if(1===e)return{px:0,py:t};return{px:t%e,py:Math.floor(t/e)}}const B=e=>{let t=0,i=0;for(const s of e.children){const{width:n,height:l,x:o,y:a}=s.size||{width:0,height:0,x:0,y:0};r.l.debug("getMaxChildSize abc95 child:",s.id,"width:",n,"height:",l,"x:",o,"y:",a,s.type),"space"!==s.type&&(n>t&&(t=n/(e.widthInColumns||1)),l>i&&(i=l))}return{width:t,height:i}};function F(e,t,i=0,s=0){var n,l,o,a,c,h,u,d,g,y,p;r.l.debug("setBlockSizes abc95 (start)",e.id,null==(n=null==e?void 0:e.size)?void 0:n.x,"block width =",null==e?void 0:e.size,"sieblingWidth",i),(null==(l=null==e?void 0:e.size)?void 0:l.width)||(e.size={width:i,height:s,x:0,y:0});let b=0,x=0;if((null==(o=e.children)?void 0:o.length)>0){for(const i of e.children)F(i,t);const n=B(e);b=n.width,x=n.height,r.l.debug("setBlockSizes abc95 maxWidth of",e.id,":s children is ",b,x);for(const t of e.children)t.size&&(r.l.debug(`abc95 Setting size of children of ${e.id} id=${t.id} ${b} ${x} ${t.size}`),t.size.width=b*(t.widthInColumns||1)+O*((t.widthInColumns||1)-1),t.size.height=x,t.size.x=0,t.size.y=0,r.l.debug(`abc95 updating size of ${e.id} children child:${t.id} maxWidth:${b} maxHeight:${x}`));for(const i of e.children)F(i,t,b,x);const l=e.columns||-1;let o=0;for(const t of e.children)o+=t.widthInColumns||1;let d=e.children.length;l>0&&l0?Math.min(e.children.length,l):e.children.length;if(t>0){const i=(y-t*O-O)/t;r.l.debug("abc95 (growing to fit) width",e.id,y,null==(u=e.size)?void 0:u.width,i);for(const t of e.children)t.size&&(t.size.width=i)}}e.size={width:y,height:p,x:0,y:0}}r.l.debug("setBlockSizes abc94 (done)",e.id,null==(d=null==e?void 0:e.size)?void 0:d.x,null==(g=null==e?void 0:e.size)?void 0:g.width,null==(y=null==e?void 0:e.size)?void 0:y.y,null==(p=null==e?void 0:e.size)?void 0:p.height)}function P(e,t){var i,s,n,l,o,a,c,h,u,d,g,y,p,b,x,L,S;r.l.debug(`abc85 layout blocks (=>layoutBlocks) ${e.id} x: ${null==(i=null==e?void 0:e.size)?void 0:i.x} y: ${null==(s=null==e?void 0:e.size)?void 0:s.y} width: ${null==(n=null==e?void 0:e.size)?void 0:n.width}`);const f=e.columns||-1;if(r.l.debug("layoutBlocks columns abc95",e.id,"=>",f,e),e.children&&e.children.length>0){const t=(null==(o=null==(l=null==e?void 0:e.children[0])?void 0:l.size)?void 0:o.width)||0,i=e.children.length*t+(e.children.length-1)*O;r.l.debug("widthOfChildren 88",i,"posX");let s=0;r.l.debug("abc91 block?.size?.x",e.id,null==(a=null==e?void 0:e.size)?void 0:a.x);let n=(null==(c=null==e?void 0:e.size)?void 0:c.x)?(null==(h=null==e?void 0:e.size)?void 0:h.x)+(-(null==(u=null==e?void 0:e.size)?void 0:u.width)/2||0):-O,x=0;for(const l of e.children){const t=e;if(!l.size)continue;const{width:i,height:o}=l.size,{px:a,py:c}=R(f,s);if(c!=x&&(x=c,n=(null==(d=null==e?void 0:e.size)?void 0:d.x)?(null==(g=null==e?void 0:e.size)?void 0:g.x)+(-(null==(y=null==e?void 0:e.size)?void 0:y.width)/2||0):-O,r.l.debug("New row in layout for block",e.id," and child ",l.id,x)),r.l.debug(`abc89 layout blocks (child) id: ${l.id} Pos: ${s} (px, py) ${a},${c} (${null==(p=null==t?void 0:t.size)?void 0:p.x},${null==(b=null==t?void 0:t.size)?void 0:b.y}) parent: ${t.id} width: ${i}${O}`),t.size){const e=i/2;l.size.x=n+O+e,r.l.debug(`abc91 layout blocks (calc) px, pyid:${l.id} startingPos=X${n} new startingPosX${l.size.x} ${e} padding=${O} width=${i} halfWidth=${e} => x:${l.size.x} y:${l.size.y} ${l.widthInColumns} (width * (child?.w || 1)) / 2 ${i*((null==l?void 0:l.widthInColumns)||1)/2}`),n=l.size.x+e,l.size.y=t.size.y-t.size.height/2+c*(o+O)+o/2+O,r.l.debug(`abc88 layout blocks (calc) px, pyid:${l.id}startingPosX${n}${O}${e}=>x:${l.size.x}y:${l.size.y}${l.widthInColumns}(width * (child?.w || 1)) / 2${i*((null==l?void 0:l.widthInColumns)||1)/2}`)}l.children&&P(l),s+=(null==l?void 0:l.widthInColumns)||1,r.l.debug("abc88 columnsPos",l,s)}}r.l.debug(`layout blocks (<==layoutBlocks) ${e.id} x: ${null==(x=null==e?void 0:e.size)?void 0:x.x} y: ${null==(L=null==e?void 0:e.size)?void 0:L.y} width: ${null==(S=null==e?void 0:e.size)?void 0:S.width}`)}function Y(e,{minX:t,minY:i,maxX:s,maxY:n}={minX:0,minY:0,maxX:0,maxY:0}){if(e.size&&"root"!==e.id){const{x:r,y:l,width:o,height:a}=e.size;r-o/2s&&(s=r+o/2),l+a/2>n&&(n=l+a/2)}if(e.children)for(const r of e.children)({minX:t,minY:i,maxX:s,maxY:n}=Y(r,{minX:t,minY:i,maxX:s,maxY:n}));return{minX:t,minY:i,maxX:s,maxY:n}}function K(e){const t=e.getBlock("root");if(!t)return;F(t,e,0,0),P(t),r.l.debug("getBlocks",JSON.stringify(t,null,2));const{minX:i,minY:s,maxX:n,maxY:l}=Y(t);return{x:i,y:s,width:n-i,height:l-s}}const X={parser:g,db:$,renderer:{draw:async function(e,t,i,s){const{securityLevel:n,block:l}=(0,r.F)(),o=s.db;let a;"sandbox"===n&&(a=(0,u.Ltv)("#i"+t));const d="sandbox"===n?(0,u.Ltv)(a.nodes()[0].contentDocument.body):(0,u.Ltv)("body"),g="sandbox"===n?d.select(`[id="${t}"]`):(0,u.Ltv)(`[id="${t}"]`);(0,c.a)(g,["point","circle","cross"],s.type,t);const y=o.getBlocks(),p=o.getBlocksFlat(),b=o.getEdges(),x=g.insert("g").attr("class","block");await async function(e,t,i){await C(e,t,i,z)}(x,y,o);const L=K(o);if(await async function(e,t,i){await C(e,t,i,A)}(x,y,o),await async function(e,t,i,s,n){const r=new h.T({multigraph:!0,compound:!0});r.setGraph({rankdir:"TB",nodesep:10,ranksep:10,marginx:8,marginy:8});for(const l of i)l.size&&r.setNode(l.id,{width:l.size.width,height:l.size.height,intersect:l.intersect});for(const l of t)if(l.start&&l.end){const t=s.getBlock(l.start),i=s.getBlock(l.end);if((null==t?void 0:t.size)&&(null==i?void 0:i.size)){const s=t.size,o=i.size,a=[{x:s.x,y:s.y},{x:s.x+(o.x-s.x)/2,y:s.y+(o.y-s.y)/2},{x:o.x,y:o.y}];await(0,c.h)(e,{v:l.start,w:l.end,name:l.id},{...l,arrowTypeEnd:l.arrowTypeEnd,arrowTypeStart:l.arrowTypeStart,points:a,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"},void 0,"block",r,n),l.label&&(await(0,c.f)(e,{...l,label:l.label,labelStyle:"stroke: #333; stroke-width: 1.5px;fill:none;",arrowTypeEnd:l.arrowTypeEnd,arrowTypeStart:l.arrowTypeStart,points:a,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"}),await(0,c.j)({...l,x:a[1].x,y:a[1].y},{originalPath:a}))}}}(x,b,p,o,t),L){const e=L,t=Math.max(1,Math.round(e.width/e.height*.125)),i=e.height+t+10,s=e.width+10,{useMaxWidth:n}=l;(0,r.i)(g,i,s,!!n),r.l.debug("Here Bounds",L,e),g.attr("viewBox",`${e.x-5} ${e.y-5} ${e.width+10} ${e.height+10}`)}(0,u.UMr)(u.zt)},getClasses:function(e,t){return t.db.getClasses()}},styles:I}}}]); \ No newline at end of file diff --git a/assets/js/420.011125cd.js b/assets/js/420.011125cd.js new file mode 100644 index 0000000000..dbf4b10ace --- /dev/null +++ b/assets/js/420.011125cd.js @@ -0,0 +1,1323 @@ +"use strict"; +exports.id = 420; +exports.ids = [420]; +exports.modules = { + +/***/ 26420: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99702); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); +/* harmony import */ var _svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(28259); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74353); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(16750); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99418); + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [6, 8, 10, 11, 12, 14, 16, 17, 18], $V1 = [1, 9], $V2 = [1, 10], $V3 = [1, 11], $V4 = [1, 12], $V5 = [1, 13], $V6 = [1, 14]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "journey": 4, "document": 5, "EOF": 6, "line": 7, "SPACE": 8, "statement": 9, "NEWLINE": 10, "title": 11, "acc_title": 12, "acc_title_value": 13, "acc_descr": 14, "acc_descr_value": 15, "acc_descr_multiline_value": 16, "section": 17, "taskName": 18, "taskData": 19, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "journey", 6: "EOF", 8: "SPACE", 10: "NEWLINE", 11: "title", 12: "acc_title", 13: "acc_title_value", 14: "acc_descr", 15: "acc_descr_value", 16: "acc_descr_multiline_value", 17: "section", 18: "taskName", 19: "taskData" }, + productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [9, 1], [9, 2], [9, 2], [9, 1], [9, 1], [9, 2]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 1: + return $$[$0 - 1]; + case 2: + this.$ = []; + break; + case 3: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 4: + case 5: + this.$ = $$[$0]; + break; + case 6: + case 7: + this.$ = []; + break; + case 8: + yy.setDiagramTitle($$[$0].substr(6)); + this.$ = $$[$0].substr(6); + break; + case 9: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 10: + case 11: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 12: + yy.addSection($$[$0].substr(8)); + this.$ = $$[$0].substr(8); + break; + case 13: + yy.addTask($$[$0 - 1], $$[$0]); + this.$ = "task"; + break; + } + }, + table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: [1, 6], 9: 7, 10: [1, 8], 11: $V1, 12: $V2, 14: $V3, 16: $V4, 17: $V5, 18: $V6 }, o($V0, [2, 7], { 1: [2, 1] }), o($V0, [2, 3]), { 9: 15, 11: $V1, 12: $V2, 14: $V3, 16: $V4, 17: $V5, 18: $V6 }, o($V0, [2, 5]), o($V0, [2, 6]), o($V0, [2, 8]), { 13: [1, 16] }, { 15: [1, 17] }, o($V0, [2, 11]), o($V0, [2, 12]), { 19: [1, 18] }, o($V0, [2, 4]), o($V0, [2, 9]), o($V0, [2, 10]), o($V0, [2, 13])], + defaultActions: {}, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + break; + case 1: + break; + case 2: + return 10; + case 3: + break; + case 4: + break; + case 5: + return 4; + case 6: + return 11; + case 7: + this.begin("acc_title"); + return 12; + case 8: + this.popState(); + return "acc_title_value"; + case 9: + this.begin("acc_descr"); + return 14; + case 10: + this.popState(); + return "acc_descr_value"; + case 11: + this.begin("acc_descr_multiline"); + break; + case 12: + this.popState(); + break; + case 13: + return "acc_descr_multiline_value"; + case 14: + return 17; + case 15: + return 18; + case 16: + return 19; + case 17: + return ":"; + case 18: + return 6; + case 19: + return "INVALID"; + } + }, + rules: [/^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:journey\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:section\s[^#:\n;]+)/i, /^(?:[^#:\n;]+)/i, /^(?::[^#\n;]+)/i, /^(?::)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "acc_descr_multiline": { "rules": [12, 13], "inclusive": false }, "acc_descr": { "rules": [10], "inclusive": false }, "acc_title": { "rules": [8], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 18, 19], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +let currentSection = ""; +const sections = []; +const tasks = []; +const rawTasks = []; +const clear = function() { + sections.length = 0; + tasks.length = 0; + currentSection = ""; + rawTasks.length = 0; + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.v)(); +}; +const addSection = function(txt) { + currentSection = txt; + sections.push(txt); +}; +const getSections = function() { + return sections; +}; +const getTasks = function() { + let allItemsProcessed = compileTasks(); + const maxDepth = 100; + let iterationCount = 0; + while (!allItemsProcessed && iterationCount < maxDepth) { + allItemsProcessed = compileTasks(); + iterationCount++; + } + tasks.push(...rawTasks); + return tasks; +}; +const updateActors = function() { + const tempActors = []; + tasks.forEach((task) => { + if (task.people) { + tempActors.push(...task.people); + } + }); + const unique = new Set(tempActors); + return [...unique].sort(); +}; +const addTask = function(descr, taskData) { + const pieces = taskData.substr(1).split(":"); + let score = 0; + let peeps = []; + if (pieces.length === 1) { + score = Number(pieces[0]); + peeps = []; + } else { + score = Number(pieces[0]); + peeps = pieces[1].split(","); + } + const peopleList = peeps.map((s) => s.trim()); + const rawTask = { + section: currentSection, + type: currentSection, + people: peopleList, + task: descr, + score + }; + rawTasks.push(rawTask); +}; +const addTaskOrg = function(descr) { + const newTask = { + section: currentSection, + type: currentSection, + description: descr, + task: descr, + classes: [] + }; + tasks.push(newTask); +}; +const compileTasks = function() { + const compileTask = function(pos) { + return rawTasks[pos].processed; + }; + let allProcessed = true; + for (const [i, rawTask] of rawTasks.entries()) { + compileTask(i); + allProcessed = allProcessed && rawTask.processed; + } + return allProcessed; +}; +const getActors = function() { + return updateActors(); +}; +const db = { + getConfig: () => (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey, + clear, + setDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.q, + getDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.t, + setAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.s, + getAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.g, + setAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.b, + getAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.a, + addSection, + getSections, + getTasks, + addTask, + addTaskOrg, + getActors +}; +const getStyles = (options) => `.label { + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + color: ${options.textColor}; + } + .mouth { + stroke: #666; + } + + line { + stroke: ${options.textColor} + } + + .legend { + fill: ${options.textColor}; + } + + .label text { + fill: #333; + } + .label { + color: ${options.textColor} + } + + .face { + ${options.faceColor ? `fill: ${options.faceColor}` : "fill: #FFF8DC"}; + stroke: #999; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + stroke-width: 1px; + } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${options.arrowheadColor}; + } + + .edgePath .path { + stroke: ${options.lineColor}; + stroke-width: 1.5px; + } + + .flowchart-link { + stroke: ${options.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${options.edgeLabelBackground}; + rect { + opacity: 0.5; + } + text-align: center; + } + + .cluster rect { + } + + .cluster text { + fill: ${options.titleColor}; + } + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + font-size: 12px; + background: ${options.tertiaryColor}; + border: 1px solid ${options.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .task-type-0, .section-type-0 { + ${options.fillType0 ? `fill: ${options.fillType0}` : ""}; + } + .task-type-1, .section-type-1 { + ${options.fillType0 ? `fill: ${options.fillType1}` : ""}; + } + .task-type-2, .section-type-2 { + ${options.fillType0 ? `fill: ${options.fillType2}` : ""}; + } + .task-type-3, .section-type-3 { + ${options.fillType0 ? `fill: ${options.fillType3}` : ""}; + } + .task-type-4, .section-type-4 { + ${options.fillType0 ? `fill: ${options.fillType4}` : ""}; + } + .task-type-5, .section-type-5 { + ${options.fillType0 ? `fill: ${options.fillType5}` : ""}; + } + .task-type-6, .section-type-6 { + ${options.fillType0 ? `fill: ${options.fillType6}` : ""}; + } + .task-type-7, .section-type-7 { + ${options.fillType0 ? `fill: ${options.fillType7}` : ""}; + } + + .actor-0 { + ${options.actor0 ? `fill: ${options.actor0}` : ""}; + } + .actor-1 { + ${options.actor1 ? `fill: ${options.actor1}` : ""}; + } + .actor-2 { + ${options.actor2 ? `fill: ${options.actor2}` : ""}; + } + .actor-3 { + ${options.actor3 ? `fill: ${options.actor3}` : ""}; + } + .actor-4 { + ${options.actor4 ? `fill: ${options.actor4}` : ""}; + } + .actor-5 { + ${options.actor5 ? `fill: ${options.actor5}` : ""}; + } +`; +const styles = getStyles; +const drawRect = function(elem, rectData) { + return (0,_svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__.d)(elem, rectData); +}; +const drawFace = function(element, faceData) { + const radius = 15; + const circleElement = element.append("circle").attr("cx", faceData.cx).attr("cy", faceData.cy).attr("class", "face").attr("r", radius).attr("stroke-width", 2).attr("overflow", "visible"); + const face = element.append("g"); + face.append("circle").attr("cx", faceData.cx - radius / 3).attr("cy", faceData.cy - radius / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); + face.append("circle").attr("cx", faceData.cx + radius / 3).attr("cy", faceData.cy - radius / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); + function smile(face2) { + const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .JLW)().startAngle(Math.PI / 2).endAngle(3 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2); + face2.append("path").attr("class", "mouth").attr("d", arc$1).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 2) + ")"); + } + function sad(face2) { + const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .JLW)().startAngle(3 * Math.PI / 2).endAngle(5 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2); + face2.append("path").attr("class", "mouth").attr("d", arc$1).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 7) + ")"); + } + function ambivalent(face2) { + face2.append("line").attr("class", "mouth").attr("stroke", 2).attr("x1", faceData.cx - 5).attr("y1", faceData.cy + 7).attr("x2", faceData.cx + 5).attr("y2", faceData.cy + 7).attr("class", "mouth").attr("stroke-width", "1px").attr("stroke", "#666"); + } + if (faceData.score > 3) { + smile(face); + } else if (faceData.score < 3) { + sad(face); + } else { + ambivalent(face); + } + return circleElement; +}; +const drawCircle = function(element, circleData) { + const circleElement = element.append("circle"); + circleElement.attr("cx", circleData.cx); + circleElement.attr("cy", circleData.cy); + circleElement.attr("class", "actor-" + circleData.pos); + circleElement.attr("fill", circleData.fill); + circleElement.attr("stroke", circleData.stroke); + circleElement.attr("r", circleData.r); + if (circleElement.class !== void 0) { + circleElement.attr("class", circleElement.class); + } + if (circleData.title !== void 0) { + circleElement.append("title").text(circleData.title); + } + return circleElement; +}; +const drawText = function(elem, textData) { + return (0,_svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__.f)(elem, textData); +}; +const drawLabel = function(elem, txtObject) { + function genPoints(x, y, width, height, cut) { + return x + "," + y + " " + (x + width) + "," + y + " " + (x + width) + "," + (y + height - cut) + " " + (x + width - cut * 1.2) + "," + (y + height) + " " + x + "," + (y + height); + } + const polygon = elem.append("polygon"); + polygon.attr("points", genPoints(txtObject.x, txtObject.y, 50, 20, 7)); + polygon.attr("class", "labelBox"); + txtObject.y = txtObject.y + txtObject.labelMargin; + txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin; + drawText(elem, txtObject); +}; +const drawSection = function(elem, section, conf2) { + const g = elem.append("g"); + const rect = (0,_svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__.g)(); + rect.x = section.x; + rect.y = section.y; + rect.fill = section.fill; + rect.width = conf2.width * section.taskCount + // width of the tasks + conf2.diagramMarginX * (section.taskCount - 1); + rect.height = conf2.height; + rect.class = "journey-section section-type-" + section.num; + rect.rx = 3; + rect.ry = 3; + drawRect(g, rect); + _drawTextCandidateFunc(conf2)( + section.text, + g, + rect.x, + rect.y, + rect.width, + rect.height, + { class: "journey-section section-type-" + section.num }, + conf2, + section.colour + ); +}; +let taskCount = -1; +const drawTask = function(elem, task, conf2) { + const center = task.x + conf2.width / 2; + const g = elem.append("g"); + taskCount++; + const maxHeight = 300 + 5 * 30; + g.append("line").attr("id", "task" + taskCount).attr("x1", center).attr("y1", task.y).attr("x2", center).attr("y2", maxHeight).attr("class", "task-line").attr("stroke-width", "1px").attr("stroke-dasharray", "4 2").attr("stroke", "#666"); + drawFace(g, { + cx: center, + cy: 300 + (5 - task.score) * 30, + score: task.score + }); + const rect = (0,_svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__.g)(); + rect.x = task.x; + rect.y = task.y; + rect.fill = task.fill; + rect.width = conf2.width; + rect.height = conf2.height; + rect.class = "task task-type-" + task.num; + rect.rx = 3; + rect.ry = 3; + drawRect(g, rect); + let xPos = task.x + 14; + task.people.forEach((person) => { + const colour = task.actors[person].color; + const circle = { + cx: xPos, + cy: task.y, + r: 7, + fill: colour, + stroke: "#000", + title: person, + pos: task.actors[person].position + }; + drawCircle(g, circle); + xPos += 10; + }); + _drawTextCandidateFunc(conf2)( + task.task, + g, + rect.x, + rect.y, + rect.width, + rect.height, + { class: "task" }, + conf2, + task.colour + ); +}; +const drawBackgroundRect = function(elem, bounds2) { + (0,_svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__.a)(elem, bounds2); +}; +const _drawTextCandidateFunc = function() { + function byText(content, g, x, y, width, height, textAttrs, colour) { + const text = g.append("text").attr("x", x + width / 2).attr("y", y + height / 2 + 5).style("font-color", colour).style("text-anchor", "middle").text(content); + _setTextAttrs(text, textAttrs); + } + function byTspan(content, g, x, y, width, height, textAttrs, conf2, colour) { + const { taskFontSize, taskFontFamily } = conf2; + const lines = content.split(//gi); + for (let i = 0; i < lines.length; i++) { + const dy = i * taskFontSize - taskFontSize * (lines.length - 1) / 2; + const text = g.append("text").attr("x", x + width / 2).attr("y", y).attr("fill", colour).style("text-anchor", "middle").style("font-size", taskFontSize).style("font-family", taskFontFamily); + text.append("tspan").attr("x", x + width / 2).attr("dy", dy).text(lines[i]); + text.attr("y", y + height / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); + _setTextAttrs(text, textAttrs); + } + } + function byFo(content, g, x, y, width, height, textAttrs, conf2) { + const body = g.append("switch"); + const f = body.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height).attr("position", "fixed"); + const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); + text.append("div").attr("class", "label").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); + byTspan(content, body, x, y, width, height, textAttrs, conf2); + _setTextAttrs(text, textAttrs); + } + function _setTextAttrs(toText, fromTextAttrsDict) { + for (const key in fromTextAttrsDict) { + if (key in fromTextAttrsDict) { + toText.attr(key, fromTextAttrsDict[key]); + } + } + } + return function(conf2) { + return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan; + }; +}(); +const initGraphics = function(graphics) { + graphics.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 5).attr("refY", 2).attr("markerWidth", 6).attr("markerHeight", 4).attr("orient", "auto").append("path").attr("d", "M 0,0 V 4 L6,2 Z"); +}; +const svgDraw = { + drawRect, + drawCircle, + drawSection, + drawText, + drawLabel, + drawTask, + drawBackgroundRect, + initGraphics +}; +const setConf = function(cnf) { + const keys = Object.keys(cnf); + keys.forEach(function(key) { + conf[key] = cnf[key]; + }); +}; +const actors = {}; +function drawActorLegend(diagram2) { + const conf2 = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey; + let yPos = 60; + Object.keys(actors).forEach((person) => { + const colour = actors[person].color; + const circleData = { + cx: 20, + cy: yPos, + r: 7, + fill: colour, + stroke: "#000", + pos: actors[person].position + }; + svgDraw.drawCircle(diagram2, circleData); + const labelData = { + x: 40, + y: yPos + 7, + fill: "#666", + text: person, + textMargin: conf2.boxTextMargin | 5 + }; + svgDraw.drawText(diagram2, labelData); + yPos += 20; + }); +} +const conf = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey; +const LEFT_MARGIN = conf.leftMargin; +const draw = function(text, id, version, diagObj) { + const conf2 = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey; + const securityLevel = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("body"); + bounds.init(); + const diagram2 = root.select("#" + id); + svgDraw.initGraphics(diagram2); + const tasks2 = diagObj.db.getTasks(); + const title = diagObj.db.getDiagramTitle(); + const actorNames = diagObj.db.getActors(); + for (const member in actors) { + delete actors[member]; + } + let actorPos = 0; + actorNames.forEach((actorName) => { + actors[actorName] = { + color: conf2.actorColours[actorPos % conf2.actorColours.length], + position: actorPos + }; + actorPos++; + }); + drawActorLegend(diagram2); + bounds.insert(0, 0, LEFT_MARGIN, Object.keys(actors).length * 50); + drawTasks(diagram2, tasks2, 0); + const box = bounds.getBounds(); + if (title) { + diagram2.append("text").text(title).attr("x", LEFT_MARGIN).attr("font-size", "4ex").attr("font-weight", "bold").attr("y", 25); + } + const height = box.stopy - box.starty + 2 * conf2.diagramMarginY; + const width = LEFT_MARGIN + box.stopx + 2 * conf2.diagramMarginX; + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.i)(diagram2, height, width, conf2.useMaxWidth); + diagram2.append("line").attr("x1", LEFT_MARGIN).attr("y1", conf2.height * 4).attr("x2", width - LEFT_MARGIN - 4).attr("y2", conf2.height * 4).attr("stroke-width", 4).attr("stroke", "black").attr("marker-end", "url(#arrowhead)"); + const extraVertForTitle = title ? 70 : 0; + diagram2.attr("viewBox", `${box.startx} -25 ${width} ${height + extraVertForTitle}`); + diagram2.attr("preserveAspectRatio", "xMinYMin meet"); + diagram2.attr("height", height + extraVertForTitle + 25); +}; +const bounds = { + data: { + startx: void 0, + stopx: void 0, + starty: void 0, + stopy: void 0 + }, + verticalPos: 0, + sequenceItems: [], + init: function() { + this.sequenceItems = []; + this.data = { + startx: void 0, + stopx: void 0, + starty: void 0, + stopy: void 0 + }; + this.verticalPos = 0; + }, + updateVal: function(obj, key, val, fun) { + if (obj[key] === void 0) { + obj[key] = val; + } else { + obj[key] = fun(val, obj[key]); + } + }, + updateBounds: function(startx, starty, stopx, stopy) { + const conf2 = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey; + const _self = this; + let cnt = 0; + function updateFn(type) { + return function updateItemBounds(item) { + cnt++; + const n = _self.sequenceItems.length - cnt + 1; + _self.updateVal(item, "starty", starty - n * conf2.boxMargin, Math.min); + _self.updateVal(item, "stopy", stopy + n * conf2.boxMargin, Math.max); + _self.updateVal(bounds.data, "startx", startx - n * conf2.boxMargin, Math.min); + _self.updateVal(bounds.data, "stopx", stopx + n * conf2.boxMargin, Math.max); + if (!(type === "activation")) { + _self.updateVal(item, "startx", startx - n * conf2.boxMargin, Math.min); + _self.updateVal(item, "stopx", stopx + n * conf2.boxMargin, Math.max); + _self.updateVal(bounds.data, "starty", starty - n * conf2.boxMargin, Math.min); + _self.updateVal(bounds.data, "stopy", stopy + n * conf2.boxMargin, Math.max); + } + }; + } + this.sequenceItems.forEach(updateFn()); + }, + insert: function(startx, starty, stopx, stopy) { + const _startx = Math.min(startx, stopx); + const _stopx = Math.max(startx, stopx); + const _starty = Math.min(starty, stopy); + const _stopy = Math.max(starty, stopy); + this.updateVal(bounds.data, "startx", _startx, Math.min); + this.updateVal(bounds.data, "starty", _starty, Math.min); + this.updateVal(bounds.data, "stopx", _stopx, Math.max); + this.updateVal(bounds.data, "stopy", _stopy, Math.max); + this.updateBounds(_startx, _starty, _stopx, _stopy); + }, + bumpVerticalPos: function(bump) { + this.verticalPos = this.verticalPos + bump; + this.data.stopy = this.verticalPos; + }, + getVerticalPos: function() { + return this.verticalPos; + }, + getBounds: function() { + return this.data; + } +}; +const fills = conf.sectionFills; +const textColours = conf.sectionColours; +const drawTasks = function(diagram2, tasks2, verticalPos) { + const conf2 = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey; + let lastSection = ""; + const sectionVHeight = conf2.height * 2 + conf2.diagramMarginY; + const taskPos = verticalPos + sectionVHeight; + let sectionNumber = 0; + let fill = "#CCC"; + let colour = "black"; + let num = 0; + for (const [i, task] of tasks2.entries()) { + if (lastSection !== task.section) { + fill = fills[sectionNumber % fills.length]; + num = sectionNumber % fills.length; + colour = textColours[sectionNumber % textColours.length]; + let taskInSectionCount = 0; + const currentSection2 = task.section; + for (let taskIndex = i; taskIndex < tasks2.length; taskIndex++) { + if (tasks2[taskIndex].section == currentSection2) { + taskInSectionCount = taskInSectionCount + 1; + } else { + break; + } + } + const section = { + x: i * conf2.taskMargin + i * conf2.width + LEFT_MARGIN, + y: 50, + text: task.section, + fill, + num, + colour, + taskCount: taskInSectionCount + }; + svgDraw.drawSection(diagram2, section, conf2); + lastSection = task.section; + sectionNumber++; + } + const taskActors = task.people.reduce((acc, actorName) => { + if (actors[actorName]) { + acc[actorName] = actors[actorName]; + } + return acc; + }, {}); + task.x = i * conf2.taskMargin + i * conf2.width + LEFT_MARGIN; + task.y = taskPos; + task.width = conf2.diagramMarginX; + task.height = conf2.diagramMarginY; + task.colour = colour; + task.fill = fill; + task.num = num; + task.actors = taskActors; + svgDraw.drawTask(diagram2, task, conf2); + bounds.insert(task.x, task.y, task.x + task.width + conf2.taskMargin, 300 + 5 * 30); + } +}; +const renderer = { + setConf, + draw +}; +const diagram = { + parser: parser$1, + db, + renderer, + styles, + init: (cnf) => { + renderer.setConf(cnf.journey); + db.clear(); + } +}; + + + +/***/ }), + +/***/ 28259: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ drawBackgroundRect), +/* harmony export */ b: () => (/* binding */ drawEmbeddedImage), +/* harmony export */ c: () => (/* binding */ drawImage), +/* harmony export */ d: () => (/* binding */ drawRect), +/* harmony export */ e: () => (/* binding */ getTextObj), +/* harmony export */ f: () => (/* binding */ drawText), +/* harmony export */ g: () => (/* binding */ getNoteRect) +/* harmony export */ }); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(16750); +/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99702); + + +const drawRect = (element, rectData) => { + const rectElement = element.append("rect"); + rectElement.attr("x", rectData.x); + rectElement.attr("y", rectData.y); + rectElement.attr("fill", rectData.fill); + rectElement.attr("stroke", rectData.stroke); + rectElement.attr("width", rectData.width); + rectElement.attr("height", rectData.height); + if (rectData.name) { + rectElement.attr("name", rectData.name); + } + rectData.rx !== void 0 && rectElement.attr("rx", rectData.rx); + rectData.ry !== void 0 && rectElement.attr("ry", rectData.ry); + if (rectData.attrs !== void 0) { + for (const attrKey in rectData.attrs) { + rectElement.attr(attrKey, rectData.attrs[attrKey]); + } + } + rectData.class !== void 0 && rectElement.attr("class", rectData.class); + return rectElement; +}; +const drawBackgroundRect = (element, bounds) => { + const rectData = { + x: bounds.startx, + y: bounds.starty, + width: bounds.stopx - bounds.startx, + height: bounds.stopy - bounds.starty, + fill: bounds.fill, + stroke: bounds.stroke, + class: "rect" + }; + const rectElement = drawRect(element, rectData); + rectElement.lower(); +}; +const drawText = (element, textData) => { + const nText = textData.text.replace(_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.J, " "); + const textElem = element.append("text"); + textElem.attr("x", textData.x); + textElem.attr("y", textData.y); + textElem.attr("class", "legend"); + textElem.style("text-anchor", textData.anchor); + textData.class !== void 0 && textElem.attr("class", textData.class); + const tspan = textElem.append("tspan"); + tspan.attr("x", textData.x + textData.textMargin * 2); + tspan.text(nText); + return textElem; +}; +const drawImage = (elem, x, y, link) => { + const imageElement = elem.append("image"); + imageElement.attr("x", x); + imageElement.attr("y", y); + const sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .Jf)(link); + imageElement.attr("xlink:href", sanitizedLink); +}; +const drawEmbeddedImage = (element, x, y, link) => { + const imageElement = element.append("use"); + imageElement.attr("x", x); + imageElement.attr("y", y); + const sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .Jf)(link); + imageElement.attr("xlink:href", `#${sanitizedLink}`); +}; +const getNoteRect = () => { + const noteRectData = { + x: 0, + y: 0, + width: 100, + height: 100, + fill: "#EDF2AE", + stroke: "#666", + anchor: "start", + rx: 0, + ry: 0 + }; + return noteRectData; +}; +const getTextObj = () => { + const testObject = { + x: 0, + y: 0, + width: 100, + height: 100, + "text-anchor": "start", + style: "#666", + textMargin: 0, + rx: 0, + ry: 0, + tspan: true + }; + return testObject; +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/426.9063c910.js b/assets/js/426.9063c910.js new file mode 100644 index 0000000000..8af9fc4b1e --- /dev/null +++ b/assets/js/426.9063c910.js @@ -0,0 +1,10825 @@ +"use strict"; +exports.id = 426; +exports.ids = [426]; +exports.modules = { + +/***/ 21176: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Zp: () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(8058); +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(5664); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(48585); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(39142); +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(34098); +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(74722); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(91395); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(697); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.A(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.A( + map/* default */.A(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.A(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.A(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.T(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.A(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.A(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.A(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.A(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.A(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.A('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.A(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.A(g.outEdges(v), function (e) { + if (has/* default */.A(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.A(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.A(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/merge.js + 6 modules +var merge = __webpack_require__(98879); +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(81942); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(23068); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(61882); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.A)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(29008); +;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.A, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(52528); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(79841); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(49574); +;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.A)(iteratee, 3); + + (0,_baseForOwn/* default */.A)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.A)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(69592); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.A, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js +var _root = __webpack_require__(41917); +;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default */.A.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.A(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.T().setGraph(g.graph()); + forEach/* default */.A(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.A(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.T({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.A(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.A(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.A(range/* default */.A(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.A(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.A(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.A(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.A(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.A(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.A(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.A(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.A(layers, function (vs, i) { + if (isUndefined/* default */.A(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.A(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.A(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.A(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.A(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.A(children, dfs); + } + + if (has/* default */.A(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.A(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.A(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.A(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.A(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.A(edge.points, reverseYOne); + if (has/* default */.A(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.A(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.A(edge.points, swapXYOne); + if (has/* default */.A(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.A(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.A(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.A)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.A(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.A(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.A(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.T({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.A(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.A(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.A(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(38446); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(27422); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.A)(collection)) { + var iteratee = (0,_baseIteratee/* default */.A)(predicate, 3); + collection = (0,keys/* default */.A)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(25707); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(74342); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.A)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.A)(array, (0,_baseIteratee/* default */.A)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(11662); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.A(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.A(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(69471); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(9779); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(88496); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(53098); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.A)(value) && (0,isObjectLike/* default */.A)(value) && (0,_baseGetTag/* default */.A)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(70805); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.A)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.A)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.A)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.A)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.A(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.A(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.A(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.A(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.A(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.A(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.A(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.A(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(73046); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.A(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.A(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.A(tree.neighbors(v), function (w) { + if (!has/* default */.A(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.A(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.A(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(38207); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(89463); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.A(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.A(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.A(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.A(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.A(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.A(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.A( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(91641); +;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.A)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.A(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.T({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.A(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.A(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.A(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.A(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.A('_root')))); + return v; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(52851); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.A); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(13588); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(45572); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(66318); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(52568); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(52789); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.A)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.A)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.A)(iteratees, function(iteratee) { + if ((0,isArray/* default */.A)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.A)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.A]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.A)(iteratees, (0,_baseUnary/* default */.A)(_baseIteratee/* default */.A)); + + var result = (0,_baseMap/* default */.A)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.A)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(24326); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(6832); +;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.A)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.A)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.A)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.A)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.A(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.A( + map/* default */.A(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.A(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.A(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.A( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.A(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.A(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.A(range/* default */.A(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.A(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.A(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.A(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.A(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.A( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.A(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.A(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.A(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.A(entryV) && !isUndefined/* default */.A(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.A(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.A(uEntry.barycenter) || + isUndefined/* default */.A(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.A(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.A(entry.out, handleOut(entry)); + } + + return map/* default */.A( + filter/* default */.A(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.A(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.A(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.A(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.A(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.A(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.A(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.A(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.A([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.A(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.A(entries, function (entry) { + entry.vs = flatten/* default */.A( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.A(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.A(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.A(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.A(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.T(); + forEach/* default */.A(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.A(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.A(layering, function (layer) { + forEach/* default */.A(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.A(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.A(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.A(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(99922); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.A)(object, (0,_castFunction/* default */.A)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(4574); +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(77996); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.A)(object, (0,_castFunction/* default */.A)(iteratee), keysIn/* default */.A); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.A(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.A(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.A(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.A(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.A(range/* default */.A(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.A(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.A(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.A(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.A(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.A(layering, function (layer) { + forEach/* default */.A(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.A(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.A(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.A(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.T(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.A(layering, function (layer) { + var u; + forEach/* default */.A(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.A(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.A(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.A(['u', 'd'], function (vert) { + forEach/* default */.A(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.A(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.A(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = merge/* default */.A(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.A(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.A(layering).reverse(); + forEach/* default */.A(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.A(adjustedLayering, function (inner) { + return values/* default */.A(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.A(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.A(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.A(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.A(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.A(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.A(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.A(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.A(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.T({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + merge/* default */.A({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.A(graph, graphAttrs)) + ); + + forEach/* default */.A(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.A(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.A(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + merge/* default */.A({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.A(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.A(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.A(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.A(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.A(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.A(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.A(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.A(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.A(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.A(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.A(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.A(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.A(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.A(layers, function (layer) { + var orderShift = 0; + forEach/* default */.A(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.A(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.A(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.A(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.A(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 73046: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + T: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(48585); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(39142); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(89610); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(27422); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(11662); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(66401); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(8058); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(69592); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(13588); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(24326); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(62062); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(25707); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.A)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(64099); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(39857); +;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(29959); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.A && (1 / (0,_setToArray/* default */.A)(new _Set/* default */.A([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.A(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.A)(set); + } + isCommon = false; + includes = _cacheHas/* default */.A; + seen = new _SetCache/* default */.A; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(53533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.A)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.A)(arrays, 1, isArrayLikeObject/* default */.A, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(38207); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(89463); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.A(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.A(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.A(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.A(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.A(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.A(newDefault)) { + newDefault = constant/* default */.A(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.A(this._nodes); + } + sources() { + var self = this; + return filter/* default */.A(this.nodes(), function (v) { + return isEmpty/* default */.A(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.A(this.nodes(), function (v) { + return isEmpty/* default */.A(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.A(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.A(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.A(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.A(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.A(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.A(keys/* default */.A(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.A(keys/* default */.A(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.A(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.A(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.A(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.A(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.A(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.A(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.A(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.A(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.A(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.A(newDefault)) { + newDefault = constant/* default */.A(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.A(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.A(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.A(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.A(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.A(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.A(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.A(inV); + if (!u) { + return edges; + } + return filter/* default */.A(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.A(outV); + if (!w) { + return edges; + } + return filter/* default */.A(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.A(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 697: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ T: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.T) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73046); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 62062: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(29471); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.A; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 72641: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 2634: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 45572: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 76912: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 91641: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(11754); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(72641); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(52851); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(22031); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(27422); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.A)(source, (0,keys/* default */.A)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(77996); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.A)(source, (0,keysIn/* default */.A)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(80154); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(39759); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(14792); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.A)(source, (0,_getSymbols/* default */.A)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(76912); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(15647); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(13153); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.A : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.A)(result, (0,_getSymbols/* default */.A)(object)); + object = (0,_getPrototype/* default */.A)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.A)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(19042); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(33831); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.A)(object, keysIn/* default */.A, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(9779); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(90565); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.A)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(241); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(1801); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.A)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.A)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(18598); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(99912); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(53098); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.A)(value) && (0,_getTag/* default */.A)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(52789); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(64841); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.A && _nodeUtil/* default */.A.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.A)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(23149); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.A)(value) && (0,_getTag/* default */.A)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.A && _nodeUtil/* default */.A.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.A)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.A)(value)) { + return value; + } + var isArr = (0,isArray/* default */.A)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.A)(value, result); + } + } else { + var tag = (0,_getTag/* default */.A)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.A)(value)) { + return (0,_cloneBuffer/* default */.A)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.A)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.A); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.A) + : (isFlat ? keysIn/* default */.A : keys/* default */.A); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.A)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.A)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 6240: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(79841); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(38446); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.A)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.A); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 25707: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 13588: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(76912); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(241); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(52274); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.A ? _Symbol/* default */.A.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.A)(value) || (0,isArguments/* default */.A)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.A)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 79841: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4574); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27422); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 66318: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30901); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 33831: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76912); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 49574: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(11754); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(62062); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(64099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.A : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.A)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(241); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(43988); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(66984); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(29959); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.A(object), new _Uint8Array/* default */.A(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.A)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.A); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(19042); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.A)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.A)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(9779); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(99912); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(33858); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.A)(object), + othIsArr = (0,isArray/* default */.A)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.A)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.A)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.A)(object)) { + if (!(0,isBuffer/* default */.A)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.A); + return (objIsArr || (0,isTypedArray/* default */.A)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.A); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.A); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(53098); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.A)(value) && !(0,isObjectLike/* default */.A)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.A; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(23149); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.A)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(27422); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.A)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(66318); +;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.A)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(39188); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(86586); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(30901); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.A)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.A)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.A)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(29008); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(70805); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.A)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.A)(path) ? (0,_baseProperty/* default */.A)((0,_toKey/* default */.A)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.A; + } + if (typeof value == 'object') { + return (0,isArray/* default */.A)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 52568: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6240); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38446); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 70805: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 64099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 99922: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(29008); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 7819: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(86586); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(46632); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.A)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(28894); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.A)(value)) { + return value; + } + return (0,_isKey/* default */.A)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.A)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 19042: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33831); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(14792); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27422); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 14792: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2634); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13153); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 85054: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(52274); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(92049); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(25353); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5254); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30901); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 86586: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(61882); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 29959: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 30901: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61882); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 23068: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(24326); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(66984); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6832); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(77996); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 11662: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(2634); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(6240); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.A)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(49574); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.A)(collection) ? _arrayFilter/* default */.A : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.A)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 34098: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13588); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 8058: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72641); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6240); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99922); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 48585: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(85054); +;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.A)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 39188: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(85054); +;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.A)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 61882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88496); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(53098); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 69592: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 27422: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(83607); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(69471); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38446); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 74722: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(45572); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(49574); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(52568); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 81942: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(66318); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(52851); +// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(7819); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(25353); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(23149); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(30901); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.A)(object)) { + return object; + } + path = (0,_castPath/* default */.A)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.A)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.A)(objValue) + ? objValue + : ((0,_isIndex/* default */.A)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.A)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.A)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.A)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(39188); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.A)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(34098); +// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(76875); +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(67525); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.A)((0,_overRest/* default */.A)(func, undefined, flatten/* default */.A), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 91395: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(6832); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(74342); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.A)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.A)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.A)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.A)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 89463: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(6240); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(49574); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.A)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.A)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.A); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 13153: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 74342: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(23149); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(61882); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.A)(value)) { + return NAN; + } + if ((0,isObject/* default */.A)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.A)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 28894: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(241); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(45572); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(61882); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.A)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.A)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.A)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 5664: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(28894); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 38207: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(45572); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.A)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(27422); +;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.A)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 87426: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _styles_b83b31c9_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(63626); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(21176); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(697); +/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(99702); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74353); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(16750); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(99418); + + + + + + + + + + + + + + +let edgeCount = 0; +const drawEdge = function(elem, path, relation, conf, diagObj) { + const getRelationType = function(type) { + switch (type) { + case diagObj.db.relationType.AGGREGATION: + return "aggregation"; + case diagObj.db.relationType.EXTENSION: + return "extension"; + case diagObj.db.relationType.COMPOSITION: + return "composition"; + case diagObj.db.relationType.DEPENDENCY: + return "dependency"; + case diagObj.db.relationType.LOLLIPOP: + return "lollipop"; + } + }; + path.points = path.points.filter((p) => !Number.isNaN(p.y)); + const lineData = path.points; + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .n8j)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .qrM); + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", "edge" + edgeCount).attr("class", "relation"); + let url = ""; + if (conf.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + if (relation.relation.lineType == 1) { + svgPath.attr("class", "relation dashed-line"); + } + if (relation.relation.lineType == 10) { + svgPath.attr("class", "relation dotted-line"); + } + if (relation.relation.type1 !== "none") { + svgPath.attr( + "marker-start", + "url(" + url + "#" + getRelationType(relation.relation.type1) + "Start)" + ); + } + if (relation.relation.type2 !== "none") { + svgPath.attr( + "marker-end", + "url(" + url + "#" + getRelationType(relation.relation.type2) + "End)" + ); + } + let x, y; + const l = path.points.length; + let labelPosition = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.u.calcLabelPosition(path.points); + x = labelPosition.x; + y = labelPosition.y; + let p1_card_x, p1_card_y; + let p2_card_x, p2_card_y; + if (l % 2 !== 0 && l > 1) { + let cardinality_1_point = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.u.calcCardinalityPosition( + relation.relation.type1 !== "none", + path.points, + path.points[0] + ); + let cardinality_2_point = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.u.calcCardinalityPosition( + relation.relation.type2 !== "none", + path.points, + path.points[l - 1] + ); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("cardinality_1_point " + JSON.stringify(cardinality_1_point)); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("cardinality_2_point " + JSON.stringify(cardinality_2_point)); + p1_card_x = cardinality_1_point.x; + p1_card_y = cardinality_1_point.y; + p2_card_x = cardinality_2_point.x; + p2_card_y = cardinality_2_point.y; + } + if (relation.title !== void 0) { + const g = elem.append("g").attr("class", "classLabel"); + const label = g.append("text").attr("class", "label").attr("x", x).attr("y", y).attr("fill", "red").attr("text-anchor", "middle").text(relation.title); + window.label = label; + const bounds = label.node().getBBox(); + g.insert("rect", ":first-child").attr("class", "box").attr("x", bounds.x - conf.padding / 2).attr("y", bounds.y - conf.padding / 2).attr("width", bounds.width + conf.padding).attr("height", bounds.height + conf.padding); + } + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Rendering relation " + JSON.stringify(relation)); + if (relation.relationTitle1 !== void 0 && relation.relationTitle1 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type1").attr("x", p1_card_x).attr("y", p1_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle1); + } + if (relation.relationTitle2 !== void 0 && relation.relationTitle2 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type2").attr("x", p2_card_x).attr("y", p2_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle2); + } + edgeCount++; +}; +const drawClass = function(elem, classDef, conf, diagObj) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Rendering class ", classDef, conf); + const id = classDef.id; + const classInfo = { + id, + label: classDef.id, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", diagObj.db.lookUpDomId(id)).attr("class", "classGroup"); + let title; + if (classDef.link) { + title = g.append("svg:a").attr("xlink:href", classDef.link).attr("target", classDef.linkTarget).append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } else { + title = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } + let isFirst = true; + classDef.annotations.forEach(function(member) { + const titleText2 = title.append("tspan").text("«" + member + "»"); + if (!isFirst) { + titleText2.attr("dy", conf.textHeight); + } + isFirst = false; + }); + let classTitleString = getClassTitleString(classDef); + const classTitle = title.append("tspan").text(classTitleString).attr("class", "title"); + if (!isFirst) { + classTitle.attr("dy", conf.textHeight); + } + const titleHeight = title.node().getBBox().height; + let membersLine; + let membersBox; + let methodsLine; + if (classDef.members.length > 0) { + membersLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin / 2).attr("y2", conf.padding + titleHeight + conf.dividerMargin / 2); + const members = g.append("text").attr("x", conf.padding).attr("y", titleHeight + conf.dividerMargin + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.members.forEach(function(member) { + addTspan(members, member, isFirst, conf); + isFirst = false; + }); + membersBox = members.node().getBBox(); + } + if (classDef.methods.length > 0) { + methodsLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin + membersBox.height).attr("y2", conf.padding + titleHeight + conf.dividerMargin + membersBox.height); + const methods = g.append("text").attr("x", conf.padding).attr("y", titleHeight + 2 * conf.dividerMargin + membersBox.height + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.methods.forEach(function(method) { + addTspan(methods, method, isFirst, conf); + isFirst = false; + }); + } + const classBox = g.node().getBBox(); + var cssClassStr = " "; + if (classDef.cssClasses.length > 0) { + cssClassStr = cssClassStr + classDef.cssClasses.join(" "); + } + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", classBox.width + 2 * conf.padding).attr("height", classBox.height + conf.padding + 0.5 * conf.dividerMargin).attr("class", cssClassStr); + const rectWidth = rect.node().getBBox().width; + title.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + if (classDef.tooltip) { + title.insert("title").text(classDef.tooltip); + } + if (membersLine) { + membersLine.attr("x2", rectWidth); + } + if (methodsLine) { + methodsLine.attr("x2", rectWidth); + } + classInfo.width = rectWidth; + classInfo.height = classBox.height + conf.padding + 0.5 * conf.dividerMargin; + return classInfo; +}; +const getClassTitleString = function(classDef) { + let classTitleString = classDef.id; + if (classDef.type) { + classTitleString += "<" + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.x)(classDef.type) + ">"; + } + return classTitleString; +}; +const drawNote = function(elem, note, conf, diagObj) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Rendering note ", note, conf); + const id = note.id; + const noteInfo = { + id, + text: note.text, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", id).attr("class", "classGroup"); + let text = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + const lines = JSON.parse(`"${note.text}"`).split("\n"); + lines.forEach(function(line2) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug(`Adding line: ${line2}`); + text.append("tspan").text(line2).attr("class", "title").attr("dy", conf.textHeight); + }); + const noteBox = g.node().getBBox(); + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", noteBox.width + 2 * conf.padding).attr( + "height", + noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin + ); + const rectWidth = rect.node().getBBox().width; + text.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + noteInfo.width = rectWidth; + noteInfo.height = noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin; + return noteInfo; +}; +const addTspan = function(textEl, member, isFirst, conf) { + const { displayText, cssStyle } = member.getDisplayDetails(); + const tSpan = textEl.append("tspan").attr("x", conf.padding).text(displayText); + if (cssStyle !== "") { + tSpan.attr("style", member.cssStyle); + } + if (!isFirst) { + tSpan.attr("dy", conf.textHeight); + } +}; +const svgDraw = { + getClassTitleString, + drawClass, + drawEdge, + drawNote +}; +let idCache = {}; +const padding = 20; +const getGraphId = function(label) { + const foundEntry = Object.entries(idCache).find((entry) => entry[1].label === label); + if (foundEntry) { + return foundEntry[0]; + } +}; +const insertMarkers = function(elem) { + elem.append("defs").append("marker").attr("id", "extensionStart").attr("class", "extension").attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); + elem.append("defs").append("marker").attr("id", "extensionEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); + elem.append("defs").append("marker").attr("id", "compositionStart").attr("class", "extension").attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", "compositionEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", "aggregationStart").attr("class", "extension").attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", "aggregationEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", "dependencyStart").attr("class", "extension").attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", "dependencyEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const draw = function(text, id, _version, diagObj) { + const conf = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().class; + idCache = {}; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Rendering diagram " + text); + const securityLevel = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("body"); + const diagram2 = root.select(`[id='${id}']`); + insertMarkers(diagram2); + const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .T({ + multigraph: true + }); + g.setGraph({ + isMultiGraph: true + }); + g.setDefaultEdgeLabel(function() { + return {}; + }); + const classes = diagObj.db.getClasses(); + const keys = Object.keys(classes); + for (const key of keys) { + const classDef = classes[key]; + const node = svgDraw.drawClass(diagram2, classDef, conf, diagObj); + idCache[node.id] = node; + g.setNode(node.id, node); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Org height: " + node.height); + } + const relations = diagObj.db.getRelations(); + relations.forEach(function(relation) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.info( + // cspell:ignore tjoho + "tjoho" + getGraphId(relation.id1) + getGraphId(relation.id2) + JSON.stringify(relation) + ); + g.setEdge( + getGraphId(relation.id1), + getGraphId(relation.id2), + { + relation + }, + relation.title || "DEFAULT" + ); + }); + const notes = diagObj.db.getNotes(); + notes.forEach(function(note) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug(`Adding note: ${JSON.stringify(note)}`); + const node = svgDraw.drawNote(diagram2, note, conf, diagObj); + idCache[node.id] = node; + g.setNode(node.id, node); + if (note.class && note.class in classes) { + g.setEdge( + note.id, + getGraphId(note.class), + { + relation: { + id1: note.id, + id2: note.class, + relation: { + type1: "none", + type2: "none", + lineType: 10 + } + } + }, + "DEFAULT" + ); + } + }); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__/* .layout */ .Zp)(g); + g.nodes().forEach(function(v) { + if (v !== void 0 && g.node(v) !== void 0) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Node " + v + ": " + JSON.stringify(g.node(v))); + root.select("#" + (diagObj.db.lookUpDomId(v) || v)).attr( + "transform", + "translate(" + (g.node(v).x - g.node(v).width / 2) + "," + (g.node(v).y - g.node(v).height / 2) + " )" + ); + } + }); + g.edges().forEach(function(e) { + if (e !== void 0 && g.edge(e) !== void 0) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(g.edge(e))); + svgDraw.drawEdge(diagram2, g.edge(e), g.edge(e).relation, conf, diagObj); + } + }); + const svgBounds = diagram2.node().getBBox(); + const width = svgBounds.width + padding * 2; + const height = svgBounds.height + padding * 2; + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.i)(diagram2, height, width, conf.useMaxWidth); + const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug(`viewBox ${vBox}`); + diagram2.attr("viewBox", vBox); +}; +const renderer = { + draw +}; +const diagram = { + parser: _styles_b83b31c9_js__WEBPACK_IMPORTED_MODULE_7__.p, + db: _styles_b83b31c9_js__WEBPACK_IMPORTED_MODULE_7__.d, + renderer, + styles: _styles_b83b31c9_js__WEBPACK_IMPORTED_MODULE_7__.s, + init: (cnf) => { + if (!cnf.class) { + cnf.class = {}; + } + cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; + _styles_b83b31c9_js__WEBPACK_IMPORTED_MODULE_7__.d.clear(); + } +}; + + + +/***/ }), + +/***/ 63626: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ d: () => (/* binding */ db), +/* harmony export */ p: () => (/* binding */ parser$1), +/* harmony export */ s: () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); +/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99702); + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 17], $V1 = [1, 18], $V2 = [1, 19], $V3 = [1, 39], $V4 = [1, 40], $V5 = [1, 25], $V6 = [1, 23], $V7 = [1, 24], $V8 = [1, 31], $V9 = [1, 32], $Va = [1, 33], $Vb = [1, 34], $Vc = [1, 35], $Vd = [1, 36], $Ve = [1, 26], $Vf = [1, 27], $Vg = [1, 28], $Vh = [1, 29], $Vi = [1, 43], $Vj = [1, 30], $Vk = [1, 42], $Vl = [1, 44], $Vm = [1, 41], $Vn = [1, 45], $Vo = [1, 9], $Vp = [1, 8, 9], $Vq = [1, 56], $Vr = [1, 57], $Vs = [1, 58], $Vt = [1, 59], $Vu = [1, 60], $Vv = [1, 61], $Vw = [1, 62], $Vx = [1, 8, 9, 39], $Vy = [1, 74], $Vz = [1, 8, 9, 12, 13, 21, 37, 39, 42, 59, 60, 61, 62, 63, 64, 65, 70, 72], $VA = [1, 8, 9, 12, 13, 19, 21, 37, 39, 42, 46, 59, 60, 61, 62, 63, 64, 65, 70, 72, 74, 80, 95, 97, 98], $VB = [13, 74, 80, 95, 97, 98], $VC = [13, 64, 65, 74, 80, 95, 97, 98], $VD = [13, 59, 60, 61, 62, 63, 74, 80, 95, 97, 98], $VE = [1, 93], $VF = [1, 110], $VG = [1, 108], $VH = [1, 102], $VI = [1, 103], $VJ = [1, 104], $VK = [1, 105], $VL = [1, 106], $VM = [1, 107], $VN = [1, 109], $VO = [1, 8, 9, 37, 39, 42], $VP = [1, 8, 9, 21], $VQ = [1, 8, 9, 78], $VR = [1, 8, 9, 21, 73, 74, 78, 80, 81, 82, 83, 84, 85]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "mermaidDoc": 4, "statements": 5, "graphConfig": 6, "CLASS_DIAGRAM": 7, "NEWLINE": 8, "EOF": 9, "statement": 10, "classLabel": 11, "SQS": 12, "STR": 13, "SQE": 14, "namespaceName": 15, "alphaNumToken": 16, "className": 17, "classLiteralName": 18, "GENERICTYPE": 19, "relationStatement": 20, "LABEL": 21, "namespaceStatement": 22, "classStatement": 23, "memberStatement": 24, "annotationStatement": 25, "clickStatement": 26, "styleStatement": 27, "cssClassStatement": 28, "noteStatement": 29, "direction": 30, "acc_title": 31, "acc_title_value": 32, "acc_descr": 33, "acc_descr_value": 34, "acc_descr_multiline_value": 35, "namespaceIdentifier": 36, "STRUCT_START": 37, "classStatements": 38, "STRUCT_STOP": 39, "NAMESPACE": 40, "classIdentifier": 41, "STYLE_SEPARATOR": 42, "members": 43, "CLASS": 44, "ANNOTATION_START": 45, "ANNOTATION_END": 46, "MEMBER": 47, "SEPARATOR": 48, "relation": 49, "NOTE_FOR": 50, "noteText": 51, "NOTE": 52, "direction_tb": 53, "direction_bt": 54, "direction_rl": 55, "direction_lr": 56, "relationType": 57, "lineType": 58, "AGGREGATION": 59, "EXTENSION": 60, "COMPOSITION": 61, "DEPENDENCY": 62, "LOLLIPOP": 63, "LINE": 64, "DOTTED_LINE": 65, "CALLBACK": 66, "LINK": 67, "LINK_TARGET": 68, "CLICK": 69, "CALLBACK_NAME": 70, "CALLBACK_ARGS": 71, "HREF": 72, "STYLE": 73, "ALPHA": 74, "stylesOpt": 75, "CSSCLASS": 76, "style": 77, "COMMA": 78, "styleComponent": 79, "NUM": 80, "COLON": 81, "UNIT": 82, "SPACE": 83, "BRKT": 84, "PCT": 85, "commentToken": 86, "textToken": 87, "graphCodeTokens": 88, "textNoTagsToken": 89, "TAGSTART": 90, "TAGEND": 91, "==": 92, "--": 93, "DEFAULT": 94, "MINUS": 95, "keywords": 96, "UNICODE_TEXT": 97, "BQUOTE_STR": 98, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 7: "CLASS_DIAGRAM", 8: "NEWLINE", 9: "EOF", 12: "SQS", 13: "STR", 14: "SQE", 19: "GENERICTYPE", 21: "LABEL", 31: "acc_title", 32: "acc_title_value", 33: "acc_descr", 34: "acc_descr_value", 35: "acc_descr_multiline_value", 37: "STRUCT_START", 39: "STRUCT_STOP", 40: "NAMESPACE", 42: "STYLE_SEPARATOR", 44: "CLASS", 45: "ANNOTATION_START", 46: "ANNOTATION_END", 47: "MEMBER", 48: "SEPARATOR", 50: "NOTE_FOR", 52: "NOTE", 53: "direction_tb", 54: "direction_bt", 55: "direction_rl", 56: "direction_lr", 59: "AGGREGATION", 60: "EXTENSION", 61: "COMPOSITION", 62: "DEPENDENCY", 63: "LOLLIPOP", 64: "LINE", 65: "DOTTED_LINE", 66: "CALLBACK", 67: "LINK", 68: "LINK_TARGET", 69: "CLICK", 70: "CALLBACK_NAME", 71: "CALLBACK_ARGS", 72: "HREF", 73: "STYLE", 74: "ALPHA", 76: "CSSCLASS", 78: "COMMA", 80: "NUM", 81: "COLON", 82: "UNIT", 83: "SPACE", 84: "BRKT", 85: "PCT", 88: "graphCodeTokens", 90: "TAGSTART", 91: "TAGEND", 92: "==", 93: "--", 94: "DEFAULT", 95: "MINUS", 96: "keywords", 97: "UNICODE_TEXT", 98: "BQUOTE_STR" }, + productions_: [0, [3, 1], [3, 1], [4, 1], [6, 4], [5, 1], [5, 2], [5, 3], [11, 3], [15, 1], [15, 2], [17, 1], [17, 1], [17, 2], [17, 2], [17, 2], [10, 1], [10, 2], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [10, 1], [22, 4], [22, 5], [36, 2], [38, 1], [38, 2], [38, 3], [23, 1], [23, 3], [23, 4], [23, 6], [41, 2], [41, 3], [25, 4], [43, 1], [43, 2], [24, 1], [24, 2], [24, 1], [24, 1], [20, 3], [20, 4], [20, 4], [20, 5], [29, 3], [29, 2], [30, 1], [30, 1], [30, 1], [30, 1], [49, 3], [49, 2], [49, 2], [49, 1], [57, 1], [57, 1], [57, 1], [57, 1], [57, 1], [58, 1], [58, 1], [26, 3], [26, 4], [26, 3], [26, 4], [26, 4], [26, 5], [26, 3], [26, 4], [26, 4], [26, 5], [26, 4], [26, 5], [26, 5], [26, 6], [27, 3], [28, 3], [75, 1], [75, 3], [77, 1], [77, 2], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [86, 1], [86, 1], [87, 1], [87, 1], [87, 1], [87, 1], [87, 1], [87, 1], [87, 1], [89, 1], [89, 1], [89, 1], [89, 1], [16, 1], [16, 1], [16, 1], [16, 1], [18, 1], [51, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 8: + this.$ = $$[$0 - 1]; + break; + case 9: + case 11: + case 12: + this.$ = $$[$0]; + break; + case 10: + case 13: + this.$ = $$[$0 - 1] + $$[$0]; + break; + case 14: + case 15: + this.$ = $$[$0 - 1] + "~" + $$[$0] + "~"; + break; + case 16: + yy.addRelation($$[$0]); + break; + case 17: + $$[$0 - 1].title = yy.cleanupLabel($$[$0]); + yy.addRelation($$[$0 - 1]); + break; + case 27: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 28: + case 29: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 30: + yy.addClassesToNamespace($$[$0 - 3], $$[$0 - 1]); + break; + case 31: + yy.addClassesToNamespace($$[$0 - 4], $$[$0 - 1]); + break; + case 32: + this.$ = $$[$0]; + yy.addNamespace($$[$0]); + break; + case 33: + this.$ = [$$[$0]]; + break; + case 34: + this.$ = [$$[$0 - 1]]; + break; + case 35: + $$[$0].unshift($$[$0 - 2]); + this.$ = $$[$0]; + break; + case 37: + yy.setCssClass($$[$0 - 2], $$[$0]); + break; + case 38: + yy.addMembers($$[$0 - 3], $$[$0 - 1]); + break; + case 39: + yy.setCssClass($$[$0 - 5], $$[$0 - 3]); + yy.addMembers($$[$0 - 5], $$[$0 - 1]); + break; + case 40: + this.$ = $$[$0]; + yy.addClass($$[$0]); + break; + case 41: + this.$ = $$[$0 - 1]; + yy.addClass($$[$0 - 1]); + yy.setClassLabel($$[$0 - 1], $$[$0]); + break; + case 42: + yy.addAnnotation($$[$0], $$[$0 - 2]); + break; + case 43: + this.$ = [$$[$0]]; + break; + case 44: + $$[$0].push($$[$0 - 1]); + this.$ = $$[$0]; + break; + case 45: + break; + case 46: + yy.addMember($$[$0 - 1], yy.cleanupLabel($$[$0])); + break; + case 47: + break; + case 48: + break; + case 49: + this.$ = { "id1": $$[$0 - 2], "id2": $$[$0], relation: $$[$0 - 1], relationTitle1: "none", relationTitle2: "none" }; + break; + case 50: + this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 1], relationTitle1: $$[$0 - 2], relationTitle2: "none" }; + break; + case 51: + this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: "none", relationTitle2: $$[$0 - 1] }; + break; + case 52: + this.$ = { id1: $$[$0 - 4], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: $$[$0 - 3], relationTitle2: $$[$0 - 1] }; + break; + case 53: + yy.addNote($$[$0], $$[$0 - 1]); + break; + case 54: + yy.addNote($$[$0]); + break; + case 55: + yy.setDirection("TB"); + break; + case 56: + yy.setDirection("BT"); + break; + case 57: + yy.setDirection("RL"); + break; + case 58: + yy.setDirection("LR"); + break; + case 59: + this.$ = { type1: $$[$0 - 2], type2: $$[$0], lineType: $$[$0 - 1] }; + break; + case 60: + this.$ = { type1: "none", type2: $$[$0], lineType: $$[$0 - 1] }; + break; + case 61: + this.$ = { type1: $$[$0 - 1], type2: "none", lineType: $$[$0] }; + break; + case 62: + this.$ = { type1: "none", type2: "none", lineType: $$[$0] }; + break; + case 63: + this.$ = yy.relationType.AGGREGATION; + break; + case 64: + this.$ = yy.relationType.EXTENSION; + break; + case 65: + this.$ = yy.relationType.COMPOSITION; + break; + case 66: + this.$ = yy.relationType.DEPENDENCY; + break; + case 67: + this.$ = yy.relationType.LOLLIPOP; + break; + case 68: + this.$ = yy.lineType.LINE; + break; + case 69: + this.$ = yy.lineType.DOTTED_LINE; + break; + case 70: + case 76: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 1], $$[$0]); + break; + case 71: + case 77: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1]); + yy.setTooltip($$[$0 - 2], $$[$0]); + break; + case 72: + this.$ = $$[$0 - 2]; + yy.setLink($$[$0 - 1], $$[$0]); + break; + case 73: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 74: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 2], $$[$0 - 1]); + yy.setTooltip($$[$0 - 2], $$[$0]); + break; + case 75: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]); + yy.setTooltip($$[$0 - 3], $$[$0 - 1]); + break; + case 78: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 79: + this.$ = $$[$0 - 4]; + yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 80: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 2], $$[$0]); + break; + case 81: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 3], $$[$0 - 1], $$[$0]); + break; + case 82: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 3], $$[$0 - 1]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 83: + this.$ = $$[$0 - 5]; + yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]); + yy.setTooltip($$[$0 - 4], $$[$0 - 1]); + break; + case 84: + this.$ = $$[$0 - 2]; + yy.setCssStyle($$[$0 - 1], $$[$0]); + break; + case 85: + yy.setCssClass($$[$0 - 1], $$[$0]); + break; + case 86: + this.$ = [$$[$0]]; + break; + case 87: + $$[$0 - 2].push($$[$0]); + this.$ = $$[$0 - 2]; + break; + case 89: + this.$ = $$[$0 - 1] + $$[$0]; + break; + } + }, + table: [{ 3: 1, 4: 2, 5: 3, 6: 4, 7: [1, 6], 10: 5, 16: 37, 17: 20, 18: 38, 20: 7, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 27: 13, 28: 14, 29: 15, 30: 16, 31: $V0, 33: $V1, 35: $V2, 36: 21, 40: $V3, 41: 22, 44: $V4, 45: $V5, 47: $V6, 48: $V7, 50: $V8, 52: $V9, 53: $Va, 54: $Vb, 55: $Vc, 56: $Vd, 66: $Ve, 67: $Vf, 69: $Vg, 73: $Vh, 74: $Vi, 76: $Vj, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 1: [3] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3] }, o($Vo, [2, 5], { 8: [1, 46] }), { 8: [1, 47] }, o($Vp, [2, 16], { 21: [1, 48] }), o($Vp, [2, 18]), o($Vp, [2, 19]), o($Vp, [2, 20]), o($Vp, [2, 21]), o($Vp, [2, 22]), o($Vp, [2, 23]), o($Vp, [2, 24]), o($Vp, [2, 25]), o($Vp, [2, 26]), { 32: [1, 49] }, { 34: [1, 50] }, o($Vp, [2, 29]), o($Vp, [2, 45], { 49: 51, 57: 54, 58: 55, 13: [1, 52], 21: [1, 53], 59: $Vq, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu, 64: $Vv, 65: $Vw }), { 37: [1, 63] }, o($Vx, [2, 36], { 37: [1, 65], 42: [1, 64] }), o($Vp, [2, 47]), o($Vp, [2, 48]), { 16: 66, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm }, { 16: 37, 17: 67, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 16: 37, 17: 68, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 16: 37, 17: 69, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 74: [1, 70] }, { 13: [1, 71] }, { 16: 37, 17: 72, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 13: $Vy, 51: 73 }, o($Vp, [2, 55]), o($Vp, [2, 56]), o($Vp, [2, 57]), o($Vp, [2, 58]), o($Vz, [2, 11], { 16: 37, 18: 38, 17: 75, 19: [1, 76], 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }), o($Vz, [2, 12], { 19: [1, 77] }), { 15: 78, 16: 79, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm }, { 16: 37, 17: 80, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($VA, [2, 112]), o($VA, [2, 113]), o($VA, [2, 114]), o($VA, [2, 115]), o([1, 8, 9, 12, 13, 19, 21, 37, 39, 42, 59, 60, 61, 62, 63, 64, 65, 70, 72], [2, 116]), o($Vo, [2, 6], { 10: 5, 20: 7, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 27: 13, 28: 14, 29: 15, 30: 16, 17: 20, 36: 21, 41: 22, 16: 37, 18: 38, 5: 81, 31: $V0, 33: $V1, 35: $V2, 40: $V3, 44: $V4, 45: $V5, 47: $V6, 48: $V7, 50: $V8, 52: $V9, 53: $Va, 54: $Vb, 55: $Vc, 56: $Vd, 66: $Ve, 67: $Vf, 69: $Vg, 73: $Vh, 74: $Vi, 76: $Vj, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }), { 5: 82, 10: 5, 16: 37, 17: 20, 18: 38, 20: 7, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 27: 13, 28: 14, 29: 15, 30: 16, 31: $V0, 33: $V1, 35: $V2, 36: 21, 40: $V3, 41: 22, 44: $V4, 45: $V5, 47: $V6, 48: $V7, 50: $V8, 52: $V9, 53: $Va, 54: $Vb, 55: $Vc, 56: $Vd, 66: $Ve, 67: $Vf, 69: $Vg, 73: $Vh, 74: $Vi, 76: $Vj, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($Vp, [2, 17]), o($Vp, [2, 27]), o($Vp, [2, 28]), { 13: [1, 84], 16: 37, 17: 83, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 49: 85, 57: 54, 58: 55, 59: $Vq, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu, 64: $Vv, 65: $Vw }, o($Vp, [2, 46]), { 58: 86, 64: $Vv, 65: $Vw }, o($VB, [2, 62], { 57: 87, 59: $Vq, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu }), o($VC, [2, 63]), o($VC, [2, 64]), o($VC, [2, 65]), o($VC, [2, 66]), o($VC, [2, 67]), o($VD, [2, 68]), o($VD, [2, 69]), { 8: [1, 89], 23: 90, 38: 88, 41: 22, 44: $V4 }, { 16: 91, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm }, { 43: 92, 47: $VE }, { 46: [1, 94] }, { 13: [1, 95] }, { 13: [1, 96] }, { 70: [1, 97], 72: [1, 98] }, { 21: $VF, 73: $VG, 74: $VH, 75: 99, 77: 100, 79: 101, 80: $VI, 81: $VJ, 82: $VK, 83: $VL, 84: $VM, 85: $VN }, { 74: [1, 111] }, { 13: $Vy, 51: 112 }, o($Vp, [2, 54]), o($Vp, [2, 117]), o($Vz, [2, 13]), o($Vz, [2, 14]), o($Vz, [2, 15]), { 37: [2, 32] }, { 15: 113, 16: 79, 37: [2, 9], 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm }, o($VO, [2, 40], { 11: 114, 12: [1, 115] }), o($Vo, [2, 7]), { 9: [1, 116] }, o($VP, [2, 49]), { 16: 37, 17: 117, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 13: [1, 119], 16: 37, 17: 118, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($VB, [2, 61], { 57: 120, 59: $Vq, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu }), o($VB, [2, 60]), { 39: [1, 121] }, { 23: 90, 38: 122, 41: 22, 44: $V4 }, { 8: [1, 123], 39: [2, 33] }, o($Vx, [2, 37], { 37: [1, 124] }), { 39: [1, 125] }, { 39: [2, 43], 43: 126, 47: $VE }, { 16: 37, 17: 127, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($Vp, [2, 70], { 13: [1, 128] }), o($Vp, [2, 72], { 13: [1, 130], 68: [1, 129] }), o($Vp, [2, 76], { 13: [1, 131], 71: [1, 132] }), { 13: [1, 133] }, o($Vp, [2, 84], { 78: [1, 134] }), o($VQ, [2, 86], { 79: 135, 21: $VF, 73: $VG, 74: $VH, 80: $VI, 81: $VJ, 82: $VK, 83: $VL, 84: $VM, 85: $VN }), o($VR, [2, 88]), o($VR, [2, 90]), o($VR, [2, 91]), o($VR, [2, 92]), o($VR, [2, 93]), o($VR, [2, 94]), o($VR, [2, 95]), o($VR, [2, 96]), o($VR, [2, 97]), o($VR, [2, 98]), o($Vp, [2, 85]), o($Vp, [2, 53]), { 37: [2, 10] }, o($VO, [2, 41]), { 13: [1, 136] }, { 1: [2, 4] }, o($VP, [2, 51]), o($VP, [2, 50]), { 16: 37, 17: 137, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($VB, [2, 59]), o($Vp, [2, 30]), { 39: [1, 138] }, { 23: 90, 38: 139, 39: [2, 34], 41: 22, 44: $V4 }, { 43: 140, 47: $VE }, o($Vx, [2, 38]), { 39: [2, 44] }, o($Vp, [2, 42]), o($Vp, [2, 71]), o($Vp, [2, 73]), o($Vp, [2, 74], { 68: [1, 141] }), o($Vp, [2, 77]), o($Vp, [2, 78], { 13: [1, 142] }), o($Vp, [2, 80], { 13: [1, 144], 68: [1, 143] }), { 21: $VF, 73: $VG, 74: $VH, 77: 145, 79: 101, 80: $VI, 81: $VJ, 82: $VK, 83: $VL, 84: $VM, 85: $VN }, o($VR, [2, 89]), { 14: [1, 146] }, o($VP, [2, 52]), o($Vp, [2, 31]), { 39: [2, 35] }, { 39: [1, 147] }, o($Vp, [2, 75]), o($Vp, [2, 79]), o($Vp, [2, 81]), o($Vp, [2, 82], { 68: [1, 148] }), o($VQ, [2, 87], { 79: 135, 21: $VF, 73: $VG, 74: $VH, 80: $VI, 81: $VJ, 82: $VK, 83: $VL, 84: $VM, 85: $VN }), o($VO, [2, 8]), o($Vx, [2, 39]), o($Vp, [2, 83])], + defaultActions: { 2: [2, 1], 3: [2, 2], 4: [2, 3], 78: [2, 32], 113: [2, 10], 116: [2, 4], 126: [2, 44], 139: [2, 35] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: {}, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + return 53; + case 1: + return 54; + case 2: + return 55; + case 3: + return 56; + case 4: + break; + case 5: + break; + case 6: + this.begin("acc_title"); + return 31; + case 7: + this.popState(); + return "acc_title_value"; + case 8: + this.begin("acc_descr"); + return 33; + case 9: + this.popState(); + return "acc_descr_value"; + case 10: + this.begin("acc_descr_multiline"); + break; + case 11: + this.popState(); + break; + case 12: + return "acc_descr_multiline_value"; + case 13: + return 8; + case 14: + break; + case 15: + return 7; + case 16: + return 7; + case 17: + return "EDGE_STATE"; + case 18: + this.begin("callback_name"); + break; + case 19: + this.popState(); + break; + case 20: + this.popState(); + this.begin("callback_args"); + break; + case 21: + return 70; + case 22: + this.popState(); + break; + case 23: + return 71; + case 24: + this.popState(); + break; + case 25: + return "STR"; + case 26: + this.begin("string"); + break; + case 27: + return 73; + case 28: + this.begin("namespace"); + return 40; + case 29: + this.popState(); + return 8; + case 30: + break; + case 31: + this.begin("namespace-body"); + return 37; + case 32: + this.popState(); + return 39; + case 33: + return "EOF_IN_STRUCT"; + case 34: + return 8; + case 35: + break; + case 36: + return "EDGE_STATE"; + case 37: + this.begin("class"); + return 44; + case 38: + this.popState(); + return 8; + case 39: + break; + case 40: + this.popState(); + this.popState(); + return 39; + case 41: + this.begin("class-body"); + return 37; + case 42: + this.popState(); + return 39; + case 43: + return "EOF_IN_STRUCT"; + case 44: + return "EDGE_STATE"; + case 45: + return "OPEN_IN_STRUCT"; + case 46: + break; + case 47: + return "MEMBER"; + case 48: + return 76; + case 49: + return 66; + case 50: + return 67; + case 51: + return 69; + case 52: + return 50; + case 53: + return 52; + case 54: + return 45; + case 55: + return 46; + case 56: + return 72; + case 57: + this.popState(); + break; + case 58: + return "GENERICTYPE"; + case 59: + this.begin("generic"); + break; + case 60: + this.popState(); + break; + case 61: + return "BQUOTE_STR"; + case 62: + this.begin("bqstring"); + break; + case 63: + return 68; + case 64: + return 68; + case 65: + return 68; + case 66: + return 68; + case 67: + return 60; + case 68: + return 60; + case 69: + return 62; + case 70: + return 62; + case 71: + return 61; + case 72: + return 59; + case 73: + return 63; + case 74: + return 64; + case 75: + return 65; + case 76: + return 21; + case 77: + return 42; + case 78: + return 95; + case 79: + return "DOT"; + case 80: + return "PLUS"; + case 81: + return 81; + case 82: + return 78; + case 83: + return 84; + case 84: + return 84; + case 85: + return 85; + case 86: + return "EQUALS"; + case 87: + return "EQUALS"; + case 88: + return 74; + case 89: + return 12; + case 90: + return 14; + case 91: + return "PUNCTUATION"; + case 92: + return 80; + case 93: + return 97; + case 94: + return 83; + case 95: + return 83; + case 96: + return 9; + } + }, + rules: [/^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/, /^(?:%%[^\n]*(\r?\n)*)/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:classDiagram-v2\b)/, /^(?:classDiagram\b)/, /^(?:\[\*\])/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:["])/, /^(?:[^"]*)/, /^(?:["])/, /^(?:style\b)/, /^(?:namespace\b)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:[{])/, /^(?:[}])/, /^(?:$)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:\[\*\])/, /^(?:class\b)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:[}])/, /^(?:[{])/, /^(?:[}])/, /^(?:$)/, /^(?:\[\*\])/, /^(?:[{])/, /^(?:[\n])/, /^(?:[^{}\n]*)/, /^(?:cssClass\b)/, /^(?:callback\b)/, /^(?:link\b)/, /^(?:click\b)/, /^(?:note for\b)/, /^(?:note\b)/, /^(?:<<)/, /^(?:>>)/, /^(?:href\b)/, /^(?:[~])/, /^(?:[^~]*)/, /^(?:~)/, /^(?:[`])/, /^(?:[^`]+)/, /^(?:[`])/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:\s*<\|)/, /^(?:\s*\|>)/, /^(?:\s*>)/, /^(?:\s*<)/, /^(?:\s*\*)/, /^(?:\s*o\b)/, /^(?:\s*\(\))/, /^(?:--)/, /^(?:\.\.)/, /^(?::{1}[^:\n;]+)/, /^(?::{3})/, /^(?:-)/, /^(?:\.)/, /^(?:\+)/, /^(?::)/, /^(?:,)/, /^(?:#)/, /^(?:#)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:\w+)/, /^(?:\[)/, /^(?:\])/, /^(?:[!"#$%&'*+,-.`?\\/])/, /^(?:[0-9]+)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\s)/, /^(?:\s)/, /^(?:$)/], + conditions: { "namespace-body": { "rules": [26, 32, 33, 34, 35, 36, 37, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "namespace": { "rules": [26, 28, 29, 30, 31, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "class-body": { "rules": [26, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "class": { "rules": [26, 38, 39, 40, 41, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "acc_descr_multiline": { "rules": [11, 12, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "acc_descr": { "rules": [9, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "acc_title": { "rules": [7, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "callback_args": { "rules": [22, 23, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "callback_name": { "rules": [19, 20, 21, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "href": { "rules": [26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "struct": { "rules": [26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "generic": { "rules": [26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "bqstring": { "rules": [26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "string": { "rules": [24, 25, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 8, 10, 13, 14, 15, 16, 17, 18, 26, 27, 28, 37, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const visibilityValues = ["#", "+", "~", "-", ""]; +class ClassMember { + constructor(input, memberType) { + this.memberType = memberType; + this.visibility = ""; + this.classifier = ""; + const sanitizedInput = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.d)(input, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + this.parseMember(sanitizedInput); + } + getDisplayDetails() { + let displayText = this.visibility + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.x)(this.id); + if (this.memberType === "method") { + displayText += `(${(0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.x)(this.parameters.trim())})`; + if (this.returnType) { + displayText += " : " + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.x)(this.returnType); + } + } + displayText = displayText.trim(); + const cssStyle = this.parseClassifier(); + return { + displayText, + cssStyle + }; + } + parseMember(input) { + let potentialClassifier = ""; + if (this.memberType === "method") { + const methodRegEx = /([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/; + const match = input.match(methodRegEx); + if (match) { + const detectedVisibility = match[1] ? match[1].trim() : ""; + if (visibilityValues.includes(detectedVisibility)) { + this.visibility = detectedVisibility; + } + this.id = match[2].trim(); + this.parameters = match[3] ? match[3].trim() : ""; + potentialClassifier = match[4] ? match[4].trim() : ""; + this.returnType = match[5] ? match[5].trim() : ""; + if (potentialClassifier === "") { + const lastChar = this.returnType.substring(this.returnType.length - 1); + if (lastChar.match(/[$*]/)) { + potentialClassifier = lastChar; + this.returnType = this.returnType.substring(0, this.returnType.length - 1); + } + } + } + } else { + const length = input.length; + const firstChar = input.substring(0, 1); + const lastChar = input.substring(length - 1); + if (visibilityValues.includes(firstChar)) { + this.visibility = firstChar; + } + if (lastChar.match(/[$*]/)) { + potentialClassifier = lastChar; + } + this.id = input.substring( + this.visibility === "" ? 0 : 1, + potentialClassifier === "" ? length : length - 1 + ); + } + this.classifier = potentialClassifier; + } + parseClassifier() { + switch (this.classifier) { + case "*": + return "font-style:italic;"; + case "$": + return "text-decoration:underline;"; + default: + return ""; + } + } +} +const MERMAID_DOM_ID_PREFIX = "classId-"; +let relations = []; +let classes = {}; +let notes = []; +let classCounter = 0; +let namespaces = {}; +let namespaceCounter = 0; +let functions = []; +const sanitizeText = (txt) => _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); +const splitClassNameAndType = function(_id) { + const id = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + let genericType = ""; + let className = id; + if (id.indexOf("~") > 0) { + const split = id.split("~"); + className = sanitizeText(split[0]); + genericType = sanitizeText(split[1]); + } + return { className, type: genericType }; +}; +const setClassLabel = function(_id, label) { + const id = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + if (label) { + label = sanitizeText(label); + } + const { className } = splitClassNameAndType(id); + classes[className].label = label; +}; +const addClass = function(_id) { + const id = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + const { className, type } = splitClassNameAndType(id); + if (Object.hasOwn(classes, className)) { + return; + } + const name = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(className, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + classes[name] = { + id: name, + type, + label: name, + cssClasses: [], + methods: [], + members: [], + annotations: [], + styles: [], + domId: MERMAID_DOM_ID_PREFIX + name + "-" + classCounter + }; + classCounter++; +}; +const lookUpDomId = function(_id) { + const id = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + if (id in classes) { + return classes[id].domId; + } + throw new Error("Class not found: " + id); +}; +const clear = function() { + relations = []; + classes = {}; + notes = []; + functions = []; + functions.push(setupToolTips); + namespaces = {}; + namespaceCounter = 0; + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.v)(); +}; +const getClass = function(id) { + return classes[id]; +}; +const getClasses = function() { + return classes; +}; +const getRelations = function() { + return relations; +}; +const getNotes = function() { + return notes; +}; +const addRelation = function(relation) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Adding relation: " + JSON.stringify(relation)); + addClass(relation.id1); + addClass(relation.id2); + relation.id1 = splitClassNameAndType(relation.id1).className; + relation.id2 = splitClassNameAndType(relation.id2).className; + relation.relationTitle1 = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(relation.relationTitle1.trim(), (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + relation.relationTitle2 = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(relation.relationTitle2.trim(), (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + relations.push(relation); +}; +const addAnnotation = function(className, annotation) { + const validatedClassName = splitClassNameAndType(className).className; + classes[validatedClassName].annotations.push(annotation); +}; +const addMember = function(className, member) { + addClass(className); + const validatedClassName = splitClassNameAndType(className).className; + const theClass = classes[validatedClassName]; + if (typeof member === "string") { + const memberString = member.trim(); + if (memberString.startsWith("<<") && memberString.endsWith(">>")) { + theClass.annotations.push(sanitizeText(memberString.substring(2, memberString.length - 2))); + } else if (memberString.indexOf(")") > 0) { + theClass.methods.push(new ClassMember(memberString, "method")); + } else if (memberString) { + theClass.members.push(new ClassMember(memberString, "attribute")); + } + } +}; +const addMembers = function(className, members) { + if (Array.isArray(members)) { + members.reverse(); + members.forEach((member) => addMember(className, member)); + } +}; +const addNote = function(text, className) { + const note = { + id: `note${notes.length}`, + class: className, + text + }; + notes.push(note); +}; +const cleanupLabel = function(label) { + if (label.startsWith(":")) { + label = label.substring(1); + } + return sanitizeText(label.trim()); +}; +const setCssClass = function(ids, className) { + ids.split(",").forEach(function(_id) { + let id = _id; + if (_id[0].match(/\d/)) { + id = MERMAID_DOM_ID_PREFIX + id; + } + if (classes[id] !== void 0) { + classes[id].cssClasses.push(className); + } + }); +}; +const setTooltip = function(ids, tooltip) { + ids.split(",").forEach(function(id) { + if (tooltip !== void 0) { + classes[id].tooltip = sanitizeText(tooltip); + } + }); +}; +const getTooltip = function(id, namespace) { + if (namespace) { + return namespaces[namespace].classes[id].tooltip; + } + return classes[id].tooltip; +}; +const setLink = function(ids, linkStr, target) { + const config = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + ids.split(",").forEach(function(_id) { + let id = _id; + if (_id[0].match(/\d/)) { + id = MERMAID_DOM_ID_PREFIX + id; + } + if (classes[id] !== void 0) { + classes[id].link = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.formatUrl(linkStr, config); + if (config.securityLevel === "sandbox") { + classes[id].linkTarget = "_top"; + } else if (typeof target === "string") { + classes[id].linkTarget = sanitizeText(target); + } else { + classes[id].linkTarget = "_blank"; + } + } + }); + setCssClass(ids, "clickable"); +}; +const setClickEvent = function(ids, functionName, functionArgs) { + ids.split(",").forEach(function(id) { + setClickFunc(id, functionName, functionArgs); + classes[id].haveCallback = true; + }); + setCssClass(ids, "clickable"); +}; +const setClickFunc = function(_domId, functionName, functionArgs) { + const domId = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_domId, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + const config = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + if (config.securityLevel !== "loose") { + return; + } + if (functionName === void 0) { + return; + } + const id = domId; + if (classes[id] !== void 0) { + const elemId = lookUpDomId(id); + let argList = []; + if (typeof functionArgs === "string") { + argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); + for (let i = 0; i < argList.length; i++) { + let item = argList[i].trim(); + if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { + item = item.substr(1, item.length - 2); + } + argList[i] = item; + } + } + if (argList.length === 0) { + argList.push(elemId); + } + functions.push(function() { + const elem = document.querySelector(`[id="${elemId}"]`); + if (elem !== null) { + elem.addEventListener( + "click", + function() { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.runFunc(functionName, ...argList); + }, + false + ); + } + }); + } +}; +const bindFunctions = function(element) { + functions.forEach(function(fun) { + fun(element); + }); +}; +const lineType = { + LINE: 0, + DOTTED_LINE: 1 +}; +const relationType = { + AGGREGATION: 0, + EXTENSION: 1, + COMPOSITION: 2, + DEPENDENCY: 3, + LOLLIPOP: 4 +}; +const setupToolTips = function(element) { + let tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(".mermaidTooltip"); + if ((tooltipElem._groups || tooltipElem)[0][0] === null) { + tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); + } + const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(element).select("svg"); + const nodes = svg.selectAll("g.node"); + nodes.on("mouseover", function() { + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(this); + const title = el.attr("title"); + if (title === null) { + return; + } + const rect = this.getBoundingClientRect(); + tooltipElem.transition().duration(200).style("opacity", ".9"); + tooltipElem.text(el.attr("title")).style("left", window.scrollX + rect.left + (rect.right - rect.left) / 2 + "px").style("top", window.scrollY + rect.top - 14 + document.body.scrollTop + "px"); + tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, "
    ")); + el.classed("hover", true); + }).on("mouseout", function() { + tooltipElem.transition().duration(500).style("opacity", 0); + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(this); + el.classed("hover", false); + }); +}; +functions.push(setupToolTips); +let direction = "TB"; +const getDirection = () => direction; +const setDirection = (dir) => { + direction = dir; +}; +const addNamespace = function(id) { + if (namespaces[id] !== void 0) { + return; + } + namespaces[id] = { + id, + classes: {}, + children: {}, + domId: MERMAID_DOM_ID_PREFIX + id + "-" + namespaceCounter + }; + namespaceCounter++; +}; +const getNamespace = function(name) { + return namespaces[name]; +}; +const getNamespaces = function() { + return namespaces; +}; +const addClassesToNamespace = function(id, classNames) { + if (namespaces[id] === void 0) { + return; + } + for (const name of classNames) { + const { className } = splitClassNameAndType(name); + classes[className].parent = id; + namespaces[id].classes[className] = classes[className]; + } +}; +const setCssStyle = function(id, styles2) { + const thisClass = classes[id]; + if (!styles2 || !thisClass) { + return; + } + for (const s of styles2) { + if (s.includes(",")) { + thisClass.styles.push(...s.split(",")); + } else { + thisClass.styles.push(s); + } + } +}; +const db = { + setAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.s, + getAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.g, + getAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.a, + setAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.b, + getConfig: () => (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().class, + addClass, + bindFunctions, + clear, + getClass, + getClasses, + getNotes, + addAnnotation, + addNote, + getRelations, + addRelation, + getDirection, + setDirection, + addMember, + addMembers, + cleanupLabel, + lineType, + relationType, + setClickEvent, + setCssClass, + setLink, + getTooltip, + setTooltip, + lookUpDomId, + setDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.q, + getDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.t, + setClassLabel, + addNamespace, + addClassesToNamespace, + getNamespace, + getNamespaces, + setCssStyle +}; +const getStyles = (options) => `g.classGroup text { + fill: ${options.nodeBorder || options.classText}; + stroke: none; + font-family: ${options.fontFamily}; + font-size: 10px; + + .title { + font-weight: bolder; + } + +} + +.nodeLabel, .edgeLabel { + color: ${options.classText}; +} +.edgeLabel .label rect { + fill: ${options.mainBkg}; +} +.label text { + fill: ${options.classText}; +} +.edgeLabel .label span { + background: ${options.mainBkg}; +} + +.classTitle { + font-weight: bolder; +} +.node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + stroke-width: 1px; + } + + +.divider { + stroke: ${options.nodeBorder}; + stroke-width: 1; +} + +g.clickable { + cursor: pointer; +} + +g.classGroup rect { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; +} + +g.classGroup line { + stroke: ${options.nodeBorder}; + stroke-width: 1; +} + +.classLabel .box { + stroke: none; + stroke-width: 0; + fill: ${options.mainBkg}; + opacity: 0.5; +} + +.classLabel .label { + fill: ${options.nodeBorder}; + font-size: 10px; +} + +.relation { + stroke: ${options.lineColor}; + stroke-width: 1; + fill: none; +} + +.dashed-line{ + stroke-dasharray: 3; +} + +.dotted-line{ + stroke-dasharray: 1 2; +} + +#compositionStart, .composition { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#compositionEnd, .composition { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#dependencyStart, .dependency { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#dependencyStart, .dependency { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#extensionStart, .extension { + fill: transparent !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#extensionEnd, .extension { + fill: transparent !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#aggregationStart, .aggregation { + fill: transparent !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#aggregationEnd, .aggregation { + fill: transparent !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#lollipopStart, .lollipop { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#lollipopEnd, .lollipop { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +.edgeTerminals { + font-size: 11px; + line-height: initial; +} + +.classTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; +} +`; +const styles = getStyles; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/428320b6.9fdfe9cc.js b/assets/js/428320b6.9fdfe9cc.js new file mode 100644 index 0000000000..e96a989d17 --- /dev/null +++ b/assets/js/428320b6.9fdfe9cc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9332],{4886:(e,c,i)=>{i.r(c),i.d(c,{assets:()=>h,contentTitle:()=>a,default:()=>o,frontMatter:()=>r,metadata:()=>t,toc:()=>l});var s=i(74848),n=i(28453);const r={},a="Changelog",t={id:"changelog/changelog",title:"Changelog",description:"8.23.0 (2024-09-26)",source:"@site/docs/changelog/changelog.md",sourceDirName:"changelog",slug:"/changelog/",permalink:"/ecalc/docs/changelog/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/changelog.md",tags:[],version:"current",frontMatter:{},sidebar:"changelog",previous:{title:"v7.0",permalink:"/ecalc/docs/changelog/v7-0-release"}},h={},l=[{value:"8.23.0 (2024-09-26)",id:"8230-2024-09-26",level:2},{value:"\u26a0 BREAKING CHANGES",id:"-breaking-changes",level:3},{value:"Features",id:"features",level:3},{value:"Documentation",id:"documentation",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores",level:3},{value:"Code Refactoring",id:"code-refactoring",level:3},{value:"8.22.0 (2024-09-19)",id:"8220-2024-09-19",level:2},{value:"\u26a0 BREAKING CHANGES",id:"-breaking-changes-1",level:3},{value:"Features",id:"features-1",level:3},{value:"Bug Fixes",id:"bug-fixes",level:3},{value:"Documentation",id:"documentation-1",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-1",level:3},{value:"Code Refactoring",id:"code-refactoring-1",level:3},{value:"Continuous Integration",id:"continuous-integration",level:3},{value:"8.21.0 (2024-08-26)",id:"8210-2024-08-26",level:2},{value:"\u26a0 BREAKING CHANGES",id:"-breaking-changes-2",level:3},{value:"Bug Fixes",id:"bug-fixes-1",level:3},{value:"Documentation",id:"documentation-2",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-2",level:3},{value:"8.20.0 (2024-08-07)",id:"8200-2024-08-07",level:2},{value:"Bug Fixes",id:"bug-fixes-2",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-3",level:3},{value:"8.19.0 (2024-07-31)",id:"8190-2024-07-31",level:2},{value:"Features",id:"features-2",level:3},{value:"Bug Fixes",id:"bug-fixes-3",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-4",level:3},{value:"Code Refactoring",id:"code-refactoring-2",level:3},{value:"8.18.1 (2024-06-28)",id:"8181-2024-06-28",level:2},{value:"Features",id:"features-3",level:3},{value:"Documentation",id:"documentation-3",level:3},{value:"Code Refactoring",id:"code-refactoring-3",level:3},{value:"8.18.0 (2024-06-25)",id:"8180-2024-06-25",level:2},{value:"Features",id:"features-4",level:3},{value:"Bug Fixes",id:"bug-fixes-4",level:3},{value:"Documentation",id:"documentation-4",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-5",level:3},{value:"Code Refactoring",id:"code-refactoring-4",level:3},{value:"8.17.0 (2024-06-04)",id:"8170-2024-06-04",level:2},{value:"Miscellaneous Chores",id:"miscellaneous-chores-6",level:3},{value:"8.16.0 (2024-05-31)",id:"8160-2024-05-31",level:2},{value:"\u26a0 BREAKING CHANGES",id:"-breaking-changes-3",level:3},{value:"Features",id:"features-5",level:3},{value:"Bug Fixes",id:"bug-fixes-5",level:3},{value:"Documentation",id:"documentation-5",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-7",level:3},{value:"Continuous Integration",id:"continuous-integration-1",level:3},{value:"8.15.0 (2024-04-19)",id:"8150-2024-04-19",level:2},{value:"Bug Fixes",id:"bug-fixes-6",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-8",level:3},{value:"8.14.0 (2024-04-18)",id:"8140-2024-04-18",level:2},{value:"Features",id:"features-6",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-9",level:3},{value:"8.13.0 (2024-04-15)",id:"8130-2024-04-15",level:2},{value:"\u26a0 BREAKING CHANGES",id:"-breaking-changes-4",level:3},{value:"Bug Fixes",id:"bug-fixes-7",level:3},{value:"Documentation",id:"documentation-6",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-10",level:3},{value:"Tests",id:"tests",level:3},{value:"8.12.0 (2024-04-04)",id:"8120-2024-04-04",level:2},{value:"Features",id:"features-7",level:3},{value:"Bug Fixes",id:"bug-fixes-8",level:3},{value:"Documentation",id:"documentation-7",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-11",level:3},{value:"Code Refactoring",id:"code-refactoring-5",level:3},{value:"8.11.0 (2024-03-18)",id:"8110-2024-03-18",level:2},{value:"Features",id:"features-8",level:3},{value:"Bug Fixes",id:"bug-fixes-9",level:3},{value:"Documentation",id:"documentation-8",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-12",level:3},{value:"Code Refactoring",id:"code-refactoring-6",level:3},{value:"8.10.0 (2024-02-16)",id:"8100-2024-02-16",level:2},{value:"Bug Fixes",id:"bug-fixes-10",level:3},{value:"Documentation",id:"documentation-9",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-13",level:3},{value:"Code Refactoring",id:"code-refactoring-7",level:3},{value:"Tests",id:"tests-1",level:3},{value:"8.9.0 (2024-01-11)",id:"890-2024-01-11",level:2},{value:"Bug Fixes",id:"bug-fixes-11",level:3},{value:"Documentation",id:"documentation-10",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-14",level:3},{value:"Code Refactoring",id:"code-refactoring-8",level:3},{value:"8.8.0 (2023-12-27)",id:"880-2023-12-27",level:2},{value:"\u26a0 BREAKING CHANGES",id:"-breaking-changes-5",level:3},{value:"Features",id:"features-9",level:3},{value:"Bug Fixes",id:"bug-fixes-12",level:3},{value:"Documentation",id:"documentation-11",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-15",level:3},{value:"Code Refactoring",id:"code-refactoring-9",level:3},{value:"Tests",id:"tests-2",level:3},{value:"Continuous Integration",id:"continuous-integration-2",level:3},{value:"8.7.0 (2023-12-05)",id:"870-2023-12-05",level:2},{value:"Bug Fixes",id:"bug-fixes-13",level:3},{value:"Documentation",id:"documentation-12",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-16",level:3},{value:"Code Refactoring",id:"code-refactoring-10",level:3},{value:"Continuous Integration",id:"continuous-integration-3",level:3},{value:"8.7.0",id:"870",level:2},{value:"\u26a0 BREAKING CHANGES",id:"-breaking-changes-6",level:3},{value:"8.6.0 (2023-11-21)",id:"860-2023-11-21",level:2},{value:"\u26a0 BREAKING CHANGES",id:"-breaking-changes-7",level:3},{value:"Features",id:"features-10",level:3},{value:"Bug Fixes",id:"bug-fixes-14",level:3},{value:"Documentation",id:"documentation-13",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-17",level:3},{value:"Code Refactoring",id:"code-refactoring-11",level:3},{value:"8.5.0 (2023-10-30)",id:"850-2023-10-30",level:2},{value:"Features",id:"features-11",level:3},{value:"Bug Fixes",id:"bug-fixes-15",level:3},{value:"Documentation",id:"documentation-14",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-18",level:3},{value:"Code Refactoring",id:"code-refactoring-12",level:3},{value:"8.4.0 (2023-09-25)",id:"840-2023-09-25",level:2},{value:"Features",id:"features-12",level:3},{value:"Bug Fixes",id:"bug-fixes-16",level:3},{value:"Documentation",id:"documentation-15",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-19",level:3},{value:"Code Refactoring",id:"code-refactoring-13",level:3},{value:"8.3.0 (2023-08-11)",id:"830-2023-08-11",level:2},{value:"\u26a0 BREAKING CHANGES",id:"-breaking-changes-8",level:3},{value:"Features",id:"features-13",level:3},{value:"Bug Fixes",id:"bug-fixes-17",level:3},{value:"Documentation",id:"documentation-16",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-20",level:3},{value:"Code Refactoring",id:"code-refactoring-14",level:3},{value:"Tests",id:"tests-3",level:3},{value:"Continuous Integration",id:"continuous-integration-4",level:3},{value:"8.2.2 (2023-05-28)",id:"822-2023-05-28",level:2},{value:"Bug Fixes",id:"bug-fixes-18",level:3},{value:"Continuous Integration",id:"continuous-integration-5",level:3},{value:"Tests",id:"tests-4",level:3},{value:"Code Refactoring",id:"code-refactoring-15",level:3},{value:"Documentation",id:"documentation-17",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-21",level:3},{value:"8.2.1 (2023-05-09)",id:"821-2023-05-09",level:2},{value:"Miscellaneous Chores",id:"miscellaneous-chores-22",level:3},{value:"Continuous Integration",id:"continuous-integration-6",level:3}];function d(e){const c={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",strong:"strong",ul:"ul",...(0,n.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(c.h1,{id:"changelog",children:"Changelog"}),"\n",(0,s.jsxs)(c.h2,{id:"8230-2024-09-26",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.22.0...v8.23.0",children:"8.23.0"})," (2024-09-26)"]}),"\n",(0,s.jsx)(c.h3,{id:"-breaking-changes",children:"\u26a0 BREAKING CHANGES"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsx)(c.li,{children:"H2O no longer supported in fluid composition, use 'water'"}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"features",children:"Features"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add adjustment factor for models (new) (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/611",children:"#611"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/63010f3b5c3ec27cd2606e3ce2ef0d38a540cd1b",children:"63010f3"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add ecalc selftest gif (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/626",children:"#626"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/738815ea8b4818e3e931cf6b56a27f63a3a2db21",children:"738815e"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["remove python example (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c034887f940098e402bd7e754d9db36bed04a249",children:"c034887"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependecies - sre (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/622",children:"#622"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b4928ee5aefbdc0da8b5aae7a463600e27e0b4e3",children:"b4928ee"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["don't use dto in DirectExpressionConsumerFunction (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/42b67743a609b880a6662dc09a783b63a72e4431",children:"42b6774"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["into ChartCurve move (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/89ec20d16ec257145bf08fbe77614031522e4a2b",children:"89ec20d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move ChartAreaFlag (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/433ef35c9fe0dbb41b2107ecdbf322d7319c0af3",children:"433ef35"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move ComponentType to common (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8dbd146154ecbbdeb40ce7e536b3885d66812ef7",children:"8dbd146"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move compressor charts into common (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/de986611a7d52ab1bdcb3fdcebf2a839c312e618",children:"de98661"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move compressor charts into common (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e871bb8ed5c18ad207fb62d880ad4c4da49b1d0f",children:"e871bb8"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move consumption type to common (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3aec49774ae216df8e33b621597c85a3de764996",children:"3aec497"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move enums/types (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e3135f65c1ea0d7e6edad1ac913703a0ca19ce54",children:"e3135f6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move VariablesMap (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1a1e2a2623615923f755d64da7ebc9b87e709c6e",children:"1a1e2a2"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove dto module imports (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b61d56ecf9beeb383186abf188269eef44e837f9",children:"b61d56e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove unnecessary validation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4c5af250a6f5dc6b7bfeae23b2b7a7f202a0e5c0",children:"4c5af25"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove unused properties (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/7659111bf33de89a02a5ef59ccce05fe84285c08",children:"7659111"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["rename dto charts (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/64b2d001ab73b1e420fc7857039da57d32c4118c",children:"64b2d00"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["time series collection, resource handling (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/cf80ce87979c600adc7bc342f85b1f7612d28ea2",children:"cf80ce8"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use yaml objects in mapper (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ef21d6fa273344f7faebcaf9f5f300ad1774417e",children:"ef21d6f"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"8220-2024-09-19",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.21.0...v8.22.0",children:"8.22.0"})," (2024-09-19)"]}),"\n",(0,s.jsx)(c.h3,{id:"-breaking-changes-1",children:"\u26a0 BREAKING CHANGES"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsx)(c.li,{children:"Validation is more strict than before."}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"features-1",children:"Features"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["validate yaml model (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ad95222e9562ce27bade2dab478258cd3d1e8e09",children:"ad95222"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["avoid RuamelYamlModel becoming an abstract class (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d0548e7c40d9a6cd52e82d82d07c608f3f120ba6",children:"d0548e7"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["unexpected keyword argument (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4797d46da7b771908334a25f4c4029e0c9078615",children:"4797d46"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-1",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["improve documentation around PRESSURE_CONTROL (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/610",children:"#610"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/94dbce94c227a7f853b154758369412a970d9eb0",children:"94dbce9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["Moved YAML Keywords from level 2 to level 1 section new (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/575",children:"#575"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/145deab43cce2a233db9b8f9deba27a690251587",children:"145deab"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["swap order of migration guides (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/571",children:"#571"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b1d4e889e678844b9cb512e5d67d635857924c43",children:"b1d4e88"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update changelogs (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/587",children:"#587"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0537ce4b4621806857f8d7461dd7b14b53579f3e",children:"0537ce4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update notebooks with poetry instructions (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9cfcd47bfa989cb1cd8ae4dfd9298aceb6be8538",children:"9cfcd47"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-1",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add .vscode to gitignore under IDE section (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/593",children:"#593"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4766fe7f719b1c645e4d2521d5de0f0702ca7a52",children:"4766fe7"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"cli:"})," make mypy understand frequency type (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b784f309854b11876710a56731f007daa75c5398",children:"b784f30"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix failing test (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9ef52d3796e55423970a5467bb718d942ba7822c",children:"9ef52d3"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["spelling (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9a67f53c4591ea0a5cf03774171dc5a13159b3b1",children:"9a67f53"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update changelog with fix in isvalid for compressor stages (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/591",children:"#591"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e924f5fa22e8ad38ffff0d1a61bb2a8fd9532d50",children:"e924f5f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/584",children:"#584"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/63839b6d3c85d5cef4712c91c449ff779ce4e413",children:"63839b6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update deps week 38 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/616",children:"#616"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/fe3a72cc3f0f8d49c6c2f1721c6d78994aa5b991",children:"fe3a72c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update poetry (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/cb2d954c2760dd3ab2ba4e3eb1fbd7f44a144869",children:"cb2d954"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update pre-commit hooks (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4254094702f6f3841d020f36c4e34f39da10b26f",children:"4254094"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["upgrade dependencies (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/595",children:"#595"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/11e5e4eaa587a9054be007dec4959b913326922d",children:"11e5e4e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["upgrade deps (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/606",children:"#606"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e24df7e77f2eb64f19f9dac301d2844ad7aba996",children:"e24df7e"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-1",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add inlet/outlet stream also for compressor train results (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/590",children:"#590"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c27e5bd5b817ff651ce3d4a5e643a389a0a18383",children:"c27e5bd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["avoid using dtos in core (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a3683c19b7fb8b8bff2ccb1ded11533ace70e26a",children:"a3683c1"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["introduce resource protocol (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/dac57898b2d347acc97a1548b5bcd038bfa506d1",children:"dac5789"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move target pressure status from stages to compressor train (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/589",children:"#589"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/098cfa989ab92da7c451823b103ba5f12c5980da",children:"098cfa9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove pressure before choking (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/609",children:"#609"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/02f909921eed4f3b9ba8c26bbc71a48bcb0eb265",children:"02f9099"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["return compressor stage result when only stage is calculated for simplified train (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/592",children:"#592"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9ef52d3796e55423970a5467bb718d942ba7822c",children:"9ef52d3"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["yaml model class and reader (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50f41abf59ccb37783b3765f556dc9f51f755bbd",children:"50f41ab"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"continuous-integration",children:"Continuous Integration"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["cache pre-commit (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5448149369f71ed28b2449d8184b5a2aa547f4d8",children:"5448149"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"8210-2024-08-26",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.20.0...v8.21.0",children:"8.21.0"})," (2024-08-26)"]}),"\n",(0,s.jsx)(c.h3,{id:"-breaking-changes-2",children:"\u26a0 BREAKING CHANGES"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["do not allow pressure drop ahead of stage for simplified trains (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/570",children:"#570"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["do not allow control margin for simplified variable speed train (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/569",children:"#569"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["do not allow 0 efficiency in input chart (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/565",children:"#565"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-1",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["typo get timesteps docstring (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/562",children:"#562"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9b31d604c917f106601bc9c2dbc8acc7c0091771",children:"9b31d60"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-2",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["update broken links and rename files (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/573",children:"#573"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/090edbee98ee2fca2002c05ac2a36c93507cd5d2",children:"090edbe"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update changelog manually for 8.19 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/564",children:"#564"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/971b4b3027a9c703906e0b3fa18a0964006baabc",children:"971b4b3"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-2",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["do not allow 0 efficiency in input chart (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/565",children:"#565"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a38bb28f33ba55dcf2048b5490d67de989d9debe",children:"a38bb28"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["do not allow control margin for simplified variable speed train (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/569",children:"#569"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/82d7e58d276b359e4a9e462e280ed39e0b43441d",children:"82d7e58"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["do not allow pressure drop ahead of stage for simplified trains (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/570",children:"#570"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/06ef021491c43c31e487da37415037186cc65332",children:"06ef021"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make sure that pressure calculation tolerances are the same at different places in the code (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/532",children:"#532"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/736984d590f1c9d713b68559ced9c1ccf9056c90",children:"736984d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["ruff manual fixes (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d02b41b0413ee6b66ae42c7f4a8a111e22ff5439",children:"d02b41b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["run ruff on all files (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d5ea430d1dcbed9ecf07deaf675a0332c9fb5eec",children:"d5ea430"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["run ruff-format all files (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6880e12c5e993637b2a985f8f04eb41301f917b7",children:"6880e12"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies through devcalc (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/62437171f02d49333fe96f740085a3ade2abbddf",children:"6243717"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update ruff and replace black (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a2a3e035645fcdbc9dbbefa2b9a715579717485c",children:"a2a3e03"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"8200-2024-08-07",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.19.0...v8.20.0",children:"8.20.0"})," (2024-08-07)"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-2",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["read requested pressures in compressor system (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/557",children:"#557"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/811701428d1927b00480519ee7e3273de84753ce",children:"8117014"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-3",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["update deps (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/560",children:"#560"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6035a1df1b8472731f62a1eb1dde36918ddcf4b8",children:"6035a1d"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"8190-2024-07-31",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.18.1...v8.19.0",children:"8.19.0"})," (2024-07-31)"]}),"\n",(0,s.jsx)(c.h3,{id:"features-2",children:"Features"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["implement adjustment factors for genset (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/555",children:"#555"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4c8493185440c837248daf998801ef1434298b44",children:"4c84931"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-3",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["error message for compressor model in turbine (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8b579155917cefc2cda1e5d0860d06ae00c233cd",children:"8b57915"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["pass enum value to literal string type (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/212b01fc57759bce9a88ee4da30b8575494171ad",children:"212b01f"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-4",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["do not allow multiple energy model types (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/554",children:"#554"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ca823bde67bdfbb1f21a604147d01948745020a9",children:"ca823bd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["improve error message for extra pfs columns (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/541",children:"#541"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/13bac91fdc2c1603e77242f05f49e8eb19bc491b",children:"13bac91"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/556",children:"#556"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c04c6bf6273c9f067f733a4a6e3adf7f9a2ceba7",children:"c04c6bf"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update pdoc to 14.5.1 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/544",children:"#544"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/28ba930cc66b81d2bf25e4dae41eb1044d055dd5",children:"28ba930"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-2",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["move asset result classes (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/590d0762d15a4db846420cb4bbcc2a6891478069",children:"590d076"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move asset result generation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1725d53080ce3d0746a1362dbda346f6417b9f6f",children:"1725d53"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove double import (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/60cf1c6b10c2991bd2a73b4a5844db219a9816fc",children:"60cf1c6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["reusable protocols for tabular data (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/eda51f04d9ba8ee5d3ab653dcf2d917bd47adc41",children:"eda51f0"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"8181-2024-06-28",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.18.0...v8.18.1",children:"8.18.1"})," (2024-06-28)"]}),"\n",(0,s.jsx)(c.h3,{id:"features-3",children:"Features"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["validate model references and types (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/dd8d701a5ac546407e6dcd0549991c3c73dff106",children:"dd8d701"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-3",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["wrong units venting emitters docs (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/537",children:"#537"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/650a4a3a4fe776c5fd46ec98690d0a5603b995b3",children:"650a4a3"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-3",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add ModelReference type (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/11cb65b26f70454dd16a52c8931c716e21532c38",children:"11cb65b"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"8180-2024-06-25",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.17.0...v8.18.0",children:"8.18.0"})," (2024-06-25)"]}),"\n",(0,s.jsx)(c.h3,{id:"features-4",children:"Features"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["make version comparable (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8ea5b2f735d9a9a6755a5e8983a322036e62dc21",children:"8ea5b2f"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-4",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["avoid usage of packaging (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4121f5b1c3d6cf44c29de3305cd6f369beb55ae5",children:"4121f5b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"docs:"})," issue with anchor links in search (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/70b4f8ecce2002b8c85f6d818d1ebf55afc1e5d7",children:"70b4f8e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["error message for new pfs columns (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/511",children:"#511"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/7b4ea1111fc0a6fd5f2f51861b8efb513df63d91",children:"7b4ea11"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["implement YamlModel specific errors (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f0c317a39d27066c6aafc003c673ab0a78bd8b73",children:"f0c317a"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-4",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["change TURBINE_LOAD to TURBINE_LOADS (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/520",children:"#520"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9b2bf1ef6ea8952ace9eeca7dca087f4efe26a68",children:"9b2bf1e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["clean up documentation around compressor modelling including adding some missing keywords (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/528",children:"#528"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/26d4aba00397fa6e1811d7e521418a55bcacd8e5",children:"26d4aba"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["corrected the WATER_PROD rate to meet the max pump chart capacity (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/531",children:"#531"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0cfe517b849901169362b8383a20b4ed6618c0ae",children:"0cfe517"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update advanced model (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/522",children:"#522"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e8d4b341003db3dc5331894150705c3913d2c6e5",children:"e8d4b34"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update changelog and migration guide (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/509",children:"#509"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e5311d1b776186f04fa8d354859b96c06e0863c7",children:"e5311d1"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update documentation about fluid models adding missing yaml keywords (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/524",children:"#524"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8bd68a1e2a73ebc27221d6521fbe221e97d9389d",children:"8bd68a1"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update drogon to use input files (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/530",children:"#530"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b6d632ec2adf176f09193b833a286451ae2295aa",children:"b6d632e"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-5",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["align cli validation for power from shore (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/513",children:"#513"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/94e46b8a3d4bd08c624cc1bbb1e1c962f4bbd52c",children:"94e46b8"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["codeowners for changelog (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/514",children:"#514"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f835d205109eadadf2abe6466116766b40a14f1f",children:"f835d20"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["improve error messages for invalid characters in variables names (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/536",children:"#536"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/325bfec9aec994e68219fecd3be8061c8b019fd0",children:"325bfec"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make sure all time series are resampled (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/533",children:"#533"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9684fe51bb43e4fac08a4919b780666c30b0c60f",children:"9684fe5"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move exporter tests (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5df5f361261bd776d81daa7e99952e3cb73f1035",children:"5df5f36"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["refine unit format alignment (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/506",children:"#506"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ca14c220363c18a5eb74800185f53224eb6469f9",children:"ca14c22"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f6c2ac4fc7877cabc152ef1d4a91d2370428d62f",children:"f6c2ac4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["upgrade dependencies (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/529",children:"#529"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5416871c379aa44b1e89f1a869495c275b542662",children:"5416871"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-4",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["move tabular exceptions into tabular domain (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/492298964bb075dee70967491930affdf02afafd",children:"4922989"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove AssetTSVPrognosis (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c2d9dc90a202d388f097d844169e3f426bb6043e",children:"c2d9dc9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove result from generator (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9a2f9a9c643b2d4936986663dadb38c61643027a",children:"9a2f9a9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove unnecessary id for column (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/30dfe1927220c099f99ab0e582a81ef0ea2673f3",children:"30dfe19"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["separate formatter from exporter (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2cc9c8f4012d4ef60210e7981c1e7403751fe927",children:"2cc9c8f"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"8170-2024-06-04",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.16.0...v8.17.0",children:"8.17.0"})," (2024-06-04)"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-6",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add support to manually create prereleases (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/501",children:"#501"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6a1afa3c69865a816264d27f6272e08456ec0661",children:"6a1afa3"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"docs:"})," update documentation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9cf339b6335b7146f44c27a1268f5ac198b850be",children:"9cf339b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix katex equations (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d19b75e2e929b4984b17540d0bc164a1d7222799",children:"d19b75e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["improve error message for missing header in input csv files (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/498",children:"#498"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b146eb41828475e0e07786ddfd021dd95da6ec01",children:"b146eb4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make prerelease behave differently (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/503",children:"#503"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f234f8ed9f8f1da26349563bb342e3a8d1bbf239",children:"f234f8e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make prerelease behave differently with input vars (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/504",children:"#504"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ca277940d06bc57e5967cfe2de104a1c20172e3c",children:"ca27794"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"8160-2024-05-31",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.15.0...v8.16.0",children:"8.16.0"})," (2024-05-31)"]}),"\n",(0,s.jsx)(c.h3,{id:"-breaking-changes-3",children:"\u26a0 BREAKING CHANGES"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsx)(c.li,{children:"New unit-format for venting emitters, aligned to what is used in other parts of yaml-file. ECALC-1059"}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"features-5",children:"Features"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add eletrical- and mechanical power to asset (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/479",children:"#479"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/464047f4e315c126a8c27c3b5714ba88d4dead64",children:"464047f"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-5",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["detect duplicate keys in yaml file and raise error (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/438",children:"#438"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/cfeb006d2c6a8095eb3a5aee8f546c53f81f3cfa",children:"cfeb006"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["do not allow for negative recirculation if rate is above max flow rate for a compressor chart (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/403",children:"#403"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/86bf31e8f08dcd1fd60e3dd543a804ed1debe92d",children:"86bf31e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["ensure regularity is evaluated for all installations when only venting emitters (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/468",children:"#468"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0e6b2489c97878a848a486faabfa07895d1483ab",children:"0e6b248"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["error when only venting emitters are specified for an installation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/449",children:"#449"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/017560db79c7f3c858b16eccbf19f23eeaddc98c",children:"017560d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["max power from shore values (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/490",children:"#490"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1c7a4a1c2186bf65c74488ef9c4b68c7d41ea124",children:"1c7a4a1"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use custom type pydantic class to wrap ndarray and avoid validation problem (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/487",children:"#487"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ab2877ecf68802b436347ed4295bedc9fc9cb705",children:"ab2877e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["wrong unit max power from shore (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/491",children:"#491"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f881335e3b1e10c984227eea0a91c076a2736ea2",children:"f881335"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-5",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["added keyword MAXIMUM_POWER in eCalc YAML keyword list. (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/391",children:"#391"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1322d2b2c84b1f43aafafd62e1bb3d3783d408ba",children:"1322d2b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["change changelog order (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0bf6fe62ddb707a169941438d97ecc44e5a46c40",children:"0bf6fe6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["dummy change to docs (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ae0347c04931a49fedcf649ed3789f99cd4d3e7c",children:"ae0347c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix typo (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/451",children:"#451"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1c6550da951e2ca02b627c4f4dfd6ea9c84bc54b",children:"1c6550d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix typo (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/454",children:"#454"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f7caf3133f06bd9f469ffd21c391a42ad0613f25",children:"f7caf31"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix typo (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/455",children:"#455"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5ef208796639d1cf9f24df915746db84ed1d678c",children:"5ef2087"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix typo (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/456",children:"#456"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/da595773fe84c8635f4d9c06338148157e4c1f38",children:"da59577"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["load examples from file (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0dc526d3b8e5a7acf905b6e595ac4b21104f25ed",children:"0dc526d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update changelog with fix for max usage from shore (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/494",children:"#494"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/747839bf10ec64691a08a8bf6c6f80e932302053",children:"747839b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update docs, changelog and migration guide (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/441",children:"#441"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/74b752444de1af8660fe3d8a32e53f6ae944aef5",children:"74b7524"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["Update VENTING_EMITTERS.md (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/447",children:"#447"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c9b89b57d55e36426c713c87bf08339e88ba4d7d",children:"c9b89b5"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-7",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add deploy for jira tracking (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6681607d0a3c0dfdae0af34d45fee37ef55804c7",children:"6681607"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add support for pandas v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/481",children:"#481"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6d0e68f6c68c0d7dceaadc424f6f68030540a2cf",children:"6d0e68f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add test (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/cfeb006d2c6a8095eb3a5aee8f546c53f81f3cfa",children:"cfeb006"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["align format of units (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/495",children:"#495"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ab43bd7136628b14ba0bf09d8e189b964ed65d16",children:"ab43bd7"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["change volume-unit venting emitters (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/442",children:"#442"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/06f85e8755f966e0a6beae58bf78bd0e0a8d5e07",children:"06f85e8"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["create jira release (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f5c8e55a2a7730a1fe178f4a9b46b050020fd3de",children:"f5c8e55"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"deps:"})," bump actions/cache from 4.0.0 to 4.0.2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d7a34274cecfe4763951302837089e81c9fdb213",children:"d7a3427"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"docs:"})," update dependencies (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3428d34fdcccf13ee8588fdaf4aa09e0cf6096a5",children:"3428d34"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["include jira info in pr template (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/fed28a6a6053bfb3d1b3a97cc1843cd1e8f99213",children:"fed28a6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["Make sure we remember chores for changes (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a0173526c61dbfc7bd0a05a2f2199a9191d72f78",children:"a017352"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make sure we support python 3.8 to 3.11 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/475",children:"#475"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2e26ce184dbacaa5b18e0d3499a847cb0ecec541",children:"2e26ce1"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make venting emitters emission names case insensitive (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/473",children:"#473"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1c390a62baaa26dc7ceabbf69f6c473d0cdf6822",children:"1c390a6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update changelog (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/cfeb006d2c6a8095eb3a5aee8f546c53f81f3cfa",children:"cfeb006"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/459",children:"#459"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/eb5d75cf6af9d6fece317b9aac887f724d09744c",children:"eb5d75c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update jira automation script (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8d8e1cc77685fb3a7d16d17f9087fef6b680f770",children:"8d8e1cc"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update jira automation script (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b17e67c479fc46b5c24c25744917dfd5e7320acf",children:"b17e67c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update jira release automation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/84754dbee7c521b2ea6e6b651ccebbb1ba9a0fbe",children:"84754db"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update trigger for jira automation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/cf8f5e00d16a1a3542d6d848ddb071d2d25e000f",children:"cf8f5e0"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update typer (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d01a55eba902b3362199d194e30f1e1b03f6bb4d",children:"d01a55e"}),"), closes ",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/483",children:"#483"})]}),"\n",(0,s.jsxs)(c.li,{children:["update yaml oil type venting emitter (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/448",children:"#448"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/7997813d07f094a2539ae3655779940deb239f85",children:"7997813"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"continuous-integration-1",children:"Continuous Integration"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"docs:"})," fix environment (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a6c60fa0c6d6aec2d2d1d05ae935c7c44def3685",children:"a6c60fa"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"docs:"})," set deploy environment for easier tracking (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/150a41aaa1239c5a723e709e5f5e37931997e2b0",children:"150a41a"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"8150-2024-04-19",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.14.0...v8.15.0",children:"8.15.0"})," (2024-04-19)"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-6",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add volume query for venting emitters oil type (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8cca29a3ec49ba16915ea86ce8c030f879750242",children:"8cca29a"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-8",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["check that the emitter type is oil_volume (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1f9e00b8f6504832f785be3dbda7eeedc15bbab7",children:"1f9e00b"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"8140-2024-04-18",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.13.0...v8.14.0",children:"8.14.0"})," (2024-04-18)"]}),"\n",(0,s.jsx)(c.h3,{id:"features-6",children:"Features"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["new PfS columns (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/429",children:"#429"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a6b198efa45a6caf7464d2d1dc0d2509d5d76541",children:"a6b198e"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-9",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["update libeCalc deps for 8.14 release (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/436",children:"#436"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3184a30decb1299a3fe80760d81933b43fa5fef0",children:"3184a30"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"8130-2024-04-15",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.12.0...v8.13.0",children:"8.13.0"})," (2024-04-15)"]}),"\n",(0,s.jsx)(c.h3,{id:"-breaking-changes-4",children:"\u26a0 BREAKING CHANGES"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add type and multiple emissions for venting emitters (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/424",children:"#424"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-7",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["a few things that were left out when the failure_status were refactored (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/432",children:"#432"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1e4acced3c41b628b133811c345a5488e5eeea8d",children:"1e4acce"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-6",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add changelog for 8.12 release (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/effaf851241fa9a88143b8187767a6faeb6fd316",children:"effaf85"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["correct links for LOAD and FUELRATE keywords (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/428",children:"#428"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1df541ae858104f23814c7c495fddb177f9c5e54",children:"1df541a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update changelog and migration guide for v8.4 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/430",children:"#430"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5f7462190a4311db941fb44506228571363a56d5",children:"5f74621"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-10",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add type and multiple emissions for venting emitters (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/424",children:"#424"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4603dc4a6940661ca8c5d14778c1cdf65a941f76",children:"4603dc4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update documentation to reflect that None is not a valid choice for pressure control (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/427",children:"#427"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6ff1f2a63632c66df49781ea0060f8b487ae20e5",children:"6ff1f2a"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"tests",children:"Tests"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add test for total power (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/433",children:"#433"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a79e44e3bbdaf5b72d539ea491f8414599c37b3c",children:"a79e44e"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"8120-2024-04-04",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.11.0...v8.12.0",children:"8.12.0"})," (2024-04-04)"]}),"\n",(0,s.jsx)(c.h3,{id:"features-7",children:"Features"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add control margin to single speed compressor charts (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/418",children:"#418"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/472e592774e41bfab23754738f3290ca142caebe",children:"472e592"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-8",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["issue with invalid dates in temporal model (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/dc33776bb8d5a052be1405d92186be9559751a0b",children:"dc33776"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["maximum rate for simplified compressor train (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/421",children:"#421"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/18235d58f7d4f6e881b577019fac82fb0b5edc29",children:"18235d5"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["support control margin for single speed compressor stage (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d0bebd5b691474359e4ae89c877e54070f56c2d6",children:"d0bebd5"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use yaml expression type for installation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/412",children:"#412"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4a2bdf9c3cc1c28bdddc33886cbed9cb42f948b1",children:"4a2bdf9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["variables validation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/7a66d54cac2a73b42f5c671f976090cd79195bbb",children:"7a66d54"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-7",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["update control margin keyword (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/472e592774e41bfab23754738f3290ca142caebe",children:"472e592"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-11",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["update failing tests (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/952309a318802abea1496d74573419accfa6f0d0",children:"952309a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update NeqSim to 2.5.21 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/422",children:"#422"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9f73552b088e3447b7951c2009e5d5f4436b4313",children:"9f73552"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update snapshots (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/952309a318802abea1496d74573419accfa6f0d0",children:"952309a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update snapshots (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/18235d58f7d4f6e881b577019fac82fb0b5edc29",children:"18235d5"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-5",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["make calculations inside single speed compressor train point in time (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/952309a318802abea1496d74573419accfa6f0d0",children:"952309a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["reference parameter first for delta profile (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/416",children:"#416"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/73f6175d4837498d837d61db0cbbce627bdaf4a7",children:"73f6175"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["set target pressures in compressor train and compressor stage models for failure status evaluations (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/415",children:"#415"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/952309a318802abea1496d74573419accfa6f0d0",children:"952309a"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"8110-2024-03-18",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.10.0...v8.11.0",children:"8.11.0"})," (2024-03-18)"]}),"\n",(0,s.jsx)(c.h3,{id:"features-8",children:"Features"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add file context to model validation error (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/401",children:"#401"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0a75da425eacf4f7770e50b50c970fa3720375ee",children:"0a75da4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["check that file exist when validating yaml for run (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/388",children:"#388"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/441722f9e8d86b4a48c1191a413f931e336d6ff7",children:"441722f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["validate expression reference tokens (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/404",children:"#404"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2af9d1332864b3e3bf17f84bd980b8bd436e7c7a",children:"2af9d13"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-9",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add control margin to compressor stage validation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/405",children:"#405"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0f1e6f8af15208ce613f9d39fe1de4f8edd9e72f",children:"0f1e6f8"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-8",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["fix latest release in changelog (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/393",children:"#393"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/317c9585b0257aca7057f173b87aed2388ee939f",children:"317c958"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move next changelog into release (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/395",children:"#395"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/82b892c1d9792ef8259f1cff12585c53287d4afe",children:"82b892c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove latest tag on v8.7 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/394",children:"#394"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/55da75468ffc15d0de63618f9a446a11fc022f5f",children:"55da754"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-12",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["allow venting emitters without fuelconsumers (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/392",children:"#392"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f75f18fede56c7b5ace8aad0273c1ba22c9d2e2a",children:"f75f18f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["also rounding of results for show command, cache and after resampling (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4b04729bcf073e17be57ce4b920d480762eb819b",children:"4b04729"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix failing tests (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4b04729bcf073e17be57ce4b920d480762eb819b",children:"4b04729"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["sum and split electrical and mechanical power (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/406",children:"#406"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/86754cc534b222cd761b19c04eb0de6deef26402",children:"86754cc"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["switch license to LGPLv3 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/424635e3456e00ef180492852fdd97f1b26938c4",children:"424635e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update contribution docs (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b428c034870ec0c8bc3b9994e8639f393fc76962",children:"b428c03"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update snapshots (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4b04729bcf073e17be57ce4b920d480762eb819b",children:"4b04729"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["upgrade dependencies (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/410",children:"#410"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/016c0bd838f90f2066cc1d1ab12717957d83609e",children:"016c0bd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["upgrade node to 18 for codespace (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/399",children:"#399"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/14c17933b5c7b85bbfed2b5404721078268b6ff0",children:"14c1793"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-6",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["all rounding of numers to a given precision is now performed after all calculations are finished (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/400",children:"#400"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4b04729bcf073e17be57ce4b920d480762eb819b",children:"4b04729"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move rounding to result objects (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/402",children:"#402"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/383e7f662fec3ae37c66214e2170a20cfd770c07",children:"383e7f6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove unnecessary collection handling in expression (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/390",children:"#390"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/650aa74c04a83798c36cb40d8e696e5992789fd6",children:"650aa74"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"8100-2024-02-16",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.9.0...v8.10.0",children:"8.10.0"})," (2024-02-16)"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-10",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add name constraints to yaml classes (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/358",children:"#358"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f586181dd980b964f305fe4fa0e1b6c74512e593",children:"f586181"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add pydantic ndarray type (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d005ed4af198d39bf504832a1f3f31dc3cffe1d0",children:"d005ed4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["convert numpy to python (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2be17363b6c7b788ef3ac25d02b6209b6d7fe062",children:"2be1736"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["custom date format in json (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/359",children:"#359"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d62e6501fdf87f88a470ee6b61c2e66988b7ba68",children:"d62e650"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["error when creating references (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ed1060e2b5a8ab48274a7743f4691980d7480040",children:"ed1060e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["expression error messages (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/361",children:"#361"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6a62db5456ac9d61ca1de165ed389905249163a9",children:"6a62db5"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate schema for energy usage models (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c448942f3113815f24244647b74c5fa667ca8578",children:"c448942"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate schema for models and generator set model (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b87fd2f2d78fa36388ccbfbe9565669bd73519fa",children:"b87fd2f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["get_max_rate for single speed train (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/00cd9c575a18ec5d94b1e5df21ab8fdf575bcb1c",children:"00cd9c5"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["get_max_rate for variable speed train with and without multiple streams and pressures (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/374",children:"#374"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/00cd9c575a18ec5d94b1e5df21ab8fdf575bcb1c",children:"00cd9c5"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["issue with TimeSeriesBoolean becoming float (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3622927e0defc0b33b0f15a55d09be284d767363",children:"3622927"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"libecalc:"})," handle dict, list and expression when parsing expression (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1b2ee3266bfd818305c6b3ec6bf244084bfcf14c",children:"1b2ee32"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"libecalc:"})," init pydantic v2 update (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/158b90d9550d40ae478bf3a7ad3b0177d6a85714",children:"158b90d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"libecalc:"})," optional pressure control (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/42cedb7c407589d7ac17b22e003ffd9ce4795ddb",children:"42cedb7"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"libecalc:"})," pydantic models not automatically parsed/converted (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/af684173e4b1bbd06d04352a15272ab8b8da1e7b",children:"af68417"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"libecalc:"})," results serialization and parsing (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/44b3f5770a310e5cc8e16bff66bf3b8eda75d19b",children:"44b3f57"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"libecalc:"})," tests (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/edc9c4c990f3cbb6fea346dfb99c6a004b1a44a0",children:"edc9c4c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"libecalc:"})," update pydantic (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1ab51053d18eb9d3524c8e6c784cdc138714d249",children:"1ab5105"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["none to nan conversion (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e8b720a1478d0f537ae33c47bb7ac0515938e1a2",children:"e8b720a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove deprecated validator (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/976587460e561bd9e3aa7ff47ce192990bcaf945",children:"9765874"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove generate_json_schemas function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/382",children:"#382"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/cf5a16d08a0c4fc0cbcdd14d25dd2ff6f0cb7b7c",children:"cf5a16d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["resample method for TimeSeriesBoolean (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/349",children:"#349"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8feaf6c95f58e36b8dbe5b9440738d818d3441a6",children:"8feaf6c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use discriminated union (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d66fed3dea423dc4658b4fa4c7a52ed68fbe4ab3",children:"d66fed3"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use EcalcError and provide context (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/975d3b1b6c6214f963a7e9e55cf8539c4e3886b4",children:"975d3b1"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["validation using yaml classes (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/377",children:"#377"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/66aada1de1204465c762f8f789d30219516e9a80",children:"66aada1"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["yaml models schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b5d3451a32939e06dfca9185cb084abd30b5ea99",children:"b5d3451"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-9",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["fix broken links (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ab803992709ca571be41e94badf9f841f462e307",children:"ab80399"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fixed the Error in Simple model example in eCalc Docs, variable name started from salt_water to sea_water in full eCalc YAML model (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/369",children:"#369"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2961d2f0cde2d7d1cd152c84b4bc7ac769b1d75b",children:"2961d2f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove subgraph markdown styling (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3632fbddb6049d5ca148f0c8023d8a1d4ee3b343",children:"3632fbd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove v2 expectations (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/386",children:"#386"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0595fbd3af6999988d7b07ad9c92279153278fc7",children:"0595fbd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["The new update of Drogon eCalc model with a single speed pump (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/241",children:"#241"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a22ffe891c6d96600ab1e73e0d64898ac3443225",children:"a22ffe8"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update description of control mechanisms in a variable speed compressor chart (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/291",children:"#291"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/67c34763499616dfa1131daf54a2da7da51b7917",children:"67c3476"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update info about time series (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/352",children:"#352"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/aff50d7e9526b3303aa48648520ae795f68cdc38",children:"aff50d7"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update migration guide venting emitters (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/337",children:"#337"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/551e1e1e5cfb93b608f280299bb34c37b7f8fb29",children:"551e1e1"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["Wrong_category_for_directly_driven_compressor_in_simple_model_example_in_eCalc_Docs (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/368",children:"#368"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e01080be6f144a80f7191a91d05913197f436f91",children:"e01080b"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-13",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"deps:"})," bump actions/cache from 3.3.2 to 4.0.0 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/351",children:"#351"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6c824ea831d78d68e54fc2402943767afa687b64",children:"6c824ea"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"deps:"})," bump actions/setup-python from 4 to 5 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/313",children:"#313"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a9cca9e2560723fa76551d9ddd40e8a67ccf691c",children:"a9cca9e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"docs:"})," fix mermaid diagrams (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d405717bd8e5c34ae825ab3c2139c638ecce0e56",children:"d405717"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"docs:"})," update docusaurus to v3 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8065c520a3756f79c33448e8f6ed10d8d7a2f67d",children:"8065c52"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"docs:"})," update node in ci (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/625772d0392ef8f922666191927c28c15b18847c",children:"625772d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"docs:"})," use node 20 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/367",children:"#367"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/75578110c9dd271195c2602d63889d407177b8e1",children:"7557811"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["document _type_handler (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/82769a0a75d4c4af55872b85b411fbc5948ef411",children:"82769a0"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix formatting (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/185f6248db22a7a6a1d2345b8ef0df230fc4a624",children:"185f624"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix typing for charts (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f6a58a26e00d60bf1669ff80aadee05ce68126aa",children:"f6a58a2"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["improve error message when unknown model type (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/380",children:"#380"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d6686fa6b71a735ef17eec52577e0c5a87a3828d",children:"d6686fa"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove deprecated json_encoders (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/384",children:"#384"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/885efeea13bb4098d77ef39f49b7bc48a58879e2",children:"885efee"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove deprecated min_items,max_items (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d457c2d2c4bd3292f36691c009e737b806be2fea",children:"d457c2d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove deprecated usage of dict,copy (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/381",children:"#381"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3a19620b2cd16ff6638b9ee34b4568bd7686ede7",children:"3a19620"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove pydantic.v1 import (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/364",children:"#364"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6d1a127db84ebf2d8a70e3495c339b34a3c90fd8",children:"6d1a127"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove unused method (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/357",children:"#357"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5a4021d2cb31141723f3b963b57bae6373e202dd",children:"5a4021d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["skip date format test temporarily (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b3a073bb232a9791f65e5922b32f422131d7d025",children:"b3a073b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/362",children:"#362"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b3737269826cf94cfdd850cd161e03360d4894c6",children:"b373726"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/373",children:"#373"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a35c604ce88399b5235300a42b0563d54386dba1",children:"a35c604"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update neqsim to 2.5.16 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/341",children:"#341"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/950b0fd941a22fa64dd1ed2fc948333c387258d4",children:"950b0fd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update snapshot for failing test (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/387",children:"#387"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a135a977b226fd1d68e3c8a490ef35e1650235e5",children:"a135a97"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update snapshots (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5c1c98c2e1822ef9618d0c7c8f6cb21b02bff04e",children:"5c1c98c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use field_validator (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1756aacff551ab4983c02d9b17cd22e894780a0a",children:"1756aac"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-7",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["allow str in resource stream (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/371",children:"#371"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/fe9f3f2008ee32f2a9614d4c88966e4c5e4831f6",children:"fe9f3f2"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove inheritance of CompressorTrainResult (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3ab8964acdc8ef1238bd2be91a866f692115a1f0",children:"3ab8964"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove need for id on components etc (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/347",children:"#347"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f9e32aeb1fbcbba1d7ee56bdb5767ccc7c2e3f14",children:"f9e32ae"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"tests-1",children:"Tests"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add test for yaml validation errors (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/378",children:"#378"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e5a0772e0b0b01cc4229b211bea929d6ef1b885b",children:"e5a0772"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"890-2024-01-11",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.8.0...v8.9.0",children:"8.9.0"})," (2024-01-11)"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-11",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["don't run pdoc on application module (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/abbb704d00def3149db3ae9d6e0e8932f655c740",children:"abbb704"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-10",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["maximum pressure ratio per stage in docs (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/338",children:"#338"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/261749f34c3e1955ac9d66d6b33f63bef431f984",children:"261749f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove docstring for number of compressors (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/339",children:"#339"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/be148baea2312778df4d9b5b373cb4044d8b9e1d",children:"be148ba"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update migration guide economics (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/335",children:"#335"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c4b50d6243acd52b5cc9deb80cdc94b061776417",children:"c4b50d6"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-14",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["upgrade deps (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/343",children:"#343"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b183db7864e62cd83fa2c3622ee66d60f78cedfd",children:"b183db7"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-8",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["move energy calculator to application (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/78b601ffb6f34d577ce214c8e01a0f40a0f627fe",children:"78b601f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move graph results (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b44f8c8b28ca15f085c25de4574cad8958e0c813",children:"b44f8c8"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["rename file (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/59be31741903845388068cfbadc23b39cb48b35b",children:"59be317"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"880-2023-12-27",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.7.0...v8.8.0",children:"8.8.0"})," (2023-12-27)"]}),"\n",(0,s.jsx)(c.h3,{id:"-breaking-changes-5",children:"\u26a0 BREAKING CHANGES"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["include direct emitter results in ltp export (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/305",children:"#305"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"features-9",children:"Features"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add emitter rate type to venting emitters (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/312",children:"#312"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d6e16faa341a8517c82f4295c1fc92014b0a9b92",children:"d6e16fa"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-12",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["correct changelog for venting emitters (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/324",children:"#324"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/eff911ea8064fb22d96e31ca3302da792bc5f6b3",children:"eff911e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["correct fallback to pydantic v1 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/332",children:"#332"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4f89e48e60de0f5ecd79244021c31a77285a2fc9",children:"4f89e48"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["include direct emitter results in ltp export (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/305",children:"#305"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f6b63715ddb1d1794274515edf87bb8dbb422203",children:"f6b6371"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove interpolation method (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/321",children:"#321"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d1255527c7b715569fe503db6eae9f008bc0c8f1",children:"d125552"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["support mismatching timesteps in ltp delta profile (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/319",children:"#319"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/32f02890f53c0a58aecf988cca41c8ffef25d33f",children:"32f0289"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-11",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["remove costs mentioned in docs (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/322",children:"#322"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ee0396544ce07410bfbaa89af23fe1a3337d477c",children:"ee03965"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove reference to fuel price- and tax in drogon example (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/323",children:"#323"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/963d9ea858c6b39ca6d478def7a367fad1e3f69a",children:"963d9ea"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update docs for v8.8 release (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/334",children:"#334"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/153f7c408d1ffb4adbf39a006faa3ee1417b90b0",children:"153f7c4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update PR template with checkboxes for stuff we forget (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/09f52bd08cae4bd7ccc4d6e173fb23917acf1bb5",children:"09f52bd"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-15",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add maximum_rate to CompressorModelResult (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/285",children:"#285"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2cb09e20bec5c3031dfbff6042c93c749e97be23",children:"2cb09e2"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["change ltp-filter for oil loaded/stored (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/331",children:"#331"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3cfe8084979176ebdff8eeace12769fd9bb2b95b",children:"3cfe808"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["define yaml classes for remaining elements in MODELS (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/307",children:"#307"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/fedb807c83a33190fe90862948a39fc8e3451ab0",children:"fedb807"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"ecalc-neqsim-wrapper:"})," update to neqsim 2.5.9 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/302",children:"#302"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/28885f292c745d1afaf1afb0014e6ad8244cbfd3",children:"28885f2"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["support pydantic v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/326",children:"#326"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b1b4acf1fd41b7a2c6c888af5ea46d89ddff9b34",children:"b1b4acf"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/315",children:"#315"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/49a42deac51fe25ca8ed8188ef01285ca4069c67",children:"49a42de"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/333",children:"#333"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0b027ef27e2e0f17f0da970ec3ed2d32ca3cc7b6",children:"0b027ef"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update pydantic (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/327",children:"#327"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4a325192ab3a81d0bfea4bb5d76db2346200b1c4",children:"4a32519"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update snapshot (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2cb09e20bec5c3031dfbff6042c93c749e97be23",children:"2cb09e2"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-9",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["move simple result to presentation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/318",children:"#318"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e90a6eb3fd79022bf6e963043d709a8cf61be0f7",children:"e90a6eb"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use time series collection yaml classes (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/328",children:"#328"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c36f62be4cc788ee832974aa63692e3d7ae2cb8d",children:"c36f62b"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"tests-2",children:"Tests"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["update tests with maximum rate (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2cb09e20bec5c3031dfbff6042c93c749e97be23",children:"2cb09e2"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"continuous-integration-2",children:"Continuous Integration"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add trufflehog pre-commit (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/320",children:"#320"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8459ca686fe97f0b2225984c703d8b6c778ea1ba",children:"8459ca6"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"870-2023-12-05",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.6.0...v8.7.0",children:"8.7.0"})," (2023-12-05)"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-13",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["bug in compressor with turbine models with multiple streams and only one date (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/296",children:"#296"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8c2c786f93f0cec9cebb92ee02ac94080b7becb5",children:"8c2c786"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["deep copy when aggregating model results (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/311",children:"#311"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/53c8df4af5105ad7b91439c76a05b2bb32aee4bb",children:"53c8df4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["do not merge model results (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/304",children:"#304"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/34cebc4551ab1aa3d3e1b6bdabf681e7abd4f306",children:"34cebc4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["error message when model/facility input does not exist (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4437032bd59ca1708376303b78e7778143f58e1d",children:"4437032"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-12",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["update documentation with info about direct emitters name change (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/310",children:"#310"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/990f3c2c932c0be9189828b3dae6b4034105574e",children:"990f3c2"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-16",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["fix typo (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/293",children:"#293"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/648997109e48e77727f511567af0bbd3a53d8cca",children:"6489971"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-10",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["change emission rate type to calendar day (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/300",children:"#300"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f8e5052d19088bb709d48d6563962e5f98d358d2",children:"f8e5052"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["change name from direct to venting emitter (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/303",children:"#303"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8d038221c88946730e3badbcc4a4c9ab4d082c16",children:"8d03822"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove duplicated function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ba48dcd4d858bcaacdd183636157fe9c0eeaef61",children:"ba48dcd"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"continuous-integration-3",children:"Continuous Integration"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["skip spellchecking changelog (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/294",children:"#294"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9329ae28acbc4673260e8f80f45037ab7949598d",children:"9329ae2"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h2,{id:"870",children:(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.6.0...v8.7.0",children:"8.7.0"})}),"\n",(0,s.jsx)(c.h3,{id:"-breaking-changes-6",children:"\u26a0 BREAKING CHANGES"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["Change name from ",(0,s.jsx)(c.code,{children:"DIRECT_EMITTERS"})," to ",(0,s.jsx)(c.code,{children:"VENTING_EMITTERS"})," in input Yaml-file (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/pull/303",children:"#303"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"860-2023-11-21",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.5.0...v8.6.0",children:"8.6.0"})," (2023-11-21)"]}),"\n",(0,s.jsx)(c.h3,{id:"-breaking-changes-7",children:"\u26a0 BREAKING CHANGES"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["remove economy from ecalc (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/282",children:"#282"}),")"]}),"\n",(0,s.jsx)(c.li,{children:"graph.components and graph.get_component renamed to nodes and get_node"}),"\n",(0,s.jsx)(c.li,{children:"add type to consumers in system"}),"\n",(0,s.jsxs)(c.li,{children:["change name from DIRECT_EMITTERS to VENTING_EMITTERS in input Yaml-file (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/pull/303",children:"#303"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"features-10",children:"Features"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["expose yaml variables (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1fe9dd0e3ceae658afaba24a2b18b91b3a11da43",children:"1fe9dd0"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["include rate type in header for csv export (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/279",children:"#279"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5edd0ccff2b2f1dbfe746a666266b59c714a5eef",children:"5edd0cc"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["support bfs_tree in graph (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a4fff168dfa32d04588bb7e3b71de8c12e9dd6d0",children:"a4fff16"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["train v2 yaml and dto (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/272",children:"#272"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b0e346618bb3b39a186eb814dd40be2f7d905122",children:"b0e3466"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-14",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["ensure that start date in global time vector is consistent with the requested output frequency (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/269",children:"#269"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e8ef9b98901603c0a9e328c2c8923c5facca962c",children:"e8ef9b9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make iteration loops for simplified train consistent (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/263",children:"#263"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b066c74e41fcbb6c32e51781c0225490f61e9690",children:"b066c74"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["wrong handling of values and timesteps in temporal models (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/261",children:"#261"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4e202648e6288508d67fee52c651d125166e68e7",children:"4e20264"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-13",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["update changelog (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/264",children:"#264"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/22ef8f7ca2a1e1800050c8f55624677a2f282e43",children:"22ef8f7"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-17",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add INVALID_INPUT and INVALID_MAX_RATE (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d651ed6822ba180ba4a490e1245a0f406cc64e43",children:"d651ed6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add test of get_max_standard_rate for single speed compressor train (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d651ed6822ba180ba4a490e1245a0f406cc64e43",children:"d651ed6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["clean up common module (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/277",children:"#277"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e1959aba2a91c4abec2d820b6cb9378ac1dea281",children:"e1959ab"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["extend tests of time series resampling (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e8ef9b98901603c0a9e328c2c8923c5facca962c",children:"e8ef9b9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["improve algorithm to generate generic variable speed compressor charts from input points (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/276",children:"#276"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b257567230000a92b5fcca8f8becdbcc4c880092",children:"b257567"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make sure no mismatch between timestamps and time series values (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/251",children:"#251"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ae6ade9fafb9b0ccf2afec5e633c2190a2f1009b",children:"ae6ade9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["only calculate max standard rate for time steps with valid model input (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/252",children:"#252"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d651ed6822ba180ba4a490e1245a0f406cc64e43",children:"d651ed6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["possibility to include start and end date in resampling (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e8ef9b98901603c0a9e328c2c8923c5facca962c",children:"e8ef9b9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update changelog for v8.6 release (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/288",children:"#288"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/af32274c17cb8a84895bf85c7b83360cd76bc533",children:"af32274"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies for new v8.6 release (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/289",children:"#289"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5a245a397761ed69c2ffab151a7a33567f3c7282",children:"5a245a3"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-11",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add option to skip header validation on resource files (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/260",children:"#260"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/883b7e6888d5ff4ddca41cbeac0f7c7dd96e60a6",children:"883b7e6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["calculate timesteps separately (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/284",children:"#284"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/bd9d684467698edbd88d7a089846310b3cea5ea4",children:"bd9d684"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["collect results in priority optimizer (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/16b9ccc3687a6f2910c1df5602c82dd75706089b",children:"16b9ccc"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["common consumer system type (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/fe09263acaf8d3ea8518759e695d6f368dfb214a",children:"fe09263"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["common yaml system v2 class (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/98198fc7a19575f6b949527993999ae929a7590c",children:"98198fc"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["consistent naming of nodes in graph (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/676c7b84f99e1ca79446321ab06eba43df36abef",children:"676c7b8"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generic graph class (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6f63e40af1b2f57380852ef6403b6f4ac2474d50",children:"6f63e40"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move into presentation layer (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/271",children:"#271"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/52530e0b72aa0f07de93b6c231798dd5c9a20eb4",children:"52530e0"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove economy from ecalc (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/282",children:"#282"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a50148c8bce3bfdb491dbab65620ac964a80e65c",children:"a50148c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["rename Stream to StreamConditions (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/cf908ece731c6dcd2755ed6b08b8748cff5ac508",children:"cf908ec"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["rename to component graph (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9629f221a0370559a7b89bbede0b5576eb916c20",children:"9629f22"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["system v2 stream conditions format (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/257",children:"#257"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e228e8b1180a3dd22a408fa199e52797aef43fc6",children:"e228e8b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use common consumer system dto class (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/267",children:"#267"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3c58b53e0731cbae9219bfb6eef96e5e5d4ea144",children:"3c58b53"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use PriorityOptimizer outside ConsumerSystem (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f1af9e6c701d8899450aacaa94ba02071b032dc6",children:"f1af9e6"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"850-2023-10-30",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.4.0...v8.5.0",children:"8.5.0"})," (2023-10-30)"]}),"\n",(0,s.jsx)(c.h3,{id:"features-11",children:"Features"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add pump results to system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8cf9e1b0d3ab8438291303663fc83092de1c808a",children:"8cf9e1b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add stream conditions to compressor v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/194",children:"#194"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/232f83bf91044b706ba4c7715ceddf71f9456644",children:"232f83b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["multiple streams in system (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/242",children:"#242"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/419c2e9cef6f6bb768b5e140a5092650cacd245b",children:"419c2e9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["support name for crossover streams (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/236",children:"#236"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c801f3f0fa4b967c15c5122ac8997695f38bae12",children:"c801f3f"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-15",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["don't require HCEXPORT in editor (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/254",children:"#254"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e497245c9ec4e6d10e9def5999d24c5e0ba58134",children:"e497245"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["ensure unique names in system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/238",children:"#238"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3634a9e1a4f2a4181ea1679fa1edcce0bb57a06e",children:"3634a9e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["rate when multiple streams model (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/214",children:"#214"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/892720e781978be0210b7488ad6c68466db51700",children:"892720e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["set_regularity fixture (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/213",children:"#213"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e9ea04f74c2262343fbde5d5aed46ffc15404e29",children:"e9ea04f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update ecalc validation for yaml file in web (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/243",children:"#243"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2981f2c71b7aba0271f72c8ec5f1d764a0d36387",children:"2981f2c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use file reference instead of urls in docs (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/216",children:"#216"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/35c4f6853c9452d1963daf321cce3e2ebe087f9e",children:"35c4f68"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["wrong data for boilers and heaters in ltp-results (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/237",children:"#237"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/851e83141c1971a8fc1fdec47e05b4e5a26d0861",children:"851e831"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-14",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add missing keywords surge control margin (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/239",children:"#239"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8b97673b001231b6960bda817d50241135df65df",children:"8b97673"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update changelog for upcoming release v8.4 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/203",children:"#203"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/66671e07ce678f4444f6428b776b60c607d35957",children:"66671e0"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-18",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add ",(0,s.jsx)(c.strong,{children:"init"})," file to ecalc_cli (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/af6bee96ae3ac69137f38117013a305f474acd87",children:"af6bee9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add chart area flag to test of full recirculation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0c452515226beec76a4db3c674d4fa102771dbe7",children:"0c45251"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add check for zero efficiency in stage (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3ea3035c659ee922a41c70b157f9d6a1a1f8214d",children:"3ea3035"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add dependabot actions monitoring (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/219",children:"#219"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d5f5dfd12103fb60104057fd2f3b5ce4484e3494",children:"d5f5dfd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add ModelInputFailureStatus (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6b0c72875e667ca1abce5b9b1f2ef4a9548d0d1e",children:"6b0c728"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add NO_FLOW ChartAreaFlag (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0c452515226beec76a4db3c674d4fa102771dbe7",children:"0c45251"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add rate type to pump model result (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/209",children:"#209"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/21deeb7a70cd64f47db87494314a0119ee4598d5",children:"21deeb7"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"cli:"})," add all energy usage models load_results test (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/220",children:"#220"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e09febb517a62d27e2d794946d016f1ba0af8fd1",children:"e09febb"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"deps:"})," bump actions/cache from 3.0.11 to 3.3.2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/223",children:"#223"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/087867c19fc087702ae7829b3d6cddfc1ac62f9d",children:"087867c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"deps:"})," bump actions/checkout from 2 to 4 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/221",children:"#221"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/bcc2f81d9eed20f3021c1e13fead3f8c8d009267",children:"bcc2f81"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"deps:"})," bump actions/setup-node from 3 to 4 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/cb7e816932e73d091cfa4211abe086620ab320fd",children:"cb7e816"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"deps:"})," bump snok/install-poetry from 1.3.3 to 1.3.4 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/222",children:"#222"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/80dab720f352995121a1cd470e14eef9779a45fb",children:"80dab72"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix tests (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6b0c72875e667ca1abce5b9b1f2ef4a9548d0d1e",children:"6b0c728"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["handle requested pressures correct for compressors without system (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/233",children:"#233"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/445fc9d856db729181e48f04d58cf05d324a8c50",children:"445fc9d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["handle requested pressures for compressor systems (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/215",children:"#215"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6b054390fe86fe5067a908854f0dd6d48ba114ff",children:"6b05439"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["more robust surge control margin calculation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/229",children:"#229"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/74b4e599ff2336567e7a86e57bb4287030ccea08",children:"74b4e59"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move feature experimental to main method for requested pressures (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/230",children:"#230"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/00ad854cc23822690e662338f6592142344a59f3",children:"00ad854"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["pre-commit (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a310df21ebb9dc27e9999b577cc7ae7a106aa68c",children:"a310df2"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["show correct version (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/211",children:"#211"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f8de992b6d2621a604f9b31b6eea0ff644df30dd",children:"f8de992"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/212",children:"#212"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c9b850672357fd48a0b1f40f5b429ae615fbd914",children:"c9b8506"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/259",children:"#259"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e7f031f73dc3320352cd6087e32b281dbf01e6bc",children:"e7f031f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update python deps (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/247",children:"#247"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/514da161158200bc18a8963cb10be141c9847fb8",children:"514da16"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update system v2 tests to only use one crossover (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/205",children:"#205"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/aa6516367fd217b3868af2c1b56119ec548c77ad",children:"aa65163"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update zero efficiency error message (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/258",children:"#258"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5be6fe433791bee1f25dfcc265ffb94c87633836",children:"5be6fe4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["upgrade packages (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/255",children:"#255"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/035aad15b41bb16676ec33d33dcb78d139e2bc6c",children:"035aad1"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["version must be updated in version.py (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/63eb672ff5a28c5c4b14294c8d9dcc38a3481089",children:"63eb672"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["warn user about full recirculation of fluids in a compressor stage in a multiple streams and pressures compressor train (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/196",children:"#196"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0c452515226beec76a4db3c674d4fa102771dbe7",children:"0c45251"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-12",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["implement evaluate streams in models (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/232",children:"#232"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/df6b6b01099fe87738594544512c28d0bceb0d07",children:"df6b6b0"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"libecalc.core:"})," stream as input (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/224",children:"#224"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e06f970147e5539fa2c8db0ca53675d24c56ae33",children:"e06f970"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move crossover to component_conditions for system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/204",children:"#204"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/018b47291cbfd5b8b92bbff9c79846b32696d316",children:"018b472"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move RateType into common module (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/253",children:"#253"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c7f5a9955c55fdc970f60b6aade8a0793acab27a",children:"c7f5a99"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move validate operational conditions from compressor train, rename to validate model input (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/256",children:"#256"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6b0c72875e667ca1abce5b9b1f2ef4a9548d0d1e",children:"6b0c728"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove regularity our of core/domain (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/246",children:"#246"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/714888bfa69460174c1b3917470018e8e688b3e1",children:"714888b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove temporal operational settings system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/244",children:"#244"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a1d2ce62c4cfde50665bd1fdfa41402a64548672",children:"a1d2ce6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["rename streamCondition to stream (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/32885b5b054008cbfb682454daaa29d443fd561f",children:"32885b5"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["separate optimization from system (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/245",children:"#245"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b580e3d80ab5392410c438f6ff355fdf1326f121",children:"b580e3d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use Graph object to build graph (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/250",children:"#250"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ce65dbad024fc9afae74a2c533767152ce2efa20",children:"ce65dba"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"840-2023-09-25",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.3.0...v8.4.0",children:"8.4.0"})," (2023-09-25)"]}),"\n",(0,s.jsx)(c.h3,{id:"features-12",children:"Features"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add compressor inlet- and outlet pressures to models/train level (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/152",children:"#152"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9b95ee50fd78d77c59dfe2533c10dbcdc41461a7",children:"9b95ee5"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add input compressor pressures to output (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/140",children:"#140"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/74e3e5673bad36bf30d8b217609819a79d7e76bb",children:"74e3e56"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add support for system v2 in FDE (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e6d1f938d62d68479835f90932bc09b49203a6c9",children:"e6d1f93"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add support for temporal operational settings in v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f2b217acaaf445df03fba077cd7407a4c37375d2",children:"f2b217a"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-16",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add system v2 subcomponents to components list (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b61a0feba9d28c27992128a2e02262c58dedcbdb",children:"b61a0fe"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add system v2 to generator set consumers (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/166",children:"#166"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d40558eb0c727723ba1cf952dfbd58b73dca0cd0",children:"d40558e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["avoid name conflicts with ecalc cli package (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/197",children:"#197"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/140c4481b8a860b203b338b51a883c41bd6b4dc6",children:"140c448"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["bug in asset_result_dto (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/170",children:"#170"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c45a7acfb4bf3c89f8c89e71561a90e2831ccb17",children:"c45a7ac"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["correct type for total system rate in pump system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/167",children:"#167"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5559cdd478511b050a3f344da33110621f221b76",children:"5559cdd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["do not return actual rate in results for compressor sampled since it can not be calculated (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/190",children:"#190"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/74fcfd8ffc4835d6ddec442374f1389f24df66d7",children:"74fcfd8"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["expression type in system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5318fb536945cd2aeb82f03cb922fa1a4ed950e1",children:"5318fb5"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["forbid extra attributes in TimeSeries (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/195",children:"#195"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/24c27bb0d3f9ee5570dc76e6d6cf3a45bc006e27",children:"24c27bb"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["full run with system v2 components (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/147",children:"#147"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2279ef430f04673bc91926316663cdbd97cfc61d",children:"2279ef4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate system v2 schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/161",children:"#161"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a27c39253d91a3f1c7cc559164874c2d5f9443d3",children:"a27c392"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["handle all situations where zero mass rate is entering a compressor stage in a multiple streams compressor train (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/164",children:"#164"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ba9235efd01f8b6cfc1dd776f6355d076c3fb93b",children:"ba9235e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["handle dates in yaml correctly (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e9c28d057413aa801ec9af86b89f3c4d5b3de8e5",children:"e9c28d0"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["issue with crossover rate calculation in system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/188",children:"#188"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/623a1cfa1e9ee888d69543dc2050cf4c25945baf",children:"623a1cf"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make ecalc installable again (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/58693debf2cdb774a7b9659214ba9aa9453af8d0",children:"58693de"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["rate_type was snake_case in json output (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/172",children:"#172"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/dc82a88930e158fc5b6a762cd1fe7d75534d86d7",children:"dc82a88"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["requested pressures not always an attribute (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/155",children:"#155"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0078405e3ad2d254b320239fc8636c3c2bdfbebf",children:"0078405"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["system v2 evaluation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6494257c5d67f8a19582b2c152d73ec550289196",children:"6494257"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use results base (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/199",children:"#199"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/cebde330135210bcc25a5950a2416a8fcf747b09",children:"cebde33"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["wrongly accessed rate in pump system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/56da4b2a07188200589795ab8a2e7f1ebfe3fe95",children:"56da4b2"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-15",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add further explanation to generic workflow (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ddcb462ba1eda072df2abfd40e95fa677832ef91",children:"ddcb462"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add generic workflow (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/30553e0e7282ef35e616d2f3629de57e104d7e42",children:"30553e0"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add powerlossfactor in generic workflow (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3d152c880b9d8b33e3ac496ddc96eb2b2f588fb1",children:"3d152c8"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["changelog v8.4 add input compressor pressures to output (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/150",children:"#150"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/46e308fba1c1f4001bd1eaa340880c8409c8841b",children:"46e308f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["correct order of diagrams (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/71a07f5315a28d053557db25209d543d4a570307",children:"71a07f5"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make mermaid diagram of workflow render correctly (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b1c5b233907fa705832e55621e6917efb8620df7",children:"b1c5b23"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make mermaid workflow diagram render correctly (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/7a99b5b062804b0f0661ac4d6a62f8d6f32a2fdb",children:"7a99b5b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update changelog for v8.3 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b424176c1dad13f4a29ba7c84cc2354e37b75c2a",children:"b424176"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update workflow with comments (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a71abfe32f02a056a0253ec7e4596b0b10fb94b2",children:"a71abfe"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-19",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add pressure drop ahead of stage to inlet pressure before choking (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/146",children:"#146"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e5368de941febf44f7e5e13c11b1fc3509c2e95d",children:"e5368de"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add rate type to compressor model results and convert to time series (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/187",children:"#187"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c86bf3f940224ca765f5705f10df676eb6e5d557",children:"c86bf3f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add validation for missing headers in csv resource file (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/191",children:"#191"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/60e84032d932deaf0591c6f5d5d68d70d23dc753",children:"60e8403"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["adding test of full recirculation in multiple streams compressor trains (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ba9235efd01f8b6cfc1dd776f6355d076c3fb93b",children:"ba9235e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["calculate correct standard condition density when mixing two streams (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ba9235efd01f8b6cfc1dd776f6355d076c3fb93b",children:"ba9235e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["clarify neqsim depenedency in ecalc (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/198",children:"#198"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d6635a988de18799563c09c51ae7f3f7944c8915",children:"d6635a9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"docs:"})," fix equations showing twice (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/141",children:"#141"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2455e34cbaf047bc416a287052c12d9fbbdc963e",children:"2455e34"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["enable mypy for cli (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/189",children:"#189"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/da713fcdac9d2c32ed6b60b788de31a765c1644a",children:"da713fc"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix spelling errors in changelog (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/de3c2eb0cf74068dd6c04e7710eaeb1d2dd27a77",children:"de3c2eb"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove unnecessary folders (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/186",children:"#186"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e861d8782aa2d3280a7e3e5c24f757558e5656f5",children:"e861d87"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["rename conflicting file names (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/153",children:"#153"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/654175e9be0e40b521c6c68871b8a0b85906605c",children:"654175e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["revert nan to num in expressions (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/202",children:"#202"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2f95c2966ebfc906ebeda2f12ad1fe72ec0a59b4",children:"2f95c29"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update archive (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/181",children:"#181"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/03abf64e9267374b8cd641c09d870631200a2ec5",children:"03abf64"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update deps to latest (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0f30f49db6febd033cfd139727c85c31c4676fd2",children:"0f30f49"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-13",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["change typ to rate_type for TimeSeriesRate (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/89",children:"#89"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8be87ddff732592e16ff337fe9927ead438d5928",children:"8be87dd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate asset/ecalc model schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/157",children:"#157"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6818848afa5f9c390d9214597b8ea938eeb43037",children:"6818848"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate direct emitter schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/180",children:"#180"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/924526ad7958cfce6e75aa43791224edbcf6db70",children:"924526a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate facility type schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/182",children:"#182"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/942897921d8f38115878bdd95349c43c449240b7",children:"9428979"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate fuel consumer schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/160",children:"#160"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9f580c16f6f25e22d30e8d36dd05536303ec6929",children:"9f580c1"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate fuel types schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/179",children:"#179"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e17ef3be779921e029db5c7ca10ed86a2e71f797",children:"e17ef3b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate generator set schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/165",children:"#165"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ab25e055de634a4ecc59ae580834ee2e537fd991",children:"ab25e05"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate installation schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/159",children:"#159"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/030a44baf61719a8de6ed48b772a47eccd7d923c",children:"030a44b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate time series schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/176",children:"#176"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b02d68dbc615b9802c54d6e9806430aceee1b354",children:"b02d68d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["improve error message when wrong CURVE-keyword input to single speed compressor (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/173",children:"#173"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9502bcc8ee504d490e293f4bada839e96e011092",children:"9502bcc"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["improve error message when wrong CURVES-keyword input to variable speed compressor (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/175",children:"#175"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/714e867f7593527078480e4d9c7bca62da163d7a",children:"714e867"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["merge functionality for results (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/193",children:"#193"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/db1e9b1d52d9dfce48d54dfa6cd77ac4a1bbf92f",children:"db1e9b1"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move common properties for system v2 operational settings (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/10b5e07915d52ce6b08f508dd87d31c4d8dc8778",children:"10b5e07"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move yaml system into package (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b477b159cc60df96c5ec230cd8d8db519f721f85",children:"b477b15"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove condition and power_loss_factor from system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2507bb92730cd4e9b5bd35d2f7e429d493fb5478",children:"2507bb9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove rate_fractions from system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ba788fdd8dff754c3ca16315d098e00911d91fa0",children:"ba788fd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use common Period,Periods classes (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/76366cec64da5c7585635db69adf457fbb36775e",children:"76366ce"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use common to_camel_case function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/171",children:"#171"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f5f0c2f8da6e07ad666f8fc203876eece646e6e8",children:"f5f0c2f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use yaml prefix for yaml klasses/modules (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/174",children:"#174"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e91ac2a77345556d8a53c10a4be049eb8ec2c7ce",children:"e91ac2a"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"830-2023-08-11",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.2.2...v8.3.0",children:"8.3.0"})," (2023-08-11)"]}),"\n",(0,s.jsx)(c.h3,{id:"-breaking-changes-8",children:"\u26a0 BREAKING CHANGES"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["energy model type not allowed to change over time (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/131",children:"#131"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"features-13",children:"Features"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["output pump head to json-file (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/49",children:"#49"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/60720f429cb5da82cd839740eca8d3039c9d5969",children:"60720f4"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-17",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["avoid zero discharge pressure after validation of operational conditions (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/830c75e27a29549157658c606e618da381c24e81",children:"830c75e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["bug fix to joining results from different temporal models with compressor train models having multiple inlet or outlet streams (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/63",children:"#63"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/da3144a0cbb3e6121809c8eeee86e62a2a3ed5e1",children:"da3144a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["json schema accepts MAXIMUM_DISCHARGE_PRESSURE for single speed train (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/86",children:"#86"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a18de1eae60085211b640b67a4f372346382fdc8",children:"a18de1e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["json schema allow stages to have control_margin and control_margin_unit (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/90",children:"#90"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2415534053df4e50496fd2ae4504cff76ab14346",children:"2415534"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make apply_condition work for 2D numpy arrays also (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/78",children:"#78"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/bce91cb0b6b821e1b1a579c40f19311e847577b3",children:"bce91cb"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make sure that suction pressure is less than or equal to discharge pressure for compressor train (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/104",children:"#104"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d2182730c2fdcd98e54fef8625cd289dc206b2bf",children:"d218273"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["parse scientific notation numbers in expression (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/85",children:"#85"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/fdf322bafa9a3379b6481e57ca1e761475f42b25",children:"fdf322b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["parse spaces as thousand separators from excel (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/107",children:"#107"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5a3bd6a2b8e85dcc248435b30677e278d64c7f93",children:"5a3bd6a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["pump results wrong when resampled (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/71",children:"#71"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/daffdb3d969add106bbbfd782cfae418cfd8650d",children:"daffdb3"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["resample emissions correctly to create valid json (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3c9b52e40c1c88a11db3d088c0fbb320a4920daa",children:"3c9b52e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["result of validation of operational conditions when rate is zero should always be valid (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9de403c8b92895fafabea875d970fc1901a4ba89",children:"9de403c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["validate time steps where rate is different from zero, not only when larger than zero (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6ce07c41e82b397d9512566a42fd8fd2017c14d1",children:"6ce07c4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["wrong standard_conditions_density when mixing two fluids (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a16a695736125dc4b662ab31ab9a83186b14f369",children:"a16a695"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-16",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["fix generic compressor example (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/38870a3f735e7397502345dda69f646240328490",children:"38870a3"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix links (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/116",children:"#116"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/62cadfcf581b101d7bb33b3772ffb65eefbf670b",children:"62cadfc"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["how to migrate from 8.1 to 8.2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4d3be58f5af44cbdee4158017b163361371dc23c",children:"4d3be58"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove unnecessary information from migration guide (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/47305386db82d826245c67e6c10a8597a36bfc09",children:"4730538"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["specify only gensets for boiler/heater (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/53",children:"#53"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2df3bdf299bcb6cf47289259e4fedd21c2de141c",children:"2df3bdf"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update changelog 8.2 with changes for ltp- and stp (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/43",children:"#43"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6fe4b773a156d01eec67e8e70b764d4e18d374ce",children:"6fe4b77"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update changelog for 8.2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3ccea743332f0d1950ff61ca6747bb507ea37bd4",children:"3ccea74"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update docs and changelog for energy models (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/133",children:"#133"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8f0d71633d80a99da369dffa05f386e554f3c0bb",children:"8f0d716"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update documentation for heaters and boilers (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/52",children:"#52"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2bef70731be94ace7d0a2269f2ebf07bd01e82b2",children:"2bef707"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update migration guide with ltp- and stp changes (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/42",children:"#42"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4b0b23011a9d2161741dd52031070307fc6c1b68",children:"4b0b230"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-20",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add 8.3 changelog (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9f4a4af545126922a38807c51268bd84dfb868db",children:"9f4a4af"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add fluid mixing checks (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/53c1626ebf10edc71c0ba4ef5fcdbe1cd6a32ac0",children:"53c1626"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add fluid mixing checks (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0f3ddcaca1164acad3f5d213b2e8daac05333042",children:"0f3ddca"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add installation filter to flare nmvoc (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/87",children:"#87"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f37b76d0b3c2f6941585299998205c3a907b41a8",children:"f37b76d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add installation filter to remaining ltp-columns (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/91",children:"#91"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/39df7923d79a393981285986016311e9f1b0848f",children:"39df792"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add power adjustment constant also for compressor trains with interstage pressure (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/136",children:"#136"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c8a486114ec713358798a5dba2a5500dfbbef21d",children:"c8a4861"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add test for adjust energy usage on multiple streams and pressures compressor trains (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c8a486114ec713358798a5dba2a5500dfbbef21d",children:"c8a4861"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add test of count_parentheses (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0d1ce6feff7a6aaeecab57fd9a661122b691d3b5",children:"0d1ce6f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add test of validation of operational conditions when suction pressure exceeds discharge pressure (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d2182730c2fdcd98e54fef8625cd289dc206b2bf",children:"d218273"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["added changelog entry about interstage pressure fix (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/95",children:"#95"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2a1e8b085ed87dcbb8da874b64f737721f0ceaae",children:"2a1e8b0"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["count parentheses in list of tokens only among the elements that are strings (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/94",children:"#94"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0d1ce6feff7a6aaeecab57fd9a661122b691d3b5",children:"0d1ce6f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["energy model type not allowed to change over time (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/131",children:"#131"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/670cff2154e2881aea25903557a7f187bdab05ee",children:"670cff2"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["enforce unique fuel type names, and unique emission names within one fuel type (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/84",children:"#84"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4ea9c630510015e2030f0840b933ea399cc0734b",children:"4ea9c63"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix broken link in documentation of GENERATORSETS keyword (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/103",children:"#103"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/329c8e993c217e7685c082b7671a12c4115bba87",children:"329c8e9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix typing of fluid composition (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c0d98b3a6f4dfb411edfa9bdd8be3c887b28f6da",children:"c0d98b3"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["improve documentation on defining compressor charts using CURVE and CURVES (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/97",children:"#97"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1bde68a38e75255c8f2d6cd88fb5b6ba1ddb97c9",children:"1bde68a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["improve error message when bad yaml file name (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/77",children:"#77"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d2eb733264b2d5b2114a785096c9d6abbffea21b",children:"d2eb733"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["merge queue (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d4489c604b807c07a7e41a038cbdfeca9720ade1",children:"d4489c6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["numpy ndarray typing (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/46",children:"#46"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9b7b308ea6ce5c0aee5acdf8226cd94b90b448aa",children:"9b7b308"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["pin numpy to compatible numpy version (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/35a3640a96c376f4d37e74fd62aec0f0a0bf458b",children:"35a3640"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove limiting dependency typer-cli (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/820844475c29460f29a44bb7917ed5bd37d4ad45",children:"8208444"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["simplify dependencies for use with komodo (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/39c5c365aea85ba333a5a509fe5cfbee1be5d9d0",children:"39c5c36"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies to be aligned with external requirements (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/fbfbfeb4292011c04d9107218a5b4188e052f7ff",children:"fbfbfeb"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update snapshots after power adjustment constant fix for compressor trains with interstage pressure (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c8a486114ec713358798a5dba2a5500dfbbef21d",children:"c8a4861"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-14",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["consumer system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/248dabb595a12ed6ca9a0f8ef519f5439a3b0964",children:"248dabb"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["ensure neqsim fluid is contained to FluidStream object (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/118",children:"#118"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d1d6ad6fa1c6cfdf4eee428477995c6f163fa11a",children:"d1d6ad6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["enthalpy calculations (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/109",children:"#109"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a01a2153fe904d191150c4ced09257dc45484194",children:"a01a215"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["enthalpy calculations (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/110",children:"#110"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/cf7d1a9e975fece41b98f4ab6c7bbb3edb562735",children:"cf7d1a9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["improve naming and documentation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/94be7fa714a0db20944e9b35d1867d11a0748e7f",children:"94be7fa"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["molar_mass_kg_per_mol is not used in the code (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3ea535ef68ead2b600b33319c1ed70907e7ba681",children:"3ea535e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move NeqSimfluid creation into NeqSim wrapper (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/57c4b244d6449c6b43bcea75a1f7ed1f82ccfc8c",children:"57c4b24"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["NeqSim mapping (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/120",children:"#120"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0a0b2fea564c1695bb920145086f23bccac91528",children:"0a0b2fe"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove FluidStream copy (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/119",children:"#119"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0e30ab288b18fecbde62067564ac235d6c58dae1",children:"0e30ab2"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["Use a list comprehension to create a transformed list (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/112",children:"#112"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5d7292bdafd16bc74b2e9b8bc13e97cf279fd9f7",children:"5d7292b"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"tests-3",children:"Tests"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add test for fluid stream mixing (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0ba8f8fff9503b791b6edaf16c45cb3d922d6c2b",children:"0ba8f8f"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"continuous-integration-4",children:"Continuous Integration"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["create release-please pr against correct branch (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/be9426a774b8704b2f22e9a83544e07bd92a8808",children:"be9426a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix issue with api reference docs generation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/44",children:"#44"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/42c140269a9e8a6d5f09e9354d14ae51d02f3e81",children:"42c1402"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix syntax for gh action workflow (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d8700dd9bccd40cb4b3bdb75119e0bd47baf3985",children:"d8700dd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["Lock pydantic version in CI and update hooks (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/106",children:"#106"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2ea517e79a34195e561a4897798bd24ef9cae6ae",children:"2ea517e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove duplicate build of docs (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/62",children:"#62"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e5b896b9f46a7e13c6d806237c4d4bef44833b77",children:"e5b896b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["set default ownership for source (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/16d54f1a30368d92ead377baceef98820754c25f",children:"16d54f1"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["support hotfix releases (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/03469295d20526e391938a5830d1513088a8803f",children:"0346929"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update pre-commit settings (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6092255da9ca373537b162b21190bfe9f138a027",children:"6092255"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"822-2023-05-28",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.2.1...v8.2.2",children:"8.2.2"})," (2023-05-28)"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-18",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["allow electrical driven consumers in consumer system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/92cb4faa7bfa525af6527892eab2dd38606b2033",children:"92cb4fa"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["cast float to numpy array in function call (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/39",children:"#39"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/250928c2b573f6148129ec32bc54932cbb2cb4a0",children:"250928c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"NeqSim Wrapper:"})," inconsistent return type (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/94824210b4c2da666d9280ee581e3a98463e4742",children:"9482421"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["output emissions in fixed and predicted order (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/059dab592bf396eb20d4b825b8358fc10793ca5d",children:"059dab5"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"continuous-integration-5",children:"Continuous Integration"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["enable mypy for neqsim wrapper (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/871c038c756ba40fc1c43bfbee7f83b0f4fd5390",children:"871c038"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["parallelize tests in docker (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4e73b680147c558e4e7cb0d44a78cfaa0e1a357f",children:"4e73b68"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove docker tests (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a2b5c1a7158d81094982724a63748ca4798f14ca",children:"a2b5c1a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use xdist to parallelize test suite (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2895ae7361878ea94d0d5be4a04a6ffbe0067b3d",children:"2895ae7"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"tests-4",children:"Tests"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["compare consumer system v1 vs v2 both fuel and power consumers (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/74fafce276b93c9495bcfa1c2800c2a866bfa388",children:"74fafce"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-15",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["even more typing! (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a7b22e23fa73d4e0cd35750f7ea6cea5e52f8abd",children:"a7b22e2"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix more typing (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/08394a3ce3969976674532ccf8c3876265315035",children:"08394a3"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make units lowercase in function names (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/272f0d7274986bc54c0717e7964d5a48c9a06723",children:"272f0d7"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["raise exceptions from error (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ee6e4742da1c3201abe8969d2dfedb1c2d4b369b",children:"ee6e474"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove duplicate function for converting to standard rate (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/93de4f4d10b10763428d933e7afc3dea277a31ac",children:"93de4f4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove unused code (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/7ccf2c1dfd6d51242032d1b7bf45c52f6b7e90f5",children:"7ccf2c1"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["rename function variables (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c56693a9e982c7e2275cc277939624c7812e9b65",children:"c56693a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["typing and typos (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/936b9417da0723871d6c46f258d256a8967f934c",children:"936b941"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-17",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add docstrings to undocumented functions (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/064adfa204c2c9f21588c30dc2c2cf3d2375c8a7",children:"064adfa"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update compressor pressure control (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/14",children:"#14"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1da1999ac4dfaf21abd50e9d9ecc94102a0427e2",children:"1da1999"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-21",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add consumer function utils (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add consumer system v2 sub results (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b78b03504c4a46114062aded6661f00400c6ca06",children:"b78b035"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add testing of condition in consumer system consumer function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["capture return values from a decorated function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/09ef23e92bf2755c7b83c7de5e9cbe9ee862db05",children:"09ef23e"}),"), closes ",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/4489",children:"#4489"})]}),"\n",(0,s.jsxs)(c.li,{children:["capture valid neqsim states (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f9c8b09f36d1f9a965b94cd32ef2d7b47c910a75",children:"f9c8b09"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["change to absolute image links in readme (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/16",children:"#16"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9a54f516613509bd6d5595f8afc1e5dce7ac860a",children:"9a54f51"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["conditions in tabular consumer function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["correct link to documentation from README.md (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f185a7f8c389d4f9f5e087b68bfc83cc4fddad74",children:"f185a7f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["coverage from coverage.py is not directly supported (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8e76c8ab90d455613868e4343d6a2f61ccfb2a68",children:"8e76c8a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["enable B904 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/65ac18ba23178c57886c1a77b74b2ee52c6d7a60",children:"65ac18b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["evaluate consumer system v2 consumers according to input order (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/00882321d823f74cf37f0b42e9771775b8eb34db",children:"0088232"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix badges (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/dd2fd6be194d306ae1ef969b13c43aea7352db58",children:"dd2fd6b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["migration guide changed resampling method (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/38",children:"#38"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d4f11dc49ce5eef29f6982f9514f6664ef18c764",children:"d4f11dc"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move conditioning for consumer system consumer function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move conditions for compressor consumer function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move conditions for direct consumer function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move conditions in pump consumer function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move evaluation of conditions before calculations (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/24",children:"#24"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove energy usage before conditioning from tests (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove energy_usage_before_conditioning from results (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["set power to zero when rate (and fuel consumption) is zero (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/27",children:"#27"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1ee5bfd2af30482683698172cd2a9c512f793b77",children:"1ee5bfd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["typo (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9c3af00b4bcf5e3e57a99c97d3cc9028faeca307",children:"9c3af00"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["typo (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/389db6f29e7a7ff9044b7bac5fb0e6fddba1687d",children:"389db6f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies to latest compatible (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/58098624c64693d20591bc96d79c2cbc61e3b5a6",children:"5809862"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update description etc in readme (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f37dbb7b97ade6c358b89e288ba644b06d546187",children:"f37dbb7"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update docstring for numeric_methods (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/be435c3c96bc378614c4f761410c005be77025a4",children:"be435c3"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update test snapshots (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1ee5bfd2af30482683698172cd2a9c512f793b77",children:"1ee5bfd"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h2,{id:"821-2023-05-09",children:"8.2.1 (2023-05-09)"}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-22",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["initial commit (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e4a59f03f716c7ceb1d3df50af6ef3cc76c405cd",children:"e4a59f0"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["release 8.2.1 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9d66de6199b35d3bfd279fd1fe96806b05e6d594",children:"9d66de6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update documentation url (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6443ecf7324e6ee33d02bfa1a3f7b9168f19a612",children:"6443ecf"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"continuous-integration-6",children:"Continuous Integration"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["enable publish to pypi (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/15",children:"#15"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/fe6f069b12119b62d054a635eb038b37a4394415",children:"fe6f069"}),")"]}),"\n"]})]})}function o(e={}){const{wrapper:c}={...(0,n.R)(),...e.components};return c?(0,s.jsx)(c,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,c,i)=>{i.d(c,{R:()=>a,x:()=>t});var s=i(96540);const n={},r=s.createContext(n);function a(e){const c=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(c):{...c,...e}}),[c,e])}function t(e){let c;return c=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),s.createElement(r.Provider,{value:c},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/42b1e060.c0b5850f.js b/assets/js/42b1e060.c0b5850f.js new file mode 100644 index 0000000000..4bfc2e623d --- /dev/null +++ b/assets/js/42b1e060.c0b5850f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2399],{9502:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var c=r(74848),t=r(28453);const s={},o="MODELS",i={id:"about/references/MODELS",title:"MODELS",description:"MODELS",source:"@site/docs/about/references/MODELS.md",sourceDirName:"about/references",slug:"/about/references/MODELS",permalink:"/ecalc/docs/about/references/MODELS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/MODELS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"MAX_USAGE_FROM_SHORE",permalink:"/ecalc/docs/about/references/MAX_USAGE_FROM_SHORE"},next:{title:"NAME",permalink:"/ecalc/docs/about/references/NAME"}},d={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Supported Model types",id:"supported-model-types",level:2}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.R)(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(n.h1,{id:"models",children:"MODELS"}),"\n",(0,c.jsx)(n.p,{children:(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/MODELS",children:"MODELS"})}),"\n",(0,c.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,c.jsxs)(n.p,{children:["Each element is specified in a list. These are later used as input to other models, or in the\n",(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/INSTALLATIONS",children:"INSTALLATIONS"})," part of the setup by referencing their\n",(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/NAME",children:"NAME"}),"."]}),"\n",(0,c.jsxs)(n.p,{children:["This part of the setup specifies models not having any input data and/or multi level models, that is models which use\nother models (from both ",(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/MODELS",children:"MODELS"})," and from ",(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/FACILITY_INPUTS",children:"FACILITY_INPUTS"}),")."]}),"\n",(0,c.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: \n \n"})}),"\n",(0,c.jsx)(n.h2,{id:"supported-model-types",children:"Supported Model types"}),"\n",(0,c.jsx)(n.p,{children:"The supported types are:"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"FLUID"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"COMPRESSOR_CHART"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"SINGLE_SPEED_COMPRESSOR_TRAIN"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"TURBINE"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"COMPRESSOR_WITH_TURBINE"})}),"\n"]}),"\n",(0,c.jsxs)(n.p,{children:["The documentation of each of these is found on the ",(0,c.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/",children:"Models"})," page."]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,c.jsx)(n,{...e,children:(0,c.jsx)(a,{...e})}):a(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>o,x:()=>i});var c=r(96540);const t={},s=c.createContext(t);function o(e){const n=c.useContext(s);return c.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),c.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4358a0b2.1cc97b8a.js b/assets/js/4358a0b2.1cc97b8a.js new file mode 100644 index 0000000000..df555fbafa --- /dev/null +++ b/assets/js/4358a0b2.1cc97b8a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1360],{21318:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>r,toc:()=>c});var t=i(74848),s=i(28453);const a={slug:"v8.16-release",title:"v8.16",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:-25},l="eCalc",r={id:"changelog/v8-16",title:"v8.16",description:"Breaking Changes",source:"@site/docs/changelog/v8-16.md",sourceDirName:"changelog",slug:"/changelog/v8.16-release",permalink:"/ecalc/docs/changelog/v8.16-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-16.md",tags:[{inline:!0,label:"release",permalink:"/ecalc/docs/tags/release"},{inline:!0,label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:-25,frontMatter:{slug:"v8.16-release",title:"v8.16",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:-25},sidebar:"changelog",previous:{title:"v8.17",permalink:"/ecalc/docs/changelog/v8.17-release"},next:{title:"v8.15",permalink:"/ecalc/docs/changelog/v8.15-release"}},o={},c=[{value:"Breaking Changes",id:"breaking-changes",level:2},{value:"New Features",id:"new-features",level:2},{value:"Bug Fixes",id:"bug-fixes",level:2},{value:"Documentation",id:"documentation",level:2}];function d(e){const n={code:"code",h1:"h1",h2:"h2",li:"li",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"ecalc",children:"eCalc"}),"\n",(0,t.jsx)(n.h2,{id:"breaking-changes",children:"Breaking Changes"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"New unit-format for venting emitters, aligned to what is used in other parts of yaml-file. Example: Example: Unit should be now be written as KG_PER_DAY, and not kg/d."}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"new-features",children:"New Features"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Make electrical- and mechanical available at asset level. This is needed to make plots split by mechanical- and electrical power in web (will be implemented in future version)."}),"\n",(0,t.jsx)(n.li,{children:"Make venting emitters emission names case insensitive: Avoid splitting same emission-types into separate ones, due to different use of upper- and lower case."}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"bug-fixes",children:"Bug Fixes"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Detect duplicate keys in yaml file and raise error, pointing to where in the yaml-file the error occurs."}),"\n",(0,t.jsx)(n.li,{children:"Do not allow for negative recirculation if rate is above max flow rate for a compressor chart. If the compressor stage is out of capacity already, the available capacity is set to zero."}),"\n",(0,t.jsxs)(n.li,{children:["Ensure regularity is evaluated for all installations when only venting emitters. eCalc failed if only ",(0,t.jsx)(n.code,{children:"VENTING_EMITTERS"})," were specified (without ",(0,t.jsx)(n.code,{children:"FUELCONUMERS"})," and ",(0,t.jsx)(n.code,{children:"GENERATORSETS"}),"), because installation results were empty. This fix ensures to get results, and to evaluate regularity, even if the installation results are empty."]}),"\n",(0,t.jsxs)(n.li,{children:["Max power from shore values: Output values did not correspond to input in LTP-report, when output frequency is set to e.g. ",(0,t.jsx)(n.code,{children:"YEAR"}),". This is now fixed."]}),"\n",(0,t.jsx)(n.li,{children:"Use custom type pydantic class to wrap ndarray and avoid validation problem: This fix removes potentially confusing warning in the validation."}),"\n",(0,t.jsxs)(n.li,{children:["Wrong unit max power from shore: The unit for ",(0,t.jsx)(n.code,{children:"Max Usage from Shore column"})," in LTP-report was GWh, but is now correctly reported as MW."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"documentation",children:"Documentation"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Add ",(0,t.jsx)(n.code,{children:"MAXIMUM_POWER"})," to eCalc yaml-keyword list."]}),"\n",(0,t.jsx)(n.li,{children:"Fix typos."}),"\n",(0,t.jsx)(n.li,{children:"Modify changelog order."}),"\n",(0,t.jsxs)(n.li,{children:["Update description of ",(0,t.jsx)(n.code,{children:"VENTING_EMITTERS"}),"."]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>l,x:()=>r});var t=i(96540);const s={},a=t.createContext(s);function l(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/43a1031a.0a2d738e.js b/assets/js/43a1031a.0a2d738e.js new file mode 100644 index 0000000000..64b7f1fac0 --- /dev/null +++ b/assets/js/43a1031a.0a2d738e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9599],{71843:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>a,contentTitle:()=>o,default:()=>p,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var n=i(74848),s=i(28453);const r={title:"Facility inputs",sidebar_position:3,description:"Guide on how to use facility inputs"},o=void 0,l={id:"about/modelling/setup/facility_inputs/index",title:"Facility inputs",description:"Guide on how to use facility inputs",source:"@site/docs/about/modelling/setup/facility_inputs/index.md",sourceDirName:"about/modelling/setup/facility_inputs",slug:"/about/modelling/setup/facility_inputs/",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/facility_inputs/index.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Facility inputs",sidebar_position:3,description:"Guide on how to use facility inputs"},sidebar:"about",previous:{title:"Time series",permalink:"/ecalc/docs/about/modelling/setup/time_series"},next:{title:"Generator modelling",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling"}},a={},c=[{value:"Format",id:"format",level:2},{value:"Supported types",id:"supported-types",level:3}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.admonition,{type:"note",children:(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/FACILITY_INPUTS",children:"FACILITY_INPUTS"})," keyword is ",(0,n.jsx)(t.strong,{children:"mandatory"})," within the eCalc\u2122 YAML file."]})}),"\n",(0,n.jsxs)(t.p,{children:["This part of the setup defines input files that characterize various facility elements. Each facility element is\nspecified in a list. These are later used as input in the ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/INSTALLATIONS",children:"INSTALLATIONS"})," part of the setup by referencing their ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/NAME",children:"NAME"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["All facility inputs are in essence a ",(0,n.jsx)(t.code,{children:"CSV"})," (Comma separated file) file that specifies input data to a model that\ncalculates how much energy the equipment is using depending on the operating mode/throughput. There are multiple\n",(0,n.jsx)(t.a,{href:"#supported-types",children:"supported types"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"There are four categories of data that can be used here:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Files describing the performance of a ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling",children:"generator set"})]}),"\n",(0,n.jsxs)(t.li,{children:["Files describing the performance of pumps ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",children:"(pump charts)"})]}),"\n",(0,n.jsxs)(t.li,{children:["Files describing the performance of ",(0,n.jsx)(t.strong,{children:"only"})," tabular compressors ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model",children:"(sampled compressor data)"})]}),"\n",(0,n.jsx)(t.li,{children:"Other energy consuming equipment modeled variable w.r.t. reservoir management\n(tabulated relationship between variables and consumption)"}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["eCalc\u2122 supports making simple adjustments to a table by using the ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/ADJUSTMENT",children:"ADJUSTMENT"}),"\nkeyword as well as modification of the ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/HEAD_MARGIN",children:"HEAD_MARGIN"}),"\nwhich can be used while calibrating pump charts."]}),"\n",(0,n.jsx)(t.h2,{id:"format",children:"Format"}),"\n",(0,n.jsxs)(t.p,{children:["Each facility input has the skeleton as seen below. However, some inputs require further information. For example, ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",children:"pump models"})]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: \n FILE: \n TYPE: \n"})}),"\n",(0,n.jsx)(t.h3,{id:"supported-types",children:"Supported types"}),"\n",(0,n.jsxs)(t.p,{children:["The facility input type is defined using the ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/TYPE",children:"TYPE"})," keyword and defines the type of model applied\nto the data in this file. The input files are in ",(0,n.jsx)(t.code,{children:"CSV"})," (Comma separated file) format. The paths to the input files may be either absolute or relative to the setup file."]}),"\n",(0,n.jsx)(t.p,{children:"The supported types are:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"ELECTRICITY2FUEL"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"TABULAR"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"COMPRESSOR_TABULAR"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"PUMP_CHART_SINGLE_SPEED"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"PUMP_CHART_VARIABLE_SPEED"})}),"\n"]})]})}function p(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},28453:(e,t,i)=>{i.d(t,{R:()=>o,x:()=>l});var n=i(96540);const s={},r=n.createContext(s);function o(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/43a26e71.dd67e435.js b/assets/js/43a26e71.dd67e435.js new file mode 100644 index 0000000000..6abc867bc7 --- /dev/null +++ b/assets/js/43a26e71.dd67e435.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4634],{41528:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>s,default:()=>r,frontMatter:()=>l,metadata:()=>p,toc:()=>d});var i=t(74848),o=t(28453);const l={sidebar_position:2,description:"Pump modelling"},s="Pump modelling",p={id:"about/modelling/setup/facility_inputs/pump_modelling/index",title:"Pump modelling",description:"Pump modelling",source:"@site/docs/about/modelling/setup/facility_inputs/pump_modelling/index.md",sourceDirName:"about/modelling/setup/facility_inputs/pump_modelling",slug:"/about/modelling/setup/facility_inputs/pump_modelling/",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/facility_inputs/pump_modelling/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,description:"Pump modelling"},sidebar:"about",previous:{title:"Generator modelling",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling"},next:{title:"Pump chart",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts"}},a={},d=[];function u(e){const n={a:"a",admonition:"admonition",h1:"h1",p:"p",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"pump-modelling",children:"Pump modelling"}),"\n",(0,i.jsx)(n.h1,{id:"attention",children:"Attention"}),"\n",(0,i.jsx)(n.p,{children:"Pumps can both be single speed and variable speed. Often, the pumping capacity on an installation is filled with a system of several pumps in parallel."}),"\n",(0,i.jsx)(n.admonition,{title:"Attention",type:"warning",children:(0,i.jsx)(n.p,{children:"The pump models in eCalc\u2122 are intended for water, i.e., there is no friction dependency.\nThus, for usage in other types of pumps (e.g., where the\nfluid viscosity changes with the fluid mixture), the results might not be as intended."})}),"\n",(0,i.jsxs)(n.p,{children:["Core theory behind the modelling of pumps in eCalc\u2122 can be found ",(0,i.jsx)(n.a,{href:"/ecalc/docs/about/modelling/theory/pump_modelling",children:"here"}),"."]})]})}function r(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>p});var i=t(96540);const o={},l=i.createContext(o);function s(e){const n=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function p(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4424673c.34b787c0.js b/assets/js/4424673c.34b787c0.js new file mode 100644 index 0000000000..44da7ab737 --- /dev/null +++ b/assets/js/4424673c.34b787c0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2066],{28315:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>c,default:()=>u,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var a=t(74848),r=t(28453);const i={},c="HEAD_MARGIN",o={id:"about/references/HEAD_MARGIN",title:"HEAD_MARGIN",description:"FACILITYINPUTS /",source:"@site/docs/about/references/HEAD_MARGIN.md",sourceDirName:"about/references",slug:"/about/references/HEAD_MARGIN",permalink:"/ecalc/docs/about/references/HEAD_MARGIN",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/HEAD_MARGIN.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"HEAD",permalink:"/ecalc/docs/about/references/HEAD"},next:{title:"INFLUENCE_TIME_VECTOR",permalink:"/ecalc/docs/about/references/INFLUENCE_TIME_VECTOR"}},s={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,r.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h1,{id:"head_margin",children:"HEAD_MARGIN"}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.a,{href:"/ecalc/docs/about/references/FACILITY_INPUTS",children:"FACILITY_INPUTS"})," /\n",(0,a.jsx)(n.a,{href:"/ecalc/docs/about/references/HEAD_MARGIN",children:"HEAD_MARGIN"})]}),"\n",(0,a.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,a.jsx)(n.p,{children:"When calibrating pump charts to historical data, the head values at maximum speed\ncould be put in the cloud of data to be unbiased. However, eCalc will treat all\nhead values above the maximum defined area in the chart infeasible (i.e.,\noutside pump capacity). To mitigate this when running through historical data for\npower calibration, one can adjust the head margin with this keyword."}),"\n",(0,a.jsxs)(n.p,{children:["Calculated head values above maximum head values from the chart will be set equal to\nmaximum head values before power calculations ",(0,a.jsx)(n.strong,{children:"if"})," they are within the margin given.\nCalculated head values larger than maximum + margin will still be infeasible."]}),"\n",(0,a.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,a.jsxs)(n.p,{children:["The head margin can be specified in ",(0,a.jsx)(n.code,{children:"mlc"})," (meter liquid column):"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"HEAD_MARGIN: \n"})}),"\n",(0,a.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:" NAME: pump_name\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n HEAD: M\n RATE: AM3_PER_HOUR\n EFFICIENCY: PERCENTAGE\n FILE: .csv\n HEAD_MARGIN: 10.0\n"})})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>o});var a=t(96540);const r={},i=a.createContext(r);function c(e){const n=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),a.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/453.2de45f11.js b/assets/js/453.2de45f11.js new file mode 100644 index 0000000000..91c339d511 --- /dev/null +++ b/assets/js/453.2de45f11.js @@ -0,0 +1,26805 @@ +"use strict"; +exports.id = 453; +exports.ids = [453]; +exports.modules = { + +/***/ 10646: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ H: () => (/* binding */ addHtmlLabel) +/* harmony export */ }); +/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(82933); + + + + +function addHtmlLabel(root, node) { + var fo = root.append('foreignObject').attr('width', '100000'); + + var div = fo.append('xhtml:div'); + div.attr('xmlns', 'http://www.w3.org/1999/xhtml'); + + var label = node.label; + switch (typeof label) { + case 'function': + div.insert(label); + break; + case 'object': + // Currently we assume this is a DOM object. + div.insert(function () { + return label; + }); + break; + default: + div.html(label); + } + + _util_js__WEBPACK_IMPORTED_MODULE_0__/* .applyStyle */ .AV(div, node.labelStyle); + div.style('display', 'inline-block'); + // Fix for firefox + div.style('white-space', 'nowrap'); + + var client = div.node().getBoundingClientRect(); + fo.attr('width', client.width).attr('height', client.height); + + return fo; +} + + +/***/ }), + +/***/ 82933: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ AV: () => (/* binding */ applyStyle), +/* harmony export */ De: () => (/* binding */ isSubgraph), +/* harmony export */ c$: () => (/* binding */ applyTransition), +/* harmony export */ gh: () => (/* binding */ edgeToId), +/* harmony export */ nh: () => (/* binding */ applyClass) +/* harmony export */ }); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(34963); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(89610); + + +// Public utility functions + + +/* + * Returns true if the specified node in the graph is a subgraph node. A + * subgraph node is one that contains other nodes. + */ +function isSubgraph(g, v) { + return !!g.children(v).length; +} + +function edgeToId(e) { + return escapeId(e.v) + ':' + escapeId(e.w) + ':' + escapeId(e.name); +} + +var ID_DELIM = /:/g; +function escapeId(str) { + return str ? String(str).replace(ID_DELIM, '\\:') : ''; +} + +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr('style', styleFn); + } +} + +function applyClass(dom, classFn, otherClasses) { + if (classFn) { + dom.attr('class', classFn).attr('class', otherClasses + ' ' + dom.attr('class')); + } +} + +function applyTransition(selection, g) { + var graph = g.graph(); + + if (lodash_es__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A(graph)) { + var transition = graph.transition; + if (lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(transition)) { + return transition(selection); + } + } + + return selection; +} + + +/***/ }), + +/***/ 21176: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Zp: () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(8058); +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(5664); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(48585); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(39142); +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(34098); +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(74722); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(91395); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(697); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.A(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.A( + map/* default */.A(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.A(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.A(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.T(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.A(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.A(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.A(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.A(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.A(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.A('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.A(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.A(g.outEdges(v), function (e) { + if (has/* default */.A(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.A(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.A(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/merge.js + 6 modules +var merge = __webpack_require__(98879); +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(81942); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(23068); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(61882); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.A)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(29008); +;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.A, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(52528); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(79841); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(49574); +;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.A)(iteratee, 3); + + (0,_baseForOwn/* default */.A)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.A)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(69592); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.A, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js +var _root = __webpack_require__(41917); +;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default */.A.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.A(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.T().setGraph(g.graph()); + forEach/* default */.A(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.A(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.T({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.A(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.A(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.A(range/* default */.A(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.A(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.A(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.A(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.A(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.A(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.A(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.A(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.A(layers, function (vs, i) { + if (isUndefined/* default */.A(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.A(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.A(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.A(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.A(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.A(children, dfs); + } + + if (has/* default */.A(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.A(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.A(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.A(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.A(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.A(edge.points, reverseYOne); + if (has/* default */.A(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.A(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.A(edge.points, swapXYOne); + if (has/* default */.A(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.A(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.A(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.A)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.A(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.A(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.A(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.T({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.A(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.A(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.A(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(38446); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(27422); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.A)(collection)) { + var iteratee = (0,_baseIteratee/* default */.A)(predicate, 3); + collection = (0,keys/* default */.A)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(25707); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(74342); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.A)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.A)(array, (0,_baseIteratee/* default */.A)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(11662); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.A(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.A(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(69471); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(9779); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(88496); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(53098); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.A)(value) && (0,isObjectLike/* default */.A)(value) && (0,_baseGetTag/* default */.A)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(70805); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.A)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.A)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.A)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.A)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.A(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.A(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.A(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.A(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.A(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.A(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.A(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.A(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(73046); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.A(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.A(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.A(tree.neighbors(v), function (w) { + if (!has/* default */.A(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.A(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.A(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(38207); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(89463); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.A(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.A(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.A(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.A(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.A(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.A(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.A( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(91641); +;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.A)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.A(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.T({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.A(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.A(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.A(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.A(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.A('_root')))); + return v; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(52851); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.A); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(13588); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(45572); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(66318); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(52568); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(52789); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.A)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.A)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.A)(iteratees, function(iteratee) { + if ((0,isArray/* default */.A)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.A)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.A]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.A)(iteratees, (0,_baseUnary/* default */.A)(_baseIteratee/* default */.A)); + + var result = (0,_baseMap/* default */.A)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.A)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(24326); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(6832); +;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.A)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.A)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.A)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.A)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.A(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.A( + map/* default */.A(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.A(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.A(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.A( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.A(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.A(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.A(range/* default */.A(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.A(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.A(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.A(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.A(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.A( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.A(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.A(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.A(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.A(entryV) && !isUndefined/* default */.A(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.A(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.A(uEntry.barycenter) || + isUndefined/* default */.A(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.A(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.A(entry.out, handleOut(entry)); + } + + return map/* default */.A( + filter/* default */.A(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.A(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.A(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.A(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.A(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.A(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.A(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.A(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.A([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.A(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.A(entries, function (entry) { + entry.vs = flatten/* default */.A( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.A(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.A(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.A(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.A(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.T(); + forEach/* default */.A(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.A(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.A(layering, function (layer) { + forEach/* default */.A(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.A(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.A(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.A(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(99922); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.A)(object, (0,_castFunction/* default */.A)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(4574); +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(77996); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.A)(object, (0,_castFunction/* default */.A)(iteratee), keysIn/* default */.A); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.A(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.A(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.A(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.A(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.A(range/* default */.A(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.A(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.A(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.A(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.A(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.A(layering, function (layer) { + forEach/* default */.A(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.A(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.A(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.A(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.T(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.A(layering, function (layer) { + var u; + forEach/* default */.A(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.A(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.A(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.A(['u', 'd'], function (vert) { + forEach/* default */.A(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.A(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.A(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = merge/* default */.A(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.A(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.A(layering).reverse(); + forEach/* default */.A(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.A(adjustedLayering, function (inner) { + return values/* default */.A(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.A(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.A(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.A(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.A(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.A(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.A(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.A(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.A(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.T({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + merge/* default */.A({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.A(graph, graphAttrs)) + ); + + forEach/* default */.A(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.A(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.A(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + merge/* default */.A({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.A(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.A(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.A(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.A(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.A(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.A(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.A(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.A(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.A(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.A(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.A(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.A(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.A(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.A(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.A(layers, function (layer) { + var orderShift = 0; + forEach/* default */.A(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.A(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.A(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.A(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.A(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 73046: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + T: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(48585); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(39142); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(89610); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(27422); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(11662); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(66401); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(8058); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(69592); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(13588); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(24326); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(62062); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(25707); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.A)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(64099); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(39857); +;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(29959); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.A && (1 / (0,_setToArray/* default */.A)(new _Set/* default */.A([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.A(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.A)(set); + } + isCommon = false; + includes = _cacheHas/* default */.A; + seen = new _SetCache/* default */.A; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(53533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.A)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.A)(arrays, 1, isArrayLikeObject/* default */.A, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(38207); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(89463); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.A(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.A(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.A(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.A(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.A(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.A(newDefault)) { + newDefault = constant/* default */.A(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.A(this._nodes); + } + sources() { + var self = this; + return filter/* default */.A(this.nodes(), function (v) { + return isEmpty/* default */.A(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.A(this.nodes(), function (v) { + return isEmpty/* default */.A(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.A(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.A(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.A(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.A(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.A(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.A(keys/* default */.A(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.A(keys/* default */.A(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.A(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.A(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.A(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.A(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.A(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.A(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.A(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.A(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.A(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.A(newDefault)) { + newDefault = constant/* default */.A(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.A(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.A(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.A(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.A(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.A(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.A(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.A(inV); + if (!u) { + return edges; + } + return filter/* default */.A(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.A(outV); + if (!w) { + return edges; + } + return filter/* default */.A(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.A(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 697: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ T: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.T) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73046); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 14075: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ M: () => (/* binding */ write) +/* harmony export */ }); +/* unused harmony export read */ +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(69592); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(50053); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74722); +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73046); + + + + + +function write(g) { + var json = { + options: { + directed: g.isDirected(), + multigraph: g.isMultigraph(), + compound: g.isCompound(), + }, + nodes: writeNodes(g), + edges: writeEdges(g), + }; + if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(g.graph())) { + json.value = lodash_es__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A(g.graph()); + } + return json; +} + +function writeNodes(g) { + return lodash_es__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A(g.nodes(), function (v) { + var nodeValue = g.node(v); + var parent = g.parent(v); + var node = { v: v }; + if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(nodeValue)) { + node.value = nodeValue; + } + if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(parent)) { + node.parent = parent; + } + return node; + }); +} + +function writeEdges(g) { + return lodash_es__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A(g.edges(), function (e) { + var edgeValue = g.edge(e); + var edge = { v: e.v, w: e.w }; + if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(e.name)) { + edge.name = e.name; + } + if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(edgeValue)) { + edge.value = edgeValue; + } + return edge; + }); +} + +function read(json) { + var g = new Graph(json.options).setGraph(json.value); + _.each(json.nodes, function (entry) { + g.setNode(entry.v, entry.value); + if (entry.parent) { + g.setParent(entry.v, entry.parent); + } + }); + _.each(json.edges, function (entry) { + g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value); + }); + return g; +} + + +/***/ }), + +/***/ 75937: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _utils_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72453); +/* harmony import */ var _color_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74886); +/* IMPORT */ + + +/* MAIN */ +const channel = (color, channel) => { + return _utils_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.lang.round(_color_index_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A.parse(color)[channel]); +}; +/* EXPORT */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (channel); + + +/***/ }), + +/***/ 62062: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(29471); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.A; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 72641: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 2634: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 45572: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 76912: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 91641: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(11754); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(72641); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(52851); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(22031); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(27422); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.A)(source, (0,keys/* default */.A)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(77996); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.A)(source, (0,keysIn/* default */.A)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(80154); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(39759); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(14792); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.A)(source, (0,_getSymbols/* default */.A)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(76912); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(15647); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(13153); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.A : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.A)(result, (0,_getSymbols/* default */.A)(object)); + object = (0,_getPrototype/* default */.A)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.A)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(19042); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(33831); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.A)(object, keysIn/* default */.A, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(9779); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(90565); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.A)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(241); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(1801); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.A)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.A)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(18598); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(99912); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(53098); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.A)(value) && (0,_getTag/* default */.A)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(52789); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(64841); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.A && _nodeUtil/* default */.A.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.A)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(23149); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.A)(value) && (0,_getTag/* default */.A)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.A && _nodeUtil/* default */.A.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.A)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.A)(value)) { + return value; + } + var isArr = (0,isArray/* default */.A)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.A)(value, result); + } + } else { + var tag = (0,_getTag/* default */.A)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.A)(value)) { + return (0,_cloneBuffer/* default */.A)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.A)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.A); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.A) + : (isFlat ? keysIn/* default */.A : keys/* default */.A); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.A)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.A)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 6240: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(79841); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(38446); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.A)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.A); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 25707: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 13588: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(76912); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(241); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(52274); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.A ? _Symbol/* default */.A.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.A)(value) || (0,isArguments/* default */.A)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.A)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 79841: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4574); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27422); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 66318: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30901); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 33831: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76912); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 49574: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(11754); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(62062); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(64099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.A : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.A)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(241); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(43988); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(66984); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(29959); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.A(object), new _Uint8Array/* default */.A(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.A)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.A); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(19042); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.A)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.A)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(9779); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(99912); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(33858); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.A)(object), + othIsArr = (0,isArray/* default */.A)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.A)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.A)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.A)(object)) { + if (!(0,isBuffer/* default */.A)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.A); + return (objIsArr || (0,isTypedArray/* default */.A)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.A); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.A); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(53098); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.A)(value) && !(0,isObjectLike/* default */.A)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.A; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(23149); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.A)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(27422); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.A)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(66318); +;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.A)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(39188); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(86586); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(30901); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.A)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.A)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.A)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(29008); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(70805); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.A)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.A)(path) ? (0,_baseProperty/* default */.A)((0,_toKey/* default */.A)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.A; + } + if (typeof value == 'object') { + return (0,isArray/* default */.A)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 52568: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6240); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38446); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 70805: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 64099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 99922: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(29008); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 7819: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(86586); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(46632); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.A)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(28894); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.A)(value)) { + return value; + } + return (0,_isKey/* default */.A)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.A)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 19042: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33831); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(14792); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27422); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 14792: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2634); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13153); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 85054: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(52274); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(92049); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(25353); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5254); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30901); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 86586: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(61882); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 29959: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 30901: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61882); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 50053: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseClone_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(91641); + + +/** Used to compose bitmasks for cloning. */ +var CLONE_SYMBOLS_FLAG = 4; + +/** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ +function clone(value) { + return (0,_baseClone_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value, CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (clone); + + +/***/ }), + +/***/ 23068: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(24326); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(66984); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6832); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(77996); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 11662: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(2634); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(6240); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.A)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(49574); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.A)(collection) ? _arrayFilter/* default */.A : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.A)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 34098: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13588); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 8058: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72641); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6240); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99922); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 48585: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(85054); +;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.A)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 39188: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(85054); +;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.A)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 61882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88496); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(53098); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 69592: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 27422: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(83607); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(69471); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38446); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 74722: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(45572); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(49574); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(52568); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 81942: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(66318); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(52851); +// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(7819); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(25353); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(23149); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(30901); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.A)(object)) { + return object; + } + path = (0,_castPath/* default */.A)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.A)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.A)(objValue) + ? objValue + : ((0,_isIndex/* default */.A)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.A)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.A)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.A)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(39188); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.A)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(34098); +// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(76875); +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(67525); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.A)((0,_overRest/* default */.A)(func, undefined, flatten/* default */.A), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 91395: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(6832); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(74342); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.A)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.A)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.A)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.A)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 89463: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(6240); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(49574); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.A)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.A)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.A); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 13153: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 74342: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(23149); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(61882); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.A)(value)) { + return NAN; + } + if ((0,isObject/* default */.A)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.A)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 28894: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(241); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(45572); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(92049); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(61882); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.A)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.A)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.A)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 5664: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(28894); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 38207: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(45572); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.A)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(27422); +;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.A)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 18897: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + a: () => (/* binding */ createText), + c: () => (/* binding */ computeDimensionOfText) +}); + +// NAMESPACE OBJECT: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js +var constructs_namespaceObject = {}; +__webpack_require__.r(constructs_namespaceObject); +__webpack_require__.d(constructs_namespaceObject, { + attentionMarkers: () => (attentionMarkers), + contentInitial: () => (contentInitial), + disable: () => (disable), + document: () => (constructs_document), + flow: () => (constructs_flow), + flowInitial: () => (flowInitial), + insideSpan: () => (insideSpan), + string: () => (constructs_string), + text: () => (constructs_text) +}); + +// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-6dc72991.js + 8 modules +var mermaid_6dc72991 = __webpack_require__(99702); +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-to-string/lib/index.js +/** + * @typedef {import('mdast').Root|import('mdast').Content} Node + * + * @typedef Options + * Configuration (optional). + * @property {boolean | null | undefined} [includeImageAlt=true] + * Whether to use `alt` for `image`s. + * @property {boolean | null | undefined} [includeHtml=true] + * Whether to use `value` of HTML. + */ + +/** @type {Options} */ +const emptyOptions = {} + +/** + * Get the text content of a node or list of nodes. + * + * Prefers the node’s plain-text fields, otherwise serializes its children, + * and if the given value is an array, serialize the nodes in it. + * + * @param {unknown} value + * Thing to serialize, typically `Node`. + * @param {Options | null | undefined} [options] + * Configuration (optional). + * @returns {string} + * Serialized `value`. + */ +function lib_toString(value, options) { + const settings = options || emptyOptions + const includeImageAlt = + typeof settings.includeImageAlt === 'boolean' + ? settings.includeImageAlt + : true + const includeHtml = + typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true + + return one(value, includeImageAlt, includeHtml) +} + +/** + * One node or several nodes. + * + * @param {unknown} value + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized node. + */ +function one(value, includeImageAlt, includeHtml) { + if (node(value)) { + if ('value' in value) { + return value.type === 'html' && !includeHtml ? '' : value.value + } + + if (includeImageAlt && 'alt' in value && value.alt) { + return value.alt + } + + if ('children' in value) { + return lib_all(value.children, includeImageAlt, includeHtml) + } + } + + if (Array.isArray(value)) { + return lib_all(value, includeImageAlt, includeHtml) + } + + return '' +} + +/** + * Serialize a list of nodes. + * + * @param {Array} values + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized nodes. + */ +function lib_all(values, includeImageAlt, includeHtml) { + /** @type {Array} */ + const result = [] + let index = -1 + + while (++index < values.length) { + result[index] = one(values[index], includeImageAlt, includeHtml) + } + + return result.join('') +} + +/** + * Check if `value` looks like a node. + * + * @param {unknown} value + * Thing. + * @returns {value is Node} + * Whether `value` is a node. + */ +function node(value) { + return Boolean(value && typeof value === 'object') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-chunked/index.js +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array} */ + let parameters + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start + } else { + start = start > end ? end : start + } + remove = remove > 0 ? remove : 0 + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < 10000) { + parameters = Array.from(items) + parameters.unshift(start, remove) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove) + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000) + parameters.unshift(start, 0) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + chunkStart += 10000 + start += 10000 + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array} list + * List to operate on. + * @param {Array} items + * Items to add to `list`. + * @returns {Array} + * Either `list` or `items`. + */ +function push(list, items) { + if (list.length > 0) { + splice(list, list.length, 0, items) + return list + } + return items +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-combine-extensions/index.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + * @typedef {import('micromark-util-types').Handles} Handles + * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension + * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension + */ + + + +const micromark_util_combine_extensions_hasOwnProperty = {}.hasOwnProperty + +/** + * Combine multiple syntax extensions into one. + * + * @param {Array} extensions + * List of syntax extensions. + * @returns {NormalizedExtension} + * A single combined extension. + */ +function combineExtensions(extensions) { + /** @type {NormalizedExtension} */ + const all = {} + let index = -1 + + while (++index < extensions.length) { + syntaxExtension(all, extensions[index]) + } + + return all +} + +/** + * Merge `extension` into `all`. + * + * @param {NormalizedExtension} all + * Extension to merge into. + * @param {Extension} extension + * Extension to merge. + * @returns {void} + */ +function syntaxExtension(all, extension) { + /** @type {keyof Extension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + /** @type {Record} */ + const left = maybe || (all[hook] = {}) + /** @type {Record | undefined} */ + const right = extension[hook] + /** @type {string} */ + let code + + if (right) { + for (code in right) { + if (!micromark_util_combine_extensions_hasOwnProperty.call(left, code)) left[code] = [] + const value = right[code] + constructs( + // @ts-expect-error Looks like a list. + left[code], + Array.isArray(value) ? value : value ? [value] : [] + ) + } + } + } +} + +/** + * Merge `list` into `existing` (both lists of constructs). + * Mutates `existing`. + * + * @param {Array} existing + * @param {Array} list + * @returns {void} + */ +function constructs(existing, list) { + let index = -1 + /** @type {Array} */ + const before = [] + + while (++index < list.length) { + // @ts-expect-error Looks like an object. + ;(list[index].add === 'after' ? existing : before).push(list[index]) + } + + splice(existing, 0, 0, before) +} + +/** + * Combine multiple HTML extensions into one. + * + * @param {Array} htmlExtensions + * List of HTML extensions. + * @returns {HtmlExtension} + * A single combined HTML extension. + */ +function combineHtmlExtensions(htmlExtensions) { + /** @type {HtmlExtension} */ + const handlers = {} + let index = -1 + + while (++index < htmlExtensions.length) { + htmlExtension(handlers, htmlExtensions[index]) + } + + return handlers +} + +/** + * Merge `extension` into `all`. + * + * @param {HtmlExtension} all + * Extension to merge into. + * @param {HtmlExtension} extension + * Extension to merge. + * @returns {void} + */ +function htmlExtension(all, extension) { + /** @type {keyof HtmlExtension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + const left = maybe || (all[hook] = {}) + const right = extension[hook] + /** @type {keyof Handles} */ + let type + + if (right) { + for (type in right) { + // @ts-expect-error assume document vs regular handler are managed correctly. + left[type] = right[type] + } + } + } +} + +;// CONCATENATED MODULE: ./node_modules/micromark-util-character/lib/unicode-punctuation-regex.js +// This module is generated by `script/`. +// +// CommonMark handles attention (emphasis, strong) markers based on what comes +// before or after them. +// One such difference is if those characters are Unicode punctuation. +// This script is generated from the Unicode data. + +/** + * Regular expression that matches a unicode punctuation character. + */ +const unicodePunctuationRegex = + /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/ + +;// CONCATENATED MODULE: ./node_modules/micromark-util-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + + +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlpha = regexCheck(/[A-Za-z]/) + +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) + +/** + * Check whether the character code represents an ASCII atext. + * + * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in + * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), + * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F + * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E + * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE + * (`{`) to U+007E TILDE (`~`). + * + * See: + * **\[RFC5322]**: + * [Internet Message Format](https://tools.ietf.org/html/rfc5322). + * P. Resnick. + * IETF. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) + +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function asciiControl(code) { + return ( + // Special whitespace codes (which have negative values), C0 and Control + // character DEL + code !== null && (code < 32 || code === 127) + ) +} + +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiDigit = regexCheck(/\d/) + +/** + * Check whether the character code represents an ASCII hex digit (`a` through + * `f`, case insensitive, or `0` through `9`). + * + * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex + * digit, or an ASCII lower hex digit. + * + * An **ASCII upper hex digit** is a character in the inclusive range U+0041 + * (`A`) to U+0046 (`F`). + * + * An **ASCII lower hex digit** is a character in the inclusive range U+0061 + * (`a`) to U+0066 (`f`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) + +/** + * Check whether the character code represents ASCII punctuation. + * + * An **ASCII punctuation** is a character in the inclusive ranges U+0021 + * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT + * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT + * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) + +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEnding(code) { + return code !== null && code < -2 +} + +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEndingOrSpace(code) { + return code !== null && (code < 0 || code === 32) +} + +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownSpace(code) { + return code === -2 || code === -1 || code === 32 +} + +// Size note: removing ASCII from the regex and using `asciiPunctuation` here +// In fact adds to the bundle size. +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodePunctuation = regexCheck(unicodePunctuationRegex) + +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodeWhitespace = regexCheck(/\s/) + +/** + * Create a code check from a regex. + * + * @param {RegExp} regex + * @returns {(code: Code) => boolean} + */ +function regexCheck(regex) { + return check + + /** + * Check whether a code matches the bound regex. + * + * @param {Code} code + * Character code. + * @returns {boolean} + * Whether the character code matches the bound regex. + */ + function check(code) { + return code !== null && regex.test(String.fromCharCode(code)) + } +} + +;// CONCATENATED MODULE: ./node_modules/micromark-factory-space/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * spaces in markdown are often optional, in which case this factory can be + * used and `ok` will be switched to whether spaces were found or not + * * one line ending or space can be detected with `markdownSpace(code)` right + * before using `factorySpace` + * + * ###### Examples + * + * Where `␉` represents a tab (plus how much it expands) and `␠` represents a + * single space. + * + * ```markdown + * ␉ + * ␠␠␠␠ + * ␉␠ + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {TokenType} type + * Type (`' \t'`). + * @param {number | undefined} [max=Infinity] + * Max (exclusive). + * @returns + * Start state. + */ +function factorySpace(effects, ok, type, max) { + const limit = max ? max - 1 : Number.POSITIVE_INFINITY + let size = 0 + return start + + /** @type {State} */ + function start(code) { + if (markdownSpace(code)) { + effects.enter(type) + return prefix(code) + } + return ok(code) + } + + /** @type {State} */ + function prefix(code) { + if (markdownSpace(code) && size++ < limit) { + effects.consume(code) + return prefix + } + effects.exit(type) + return ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/content.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + +/** @type {InitialConstruct} */ +const content = { + tokenize: initializeContent +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeContent(effects) { + const contentStart = effects.attempt( + this.parser.constructs.contentInitial, + afterContentStartConstruct, + paragraphInitial + ) + /** @type {Token} */ + let previous + return contentStart + + /** @type {State} */ + function afterContentStartConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, contentStart, 'linePrefix') + } + + /** @type {State} */ + function paragraphInitial(code) { + effects.enter('paragraph') + return lineStart(code) + } + + /** @type {State} */ + function lineStart(code) { + const token = effects.enter('chunkText', { + contentType: 'text', + previous + }) + if (previous) { + previous.next = token + } + previous = token + return data(code) + } + + /** @type {State} */ + function data(code) { + if (code === null) { + effects.exit('chunkText') + effects.exit('paragraph') + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + effects.exit('chunkText') + return lineStart + } + + // Data. + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/document.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + +/** + * @typedef {[Construct, ContainerState]} StackItem + */ + + + + +/** @type {InitialConstruct} */ +const document_document = { + tokenize: initializeDocument +} + +/** @type {Construct} */ +const containerConstruct = { + tokenize: tokenizeContainer +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeDocument(effects) { + const self = this + /** @type {Array} */ + const stack = [] + let continued = 0 + /** @type {TokenizeContext | undefined} */ + let childFlow + /** @type {Token | undefined} */ + let childToken + /** @type {number} */ + let lineStartOffset + return start + + /** @type {State} */ + function start(code) { + // First we iterate through the open blocks, starting with the root + // document, and descending through last children down to the last open + // block. + // Each block imposes a condition that the line must satisfy if the block is + // to remain open. + // For example, a block quote requires a `>` character. + // A paragraph requires a non-blank line. + // In this phase we may match all or just some of the open blocks. + // But we cannot close unmatched blocks yet, because we may have a lazy + // continuation line. + if (continued < stack.length) { + const item = stack[continued] + self.containerState = item[1] + return effects.attempt( + item[0].continuation, + documentContinue, + checkNewContainers + )(code) + } + + // Done. + return checkNewContainers(code) + } + + /** @type {State} */ + function documentContinue(code) { + continued++ + + // Note: this field is called `_closeFlow` but it also closes containers. + // Perhaps a good idea to rename it but it’s already used in the wild by + // extensions. + if (self.containerState._closeFlow) { + self.containerState._closeFlow = undefined + if (childFlow) { + closeFlow() + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when dealing with lazy lines in `writeToChild`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {Point | undefined} */ + let point + + // Find the flow chunk. + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + point = self.events[indexBeforeFlow][1].end + break + } + } + exitContainers(continued) + + // Fix positions. + let index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + return checkNewContainers(code) + } + return start(code) + } + + /** @type {State} */ + function checkNewContainers(code) { + // Next, after consuming the continuation markers for existing blocks, we + // look for new block starts (e.g. `>` for a block quote). + // If we encounter a new block start, we close any blocks unmatched in + // step 1 before creating the new block as a child of the last matched + // block. + if (continued === stack.length) { + // No need to `check` whether there’s a container, of `exitContainers` + // would be moot. + // We can instead immediately `attempt` to parse one. + if (!childFlow) { + return documentContinued(code) + } + + // If we have concrete content, such as block HTML or fenced code, + // we can’t have containers “pierce” into them, so we can immediately + // start. + if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { + return flowStart(code) + } + + // If we do have flow, it could still be a blank line, + // but we’d be interrupting it w/ a new container if there’s a current + // construct. + // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer + // needed in micromark-extension-gfm-table@1.0.6). + self.interrupt = Boolean( + childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack + ) + } + + // Check if there is a new container. + self.containerState = {} + return effects.check( + containerConstruct, + thereIsANewContainer, + thereIsNoNewContainer + )(code) + } + + /** @type {State} */ + function thereIsANewContainer(code) { + if (childFlow) closeFlow() + exitContainers(continued) + return documentContinued(code) + } + + /** @type {State} */ + function thereIsNoNewContainer(code) { + self.parser.lazy[self.now().line] = continued !== stack.length + lineStartOffset = self.now().offset + return flowStart(code) + } + + /** @type {State} */ + function documentContinued(code) { + // Try new containers. + self.containerState = {} + return effects.attempt( + containerConstruct, + containerContinue, + flowStart + )(code) + } + + /** @type {State} */ + function containerContinue(code) { + continued++ + stack.push([self.currentConstruct, self.containerState]) + // Try another. + return documentContinued(code) + } + + /** @type {State} */ + function flowStart(code) { + if (code === null) { + if (childFlow) closeFlow() + exitContainers(0) + effects.consume(code) + return + } + childFlow = childFlow || self.parser.flow(self.now()) + effects.enter('chunkFlow', { + contentType: 'flow', + previous: childToken, + _tokenizer: childFlow + }) + return flowContinue(code) + } + + /** @type {State} */ + function flowContinue(code) { + if (code === null) { + writeToChild(effects.exit('chunkFlow'), true) + exitContainers(0) + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + writeToChild(effects.exit('chunkFlow')) + // Get ready for the next line. + continued = 0 + self.interrupt = undefined + return start + } + effects.consume(code) + return flowContinue + } + + /** + * @param {Token} token + * @param {boolean | undefined} [eof] + * @returns {void} + */ + function writeToChild(token, eof) { + const stream = self.sliceStream(token) + if (eof) stream.push(null) + token.previous = childToken + if (childToken) childToken.next = token + childToken = token + childFlow.defineSkip(token.start) + childFlow.write(stream) + + // Alright, so we just added a lazy line: + // + // ```markdown + // > a + // b. + // + // Or: + // + // > ~~~c + // d + // + // Or: + // + // > | e | + // f + // ``` + // + // The construct in the second example (fenced code) does not accept lazy + // lines, so it marked itself as done at the end of its first line, and + // then the content construct parses `d`. + // Most constructs in markdown match on the first line: if the first line + // forms a construct, a non-lazy line can’t “unmake” it. + // + // The construct in the third example is potentially a GFM table, and + // those are *weird*. + // It *could* be a table, from the first line, if the following line + // matches a condition. + // In this case, that second line is lazy, which “unmakes” the first line + // and turns the whole into one content block. + // + // We’ve now parsed the non-lazy and the lazy line, and can figure out + // whether the lazy line started a new flow block. + // If it did, we exit the current containers between the two flow blocks. + if (self.parser.lazy[token.start.line]) { + let index = childFlow.events.length + while (index--) { + if ( + // The token starts before the line ending… + childFlow.events[index][1].start.offset < lineStartOffset && + // …and either is not ended yet… + (!childFlow.events[index][1].end || + // …or ends after it. + childFlow.events[index][1].end.offset > lineStartOffset) + ) { + // Exit: there’s still something open, which means it’s a lazy line + // part of something. + return + } + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when closing flow in `documentContinue`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {boolean | undefined} */ + let seen + /** @type {Point | undefined} */ + let point + + // Find the previous chunk (the one before the lazy line). + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + if (seen) { + point = self.events[indexBeforeFlow][1].end + break + } + seen = true + } + } + exitContainers(continued) + + // Fix positions. + index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + } + } + + /** + * @param {number} size + * @returns {void} + */ + function exitContainers(size) { + let index = stack.length + + // Exit open containers. + while (index-- > size) { + const entry = stack[index] + self.containerState = entry[1] + entry[0].exit.call(self, effects) + } + stack.length = size + } + function closeFlow() { + childFlow.write([null]) + childToken = undefined + childFlow = undefined + self.containerState._closeFlow = undefined + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContainer(effects, ok, nok) { + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(this.parser.constructs.document, ok, nok), + 'linePrefix', + this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + ) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/blank-line.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blankLine = { + tokenize: tokenizeBlankLine, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLine(effects, ok, nok) { + return start + + /** + * Start of blank line. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + return markdownSpace(code) + ? factorySpace(effects, after, 'linePrefix')(code) + : after(code) + } + + /** + * At eof/eol, after optional whitespace. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-subtokenize/index.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Token} Token + */ + + +/** + * Tokenize subcontent. + * + * @param {Array} events + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +function subtokenize(events) { + /** @type {Record} */ + const jumps = {} + let index = -1 + /** @type {Event} */ + let event + /** @type {number | undefined} */ + let lineIndex + /** @type {number} */ + let otherIndex + /** @type {Event} */ + let otherEvent + /** @type {Array} */ + let parameters + /** @type {Array} */ + let subevents + /** @type {boolean | undefined} */ + let more + while (++index < events.length) { + while (index in jumps) { + index = jumps[index] + } + event = events[index] + + // Add a hook for the GFM tasklist extension, which needs to know if text + // is in the first content of a list item. + if ( + index && + event[1].type === 'chunkFlow' && + events[index - 1][1].type === 'listItemPrefix' + ) { + subevents = event[1]._tokenizer.events + otherIndex = 0 + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'lineEndingBlank' + ) { + otherIndex += 2 + } + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'content' + ) { + while (++otherIndex < subevents.length) { + if (subevents[otherIndex][1].type === 'content') { + break + } + if (subevents[otherIndex][1].type === 'chunkText') { + subevents[otherIndex][1]._isInFirstContentOfListItem = true + otherIndex++ + } + } + } + } + + // Enter. + if (event[0] === 'enter') { + if (event[1].contentType) { + Object.assign(jumps, subcontent(events, index)) + index = jumps[index] + more = true + } + } + // Exit. + else if (event[1]._container) { + otherIndex = index + lineIndex = undefined + while (otherIndex--) { + otherEvent = events[otherIndex] + if ( + otherEvent[1].type === 'lineEnding' || + otherEvent[1].type === 'lineEndingBlank' + ) { + if (otherEvent[0] === 'enter') { + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + } + otherEvent[1].type = 'lineEnding' + lineIndex = otherIndex + } + } else { + break + } + } + if (lineIndex) { + // Fix position. + event[1].end = Object.assign({}, events[lineIndex][1].start) + + // Switch container exit w/ line endings. + parameters = events.slice(lineIndex, index) + parameters.unshift(event) + splice(events, lineIndex, index - lineIndex + 1, parameters) + } + } + } + return !more +} + +/** + * Tokenize embedded tokens. + * + * @param {Array} events + * @param {number} eventIndex + * @returns {Record} + */ +function subcontent(events, eventIndex) { + const token = events[eventIndex][1] + const context = events[eventIndex][2] + let startPosition = eventIndex - 1 + /** @type {Array} */ + const startPositions = [] + const tokenizer = + token._tokenizer || context.parser[token.contentType](token.start) + const childEvents = tokenizer.events + /** @type {Array<[number, number]>} */ + const jumps = [] + /** @type {Record} */ + const gaps = {} + /** @type {Array} */ + let stream + /** @type {Token | undefined} */ + let previous + let index = -1 + /** @type {Token | undefined} */ + let current = token + let adjust = 0 + let start = 0 + const breaks = [start] + + // Loop forward through the linked tokens to pass them in order to the + // subtokenizer. + while (current) { + // Find the position of the event for this token. + while (events[++startPosition][1] !== current) { + // Empty. + } + startPositions.push(startPosition) + if (!current._tokenizer) { + stream = context.sliceStream(current) + if (!current.next) { + stream.push(null) + } + if (previous) { + tokenizer.defineSkip(current.start) + } + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = true + } + tokenizer.write(stream) + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = undefined + } + } + + // Unravel the next token. + previous = current + current = current.next + } + + // Now, loop back through all events (and linked tokens), to figure out which + // parts belong where. + current = token + while (++index < childEvents.length) { + if ( + // Find a void token that includes a break. + childEvents[index][0] === 'exit' && + childEvents[index - 1][0] === 'enter' && + childEvents[index][1].type === childEvents[index - 1][1].type && + childEvents[index][1].start.line !== childEvents[index][1].end.line + ) { + start = index + 1 + breaks.push(start) + // Help GC. + current._tokenizer = undefined + current.previous = undefined + current = current.next + } + } + + // Help GC. + tokenizer.events = [] + + // If there’s one more token (which is the cases for lines that end in an + // EOF), that’s perfect: the last point we found starts it. + // If there isn’t then make sure any remaining content is added to it. + if (current) { + // Help GC. + current._tokenizer = undefined + current.previous = undefined + } else { + breaks.pop() + } + + // Now splice the events from the subtokenizer into the current events, + // moving back to front so that splice indices aren’t affected. + index = breaks.length + while (index--) { + const slice = childEvents.slice(breaks[index], breaks[index + 1]) + const start = startPositions.pop() + jumps.unshift([start, start + slice.length - 1]) + splice(events, start, 2, slice) + } + index = -1 + while (++index < jumps.length) { + gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] + adjust += jumps[index][1] - jumps[index][0] - 1 + } + return gaps +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/content.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** + * No name because it must not be turned off. + * @type {Construct} + */ +const content_content = { + tokenize: tokenizeContent, + resolve: resolveContent +} + +/** @type {Construct} */ +const continuationConstruct = { + tokenize: tokenizeContinuation, + partial: true +} + +/** + * Content is transparent: it’s parsed right now. That way, definitions are also + * parsed right now: before text in paragraphs (specifically, media) are parsed. + * + * @type {Resolver} + */ +function resolveContent(events) { + subtokenize(events) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContent(effects, ok) { + /** @type {Token | undefined} */ + let previous + return chunkStart + + /** + * Before a content chunk. + * + * ```markdown + * > | abc + * ^ + * ``` + * + * @type {State} + */ + function chunkStart(code) { + effects.enter('content') + previous = effects.enter('chunkContent', { + contentType: 'content' + }) + return chunkInside(code) + } + + /** + * In a content chunk. + * + * ```markdown + * > | abc + * ^^^ + * ``` + * + * @type {State} + */ + function chunkInside(code) { + if (code === null) { + return contentEnd(code) + } + + // To do: in `markdown-rs`, each line is parsed on its own, and everything + // is stitched together resolving. + if (markdownLineEnding(code)) { + return effects.check( + continuationConstruct, + contentContinue, + contentEnd + )(code) + } + + // Data. + effects.consume(code) + return chunkInside + } + + /** + * + * + * @type {State} + */ + function contentEnd(code) { + effects.exit('chunkContent') + effects.exit('content') + return ok(code) + } + + /** + * + * + * @type {State} + */ + function contentContinue(code) { + effects.consume(code) + effects.exit('chunkContent') + previous.next = effects.enter('chunkContent', { + contentType: 'content', + previous + }) + previous = previous.next + return chunkInside + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContinuation(effects, ok, nok) { + const self = this + return startLookahead + + /** + * + * + * @type {State} + */ + function startLookahead(code) { + effects.exit('chunkContent') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, prefixed, 'linePrefix') + } + + /** + * + * + * @type {State} + */ + function prefixed(code) { + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + + // Always populated by defaults. + + const tail = self.events[self.events.length - 1] + if ( + !self.parser.constructs.disable.null.includes('codeIndented') && + tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ) { + return ok(code) + } + return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/flow.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + + +/** @type {InitialConstruct} */ +const flow = { + tokenize: initializeFlow +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeFlow(effects) { + const self = this + const initial = effects.attempt( + // Try to parse a blank line. + blankLine, + atBlankEnding, + // Try to parse initial flow (essentially, only code). + effects.attempt( + this.parser.constructs.flowInitial, + afterConstruct, + factorySpace( + effects, + effects.attempt( + this.parser.constructs.flow, + afterConstruct, + effects.attempt(content_content, afterConstruct) + ), + 'linePrefix' + ) + ) + ) + return initial + + /** @type {State} */ + function atBlankEnding(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEndingBlank') + effects.consume(code) + effects.exit('lineEndingBlank') + self.currentConstruct = undefined + return initial + } + + /** @type {State} */ + function afterConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + self.currentConstruct = undefined + return initial + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +const resolver = { + resolveAll: createResolver() +} +const string = initializeFactory('string') +const text_text = initializeFactory('text') + +/** + * @param {'string' | 'text'} field + * @returns {InitialConstruct} + */ +function initializeFactory(field) { + return { + tokenize: initializeText, + resolveAll: createResolver( + field === 'text' ? resolveAllLineSuffixes : undefined + ) + } + + /** + * @this {TokenizeContext} + * @type {Initializer} + */ + function initializeText(effects) { + const self = this + const constructs = this.parser.constructs[field] + const text = effects.attempt(constructs, start, notText) + return start + + /** @type {State} */ + function start(code) { + return atBreak(code) ? text(code) : notText(code) + } + + /** @type {State} */ + function notText(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('data') + effects.consume(code) + return data + } + + /** @type {State} */ + function data(code) { + if (atBreak(code)) { + effects.exit('data') + return text(code) + } + + // Data. + effects.consume(code) + return data + } + + /** + * @param {Code} code + * @returns {boolean} + */ + function atBreak(code) { + if (code === null) { + return true + } + const list = constructs[code] + let index = -1 + if (list) { + // Always populated by defaults. + + while (++index < list.length) { + const item = list[index] + if (!item.previous || item.previous.call(self, self.previous)) { + return true + } + } + } + return false + } + } +} + +/** + * @param {Resolver | undefined} [extraResolver] + * @returns {Resolver} + */ +function createResolver(extraResolver) { + return resolveAllText + + /** @type {Resolver} */ + function resolveAllText(events, context) { + let index = -1 + /** @type {number | undefined} */ + let enter + + // A rather boring computation (to merge adjacent `data` events) which + // improves mm performance by 29%. + while (++index <= events.length) { + if (enter === undefined) { + if (events[index] && events[index][1].type === 'data') { + enter = index + index++ + } + } else if (!events[index] || events[index][1].type !== 'data') { + // Don’t do anything if there is one data token. + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + index = enter + 2 + } + enter = undefined + } + } + return extraResolver ? extraResolver(events, context) : events + } +} + +/** + * A rather ugly set of instructions which again looks at chunks in the input + * stream. + * The reason to do this here is that it is *much* faster to parse in reverse. + * And that we can’t hook into `null` to split the line suffix before an EOF. + * To do: figure out if we can make this into a clean utility, or even in core. + * As it will be useful for GFMs literal autolink extension (and maybe even + * tables?) + * + * @type {Resolver} + */ +function resolveAllLineSuffixes(events, context) { + let eventIndex = 0 // Skip first. + + while (++eventIndex <= events.length) { + if ( + (eventIndex === events.length || + events[eventIndex][1].type === 'lineEnding') && + events[eventIndex - 1][1].type === 'data' + ) { + const data = events[eventIndex - 1][1] + const chunks = context.sliceStream(data) + let index = chunks.length + let bufferIndex = -1 + let size = 0 + /** @type {boolean | undefined} */ + let tabs + while (index--) { + const chunk = chunks[index] + if (typeof chunk === 'string') { + bufferIndex = chunk.length + while (chunk.charCodeAt(bufferIndex - 1) === 32) { + size++ + bufferIndex-- + } + if (bufferIndex) break + bufferIndex = -1 + } + // Number + else if (chunk === -2) { + tabs = true + size++ + } else if (chunk === -1) { + // Empty + } else { + // Replacement character, exit. + index++ + break + } + } + if (size) { + const token = { + type: + eventIndex === events.length || tabs || size < 2 + ? 'lineSuffix' + : 'hardBreakTrailing', + start: { + line: data.end.line, + column: data.end.column - size, + offset: data.end.offset - size, + _index: data.start._index + index, + _bufferIndex: index + ? bufferIndex + : data.start._bufferIndex + bufferIndex + }, + end: Object.assign({}, data.end) + } + data.end = Object.assign({}, token.start) + if (data.start.offset === data.end.offset) { + Object.assign(data, token) + } else { + events.splice( + eventIndex, + 0, + ['enter', token, context], + ['exit', token, context] + ) + eventIndex += 2 + } + } + eventIndex++ + } + } + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-resolve-all/index.js +/** + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * Call all `resolveAll`s. + * + * @param {Array<{resolveAll?: Resolver | undefined}>} constructs + * List of constructs, optionally with `resolveAll`s. + * @param {Array} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array} + * Changed events. + */ +function resolveAll(constructs, events, context) { + /** @type {Array} */ + const called = [] + let index = -1 + + while (++index < constructs.length) { + const resolve = constructs[index].resolveAll + + if (resolve && !called.includes(resolve)) { + events = resolve(events, context) + called.push(resolve) + } + } + + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/create-tokenizer.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenType} TokenType + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * @callback Restore + * @returns {void} + * + * @typedef Info + * @property {Restore} restore + * @property {number} from + * + * @callback ReturnHandle + * Handle a successful run. + * @param {Construct} construct + * @param {Info} info + * @returns {void} + */ + + + + +/** + * Create a tokenizer. + * Tokenizers deal with one type of data (e.g., containers, flow, text). + * The parser is the object dealing with it all. + * `initialize` works like other constructs, except that only its `tokenize` + * function is used, in which case it doesn’t receive an `ok` or `nok`. + * `from` can be given to set the point before the first character, although + * when further lines are indented, they must be set with `defineSkip`. + * + * @param {ParseContext} parser + * @param {InitialConstruct} initialize + * @param {Omit | undefined} [from] + * @returns {TokenizeContext} + */ +function createTokenizer(parser, initialize, from) { + /** @type {Point} */ + let point = Object.assign( + from + ? Object.assign({}, from) + : { + line: 1, + column: 1, + offset: 0 + }, + { + _index: 0, + _bufferIndex: -1 + } + ) + /** @type {Record} */ + const columnStart = {} + /** @type {Array} */ + const resolveAllConstructs = [] + /** @type {Array} */ + let chunks = [] + /** @type {Array} */ + let stack = [] + /** @type {boolean | undefined} */ + let consumed = true + + /** + * Tools used for tokenizing. + * + * @type {Effects} + */ + const effects = { + consume, + enter, + exit, + attempt: constructFactory(onsuccessfulconstruct), + check: constructFactory(onsuccessfulcheck), + interrupt: constructFactory(onsuccessfulcheck, { + interrupt: true + }) + } + + /** + * State and tools for resolving and serializing. + * + * @type {TokenizeContext} + */ + const context = { + previous: null, + code: null, + containerState: {}, + events: [], + parser, + sliceStream, + sliceSerialize, + now, + defineSkip, + write + } + + /** + * The state function. + * + * @type {State | void} + */ + let state = initialize.tokenize.call(context, effects) + + /** + * Track which character we expect to be consumed, to catch bugs. + * + * @type {Code} + */ + let expectedCode + if (initialize.resolveAll) { + resolveAllConstructs.push(initialize) + } + return context + + /** @type {TokenizeContext['write']} */ + function write(slice) { + chunks = push(chunks, slice) + main() + + // Exit if we’re not done, resolve might change stuff. + if (chunks[chunks.length - 1] !== null) { + return [] + } + addResult(initialize, 0) + + // Otherwise, resolve, and exit. + context.events = resolveAll(resolveAllConstructs, context.events, context) + return context.events + } + + // + // Tools. + // + + /** @type {TokenizeContext['sliceSerialize']} */ + function sliceSerialize(token, expandTabs) { + return serializeChunks(sliceStream(token), expandTabs) + } + + /** @type {TokenizeContext['sliceStream']} */ + function sliceStream(token) { + return sliceChunks(chunks, token) + } + + /** @type {TokenizeContext['now']} */ + function now() { + // This is a hot path, so we clone manually instead of `Object.assign({}, point)` + const {line, column, offset, _index, _bufferIndex} = point + return { + line, + column, + offset, + _index, + _bufferIndex + } + } + + /** @type {TokenizeContext['defineSkip']} */ + function defineSkip(value) { + columnStart[value.line] = value.column + accountForPotentialSkip() + } + + // + // State management. + // + + /** + * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by + * `consume`). + * Here is where we walk through the chunks, which either include strings of + * several characters, or numerical character codes. + * The reason to do this in a loop instead of a call is so the stack can + * drain. + * + * @returns {void} + */ + function main() { + /** @type {number} */ + let chunkIndex + while (point._index < chunks.length) { + const chunk = chunks[point._index] + + // If we’re in a buffer chunk, loop through it. + if (typeof chunk === 'string') { + chunkIndex = point._index + if (point._bufferIndex < 0) { + point._bufferIndex = 0 + } + while ( + point._index === chunkIndex && + point._bufferIndex < chunk.length + ) { + go(chunk.charCodeAt(point._bufferIndex)) + } + } else { + go(chunk) + } + } + } + + /** + * Deal with one code. + * + * @param {Code} code + * @returns {void} + */ + function go(code) { + consumed = undefined + expectedCode = code + state = state(code) + } + + /** @type {Effects['consume']} */ + function consume(code) { + if (markdownLineEnding(code)) { + point.line++ + point.column = 1 + point.offset += code === -3 ? 2 : 1 + accountForPotentialSkip() + } else if (code !== -1) { + point.column++ + point.offset++ + } + + // Not in a string chunk. + if (point._bufferIndex < 0) { + point._index++ + } else { + point._bufferIndex++ + + // At end of string chunk. + // @ts-expect-error Points w/ non-negative `_bufferIndex` reference + // strings. + if (point._bufferIndex === chunks[point._index].length) { + point._bufferIndex = -1 + point._index++ + } + } + + // Expose the previous character. + context.previous = code + + // Mark as consumed. + consumed = true + } + + /** @type {Effects['enter']} */ + function enter(type, fields) { + /** @type {Token} */ + // @ts-expect-error Patch instead of assign required fields to help GC. + const token = fields || {} + token.type = type + token.start = now() + context.events.push(['enter', token, context]) + stack.push(token) + return token + } + + /** @type {Effects['exit']} */ + function exit(type) { + const token = stack.pop() + token.end = now() + context.events.push(['exit', token, context]) + return token + } + + /** + * Use results. + * + * @type {ReturnHandle} + */ + function onsuccessfulconstruct(construct, info) { + addResult(construct, info.from) + } + + /** + * Discard results. + * + * @type {ReturnHandle} + */ + function onsuccessfulcheck(_, info) { + info.restore() + } + + /** + * Factory to attempt/check/interrupt. + * + * @param {ReturnHandle} onreturn + * @param {{interrupt?: boolean | undefined} | undefined} [fields] + */ + function constructFactory(onreturn, fields) { + return hook + + /** + * Handle either an object mapping codes to constructs, a list of + * constructs, or a single construct. + * + * @param {Array | Construct | ConstructRecord} constructs + * @param {State} returnState + * @param {State | undefined} [bogusState] + * @returns {State} + */ + function hook(constructs, returnState, bogusState) { + /** @type {Array} */ + let listOfConstructs + /** @type {number} */ + let constructIndex + /** @type {Construct} */ + let currentConstruct + /** @type {Info} */ + let info + return Array.isArray(constructs) /* c8 ignore next 1 */ + ? handleListOfConstructs(constructs) + : 'tokenize' in constructs + ? // @ts-expect-error Looks like a construct. + handleListOfConstructs([constructs]) + : handleMapOfConstructs(constructs) + + /** + * Handle a list of construct. + * + * @param {ConstructRecord} map + * @returns {State} + */ + function handleMapOfConstructs(map) { + return start + + /** @type {State} */ + function start(code) { + const def = code !== null && map[code] + const all = code !== null && map.null + const list = [ + // To do: add more extension tests. + /* c8 ignore next 2 */ + ...(Array.isArray(def) ? def : def ? [def] : []), + ...(Array.isArray(all) ? all : all ? [all] : []) + ] + return handleListOfConstructs(list)(code) + } + } + + /** + * Handle a list of construct. + * + * @param {Array} list + * @returns {State} + */ + function handleListOfConstructs(list) { + listOfConstructs = list + constructIndex = 0 + if (list.length === 0) { + return bogusState + } + return handleConstruct(list[constructIndex]) + } + + /** + * Handle a single construct. + * + * @param {Construct} construct + * @returns {State} + */ + function handleConstruct(construct) { + return start + + /** @type {State} */ + function start(code) { + // To do: not needed to store if there is no bogus state, probably? + // Currently doesn’t work because `inspect` in document does a check + // w/o a bogus, which doesn’t make sense. But it does seem to help perf + // by not storing. + info = store() + currentConstruct = construct + if (!construct.partial) { + context.currentConstruct = construct + } + + // Always populated by defaults. + + if ( + construct.name && + context.parser.constructs.disable.null.includes(construct.name) + ) { + return nok(code) + } + return construct.tokenize.call( + // If we do have fields, create an object w/ `context` as its + // prototype. + // This allows a “live binding”, which is needed for `interrupt`. + fields ? Object.assign(Object.create(context), fields) : context, + effects, + ok, + nok + )(code) + } + } + + /** @type {State} */ + function ok(code) { + consumed = true + onreturn(currentConstruct, info) + return returnState + } + + /** @type {State} */ + function nok(code) { + consumed = true + info.restore() + if (++constructIndex < listOfConstructs.length) { + return handleConstruct(listOfConstructs[constructIndex]) + } + return bogusState + } + } + } + + /** + * @param {Construct} construct + * @param {number} from + * @returns {void} + */ + function addResult(construct, from) { + if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { + resolveAllConstructs.push(construct) + } + if (construct.resolve) { + splice( + context.events, + from, + context.events.length - from, + construct.resolve(context.events.slice(from), context) + ) + } + if (construct.resolveTo) { + context.events = construct.resolveTo(context.events, context) + } + } + + /** + * Store state. + * + * @returns {Info} + */ + function store() { + const startPoint = now() + const startPrevious = context.previous + const startCurrentConstruct = context.currentConstruct + const startEventsIndex = context.events.length + const startStack = Array.from(stack) + return { + restore, + from: startEventsIndex + } + + /** + * Restore state. + * + * @returns {void} + */ + function restore() { + point = startPoint + context.previous = startPrevious + context.currentConstruct = startCurrentConstruct + context.events.length = startEventsIndex + stack = startStack + accountForPotentialSkip() + } + } + + /** + * Move the current point a bit forward in the line when it’s on a column + * skip. + * + * @returns {void} + */ + function accountForPotentialSkip() { + if (point.line in columnStart && point.column < 2) { + point.column = columnStart[point.line] + point.offset += columnStart[point.line] - 1 + } + } +} + +/** + * Get the chunks from a slice of chunks in the range of a token. + * + * @param {Array} chunks + * @param {Pick} token + * @returns {Array} + */ +function sliceChunks(chunks, token) { + const startIndex = token.start._index + const startBufferIndex = token.start._bufferIndex + const endIndex = token.end._index + const endBufferIndex = token.end._bufferIndex + /** @type {Array} */ + let view + if (startIndex === endIndex) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)] + } else { + view = chunks.slice(startIndex, endIndex) + if (startBufferIndex > -1) { + const head = view[0] + if (typeof head === 'string') { + view[0] = head.slice(startBufferIndex) + } else { + view.shift() + } + } + if (endBufferIndex > 0) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view.push(chunks[endIndex].slice(0, endBufferIndex)) + } + } + return view +} + +/** + * Get the string value of a slice of chunks. + * + * @param {Array} chunks + * @param {boolean | undefined} [expandTabs=false] + * @returns {string} + */ +function serializeChunks(chunks, expandTabs) { + let index = -1 + /** @type {Array} */ + const result = [] + /** @type {boolean | undefined} */ + let atTab + while (++index < chunks.length) { + const chunk = chunks[index] + /** @type {string} */ + let value + if (typeof chunk === 'string') { + value = chunk + } else + switch (chunk) { + case -5: { + value = '\r' + break + } + case -4: { + value = '\n' + break + } + case -3: { + value = '\r' + '\n' + break + } + case -2: { + value = expandTabs ? ' ' : '\t' + break + } + case -1: { + if (!expandTabs && atTab) continue + value = ' ' + break + } + default: { + // Currently only replacement character. + value = String.fromCharCode(chunk) + } + } + atTab = chunk === -2 + result.push(value) + } + return result.join('') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/thematic-break.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const thematicBreak = { + name: 'thematicBreak', + tokenize: tokenizeThematicBreak +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeThematicBreak(effects, ok, nok) { + let size = 0 + /** @type {NonNullable} */ + let marker + return start + + /** + * Start of thematic break. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('thematicBreak') + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * After optional whitespace, at marker. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + marker = code + return atBreak(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.enter('thematicBreakSequence') + return sequence(code) + } + if (size >= 3 && (code === null || markdownLineEnding(code))) { + effects.exit('thematicBreak') + return ok(code) + } + return nok(code) + } + + /** + * In sequence. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function sequence(code) { + if (code === marker) { + effects.consume(code) + size++ + return sequence + } + effects.exit('thematicBreakSequence') + return markdownSpace(code) + ? factorySpace(effects, atBreak, 'whitespace')(code) + : atBreak(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/list.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + +/** @type {Construct} */ +const list = { + name: 'list', + tokenize: tokenizeListStart, + continuation: { + tokenize: tokenizeListContinuation + }, + exit: tokenizeListEnd +} + +/** @type {Construct} */ +const listItemPrefixWhitespaceConstruct = { + tokenize: tokenizeListItemPrefixWhitespace, + partial: true +} + +/** @type {Construct} */ +const indentConstruct = { + tokenize: tokenizeIndent, + partial: true +} + +// To do: `markdown-rs` parses list items on their own and later stitches them +// together. + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListStart(effects, ok, nok) { + const self = this + const tail = self.events[self.events.length - 1] + let initialSize = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + let size = 0 + return start + + /** @type {State} */ + function start(code) { + const kind = + self.containerState.type || + (code === 42 || code === 43 || code === 45 + ? 'listUnordered' + : 'listOrdered') + if ( + kind === 'listUnordered' + ? !self.containerState.marker || code === self.containerState.marker + : asciiDigit(code) + ) { + if (!self.containerState.type) { + self.containerState.type = kind + effects.enter(kind, { + _container: true + }) + } + if (kind === 'listUnordered') { + effects.enter('listItemPrefix') + return code === 42 || code === 45 + ? effects.check(thematicBreak, nok, atMarker)(code) + : atMarker(code) + } + if (!self.interrupt || code === 49) { + effects.enter('listItemPrefix') + effects.enter('listItemValue') + return inside(code) + } + } + return nok(code) + } + + /** @type {State} */ + function inside(code) { + if (asciiDigit(code) && ++size < 10) { + effects.consume(code) + return inside + } + if ( + (!self.interrupt || size < 2) && + (self.containerState.marker + ? code === self.containerState.marker + : code === 41 || code === 46) + ) { + effects.exit('listItemValue') + return atMarker(code) + } + return nok(code) + } + + /** + * @type {State} + **/ + function atMarker(code) { + effects.enter('listItemMarker') + effects.consume(code) + effects.exit('listItemMarker') + self.containerState.marker = self.containerState.marker || code + return effects.check( + blankLine, + // Can’t be empty when interrupting. + self.interrupt ? nok : onBlank, + effects.attempt( + listItemPrefixWhitespaceConstruct, + endOfPrefix, + otherPrefix + ) + ) + } + + /** @type {State} */ + function onBlank(code) { + self.containerState.initialBlankLine = true + initialSize++ + return endOfPrefix(code) + } + + /** @type {State} */ + function otherPrefix(code) { + if (markdownSpace(code)) { + effects.enter('listItemPrefixWhitespace') + effects.consume(code) + effects.exit('listItemPrefixWhitespace') + return endOfPrefix + } + return nok(code) + } + + /** @type {State} */ + function endOfPrefix(code) { + self.containerState.size = + initialSize + + self.sliceSerialize(effects.exit('listItemPrefix'), true).length + return ok(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListContinuation(effects, ok, nok) { + const self = this + self.containerState._closeFlow = undefined + return effects.check(blankLine, onBlank, notBlank) + + /** @type {State} */ + function onBlank(code) { + self.containerState.furtherBlankLines = + self.containerState.furtherBlankLines || + self.containerState.initialBlankLine + + // We have a blank line. + // Still, try to consume at most the items size. + return factorySpace( + effects, + ok, + 'listItemIndent', + self.containerState.size + 1 + )(code) + } + + /** @type {State} */ + function notBlank(code) { + if (self.containerState.furtherBlankLines || !markdownSpace(code)) { + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return notInCurrentItem(code) + } + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) + } + + /** @type {State} */ + function notInCurrentItem(code) { + // While we do continue, we signal that the flow should be closed. + self.containerState._closeFlow = true + // As we’re closing flow, we’re no longer interrupting. + self.interrupt = undefined + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(list, ok, nok), + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeIndent(effects, ok, nok) { + const self = this + return factorySpace( + effects, + afterPrefix, + 'listItemIndent', + self.containerState.size + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'listItemIndent' && + tail[2].sliceSerialize(tail[1], true).length === self.containerState.size + ? ok(code) + : nok(code) + } +} + +/** + * @type {Exiter} + * @this {TokenizeContext} + */ +function tokenizeListEnd(effects) { + effects.exit(this.containerState.type) +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListItemPrefixWhitespace(effects, ok, nok) { + const self = this + + // Always populated by defaults. + + return factorySpace( + effects, + afterPrefix, + 'listItemPrefixWhitespace', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return !markdownSpace(code) && + tail && + tail[1].type === 'listItemPrefixWhitespace' + ? ok(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/block-quote.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blockQuote = { + name: 'blockQuote', + tokenize: tokenizeBlockQuoteStart, + continuation: { + tokenize: tokenizeBlockQuoteContinuation + }, + exit +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteStart(effects, ok, nok) { + const self = this + return start + + /** + * Start of block quote. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 62) { + const state = self.containerState + if (!state.open) { + effects.enter('blockQuote', { + _container: true + }) + state.open = true + } + effects.enter('blockQuotePrefix') + effects.enter('blockQuoteMarker') + effects.consume(code) + effects.exit('blockQuoteMarker') + return after + } + return nok(code) + } + + /** + * After `>`, before optional whitespace. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownSpace(code)) { + effects.enter('blockQuotePrefixWhitespace') + effects.consume(code) + effects.exit('blockQuotePrefixWhitespace') + effects.exit('blockQuotePrefix') + return ok + } + effects.exit('blockQuotePrefix') + return ok(code) + } +} + +/** + * Start of block quote continuation. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteContinuation(effects, ok, nok) { + const self = this + return contStart + + /** + * Start of block quote continuation. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contStart(code) { + if (markdownSpace(code)) { + // Always populated by defaults. + + return factorySpace( + effects, + contBefore, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } + return contBefore(code) + } + + /** + * At `>`, after optional whitespace. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contBefore(code) { + return effects.attempt(blockQuote, ok, nok)(code) + } +} + +/** @type {Exiter} */ +function exit(effects) { + effects.exit('blockQuote') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-destination/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse destinations. + * + * ###### Examples + * + * ```markdown + * + * b> + * + * + * a + * a\)b + * a(b)c + * a(b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type for whole (`` or `b`). + * @param {TokenType} literalType + * Type when enclosed (``). + * @param {TokenType} literalMarkerType + * Type for enclosing (`<` and `>`). + * @param {TokenType} rawType + * Type when not enclosed (`b`). + * @param {TokenType} stringType + * Type for the value (`a` or `b`). + * @param {number | undefined} [max=Infinity] + * Depth of nested parens (inclusive). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryDestination( + effects, + ok, + nok, + type, + literalType, + literalMarkerType, + rawType, + stringType, + max +) { + const limit = max || Number.POSITIVE_INFINITY + let balance = 0 + return start + + /** + * Start of destination. + * + * ```markdown + * > | + * ^ + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 60) { + effects.enter(type) + effects.enter(literalType) + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + return enclosedBefore + } + + // ASCII control, space, closing paren. + if (code === null || code === 32 || code === 41 || asciiControl(code)) { + return nok(code) + } + effects.enter(type) + effects.enter(rawType) + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return raw(code) + } + + /** + * After `<`, at an enclosed destination. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function enclosedBefore(code) { + if (code === 62) { + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + effects.exit(literalType) + effects.exit(type) + return ok + } + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return enclosed(code) + } + + /** + * In enclosed destination. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function enclosed(code) { + if (code === 62) { + effects.exit('chunkString') + effects.exit(stringType) + return enclosedBefore(code) + } + if (code === null || code === 60 || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? enclosedEscape : enclosed + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function enclosedEscape(code) { + if (code === 60 || code === 62 || code === 92) { + effects.consume(code) + return enclosed + } + return enclosed(code) + } + + /** + * In raw destination. + * + * ```markdown + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function raw(code) { + if ( + !balance && + (code === null || code === 41 || markdownLineEndingOrSpace(code)) + ) { + effects.exit('chunkString') + effects.exit(stringType) + effects.exit(rawType) + effects.exit(type) + return ok(code) + } + if (balance < limit && code === 40) { + effects.consume(code) + balance++ + return raw + } + if (code === 41) { + effects.consume(code) + balance-- + return raw + } + + // ASCII control (but *not* `\0`) and space and `(`. + // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it + // doesn’t. + if (code === null || code === 32 || code === 40 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? rawEscape : raw + } + + /** + * After `\`, at special character. + * + * ```markdown + * > | a\*a + * ^ + * ``` + * + * @type {State} + */ + function rawEscape(code) { + if (code === 40 || code === 41 || code === 92) { + effects.consume(code) + return raw + } + return raw(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-label/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse labels. + * + * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. + * + * ###### Examples + * + * ```markdown + * [a] + * [a + * b] + * [a\]b] + * ``` + * + * @this {TokenizeContext} + * Tokenize context. + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole label (`[a]`). + * @param {TokenType} markerType + * Type for the markers (`[` and `]`). + * @param {TokenType} stringType + * Type for the identifier (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryLabel(effects, ok, nok, type, markerType, stringType) { + const self = this + let size = 0 + /** @type {boolean} */ + let seen + return start + + /** + * Start of label. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.enter(stringType) + return atBreak + } + + /** + * In label, at something, before something else. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if ( + size > 999 || + code === null || + code === 91 || + (code === 93 && !seen) || + // To do: remove in the future once we’ve switched from + // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, + // which doesn’t need this. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + (code === 94 && + !size && + '_hiddenFootnoteSupport' in self.parser.constructs) + ) { + return nok(code) + } + if (code === 93) { + effects.exit(stringType) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + + // To do: indent? Link chunks and EOLs together? + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return atBreak + } + effects.enter('chunkString', { + contentType: 'string' + }) + return labelInside(code) + } + + /** + * In label, in text. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function labelInside(code) { + if ( + code === null || + code === 91 || + code === 93 || + markdownLineEnding(code) || + size++ > 999 + ) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + if (!seen) seen = !markdownSpace(code) + return code === 92 ? labelEscape : labelInside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | [a\*a] + * ^ + * ``` + * + * @type {State} + */ + function labelEscape(code) { + if (code === 91 || code === 92 || code === 93) { + effects.consume(code) + size++ + return labelInside + } + return labelInside(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-title/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +/** + * Parse titles. + * + * ###### Examples + * + * ```markdown + * "a" + * 'b' + * (c) + * "a + * b" + * 'a + * b' + * (a\)b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole title (`"a"`, `'b'`, `(c)`). + * @param {TokenType} markerType + * Type for the markers (`"`, `'`, `(`, and `)`). + * @param {TokenType} stringType + * Type for the value (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryTitle(effects, ok, nok, type, markerType, stringType) { + /** @type {NonNullable} */ + let marker + return start + + /** + * Start of title. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 34 || code === 39 || code === 40) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + marker = code === 40 ? 41 : code + return begin + } + return nok(code) + } + + /** + * After opening marker. + * + * This is also used at the closing marker. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function begin(code) { + if (code === marker) { + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + effects.enter(stringType) + return atBreak(code) + } + + /** + * At something, before something else. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.exit(stringType) + return begin(marker) + } + if (code === null) { + return nok(code) + } + + // Note: blank lines can’t exist in content. + if (markdownLineEnding(code)) { + // To do: use `space_or_tab_eol_with_options`, connect. + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, atBreak, 'linePrefix') + } + effects.enter('chunkString', { + contentType: 'string' + }) + return inside(code) + } + + /** + * + * + * @type {State} + */ + function inside(code) { + if (code === marker || code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + return code === 92 ? escape : inside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | "a\*b" + * ^ + * ``` + * + * @type {State} + */ + function escape(code) { + if (code === marker || code === 92) { + effects.consume(code) + return inside + } + return inside(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-whitespace/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + */ + + + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * line endings or spaces in markdown are often optional, in which case this + * factory can be used and `ok` will be switched to whether spaces were found + * or not + * * one line ending or space can be detected with + * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @returns + * Start state. + */ +function factoryWhitespace(effects, ok) { + /** @type {boolean} */ + let seen + return start + + /** @type {State} */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + seen = true + return start + } + if (markdownSpace(code)) { + return factorySpace( + effects, + start, + seen ? 'linePrefix' : 'lineSuffix' + )(code) + } + return ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-normalize-identifier/index.js +/** + * Normalize an identifier (as found in references, definitions). + * + * Collapses markdown whitespace, trim, and then lower- and uppercase. + * + * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their + * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different + * uppercase character (U+0398 (`Θ`)). + * So, to get a canonical form, we perform both lower- and uppercase. + * + * Using uppercase last makes sure keys will never interact with default + * prototypal values (such as `constructor`): nothing in the prototype of + * `Object` is uppercase. + * + * @param {string} value + * Identifier to normalize. + * @returns {string} + * Normalized identifier. + */ +function normalizeIdentifier(value) { + return ( + value + // Collapse markdown whitespace. + .replace(/[\t\n\r ]+/g, ' ') + // Trim. + .replace(/^ | $/g, '') + // Some characters are considered “uppercase”, but if their lowercase + // counterpart is uppercased will result in a different uppercase + // character. + // Hence, to get that form, we perform both lower- and uppercase. + // Upper case makes sure keys will not interact with default prototypal + // methods: no method is uppercase. + .toLowerCase() + .toUpperCase() + ) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/definition.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + +/** @type {Construct} */ +const definition = { + name: 'definition', + tokenize: tokenizeDefinition +} + +/** @type {Construct} */ +const titleBefore = { + tokenize: tokenizeTitleBefore, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeDefinition(effects, ok, nok) { + const self = this + /** @type {string} */ + let identifier + return start + + /** + * At start of a definition. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Do not interrupt paragraphs (but do follow definitions). + // To do: do `interrupt` the way `markdown-rs` does. + // To do: parse whitespace the way `markdown-rs` does. + effects.enter('definition') + return before(code) + } + + /** + * After optional whitespace, at `[`. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + // To do: parse whitespace the way `markdown-rs` does. + + return factoryLabel.call( + self, + effects, + labelAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionLabel', + 'definitionLabelMarker', + 'definitionLabelString' + )(code) + } + + /** + * After label. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function labelAfter(code) { + identifier = normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + if (code === 58) { + effects.enter('definitionMarker') + effects.consume(code) + effects.exit('definitionMarker') + return markerAfter + } + return nok(code) + } + + /** + * After marker. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function markerAfter(code) { + // Note: whitespace is optional. + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, destinationBefore)(code) + : destinationBefore(code) + } + + /** + * Before destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationBefore(code) { + return factoryDestination( + effects, + destinationAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionDestination', + 'definitionDestinationLiteral', + 'definitionDestinationLiteralMarker', + 'definitionDestinationRaw', + 'definitionDestinationString' + )(code) + } + + /** + * After destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationAfter(code) { + return effects.attempt(titleBefore, after, after)(code) + } + + /** + * After definition. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return markdownSpace(code) + ? factorySpace(effects, afterWhitespace, 'whitespace')(code) + : afterWhitespace(code) + } + + /** + * After definition, after optional whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function afterWhitespace(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('definition') + + // Note: we don’t care about uniqueness. + // It’s likely that that doesn’t happen very frequently. + // It is more likely that it wastes precious time. + self.parser.defined.push(identifier) + + // To do: `markdown-rs` interrupt. + // // You’d be interrupting. + // tokenizer.interrupt = true + return ok(code) + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeTitleBefore(effects, ok, nok) { + return titleBefore + + /** + * After destination, at whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, beforeMarker)(code) + : nok(code) + } + + /** + * At title. + * + * ```markdown + * | [a]: b + * > | "c" + * ^ + * ``` + * + * @type {State} + */ + function beforeMarker(code) { + return factoryTitle( + effects, + titleAfter, + nok, + 'definitionTitle', + 'definitionTitleMarker', + 'definitionTitleString' + )(code) + } + + /** + * After title. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfter(code) { + return markdownSpace(code) + ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code) + : titleAfterOptionalWhitespace(code) + } + + /** + * After title, after optional whitespace. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfterOptionalWhitespace(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-indented.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const codeIndented = { + name: 'codeIndented', + tokenize: tokenizeCodeIndented +} + +/** @type {Construct} */ +const furtherStart = { + tokenize: tokenizeFurtherStart, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeIndented(effects, ok, nok) { + const self = this + return start + + /** + * Start of code (indented). + * + * > **Parsing note**: it is not needed to check if this first line is a + * > filled line (that it has a non-whitespace character), because blank lines + * > are parsed already, so we never run into that. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: manually check if interrupting like `markdown-rs`. + + effects.enter('codeIndented') + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? atBreak(code) + : nok(code) + } + + /** + * At a break. + * + * ```markdown + * > | aaa + * ^ ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === null) { + return after(code) + } + if (markdownLineEnding(code)) { + return effects.attempt(furtherStart, atBreak, after)(code) + } + effects.enter('codeFlowValue') + return inside(code) + } + + /** + * In code content. + * + * ```markdown + * > | aaa + * ^^^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return atBreak(code) + } + effects.consume(code) + return inside + } + + /** @type {State} */ + function after(code) { + effects.exit('codeIndented') + // To do: allow interrupting like `markdown-rs`. + // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeFurtherStart(effects, ok, nok) { + const self = this + return furtherStart + + /** + * At eol, trying to parse another indent. + * + * ```markdown + * > | aaa + * ^ + * | bbb + * ``` + * + * @type {State} + */ + function furtherStart(code) { + // To do: improve `lazy` / `pierce` handling. + // If this is a lazy line, it can’t be code. + if (self.parser.lazy[self.now().line]) { + return nok(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return furtherStart + } + + // To do: the code here in `micromark-js` is a bit different from + // `markdown-rs` because there it can attempt spaces. + // We can’t yet. + // + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? ok(code) + : markdownLineEnding(code) + ? furtherStart(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/heading-atx.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const headingAtx = { + name: 'headingAtx', + tokenize: tokenizeHeadingAtx, + resolve: resolveHeadingAtx +} + +/** @type {Resolver} */ +function resolveHeadingAtx(events, context) { + let contentEnd = events.length - 2 + let contentStart = 3 + /** @type {Token} */ + let content + /** @type {Token} */ + let text + + // Prefix whitespace, part of the opening. + if (events[contentStart][1].type === 'whitespace') { + contentStart += 2 + } + + // Suffix whitespace, part of the closing. + if ( + contentEnd - 2 > contentStart && + events[contentEnd][1].type === 'whitespace' + ) { + contentEnd -= 2 + } + if ( + events[contentEnd][1].type === 'atxHeadingSequence' && + (contentStart === contentEnd - 1 || + (contentEnd - 4 > contentStart && + events[contentEnd - 2][1].type === 'whitespace')) + ) { + contentEnd -= contentStart + 1 === contentEnd ? 2 : 4 + } + if (contentEnd > contentStart) { + content = { + type: 'atxHeadingText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end + } + text = { + type: 'chunkText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end, + contentType: 'text' + } + splice(events, contentStart, contentEnd - contentStart + 1, [ + ['enter', content, context], + ['enter', text, context], + ['exit', text, context], + ['exit', content, context] + ]) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHeadingAtx(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of a heading (atx). + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + effects.enter('atxHeading') + return before(code) + } + + /** + * After optional whitespace, at `#`. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('atxHeadingSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 35 && size++ < 6) { + effects.consume(code) + return sequenceOpen + } + + // Always at least one `#`. + if (code === null || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingSequence') + return atBreak(code) + } + return nok(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === 35) { + effects.enter('atxHeadingSequence') + return sequenceFurther(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('atxHeading') + // To do: interrupt like `markdown-rs`. + // // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } + if (markdownSpace(code)) { + return factorySpace(effects, atBreak, 'whitespace')(code) + } + + // To do: generate `data` tokens, add the `text` token later. + // Needs edit map, see: `markdown.rs`. + effects.enter('atxHeadingText') + return data(code) + } + + /** + * In further sequence (after whitespace). + * + * Could be normal “visible” hashes in the heading or a final sequence. + * + * ```markdown + * > | ## aa ## + * ^ + * ``` + * + * @type {State} + */ + function sequenceFurther(code) { + if (code === 35) { + effects.consume(code) + return sequenceFurther + } + effects.exit('atxHeadingSequence') + return atBreak(code) + } + + /** + * In text. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if (code === null || code === 35 || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingText') + return atBreak(code) + } + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/setext-underline.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const setextUnderline = { + name: 'setextUnderline', + tokenize: tokenizeSetextUnderline, + resolveTo: resolveToSetextUnderline +} + +/** @type {Resolver} */ +function resolveToSetextUnderline(events, context) { + // To do: resolve like `markdown-rs`. + let index = events.length + /** @type {number | undefined} */ + let content + /** @type {number | undefined} */ + let text + /** @type {number | undefined} */ + let definition + + // Find the opening of the content. + // It’ll always exist: we don’t tokenize if it isn’t there. + while (index--) { + if (events[index][0] === 'enter') { + if (events[index][1].type === 'content') { + content = index + break + } + if (events[index][1].type === 'paragraph') { + text = index + } + } + // Exit + else { + if (events[index][1].type === 'content') { + // Remove the content end (if needed we’ll add it later) + events.splice(index, 1) + } + if (!definition && events[index][1].type === 'definition') { + definition = index + } + } + } + const heading = { + type: 'setextHeading', + start: Object.assign({}, events[text][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + + // Change the paragraph to setext heading text. + events[text][1].type = 'setextHeadingText' + + // If we have definitions in the content, we’ll keep on having content, + // but we need move it. + if (definition) { + events.splice(text, 0, ['enter', heading, context]) + events.splice(definition + 1, 0, ['exit', events[content][1], context]) + events[content][1].end = Object.assign({}, events[definition][1].end) + } else { + events[content][1] = heading + } + + // Add the heading exit at the end. + events.push(['exit', heading, context]) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeSetextUnderline(effects, ok, nok) { + const self = this + /** @type {NonNullable} */ + let marker + return start + + /** + * At start of heading (setext) underline. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + let index = self.events.length + /** @type {boolean | undefined} */ + let paragraph + // Find an opening. + while (index--) { + // Skip enter/exit of line ending, line prefix, and content. + // We can now either have a definition or a paragraph. + if ( + self.events[index][1].type !== 'lineEnding' && + self.events[index][1].type !== 'linePrefix' && + self.events[index][1].type !== 'content' + ) { + paragraph = self.events[index][1].type === 'paragraph' + break + } + } + + // To do: handle lazy/pierce like `markdown-rs`. + // To do: parse indent like `markdown-rs`. + if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { + effects.enter('setextHeadingLine') + marker = code + return before(code) + } + return nok(code) + } + + /** + * After optional whitespace, at `-` or `=`. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('setextHeadingLineSequence') + return inside(code) + } + + /** + * In sequence. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + effects.exit('setextHeadingLineSequence') + return markdownSpace(code) + ? factorySpace(effects, after, 'lineSuffix')(code) + : after(code) + } + + /** + * After sequence, after optional whitespace. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('setextHeadingLine') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-html-tag-name/index.js +/** + * List of lowercase HTML “block” tag names. + * + * The list, when parsing HTML (flow), results in more relaxed rules (condition + * 6). + * Because they are known blocks, the HTML-like syntax doesn’t have to be + * strictly parsed. + * For tag names not in this list, a more strict algorithm (condition 7) is used + * to detect whether the HTML-like syntax is seen as HTML (flow) or not. + * + * This is copied from: + * . + * + * > 👉 **Note**: `search` was added in `CommonMark@0.31`. + */ +const htmlBlockNames = [ + 'address', + 'article', + 'aside', + 'base', + 'basefont', + 'blockquote', + 'body', + 'caption', + 'center', + 'col', + 'colgroup', + 'dd', + 'details', + 'dialog', + 'dir', + 'div', + 'dl', + 'dt', + 'fieldset', + 'figcaption', + 'figure', + 'footer', + 'form', + 'frame', + 'frameset', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'head', + 'header', + 'hr', + 'html', + 'iframe', + 'legend', + 'li', + 'link', + 'main', + 'menu', + 'menuitem', + 'nav', + 'noframes', + 'ol', + 'optgroup', + 'option', + 'p', + 'param', + 'search', + 'section', + 'summary', + 'table', + 'tbody', + 'td', + 'tfoot', + 'th', + 'thead', + 'title', + 'tr', + 'track', + 'ul' +] + +/** + * List of lowercase HTML “raw” tag names. + * + * The list, when parsing HTML (flow), results in HTML that can include lines + * without exiting, until a closing tag also in this list is found (condition + * 1). + * + * This module is copied from: + * . + * + * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. + */ +const htmlRawNames = ['pre', 'script', 'style', 'textarea'] + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-flow.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + +/** @type {Construct} */ +const htmlFlow = { + name: 'htmlFlow', + tokenize: tokenizeHtmlFlow, + resolveTo: resolveToHtmlFlow, + concrete: true +} + +/** @type {Construct} */ +const blankLineBefore = { + tokenize: tokenizeBlankLineBefore, + partial: true +} +const nonLazyContinuationStart = { + tokenize: tokenizeNonLazyContinuationStart, + partial: true +} + +/** @type {Resolver} */ +function resolveToHtmlFlow(events) { + let index = events.length + while (index--) { + if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { + break + } + } + if (index > 1 && events[index - 2][1].type === 'linePrefix') { + // Add the prefix start to the HTML token. + events[index][1].start = events[index - 2][1].start + // Add the prefix start to the HTML line token. + events[index + 1][1].start = events[index - 2][1].start + // Remove the line prefix. + events.splice(index - 2, 2) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlFlow(effects, ok, nok) { + const self = this + /** @type {number} */ + let marker + /** @type {boolean} */ + let closingTag + /** @type {string} */ + let buffer + /** @type {number} */ + let index + /** @type {Code} */ + let markerB + return start + + /** + * Start of HTML (flow). + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * At `<`, after optional whitespace. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('htmlFlow') + effects.enter('htmlFlowData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * > | + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + closingTag = true + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + marker = 3 + // To do: + // tokenizer.concrete = true + // To do: use `markdown-rs` style interrupt. + // While we’re in an instruction instead of a declaration, we’re on a `?` + // right now, so we do need to search for `>`, similar to declarations. + return self.interrupt ? ok : continuationDeclarationInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After ` | + * ^ + * > | + * ^ + * > | &<]]> + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + marker = 2 + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + marker = 5 + index = 0 + return cdataOpenInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + marker = 4 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After ` | + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After ` | &<]]> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + if (index === value.length) { + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return cdataOpenInside + } + return nok(code) + } + + /** + * After ` | + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * In tag name. + * + * ```markdown + * > | + * ^^ + * > | + * ^^ + * ``` + * + * @type {State} + */ + function tagName(code) { + if ( + code === null || + code === 47 || + code === 62 || + markdownLineEndingOrSpace(code) + ) { + const slash = code === 47 + const name = buffer.toLowerCase() + if (!slash && !closingTag && htmlRawNames.includes(name)) { + marker = 1 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + if (htmlBlockNames.includes(buffer.toLowerCase())) { + marker = 6 + if (slash) { + effects.consume(code) + return basicSelfClosing + } + + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + marker = 7 + // Do not support complete HTML when interrupting. + return self.interrupt && !self.parser.lazy[self.now().line] + ? nok(code) + : closingTag + ? completeClosingTagAfter(code) + : completeAttributeNameBefore(code) + } + + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + buffer += String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After closing slash of a basic tag name. + * + * ```markdown + * > |
    + * ^ + * ``` + * + * @type {State} + */ + function basicSelfClosing(code) { + if (code === 62) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return nok(code) + } + + /** + * After closing slash of a complete tag name. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeClosingTagAfter(code) { + if (markdownSpace(code)) { + effects.consume(code) + return completeClosingTagAfter + } + return completeEnd(code) + } + + /** + * At an attribute name. + * + * At first, this state is used after a complete tag name, after whitespace, + * where it expects optional attributes or the end of the tag. + * It is also reused after attributes, when expecting more optional + * attributes. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * > | + * ^ + * > | + * ^ + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameBefore(code) { + if (code === 47) { + effects.consume(code) + return completeEnd + } + + // ASCII alphanumerical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return completeAttributeName + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameBefore + } + return completeEnd(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeName(code) { + // ASCII alphanumerical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return completeAttributeName + } + return completeAttributeNameAfter(code) + } + + /** + * After attribute name, at an optional initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return completeAttributeValueBefore + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameAfter + } + return completeAttributeNameBefore(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + markerB = code + return completeAttributeValueQuoted + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeValueBefore + } + return completeAttributeValueUnquoted(code) + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuoted(code) { + if (code === markerB) { + effects.consume(code) + markerB = null + return completeAttributeValueQuotedAfter + } + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return completeAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 47 || + code === 60 || + code === 61 || + code === 62 || + code === 96 || + markdownLineEndingOrSpace(code) + ) { + return completeAttributeNameAfter(code) + } + effects.consume(code) + return completeAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the + * end of the tag. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownSpace(code)) { + return completeAttributeNameBefore(code) + } + return nok(code) + } + + /** + * In certain circumstances of a complete tag where only an `>` is allowed. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeEnd(code) { + if (code === 62) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * After `>` in a complete tag. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAfter(code) { + if (code === null || markdownLineEnding(code)) { + // // Do not form containers. + // tokenizer.concrete = true + return continuation(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * In continuation of any HTML kind. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function continuation(code) { + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationCommentInside + } + if (code === 60 && marker === 1) { + effects.consume(code) + return continuationRawTagOpen + } + if (code === 62 && marker === 4) { + effects.consume(code) + return continuationClose + } + if (code === 63 && marker === 3) { + effects.consume(code) + return continuationDeclarationInside + } + if (code === 93 && marker === 5) { + effects.consume(code) + return continuationCdataInside + } + if (markdownLineEnding(code) && (marker === 6 || marker === 7)) { + effects.exit('htmlFlowData') + return effects.check( + blankLineBefore, + continuationAfter, + continuationStart + )(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationStart(code) + } + effects.consume(code) + return continuation + } + + /** + * In continuation, at eol. + * + * ```markdown + * > | + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStart(code) { + return effects.check( + nonLazyContinuationStart, + continuationStartNonLazy, + continuationAfter + )(code) + } + + /** + * In continuation, at eol, before non-lazy content. + * + * ```markdown + * > | + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStartNonLazy(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return continuationBefore + } + + /** + * In continuation, before non-lazy content. + * + * ```markdown + * | + * > | asd + * ^ + * ``` + * + * @type {State} + */ + function continuationBefore(code) { + if (code === null || markdownLineEnding(code)) { + return continuationStart(code) + } + effects.enter('htmlFlowData') + return continuation(code) + } + + /** + * In comment continuation, after one `-`, expecting another. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function continuationCommentInside(code) { + if (code === 45) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In raw continuation, after `<`, at `/`. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function continuationRawTagOpen(code) { + if (code === 47) { + effects.consume(code) + buffer = '' + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In raw continuation, after ` | + * ^^^^^^ + * ``` + * + * @type {State} + */ + function continuationRawEndTag(code) { + if (code === 62) { + const name = buffer.toLowerCase() + if (htmlRawNames.includes(name)) { + effects.consume(code) + return continuationClose + } + return continuation(code) + } + if (asciiAlpha(code) && buffer.length < 8) { + effects.consume(code) + // @ts-expect-error: not null. + buffer += String.fromCharCode(code) + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In cdata continuation, after `]`, expecting `]>`. + * + * ```markdown + * > | &<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationCdataInside(code) { + if (code === 93) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In declaration or instruction continuation, at `>`. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * > | + * ^ + * > | + * ^ + * > | &<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationDeclarationInside(code) { + if (code === 62) { + effects.consume(code) + return continuationClose + } + + // More dashes. + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In closed continuation: everything we get until the eol/eof is part of it. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function continuationClose(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationAfter(code) + } + effects.consume(code) + return continuationClose + } + + /** + * Done. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function continuationAfter(code) { + effects.exit('htmlFlow') + // // Feel free to interrupt. + // tokenizer.interrupt = false + // // No longer concrete. + // tokenizer.concrete = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuationStart(effects, ok, nok) { + const self = this + return start + + /** + * At eol, before continuation. + * + * ```markdown + * > | * ```js + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return after + } + return nok(code) + } + + /** + * A continuation. + * + * ```markdown + * | * ```js + * > | b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLineBefore(effects, ok, nok) { + return start + + /** + * Before eol, expecting blank line. + * + * ```markdown + * > |
    + * ^ + * | + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return effects.attempt(blankLine, ok, nok) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-fenced.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const nonLazyContinuation = { + tokenize: tokenizeNonLazyContinuation, + partial: true +} + +/** @type {Construct} */ +const codeFenced = { + name: 'codeFenced', + tokenize: tokenizeCodeFenced, + concrete: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeFenced(effects, ok, nok) { + const self = this + /** @type {Construct} */ + const closeStart = { + tokenize: tokenizeCloseStart, + partial: true + } + let initialPrefix = 0 + let sizeOpen = 0 + /** @type {NonNullable} */ + let marker + return start + + /** + * Start of code. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse whitespace like `markdown-rs`. + return beforeSequenceOpen(code) + } + + /** + * In opening fence, after prefix, at sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeSequenceOpen(code) { + const tail = self.events[self.events.length - 1] + initialPrefix = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + marker = code + effects.enter('codeFenced') + effects.enter('codeFencedFence') + effects.enter('codeFencedFenceSequence') + return sequenceOpen(code) + } + + /** + * In opening fence sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === marker) { + sizeOpen++ + effects.consume(code) + return sequenceOpen + } + if (sizeOpen < 3) { + return nok(code) + } + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, infoBefore, 'whitespace')(code) + : infoBefore(code) + } + + /** + * In opening fence, after the sequence (and optional whitespace), before info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function infoBefore(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return self.interrupt + ? ok(code) + : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFencedFenceInfo') + effects.enter('chunkString', { + contentType: 'string' + }) + return info(code) + } + + /** + * In info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function info(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return infoBefore(code) + } + if (markdownSpace(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return factorySpace(effects, metaBefore, 'whitespace')(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return info + } + + /** + * In opening fence, after info and whitespace, before meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function metaBefore(code) { + if (code === null || markdownLineEnding(code)) { + return infoBefore(code) + } + effects.enter('codeFencedFenceMeta') + effects.enter('chunkString', { + contentType: 'string' + }) + return meta(code) + } + + /** + * In meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function meta(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceMeta') + return infoBefore(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return meta + } + + /** + * At eol/eof in code, before a non-lazy closing fence or content. + * + * ```markdown + * > | ~~~js + * ^ + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function atNonLazyBreak(code) { + return effects.attempt(closeStart, after, contentBefore)(code) + } + + /** + * Before code content, not a closing fence, at eol. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return contentStart + } + + /** + * Before code content, not a closing fence. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentStart(code) { + return initialPrefix > 0 && markdownSpace(code) + ? factorySpace( + effects, + beforeContentChunk, + 'linePrefix', + initialPrefix + 1 + )(code) + : beforeContentChunk(code) + } + + /** + * Before code content, after optional prefix. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeContentChunk(code) { + if (code === null || markdownLineEnding(code)) { + return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFlowValue') + return contentChunk(code) + } + + /** + * In code content. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^^^^^^^^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentChunk(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return beforeContentChunk(code) + } + effects.consume(code) + return contentChunk + } + + /** + * After code. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + effects.exit('codeFenced') + return ok(code) + } + + /** + * @this {TokenizeContext} + * @type {Tokenizer} + */ + function tokenizeCloseStart(effects, ok, nok) { + let size = 0 + return startBefore + + /** + * + * + * @type {State} + */ + function startBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return start + } + + /** + * Before closing fence, at optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Always populated by defaults. + + // To do: `enter` here or in next state? + effects.enter('codeFencedFence') + return markdownSpace(code) + ? factorySpace( + effects, + beforeSequenceClose, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : beforeSequenceClose(code) + } + + /** + * In closing fence, after optional whitespace, at sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function beforeSequenceClose(code) { + if (code === marker) { + effects.enter('codeFencedFenceSequence') + return sequenceClose(code) + } + return nok(code) + } + + /** + * In closing fence sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + if (code === marker) { + size++ + effects.consume(code) + return sequenceClose + } + if (size >= sizeOpen) { + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code) + : sequenceCloseAfter(code) + } + return nok(code) + } + + /** + * After closing fence sequence, after optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceCloseAfter(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return ok(code) + } + return nok(code) + } + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuation(effects, ok, nok) { + const self = this + return start + + /** + * + * + * @type {State} + */ + function start(code) { + if (code === null) { + return nok(code) + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineStart + } + + /** + * + * + * @type {State} + */ + function lineStart(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/character-entities/index.js +/** + * Map of named character references. + * + * @type {Record} + */ +const characterEntities = { + AElig: 'Æ', + AMP: '&', + Aacute: 'Á', + Abreve: 'Ă', + Acirc: 'Â', + Acy: 'А', + Afr: '𝔄', + Agrave: 'À', + Alpha: 'Α', + Amacr: 'Ā', + And: '⩓', + Aogon: 'Ą', + Aopf: '𝔸', + ApplyFunction: '⁡', + Aring: 'Å', + Ascr: '𝒜', + Assign: '≔', + Atilde: 'Ã', + Auml: 'Ä', + Backslash: '∖', + Barv: '⫧', + Barwed: '⌆', + Bcy: 'Б', + Because: '∵', + Bernoullis: 'ℬ', + Beta: 'Β', + Bfr: '𝔅', + Bopf: '𝔹', + Breve: '˘', + Bscr: 'ℬ', + Bumpeq: '≎', + CHcy: 'Ч', + COPY: '©', + Cacute: 'Ć', + Cap: '⋒', + CapitalDifferentialD: 'ⅅ', + Cayleys: 'ℭ', + Ccaron: 'Č', + Ccedil: 'Ç', + Ccirc: 'Ĉ', + Cconint: '∰', + Cdot: 'Ċ', + Cedilla: '¸', + CenterDot: '·', + Cfr: 'ℭ', + Chi: 'Χ', + CircleDot: '⊙', + CircleMinus: '⊖', + CirclePlus: '⊕', + CircleTimes: '⊗', + ClockwiseContourIntegral: '∲', + CloseCurlyDoubleQuote: '”', + CloseCurlyQuote: '’', + Colon: '∷', + Colone: '⩴', + Congruent: '≡', + Conint: '∯', + ContourIntegral: '∮', + Copf: 'ℂ', + Coproduct: '∐', + CounterClockwiseContourIntegral: '∳', + Cross: '⨯', + Cscr: '𝒞', + Cup: '⋓', + CupCap: '≍', + DD: 'ⅅ', + DDotrahd: '⤑', + DJcy: 'Ђ', + DScy: 'Ѕ', + DZcy: 'Џ', + Dagger: '‡', + Darr: '↡', + Dashv: '⫤', + Dcaron: 'Ď', + Dcy: 'Д', + Del: '∇', + Delta: 'Δ', + Dfr: '𝔇', + DiacriticalAcute: '´', + DiacriticalDot: '˙', + DiacriticalDoubleAcute: '˝', + DiacriticalGrave: '`', + DiacriticalTilde: '˜', + Diamond: '⋄', + DifferentialD: 'ⅆ', + Dopf: '𝔻', + Dot: '¨', + DotDot: '⃜', + DotEqual: '≐', + DoubleContourIntegral: '∯', + DoubleDot: '¨', + DoubleDownArrow: '⇓', + DoubleLeftArrow: '⇐', + DoubleLeftRightArrow: '⇔', + DoubleLeftTee: '⫤', + DoubleLongLeftArrow: '⟸', + DoubleLongLeftRightArrow: '⟺', + DoubleLongRightArrow: '⟹', + DoubleRightArrow: '⇒', + DoubleRightTee: '⊨', + DoubleUpArrow: '⇑', + DoubleUpDownArrow: '⇕', + DoubleVerticalBar: '∥', + DownArrow: '↓', + DownArrowBar: '⤓', + DownArrowUpArrow: '⇵', + DownBreve: '̑', + DownLeftRightVector: '⥐', + DownLeftTeeVector: '⥞', + DownLeftVector: '↽', + DownLeftVectorBar: '⥖', + DownRightTeeVector: '⥟', + DownRightVector: '⇁', + DownRightVectorBar: '⥗', + DownTee: '⊤', + DownTeeArrow: '↧', + Downarrow: '⇓', + Dscr: '𝒟', + Dstrok: 'Đ', + ENG: 'Ŋ', + ETH: 'Ð', + Eacute: 'É', + Ecaron: 'Ě', + Ecirc: 'Ê', + Ecy: 'Э', + Edot: 'Ė', + Efr: '𝔈', + Egrave: 'È', + Element: '∈', + Emacr: 'Ē', + EmptySmallSquare: '◻', + EmptyVerySmallSquare: '▫', + Eogon: 'Ę', + Eopf: '𝔼', + Epsilon: 'Ε', + Equal: '⩵', + EqualTilde: '≂', + Equilibrium: '⇌', + Escr: 'ℰ', + Esim: '⩳', + Eta: 'Η', + Euml: 'Ë', + Exists: '∃', + ExponentialE: 'ⅇ', + Fcy: 'Ф', + Ffr: '𝔉', + FilledSmallSquare: '◼', + FilledVerySmallSquare: '▪', + Fopf: '𝔽', + ForAll: '∀', + Fouriertrf: 'ℱ', + Fscr: 'ℱ', + GJcy: 'Ѓ', + GT: '>', + Gamma: 'Γ', + Gammad: 'Ϝ', + Gbreve: 'Ğ', + Gcedil: 'Ģ', + Gcirc: 'Ĝ', + Gcy: 'Г', + Gdot: 'Ġ', + Gfr: '𝔊', + Gg: '⋙', + Gopf: '𝔾', + GreaterEqual: '≥', + GreaterEqualLess: '⋛', + GreaterFullEqual: '≧', + GreaterGreater: '⪢', + GreaterLess: '≷', + GreaterSlantEqual: '⩾', + GreaterTilde: '≳', + Gscr: '𝒢', + Gt: '≫', + HARDcy: 'Ъ', + Hacek: 'ˇ', + Hat: '^', + Hcirc: 'Ĥ', + Hfr: 'ℌ', + HilbertSpace: 'ℋ', + Hopf: 'ℍ', + HorizontalLine: '─', + Hscr: 'ℋ', + Hstrok: 'Ħ', + HumpDownHump: '≎', + HumpEqual: '≏', + IEcy: 'Е', + IJlig: 'IJ', + IOcy: 'Ё', + Iacute: 'Í', + Icirc: 'Î', + Icy: 'И', + Idot: 'İ', + Ifr: 'ℑ', + Igrave: 'Ì', + Im: 'ℑ', + Imacr: 'Ī', + ImaginaryI: 'ⅈ', + Implies: '⇒', + Int: '∬', + Integral: '∫', + Intersection: '⋂', + InvisibleComma: '⁣', + InvisibleTimes: '⁢', + Iogon: 'Į', + Iopf: '𝕀', + Iota: 'Ι', + Iscr: 'ℐ', + Itilde: 'Ĩ', + Iukcy: 'І', + Iuml: 'Ï', + Jcirc: 'Ĵ', + Jcy: 'Й', + Jfr: '𝔍', + Jopf: '𝕁', + Jscr: '𝒥', + Jsercy: 'Ј', + Jukcy: 'Є', + KHcy: 'Х', + KJcy: 'Ќ', + Kappa: 'Κ', + Kcedil: 'Ķ', + Kcy: 'К', + Kfr: '𝔎', + Kopf: '𝕂', + Kscr: '𝒦', + LJcy: 'Љ', + LT: '<', + Lacute: 'Ĺ', + Lambda: 'Λ', + Lang: '⟪', + Laplacetrf: 'ℒ', + Larr: '↞', + Lcaron: 'Ľ', + Lcedil: 'Ļ', + Lcy: 'Л', + LeftAngleBracket: '⟨', + LeftArrow: '←', + LeftArrowBar: '⇤', + LeftArrowRightArrow: '⇆', + LeftCeiling: '⌈', + LeftDoubleBracket: '⟦', + LeftDownTeeVector: '⥡', + LeftDownVector: '⇃', + LeftDownVectorBar: '⥙', + LeftFloor: '⌊', + LeftRightArrow: '↔', + LeftRightVector: '⥎', + LeftTee: '⊣', + LeftTeeArrow: '↤', + LeftTeeVector: '⥚', + LeftTriangle: '⊲', + LeftTriangleBar: '⧏', + LeftTriangleEqual: '⊴', + LeftUpDownVector: '⥑', + LeftUpTeeVector: '⥠', + LeftUpVector: '↿', + LeftUpVectorBar: '⥘', + LeftVector: '↼', + LeftVectorBar: '⥒', + Leftarrow: '⇐', + Leftrightarrow: '⇔', + LessEqualGreater: '⋚', + LessFullEqual: '≦', + LessGreater: '≶', + LessLess: '⪡', + LessSlantEqual: '⩽', + LessTilde: '≲', + Lfr: '𝔏', + Ll: '⋘', + Lleftarrow: '⇚', + Lmidot: 'Ŀ', + LongLeftArrow: '⟵', + LongLeftRightArrow: '⟷', + LongRightArrow: '⟶', + Longleftarrow: '⟸', + Longleftrightarrow: '⟺', + Longrightarrow: '⟹', + Lopf: '𝕃', + LowerLeftArrow: '↙', + LowerRightArrow: '↘', + Lscr: 'ℒ', + Lsh: '↰', + Lstrok: 'Ł', + Lt: '≪', + Map: '⤅', + Mcy: 'М', + MediumSpace: ' ', + Mellintrf: 'ℳ', + Mfr: '𝔐', + MinusPlus: '∓', + Mopf: '𝕄', + Mscr: 'ℳ', + Mu: 'Μ', + NJcy: 'Њ', + Nacute: 'Ń', + Ncaron: 'Ň', + Ncedil: 'Ņ', + Ncy: 'Н', + NegativeMediumSpace: '​', + NegativeThickSpace: '​', + NegativeThinSpace: '​', + NegativeVeryThinSpace: '​', + NestedGreaterGreater: '≫', + NestedLessLess: '≪', + NewLine: '\n', + Nfr: '𝔑', + NoBreak: '⁠', + NonBreakingSpace: ' ', + Nopf: 'ℕ', + Not: '⫬', + NotCongruent: '≢', + NotCupCap: '≭', + NotDoubleVerticalBar: '∦', + NotElement: '∉', + NotEqual: '≠', + NotEqualTilde: '≂̸', + NotExists: '∄', + NotGreater: '≯', + NotGreaterEqual: '≱', + NotGreaterFullEqual: '≧̸', + NotGreaterGreater: '≫̸', + NotGreaterLess: '≹', + NotGreaterSlantEqual: '⩾̸', + NotGreaterTilde: '≵', + NotHumpDownHump: '≎̸', + NotHumpEqual: '≏̸', + NotLeftTriangle: '⋪', + NotLeftTriangleBar: '⧏̸', + NotLeftTriangleEqual: '⋬', + NotLess: '≮', + NotLessEqual: '≰', + NotLessGreater: '≸', + NotLessLess: '≪̸', + NotLessSlantEqual: '⩽̸', + NotLessTilde: '≴', + NotNestedGreaterGreater: '⪢̸', + NotNestedLessLess: '⪡̸', + NotPrecedes: '⊀', + NotPrecedesEqual: '⪯̸', + NotPrecedesSlantEqual: '⋠', + NotReverseElement: '∌', + NotRightTriangle: '⋫', + NotRightTriangleBar: '⧐̸', + NotRightTriangleEqual: '⋭', + NotSquareSubset: '⊏̸', + NotSquareSubsetEqual: '⋢', + NotSquareSuperset: '⊐̸', + NotSquareSupersetEqual: '⋣', + NotSubset: '⊂⃒', + NotSubsetEqual: '⊈', + NotSucceeds: '⊁', + NotSucceedsEqual: '⪰̸', + NotSucceedsSlantEqual: '⋡', + NotSucceedsTilde: '≿̸', + NotSuperset: '⊃⃒', + NotSupersetEqual: '⊉', + NotTilde: '≁', + NotTildeEqual: '≄', + NotTildeFullEqual: '≇', + NotTildeTilde: '≉', + NotVerticalBar: '∤', + Nscr: '𝒩', + Ntilde: 'Ñ', + Nu: 'Ν', + OElig: 'Œ', + Oacute: 'Ó', + Ocirc: 'Ô', + Ocy: 'О', + Odblac: 'Ő', + Ofr: '𝔒', + Ograve: 'Ò', + Omacr: 'Ō', + Omega: 'Ω', + Omicron: 'Ο', + Oopf: '𝕆', + OpenCurlyDoubleQuote: '“', + OpenCurlyQuote: '‘', + Or: '⩔', + Oscr: '𝒪', + Oslash: 'Ø', + Otilde: 'Õ', + Otimes: '⨷', + Ouml: 'Ö', + OverBar: '‾', + OverBrace: '⏞', + OverBracket: '⎴', + OverParenthesis: '⏜', + PartialD: '∂', + Pcy: 'П', + Pfr: '𝔓', + Phi: 'Φ', + Pi: 'Π', + PlusMinus: '±', + Poincareplane: 'ℌ', + Popf: 'ℙ', + Pr: '⪻', + Precedes: '≺', + PrecedesEqual: '⪯', + PrecedesSlantEqual: '≼', + PrecedesTilde: '≾', + Prime: '″', + Product: '∏', + Proportion: '∷', + Proportional: '∝', + Pscr: '𝒫', + Psi: 'Ψ', + QUOT: '"', + Qfr: '𝔔', + Qopf: 'ℚ', + Qscr: '𝒬', + RBarr: '⤐', + REG: '®', + Racute: 'Ŕ', + Rang: '⟫', + Rarr: '↠', + Rarrtl: '⤖', + Rcaron: 'Ř', + Rcedil: 'Ŗ', + Rcy: 'Р', + Re: 'ℜ', + ReverseElement: '∋', + ReverseEquilibrium: '⇋', + ReverseUpEquilibrium: '⥯', + Rfr: 'ℜ', + Rho: 'Ρ', + RightAngleBracket: '⟩', + RightArrow: '→', + RightArrowBar: '⇥', + RightArrowLeftArrow: '⇄', + RightCeiling: '⌉', + RightDoubleBracket: '⟧', + RightDownTeeVector: '⥝', + RightDownVector: '⇂', + RightDownVectorBar: '⥕', + RightFloor: '⌋', + RightTee: '⊢', + RightTeeArrow: '↦', + RightTeeVector: '⥛', + RightTriangle: '⊳', + RightTriangleBar: '⧐', + RightTriangleEqual: '⊵', + RightUpDownVector: '⥏', + RightUpTeeVector: '⥜', + RightUpVector: '↾', + RightUpVectorBar: '⥔', + RightVector: '⇀', + RightVectorBar: '⥓', + Rightarrow: '⇒', + Ropf: 'ℝ', + RoundImplies: '⥰', + Rrightarrow: '⇛', + Rscr: 'ℛ', + Rsh: '↱', + RuleDelayed: '⧴', + SHCHcy: 'Щ', + SHcy: 'Ш', + SOFTcy: 'Ь', + Sacute: 'Ś', + Sc: '⪼', + Scaron: 'Š', + Scedil: 'Ş', + Scirc: 'Ŝ', + Scy: 'С', + Sfr: '𝔖', + ShortDownArrow: '↓', + ShortLeftArrow: '←', + ShortRightArrow: '→', + ShortUpArrow: '↑', + Sigma: 'Σ', + SmallCircle: '∘', + Sopf: '𝕊', + Sqrt: '√', + Square: '□', + SquareIntersection: '⊓', + SquareSubset: '⊏', + SquareSubsetEqual: '⊑', + SquareSuperset: '⊐', + SquareSupersetEqual: '⊒', + SquareUnion: '⊔', + Sscr: '𝒮', + Star: '⋆', + Sub: '⋐', + Subset: '⋐', + SubsetEqual: '⊆', + Succeeds: '≻', + SucceedsEqual: '⪰', + SucceedsSlantEqual: '≽', + SucceedsTilde: '≿', + SuchThat: '∋', + Sum: '∑', + Sup: '⋑', + Superset: '⊃', + SupersetEqual: '⊇', + Supset: '⋑', + THORN: 'Þ', + TRADE: '™', + TSHcy: 'Ћ', + TScy: 'Ц', + Tab: '\t', + Tau: 'Τ', + Tcaron: 'Ť', + Tcedil: 'Ţ', + Tcy: 'Т', + Tfr: '𝔗', + Therefore: '∴', + Theta: 'Θ', + ThickSpace: '  ', + ThinSpace: ' ', + Tilde: '∼', + TildeEqual: '≃', + TildeFullEqual: '≅', + TildeTilde: '≈', + Topf: '𝕋', + TripleDot: '⃛', + Tscr: '𝒯', + Tstrok: 'Ŧ', + Uacute: 'Ú', + Uarr: '↟', + Uarrocir: '⥉', + Ubrcy: 'Ў', + Ubreve: 'Ŭ', + Ucirc: 'Û', + Ucy: 'У', + Udblac: 'Ű', + Ufr: '𝔘', + Ugrave: 'Ù', + Umacr: 'Ū', + UnderBar: '_', + UnderBrace: '⏟', + UnderBracket: '⎵', + UnderParenthesis: '⏝', + Union: '⋃', + UnionPlus: '⊎', + Uogon: 'Ų', + Uopf: '𝕌', + UpArrow: '↑', + UpArrowBar: '⤒', + UpArrowDownArrow: '⇅', + UpDownArrow: '↕', + UpEquilibrium: '⥮', + UpTee: '⊥', + UpTeeArrow: '↥', + Uparrow: '⇑', + Updownarrow: '⇕', + UpperLeftArrow: '↖', + UpperRightArrow: '↗', + Upsi: 'ϒ', + Upsilon: 'Υ', + Uring: 'Ů', + Uscr: '𝒰', + Utilde: 'Ũ', + Uuml: 'Ü', + VDash: '⊫', + Vbar: '⫫', + Vcy: 'В', + Vdash: '⊩', + Vdashl: '⫦', + Vee: '⋁', + Verbar: '‖', + Vert: '‖', + VerticalBar: '∣', + VerticalLine: '|', + VerticalSeparator: '❘', + VerticalTilde: '≀', + VeryThinSpace: ' ', + Vfr: '𝔙', + Vopf: '𝕍', + Vscr: '𝒱', + Vvdash: '⊪', + Wcirc: 'Ŵ', + Wedge: '⋀', + Wfr: '𝔚', + Wopf: '𝕎', + Wscr: '𝒲', + Xfr: '𝔛', + Xi: 'Ξ', + Xopf: '𝕏', + Xscr: '𝒳', + YAcy: 'Я', + YIcy: 'Ї', + YUcy: 'Ю', + Yacute: 'Ý', + Ycirc: 'Ŷ', + Ycy: 'Ы', + Yfr: '𝔜', + Yopf: '𝕐', + Yscr: '𝒴', + Yuml: 'Ÿ', + ZHcy: 'Ж', + Zacute: 'Ź', + Zcaron: 'Ž', + Zcy: 'З', + Zdot: 'Ż', + ZeroWidthSpace: '​', + Zeta: 'Ζ', + Zfr: 'ℨ', + Zopf: 'ℤ', + Zscr: '𝒵', + aacute: 'á', + abreve: 'ă', + ac: '∾', + acE: '∾̳', + acd: '∿', + acirc: 'â', + acute: '´', + acy: 'а', + aelig: 'æ', + af: '⁡', + afr: '𝔞', + agrave: 'à', + alefsym: 'ℵ', + aleph: 'ℵ', + alpha: 'α', + amacr: 'ā', + amalg: '⨿', + amp: '&', + and: '∧', + andand: '⩕', + andd: '⩜', + andslope: '⩘', + andv: '⩚', + ang: '∠', + ange: '⦤', + angle: '∠', + angmsd: '∡', + angmsdaa: '⦨', + angmsdab: '⦩', + angmsdac: '⦪', + angmsdad: '⦫', + angmsdae: '⦬', + angmsdaf: '⦭', + angmsdag: '⦮', + angmsdah: '⦯', + angrt: '∟', + angrtvb: '⊾', + angrtvbd: '⦝', + angsph: '∢', + angst: 'Å', + angzarr: '⍼', + aogon: 'ą', + aopf: '𝕒', + ap: '≈', + apE: '⩰', + apacir: '⩯', + ape: '≊', + apid: '≋', + apos: "'", + approx: '≈', + approxeq: '≊', + aring: 'å', + ascr: '𝒶', + ast: '*', + asymp: '≈', + asympeq: '≍', + atilde: 'ã', + auml: 'ä', + awconint: '∳', + awint: '⨑', + bNot: '⫭', + backcong: '≌', + backepsilon: '϶', + backprime: '‵', + backsim: '∽', + backsimeq: '⋍', + barvee: '⊽', + barwed: '⌅', + barwedge: '⌅', + bbrk: '⎵', + bbrktbrk: '⎶', + bcong: '≌', + bcy: 'б', + bdquo: '„', + becaus: '∵', + because: '∵', + bemptyv: '⦰', + bepsi: '϶', + bernou: 'ℬ', + beta: 'β', + beth: 'ℶ', + between: '≬', + bfr: '𝔟', + bigcap: '⋂', + bigcirc: '◯', + bigcup: '⋃', + bigodot: '⨀', + bigoplus: '⨁', + bigotimes: '⨂', + bigsqcup: '⨆', + bigstar: '★', + bigtriangledown: '▽', + bigtriangleup: '△', + biguplus: '⨄', + bigvee: '⋁', + bigwedge: '⋀', + bkarow: '⤍', + blacklozenge: '⧫', + blacksquare: '▪', + blacktriangle: '▴', + blacktriangledown: '▾', + blacktriangleleft: '◂', + blacktriangleright: '▸', + blank: '␣', + blk12: '▒', + blk14: '░', + blk34: '▓', + block: '█', + bne: '=⃥', + bnequiv: '≡⃥', + bnot: '⌐', + bopf: '𝕓', + bot: '⊥', + bottom: '⊥', + bowtie: '⋈', + boxDL: '╗', + boxDR: '╔', + boxDl: '╖', + boxDr: '╓', + boxH: '═', + boxHD: '╦', + boxHU: '╩', + boxHd: '╤', + boxHu: '╧', + boxUL: '╝', + boxUR: '╚', + boxUl: '╜', + boxUr: '╙', + boxV: '║', + boxVH: '╬', + boxVL: '╣', + boxVR: '╠', + boxVh: '╫', + boxVl: '╢', + boxVr: '╟', + boxbox: '⧉', + boxdL: '╕', + boxdR: '╒', + boxdl: '┐', + boxdr: '┌', + boxh: '─', + boxhD: '╥', + boxhU: '╨', + boxhd: '┬', + boxhu: '┴', + boxminus: '⊟', + boxplus: '⊞', + boxtimes: '⊠', + boxuL: '╛', + boxuR: '╘', + boxul: '┘', + boxur: '└', + boxv: '│', + boxvH: '╪', + boxvL: '╡', + boxvR: '╞', + boxvh: '┼', + boxvl: '┤', + boxvr: '├', + bprime: '‵', + breve: '˘', + brvbar: '¦', + bscr: '𝒷', + bsemi: '⁏', + bsim: '∽', + bsime: '⋍', + bsol: '\\', + bsolb: '⧅', + bsolhsub: '⟈', + bull: '•', + bullet: '•', + bump: '≎', + bumpE: '⪮', + bumpe: '≏', + bumpeq: '≏', + cacute: 'ć', + cap: '∩', + capand: '⩄', + capbrcup: '⩉', + capcap: '⩋', + capcup: '⩇', + capdot: '⩀', + caps: '∩︀', + caret: '⁁', + caron: 'ˇ', + ccaps: '⩍', + ccaron: 'č', + ccedil: 'ç', + ccirc: 'ĉ', + ccups: '⩌', + ccupssm: '⩐', + cdot: 'ċ', + cedil: '¸', + cemptyv: '⦲', + cent: '¢', + centerdot: '·', + cfr: '𝔠', + chcy: 'ч', + check: '✓', + checkmark: '✓', + chi: 'χ', + cir: '○', + cirE: '⧃', + circ: 'ˆ', + circeq: '≗', + circlearrowleft: '↺', + circlearrowright: '↻', + circledR: '®', + circledS: 'Ⓢ', + circledast: '⊛', + circledcirc: '⊚', + circleddash: '⊝', + cire: '≗', + cirfnint: '⨐', + cirmid: '⫯', + cirscir: '⧂', + clubs: '♣', + clubsuit: '♣', + colon: ':', + colone: '≔', + coloneq: '≔', + comma: ',', + commat: '@', + comp: '∁', + compfn: '∘', + complement: '∁', + complexes: 'ℂ', + cong: '≅', + congdot: '⩭', + conint: '∮', + copf: '𝕔', + coprod: '∐', + copy: '©', + copysr: '℗', + crarr: '↵', + cross: '✗', + cscr: '𝒸', + csub: '⫏', + csube: '⫑', + csup: '⫐', + csupe: '⫒', + ctdot: '⋯', + cudarrl: '⤸', + cudarrr: '⤵', + cuepr: '⋞', + cuesc: '⋟', + cularr: '↶', + cularrp: '⤽', + cup: '∪', + cupbrcap: '⩈', + cupcap: '⩆', + cupcup: '⩊', + cupdot: '⊍', + cupor: '⩅', + cups: '∪︀', + curarr: '↷', + curarrm: '⤼', + curlyeqprec: '⋞', + curlyeqsucc: '⋟', + curlyvee: '⋎', + curlywedge: '⋏', + curren: '¤', + curvearrowleft: '↶', + curvearrowright: '↷', + cuvee: '⋎', + cuwed: '⋏', + cwconint: '∲', + cwint: '∱', + cylcty: '⌭', + dArr: '⇓', + dHar: '⥥', + dagger: '†', + daleth: 'ℸ', + darr: '↓', + dash: '‐', + dashv: '⊣', + dbkarow: '⤏', + dblac: '˝', + dcaron: 'ď', + dcy: 'д', + dd: 'ⅆ', + ddagger: '‡', + ddarr: '⇊', + ddotseq: '⩷', + deg: '°', + delta: 'δ', + demptyv: '⦱', + dfisht: '⥿', + dfr: '𝔡', + dharl: '⇃', + dharr: '⇂', + diam: '⋄', + diamond: '⋄', + diamondsuit: '♦', + diams: '♦', + die: '¨', + digamma: 'ϝ', + disin: '⋲', + div: '÷', + divide: '÷', + divideontimes: '⋇', + divonx: '⋇', + djcy: 'ђ', + dlcorn: '⌞', + dlcrop: '⌍', + dollar: '$', + dopf: '𝕕', + dot: '˙', + doteq: '≐', + doteqdot: '≑', + dotminus: '∸', + dotplus: '∔', + dotsquare: '⊡', + doublebarwedge: '⌆', + downarrow: '↓', + downdownarrows: '⇊', + downharpoonleft: '⇃', + downharpoonright: '⇂', + drbkarow: '⤐', + drcorn: '⌟', + drcrop: '⌌', + dscr: '𝒹', + dscy: 'ѕ', + dsol: '⧶', + dstrok: 'đ', + dtdot: '⋱', + dtri: '▿', + dtrif: '▾', + duarr: '⇵', + duhar: '⥯', + dwangle: '⦦', + dzcy: 'џ', + dzigrarr: '⟿', + eDDot: '⩷', + eDot: '≑', + eacute: 'é', + easter: '⩮', + ecaron: 'ě', + ecir: '≖', + ecirc: 'ê', + ecolon: '≕', + ecy: 'э', + edot: 'ė', + ee: 'ⅇ', + efDot: '≒', + efr: '𝔢', + eg: '⪚', + egrave: 'è', + egs: '⪖', + egsdot: '⪘', + el: '⪙', + elinters: '⏧', + ell: 'ℓ', + els: '⪕', + elsdot: '⪗', + emacr: 'ē', + empty: '∅', + emptyset: '∅', + emptyv: '∅', + emsp13: ' ', + emsp14: ' ', + emsp: ' ', + eng: 'ŋ', + ensp: ' ', + eogon: 'ę', + eopf: '𝕖', + epar: '⋕', + eparsl: '⧣', + eplus: '⩱', + epsi: 'ε', + epsilon: 'ε', + epsiv: 'ϵ', + eqcirc: '≖', + eqcolon: '≕', + eqsim: '≂', + eqslantgtr: '⪖', + eqslantless: '⪕', + equals: '=', + equest: '≟', + equiv: '≡', + equivDD: '⩸', + eqvparsl: '⧥', + erDot: '≓', + erarr: '⥱', + escr: 'ℯ', + esdot: '≐', + esim: '≂', + eta: 'η', + eth: 'ð', + euml: 'ë', + euro: '€', + excl: '!', + exist: '∃', + expectation: 'ℰ', + exponentiale: 'ⅇ', + fallingdotseq: '≒', + fcy: 'ф', + female: '♀', + ffilig: 'ffi', + fflig: 'ff', + ffllig: 'ffl', + ffr: '𝔣', + filig: 'fi', + fjlig: 'fj', + flat: '♭', + fllig: 'fl', + fltns: '▱', + fnof: 'ƒ', + fopf: '𝕗', + forall: '∀', + fork: '⋔', + forkv: '⫙', + fpartint: '⨍', + frac12: '½', + frac13: '⅓', + frac14: '¼', + frac15: '⅕', + frac16: '⅙', + frac18: '⅛', + frac23: '⅔', + frac25: '⅖', + frac34: '¾', + frac35: '⅗', + frac38: '⅜', + frac45: '⅘', + frac56: '⅚', + frac58: '⅝', + frac78: '⅞', + frasl: '⁄', + frown: '⌢', + fscr: '𝒻', + gE: '≧', + gEl: '⪌', + gacute: 'ǵ', + gamma: 'γ', + gammad: 'ϝ', + gap: '⪆', + gbreve: 'ğ', + gcirc: 'ĝ', + gcy: 'г', + gdot: 'ġ', + ge: '≥', + gel: '⋛', + geq: '≥', + geqq: '≧', + geqslant: '⩾', + ges: '⩾', + gescc: '⪩', + gesdot: '⪀', + gesdoto: '⪂', + gesdotol: '⪄', + gesl: '⋛︀', + gesles: '⪔', + gfr: '𝔤', + gg: '≫', + ggg: '⋙', + gimel: 'ℷ', + gjcy: 'ѓ', + gl: '≷', + glE: '⪒', + gla: '⪥', + glj: '⪤', + gnE: '≩', + gnap: '⪊', + gnapprox: '⪊', + gne: '⪈', + gneq: '⪈', + gneqq: '≩', + gnsim: '⋧', + gopf: '𝕘', + grave: '`', + gscr: 'ℊ', + gsim: '≳', + gsime: '⪎', + gsiml: '⪐', + gt: '>', + gtcc: '⪧', + gtcir: '⩺', + gtdot: '⋗', + gtlPar: '⦕', + gtquest: '⩼', + gtrapprox: '⪆', + gtrarr: '⥸', + gtrdot: '⋗', + gtreqless: '⋛', + gtreqqless: '⪌', + gtrless: '≷', + gtrsim: '≳', + gvertneqq: '≩︀', + gvnE: '≩︀', + hArr: '⇔', + hairsp: ' ', + half: '½', + hamilt: 'ℋ', + hardcy: 'ъ', + harr: '↔', + harrcir: '⥈', + harrw: '↭', + hbar: 'ℏ', + hcirc: 'ĥ', + hearts: '♥', + heartsuit: '♥', + hellip: '…', + hercon: '⊹', + hfr: '𝔥', + hksearow: '⤥', + hkswarow: '⤦', + hoarr: '⇿', + homtht: '∻', + hookleftarrow: '↩', + hookrightarrow: '↪', + hopf: '𝕙', + horbar: '―', + hscr: '𝒽', + hslash: 'ℏ', + hstrok: 'ħ', + hybull: '⁃', + hyphen: '‐', + iacute: 'í', + ic: '⁣', + icirc: 'î', + icy: 'и', + iecy: 'е', + iexcl: '¡', + iff: '⇔', + ifr: '𝔦', + igrave: 'ì', + ii: 'ⅈ', + iiiint: '⨌', + iiint: '∭', + iinfin: '⧜', + iiota: '℩', + ijlig: 'ij', + imacr: 'ī', + image: 'ℑ', + imagline: 'ℐ', + imagpart: 'ℑ', + imath: 'ı', + imof: '⊷', + imped: 'Ƶ', + in: '∈', + incare: '℅', + infin: '∞', + infintie: '⧝', + inodot: 'ı', + int: '∫', + intcal: '⊺', + integers: 'ℤ', + intercal: '⊺', + intlarhk: '⨗', + intprod: '⨼', + iocy: 'ё', + iogon: 'į', + iopf: '𝕚', + iota: 'ι', + iprod: '⨼', + iquest: '¿', + iscr: '𝒾', + isin: '∈', + isinE: '⋹', + isindot: '⋵', + isins: '⋴', + isinsv: '⋳', + isinv: '∈', + it: '⁢', + itilde: 'ĩ', + iukcy: 'і', + iuml: 'ï', + jcirc: 'ĵ', + jcy: 'й', + jfr: '𝔧', + jmath: 'ȷ', + jopf: '𝕛', + jscr: '𝒿', + jsercy: 'ј', + jukcy: 'є', + kappa: 'κ', + kappav: 'ϰ', + kcedil: 'ķ', + kcy: 'к', + kfr: '𝔨', + kgreen: 'ĸ', + khcy: 'х', + kjcy: 'ќ', + kopf: '𝕜', + kscr: '𝓀', + lAarr: '⇚', + lArr: '⇐', + lAtail: '⤛', + lBarr: '⤎', + lE: '≦', + lEg: '⪋', + lHar: '⥢', + lacute: 'ĺ', + laemptyv: '⦴', + lagran: 'ℒ', + lambda: 'λ', + lang: '⟨', + langd: '⦑', + langle: '⟨', + lap: '⪅', + laquo: '«', + larr: '←', + larrb: '⇤', + larrbfs: '⤟', + larrfs: '⤝', + larrhk: '↩', + larrlp: '↫', + larrpl: '⤹', + larrsim: '⥳', + larrtl: '↢', + lat: '⪫', + latail: '⤙', + late: '⪭', + lates: '⪭︀', + lbarr: '⤌', + lbbrk: '❲', + lbrace: '{', + lbrack: '[', + lbrke: '⦋', + lbrksld: '⦏', + lbrkslu: '⦍', + lcaron: 'ľ', + lcedil: 'ļ', + lceil: '⌈', + lcub: '{', + lcy: 'л', + ldca: '⤶', + ldquo: '“', + ldquor: '„', + ldrdhar: '⥧', + ldrushar: '⥋', + ldsh: '↲', + le: '≤', + leftarrow: '←', + leftarrowtail: '↢', + leftharpoondown: '↽', + leftharpoonup: '↼', + leftleftarrows: '⇇', + leftrightarrow: '↔', + leftrightarrows: '⇆', + leftrightharpoons: '⇋', + leftrightsquigarrow: '↭', + leftthreetimes: '⋋', + leg: '⋚', + leq: '≤', + leqq: '≦', + leqslant: '⩽', + les: '⩽', + lescc: '⪨', + lesdot: '⩿', + lesdoto: '⪁', + lesdotor: '⪃', + lesg: '⋚︀', + lesges: '⪓', + lessapprox: '⪅', + lessdot: '⋖', + lesseqgtr: '⋚', + lesseqqgtr: '⪋', + lessgtr: '≶', + lesssim: '≲', + lfisht: '⥼', + lfloor: '⌊', + lfr: '𝔩', + lg: '≶', + lgE: '⪑', + lhard: '↽', + lharu: '↼', + lharul: '⥪', + lhblk: '▄', + ljcy: 'љ', + ll: '≪', + llarr: '⇇', + llcorner: '⌞', + llhard: '⥫', + lltri: '◺', + lmidot: 'ŀ', + lmoust: '⎰', + lmoustache: '⎰', + lnE: '≨', + lnap: '⪉', + lnapprox: '⪉', + lne: '⪇', + lneq: '⪇', + lneqq: '≨', + lnsim: '⋦', + loang: '⟬', + loarr: '⇽', + lobrk: '⟦', + longleftarrow: '⟵', + longleftrightarrow: '⟷', + longmapsto: '⟼', + longrightarrow: '⟶', + looparrowleft: '↫', + looparrowright: '↬', + lopar: '⦅', + lopf: '𝕝', + loplus: '⨭', + lotimes: '⨴', + lowast: '∗', + lowbar: '_', + loz: '◊', + lozenge: '◊', + lozf: '⧫', + lpar: '(', + lparlt: '⦓', + lrarr: '⇆', + lrcorner: '⌟', + lrhar: '⇋', + lrhard: '⥭', + lrm: '‎', + lrtri: '⊿', + lsaquo: '‹', + lscr: '𝓁', + lsh: '↰', + lsim: '≲', + lsime: '⪍', + lsimg: '⪏', + lsqb: '[', + lsquo: '‘', + lsquor: '‚', + lstrok: 'ł', + lt: '<', + ltcc: '⪦', + ltcir: '⩹', + ltdot: '⋖', + lthree: '⋋', + ltimes: '⋉', + ltlarr: '⥶', + ltquest: '⩻', + ltrPar: '⦖', + ltri: '◃', + ltrie: '⊴', + ltrif: '◂', + lurdshar: '⥊', + luruhar: '⥦', + lvertneqq: '≨︀', + lvnE: '≨︀', + mDDot: '∺', + macr: '¯', + male: '♂', + malt: '✠', + maltese: '✠', + map: '↦', + mapsto: '↦', + mapstodown: '↧', + mapstoleft: '↤', + mapstoup: '↥', + marker: '▮', + mcomma: '⨩', + mcy: 'м', + mdash: '—', + measuredangle: '∡', + mfr: '𝔪', + mho: '℧', + micro: 'µ', + mid: '∣', + midast: '*', + midcir: '⫰', + middot: '·', + minus: '−', + minusb: '⊟', + minusd: '∸', + minusdu: '⨪', + mlcp: '⫛', + mldr: '…', + mnplus: '∓', + models: '⊧', + mopf: '𝕞', + mp: '∓', + mscr: '𝓂', + mstpos: '∾', + mu: 'μ', + multimap: '⊸', + mumap: '⊸', + nGg: '⋙̸', + nGt: '≫⃒', + nGtv: '≫̸', + nLeftarrow: '⇍', + nLeftrightarrow: '⇎', + nLl: '⋘̸', + nLt: '≪⃒', + nLtv: '≪̸', + nRightarrow: '⇏', + nVDash: '⊯', + nVdash: '⊮', + nabla: '∇', + nacute: 'ń', + nang: '∠⃒', + nap: '≉', + napE: '⩰̸', + napid: '≋̸', + napos: 'ʼn', + napprox: '≉', + natur: '♮', + natural: '♮', + naturals: 'ℕ', + nbsp: ' ', + nbump: '≎̸', + nbumpe: '≏̸', + ncap: '⩃', + ncaron: 'ň', + ncedil: 'ņ', + ncong: '≇', + ncongdot: '⩭̸', + ncup: '⩂', + ncy: 'н', + ndash: '–', + ne: '≠', + neArr: '⇗', + nearhk: '⤤', + nearr: '↗', + nearrow: '↗', + nedot: '≐̸', + nequiv: '≢', + nesear: '⤨', + nesim: '≂̸', + nexist: '∄', + nexists: '∄', + nfr: '𝔫', + ngE: '≧̸', + nge: '≱', + ngeq: '≱', + ngeqq: '≧̸', + ngeqslant: '⩾̸', + nges: '⩾̸', + ngsim: '≵', + ngt: '≯', + ngtr: '≯', + nhArr: '⇎', + nharr: '↮', + nhpar: '⫲', + ni: '∋', + nis: '⋼', + nisd: '⋺', + niv: '∋', + njcy: 'њ', + nlArr: '⇍', + nlE: '≦̸', + nlarr: '↚', + nldr: '‥', + nle: '≰', + nleftarrow: '↚', + nleftrightarrow: '↮', + nleq: '≰', + nleqq: '≦̸', + nleqslant: '⩽̸', + nles: '⩽̸', + nless: '≮', + nlsim: '≴', + nlt: '≮', + nltri: '⋪', + nltrie: '⋬', + nmid: '∤', + nopf: '𝕟', + not: '¬', + notin: '∉', + notinE: '⋹̸', + notindot: '⋵̸', + notinva: '∉', + notinvb: '⋷', + notinvc: '⋶', + notni: '∌', + notniva: '∌', + notnivb: '⋾', + notnivc: '⋽', + npar: '∦', + nparallel: '∦', + nparsl: '⫽⃥', + npart: '∂̸', + npolint: '⨔', + npr: '⊀', + nprcue: '⋠', + npre: '⪯̸', + nprec: '⊀', + npreceq: '⪯̸', + nrArr: '⇏', + nrarr: '↛', + nrarrc: '⤳̸', + nrarrw: '↝̸', + nrightarrow: '↛', + nrtri: '⋫', + nrtrie: '⋭', + nsc: '⊁', + nsccue: '⋡', + nsce: '⪰̸', + nscr: '𝓃', + nshortmid: '∤', + nshortparallel: '∦', + nsim: '≁', + nsime: '≄', + nsimeq: '≄', + nsmid: '∤', + nspar: '∦', + nsqsube: '⋢', + nsqsupe: '⋣', + nsub: '⊄', + nsubE: '⫅̸', + nsube: '⊈', + nsubset: '⊂⃒', + nsubseteq: '⊈', + nsubseteqq: '⫅̸', + nsucc: '⊁', + nsucceq: '⪰̸', + nsup: '⊅', + nsupE: '⫆̸', + nsupe: '⊉', + nsupset: '⊃⃒', + nsupseteq: '⊉', + nsupseteqq: '⫆̸', + ntgl: '≹', + ntilde: 'ñ', + ntlg: '≸', + ntriangleleft: '⋪', + ntrianglelefteq: '⋬', + ntriangleright: '⋫', + ntrianglerighteq: '⋭', + nu: 'ν', + num: '#', + numero: '№', + numsp: ' ', + nvDash: '⊭', + nvHarr: '⤄', + nvap: '≍⃒', + nvdash: '⊬', + nvge: '≥⃒', + nvgt: '>⃒', + nvinfin: '⧞', + nvlArr: '⤂', + nvle: '≤⃒', + nvlt: '<⃒', + nvltrie: '⊴⃒', + nvrArr: '⤃', + nvrtrie: '⊵⃒', + nvsim: '∼⃒', + nwArr: '⇖', + nwarhk: '⤣', + nwarr: '↖', + nwarrow: '↖', + nwnear: '⤧', + oS: 'Ⓢ', + oacute: 'ó', + oast: '⊛', + ocir: '⊚', + ocirc: 'ô', + ocy: 'о', + odash: '⊝', + odblac: 'ő', + odiv: '⨸', + odot: '⊙', + odsold: '⦼', + oelig: 'œ', + ofcir: '⦿', + ofr: '𝔬', + ogon: '˛', + ograve: 'ò', + ogt: '⧁', + ohbar: '⦵', + ohm: 'Ω', + oint: '∮', + olarr: '↺', + olcir: '⦾', + olcross: '⦻', + oline: '‾', + olt: '⧀', + omacr: 'ō', + omega: 'ω', + omicron: 'ο', + omid: '⦶', + ominus: '⊖', + oopf: '𝕠', + opar: '⦷', + operp: '⦹', + oplus: '⊕', + or: '∨', + orarr: '↻', + ord: '⩝', + order: 'ℴ', + orderof: 'ℴ', + ordf: 'ª', + ordm: 'º', + origof: '⊶', + oror: '⩖', + orslope: '⩗', + orv: '⩛', + oscr: 'ℴ', + oslash: 'ø', + osol: '⊘', + otilde: 'õ', + otimes: '⊗', + otimesas: '⨶', + ouml: 'ö', + ovbar: '⌽', + par: '∥', + para: '¶', + parallel: '∥', + parsim: '⫳', + parsl: '⫽', + part: '∂', + pcy: 'п', + percnt: '%', + period: '.', + permil: '‰', + perp: '⊥', + pertenk: '‱', + pfr: '𝔭', + phi: 'φ', + phiv: 'ϕ', + phmmat: 'ℳ', + phone: '☎', + pi: 'π', + pitchfork: '⋔', + piv: 'ϖ', + planck: 'ℏ', + planckh: 'ℎ', + plankv: 'ℏ', + plus: '+', + plusacir: '⨣', + plusb: '⊞', + pluscir: '⨢', + plusdo: '∔', + plusdu: '⨥', + pluse: '⩲', + plusmn: '±', + plussim: '⨦', + plustwo: '⨧', + pm: '±', + pointint: '⨕', + popf: '𝕡', + pound: '£', + pr: '≺', + prE: '⪳', + prap: '⪷', + prcue: '≼', + pre: '⪯', + prec: '≺', + precapprox: '⪷', + preccurlyeq: '≼', + preceq: '⪯', + precnapprox: '⪹', + precneqq: '⪵', + precnsim: '⋨', + precsim: '≾', + prime: '′', + primes: 'ℙ', + prnE: '⪵', + prnap: '⪹', + prnsim: '⋨', + prod: '∏', + profalar: '⌮', + profline: '⌒', + profsurf: '⌓', + prop: '∝', + propto: '∝', + prsim: '≾', + prurel: '⊰', + pscr: '𝓅', + psi: 'ψ', + puncsp: ' ', + qfr: '𝔮', + qint: '⨌', + qopf: '𝕢', + qprime: '⁗', + qscr: '𝓆', + quaternions: 'ℍ', + quatint: '⨖', + quest: '?', + questeq: '≟', + quot: '"', + rAarr: '⇛', + rArr: '⇒', + rAtail: '⤜', + rBarr: '⤏', + rHar: '⥤', + race: '∽̱', + racute: 'ŕ', + radic: '√', + raemptyv: '⦳', + rang: '⟩', + rangd: '⦒', + range: '⦥', + rangle: '⟩', + raquo: '»', + rarr: '→', + rarrap: '⥵', + rarrb: '⇥', + rarrbfs: '⤠', + rarrc: '⤳', + rarrfs: '⤞', + rarrhk: '↪', + rarrlp: '↬', + rarrpl: '⥅', + rarrsim: '⥴', + rarrtl: '↣', + rarrw: '↝', + ratail: '⤚', + ratio: '∶', + rationals: 'ℚ', + rbarr: '⤍', + rbbrk: '❳', + rbrace: '}', + rbrack: ']', + rbrke: '⦌', + rbrksld: '⦎', + rbrkslu: '⦐', + rcaron: 'ř', + rcedil: 'ŗ', + rceil: '⌉', + rcub: '}', + rcy: 'р', + rdca: '⤷', + rdldhar: '⥩', + rdquo: '”', + rdquor: '”', + rdsh: '↳', + real: 'ℜ', + realine: 'ℛ', + realpart: 'ℜ', + reals: 'ℝ', + rect: '▭', + reg: '®', + rfisht: '⥽', + rfloor: '⌋', + rfr: '𝔯', + rhard: '⇁', + rharu: '⇀', + rharul: '⥬', + rho: 'ρ', + rhov: 'ϱ', + rightarrow: '→', + rightarrowtail: '↣', + rightharpoondown: '⇁', + rightharpoonup: '⇀', + rightleftarrows: '⇄', + rightleftharpoons: '⇌', + rightrightarrows: '⇉', + rightsquigarrow: '↝', + rightthreetimes: '⋌', + ring: '˚', + risingdotseq: '≓', + rlarr: '⇄', + rlhar: '⇌', + rlm: '‏', + rmoust: '⎱', + rmoustache: '⎱', + rnmid: '⫮', + roang: '⟭', + roarr: '⇾', + robrk: '⟧', + ropar: '⦆', + ropf: '𝕣', + roplus: '⨮', + rotimes: '⨵', + rpar: ')', + rpargt: '⦔', + rppolint: '⨒', + rrarr: '⇉', + rsaquo: '›', + rscr: '𝓇', + rsh: '↱', + rsqb: ']', + rsquo: '’', + rsquor: '’', + rthree: '⋌', + rtimes: '⋊', + rtri: '▹', + rtrie: '⊵', + rtrif: '▸', + rtriltri: '⧎', + ruluhar: '⥨', + rx: '℞', + sacute: 'ś', + sbquo: '‚', + sc: '≻', + scE: '⪴', + scap: '⪸', + scaron: 'š', + sccue: '≽', + sce: '⪰', + scedil: 'ş', + scirc: 'ŝ', + scnE: '⪶', + scnap: '⪺', + scnsim: '⋩', + scpolint: '⨓', + scsim: '≿', + scy: 'с', + sdot: '⋅', + sdotb: '⊡', + sdote: '⩦', + seArr: '⇘', + searhk: '⤥', + searr: '↘', + searrow: '↘', + sect: '§', + semi: ';', + seswar: '⤩', + setminus: '∖', + setmn: '∖', + sext: '✶', + sfr: '𝔰', + sfrown: '⌢', + sharp: '♯', + shchcy: 'щ', + shcy: 'ш', + shortmid: '∣', + shortparallel: '∥', + shy: '­', + sigma: 'σ', + sigmaf: 'ς', + sigmav: 'ς', + sim: '∼', + simdot: '⩪', + sime: '≃', + simeq: '≃', + simg: '⪞', + simgE: '⪠', + siml: '⪝', + simlE: '⪟', + simne: '≆', + simplus: '⨤', + simrarr: '⥲', + slarr: '←', + smallsetminus: '∖', + smashp: '⨳', + smeparsl: '⧤', + smid: '∣', + smile: '⌣', + smt: '⪪', + smte: '⪬', + smtes: '⪬︀', + softcy: 'ь', + sol: '/', + solb: '⧄', + solbar: '⌿', + sopf: '𝕤', + spades: '♠', + spadesuit: '♠', + spar: '∥', + sqcap: '⊓', + sqcaps: '⊓︀', + sqcup: '⊔', + sqcups: '⊔︀', + sqsub: '⊏', + sqsube: '⊑', + sqsubset: '⊏', + sqsubseteq: '⊑', + sqsup: '⊐', + sqsupe: '⊒', + sqsupset: '⊐', + sqsupseteq: '⊒', + squ: '□', + square: '□', + squarf: '▪', + squf: '▪', + srarr: '→', + sscr: '𝓈', + ssetmn: '∖', + ssmile: '⌣', + sstarf: '⋆', + star: '☆', + starf: '★', + straightepsilon: 'ϵ', + straightphi: 'ϕ', + strns: '¯', + sub: '⊂', + subE: '⫅', + subdot: '⪽', + sube: '⊆', + subedot: '⫃', + submult: '⫁', + subnE: '⫋', + subne: '⊊', + subplus: '⪿', + subrarr: '⥹', + subset: '⊂', + subseteq: '⊆', + subseteqq: '⫅', + subsetneq: '⊊', + subsetneqq: '⫋', + subsim: '⫇', + subsub: '⫕', + subsup: '⫓', + succ: '≻', + succapprox: '⪸', + succcurlyeq: '≽', + succeq: '⪰', + succnapprox: '⪺', + succneqq: '⪶', + succnsim: '⋩', + succsim: '≿', + sum: '∑', + sung: '♪', + sup1: '¹', + sup2: '²', + sup3: '³', + sup: '⊃', + supE: '⫆', + supdot: '⪾', + supdsub: '⫘', + supe: '⊇', + supedot: '⫄', + suphsol: '⟉', + suphsub: '⫗', + suplarr: '⥻', + supmult: '⫂', + supnE: '⫌', + supne: '⊋', + supplus: '⫀', + supset: '⊃', + supseteq: '⊇', + supseteqq: '⫆', + supsetneq: '⊋', + supsetneqq: '⫌', + supsim: '⫈', + supsub: '⫔', + supsup: '⫖', + swArr: '⇙', + swarhk: '⤦', + swarr: '↙', + swarrow: '↙', + swnwar: '⤪', + szlig: 'ß', + target: '⌖', + tau: 'τ', + tbrk: '⎴', + tcaron: 'ť', + tcedil: 'ţ', + tcy: 'т', + tdot: '⃛', + telrec: '⌕', + tfr: '𝔱', + there4: '∴', + therefore: '∴', + theta: 'θ', + thetasym: 'ϑ', + thetav: 'ϑ', + thickapprox: '≈', + thicksim: '∼', + thinsp: ' ', + thkap: '≈', + thksim: '∼', + thorn: 'þ', + tilde: '˜', + times: '×', + timesb: '⊠', + timesbar: '⨱', + timesd: '⨰', + tint: '∭', + toea: '⤨', + top: '⊤', + topbot: '⌶', + topcir: '⫱', + topf: '𝕥', + topfork: '⫚', + tosa: '⤩', + tprime: '‴', + trade: '™', + triangle: '▵', + triangledown: '▿', + triangleleft: '◃', + trianglelefteq: '⊴', + triangleq: '≜', + triangleright: '▹', + trianglerighteq: '⊵', + tridot: '◬', + trie: '≜', + triminus: '⨺', + triplus: '⨹', + trisb: '⧍', + tritime: '⨻', + trpezium: '⏢', + tscr: '𝓉', + tscy: 'ц', + tshcy: 'ћ', + tstrok: 'ŧ', + twixt: '≬', + twoheadleftarrow: '↞', + twoheadrightarrow: '↠', + uArr: '⇑', + uHar: '⥣', + uacute: 'ú', + uarr: '↑', + ubrcy: 'ў', + ubreve: 'ŭ', + ucirc: 'û', + ucy: 'у', + udarr: '⇅', + udblac: 'ű', + udhar: '⥮', + ufisht: '⥾', + ufr: '𝔲', + ugrave: 'ù', + uharl: '↿', + uharr: '↾', + uhblk: '▀', + ulcorn: '⌜', + ulcorner: '⌜', + ulcrop: '⌏', + ultri: '◸', + umacr: 'ū', + uml: '¨', + uogon: 'ų', + uopf: '𝕦', + uparrow: '↑', + updownarrow: '↕', + upharpoonleft: '↿', + upharpoonright: '↾', + uplus: '⊎', + upsi: 'υ', + upsih: 'ϒ', + upsilon: 'υ', + upuparrows: '⇈', + urcorn: '⌝', + urcorner: '⌝', + urcrop: '⌎', + uring: 'ů', + urtri: '◹', + uscr: '𝓊', + utdot: '⋰', + utilde: 'ũ', + utri: '▵', + utrif: '▴', + uuarr: '⇈', + uuml: 'ü', + uwangle: '⦧', + vArr: '⇕', + vBar: '⫨', + vBarv: '⫩', + vDash: '⊨', + vangrt: '⦜', + varepsilon: 'ϵ', + varkappa: 'ϰ', + varnothing: '∅', + varphi: 'ϕ', + varpi: 'ϖ', + varpropto: '∝', + varr: '↕', + varrho: 'ϱ', + varsigma: 'ς', + varsubsetneq: '⊊︀', + varsubsetneqq: '⫋︀', + varsupsetneq: '⊋︀', + varsupsetneqq: '⫌︀', + vartheta: 'ϑ', + vartriangleleft: '⊲', + vartriangleright: '⊳', + vcy: 'в', + vdash: '⊢', + vee: '∨', + veebar: '⊻', + veeeq: '≚', + vellip: '⋮', + verbar: '|', + vert: '|', + vfr: '𝔳', + vltri: '⊲', + vnsub: '⊂⃒', + vnsup: '⊃⃒', + vopf: '𝕧', + vprop: '∝', + vrtri: '⊳', + vscr: '𝓋', + vsubnE: '⫋︀', + vsubne: '⊊︀', + vsupnE: '⫌︀', + vsupne: '⊋︀', + vzigzag: '⦚', + wcirc: 'ŵ', + wedbar: '⩟', + wedge: '∧', + wedgeq: '≙', + weierp: '℘', + wfr: '𝔴', + wopf: '𝕨', + wp: '℘', + wr: '≀', + wreath: '≀', + wscr: '𝓌', + xcap: '⋂', + xcirc: '◯', + xcup: '⋃', + xdtri: '▽', + xfr: '𝔵', + xhArr: '⟺', + xharr: '⟷', + xi: 'ξ', + xlArr: '⟸', + xlarr: '⟵', + xmap: '⟼', + xnis: '⋻', + xodot: '⨀', + xopf: '𝕩', + xoplus: '⨁', + xotime: '⨂', + xrArr: '⟹', + xrarr: '⟶', + xscr: '𝓍', + xsqcup: '⨆', + xuplus: '⨄', + xutri: '△', + xvee: '⋁', + xwedge: '⋀', + yacute: 'ý', + yacy: 'я', + ycirc: 'ŷ', + ycy: 'ы', + yen: '¥', + yfr: '𝔶', + yicy: 'ї', + yopf: '𝕪', + yscr: '𝓎', + yucy: 'ю', + yuml: 'ÿ', + zacute: 'ź', + zcaron: 'ž', + zcy: 'з', + zdot: 'ż', + zeetrf: 'ℨ', + zeta: 'ζ', + zfr: '𝔷', + zhcy: 'ж', + zigrarr: '⇝', + zopf: '𝕫', + zscr: '𝓏', + zwj: '‍', + zwnj: '‌' +} + +;// CONCATENATED MODULE: ./node_modules/decode-named-character-reference/index.js + + +const own = {}.hasOwnProperty + +/** + * Decode a single character reference (without the `&` or `;`). + * You probably only need this when you’re building parsers yourself that follow + * different rules compared to HTML. + * This is optimized to be tiny in browsers. + * + * @param {string} value + * `notin` (named), `#123` (deci), `#x123` (hexa). + * @returns {string|false} + * Decoded reference. + */ +function decodeNamedCharacterReference(value) { + return own.call(characterEntities, value) ? characterEntities[value] : false +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-reference.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const characterReference = { + name: 'characterReference', + tokenize: tokenizeCharacterReference +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterReference(effects, ok, nok) { + const self = this + let size = 0 + /** @type {number} */ + let max + /** @type {(code: Code) => boolean} */ + let test + return start + + /** + * Start of character reference. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterReference') + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + return open + } + + /** + * After `&`, at `#` for numeric references or alphanumeric for named + * references. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 35) { + effects.enter('characterReferenceMarkerNumeric') + effects.consume(code) + effects.exit('characterReferenceMarkerNumeric') + return numeric + } + effects.enter('characterReferenceValue') + max = 31 + test = asciiAlphanumeric + return value(code) + } + + /** + * After `#`, at `x` for hexadecimals or digit for decimals. + * + * ```markdown + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function numeric(code) { + if (code === 88 || code === 120) { + effects.enter('characterReferenceMarkerHexadecimal') + effects.consume(code) + effects.exit('characterReferenceMarkerHexadecimal') + effects.enter('characterReferenceValue') + max = 6 + test = asciiHexDigit + return value + } + effects.enter('characterReferenceValue') + max = 7 + test = asciiDigit + return value(code) + } + + /** + * After markers (`&#x`, `&#`, or `&`), in value, before `;`. + * + * The character reference kind defines what and how many characters are + * allowed. + * + * ```markdown + * > | a&b + * ^^^ + * > | a{b + * ^^^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function value(code) { + if (code === 59 && size) { + const token = effects.exit('characterReferenceValue') + if ( + test === asciiAlphanumeric && + !decodeNamedCharacterReference(self.sliceSerialize(token)) + ) { + return nok(code) + } + + // To do: `markdown-rs` uses a different name: + // `CharacterReferenceMarkerSemi`. + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + effects.exit('characterReference') + return ok + } + if (test(code) && size++ < max) { + effects.consume(code) + return value + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const characterEscape = { + name: 'characterEscape', + tokenize: tokenizeCharacterEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterEscape(effects, ok, nok) { + return start + + /** + * Start of character escape. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterEscape') + effects.enter('escapeMarker') + effects.consume(code) + effects.exit('escapeMarker') + return inside + } + + /** + * After `\`, at punctuation. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + // ASCII punctuation. + if (asciiPunctuation(code)) { + effects.enter('characterEscapeValue') + effects.consume(code) + effects.exit('characterEscapeValue') + effects.exit('characterEscape') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/line-ending.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const lineEnding = { + name: 'lineEnding', + tokenize: tokenizeLineEnding +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLineEnding(effects, ok) { + return start + + /** @type {State} */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, ok, 'linePrefix') + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-end.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + + +/** @type {Construct} */ +const labelEnd = { + name: 'labelEnd', + tokenize: tokenizeLabelEnd, + resolveTo: resolveToLabelEnd, + resolveAll: resolveAllLabelEnd +} + +/** @type {Construct} */ +const resourceConstruct = { + tokenize: tokenizeResource +} +/** @type {Construct} */ +const referenceFullConstruct = { + tokenize: tokenizeReferenceFull +} +/** @type {Construct} */ +const referenceCollapsedConstruct = { + tokenize: tokenizeReferenceCollapsed +} + +/** @type {Resolver} */ +function resolveAllLabelEnd(events) { + let index = -1 + while (++index < events.length) { + const token = events[index][1] + if ( + token.type === 'labelImage' || + token.type === 'labelLink' || + token.type === 'labelEnd' + ) { + // Remove the marker. + events.splice(index + 1, token.type === 'labelImage' ? 4 : 2) + token.type = 'data' + index++ + } + } + return events +} + +/** @type {Resolver} */ +function resolveToLabelEnd(events, context) { + let index = events.length + let offset = 0 + /** @type {Token} */ + let token + /** @type {number | undefined} */ + let open + /** @type {number | undefined} */ + let close + /** @type {Array} */ + let media + + // Find an opening. + while (index--) { + token = events[index][1] + if (open) { + // If we see another link, or inactive link label, we’ve been here before. + if ( + token.type === 'link' || + (token.type === 'labelLink' && token._inactive) + ) { + break + } + + // Mark other link openings as inactive, as we can’t have links in + // links. + if (events[index][0] === 'enter' && token.type === 'labelLink') { + token._inactive = true + } + } else if (close) { + if ( + events[index][0] === 'enter' && + (token.type === 'labelImage' || token.type === 'labelLink') && + !token._balanced + ) { + open = index + if (token.type !== 'labelLink') { + offset = 2 + break + } + } + } else if (token.type === 'labelEnd') { + close = index + } + } + const group = { + type: events[open][1].type === 'labelLink' ? 'link' : 'image', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + const label = { + type: 'label', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[close][1].end) + } + const text = { + type: 'labelText', + start: Object.assign({}, events[open + offset + 2][1].end), + end: Object.assign({}, events[close - 2][1].start) + } + media = [ + ['enter', group, context], + ['enter', label, context] + ] + + // Opening marker. + media = push(media, events.slice(open + 1, open + offset + 3)) + + // Text open. + media = push(media, [['enter', text, context]]) + + // Always populated by defaults. + + // Between. + media = push( + media, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + offset + 4, close - 3), + context + ) + ) + + // Text close, marker close, label close. + media = push(media, [ + ['exit', text, context], + events[close - 2], + events[close - 1], + ['exit', label, context] + ]) + + // Reference, resource, or so. + media = push(media, events.slice(close + 1)) + + // Media close. + media = push(media, [['exit', group, context]]) + splice(events, open, events.length, media) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelEnd(effects, ok, nok) { + const self = this + let index = self.events.length + /** @type {Token} */ + let labelStart + /** @type {boolean} */ + let defined + + // Find an opening. + while (index--) { + if ( + (self.events[index][1].type === 'labelImage' || + self.events[index][1].type === 'labelLink') && + !self.events[index][1]._balanced + ) { + labelStart = self.events[index][1] + break + } + } + return start + + /** + * Start of label end. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ``` + * + * @type {State} + */ + function start(code) { + // If there is not an okay opening. + if (!labelStart) { + return nok(code) + } + + // If the corresponding label (link) start is marked as inactive, + // it means we’d be wrapping a link, like this: + // + // ```markdown + // > | a [b [c](d) e](f) g. + // ^ + // ``` + // + // We can’t have that, so it’s just balanced brackets. + if (labelStart._inactive) { + return labelEndNok(code) + } + defined = self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize({ + start: labelStart.end, + end: self.now() + }) + ) + ) + effects.enter('labelEnd') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelEnd') + return after + } + + /** + * After `]`. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + // Note: `markdown-rs` also parses GFM footnotes here, which for us is in + // an extension. + + // Resource (`[asd](fgh)`)? + if (code === 40) { + return effects.attempt( + resourceConstruct, + labelEndOk, + defined ? labelEndOk : labelEndNok + )(code) + } + + // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? + if (code === 91) { + return effects.attempt( + referenceFullConstruct, + labelEndOk, + defined ? referenceNotFull : labelEndNok + )(code) + } + + // Shortcut (`[asd]`) reference? + return defined ? labelEndOk(code) : labelEndNok(code) + } + + /** + * After `]`, at `[`, but not at a full reference. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function referenceNotFull(code) { + return effects.attempt( + referenceCollapsedConstruct, + labelEndOk, + labelEndNok + )(code) + } + + /** + * Done, we found something. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndOk(code) { + // Note: `markdown-rs` does a bunch of stuff here. + return ok(code) + } + + /** + * Done, it’s nothing. + * + * There was an okay opening, but we didn’t match anything. + * + * ```markdown + * > | [a](b c + * ^ + * > | [a][b c + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndNok(code) { + labelStart._balanced = true + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeResource(effects, ok, nok) { + return resourceStart + + /** + * At a resource. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceStart(code) { + effects.enter('resource') + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + return resourceBefore + } + + /** + * In resource, after `(`, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceOpen)(code) + : resourceOpen(code) + } + + /** + * In resource, after optional whitespace, at `)` or a destination. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceOpen(code) { + if (code === 41) { + return resourceEnd(code) + } + return factoryDestination( + effects, + resourceDestinationAfter, + resourceDestinationMissing, + 'resourceDestination', + 'resourceDestinationLiteral', + 'resourceDestinationLiteralMarker', + 'resourceDestinationRaw', + 'resourceDestinationString', + 32 + )(code) + } + + /** + * In resource, after destination, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceBetween)(code) + : resourceEnd(code) + } + + /** + * At invalid destination. + * + * ```markdown + * > | [a](<<) b + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationMissing(code) { + return nok(code) + } + + /** + * In resource, after destination and whitespace, at `(` or title. + * + * ```markdown + * > | [a](b ) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBetween(code) { + if (code === 34 || code === 39 || code === 40) { + return factoryTitle( + effects, + resourceTitleAfter, + nok, + 'resourceTitle', + 'resourceTitleMarker', + 'resourceTitleString' + )(code) + } + return resourceEnd(code) + } + + /** + * In resource, after title, at optional whitespace. + * + * ```markdown + * > | [a](b "c") d + * ^ + * ``` + * + * @type {State} + */ + function resourceTitleAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceEnd)(code) + : resourceEnd(code) + } + + /** + * In resource, at `)`. + * + * ```markdown + * > | [a](b) d + * ^ + * ``` + * + * @type {State} + */ + function resourceEnd(code) { + if (code === 41) { + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + effects.exit('resource') + return ok + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceFull(effects, ok, nok) { + const self = this + return referenceFull + + /** + * In a reference (full), at the `[`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFull(code) { + return factoryLabel.call( + self, + effects, + referenceFullAfter, + referenceFullMissing, + 'reference', + 'referenceMarker', + 'referenceString' + )(code) + } + + /** + * In a reference (full), after `]`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullAfter(code) { + return self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + ) + ? ok(code) + : nok(code) + } + + /** + * In reference (full) that was missing. + * + * ```markdown + * > | [a][b d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullMissing(code) { + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceCollapsed(effects, ok, nok) { + return referenceCollapsedStart + + /** + * In reference (collapsed), at `[`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedStart(code) { + // We only attempt a collapsed label if there’s a `[`. + + effects.enter('reference') + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + return referenceCollapsedOpen + } + + /** + * In reference (collapsed), at `]`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedOpen(code) { + if (code === 93) { + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + effects.exit('reference') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-image.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartImage = { + name: 'labelStartImage', + tokenize: tokenizeLabelStartImage, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartImage(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (image) start. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelImage') + effects.enter('labelImageMarker') + effects.consume(code) + effects.exit('labelImageMarker') + return open + } + + /** + * After `!`, at `[`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 91) { + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelImage') + return after + } + return nok(code) + } + + /** + * After `![`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * This is needed in because, when GFM footnotes are enabled, images never + * form when started with a `^`. + * Instead, links form: + * + * ```markdown + * ![^a](b) + * + * ![^a][b] + * + * [b]: c + * ``` + * + * ```html + *

    !^a

    + *

    !^a

    + * ``` + * + * @type {State} + */ + function after(code) { + // To do: use a new field to do this, this is still needed for + // `micromark-extension-gfm-footnote`, but the `label-start-link` + // behavior isn’t. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-classify-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + +/** + * Classify whether a code represents whitespace, punctuation, or something + * else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * > 👉 **Note**: eof (`null`) is seen as whitespace. + * + * @param {Code} code + * Code. + * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} + * Group. + */ +function classifyCharacter(code) { + if ( + code === null || + markdownLineEndingOrSpace(code) || + unicodeWhitespace(code) + ) { + return 1 + } + if (unicodePunctuation(code)) { + return 2 + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/attention.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const attention = { + name: 'attention', + tokenize: tokenizeAttention, + resolveAll: resolveAllAttention +} + +/** + * Take all events and resolve attention to emphasis or strong. + * + * @type {Resolver} + */ +function resolveAllAttention(events, context) { + let index = -1 + /** @type {number} */ + let open + /** @type {Token} */ + let group + /** @type {Token} */ + let text + /** @type {Token} */ + let openingSequence + /** @type {Token} */ + let closingSequence + /** @type {number} */ + let use + /** @type {Array} */ + let nextEvents + /** @type {number} */ + let offset + + // Walk through all events. + // + // Note: performance of this is fine on an mb of normal markdown, but it’s + // a bottleneck for malicious stuff. + while (++index < events.length) { + // Find a token that can close. + if ( + events[index][0] === 'enter' && + events[index][1].type === 'attentionSequence' && + events[index][1]._close + ) { + open = index + + // Now walk back to find an opener. + while (open--) { + // Find a token that can open the closer. + if ( + events[open][0] === 'exit' && + events[open][1].type === 'attentionSequence' && + events[open][1]._open && + // If the markers are the same: + context.sliceSerialize(events[open][1]).charCodeAt(0) === + context.sliceSerialize(events[index][1]).charCodeAt(0) + ) { + // If the opening can close or the closing can open, + // and the close size *is not* a multiple of three, + // but the sum of the opening and closing size *is* multiple of three, + // then don’t match. + if ( + (events[open][1]._close || events[index][1]._open) && + (events[index][1].end.offset - events[index][1].start.offset) % 3 && + !( + (events[open][1].end.offset - + events[open][1].start.offset + + events[index][1].end.offset - + events[index][1].start.offset) % + 3 + ) + ) { + continue + } + + // Number of markers to use from the sequence. + use = + events[open][1].end.offset - events[open][1].start.offset > 1 && + events[index][1].end.offset - events[index][1].start.offset > 1 + ? 2 + : 1 + const start = Object.assign({}, events[open][1].end) + const end = Object.assign({}, events[index][1].start) + movePoint(start, -use) + movePoint(end, use) + openingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start, + end: Object.assign({}, events[open][1].end) + } + closingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start: Object.assign({}, events[index][1].start), + end + } + text = { + type: use > 1 ? 'strongText' : 'emphasisText', + start: Object.assign({}, events[open][1].end), + end: Object.assign({}, events[index][1].start) + } + group = { + type: use > 1 ? 'strong' : 'emphasis', + start: Object.assign({}, openingSequence.start), + end: Object.assign({}, closingSequence.end) + } + events[open][1].end = Object.assign({}, openingSequence.start) + events[index][1].start = Object.assign({}, closingSequence.end) + nextEvents = [] + + // If there are more markers in the opening, add them before. + if (events[open][1].end.offset - events[open][1].start.offset) { + nextEvents = push(nextEvents, [ + ['enter', events[open][1], context], + ['exit', events[open][1], context] + ]) + } + + // Opening. + nextEvents = push(nextEvents, [ + ['enter', group, context], + ['enter', openingSequence, context], + ['exit', openingSequence, context], + ['enter', text, context] + ]) + + // Always populated by defaults. + + // Between. + nextEvents = push( + nextEvents, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + 1, index), + context + ) + ) + + // Closing. + nextEvents = push(nextEvents, [ + ['exit', text, context], + ['enter', closingSequence, context], + ['exit', closingSequence, context], + ['exit', group, context] + ]) + + // If there are more markers in the closing, add them after. + if (events[index][1].end.offset - events[index][1].start.offset) { + offset = 2 + nextEvents = push(nextEvents, [ + ['enter', events[index][1], context], + ['exit', events[index][1], context] + ]) + } else { + offset = 0 + } + splice(events, open - 1, index - open + 3, nextEvents) + index = open + nextEvents.length - offset - 2 + break + } + } + } + } + + // Remove remaining sequences. + index = -1 + while (++index < events.length) { + if (events[index][1].type === 'attentionSequence') { + events[index][1].type = 'data' + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAttention(effects, ok) { + const attentionMarkers = this.parser.constructs.attentionMarkers.null + const previous = this.previous + const before = classifyCharacter(previous) + + /** @type {NonNullable} */ + let marker + return start + + /** + * Before a sequence. + * + * ```markdown + * > | ** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + marker = code + effects.enter('attentionSequence') + return inside(code) + } + + /** + * In a sequence. + * + * ```markdown + * > | ** + * ^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + const token = effects.exit('attentionSequence') + + // To do: next major: move this to resolver, just like `markdown-rs`. + const after = classifyCharacter(code) + + // Always populated by defaults. + + const open = + !after || (after === 2 && before) || attentionMarkers.includes(code) + const close = + !before || (before === 2 && after) || attentionMarkers.includes(previous) + token._open = Boolean(marker === 42 ? open : open && (before || !close)) + token._close = Boolean(marker === 42 ? close : close && (after || !open)) + return ok(code) + } +} + +/** + * Move a point a bit. + * + * Note: `move` only works inside lines! It’s not possible to move past other + * chunks (replacement characters, tabs, or line endings). + * + * @param {Point} point + * @param {number} offset + * @returns {void} + */ +function movePoint(point, offset) { + point.column += offset + point.offset += offset + point._bufferIndex += offset +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/autolink.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const autolink = { + name: 'autolink', + tokenize: tokenizeAutolink +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAutolink(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of an autolink. + * + * ```markdown + * > | ab + * ^ + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('autolink') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.enter('autolinkProtocol') + return open + } + + /** + * After `<`, at protocol or atext. + * + * ```markdown + * > | ab + * ^ + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (asciiAlpha(code)) { + effects.consume(code) + return schemeOrEmailAtext + } + return emailAtext(code) + } + + /** + * At second byte of protocol or atext. + * + * ```markdown + * > | ab + * ^ + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function schemeOrEmailAtext(code) { + // ASCII alphanumeric and `+`, `-`, and `.`. + if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) { + // Count the previous alphabetical from `open` too. + size = 1 + return schemeInsideOrEmailAtext(code) + } + return emailAtext(code) + } + + /** + * In ambiguous protocol or atext. + * + * ```markdown + * > | ab + * ^ + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function schemeInsideOrEmailAtext(code) { + if (code === 58) { + effects.consume(code) + size = 0 + return urlInside + } + + // ASCII alphanumeric and `+`, `-`, and `.`. + if ( + (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && + size++ < 32 + ) { + effects.consume(code) + return schemeInsideOrEmailAtext + } + size = 0 + return emailAtext(code) + } + + /** + * After protocol, in URL. + * + * ```markdown + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function urlInside(code) { + if (code === 62) { + effects.exit('autolinkProtocol') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + + // ASCII control, space, or `<`. + if (code === null || code === 32 || code === 60 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return urlInside + } + + /** + * In email atext. + * + * ```markdown + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function emailAtext(code) { + if (code === 64) { + effects.consume(code) + return emailAtSignOrDot + } + if (asciiAtext(code)) { + effects.consume(code) + return emailAtext + } + return nok(code) + } + + /** + * In label, after at-sign or dot. + * + * ```markdown + * > | ab + * ^ ^ + * ``` + * + * @type {State} + */ + function emailAtSignOrDot(code) { + return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) + } + + /** + * In label, where `.` and `>` are allowed. + * + * ```markdown + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function emailLabel(code) { + if (code === 46) { + effects.consume(code) + size = 0 + return emailAtSignOrDot + } + if (code === 62) { + // Exit, then change the token type. + effects.exit('autolinkProtocol').type = 'autolinkEmail' + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + return emailValue(code) + } + + /** + * In label, where `.` and `>` are *not* allowed. + * + * Though, this is also used in `emailLabel` to parse other values. + * + * ```markdown + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function emailValue(code) { + // ASCII alphanumeric or `-`. + if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) { + const next = code === 45 ? emailValue : emailLabel + effects.consume(code) + return next + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const htmlText = { + name: 'htmlText', + tokenize: tokenizeHtmlText +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlText(effects, ok, nok) { + const self = this + /** @type {NonNullable | undefined} */ + let marker + /** @type {number} */ + let index + /** @type {State} */ + let returnState + return start + + /** + * Start of HTML (text). + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('htmlText') + effects.enter('htmlTextData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | a c + * ^ + * > | a c + * ^ + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + return instruction + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagOpen + } + return nok(code) + } + + /** + * After ` | a c + * ^ + * > | a c + * ^ + * > | a &<]]> c + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + index = 0 + return cdataOpenInside + } + if (asciiAlpha(code)) { + effects.consume(code) + return declaration + } + return nok(code) + } + + /** + * In a comment, after ` | a c + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return nok(code) + } + + /** + * In comment. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function comment(code) { + if (code === null) { + return nok(code) + } + if (code === 45) { + effects.consume(code) + return commentClose + } + if (markdownLineEnding(code)) { + returnState = comment + return lineEndingBefore(code) + } + effects.consume(code) + return comment + } + + /** + * In comment, after `-`. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function commentClose(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return comment(code) + } + + /** + * In comment, after `--`. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function commentEnd(code) { + return code === 62 + ? end(code) + : code === 45 + ? commentClose(code) + : comment(code) + } + + /** + * After ` | a &<]]> b + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + return index === value.length ? cdata : cdataOpenInside + } + return nok(code) + } + + /** + * In CDATA. + * + * ```markdown + * > | a &<]]> b + * ^^^ + * ``` + * + * @type {State} + */ + function cdata(code) { + if (code === null) { + return nok(code) + } + if (code === 93) { + effects.consume(code) + return cdataClose + } + if (markdownLineEnding(code)) { + returnState = cdata + return lineEndingBefore(code) + } + effects.consume(code) + return cdata + } + + /** + * In CDATA, after `]`, at another `]`. + * + * ```markdown + * > | a &<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataClose(code) { + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In CDATA, after `]]`, at `>`. + * + * ```markdown + * > | a &<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataEnd(code) { + if (code === 62) { + return end(code) + } + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In declaration. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function declaration(code) { + if (code === null || code === 62) { + return end(code) + } + if (markdownLineEnding(code)) { + returnState = declaration + return lineEndingBefore(code) + } + effects.consume(code) + return declaration + } + + /** + * In instruction. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function instruction(code) { + if (code === null) { + return nok(code) + } + if (code === 63) { + effects.consume(code) + return instructionClose + } + if (markdownLineEnding(code)) { + returnState = instruction + return lineEndingBefore(code) + } + effects.consume(code) + return instruction + } + + /** + * In instruction, after `?`, at `>`. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function instructionClose(code) { + return code === 62 ? end(code) : instruction(code) + } + + /** + * After ` | a c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagClose + } + return nok(code) + } + + /** + * After ` | a c + * ^ + * ``` + * + * @type {State} + */ + function tagClose(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagClose + } + return tagCloseBetween(code) + } + + /** + * In closing tag, after tag name. + * + * ```markdown + * > | a
    c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseBetween(code) { + if (markdownLineEnding(code)) { + returnState = tagCloseBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagCloseBetween + } + return end(code) + } + + /** + * After ` | a c + * ^ + * ``` + * + * @type {State} + */ + function tagOpen(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagOpen + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In opening tag, after tag name. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function tagOpenBetween(code) { + if (code === 47) { + effects.consume(code) + return end + } + + // ASCII alphabetical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return tagOpenAttributeName + } + if (markdownLineEnding(code)) { + returnState = tagOpenBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenBetween + } + return end(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | a d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeName(code) { + // ASCII alphabetical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return tagOpenAttributeName + } + return tagOpenAttributeNameAfter(code) + } + + /** + * After attribute name, before initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | a d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeNameAfter + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeNameAfter + } + return tagOpenBetween(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | a e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + marker = code + return tagOpenAttributeValueQuoted + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueBefore + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | a e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuoted(code) { + if (code === marker) { + effects.consume(code) + marker = undefined + return tagOpenAttributeValueQuotedAfter + } + if (code === null) { + return nok(code) + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueQuoted + return lineEndingBefore(code) + } + effects.consume(code) + return tagOpenAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | a e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 60 || + code === 61 || + code === 96 + ) { + return nok(code) + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the end + * of the tag. + * + * ```markdown + * > | a e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In certain circumstances of a tag where only an `>` is allowed. + * + * ```markdown + * > | a e + * ^ + * ``` + * + * @type {State} + */ + function end(code) { + if (code === 62) { + effects.consume(code) + effects.exit('htmlTextData') + effects.exit('htmlText') + return ok + } + return nok(code) + } + + /** + * At eol. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * > | a + * ``` + * + * @type {State} + */ + function lineEndingBefore(code) { + effects.exit('htmlTextData') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineEndingAfter + } + + /** + * After eol, at optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfter(code) { + // Always populated by defaults. + + return markdownSpace(code) + ? factorySpace( + effects, + lineEndingAfterPrefix, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : lineEndingAfterPrefix(code) + } + + /** + * After eol, after optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfterPrefix(code) { + effects.enter('htmlTextData') + return returnState(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-link.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartLink = { + name: 'labelStartLink', + tokenize: tokenizeLabelStartLink, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartLink(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (link) start. + * + * ```markdown + * > | a [b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelLink') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelLink') + return after + } + + /** @type {State} */ + function after(code) { + // To do: this isn’t needed in `micromark-extension-gfm-footnote`, + // remove. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/hard-break-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const hardBreakEscape = { + name: 'hardBreakEscape', + tokenize: tokenizeHardBreakEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHardBreakEscape(effects, ok, nok) { + return start + + /** + * Start of a hard break (escape). + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('hardBreakEscape') + effects.consume(code) + return after + } + + /** + * After `\`, at eol. + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownLineEnding(code)) { + effects.exit('hardBreakEscape') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-text.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Previous} Previous + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const codeText = { + name: 'codeText', + tokenize: tokenizeCodeText, + resolve: resolveCodeText, + previous +} + +// To do: next major: don’t resolve, like `markdown-rs`. +/** @type {Resolver} */ +function resolveCodeText(events) { + let tailExitIndex = events.length - 4 + let headEnterIndex = 3 + /** @type {number} */ + let index + /** @type {number | undefined} */ + let enter + + // If we start and end with an EOL or a space. + if ( + (events[headEnterIndex][1].type === 'lineEnding' || + events[headEnterIndex][1].type === 'space') && + (events[tailExitIndex][1].type === 'lineEnding' || + events[tailExitIndex][1].type === 'space') + ) { + index = headEnterIndex + + // And we have data. + while (++index < tailExitIndex) { + if (events[index][1].type === 'codeTextData') { + // Then we have padding. + events[headEnterIndex][1].type = 'codeTextPadding' + events[tailExitIndex][1].type = 'codeTextPadding' + headEnterIndex += 2 + tailExitIndex -= 2 + break + } + } + } + + // Merge adjacent spaces and data. + index = headEnterIndex - 1 + tailExitIndex++ + while (++index <= tailExitIndex) { + if (enter === undefined) { + if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { + enter = index + } + } else if ( + index === tailExitIndex || + events[index][1].type === 'lineEnding' + ) { + events[enter][1].type = 'codeTextData' + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + tailExitIndex -= index - enter - 2 + index = enter + 2 + } + enter = undefined + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Previous} + */ +function previous(code) { + // If there is a previous code, there will always be a tail. + return ( + code !== 96 || + this.events[this.events.length - 1][1].type === 'characterEscape' + ) +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeText(effects, ok, nok) { + const self = this + let sizeOpen = 0 + /** @type {number} */ + let size + /** @type {Token} */ + let token + return start + + /** + * Start of code (text). + * + * ```markdown + * > | `a` + * ^ + * > | \`a` + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('codeText') + effects.enter('codeTextSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 96) { + effects.consume(code) + sizeOpen++ + return sequenceOpen + } + effects.exit('codeTextSequence') + return between(code) + } + + /** + * Between something and something else. + * + * ```markdown + * > | `a` + * ^^ + * ``` + * + * @type {State} + */ + function between(code) { + // EOF. + if (code === null) { + return nok(code) + } + + // To do: next major: don’t do spaces in resolve, but when compiling, + // like `markdown-rs`. + // Tabs don’t work, and virtual spaces don’t make sense. + if (code === 32) { + effects.enter('space') + effects.consume(code) + effects.exit('space') + return between + } + + // Closing fence? Could also be data. + if (code === 96) { + token = effects.enter('codeTextSequence') + size = 0 + return sequenceClose(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return between + } + + // Data. + effects.enter('codeTextData') + return data(code) + } + + /** + * In data. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if ( + code === null || + code === 32 || + code === 96 || + markdownLineEnding(code) + ) { + effects.exit('codeTextData') + return between(code) + } + effects.consume(code) + return data + } + + /** + * In closing sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + // More. + if (code === 96) { + effects.consume(code) + size++ + return sequenceClose + } + + // Done! + if (size === sizeOpen) { + effects.exit('codeTextSequence') + effects.exit('codeText') + return ok(code) + } + + // More or less accents: mark as data. + token.type = 'codeTextData' + return data(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + */ + + + + +/** @satisfies {Extension['document']} */ +const constructs_document = { + [42]: list, + [43]: list, + [45]: list, + [48]: list, + [49]: list, + [50]: list, + [51]: list, + [52]: list, + [53]: list, + [54]: list, + [55]: list, + [56]: list, + [57]: list, + [62]: blockQuote +} + +/** @satisfies {Extension['contentInitial']} */ +const contentInitial = { + [91]: definition +} + +/** @satisfies {Extension['flowInitial']} */ +const flowInitial = { + [-2]: codeIndented, + [-1]: codeIndented, + [32]: codeIndented +} + +/** @satisfies {Extension['flow']} */ +const constructs_flow = { + [35]: headingAtx, + [42]: thematicBreak, + [45]: [setextUnderline, thematicBreak], + [60]: htmlFlow, + [61]: setextUnderline, + [95]: thematicBreak, + [96]: codeFenced, + [126]: codeFenced +} + +/** @satisfies {Extension['string']} */ +const constructs_string = { + [38]: characterReference, + [92]: characterEscape +} + +/** @satisfies {Extension['text']} */ +const constructs_text = { + [-5]: lineEnding, + [-4]: lineEnding, + [-3]: lineEnding, + [33]: labelStartImage, + [38]: characterReference, + [42]: attention, + [60]: [autolink, htmlText], + [91]: labelStartLink, + [92]: [hardBreakEscape, characterEscape], + [93]: labelEnd, + [95]: attention, + [96]: codeText +} + +/** @satisfies {Extension['insideSpan']} */ +const insideSpan = { + null: [attention, resolver] +} + +/** @satisfies {Extension['attentionMarkers']} */ +const attentionMarkers = { + null: [42, 95] +} + +/** @satisfies {Extension['disable']} */ +const disable = { + null: [] +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/parse.js +/** + * @typedef {import('micromark-util-types').Create} Create + * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + */ + + + + + + + + + +/** + * @param {ParseOptions | null | undefined} [options] + * @returns {ParseContext} + */ +function parse(options) { + const settings = options || {} + const constructs = + /** @type {FullNormalizedExtension} */ + combineExtensions([constructs_namespaceObject, ...(settings.extensions || [])]) + + /** @type {ParseContext} */ + const parser = { + defined: [], + lazy: {}, + constructs, + content: create(content), + document: create(document_document), + flow: create(flow), + string: create(string), + text: create(text_text) + } + return parser + + /** + * @param {InitialConstruct} initial + */ + function create(initial) { + return creator + /** @type {Create} */ + function creator(from) { + return createTokenizer(parser, initial, from) + } + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/preprocess.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Value} Value + */ + +/** + * @callback Preprocessor + * @param {Value} value + * @param {Encoding | null | undefined} [encoding] + * @param {boolean | null | undefined} [end=false] + * @returns {Array} + */ + +const search = /[\0\t\n\r]/g + +/** + * @returns {Preprocessor} + */ +function preprocess() { + let column = 1 + let buffer = '' + /** @type {boolean | undefined} */ + let start = true + /** @type {boolean | undefined} */ + let atCarriageReturn + return preprocessor + + /** @type {Preprocessor} */ + function preprocessor(value, encoding, end) { + /** @type {Array} */ + const chunks = [] + /** @type {RegExpMatchArray | null} */ + let match + /** @type {number} */ + let next + /** @type {number} */ + let startPosition + /** @type {number} */ + let endPosition + /** @type {Code} */ + let code + + // @ts-expect-error `Buffer` does allow an encoding. + value = buffer + value.toString(encoding) + startPosition = 0 + buffer = '' + if (start) { + // To do: `markdown-rs` actually parses BOMs (byte order mark). + if (value.charCodeAt(0) === 65279) { + startPosition++ + } + start = undefined + } + while (startPosition < value.length) { + search.lastIndex = startPosition + match = search.exec(value) + endPosition = + match && match.index !== undefined ? match.index : value.length + code = value.charCodeAt(endPosition) + if (!match) { + buffer = value.slice(startPosition) + break + } + if (code === 10 && startPosition === endPosition && atCarriageReturn) { + chunks.push(-3) + atCarriageReturn = undefined + } else { + if (atCarriageReturn) { + chunks.push(-5) + atCarriageReturn = undefined + } + if (startPosition < endPosition) { + chunks.push(value.slice(startPosition, endPosition)) + column += endPosition - startPosition + } + switch (code) { + case 0: { + chunks.push(65533) + column++ + break + } + case 9: { + next = Math.ceil(column / 4) * 4 + chunks.push(-2) + while (column++ < next) chunks.push(-1) + break + } + case 10: { + chunks.push(-4) + column = 1 + break + } + default: { + atCarriageReturn = true + column = 1 + } + } + } + startPosition = endPosition + 1 + } + if (end) { + if (atCarriageReturn) chunks.push(-5) + if (buffer) chunks.push(buffer) + chunks.push(null) + } + return chunks + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/postprocess.js +/** + * @typedef {import('micromark-util-types').Event} Event + */ + + + +/** + * @param {Array} events + * @returns {Array} + */ +function postprocess(events) { + while (!subtokenize(events)) { + // Empty + } + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-numeric-character-reference/index.js +/** + * Turn the number (in string form as either hexa- or plain decimal) coming from + * a numeric character reference into a character. + * + * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes + * non-characters and control characters safe. + * + * @param {string} value + * Value to decode. + * @param {number} base + * Numeric base. + * @returns {string} + * Character. + */ +function decodeNumericCharacterReference(value, base) { + const code = Number.parseInt(value, base) + if ( + // C0 except for HT, LF, FF, CR, space. + code < 9 || + code === 11 || + (code > 13 && code < 32) || + // Control character (DEL) of C0, and C1 controls. + (code > 126 && code < 160) || + // Lone high surrogates and low surrogates. + (code > 55295 && code < 57344) || + // Noncharacters. + (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ || + (code & 65535) === 65535 || + (code & 65535) === 65534 /* eslint-enable no-bitwise */ || + // Out of range + code > 1114111 + ) { + return '\uFFFD' + } + return String.fromCharCode(code) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-string/index.js + + +const characterEscapeOrReference = + /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi + +/** + * Decode markdown strings (which occur in places such as fenced code info + * strings, destinations, labels, and titles). + * + * The “string” content type allows character escapes and -references. + * This decodes those. + * + * @param {string} value + * Value to decode. + * @returns {string} + * Decoded value. + */ +function decodeString(value) { + return value.replace(characterEscapeOrReference, decode) +} + +/** + * @param {string} $0 + * @param {string} $1 + * @param {string} $2 + * @returns {string} + */ +function decode($0, $1, $2) { + if ($1) { + // Escape. + return $1 + } + + // Reference. + const head = $2.charCodeAt(0) + if (head === 35) { + const head = $2.charCodeAt(1) + const hex = head === 120 || head === 88 + return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10) + } + return decodeNamedCharacterReference($2) || $0 +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/unist-util-stringify-position/lib/index.js +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Point} Point + * @typedef {import('unist').Position} Position + */ + +/** + * @typedef NodeLike + * @property {string} type + * @property {PositionLike | null | undefined} [position] + * + * @typedef PositionLike + * @property {PointLike | null | undefined} [start] + * @property {PointLike | null | undefined} [end] + * + * @typedef PointLike + * @property {number | null | undefined} [line] + * @property {number | null | undefined} [column] + * @property {number | null | undefined} [offset] + */ + +/** + * Serialize the positional info of a point, position (start and end points), + * or node. + * + * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] + * Node, position, or point. + * @returns {string} + * Pretty printed positional info of a node (`string`). + * + * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) + * or a point `l:c` (when given `point`), where `l` stands for line, `c` for + * column, `s` for `start`, and `e` for end. + * An empty string (`''`) is returned if the given value is neither `node`, + * `position`, nor `point`. + */ +function stringifyPosition(value) { + // Nothing. + if (!value || typeof value !== 'object') { + return '' + } + + // Node. + if ('position' in value || 'type' in value) { + return position(value.position) + } + + // Position. + if ('start' in value || 'end' in value) { + return position(value) + } + + // Point. + if ('line' in value || 'column' in value) { + return point(value) + } + + // ? + return '' +} + +/** + * @param {Point | PointLike | null | undefined} point + * @returns {string} + */ +function point(point) { + return index(point && point.line) + ':' + index(point && point.column) +} + +/** + * @param {Position | PositionLike | null | undefined} pos + * @returns {string} + */ +function position(pos) { + return point(pos && pos.start) + '-' + point(pos && pos.end) +} + +/** + * @param {number | null | undefined} value + * @returns {number} + */ +function index(value) { + return value && typeof value === 'number' ? value : 1 +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-from-markdown/lib/index.js +/** + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Value} Value + * + * @typedef {import('unist').Parent} UnistParent + * @typedef {import('unist').Point} Point + * + * @typedef {import('mdast').PhrasingContent} PhrasingContent + * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent + * @typedef {import('mdast').Content} Content + * @typedef {import('mdast').Break} Break + * @typedef {import('mdast').Blockquote} Blockquote + * @typedef {import('mdast').Code} Code + * @typedef {import('mdast').Definition} Definition + * @typedef {import('mdast').Emphasis} Emphasis + * @typedef {import('mdast').Heading} Heading + * @typedef {import('mdast').HTML} HTML + * @typedef {import('mdast').Image} Image + * @typedef {import('mdast').ImageReference} ImageReference + * @typedef {import('mdast').InlineCode} InlineCode + * @typedef {import('mdast').Link} Link + * @typedef {import('mdast').LinkReference} LinkReference + * @typedef {import('mdast').List} List + * @typedef {import('mdast').ListItem} ListItem + * @typedef {import('mdast').Paragraph} Paragraph + * @typedef {import('mdast').Root} Root + * @typedef {import('mdast').Strong} Strong + * @typedef {import('mdast').Text} Text + * @typedef {import('mdast').ThematicBreak} ThematicBreak + * @typedef {import('mdast').ReferenceType} ReferenceType + * @typedef {import('../index.js').CompileData} CompileData + */ + +/** + * @typedef {Root | Content} Node + * @typedef {Extract} Parent + * + * @typedef {Omit & {type: 'fragment', children: Array}} Fragment + */ + +/** + * @callback Transform + * Extra transform, to change the AST afterwards. + * @param {Root} tree + * Tree to transform. + * @returns {Root | undefined | null | void} + * New tree or nothing (in which case the current tree is used). + * + * @callback Handle + * Handle a token. + * @param {CompileContext} this + * Context. + * @param {Token} token + * Current token. + * @returns {void} + * Nothing. + * + * @typedef {Record} Handles + * Token types mapping to handles + * + * @callback OnEnterError + * Handle the case where the `right` token is open, but it is closed (by the + * `left` token) or because we reached the end of the document. + * @param {Omit} this + * Context. + * @param {Token | undefined} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @callback OnExitError + * Handle the case where the `right` token is open but it is closed by + * exiting the `left` token. + * @param {Omit} this + * Context. + * @param {Token} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @typedef {[Token, OnEnterError | undefined]} TokenTuple + * Open token on the stack, with an optional error handler for when + * that token isn’t closed properly. + */ + +/** + * @typedef Config + * Configuration. + * + * We have our defaults, but extensions will add more. + * @property {Array} canContainEols + * Token types where line endings are used. + * @property {Handles} enter + * Opening handles. + * @property {Handles} exit + * Closing handles. + * @property {Array} transforms + * Tree transforms. + * + * @typedef {Partial} Extension + * Change how markdown tokens from micromark are turned into mdast. + * + * @typedef CompileContext + * mdast compiler context. + * @property {Array} stack + * Stack of nodes. + * @property {Array} tokenStack + * Stack of tokens. + * @property {(key: Key) => CompileData[Key]} getData + * Get data from the key/value store. + * @property {(key: Key, value?: CompileData[Key]) => void} setData + * Set data into the key/value store. + * @property {(this: CompileContext) => void} buffer + * Capture some of the output data. + * @property {(this: CompileContext) => string} resume + * Stop capturing and access the output data. + * @property {(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter + * Enter a token. + * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit + * Exit a token. + * @property {TokenizeContext['sliceSerialize']} sliceSerialize + * Get the string value of a token. + * @property {Config} config + * Configuration. + * + * @typedef FromMarkdownOptions + * Configuration for how to build mdast. + * @property {Array> | null | undefined} [mdastExtensions] + * Extensions for this utility to change how tokens are turned into a tree. + * + * @typedef {ParseOptions & FromMarkdownOptions} Options + * Configuration. + */ + +// To do: micromark: create a registry of tokens? +// To do: next major: don’t return given `Node` from `enter`. +// To do: next major: remove setter/getter. + + + + + + + + + + +const lib_own = {}.hasOwnProperty + +/** + * @param value + * Markdown to parse. + * @param encoding + * Character encoding for when `value` is `Buffer`. + * @param options + * Configuration. + * @returns + * mdast tree. + */ +const fromMarkdown = + /** + * @type {( + * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) & + * ((value: Value, options?: Options | null | undefined) => Root) + * )} + */ + + /** + * @param {Value} value + * @param {Encoding | Options | null | undefined} [encoding] + * @param {Options | null | undefined} [options] + * @returns {Root} + */ + function (value, encoding, options) { + if (typeof encoding !== 'string') { + options = encoding + encoding = undefined + } + return compiler(options)( + postprocess( + parse(options).document().write(preprocess()(value, encoding, true)) + ) + ) + } + +/** + * Note this compiler only understand complete buffering, not streaming. + * + * @param {Options | null | undefined} [options] + */ +function compiler(options) { + /** @type {Config} */ + const config = { + transforms: [], + canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'], + enter: { + autolink: opener(link), + autolinkProtocol: onenterdata, + autolinkEmail: onenterdata, + atxHeading: opener(heading), + blockQuote: opener(blockQuote), + characterEscape: onenterdata, + characterReference: onenterdata, + codeFenced: opener(codeFlow), + codeFencedFenceInfo: buffer, + codeFencedFenceMeta: buffer, + codeIndented: opener(codeFlow, buffer), + codeText: opener(codeText, buffer), + codeTextData: onenterdata, + data: onenterdata, + codeFlowValue: onenterdata, + definition: opener(definition), + definitionDestinationString: buffer, + definitionLabelString: buffer, + definitionTitleString: buffer, + emphasis: opener(emphasis), + hardBreakEscape: opener(hardBreak), + hardBreakTrailing: opener(hardBreak), + htmlFlow: opener(html, buffer), + htmlFlowData: onenterdata, + htmlText: opener(html, buffer), + htmlTextData: onenterdata, + image: opener(image), + label: buffer, + link: opener(link), + listItem: opener(listItem), + listItemValue: onenterlistitemvalue, + listOrdered: opener(list, onenterlistordered), + listUnordered: opener(list), + paragraph: opener(paragraph), + reference: onenterreference, + referenceString: buffer, + resourceDestinationString: buffer, + resourceTitleString: buffer, + setextHeading: opener(heading), + strong: opener(strong), + thematicBreak: opener(thematicBreak) + }, + exit: { + atxHeading: closer(), + atxHeadingSequence: onexitatxheadingsequence, + autolink: closer(), + autolinkEmail: onexitautolinkemail, + autolinkProtocol: onexitautolinkprotocol, + blockQuote: closer(), + characterEscapeValue: onexitdata, + characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, + characterReferenceMarkerNumeric: onexitcharacterreferencemarker, + characterReferenceValue: onexitcharacterreferencevalue, + codeFenced: closer(onexitcodefenced), + codeFencedFence: onexitcodefencedfence, + codeFencedFenceInfo: onexitcodefencedfenceinfo, + codeFencedFenceMeta: onexitcodefencedfencemeta, + codeFlowValue: onexitdata, + codeIndented: closer(onexitcodeindented), + codeText: closer(onexitcodetext), + codeTextData: onexitdata, + data: onexitdata, + definition: closer(), + definitionDestinationString: onexitdefinitiondestinationstring, + definitionLabelString: onexitdefinitionlabelstring, + definitionTitleString: onexitdefinitiontitlestring, + emphasis: closer(), + hardBreakEscape: closer(onexithardbreak), + hardBreakTrailing: closer(onexithardbreak), + htmlFlow: closer(onexithtmlflow), + htmlFlowData: onexitdata, + htmlText: closer(onexithtmltext), + htmlTextData: onexitdata, + image: closer(onexitimage), + label: onexitlabel, + labelText: onexitlabeltext, + lineEnding: onexitlineending, + link: closer(onexitlink), + listItem: closer(), + listOrdered: closer(), + listUnordered: closer(), + paragraph: closer(), + referenceString: onexitreferencestring, + resourceDestinationString: onexitresourcedestinationstring, + resourceTitleString: onexitresourcetitlestring, + resource: onexitresource, + setextHeading: closer(onexitsetextheading), + setextHeadingLineSequence: onexitsetextheadinglinesequence, + setextHeadingText: onexitsetextheadingtext, + strong: closer(), + thematicBreak: closer() + } + } + configure(config, (options || {}).mdastExtensions || []) + + /** @type {CompileData} */ + const data = {} + return compile + + /** + * Turn micromark events into an mdast tree. + * + * @param {Array} events + * Events. + * @returns {Root} + * mdast tree. + */ + function compile(events) { + /** @type {Root} */ + let tree = { + type: 'root', + children: [] + } + /** @type {Omit} */ + const context = { + stack: [tree], + tokenStack: [], + config, + enter, + exit, + buffer, + resume, + setData, + getData + } + /** @type {Array} */ + const listStack = [] + let index = -1 + while (++index < events.length) { + // We preprocess lists to add `listItem` tokens, and to infer whether + // items the list itself are spread out. + if ( + events[index][1].type === 'listOrdered' || + events[index][1].type === 'listUnordered' + ) { + if (events[index][0] === 'enter') { + listStack.push(index) + } else { + const tail = listStack.pop() + index = prepareList(events, tail, index) + } + } + } + index = -1 + while (++index < events.length) { + const handler = config[events[index][0]] + if (lib_own.call(handler, events[index][1].type)) { + handler[events[index][1].type].call( + Object.assign( + { + sliceSerialize: events[index][2].sliceSerialize + }, + context + ), + events[index][1] + ) + } + } + + // Handle tokens still being open. + if (context.tokenStack.length > 0) { + const tail = context.tokenStack[context.tokenStack.length - 1] + const handler = tail[1] || defaultOnError + handler.call(context, undefined, tail[0]) + } + + // Figure out `root` position. + tree.position = { + start: lib_point( + events.length > 0 + ? events[0][1].start + : { + line: 1, + column: 1, + offset: 0 + } + ), + end: lib_point( + events.length > 0 + ? events[events.length - 2][1].end + : { + line: 1, + column: 1, + offset: 0 + } + ) + } + + // Call transforms. + index = -1 + while (++index < config.transforms.length) { + tree = config.transforms[index](tree) || tree + } + return tree + } + + /** + * @param {Array} events + * @param {number} start + * @param {number} length + * @returns {number} + */ + function prepareList(events, start, length) { + let index = start - 1 + let containerBalance = -1 + let listSpread = false + /** @type {Token | undefined} */ + let listItem + /** @type {number | undefined} */ + let lineIndex + /** @type {number | undefined} */ + let firstBlankLineIndex + /** @type {boolean | undefined} */ + let atMarker + while (++index <= length) { + const event = events[index] + if ( + event[1].type === 'listUnordered' || + event[1].type === 'listOrdered' || + event[1].type === 'blockQuote' + ) { + if (event[0] === 'enter') { + containerBalance++ + } else { + containerBalance-- + } + atMarker = undefined + } else if (event[1].type === 'lineEndingBlank') { + if (event[0] === 'enter') { + if ( + listItem && + !atMarker && + !containerBalance && + !firstBlankLineIndex + ) { + firstBlankLineIndex = index + } + atMarker = undefined + } + } else if ( + event[1].type === 'linePrefix' || + event[1].type === 'listItemValue' || + event[1].type === 'listItemMarker' || + event[1].type === 'listItemPrefix' || + event[1].type === 'listItemPrefixWhitespace' + ) { + // Empty. + } else { + atMarker = undefined + } + if ( + (!containerBalance && + event[0] === 'enter' && + event[1].type === 'listItemPrefix') || + (containerBalance === -1 && + event[0] === 'exit' && + (event[1].type === 'listUnordered' || + event[1].type === 'listOrdered')) + ) { + if (listItem) { + let tailIndex = index + lineIndex = undefined + while (tailIndex--) { + const tailEvent = events[tailIndex] + if ( + tailEvent[1].type === 'lineEnding' || + tailEvent[1].type === 'lineEndingBlank' + ) { + if (tailEvent[0] === 'exit') continue + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + listSpread = true + } + tailEvent[1].type = 'lineEnding' + lineIndex = tailIndex + } else if ( + tailEvent[1].type === 'linePrefix' || + tailEvent[1].type === 'blockQuotePrefix' || + tailEvent[1].type === 'blockQuotePrefixWhitespace' || + tailEvent[1].type === 'blockQuoteMarker' || + tailEvent[1].type === 'listItemIndent' + ) { + // Empty + } else { + break + } + } + if ( + firstBlankLineIndex && + (!lineIndex || firstBlankLineIndex < lineIndex) + ) { + listItem._spread = true + } + + // Fix position. + listItem.end = Object.assign( + {}, + lineIndex ? events[lineIndex][1].start : event[1].end + ) + events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]) + index++ + length++ + } + + // Create a new list item. + if (event[1].type === 'listItemPrefix') { + listItem = { + type: 'listItem', + _spread: false, + start: Object.assign({}, event[1].start), + // @ts-expect-error: we’ll add `end` in a second. + end: undefined + } + // @ts-expect-error: `listItem` is most definitely defined, TS... + events.splice(index, 0, ['enter', listItem, event[2]]) + index++ + length++ + firstBlankLineIndex = undefined + atMarker = true + } + } + } + events[start][1]._spread = listSpread + return length + } + + /** + * Set data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @param {CompileData[Key]} [value] + * New value. + * @returns {void} + * Nothing. + */ + function setData(key, value) { + data[key] = value + } + + /** + * Get data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @returns {CompileData[Key]} + * Value. + */ + function getData(key) { + return data[key] + } + + /** + * Create an opener handle. + * + * @param {(token: Token) => Node} create + * Create a node. + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function opener(create, and) { + return open + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function open(token) { + enter.call(this, create(token), token) + if (and) and.call(this, token) + } + } + + /** + * @this {CompileContext} + * @returns {void} + */ + function buffer() { + this.stack.push({ + type: 'fragment', + children: [] + }) + } + + /** + * @template {Node} Kind + * Node type. + * @this {CompileContext} + * Context. + * @param {Kind} node + * Node to enter. + * @param {Token} token + * Corresponding token. + * @param {OnEnterError | undefined} [errorHandler] + * Handle the case where this token is open, but it is closed by something else. + * @returns {Kind} + * The given node. + */ + function enter(node, token, errorHandler) { + const parent = this.stack[this.stack.length - 1] + // @ts-expect-error: Assume `Node` can exist as a child of `parent`. + parent.children.push(node) + this.stack.push(node) + this.tokenStack.push([token, errorHandler]) + // @ts-expect-error: `end` will be patched later. + node.position = { + start: lib_point(token.start) + } + return node + } + + /** + * Create a closer handle. + * + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function closer(and) { + return close + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function close(token) { + if (and) and.call(this, token) + exit.call(this, token) + } + } + + /** + * @this {CompileContext} + * Context. + * @param {Token} token + * Corresponding token. + * @param {OnExitError | undefined} [onExitError] + * Handle the case where another token is open. + * @returns {Node} + * The closed node. + */ + function exit(token, onExitError) { + const node = this.stack.pop() + const open = this.tokenStack.pop() + if (!open) { + throw new Error( + 'Cannot close `' + + token.type + + '` (' + + stringifyPosition({ + start: token.start, + end: token.end + }) + + '): it’s not open' + ) + } else if (open[0].type !== token.type) { + if (onExitError) { + onExitError.call(this, token, open[0]) + } else { + const handler = open[1] || defaultOnError + handler.call(this, token, open[0]) + } + } + node.position.end = lib_point(token.end) + return node + } + + /** + * @this {CompileContext} + * @returns {string} + */ + function resume() { + return lib_toString(this.stack.pop()) + } + + // + // Handlers. + // + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistordered() { + setData('expectingFirstListItemValue', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistitemvalue(token) { + if (getData('expectingFirstListItemValue')) { + const ancestor = this.stack[this.stack.length - 2] + ancestor.start = Number.parseInt(this.sliceSerialize(token), 10) + setData('expectingFirstListItemValue') + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfenceinfo() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.lang = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfencemeta() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.meta = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfence() { + // Exit if this is the closing fence. + if (getData('flowCodeInside')) return + this.buffer() + setData('flowCodeInside', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefenced() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, '') + setData('flowCodeInside') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodeindented() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/(\r?\n|\r)$/g, '') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitionlabelstring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + node.label = label + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiontitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiondestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitatxheadingsequence(token) { + const node = this.stack[this.stack.length - 1] + if (!node.depth) { + const depth = this.sliceSerialize(token).length + node.depth = depth + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadingtext() { + setData('setextHeadingSlurpLineEnding', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadinglinesequence(token) { + const node = this.stack[this.stack.length - 1] + node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2 + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheading() { + setData('setextHeadingSlurpLineEnding') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterdata(token) { + const node = this.stack[this.stack.length - 1] + let tail = node.children[node.children.length - 1] + if (!tail || tail.type !== 'text') { + // Add a new text node. + tail = text() + // @ts-expect-error: we’ll add `end` later. + tail.position = { + start: lib_point(token.start) + } + // @ts-expect-error: Assume `parent` accepts `text`. + node.children.push(tail) + } + this.stack.push(tail) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitdata(token) { + const tail = this.stack.pop() + tail.value += this.sliceSerialize(token) + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlineending(token) { + const context = this.stack[this.stack.length - 1] + // If we’re at a hard break, include the line ending in there. + if (getData('atHardBreak')) { + const tail = context.children[context.children.length - 1] + tail.position.end = lib_point(token.end) + setData('atHardBreak') + return + } + if ( + !getData('setextHeadingSlurpLineEnding') && + config.canContainEols.includes(context.type) + ) { + onenterdata.call(this, token) + onexitdata.call(this, token) + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithardbreak() { + setData('atHardBreak', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmlflow() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmltext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcodetext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlink() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitimage() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabeltext(token) { + const string = this.sliceSerialize(token) + const ancestor = this.stack[this.stack.length - 2] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + ancestor.label = decodeString(string) + // @ts-expect-error: same as above. + ancestor.identifier = normalizeIdentifier(string).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabel() { + const fragment = this.stack[this.stack.length - 1] + const value = this.resume() + const node = this.stack[this.stack.length - 1] + // Assume a reference. + setData('inReference', true) + if (node.type === 'link') { + /** @type {Array} */ + // @ts-expect-error: Assume static phrasing content. + const children = fragment.children + node.children = children + } else { + node.alt = value + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcedestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcetitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresource() { + setData('inReference') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterreference() { + setData('referenceType', 'collapsed') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitreferencestring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + node.label = label + // @ts-expect-error: same as above. + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + setData('referenceType', 'full') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcharacterreferencemarker(token) { + setData('characterReferenceType', token.type) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcharacterreferencevalue(token) { + const data = this.sliceSerialize(token) + const type = getData('characterReferenceType') + /** @type {string} */ + let value + if (type) { + value = decodeNumericCharacterReference( + data, + type === 'characterReferenceMarkerNumeric' ? 10 : 16 + ) + setData('characterReferenceType') + } else { + const result = decodeNamedCharacterReference(data) + value = result + } + const tail = this.stack.pop() + tail.value += value + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkprotocol(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = this.sliceSerialize(token) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkemail(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = 'mailto:' + this.sliceSerialize(token) + } + + // + // Creaters. + // + + /** @returns {Blockquote} */ + function blockQuote() { + return { + type: 'blockquote', + children: [] + } + } + + /** @returns {Code} */ + function codeFlow() { + return { + type: 'code', + lang: null, + meta: null, + value: '' + } + } + + /** @returns {InlineCode} */ + function codeText() { + return { + type: 'inlineCode', + value: '' + } + } + + /** @returns {Definition} */ + function definition() { + return { + type: 'definition', + identifier: '', + label: null, + title: null, + url: '' + } + } + + /** @returns {Emphasis} */ + function emphasis() { + return { + type: 'emphasis', + children: [] + } + } + + /** @returns {Heading} */ + function heading() { + // @ts-expect-error `depth` will be set later. + return { + type: 'heading', + depth: undefined, + children: [] + } + } + + /** @returns {Break} */ + function hardBreak() { + return { + type: 'break' + } + } + + /** @returns {HTML} */ + function html() { + return { + type: 'html', + value: '' + } + } + + /** @returns {Image} */ + function image() { + return { + type: 'image', + title: null, + url: '', + alt: null + } + } + + /** @returns {Link} */ + function link() { + return { + type: 'link', + title: null, + url: '', + children: [] + } + } + + /** + * @param {Token} token + * @returns {List} + */ + function list(token) { + return { + type: 'list', + ordered: token.type === 'listOrdered', + start: null, + spread: token._spread, + children: [] + } + } + + /** + * @param {Token} token + * @returns {ListItem} + */ + function listItem(token) { + return { + type: 'listItem', + spread: token._spread, + checked: null, + children: [] + } + } + + /** @returns {Paragraph} */ + function paragraph() { + return { + type: 'paragraph', + children: [] + } + } + + /** @returns {Strong} */ + function strong() { + return { + type: 'strong', + children: [] + } + } + + /** @returns {Text} */ + function text() { + return { + type: 'text', + value: '' + } + } + + /** @returns {ThematicBreak} */ + function thematicBreak() { + return { + type: 'thematicBreak' + } + } +} + +/** + * Copy a point-like value. + * + * @param {Point} d + * Point-like value. + * @returns {Point} + * unist point. + */ +function lib_point(d) { + return { + line: d.line, + column: d.column, + offset: d.offset + } +} + +/** + * @param {Config} combined + * @param {Array>} extensions + * @returns {void} + */ +function configure(combined, extensions) { + let index = -1 + while (++index < extensions.length) { + const value = extensions[index] + if (Array.isArray(value)) { + configure(combined, value) + } else { + extension(combined, value) + } + } +} + +/** + * @param {Config} combined + * @param {Extension} extension + * @returns {void} + */ +function extension(combined, extension) { + /** @type {keyof Extension} */ + let key + for (key in extension) { + if (lib_own.call(extension, key)) { + if (key === 'canContainEols') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'transforms') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'enter' || key === 'exit') { + const right = extension[key] + if (right) { + Object.assign(combined[key], right) + } + } + } + } +} + +/** @type {OnEnterError} */ +function defaultOnError(left, right) { + if (left) { + throw new Error( + 'Cannot close `' + + left.type + + '` (' + + stringifyPosition({ + start: left.start, + end: left.end + }) + + '): a different token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is open' + ) + } else { + throw new Error( + 'Cannot close document, a token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is still open' + ) + } +} + +// EXTERNAL MODULE: ./node_modules/ts-dedent/esm/index.js +var esm = __webpack_require__(60513); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/createText-ca0c5216.js + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = (0,esm/* dedent */.T)(withoutMultipleNewlines); + return withoutExtraSpaces; +} +function markdownToLines(markdown) { + const preprocessedMarkdown = preprocessMarkdown(markdown); + const { children } = fromMarkdown(preprocessedMarkdown); + const lines = [[]]; + let currentLine = 0; + function processNode(node, parentType = "normal") { + if (node.type === "text") { + const textLines = node.value.split("\n"); + textLines.forEach((textLine, index) => { + if (index !== 0) { + currentLine++; + lines.push([]); + } + textLine.split(" ").forEach((word) => { + if (word) { + lines[currentLine].push({ content: word, type: parentType }); + } + }); + }); + } else if (node.type === "strong" || node.type === "emphasis") { + node.children.forEach((contentNode) => { + processNode(contentNode, node.type); + }); + } + } + children.forEach((treeNode) => { + if (treeNode.type === "paragraph") { + treeNode.children.forEach((contentNode) => { + processNode(contentNode); + }); + } + }); + return lines; +} +function markdownToHTML(markdown) { + const { children } = fromMarkdown(markdown); + function output(node) { + if (node.type === "text") { + return node.value.replace(/\n/g, "
    "); + } else if (node.type === "strong") { + return `${node.children.map(output).join("")}`; + } else if (node.type === "emphasis") { + return `${node.children.map(output).join("")}`; + } else if (node.type === "paragraph") { + return `

    ${node.children.map(output).join("")}

    `; + } + return `Unsupported markdown: ${node.type}`; + } + return children.map(output).join(""); +} +function splitTextToChars(text) { + if (Intl.Segmenter) { + return [...new Intl.Segmenter().segment(text)].map((s) => s.segment); + } + return [...text]; +} +function splitWordToFitWidth(checkFit, word) { + const characters = splitTextToChars(word.content); + return splitWordToFitWidthRecursion(checkFit, [], characters, word.type); +} +function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) { + if (remainingChars.length === 0) { + return [ + { content: usedChars.join(""), type }, + { content: "", type } + ]; + } + const [nextChar, ...rest] = remainingChars; + const newWord = [...usedChars, nextChar]; + if (checkFit([{ content: newWord.join(""), type }])) { + return splitWordToFitWidthRecursion(checkFit, newWord, rest, type); + } + if (usedChars.length === 0 && nextChar) { + usedChars.push(nextChar); + remainingChars.shift(); + } + return [ + { content: usedChars.join(""), type }, + { content: remainingChars.join(""), type } + ]; +} +function splitLineToFitWidth(line, checkFit) { + if (line.some(({ content }) => content.includes("\n"))) { + throw new Error("splitLineToFitWidth does not support newlines in the line"); + } + return splitLineToFitWidthRecursion(line, checkFit); +} +function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) { + if (words.length === 0) { + if (newLine.length > 0) { + lines.push(newLine); + } + return lines.length > 0 ? lines : []; + } + let joiner = ""; + if (words[0].content === " ") { + joiner = " "; + words.shift(); + } + const nextWord = words.shift() ?? { content: " ", type: "normal" }; + const lineWithNextWord = [...newLine]; + if (joiner !== "") { + lineWithNextWord.push({ content: joiner, type: "normal" }); + } + lineWithNextWord.push(nextWord); + if (checkFit(lineWithNextWord)) { + return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord); + } + if (newLine.length > 0) { + lines.push(newLine); + words.unshift(nextWord); + } else if (nextWord.content) { + const [line, rest] = splitWordToFitWidth(checkFit, nextWord); + lines.push([line]); + if (rest.content) { + words.unshift(rest); + } + } + return splitLineToFitWidthRecursion(words, checkFit, lines); +} +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlSpan(element, node, width, classes, addBackground = false) { + const fo = element.append("foreignObject"); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + ` + " + label + "" + ); + applyStyle(div, node.labelStyle); + div.style("display", "table-cell"); + div.style("white-space", "nowrap"); + div.style("max-width", width + "px"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + if (addBackground) { + div.attr("class", "labelBkg"); + } + let bbox = div.node().getBoundingClientRect(); + if (bbox.width === width) { + div.style("display", "table"); + div.style("white-space", "break-spaces"); + div.style("width", width + "px"); + bbox = div.node().getBoundingClientRect(); + } + fo.style("width", bbox.width); + fo.style("height", bbox.height); + return fo.node(); +} +function createTspan(textElement, lineIndex, lineHeight) { + return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); +} +function computeWidthOfText(parentNode, lineHeight, line) { + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, line); + const textLength = testSpan.node().getComputedTextLength(); + testElement.remove(); + return textLength; +} +function computeDimensionOfText(parentNode, lineHeight, text) { + var _a; + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, [{ content: text, type: "normal" }]); + const textDimension = (_a = testSpan.node()) == null ? void 0 : _a.getBoundingClientRect(); + if (textDimension) { + testElement.remove(); + } + return textDimension; +} +function createFormattedText(width, g, structuredText, addBackground = false) { + const lineHeight = 1.1; + const labelGroup = g.append("g"); + const bkg = labelGroup.insert("rect").attr("class", "background"); + const textElement = labelGroup.append("text").attr("y", "-10.1"); + let lineIndex = 0; + for (const line of structuredText) { + const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width; + const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth); + for (const preparedLine of linesUnderWidth) { + const tspan = createTspan(textElement, lineIndex, lineHeight); + updateTextContentAndStyles(tspan, preparedLine); + lineIndex++; + } + } + if (addBackground) { + const bbox = textElement.node().getBBox(); + const padding = 2; + bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); + return labelGroup.node(); + } else { + return textElement.node(); + } +} +function updateTextContentAndStyles(tspan, wrappedLine) { + tspan.text(""); + wrappedLine.forEach((word, index) => { + const innerTspan = tspan.append("tspan").attr("font-style", word.type === "emphasis" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); + if (index === 0) { + innerTspan.text(word.content); + } else { + innerTspan.text(" " + word.content); + } + }); +} +const createText = (el, text = "", { + style = "", + isTitle = false, + classes = "", + useHtmlLabels = true, + isNode = true, + width = 200, + addSvgBackground = false +} = {}) => { + mermaid_6dc72991.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,mermaid_6dc72991.M)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + // cspell: disable-line + (s) => `` + ), + labelStyle: style.replace("fill:", "color:") + }; + const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground); + return vertexNode; + } else { + const structuredText = markdownToLines(text); + const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); + return svgLabel; + } +}; + + + +/***/ }), + +/***/ 98055: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ insertMarkers$1), +/* harmony export */ b: () => (/* binding */ clear$1), +/* harmony export */ c: () => (/* binding */ createLabel$1), +/* harmony export */ d: () => (/* binding */ clear), +/* harmony export */ e: () => (/* binding */ insertNode), +/* harmony export */ f: () => (/* binding */ insertEdgeLabel), +/* harmony export */ g: () => (/* binding */ getSubGraphTitleMargins), +/* harmony export */ h: () => (/* binding */ insertEdge), +/* harmony export */ i: () => (/* binding */ intersectRect$1), +/* harmony export */ j: () => (/* binding */ positionEdgeLabel), +/* harmony export */ k: () => (/* binding */ getLineFunctionsWithOffset), +/* harmony export */ l: () => (/* binding */ labelHelper), +/* harmony export */ m: () => (/* binding */ addEdgeMarkers), +/* harmony export */ p: () => (/* binding */ positionNode), +/* harmony export */ s: () => (/* binding */ setNodeElem), +/* harmony export */ u: () => (/* binding */ updateNodeBounds) +/* harmony export */ }); +/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99702); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); +/* harmony import */ var _createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(18897); + + + +const insertMarkers = (elem, markerArray, type, id) => { + markerArray.forEach((markerName) => { + markers[markerName](elem, type, id); + }); +}; +const extension = (elem, type, id) => { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Making markers for ", id); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionStart").attr("class", "marker extension " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionEnd").attr("class", "marker extension " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); +}; +const composition = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionStart").attr("class", "marker composition " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionEnd").attr("class", "marker composition " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const aggregation = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationStart").attr("class", "marker aggregation " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationEnd").attr("class", "marker aggregation " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const dependency = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyStart").attr("class", "marker dependency " + type).attr("refX", 6).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyEnd").attr("class", "marker dependency " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const lollipop = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopStart").attr("class", "marker lollipop " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopEnd").attr("class", "marker lollipop " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); +}; +const point = (elem, type, id) => { + elem.append("marker").attr("id", id + "_" + type + "-pointEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 6).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", id + "_" + type + "-pointStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 4.5).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const circle$1 = (elem, type, id) => { + elem.append("marker").attr("id", id + "_" + type + "-circleEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", id + "_" + type + "-circleStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const cross = (elem, type, id) => { + elem.append("marker").attr("id", id + "_" + type + "-crossEnd").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", id + "_" + type + "-crossStart").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); +}; +const barb = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); +}; +const markers = { + extension, + composition, + aggregation, + dependency, + lollipop, + point, + circle: circle$1, + cross, + barb +}; +const insertMarkers$1 = insertMarkers; +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlLabel(node) { + const fo = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + '" + label + "" + ); + applyStyle(div, node.labelStyle); + div.style("display", "inline-block"); + div.style("white-space", "nowrap"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + return fo.node(); +} +const createLabel = (_vertexText, style, isTitle, isNode) => { + let vertexText = _vertexText || ""; + if (typeof vertexText === "object") { + vertexText = vertexText[0]; + } + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + vertexText = vertexText.replace(/\\n|\n/g, "
    "); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("vertexText" + vertexText); + const node = { + isNode, + label: (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.M)(vertexText).replace( + /fa[blrs]?:fa-[\w-]+/g, + // cspell: disable-line + (s) => `` + ), + labelStyle: style.replace("fill:", "color:") + }; + let vertexNode = addHtmlLabel(node); + return vertexNode; + } else { + const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", style.replace("color:", "fill:")); + let rows = []; + if (typeof vertexText === "string") { + rows = vertexText.split(/\\n|\n|/gi); + } else if (Array.isArray(vertexText)) { + rows = vertexText; + } else { + rows = []; + } + for (const row of rows) { + const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "0"); + if (isTitle) { + tspan.setAttribute("class", "title-row"); + } else { + tspan.setAttribute("class", "row"); + } + tspan.textContent = row.trim(); + svgLabel.appendChild(tspan); + } + return svgLabel; + } +}; +const createLabel$1 = createLabel; +const labelHelper = async (parent, node, _classes, isNode) => { + let classes; + const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + if (!_classes) { + classes = "node default"; + } else { + classes = _classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const label = shapeSvg.insert("g").attr("class", "label").attr("style", node.labelStyle); + let labelText; + if (node.labelText === void 0) { + labelText = ""; + } else { + labelText = typeof node.labelText === "string" ? node.labelText : node.labelText[0]; + } + const textNode = label.node(); + let text; + if (node.labelType === "markdown") { + text = (0,_createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_2__.a)(label, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.M)(labelText), (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()), { + useHtmlLabels, + width: node.width || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.wrappingWidth, + classes: "markdown-node-label" + }); + } else { + text = textNode.appendChild( + createLabel$1( + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.M)(labelText), (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()), + node.labelStyle, + false, + isNode + ) + ); + } + let bbox = text.getBBox(); + const halfPadding = node.padding / 2; + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(text); + const images = div.getElementsByTagName("img"); + if (images) { + const noImgText = labelText.replace(/]*>/g, "").trim() === ""; + await Promise.all( + [...images].map( + (img) => new Promise((res) => { + function setupImage() { + img.style.display = "flex"; + img.style.flexDirection = "column"; + if (noImgText) { + const bodyFontSize = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize ? (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize : window.getComputedStyle(document.body).fontSize; + const enlargingFactor = 5; + const width = parseInt(bodyFontSize, 10) * enlargingFactor + "px"; + img.style.minWidth = width; + img.style.maxWidth = width; + } else { + img.style.width = "100%"; + } + res(img); + } + setTimeout(() => { + if (img.complete) { + setupImage(); + } + }); + img.addEventListener("error", setupImage); + img.addEventListener("load", setupImage); + }) + ) + ); + } + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (useHtmlLabels) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } else { + label.attr("transform", "translate(0, " + -bbox.height / 2 + ")"); + } + if (node.centerLabel) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } + label.insert("rect", ":first-child"); + return { shapeSvg, bbox, halfPadding, label }; +}; +const updateNodeBounds = (node, element) => { + const bbox = element.node().getBBox(); + node.width = bbox.width; + node.height = bbox.height; +}; +function insertPolygonShape(parent, w, h, points) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("class", "label-container").attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); +} +function intersectNode(node, point2) { + return node.intersect(point2); +} +function intersectEllipse(node, rx, ry, point2) { + var cx = node.x; + var cy = node.y; + var px = cx - point2.x; + var py = cy - point2.y; + var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); + var dx = Math.abs(rx * ry * px / det); + if (point2.x < cx) { + dx = -dx; + } + var dy = Math.abs(rx * ry * py / det); + if (point2.y < cy) { + dy = -dy; + } + return { x: cx + dx, y: cy + dy }; +} +function intersectCircle(node, rx, point2) { + return intersectEllipse(node, rx, rx, point2); +} +function intersectLine(p1, p2, q1, q2) { + var a1, a2, b1, b2, c1, c2; + var r1, r2, r3, r4; + var denom, offset, num; + var x, y; + a1 = p2.y - p1.y; + b1 = p1.x - p2.x; + c1 = p2.x * p1.y - p1.x * p2.y; + r3 = a1 * q1.x + b1 * q1.y + c1; + r4 = a1 * q2.x + b1 * q2.y + c1; + if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { + return; + } + a2 = q2.y - q1.y; + b2 = q1.x - q2.x; + c2 = q2.x * q1.y - q1.x * q2.y; + r1 = a2 * p1.x + b2 * p1.y + c2; + r2 = a2 * p2.x + b2 * p2.y + c2; + if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { + return; + } + denom = a1 * b2 - a2 * b1; + if (denom === 0) { + return; + } + offset = Math.abs(denom / 2); + num = b1 * c2 - b2 * c1; + x = num < 0 ? (num - offset) / denom : (num + offset) / denom; + num = a2 * c1 - a1 * c2; + y = num < 0 ? (num - offset) / denom : (num + offset) / denom; + return { x, y }; +} +function sameSign(r1, r2) { + return r1 * r2 > 0; +} +function intersectPolygon(node, polyPoints, point2) { + var x1 = node.x; + var y1 = node.y; + var intersections = []; + var minX = Number.POSITIVE_INFINITY; + var minY = Number.POSITIVE_INFINITY; + if (typeof polyPoints.forEach === "function") { + polyPoints.forEach(function(entry) { + minX = Math.min(minX, entry.x); + minY = Math.min(minY, entry.y); + }); + } else { + minX = Math.min(minX, polyPoints.x); + minY = Math.min(minY, polyPoints.y); + } + var left = x1 - node.width / 2 - minX; + var top = y1 - node.height / 2 - minY; + for (var i = 0; i < polyPoints.length; i++) { + var p1 = polyPoints[i]; + var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; + var intersect2 = intersectLine( + node, + point2, + { x: left + p1.x, y: top + p1.y }, + { x: left + p2.x, y: top + p2.y } + ); + if (intersect2) { + intersections.push(intersect2); + } + } + if (!intersections.length) { + return node; + } + if (intersections.length > 1) { + intersections.sort(function(p, q) { + var pdx = p.x - point2.x; + var pdy = p.y - point2.y; + var distp = Math.sqrt(pdx * pdx + pdy * pdy); + var qdx = q.x - point2.x; + var qdy = q.y - point2.y; + var distq = Math.sqrt(qdx * qdx + qdy * qdy); + return distp < distq ? -1 : distp === distq ? 0 : 1; + }); + } + return intersections[0]; +} +const intersectRect = (node, point2) => { + var x = node.x; + var y = node.y; + var dx = point2.x - x; + var dy = point2.y - y; + var w = node.width / 2; + var h = node.height / 2; + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + if (dy < 0) { + h = -h; + } + sx = dy === 0 ? 0 : h * dx / dy; + sy = h; + } else { + if (dx < 0) { + w = -w; + } + sx = w; + sy = dx === 0 ? 0 : w * dy / dx; + } + return { x: x + sx, y: y + sy }; +}; +const intersectRect$1 = intersectRect; +const intersect = { + node: intersectNode, + circle: intersectCircle, + ellipse: intersectEllipse, + polygon: intersectPolygon, + rect: intersectRect$1 +}; +const note = async (parent, node) => { + const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels; + if (!useHtmlLabels) { + node.centerLabel = true; + } + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes, + true + ); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Classes = ", node.classes); + const rect2 = shapeSvg.insert("rect", ":first-child"); + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const note$1 = note; +const expandAndDeduplicateDirections = (directions) => { + const uniqueDirections = /* @__PURE__ */ new Set(); + for (const direction of directions) { + switch (direction) { + case "x": + uniqueDirections.add("right"); + uniqueDirections.add("left"); + break; + case "y": + uniqueDirections.add("up"); + uniqueDirections.add("down"); + break; + default: + uniqueDirections.add(direction); + break; + } + } + return uniqueDirections; +}; +const getArrowPoints = (duplicatedDirections, bbox, node) => { + const directions = expandAndDeduplicateDirections(duplicatedDirections); + const f = 2; + const height = bbox.height + 2 * node.padding; + const midpoint = height / f; + const width = bbox.width + 2 * midpoint + node.padding; + const padding = node.padding / 2; + if (directions.has("right") && directions.has("left") && directions.has("up") && directions.has("down")) { + return [ + // Bottom + { x: 0, y: 0 }, + { x: midpoint, y: 0 }, + { x: width / 2, y: 2 * padding }, + { x: width - midpoint, y: 0 }, + { x: width, y: 0 }, + // Right + { x: width, y: -height / 3 }, + { x: width + 2 * padding, y: -height / 2 }, + { x: width, y: -2 * height / 3 }, + { x: width, y: -height }, + // Top + { x: width - midpoint, y: -height }, + { x: width / 2, y: -height - 2 * padding }, + { x: midpoint, y: -height }, + // Left + { x: 0, y: -height }, + { x: 0, y: -2 * height / 3 }, + { x: -2 * padding, y: -height / 2 }, + { x: 0, y: -height / 3 } + ]; + } + if (directions.has("right") && directions.has("left") && directions.has("up")) { + return [ + { x: midpoint, y: 0 }, + { x: width - midpoint, y: 0 }, + { x: width, y: -height / 2 }, + { x: width - midpoint, y: -height }, + { x: midpoint, y: -height }, + { x: 0, y: -height / 2 } + ]; + } + if (directions.has("right") && directions.has("left") && directions.has("down")) { + return [ + { x: 0, y: 0 }, + { x: midpoint, y: -height }, + { x: width - midpoint, y: -height }, + { x: width, y: 0 } + ]; + } + if (directions.has("right") && directions.has("up") && directions.has("down")) { + return [ + { x: 0, y: 0 }, + { x: width, y: -midpoint }, + { x: width, y: -height + midpoint }, + { x: 0, y: -height } + ]; + } + if (directions.has("left") && directions.has("up") && directions.has("down")) { + return [ + { x: width, y: 0 }, + { x: 0, y: -midpoint }, + { x: 0, y: -height + midpoint }, + { x: width, y: -height } + ]; + } + if (directions.has("right") && directions.has("left")) { + return [ + { x: midpoint, y: 0 }, + { x: midpoint, y: -padding }, + { x: width - midpoint, y: -padding }, + { x: width - midpoint, y: 0 }, + { x: width, y: -height / 2 }, + { x: width - midpoint, y: -height }, + { x: width - midpoint, y: -height + padding }, + { x: midpoint, y: -height + padding }, + { x: midpoint, y: -height }, + { x: 0, y: -height / 2 } + ]; + } + if (directions.has("up") && directions.has("down")) { + return [ + // Bottom center + { x: width / 2, y: 0 }, + // Left pont of bottom arrow + { x: 0, y: -padding }, + { x: midpoint, y: -padding }, + // Left top over vertical section + { x: midpoint, y: -height + padding }, + { x: 0, y: -height + padding }, + // Top of arrow + { x: width / 2, y: -height }, + { x: width, y: -height + padding }, + // Top of right vertical bar + { x: width - midpoint, y: -height + padding }, + { x: width - midpoint, y: -padding }, + { x: width, y: -padding } + ]; + } + if (directions.has("right") && directions.has("up")) { + return [ + { x: 0, y: 0 }, + { x: width, y: -midpoint }, + { x: 0, y: -height } + ]; + } + if (directions.has("right") && directions.has("down")) { + return [ + { x: 0, y: 0 }, + { x: width, y: 0 }, + { x: 0, y: -height } + ]; + } + if (directions.has("left") && directions.has("up")) { + return [ + { x: width, y: 0 }, + { x: 0, y: -midpoint }, + { x: width, y: -height } + ]; + } + if (directions.has("left") && directions.has("down")) { + return [ + { x: width, y: 0 }, + { x: 0, y: 0 }, + { x: width, y: -height } + ]; + } + if (directions.has("right")) { + return [ + { x: midpoint, y: -padding }, + { x: midpoint, y: -padding }, + { x: width - midpoint, y: -padding }, + { x: width - midpoint, y: 0 }, + { x: width, y: -height / 2 }, + { x: width - midpoint, y: -height }, + { x: width - midpoint, y: -height + padding }, + // top left corner of arrow + { x: midpoint, y: -height + padding }, + { x: midpoint, y: -height + padding } + ]; + } + if (directions.has("left")) { + return [ + { x: midpoint, y: 0 }, + { x: midpoint, y: -padding }, + // Two points, the right corners + { x: width - midpoint, y: -padding }, + { x: width - midpoint, y: -height + padding }, + { x: midpoint, y: -height + padding }, + { x: midpoint, y: -height }, + { x: 0, y: -height / 2 } + ]; + } + if (directions.has("up")) { + return [ + // Bottom center + { x: midpoint, y: -padding }, + // Left top over vertical section + { x: midpoint, y: -height + padding }, + { x: 0, y: -height + padding }, + // Top of arrow + { x: width / 2, y: -height }, + { x: width, y: -height + padding }, + // Top of right vertical bar + { x: width - midpoint, y: -height + padding }, + { x: width - midpoint, y: -padding } + ]; + } + if (directions.has("down")) { + return [ + // Bottom center + { x: width / 2, y: 0 }, + // Left pont of bottom arrow + { x: 0, y: -padding }, + { x: midpoint, y: -padding }, + // Left top over vertical section + { x: midpoint, y: -height + padding }, + { x: width - midpoint, y: -height + padding }, + { x: width - midpoint, y: -padding }, + { x: width, y: -padding } + ]; + } + return [{ x: 0, y: 0 }]; +}; +const formatClass = (str) => { + if (str) { + return " " + str; + } + return ""; +}; +const getClassesFromNode = (node, otherClasses) => { + return `${otherClasses ? otherClasses : "node default"}${formatClass(node.classes)} ${formatClass( + node.class + )}`; +}; +const question = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const s = w + h; + const points = [ + { x: s / 2, y: 0 }, + { x: s, y: -s / 2 }, + { x: s / 2, y: -s }, + { x: 0, y: -s / 2 } + ]; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Question main (Circle)"); + const questionElem = insertPolygonShape(shapeSvg, s, s, points); + questionElem.attr("style", node.style); + updateNodeBounds(node, questionElem); + node.intersect = function(point2) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("Intersect called"); + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const choice = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const s = 28; + const points = [ + { x: 0, y: s / 2 }, + { x: s / 2, y: 0 }, + { x: 0, y: -s / 2 }, + { x: -s / 2, y: 0 } + ]; + const choice2 = shapeSvg.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ); + choice2.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28); + node.width = 28; + node.height = 28; + node.intersect = function(point2) { + return intersect.circle(node, 14, point2); + }; + return shapeSvg; +}; +const hexagon = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const f = 4; + const h = bbox.height + node.padding; + const m = h / f; + const w = bbox.width + 2 * m + node.padding; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + const hex = insertPolygonShape(shapeSvg, w, h, points); + hex.attr("style", node.style); + updateNodeBounds(node, hex); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const block_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true); + const f = 2; + const h = bbox.height + 2 * node.padding; + const m = h / f; + const w = bbox.width + 2 * m + node.padding; + const points = getArrowPoints(node.directions, bbox, node); + const blockArrow = insertPolygonShape(shapeSvg, w, h, points); + blockArrow.attr("style", node.style); + updateNodeBounds(node, blockArrow); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_left_inv_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -h / 2, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: -h / 2, y: -h }, + { x: 0, y: -h / 2 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + node.width = w + h; + node.height = h; + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_right = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper(parent, node, getClassesFromNode(node), true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_left = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 2 * h / 6, y: 0 }, + { x: w + h / 6, y: 0 }, + { x: w - 2 * h / 6, y: -h }, + { x: -h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const trapezoid = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w + 2 * h / 6, y: 0 }, + { x: w - h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const inv_trapezoid = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: -2 * h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_right_inv_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w + h / 2, y: 0 }, + { x: w, y: -h / 2 }, + { x: w + h / 2, y: -h }, + { x: 0, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const cylinder = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const rx = w / 2; + const ry = rx / (2.5 + w / 50); + const h = bbox.height + ry + node.padding; + const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; + const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node.style).attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); + updateNodeBounds(node, el); + node.intersect = function(point2) { + const pos = intersect.rect(node, point2); + const x = pos.x - node.x; + if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { + let y = ry * ry * (1 - x * x / (rx * rx)); + if (y != 0) { + y = Math.sqrt(y); + } + y = ry - y; + if (point2.y - node.y > 0) { + y = -y; + } + pos.y += y; + } + return pos; + }; + return shapeSvg; +}; +const rect = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes + " " + node.class, + true + ); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = node.positioned ? node.width : bbox.width + node.padding; + const totalHeight = node.positioned ? node.height : bbox.height + node.padding; + const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; + const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; + rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const composite = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes, + true + ); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = node.positioned ? node.width : bbox.width + node.padding; + const totalHeight = node.positioned ? node.height : bbox.height + node.padding; + const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; + const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; + rect2.attr("class", "basic cluster composite label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const labelRect = async (parent, node) => { + const { shapeSvg } = await labelHelper(parent, node, "label", true); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Classes = ", node.class); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = 0; + const totalHeight = 0; + rect2.attr("width", totalWidth).attr("height", totalHeight); + shapeSvg.attr("class", "label edgeLabel"); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +function applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) { + const strokeDashArray = []; + const addBorder = (length) => { + strokeDashArray.push(length, 0); + }; + const skipBorder = (length) => { + strokeDashArray.push(0, length); + }; + if (borders.includes("t")) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("r")) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + if (borders.includes("b")) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("l")) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add left border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + rect2.attr("stroke-dasharray", strokeDashArray.join(" ")); +} +const rectWithTitle = (parent, node) => { + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const innerLine = shapeSvg.insert("line"); + const label = shapeSvg.insert("g").attr("class", "label"); + const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText; + let title = ""; + if (typeof text2 === "object") { + title = text2[0]; + } else { + title = text2; + } + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Label text abc79", title, text2, typeof text2 === "object"); + const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true)); + let bbox = { width: 0, height: 0 }; + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Text 2", text2); + const textRows = text2.slice(1, text2.length); + let titleBox = text.getBBox(); + const descr = label.node().appendChild( + createLabel$1(textRows.join ? textRows.join("
    ") : textRows, node.labelStyle, true, true) + ); + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = descr.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(descr); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const halfPadding = node.padding / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(descr).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")" + ); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(text).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", 0)" + ); + bbox = label.node().getBBox(); + label.attr( + "transform", + "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")" + ); + rect2.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const stadium = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const h = bbox.height + node.padding; + const w = bbox.width + h / 4 + node.padding; + const rect2 = shapeSvg.insert("rect", ":first-child").attr("style", node.style).attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const circle = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle intersect", node, bbox.width / 2 + halfPadding, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding, point2); + }; + return shapeSvg; +}; +const doublecircle = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const gap = 5; + const circleGroup = shapeSvg.insert("g", ":first-child"); + const outerCircle = circleGroup.insert("circle"); + const innerCircle = circleGroup.insert("circle"); + circleGroup.attr("class", node.class); + outerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node.padding + gap * 2).attr("height", bbox.height + node.padding + gap * 2); + innerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); + updateNodeBounds(node, outerCircle); + node.intersect = function(point2) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle intersect", node, bbox.width / 2 + halfPadding + gap, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2); + }; + return shapeSvg; +}; +const subroutine = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: 0, y: -h }, + { x: 0, y: 0 }, + { x: -8, y: 0 }, + { x: w + 8, y: 0 }, + { x: w + 8, y: -h }, + { x: -8, y: -h }, + { x: -8, y: 0 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const start = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const forkJoin = (parent, node, dir) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + let width = 70; + let height = 10; + if (dir === "LR") { + width = 10; + height = 70; + } + const shape = shapeSvg.append("rect").attr("x", -1 * width / 2).attr("y", -1 * height / 2).attr("width", width).attr("height", height).attr("class", "fork-join"); + updateNodeBounds(node, shape); + node.height = node.height + node.padding / 2; + node.width = node.width + node.padding / 2; + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const end = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const innerCircle = shapeSvg.insert("circle", ":first-child"); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const class_box = (parent, node) => { + const halfPadding = node.padding / 2; + const rowPadding = 4; + const lineHeight = 8; + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const topLine = shapeSvg.insert("line"); + const bottomLine = shapeSvg.insert("line"); + let maxWidth = 0; + let maxHeight = rowPadding; + const labelContainer = shapeSvg.insert("g").attr("class", "label"); + let verticalPos = 0; + const hasInterface = node.classData.annotations && node.classData.annotations[0]; + const interfaceLabelText = node.classData.annotations[0] ? "«" + node.classData.annotations[0] + "»" : ""; + const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true)); + let interfaceBBox = interfaceLabel.getBBox(); + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = interfaceLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(interfaceLabel); + interfaceBBox = div.getBoundingClientRect(); + dv.attr("width", interfaceBBox.width); + dv.attr("height", interfaceBBox.height); + } + if (node.classData.annotations[0]) { + maxHeight += interfaceBBox.height + rowPadding; + maxWidth += interfaceBBox.width; + } + let classTitleString = node.classData.label; + if (node.classData.type !== void 0 && node.classData.type !== "") { + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + classTitleString += "<" + node.classData.type + ">"; + } else { + classTitleString += "<" + node.classData.type + ">"; + } + } + const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true)); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(classTitleLabel).attr("class", "classTitle"); + let classTitleBBox = classTitleLabel.getBBox(); + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = classTitleLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(classTitleLabel); + classTitleBBox = div.getBoundingClientRect(); + dv.attr("width", classTitleBBox.width); + dv.attr("height", classTitleBBox.height); + } + maxHeight += classTitleBBox.height + rowPadding; + if (classTitleBBox.width > maxWidth) { + maxWidth = classTitleBBox.width; + } + const classAttributes = []; + node.classData.members.forEach((member) => { + const parsedInfo = member.getDisplayDetails(); + let parsedText = parsedInfo.displayText; + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + parsedText = parsedText.replace(//g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + parsedText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classAttributes.push(lbl); + }); + maxHeight += lineHeight; + const classMethods = []; + node.classData.methods.forEach((member) => { + const parsedInfo = member.getDisplayDetails(); + let displayText = parsedInfo.displayText; + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + displayText = displayText.replace(//g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + displayText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classMethods.push(lbl); + }); + maxHeight += lineHeight; + if (hasInterface) { + let diffX2 = (maxWidth - interfaceBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(interfaceLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")" + ); + verticalPos = interfaceBBox.height + rowPadding; + } + let diffX = (maxWidth - classTitleBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(classTitleLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + topLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classAttributes.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")" + ); + const memberBBox = lbl == null ? void 0 : lbl.getBBox(); + verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; + }); + verticalPos += lineHeight; + bottomLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classMethods.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + const memberBBox = lbl == null ? void 0 : lbl.getBBox(); + verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; + }); + rect2.attr("style", node.style).attr("class", "outer title-state").attr("x", -maxWidth / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth + node.padding).attr("height", maxHeight + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const shapes = { + rhombus: question, + composite, + question, + rect, + labelRect, + rectWithTitle, + choice, + circle, + doublecircle, + stadium, + hexagon, + block_arrow, + rect_left_inv_arrow, + lean_right, + lean_left, + trapezoid, + inv_trapezoid, + rect_right_inv_arrow, + cylinder, + start, + end, + note: note$1, + subroutine, + fork: forkJoin, + join: forkJoin, + class_box +}; +let nodeElems = {}; +const insertNode = async (elem, node, dir) => { + let newEl; + let el; + if (node.link) { + let target; + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel === "sandbox") { + target = "_top"; + } else if (node.linkTarget) { + target = node.linkTarget || "_blank"; + } + newEl = elem.insert("svg:a").attr("xlink:href", node.link).attr("target", target); + el = await shapes[node.shape](newEl, node, dir); + } else { + el = await shapes[node.shape](elem, node, dir); + newEl = el; + } + if (node.tooltip) { + el.attr("title", node.tooltip); + } + if (node.class) { + el.attr("class", "node default " + node.class); + } + newEl.attr("data-node", "true"); + newEl.attr("data-id", node.id); + nodeElems[node.id] = newEl; + if (node.haveCallback) { + nodeElems[node.id].attr("class", nodeElems[node.id].attr("class") + " clickable"); + } + return newEl; +}; +const setNodeElem = (elem, node) => { + nodeElems[node.id] = elem; +}; +const clear$1 = () => { + nodeElems = {}; +}; +const positionNode = (node) => { + const el = nodeElems[node.id]; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.trace( + "Transforming node", + node.diff, + node, + "translate(" + (node.x - node.width / 2 - 5) + ", " + node.width / 2 + ")" + ); + const padding = 8; + const diff = node.diff || 0; + if (node.clusterNode) { + el.attr( + "transform", + "translate(" + (node.x + diff - node.width / 2) + ", " + (node.y - node.height / 2 - padding) + ")" + ); + } else { + el.attr("transform", "translate(" + node.x + ", " + node.y + ")"); + } + return diff; +}; +const getSubGraphTitleMargins = ({ + flowchart +}) => { + var _a, _b; + const subGraphTitleTopMargin = ((_a = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _a.top) ?? 0; + const subGraphTitleBottomMargin = ((_b = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _b.bottom) ?? 0; + const subGraphTitleTotalMargin = subGraphTitleTopMargin + subGraphTitleBottomMargin; + return { + subGraphTitleTopMargin, + subGraphTitleBottomMargin, + subGraphTitleTotalMargin + }; +}; +const markerOffsets = { + aggregation: 18, + extension: 18, + composition: 18, + dependency: 6, + lollipop: 13.5, + arrow_point: 5.3 +}; +function calculateDeltaAndAngle(point1, point2) { + if (point1 === void 0 || point2 === void 0) { + return { angle: 0, deltaX: 0, deltaY: 0 }; + } + point1 = pointTransformer(point1); + point2 = pointTransformer(point2); + const [x1, y1] = [point1.x, point1.y]; + const [x2, y2] = [point2.x, point2.y]; + const deltaX = x2 - x1; + const deltaY = y2 - y1; + return { angle: Math.atan(deltaY / deltaX), deltaX, deltaY }; +} +const pointTransformer = (data) => { + if (Array.isArray(data)) { + return { x: data[0], y: data[1] }; + } + return data; +}; +const getLineFunctionsWithOffset = (edge) => { + return { + x: function(d, i, data) { + let offset = 0; + if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { + const { angle, deltaX } = calculateDeltaAndAngle(data[0], data[1]); + offset = markerOffsets[edge.arrowTypeStart] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); + } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { + const { angle, deltaX } = calculateDeltaAndAngle( + data[data.length - 1], + data[data.length - 2] + ); + offset = markerOffsets[edge.arrowTypeEnd] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); + } + return pointTransformer(d).x + offset; + }, + y: function(d, i, data) { + let offset = 0; + if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { + const { angle, deltaY } = calculateDeltaAndAngle(data[0], data[1]); + offset = markerOffsets[edge.arrowTypeStart] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); + } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { + const { angle, deltaY } = calculateDeltaAndAngle( + data[data.length - 1], + data[data.length - 2] + ); + offset = markerOffsets[edge.arrowTypeEnd] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); + } + return pointTransformer(d).y + offset; + } + }; +}; +const addEdgeMarkers = (svgPath, edge, url, id, diagramType) => { + if (edge.arrowTypeStart) { + addEdgeMarker(svgPath, "start", edge.arrowTypeStart, url, id, diagramType); + } + if (edge.arrowTypeEnd) { + addEdgeMarker(svgPath, "end", edge.arrowTypeEnd, url, id, diagramType); + } +}; +const arrowTypesMap = { + arrow_cross: "cross", + arrow_point: "point", + arrow_barb: "barb", + arrow_circle: "circle", + aggregation: "aggregation", + extension: "extension", + composition: "composition", + dependency: "dependency", + lollipop: "lollipop" +}; +const addEdgeMarker = (svgPath, position, arrowType, url, id, diagramType) => { + const endMarkerType = arrowTypesMap[arrowType]; + if (!endMarkerType) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown arrow type: ${arrowType}`); + return; + } + const suffix = position === "start" ? "Start" : "End"; + svgPath.attr(`marker-${position}`, `url(${url}#${id}_${diagramType}-${endMarkerType}${suffix})`); +}; +let edgeLabels = {}; +let terminalLabels = {}; +const clear = () => { + edgeLabels = {}; + terminalLabels = {}; +}; +const insertEdgeLabel = (elem, edge) => { + const useHtmlLabels = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + const labelElement = edge.labelType === "markdown" ? (0,_createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_2__.a)(elem, edge.label, { + style: edge.labelStyle, + useHtmlLabels, + addSvgBackground: true + }) : createLabel$1(edge.label, edge.labelStyle); + const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); + const label = edgeLabel.insert("g").attr("class", "label"); + label.node().appendChild(labelElement); + let bbox = labelElement.getBBox(); + if (useHtmlLabels) { + const div = labelElement.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(labelElement); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + edgeLabels[edge.id] = edgeLabel; + edge.width = bbox.width; + edge.height = bbox.height; + let fo; + if (edge.startLabelLeft) { + const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle); + const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startLeft = startEdgeLabelLeft; + setTerminalWidth(fo, edge.startLabelLeft); + } + if (edge.startLabelRight) { + const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle); + const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelRight.insert("g").attr("class", "inner"); + fo = startEdgeLabelRight.node().appendChild(startLabelElement); + inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startRight = startEdgeLabelRight; + setTerminalWidth(fo, edge.startLabelRight); + } + if (edge.endLabelLeft) { + const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle); + const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelLeft.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endLeft = endEdgeLabelLeft; + setTerminalWidth(fo, edge.endLabelLeft); + } + if (edge.endLabelRight) { + const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle); + const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelRight.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelRight.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endRight = endEdgeLabelRight; + setTerminalWidth(fo, edge.endLabelRight); + } + return labelElement; +}; +function setTerminalWidth(fo, value) { + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels && fo) { + fo.style.width = value.length * 9 + "px"; + fo.style.height = "12px"; + } +} +const positionEdgeLabel = (edge, paths) => { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Moving label abc88 ", edge.id, edge.label, edgeLabels[edge.id], paths); + let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; + const siteConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig); + if (edge.label) { + const el = edgeLabels[edge.id]; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug( + "Moving label " + edge.label + " from (", + x, + ",", + y, + ") to (", + pos.x, + ",", + pos.y, + ") abc88" + ); + if (paths.updatedPath) { + x = pos.x; + y = pos.y; + } + } + el.attr("transform", `translate(${x}, ${y + subGraphTitleTotalMargin / 2})`); + } + if (edge.startLabelLeft) { + const el = terminalLabels[edge.id].startLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } + if (edge.startLabelRight) { + const el = terminalLabels[edge.id].startRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition( + edge.arrowTypeStart ? 10 : 0, + "start_right", + path + ); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } + if (edge.endLabelLeft) { + const el = terminalLabels[edge.id].endLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } + if (edge.endLabelRight) { + const el = terminalLabels[edge.id].endRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } +}; +const outsideNode = (node, point2) => { + const x = node.x; + const y = node.y; + const dx = Math.abs(point2.x - x); + const dy = Math.abs(point2.y - y); + const w = node.width / 2; + const h = node.height / 2; + if (dx >= w || dy >= h) { + return true; + } + return false; +}; +const intersection = (node, outsidePoint, insidePoint) => { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(outsidePoint)} + insidePoint : ${JSON.stringify(insidePoint)} + node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`); + const x = node.x; + const y = node.y; + const dx = Math.abs(x - insidePoint.x); + const w = node.width / 2; + let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx; + const h = node.height / 2; + const Q = Math.abs(outsidePoint.y - insidePoint.y); + const R = Math.abs(outsidePoint.x - insidePoint.x); + if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { + let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; + r = R * q / Q; + const res = { + x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r, + y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q + }; + if (r === 0) { + res.x = outsidePoint.x; + res.y = outsidePoint.y; + } + if (R === 0) { + res.x = outsidePoint.x; + } + if (Q === 0) { + res.y = outsidePoint.y; + } + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); + return res; + } else { + if (insidePoint.x < outsidePoint.x) { + r = outsidePoint.x - w - x; + } else { + r = x - w - outsidePoint.x; + } + let q = Q * r / R; + let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r; + let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y }); + if (r === 0) { + _x = outsidePoint.x; + _y = outsidePoint.y; + } + if (R === 0) { + _x = outsidePoint.x; + } + if (Q === 0) { + _y = outsidePoint.y; + } + return { x: _x, y: _y }; + } +}; +const cutPathAtIntersect = (_points, boundaryNode) => { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 cutPathAtIntersect", _points, boundaryNode); + let points = []; + let lastPointOutside = _points[0]; + let isInside = false; + _points.forEach((point2) => { + if (!outsideNode(boundaryNode, point2) && !isInside) { + const inter = intersection(boundaryNode, lastPointOutside, point2); + let pointPresent = false; + points.forEach((p) => { + pointPresent = pointPresent || p.x === inter.x && p.y === inter.y; + }); + if (!points.some((e) => e.x === inter.x && e.y === inter.y)) { + points.push(inter); + } + isInside = true; + } else { + lastPointOutside = point2; + if (!isInside) { + points.push(point2); + } + } + }); + return points; +}; +const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph, id) { + let points = edge.points; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 InsertEdge: edge=", edge, "e=", e); + let pointsHasChanged = false; + const tail = graph.node(e.v); + var head = graph.node(e.w); + if ((head == null ? void 0 : head.intersect) && (tail == null ? void 0 : tail.intersect)) { + points = points.slice(1, edge.points.length - 1); + points.unshift(tail.intersect(points[0])); + points.push(head.intersect(points[points.length - 1])); + } + if (edge.toCluster) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("to cluster abc88", clusterDb[edge.toCluster]); + points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); + pointsHasChanged = true; + } + if (edge.fromCluster) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("from cluster abc88", clusterDb[edge.fromCluster]); + points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse(); + pointsHasChanged = true; + } + const lineData = points.filter((p) => !Number.isNaN(p.y)); + let curve = d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .qrM; + if (edge.curve && (diagramType === "graph" || diagramType === "flowchart")) { + curve = edge.curve; + } + const { x, y } = getLineFunctionsWithOffset(edge); + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .n8j)().x(x).y(y).curve(curve); + let strokeClasses; + switch (edge.thickness) { + case "normal": + strokeClasses = "edge-thickness-normal"; + break; + case "thick": + strokeClasses = "edge-thickness-thick"; + break; + case "invisible": + strokeClasses = "edge-thickness-thick"; + break; + default: + strokeClasses = ""; + } + switch (edge.pattern) { + case "solid": + strokeClasses += " edge-pattern-solid"; + break; + case "dotted": + strokeClasses += " edge-pattern-dotted"; + break; + case "dashed": + strokeClasses += " edge-pattern-dashed"; + break; + } + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style); + let url = ""; + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.arrowMarkerAbsolute || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().state.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + addEdgeMarkers(svgPath, edge, url, id, diagramType); + let paths = {}; + if (pointsHasChanged) { + paths.updatedPath = points; + } + paths.originalPath = edge.points; + return paths; +}; + + + +/***/ }), + +/***/ 32548: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ d: () => (/* binding */ db), +/* harmony export */ f: () => (/* binding */ flowDb), +/* harmony export */ p: () => (/* binding */ parser$1) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); +/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99702); + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 4], $V1 = [1, 3], $V2 = [1, 5], $V3 = [1, 8, 9, 10, 11, 27, 34, 36, 38, 42, 58, 81, 82, 83, 84, 85, 86, 99, 102, 103, 106, 108, 111, 112, 113, 118, 119, 120, 121], $V4 = [2, 2], $V5 = [1, 13], $V6 = [1, 14], $V7 = [1, 15], $V8 = [1, 16], $V9 = [1, 23], $Va = [1, 25], $Vb = [1, 26], $Vc = [1, 27], $Vd = [1, 49], $Ve = [1, 48], $Vf = [1, 29], $Vg = [1, 30], $Vh = [1, 31], $Vi = [1, 32], $Vj = [1, 33], $Vk = [1, 44], $Vl = [1, 46], $Vm = [1, 42], $Vn = [1, 47], $Vo = [1, 43], $Vp = [1, 50], $Vq = [1, 45], $Vr = [1, 51], $Vs = [1, 52], $Vt = [1, 34], $Vu = [1, 35], $Vv = [1, 36], $Vw = [1, 37], $Vx = [1, 57], $Vy = [1, 8, 9, 10, 11, 27, 32, 34, 36, 38, 42, 58, 81, 82, 83, 84, 85, 86, 99, 102, 103, 106, 108, 111, 112, 113, 118, 119, 120, 121], $Vz = [1, 61], $VA = [1, 60], $VB = [1, 62], $VC = [8, 9, 11, 73, 75], $VD = [1, 88], $VE = [1, 93], $VF = [1, 92], $VG = [1, 89], $VH = [1, 85], $VI = [1, 91], $VJ = [1, 87], $VK = [1, 94], $VL = [1, 90], $VM = [1, 95], $VN = [1, 86], $VO = [8, 9, 10, 11, 73, 75], $VP = [8, 9, 10, 11, 44, 73, 75], $VQ = [8, 9, 10, 11, 29, 42, 44, 46, 48, 50, 52, 54, 56, 58, 61, 63, 65, 66, 68, 73, 75, 86, 99, 102, 103, 106, 108, 111, 112, 113], $VR = [8, 9, 11, 42, 58, 73, 75, 86, 99, 102, 103, 106, 108, 111, 112, 113], $VS = [42, 58, 86, 99, 102, 103, 106, 108, 111, 112, 113], $VT = [1, 121], $VU = [1, 120], $VV = [1, 128], $VW = [1, 142], $VX = [1, 143], $VY = [1, 144], $VZ = [1, 145], $V_ = [1, 130], $V$ = [1, 132], $V01 = [1, 136], $V11 = [1, 137], $V21 = [1, 138], $V31 = [1, 139], $V41 = [1, 140], $V51 = [1, 141], $V61 = [1, 146], $V71 = [1, 147], $V81 = [1, 126], $V91 = [1, 127], $Va1 = [1, 134], $Vb1 = [1, 129], $Vc1 = [1, 133], $Vd1 = [1, 131], $Ve1 = [8, 9, 10, 11, 27, 32, 34, 36, 38, 42, 58, 81, 82, 83, 84, 85, 86, 99, 102, 103, 106, 108, 111, 112, 113, 118, 119, 120, 121], $Vf1 = [1, 149], $Vg1 = [8, 9, 11], $Vh1 = [8, 9, 10, 11, 14, 42, 58, 86, 102, 103, 106, 108, 111, 112, 113], $Vi1 = [1, 169], $Vj1 = [1, 165], $Vk1 = [1, 166], $Vl1 = [1, 170], $Vm1 = [1, 167], $Vn1 = [1, 168], $Vo1 = [75, 113, 116], $Vp1 = [8, 9, 10, 11, 12, 14, 27, 29, 32, 42, 58, 73, 81, 82, 83, 84, 85, 86, 87, 102, 106, 108, 111, 112, 113], $Vq1 = [10, 103], $Vr1 = [31, 47, 49, 51, 53, 55, 60, 62, 64, 65, 67, 69, 113, 114, 115], $Vs1 = [1, 235], $Vt1 = [1, 233], $Vu1 = [1, 237], $Vv1 = [1, 231], $Vw1 = [1, 232], $Vx1 = [1, 234], $Vy1 = [1, 236], $Vz1 = [1, 238], $VA1 = [1, 255], $VB1 = [8, 9, 11, 103], $VC1 = [8, 9, 10, 11, 58, 81, 102, 103, 106, 107, 108, 109]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "graphConfig": 4, "document": 5, "line": 6, "statement": 7, "SEMI": 8, "NEWLINE": 9, "SPACE": 10, "EOF": 11, "GRAPH": 12, "NODIR": 13, "DIR": 14, "FirstStmtSeparator": 15, "ending": 16, "endToken": 17, "spaceList": 18, "spaceListNewline": 19, "vertexStatement": 20, "separator": 21, "styleStatement": 22, "linkStyleStatement": 23, "classDefStatement": 24, "classStatement": 25, "clickStatement": 26, "subgraph": 27, "textNoTags": 28, "SQS": 29, "text": 30, "SQE": 31, "end": 32, "direction": 33, "acc_title": 34, "acc_title_value": 35, "acc_descr": 36, "acc_descr_value": 37, "acc_descr_multiline_value": 38, "link": 39, "node": 40, "styledVertex": 41, "AMP": 42, "vertex": 43, "STYLE_SEPARATOR": 44, "idString": 45, "DOUBLECIRCLESTART": 46, "DOUBLECIRCLEEND": 47, "PS": 48, "PE": 49, "(-": 50, "-)": 51, "STADIUMSTART": 52, "STADIUMEND": 53, "SUBROUTINESTART": 54, "SUBROUTINEEND": 55, "VERTEX_WITH_PROPS_START": 56, "NODE_STRING[field]": 57, "COLON": 58, "NODE_STRING[value]": 59, "PIPE": 60, "CYLINDERSTART": 61, "CYLINDEREND": 62, "DIAMOND_START": 63, "DIAMOND_STOP": 64, "TAGEND": 65, "TRAPSTART": 66, "TRAPEND": 67, "INVTRAPSTART": 68, "INVTRAPEND": 69, "linkStatement": 70, "arrowText": 71, "TESTSTR": 72, "START_LINK": 73, "edgeText": 74, "LINK": 75, "edgeTextToken": 76, "STR": 77, "MD_STR": 78, "textToken": 79, "keywords": 80, "STYLE": 81, "LINKSTYLE": 82, "CLASSDEF": 83, "CLASS": 84, "CLICK": 85, "DOWN": 86, "UP": 87, "textNoTagsToken": 88, "stylesOpt": 89, "idString[vertex]": 90, "idString[class]": 91, "CALLBACKNAME": 92, "CALLBACKARGS": 93, "HREF": 94, "LINK_TARGET": 95, "STR[link]": 96, "STR[tooltip]": 97, "alphaNum": 98, "DEFAULT": 99, "numList": 100, "INTERPOLATE": 101, "NUM": 102, "COMMA": 103, "style": 104, "styleComponent": 105, "NODE_STRING": 106, "UNIT": 107, "BRKT": 108, "PCT": 109, "idStringToken": 110, "MINUS": 111, "MULT": 112, "UNICODE_TEXT": 113, "TEXT": 114, "TAGSTART": 115, "EDGE_TEXT": 116, "alphaNumToken": 117, "direction_tb": 118, "direction_bt": 119, "direction_rl": 120, "direction_lr": 121, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 8: "SEMI", 9: "NEWLINE", 10: "SPACE", 11: "EOF", 12: "GRAPH", 13: "NODIR", 14: "DIR", 27: "subgraph", 29: "SQS", 31: "SQE", 32: "end", 34: "acc_title", 35: "acc_title_value", 36: "acc_descr", 37: "acc_descr_value", 38: "acc_descr_multiline_value", 42: "AMP", 44: "STYLE_SEPARATOR", 46: "DOUBLECIRCLESTART", 47: "DOUBLECIRCLEEND", 48: "PS", 49: "PE", 50: "(-", 51: "-)", 52: "STADIUMSTART", 53: "STADIUMEND", 54: "SUBROUTINESTART", 55: "SUBROUTINEEND", 56: "VERTEX_WITH_PROPS_START", 57: "NODE_STRING[field]", 58: "COLON", 59: "NODE_STRING[value]", 60: "PIPE", 61: "CYLINDERSTART", 62: "CYLINDEREND", 63: "DIAMOND_START", 64: "DIAMOND_STOP", 65: "TAGEND", 66: "TRAPSTART", 67: "TRAPEND", 68: "INVTRAPSTART", 69: "INVTRAPEND", 72: "TESTSTR", 73: "START_LINK", 75: "LINK", 77: "STR", 78: "MD_STR", 81: "STYLE", 82: "LINKSTYLE", 83: "CLASSDEF", 84: "CLASS", 85: "CLICK", 86: "DOWN", 87: "UP", 90: "idString[vertex]", 91: "idString[class]", 92: "CALLBACKNAME", 93: "CALLBACKARGS", 94: "HREF", 95: "LINK_TARGET", 96: "STR[link]", 97: "STR[tooltip]", 99: "DEFAULT", 101: "INTERPOLATE", 102: "NUM", 103: "COMMA", 106: "NODE_STRING", 107: "UNIT", 108: "BRKT", 109: "PCT", 111: "MINUS", 112: "MULT", 113: "UNICODE_TEXT", 114: "TEXT", 115: "TAGSTART", 116: "EDGE_TEXT", 118: "direction_tb", 119: "direction_bt", 120: "direction_rl", 121: "direction_lr" }, + productions_: [0, [3, 2], [5, 0], [5, 2], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [4, 2], [4, 2], [4, 2], [4, 3], [16, 2], [16, 1], [17, 1], [17, 1], [17, 1], [15, 1], [15, 1], [15, 2], [19, 2], [19, 2], [19, 1], [19, 1], [18, 2], [18, 1], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 9], [7, 6], [7, 4], [7, 1], [7, 2], [7, 2], [7, 1], [21, 1], [21, 1], [21, 1], [20, 3], [20, 4], [20, 2], [20, 1], [40, 1], [40, 5], [41, 1], [41, 3], [43, 4], [43, 4], [43, 6], [43, 4], [43, 4], [43, 4], [43, 8], [43, 4], [43, 4], [43, 4], [43, 6], [43, 4], [43, 4], [43, 4], [43, 4], [43, 4], [43, 1], [39, 2], [39, 3], [39, 3], [39, 1], [39, 3], [74, 1], [74, 2], [74, 1], [74, 1], [70, 1], [71, 3], [30, 1], [30, 2], [30, 1], [30, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [28, 1], [28, 2], [28, 1], [28, 1], [24, 5], [25, 5], [26, 2], [26, 4], [26, 3], [26, 5], [26, 3], [26, 5], [26, 5], [26, 7], [26, 2], [26, 4], [26, 2], [26, 4], [26, 4], [26, 6], [22, 5], [23, 5], [23, 5], [23, 9], [23, 9], [23, 7], [23, 7], [100, 1], [100, 3], [89, 1], [89, 3], [104, 1], [104, 2], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [79, 1], [79, 1], [79, 1], [79, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [76, 1], [76, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [45, 1], [45, 2], [98, 1], [98, 2], [33, 1], [33, 1], [33, 1], [33, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 2: + this.$ = []; + break; + case 3: + if (!Array.isArray($$[$0]) || $$[$0].length > 0) { + $$[$0 - 1].push($$[$0]); + } + this.$ = $$[$0 - 1]; + break; + case 4: + case 176: + this.$ = $$[$0]; + break; + case 11: + yy.setDirection("TB"); + this.$ = "TB"; + break; + case 12: + yy.setDirection($$[$0 - 1]); + this.$ = $$[$0 - 1]; + break; + case 27: + this.$ = $$[$0 - 1].nodes; + break; + case 28: + case 29: + case 30: + case 31: + case 32: + this.$ = []; + break; + case 33: + this.$ = yy.addSubGraph($$[$0 - 6], $$[$0 - 1], $$[$0 - 4]); + break; + case 34: + this.$ = yy.addSubGraph($$[$0 - 3], $$[$0 - 1], $$[$0 - 3]); + break; + case 35: + this.$ = yy.addSubGraph(void 0, $$[$0 - 1], void 0); + break; + case 37: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 38: + case 39: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 43: + yy.addLink($$[$0 - 2].stmt, $$[$0], $$[$0 - 1]); + this.$ = { stmt: $$[$0], nodes: $$[$0].concat($$[$0 - 2].nodes) }; + break; + case 44: + yy.addLink($$[$0 - 3].stmt, $$[$0 - 1], $$[$0 - 2]); + this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1].concat($$[$0 - 3].nodes) }; + break; + case 45: + this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1] }; + break; + case 46: + this.$ = { stmt: $$[$0], nodes: $$[$0] }; + break; + case 47: + this.$ = [$$[$0]]; + break; + case 48: + this.$ = $$[$0 - 4].concat($$[$0]); + break; + case 49: + this.$ = $$[$0]; + break; + case 50: + this.$ = $$[$0 - 2]; + yy.setClass($$[$0 - 2], $$[$0]); + break; + case 51: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "square"); + break; + case 52: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "doublecircle"); + break; + case 53: + this.$ = $$[$0 - 5]; + yy.addVertex($$[$0 - 5], $$[$0 - 2], "circle"); + break; + case 54: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "ellipse"); + break; + case 55: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "stadium"); + break; + case 56: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "subroutine"); + break; + case 57: + this.$ = $$[$0 - 7]; + yy.addVertex($$[$0 - 7], $$[$0 - 1], "rect", void 0, void 0, void 0, Object.fromEntries([[$$[$0 - 5], $$[$0 - 3]]])); + break; + case 58: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "cylinder"); + break; + case 59: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "round"); + break; + case 60: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "diamond"); + break; + case 61: + this.$ = $$[$0 - 5]; + yy.addVertex($$[$0 - 5], $$[$0 - 2], "hexagon"); + break; + case 62: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "odd"); + break; + case 63: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "trapezoid"); + break; + case 64: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "inv_trapezoid"); + break; + case 65: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_right"); + break; + case 66: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_left"); + break; + case 67: + this.$ = $$[$0]; + yy.addVertex($$[$0]); + break; + case 68: + $$[$0 - 1].text = $$[$0]; + this.$ = $$[$0 - 1]; + break; + case 69: + case 70: + $$[$0 - 2].text = $$[$0 - 1]; + this.$ = $$[$0 - 2]; + break; + case 71: + this.$ = $$[$0]; + break; + case 72: + var inf = yy.destructLink($$[$0], $$[$0 - 2]); + this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length, "text": $$[$0 - 1] }; + break; + case 73: + this.$ = { text: $$[$0], type: "text" }; + break; + case 74: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 75: + this.$ = { text: $$[$0], type: "string" }; + break; + case 76: + this.$ = { text: $$[$0], type: "markdown" }; + break; + case 77: + var inf = yy.destructLink($$[$0]); + this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length }; + break; + case 78: + this.$ = $$[$0 - 1]; + break; + case 79: + this.$ = { text: $$[$0], type: "text" }; + break; + case 80: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 81: + this.$ = { text: $$[$0], type: "string" }; + break; + case 82: + case 97: + this.$ = { text: $$[$0], type: "markdown" }; + break; + case 94: + this.$ = { text: $$[$0], type: "text" }; + break; + case 95: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 96: + this.$ = { text: $$[$0], type: "text" }; + break; + case 98: + this.$ = $$[$0 - 4]; + yy.addClass($$[$0 - 2], $$[$0]); + break; + case 99: + this.$ = $$[$0 - 4]; + yy.setClass($$[$0 - 2], $$[$0]); + break; + case 100: + case 108: + this.$ = $$[$0 - 1]; + yy.setClickEvent($$[$0 - 1], $$[$0]); + break; + case 101: + case 109: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 102: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 103: + this.$ = $$[$0 - 4]; + yy.setClickEvent($$[$0 - 4], $$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 4], $$[$0]); + break; + case 104: + this.$ = $$[$0 - 2]; + yy.setLink($$[$0 - 2], $$[$0]); + break; + case 105: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 4], $$[$0 - 2]); + yy.setTooltip($$[$0 - 4], $$[$0]); + break; + case 106: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]); + break; + case 107: + this.$ = $$[$0 - 6]; + yy.setLink($$[$0 - 6], $$[$0 - 4], $$[$0]); + yy.setTooltip($$[$0 - 6], $$[$0 - 2]); + break; + case 110: + this.$ = $$[$0 - 1]; + yy.setLink($$[$0 - 1], $$[$0]); + break; + case 111: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 112: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]); + break; + case 113: + this.$ = $$[$0 - 5]; + yy.setLink($$[$0 - 5], $$[$0 - 4], $$[$0]); + yy.setTooltip($$[$0 - 5], $$[$0 - 2]); + break; + case 114: + this.$ = $$[$0 - 4]; + yy.addVertex($$[$0 - 2], void 0, void 0, $$[$0]); + break; + case 115: + this.$ = $$[$0 - 4]; + yy.updateLink([$$[$0 - 2]], $$[$0]); + break; + case 116: + this.$ = $$[$0 - 4]; + yy.updateLink($$[$0 - 2], $$[$0]); + break; + case 117: + this.$ = $$[$0 - 8]; + yy.updateLinkInterpolate([$$[$0 - 6]], $$[$0 - 2]); + yy.updateLink([$$[$0 - 6]], $$[$0]); + break; + case 118: + this.$ = $$[$0 - 8]; + yy.updateLinkInterpolate($$[$0 - 6], $$[$0 - 2]); + yy.updateLink($$[$0 - 6], $$[$0]); + break; + case 119: + this.$ = $$[$0 - 6]; + yy.updateLinkInterpolate([$$[$0 - 4]], $$[$0]); + break; + case 120: + this.$ = $$[$0 - 6]; + yy.updateLinkInterpolate($$[$0 - 4], $$[$0]); + break; + case 121: + case 123: + this.$ = [$$[$0]]; + break; + case 122: + case 124: + $$[$0 - 2].push($$[$0]); + this.$ = $$[$0 - 2]; + break; + case 126: + this.$ = $$[$0 - 1] + $$[$0]; + break; + case 174: + this.$ = $$[$0]; + break; + case 175: + this.$ = $$[$0 - 1] + "" + $$[$0]; + break; + case 177: + this.$ = $$[$0 - 1] + "" + $$[$0]; + break; + case 178: + this.$ = { stmt: "dir", value: "TB" }; + break; + case 179: + this.$ = { stmt: "dir", value: "BT" }; + break; + case 180: + this.$ = { stmt: "dir", value: "RL" }; + break; + case 181: + this.$ = { stmt: "dir", value: "LR" }; + break; + } + }, + table: [{ 3: 1, 4: 2, 9: $V0, 10: $V1, 12: $V2 }, { 1: [3] }, o($V3, $V4, { 5: 6 }), { 4: 7, 9: $V0, 10: $V1, 12: $V2 }, { 4: 8, 9: $V0, 10: $V1, 12: $V2 }, { 13: [1, 9], 14: [1, 10] }, { 1: [2, 1], 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, o($V3, [2, 9]), o($V3, [2, 10]), o($V3, [2, 11]), { 8: [1, 54], 9: [1, 55], 10: $Vx, 15: 53, 18: 56 }, o($Vy, [2, 3]), o($Vy, [2, 4]), o($Vy, [2, 5]), o($Vy, [2, 6]), o($Vy, [2, 7]), o($Vy, [2, 8]), { 8: $Vz, 9: $VA, 11: $VB, 21: 58, 39: 59, 70: 63, 73: [1, 64], 75: [1, 65] }, { 8: $Vz, 9: $VA, 11: $VB, 21: 66 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 67 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 68 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 69 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 70 }, { 8: $Vz, 9: $VA, 10: [1, 71], 11: $VB, 21: 72 }, o($Vy, [2, 36]), { 35: [1, 73] }, { 37: [1, 74] }, o($Vy, [2, 39]), o($VC, [2, 46], { 18: 75, 10: $Vx }), { 10: [1, 76] }, { 10: [1, 77] }, { 10: [1, 78] }, { 10: [1, 79] }, { 14: $VD, 42: $VE, 58: $VF, 77: [1, 83], 86: $VG, 92: [1, 80], 94: [1, 81], 98: 82, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN, 117: 84 }, o($Vy, [2, 178]), o($Vy, [2, 179]), o($Vy, [2, 180]), o($Vy, [2, 181]), o($VO, [2, 47]), o($VO, [2, 49], { 44: [1, 96] }), o($VP, [2, 67], { 110: 109, 29: [1, 97], 42: $Vd, 46: [1, 98], 48: [1, 99], 50: [1, 100], 52: [1, 101], 54: [1, 102], 56: [1, 103], 58: $Ve, 61: [1, 104], 63: [1, 105], 65: [1, 106], 66: [1, 107], 68: [1, 108], 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 111: $Vq, 112: $Vr, 113: $Vs }), o($VQ, [2, 174]), o($VQ, [2, 135]), o($VQ, [2, 136]), o($VQ, [2, 137]), o($VQ, [2, 138]), o($VQ, [2, 139]), o($VQ, [2, 140]), o($VQ, [2, 141]), o($VQ, [2, 142]), o($VQ, [2, 143]), o($VQ, [2, 144]), o($VQ, [2, 145]), o($V3, [2, 12]), o($V3, [2, 18]), o($V3, [2, 19]), { 9: [1, 110] }, o($VR, [2, 26], { 18: 111, 10: $Vx }), o($Vy, [2, 27]), { 40: 112, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, o($Vy, [2, 40]), o($Vy, [2, 41]), o($Vy, [2, 42]), o($VS, [2, 71], { 71: 113, 60: [1, 115], 72: [1, 114] }), { 74: 116, 76: 117, 77: [1, 118], 78: [1, 119], 113: $VT, 116: $VU }, o([42, 58, 60, 72, 86, 99, 102, 103, 106, 108, 111, 112, 113], [2, 77]), o($Vy, [2, 28]), o($Vy, [2, 29]), o($Vy, [2, 30]), o($Vy, [2, 31]), o($Vy, [2, 32]), { 10: $VV, 12: $VW, 14: $VX, 27: $VY, 28: 122, 32: $VZ, 42: $V_, 58: $V$, 73: $V01, 77: [1, 124], 78: [1, 125], 80: 135, 81: $V11, 82: $V21, 83: $V31, 84: $V41, 85: $V51, 86: $V61, 87: $V71, 88: 123, 102: $V81, 106: $V91, 108: $Va1, 111: $Vb1, 112: $Vc1, 113: $Vd1 }, o($Ve1, $V4, { 5: 148 }), o($Vy, [2, 37]), o($Vy, [2, 38]), o($VC, [2, 45], { 42: $Vf1 }), { 42: $Vd, 45: 150, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 99: [1, 151], 100: 152, 102: [1, 153] }, { 42: $Vd, 45: 154, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 42: $Vd, 45: 155, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, o($Vg1, [2, 100], { 10: [1, 156], 93: [1, 157] }), { 77: [1, 158] }, o($Vg1, [2, 108], { 117: 160, 10: [1, 159], 14: $VD, 42: $VE, 58: $VF, 86: $VG, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN }), o($Vg1, [2, 110], { 10: [1, 161] }), o($Vh1, [2, 176]), o($Vh1, [2, 163]), o($Vh1, [2, 164]), o($Vh1, [2, 165]), o($Vh1, [2, 166]), o($Vh1, [2, 167]), o($Vh1, [2, 168]), o($Vh1, [2, 169]), o($Vh1, [2, 170]), o($Vh1, [2, 171]), o($Vh1, [2, 172]), o($Vh1, [2, 173]), { 42: $Vd, 45: 162, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 30: 163, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 171, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 173, 48: [1, 172], 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 174, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 175, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 176, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 106: [1, 177] }, { 30: 178, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 179, 63: [1, 180], 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 181, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 182, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 183, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VQ, [2, 175]), o($V3, [2, 20]), o($VR, [2, 25]), o($VC, [2, 43], { 18: 184, 10: $Vx }), o($VS, [2, 68], { 10: [1, 185] }), { 10: [1, 186] }, { 30: 187, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 75: [1, 188], 76: 189, 113: $VT, 116: $VU }, o($Vo1, [2, 73]), o($Vo1, [2, 75]), o($Vo1, [2, 76]), o($Vo1, [2, 161]), o($Vo1, [2, 162]), { 8: $Vz, 9: $VA, 10: $VV, 11: $VB, 12: $VW, 14: $VX, 21: 191, 27: $VY, 29: [1, 190], 32: $VZ, 42: $V_, 58: $V$, 73: $V01, 80: 135, 81: $V11, 82: $V21, 83: $V31, 84: $V41, 85: $V51, 86: $V61, 87: $V71, 88: 192, 102: $V81, 106: $V91, 108: $Va1, 111: $Vb1, 112: $Vc1, 113: $Vd1 }, o($Vp1, [2, 94]), o($Vp1, [2, 96]), o($Vp1, [2, 97]), o($Vp1, [2, 150]), o($Vp1, [2, 151]), o($Vp1, [2, 152]), o($Vp1, [2, 153]), o($Vp1, [2, 154]), o($Vp1, [2, 155]), o($Vp1, [2, 156]), o($Vp1, [2, 157]), o($Vp1, [2, 158]), o($Vp1, [2, 159]), o($Vp1, [2, 160]), o($Vp1, [2, 83]), o($Vp1, [2, 84]), o($Vp1, [2, 85]), o($Vp1, [2, 86]), o($Vp1, [2, 87]), o($Vp1, [2, 88]), o($Vp1, [2, 89]), o($Vp1, [2, 90]), o($Vp1, [2, 91]), o($Vp1, [2, 92]), o($Vp1, [2, 93]), { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 193], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, { 10: $Vx, 18: 194 }, { 10: [1, 195], 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 109, 111: $Vq, 112: $Vr, 113: $Vs }, { 10: [1, 196] }, { 10: [1, 197], 103: [1, 198] }, o($Vq1, [2, 121]), { 10: [1, 199], 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 109, 111: $Vq, 112: $Vr, 113: $Vs }, { 10: [1, 200], 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 109, 111: $Vq, 112: $Vr, 113: $Vs }, { 77: [1, 201] }, o($Vg1, [2, 102], { 10: [1, 202] }), o($Vg1, [2, 104], { 10: [1, 203] }), { 77: [1, 204] }, o($Vh1, [2, 177]), { 77: [1, 205], 95: [1, 206] }, o($VO, [2, 50], { 110: 109, 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 111: $Vq, 112: $Vr, 113: $Vs }), { 31: [1, 207], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($Vr1, [2, 79]), o($Vr1, [2, 81]), o($Vr1, [2, 82]), o($Vr1, [2, 146]), o($Vr1, [2, 147]), o($Vr1, [2, 148]), o($Vr1, [2, 149]), { 47: [1, 209], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 210, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 49: [1, 211], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 51: [1, 212], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 53: [1, 213], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 55: [1, 214], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 58: [1, 215] }, { 62: [1, 216], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 64: [1, 217], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 218, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 31: [1, 219], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 65: $Vi1, 67: [1, 220], 69: [1, 221], 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 65: $Vi1, 67: [1, 223], 69: [1, 222], 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VC, [2, 44], { 42: $Vf1 }), o($VS, [2, 70]), o($VS, [2, 69]), { 60: [1, 224], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VS, [2, 72]), o($Vo1, [2, 74]), { 30: 225, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($Ve1, $V4, { 5: 226 }), o($Vp1, [2, 95]), o($Vy, [2, 35]), { 41: 227, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 228, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 239, 101: [1, 240], 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 241, 101: [1, 242], 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 102: [1, 243] }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 244, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 42: $Vd, 45: 245, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, o($Vg1, [2, 101]), { 77: [1, 246] }, { 77: [1, 247], 95: [1, 248] }, o($Vg1, [2, 109]), o($Vg1, [2, 111], { 10: [1, 249] }), o($Vg1, [2, 112]), o($VP, [2, 51]), o($Vr1, [2, 80]), o($VP, [2, 52]), { 49: [1, 250], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VP, [2, 59]), o($VP, [2, 54]), o($VP, [2, 55]), o($VP, [2, 56]), { 106: [1, 251] }, o($VP, [2, 58]), o($VP, [2, 60]), { 64: [1, 252], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VP, [2, 62]), o($VP, [2, 63]), o($VP, [2, 65]), o($VP, [2, 64]), o($VP, [2, 66]), o([10, 42, 58, 86, 99, 102, 103, 106, 108, 111, 112, 113], [2, 78]), { 31: [1, 253], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 254], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, o($VO, [2, 48]), o($Vg1, [2, 114], { 103: $VA1 }), o($VB1, [2, 123], { 105: 256, 10: $Vs1, 58: $Vt1, 81: $Vu1, 102: $Vv1, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }), o($VC1, [2, 125]), o($VC1, [2, 127]), o($VC1, [2, 128]), o($VC1, [2, 129]), o($VC1, [2, 130]), o($VC1, [2, 131]), o($VC1, [2, 132]), o($VC1, [2, 133]), o($VC1, [2, 134]), o($Vg1, [2, 115], { 103: $VA1 }), { 10: [1, 257] }, o($Vg1, [2, 116], { 103: $VA1 }), { 10: [1, 258] }, o($Vq1, [2, 122]), o($Vg1, [2, 98], { 103: $VA1 }), o($Vg1, [2, 99], { 110: 109, 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 111: $Vq, 112: $Vr, 113: $Vs }), o($Vg1, [2, 103]), o($Vg1, [2, 105], { 10: [1, 259] }), o($Vg1, [2, 106]), { 95: [1, 260] }, { 49: [1, 261] }, { 60: [1, 262] }, { 64: [1, 263] }, { 8: $Vz, 9: $VA, 11: $VB, 21: 264 }, o($Vy, [2, 34]), { 10: $Vs1, 58: $Vt1, 81: $Vu1, 102: $Vv1, 104: 265, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, o($VC1, [2, 126]), { 14: $VD, 42: $VE, 58: $VF, 86: $VG, 98: 266, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN, 117: 84 }, { 14: $VD, 42: $VE, 58: $VF, 86: $VG, 98: 267, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN, 117: 84 }, { 95: [1, 268] }, o($Vg1, [2, 113]), o($VP, [2, 53]), { 30: 269, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VP, [2, 61]), o($Ve1, $V4, { 5: 270 }), o($VB1, [2, 124], { 105: 256, 10: $Vs1, 58: $Vt1, 81: $Vu1, 102: $Vv1, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }), o($Vg1, [2, 119], { 117: 160, 10: [1, 271], 14: $VD, 42: $VE, 58: $VF, 86: $VG, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN }), o($Vg1, [2, 120], { 117: 160, 10: [1, 272], 14: $VD, 42: $VE, 58: $VF, 86: $VG, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN }), o($Vg1, [2, 107]), { 31: [1, 273], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 274], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 275, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 276, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, o($VP, [2, 57]), o($Vy, [2, 33]), o($Vg1, [2, 117], { 103: $VA1 }), o($Vg1, [2, 118], { 103: $VA1 })], + defaultActions: {}, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex2() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex2(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex2() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: {}, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("acc_title"); + return 34; + case 1: + this.popState(); + return "acc_title_value"; + case 2: + this.begin("acc_descr"); + return 36; + case 3: + this.popState(); + return "acc_descr_value"; + case 4: + this.begin("acc_descr_multiline"); + break; + case 5: + this.popState(); + break; + case 6: + return "acc_descr_multiline_value"; + case 7: + this.begin("callbackname"); + break; + case 8: + this.popState(); + break; + case 9: + this.popState(); + this.begin("callbackargs"); + break; + case 10: + return 92; + case 11: + this.popState(); + break; + case 12: + return 93; + case 13: + return "MD_STR"; + case 14: + this.popState(); + break; + case 15: + this.begin("md_string"); + break; + case 16: + return "STR"; + case 17: + this.popState(); + break; + case 18: + this.pushState("string"); + break; + case 19: + return 81; + case 20: + return 99; + case 21: + return 82; + case 22: + return 101; + case 23: + return 83; + case 24: + return 84; + case 25: + return 94; + case 26: + this.begin("click"); + break; + case 27: + this.popState(); + break; + case 28: + return 85; + case 29: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 12; + case 30: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 12; + case 31: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 12; + case 32: + return 27; + case 33: + return 32; + case 34: + return 95; + case 35: + return 95; + case 36: + return 95; + case 37: + return 95; + case 38: + this.popState(); + return 13; + case 39: + this.popState(); + return 14; + case 40: + this.popState(); + return 14; + case 41: + this.popState(); + return 14; + case 42: + this.popState(); + return 14; + case 43: + this.popState(); + return 14; + case 44: + this.popState(); + return 14; + case 45: + this.popState(); + return 14; + case 46: + this.popState(); + return 14; + case 47: + this.popState(); + return 14; + case 48: + this.popState(); + return 14; + case 49: + return 118; + case 50: + return 119; + case 51: + return 120; + case 52: + return 121; + case 53: + return 102; + case 54: + return 108; + case 55: + return 44; + case 56: + return 58; + case 57: + return 42; + case 58: + return 8; + case 59: + return 103; + case 60: + return 112; + case 61: + this.popState(); + return 75; + case 62: + this.pushState("edgeText"); + return 73; + case 63: + return 116; + case 64: + this.popState(); + return 75; + case 65: + this.pushState("thickEdgeText"); + return 73; + case 66: + return 116; + case 67: + this.popState(); + return 75; + case 68: + this.pushState("dottedEdgeText"); + return 73; + case 69: + return 116; + case 70: + return 75; + case 71: + this.popState(); + return 51; + case 72: + return "TEXT"; + case 73: + this.pushState("ellipseText"); + return 50; + case 74: + this.popState(); + return 53; + case 75: + this.pushState("text"); + return 52; + case 76: + this.popState(); + return 55; + case 77: + this.pushState("text"); + return 54; + case 78: + return 56; + case 79: + this.pushState("text"); + return 65; + case 80: + this.popState(); + return 62; + case 81: + this.pushState("text"); + return 61; + case 82: + this.popState(); + return 47; + case 83: + this.pushState("text"); + return 46; + case 84: + this.popState(); + return 67; + case 85: + this.popState(); + return 69; + case 86: + return 114; + case 87: + this.pushState("trapText"); + return 66; + case 88: + this.pushState("trapText"); + return 68; + case 89: + return 115; + case 90: + return 65; + case 91: + return 87; + case 92: + return "SEP"; + case 93: + return 86; + case 94: + return 112; + case 95: + return 108; + case 96: + return 42; + case 97: + return 106; + case 98: + return 111; + case 99: + return 113; + case 100: + this.popState(); + return 60; + case 101: + this.pushState("text"); + return 60; + case 102: + this.popState(); + return 49; + case 103: + this.pushState("text"); + return 48; + case 104: + this.popState(); + return 31; + case 105: + this.pushState("text"); + return 29; + case 106: + this.popState(); + return 64; + case 107: + this.pushState("text"); + return 63; + case 108: + return "TEXT"; + case 109: + return "QUOTE"; + case 110: + return 9; + case 111: + return 10; + case 112: + return 11; + } + }, + rules: [/^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:[^`"]+)/, /^(?:[`]["])/, /^(?:["][`])/, /^(?:[^"]+)/, /^(?:["])/, /^(?:["])/, /^(?:style\b)/, /^(?:default\b)/, /^(?:linkStyle\b)/, /^(?:interpolate\b)/, /^(?:classDef\b)/, /^(?:class\b)/, /^(?:href[\s])/, /^(?:click[\s]+)/, /^(?:[\s\n])/, /^(?:[^\s\n]*)/, /^(?:flowchart-elk\b)/, /^(?:graph\b)/, /^(?:flowchart\b)/, /^(?:subgraph\b)/, /^(?:end\b\s*)/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:(\r?\n)*\s*\n)/, /^(?:\s*LR\b)/, /^(?:\s*RL\b)/, /^(?:\s*TB\b)/, /^(?:\s*BT\b)/, /^(?:\s*TD\b)/, /^(?:\s*BR\b)/, /^(?:\s*<)/, /^(?:\s*>)/, /^(?:\s*\^)/, /^(?:\s*v\b)/, /^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:[0-9]+)/, /^(?:#)/, /^(?::::)/, /^(?::)/, /^(?:&)/, /^(?:;)/, /^(?:,)/, /^(?:\*)/, /^(?:\s*[xo<]?--+[-xo>]\s*)/, /^(?:\s*[xo<]?--\s*)/, /^(?:[^-]|-(?!-)+)/, /^(?:\s*[xo<]?==+[=xo>]\s*)/, /^(?:\s*[xo<]?==\s*)/, /^(?:[^=]|=(?!))/, /^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/, /^(?:\s*[xo<]?-\.\s*)/, /^(?:[^\.]|\.(?!))/, /^(?:\s*~~[\~]+\s*)/, /^(?:[-/\)][\)])/, /^(?:[^\(\)\[\]\{\}]|!\)+)/, /^(?:\(-)/, /^(?:\]\))/, /^(?:\(\[)/, /^(?:\]\])/, /^(?:\[\[)/, /^(?:\[\|)/, /^(?:>)/, /^(?:\)\])/, /^(?:\[\()/, /^(?:\)\)\))/, /^(?:\(\(\()/, /^(?:[\\(?=\])][\]])/, /^(?:\/(?=\])\])/, /^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/, /^(?:\[\/)/, /^(?:\[\\)/, /^(?:<)/, /^(?:>)/, /^(?:\^)/, /^(?:\\\|)/, /^(?:v\b)/, /^(?:\*)/, /^(?:#)/, /^(?:&)/, /^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/, /^(?:-)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\|)/, /^(?:\|)/, /^(?:\))/, /^(?:\()/, /^(?:\])/, /^(?:\[)/, /^(?:(\}))/, /^(?:\{)/, /^(?:[^\[\]\(\)\{\}\|\"]+)/, /^(?:")/, /^(?:(\r?\n)+)/, /^(?:\s)/, /^(?:$)/], + conditions: { "callbackargs": { "rules": [11, 12, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "callbackname": { "rules": [8, 9, 10, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "href": { "rules": [15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "click": { "rules": [15, 18, 27, 28, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "dottedEdgeText": { "rules": [15, 18, 67, 69, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "thickEdgeText": { "rules": [15, 18, 64, 66, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "edgeText": { "rules": [15, 18, 61, 63, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "trapText": { "rules": [15, 18, 70, 73, 75, 77, 81, 83, 84, 85, 86, 87, 88, 101, 103, 105, 107], "inclusive": false }, "ellipseText": { "rules": [15, 18, 70, 71, 72, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "text": { "rules": [15, 18, 70, 73, 74, 75, 76, 77, 80, 81, 82, 83, 87, 88, 100, 101, 102, 103, 104, 105, 106, 107, 108], "inclusive": false }, "vertex": { "rules": [15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "dir": { "rules": [15, 18, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "acc_descr_multiline": { "rules": [5, 6, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "acc_descr": { "rules": [3, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "acc_title": { "rules": [1, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "md_string": { "rules": [13, 14, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "string": { "rules": [15, 16, 17, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "INITIAL": { "rules": [0, 2, 4, 7, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64, 65, 67, 68, 70, 73, 75, 77, 78, 79, 81, 83, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 101, 103, 105, 107, 109, 110, 111, 112], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const MERMAID_DOM_ID_PREFIX = "flowchart-"; +let vertexCounter = 0; +let config = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)(); +let vertices = {}; +let edges = []; +let classes = {}; +let subGraphs = []; +let subGraphLookup = {}; +let tooltips = {}; +let subCount = 0; +let firstGraphFlag = true; +let direction; +let version; +let funs = []; +const sanitizeText = (txt) => _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, config); +const lookUpDomId = function(id) { + const vertexKeys = Object.keys(vertices); + for (const vertexKey of vertexKeys) { + if (vertices[vertexKey].id === id) { + return vertices[vertexKey].domId; + } + } + return id; +}; +const addVertex = function(_id, textObj, type, style, classes2, dir, props = {}) { + let txt; + let id = _id; + if (id === void 0) { + return; + } + if (id.trim().length === 0) { + return; + } + if (vertices[id] === void 0) { + vertices[id] = { + id, + labelType: "text", + domId: MERMAID_DOM_ID_PREFIX + id + "-" + vertexCounter, + styles: [], + classes: [] + }; + } + vertexCounter++; + if (textObj !== void 0) { + config = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + txt = sanitizeText(textObj.text.trim()); + vertices[id].labelType = textObj.type; + if (txt[0] === '"' && txt[txt.length - 1] === '"') { + txt = txt.substring(1, txt.length - 1); + } + vertices[id].text = txt; + } else { + if (vertices[id].text === void 0) { + vertices[id].text = _id; + } + } + if (type !== void 0) { + vertices[id].type = type; + } + if (style !== void 0 && style !== null) { + style.forEach(function(s) { + vertices[id].styles.push(s); + }); + } + if (classes2 !== void 0 && classes2 !== null) { + classes2.forEach(function(s) { + vertices[id].classes.push(s); + }); + } + if (dir !== void 0) { + vertices[id].dir = dir; + } + if (vertices[id].props === void 0) { + vertices[id].props = props; + } else if (props !== void 0) { + Object.assign(vertices[id].props, props); + } +}; +const addSingleLink = function(_start, _end, type) { + let start = _start; + let end = _end; + const edge = { start, end, type: void 0, text: "", labelType: "text" }; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc78 Got edge...", edge); + const linkTextObj = type.text; + if (linkTextObj !== void 0) { + edge.text = sanitizeText(linkTextObj.text.trim()); + if (edge.text[0] === '"' && edge.text[edge.text.length - 1] === '"') { + edge.text = edge.text.substring(1, edge.text.length - 1); + } + edge.labelType = linkTextObj.type; + } + if (type !== void 0) { + edge.type = type.type; + edge.stroke = type.stroke; + edge.length = type.length; + } + if ((edge == null ? void 0 : edge.length) > 10) { + edge.length = 10; + } + if (edges.length < (config.maxEdges ?? 500)) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc78 pushing edge..."); + edges.push(edge); + } else { + throw new Error( + `Edge limit exceeded. ${edges.length} edges found, but the limit is ${config.maxEdges}. + +Initialize mermaid with maxEdges set to a higher number to allow more edges. +You cannot set this config via configuration inside the diagram as it is a secure config. +You have to call mermaid.initialize.` + ); + } +}; +const addLink = function(_start, _end, type) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("addLink (abc78)", _start, _end, type); + let i, j; + for (i = 0; i < _start.length; i++) { + for (j = 0; j < _end.length; j++) { + addSingleLink(_start[i], _end[j], type); + } + } +}; +const updateLinkInterpolate = function(positions, interp) { + positions.forEach(function(pos) { + if (pos === "default") { + edges.defaultInterpolate = interp; + } else { + edges[pos].interpolate = interp; + } + }); +}; +const updateLink = function(positions, style) { + positions.forEach(function(pos) { + if (pos >= edges.length) { + throw new Error( + `The index ${pos} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${edges.length - 1}. (Help: Ensure that the index is within the range of existing edges.)` + ); + } + if (pos === "default") { + edges.defaultStyle = style; + } else { + if (_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.isSubstringInArray("fill", style) === -1) { + style.push("fill:none"); + } + edges[pos].style = style; + } + }); +}; +const addClass = function(ids, style) { + ids.split(",").forEach(function(id) { + if (classes[id] === void 0) { + classes[id] = { id, styles: [], textStyles: [] }; + } + if (style !== void 0 && style !== null) { + style.forEach(function(s) { + if (s.match("color")) { + const newStyle = s.replace("fill", "bgFill").replace("color", "fill"); + classes[id].textStyles.push(newStyle); + } + classes[id].styles.push(s); + }); + } + }); +}; +const setDirection = function(dir) { + direction = dir; + if (direction.match(/.*/)) { + direction = "LR"; + } + if (direction.match(/.*v/)) { + direction = "TB"; + } + if (direction === "TD") { + direction = "TB"; + } +}; +const setClass = function(ids, className) { + ids.split(",").forEach(function(_id) { + let id = _id; + if (vertices[id] !== void 0) { + vertices[id].classes.push(className); + } + if (subGraphLookup[id] !== void 0) { + subGraphLookup[id].classes.push(className); + } + }); +}; +const setTooltip = function(ids, tooltip) { + ids.split(",").forEach(function(id) { + if (tooltip !== void 0) { + tooltips[version === "gen-1" ? lookUpDomId(id) : id] = sanitizeText(tooltip); + } + }); +}; +const setClickFun = function(id, functionName, functionArgs) { + let domId = lookUpDomId(id); + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel !== "loose") { + return; + } + if (functionName === void 0) { + return; + } + let argList = []; + if (typeof functionArgs === "string") { + argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); + for (let i = 0; i < argList.length; i++) { + let item = argList[i].trim(); + if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { + item = item.substr(1, item.length - 2); + } + argList[i] = item; + } + } + if (argList.length === 0) { + argList.push(id); + } + if (vertices[id] !== void 0) { + vertices[id].haveCallback = true; + funs.push(function() { + const elem = document.querySelector(`[id="${domId}"]`); + if (elem !== null) { + elem.addEventListener( + "click", + function() { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.runFunc(functionName, ...argList); + }, + false + ); + } + }); + } +}; +const setLink = function(ids, linkStr, target) { + ids.split(",").forEach(function(id) { + if (vertices[id] !== void 0) { + vertices[id].link = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.formatUrl(linkStr, config); + vertices[id].linkTarget = target; + } + }); + setClass(ids, "clickable"); +}; +const getTooltip = function(id) { + if (tooltips.hasOwnProperty(id)) { + return tooltips[id]; + } + return void 0; +}; +const setClickEvent = function(ids, functionName, functionArgs) { + ids.split(",").forEach(function(id) { + setClickFun(id, functionName, functionArgs); + }); + setClass(ids, "clickable"); +}; +const bindFunctions = function(element) { + funs.forEach(function(fun) { + fun(element); + }); +}; +const getDirection = function() { + return direction.trim(); +}; +const getVertices = function() { + return vertices; +}; +const getEdges = function() { + return edges; +}; +const getClasses = function() { + return classes; +}; +const setupToolTips = function(element) { + let tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(".mermaidTooltip"); + if ((tooltipElem._groups || tooltipElem)[0][0] === null) { + tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); + } + const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(element).select("svg"); + const nodes = svg.selectAll("g.node"); + nodes.on("mouseover", function() { + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(this); + const title = el.attr("title"); + if (title === null) { + return; + } + const rect = this.getBoundingClientRect(); + tooltipElem.transition().duration(200).style("opacity", ".9"); + tooltipElem.text(el.attr("title")).style("left", window.scrollX + rect.left + (rect.right - rect.left) / 2 + "px").style("top", window.scrollY + rect.bottom + "px"); + tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, "
    ")); + el.classed("hover", true); + }).on("mouseout", function() { + tooltipElem.transition().duration(500).style("opacity", 0); + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(this); + el.classed("hover", false); + }); +}; +funs.push(setupToolTips); +const clear = function(ver = "gen-1") { + vertices = {}; + classes = {}; + edges = []; + funs = [setupToolTips]; + subGraphs = []; + subGraphLookup = {}; + subCount = 0; + tooltips = {}; + firstGraphFlag = true; + version = ver; + config = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.v)(); +}; +const setGen = (ver) => { + version = ver || "gen-2"; +}; +const defaultStyle = function() { + return "fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"; +}; +const addSubGraph = function(_id, list, _title) { + let id = _id.text.trim(); + let title = _title.text; + if (_id === _title && _title.text.match(/\s/)) { + id = void 0; + } + function uniq(a) { + const prims = { boolean: {}, number: {}, string: {} }; + const objs = []; + let dir2; + const nodeList2 = a.filter(function(item) { + const type = typeof item; + if (item.stmt && item.stmt === "dir") { + dir2 = item.value; + return false; + } + if (item.trim() === "") { + return false; + } + if (type in prims) { + return prims[type].hasOwnProperty(item) ? false : prims[type][item] = true; + } else { + return objs.includes(item) ? false : objs.push(item); + } + }); + return { nodeList: nodeList2, dir: dir2 }; + } + let nodeList = []; + const { nodeList: nl, dir } = uniq(nodeList.concat.apply(nodeList, list)); + nodeList = nl; + if (version === "gen-1") { + for (let i = 0; i < nodeList.length; i++) { + nodeList[i] = lookUpDomId(nodeList[i]); + } + } + id = id || "subGraph" + subCount; + title = title || ""; + title = sanitizeText(title); + subCount = subCount + 1; + const subGraph = { + id, + nodes: nodeList, + title: title.trim(), + classes: [], + dir, + labelType: _title.type + }; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Adding", subGraph.id, subGraph.nodes, subGraph.dir); + subGraph.nodes = makeUniq(subGraph, subGraphs).nodes; + subGraphs.push(subGraph); + subGraphLookup[id] = subGraph; + return id; +}; +const getPosForId = function(id) { + for (const [i, subGraph] of subGraphs.entries()) { + if (subGraph.id === id) { + return i; + } + } + return -1; +}; +let secCount = -1; +const posCrossRef = []; +const indexNodes2 = function(id, pos) { + const nodes = subGraphs[pos].nodes; + secCount = secCount + 1; + if (secCount > 2e3) { + return; + } + posCrossRef[secCount] = pos; + if (subGraphs[pos].id === id) { + return { + result: true, + count: 0 + }; + } + let count = 0; + let posCount = 1; + while (count < nodes.length) { + const childPos = getPosForId(nodes[count]); + if (childPos >= 0) { + const res = indexNodes2(id, childPos); + if (res.result) { + return { + result: true, + count: posCount + res.count + }; + } else { + posCount = posCount + res.count; + } + } + count = count + 1; + } + return { + result: false, + count: posCount + }; +}; +const getDepthFirstPos = function(pos) { + return posCrossRef[pos]; +}; +const indexNodes = function() { + secCount = -1; + if (subGraphs.length > 0) { + indexNodes2("none", subGraphs.length - 1); + } +}; +const getSubGraphs = function() { + return subGraphs; +}; +const firstGraph = () => { + if (firstGraphFlag) { + firstGraphFlag = false; + return true; + } + return false; +}; +const destructStartLink = (_str) => { + let str = _str.trim(); + let type = "arrow_open"; + switch (str[0]) { + case "<": + type = "arrow_point"; + str = str.slice(1); + break; + case "x": + type = "arrow_cross"; + str = str.slice(1); + break; + case "o": + type = "arrow_circle"; + str = str.slice(1); + break; + } + let stroke = "normal"; + if (str.includes("=")) { + stroke = "thick"; + } + if (str.includes(".")) { + stroke = "dotted"; + } + return { type, stroke }; +}; +const countChar = (char, str) => { + const length = str.length; + let count = 0; + for (let i = 0; i < length; ++i) { + if (str[i] === char) { + ++count; + } + } + return count; +}; +const destructEndLink = (_str) => { + const str = _str.trim(); + let line = str.slice(0, -1); + let type = "arrow_open"; + switch (str.slice(-1)) { + case "x": + type = "arrow_cross"; + if (str[0] === "x") { + type = "double_" + type; + line = line.slice(1); + } + break; + case ">": + type = "arrow_point"; + if (str[0] === "<") { + type = "double_" + type; + line = line.slice(1); + } + break; + case "o": + type = "arrow_circle"; + if (str[0] === "o") { + type = "double_" + type; + line = line.slice(1); + } + break; + } + let stroke = "normal"; + let length = line.length - 1; + if (line[0] === "=") { + stroke = "thick"; + } + if (line[0] === "~") { + stroke = "invisible"; + } + let dots = countChar(".", line); + if (dots) { + stroke = "dotted"; + length = dots; + } + return { type, stroke, length }; +}; +const destructLink = (_str, _startStr) => { + const info = destructEndLink(_str); + let startInfo; + if (_startStr) { + startInfo = destructStartLink(_startStr); + if (startInfo.stroke !== info.stroke) { + return { type: "INVALID", stroke: "INVALID" }; + } + if (startInfo.type === "arrow_open") { + startInfo.type = info.type; + } else { + if (startInfo.type !== info.type) { + return { type: "INVALID", stroke: "INVALID" }; + } + startInfo.type = "double_" + startInfo.type; + } + if (startInfo.type === "double_arrow") { + startInfo.type = "double_arrow_point"; + } + startInfo.length = info.length; + return startInfo; + } + return info; +}; +const exists = (allSgs, _id) => { + let res = false; + allSgs.forEach((sg) => { + const pos = sg.nodes.indexOf(_id); + if (pos >= 0) { + res = true; + } + }); + return res; +}; +const makeUniq = (sg, allSubgraphs) => { + const res = []; + sg.nodes.forEach((_id, pos) => { + if (!exists(allSubgraphs, _id)) { + res.push(sg.nodes[pos]); + } + }); + return { nodes: res }; +}; +const lex = { + firstGraph +}; +const flowDb = { + defaultConfig: () => _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.K.flowchart, + setAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.s, + getAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.g, + getAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.a, + setAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.b, + addVertex, + lookUpDomId, + addLink, + updateLinkInterpolate, + updateLink, + addClass, + setDirection, + setClass, + setTooltip, + getTooltip, + setClickEvent, + setLink, + bindFunctions, + getDirection, + getVertices, + getEdges, + getClasses, + clear, + setGen, + defaultStyle, + addSubGraph, + getDepthFirstPos, + indexNodes, + getSubGraphs, + destructLink, + lex, + exists, + makeUniq, + setDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.q, + getDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.t +}; +const db = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + addClass, + addLink, + addSingleLink, + addSubGraph, + addVertex, + bindFunctions, + clear, + default: flowDb, + defaultStyle, + destructLink, + firstGraph, + getClasses, + getDepthFirstPos, + getDirection, + getEdges, + getSubGraphs, + getTooltip, + getVertices, + indexNodes, + lex, + lookUpDomId, + setClass, + setClickEvent, + setDirection, + setGen, + setLink, + updateLink, + updateLinkInterpolate +}, Symbol.toStringTag, { value: "Module" })); + + + +/***/ }), + +/***/ 22453: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _flowDb_c1833063_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(32548); +/* harmony import */ var _styles_483fbfea_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(65382); +/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(99702); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(697); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21176); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(14075); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(74353); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(16750); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(99418); + + + + + + + + + + + + + + + + + + + + + +const diagram = { + parser: _flowDb_c1833063_js__WEBPACK_IMPORTED_MODULE_7__.p, + db: _flowDb_c1833063_js__WEBPACK_IMPORTED_MODULE_7__.f, + renderer: _styles_483fbfea_js__WEBPACK_IMPORTED_MODULE_8__.f, + styles: _styles_483fbfea_js__WEBPACK_IMPORTED_MODULE_8__.a, + init: (cnf) => { + if (!cnf.flowchart) { + cnf.flowchart = {}; + } + cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_9__.p)({ flowchart: { arrowMarkerAbsolute: cnf.arrowMarkerAbsolute } }); + _styles_483fbfea_js__WEBPACK_IMPORTED_MODULE_8__.f.setConf(cnf.flowchart); + _flowDb_c1833063_js__WEBPACK_IMPORTED_MODULE_7__.f.clear(); + _flowDb_c1833063_js__WEBPACK_IMPORTED_MODULE_7__.f.setGen("gen-2"); + } +}; + + + +/***/ }), + +/***/ 35364: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ r: () => (/* binding */ render) +/* harmony export */ }); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(21176); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(14075); +/* harmony import */ var _edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(98055); +/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99702); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(697); +/* harmony import */ var _createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(18897); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(26312); + + + + + + + +let clusterDb = {}; +let descendants = {}; +let parents = {}; +const clear$1 = () => { + descendants = {}; + parents = {}; + clusterDb = {}; +}; +const isDescendant = (id, ancestorId) => { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("In isDescendant", ancestorId, " ", id, " = ", descendants[ancestorId].includes(id)); + if (descendants[ancestorId].includes(id)) { + return true; + } + return false; +}; +const edgeInCluster = (edge, clusterId) => { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Descendants of ", clusterId, " is ", descendants[clusterId]); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge is ", edge); + if (edge.v === clusterId) { + return false; + } + if (edge.w === clusterId) { + return false; + } + if (!descendants[clusterId]) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Tilt, ", clusterId, ",not in descendants"); + return false; + } + return descendants[clusterId].includes(edge.v) || isDescendant(edge.v, clusterId) || isDescendant(edge.w, clusterId) || descendants[clusterId].includes(edge.w); +}; +const copy = (clusterId, graph, newGraph, rootId) => { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Copying children of ", + clusterId, + "root", + rootId, + "data", + graph.node(clusterId), + rootId + ); + const nodes = graph.children(clusterId) || []; + if (clusterId !== rootId) { + nodes.push(clusterId); + } + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Copying (nodes) clusterId", clusterId, "nodes", nodes); + nodes.forEach((node) => { + if (graph.children(node).length > 0) { + copy(node, graph, newGraph, rootId); + } else { + const data = graph.node(node); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("cp ", node, " to ", rootId, " with parent ", clusterId); + newGraph.setNode(node, data); + if (rootId !== graph.parent(node)) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Setting parent", node, graph.parent(node)); + newGraph.setParent(node, graph.parent(node)); + } + if (clusterId !== rootId && node !== clusterId) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Setting parent", node, clusterId); + newGraph.setParent(node, clusterId); + } else { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("In copy ", clusterId, "root", rootId, "data", graph.node(clusterId), rootId); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + "Not Setting parent for node=", + node, + "cluster!==rootId", + clusterId !== rootId, + "node!==clusterId", + node !== clusterId + ); + } + const edges = graph.edges(node); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Copying Edges", edges); + edges.forEach((edge) => { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge", edge); + const data2 = graph.edge(edge.v, edge.w, edge.name); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge data", data2, rootId); + try { + if (edgeInCluster(edge, rootId)) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Copying as ", edge.v, edge.w, data2, edge.name); + newGraph.setEdge(edge.v, edge.w, data2, edge.name); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("newGraph edges ", newGraph.edges(), newGraph.edge(newGraph.edges()[0])); + } else { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Skipping copy of edge ", + edge.v, + "-->", + edge.w, + " rootId: ", + rootId, + " clusterId:", + clusterId + ); + } + } catch (e) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.error(e); + } + }); + } + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Removing node", node); + graph.removeNode(node); + }); +}; +const extractDescendants = (id, graph) => { + const children = graph.children(id); + let res = [...children]; + for (const child of children) { + parents[child] = id; + res = [...res, ...extractDescendants(child, graph)]; + } + return res; +}; +const findNonClusterChild = (id, graph) => { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching", id); + const children = graph.children(id); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching children of id ", id, children); + if (children.length < 1) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("This is a valid node", id); + return id; + } + for (const child of children) { + const _id = findNonClusterChild(child, graph); + if (_id) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Found replacement for", id, " => ", _id); + return _id; + } + } +}; +const getAnchorId = (id) => { + if (!clusterDb[id]) { + return id; + } + if (!clusterDb[id].externalConnections) { + return id; + } + if (clusterDb[id]) { + return clusterDb[id].id; + } + return id; +}; +const adjustClustersAndEdges = (graph, depth) => { + if (!graph || depth > 10) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting out, no graph "); + return; + } else { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting in, graph "); + } + graph.nodes().forEach(function(id) { + const children = graph.children(id); + if (children.length > 0) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster identified", + id, + " Replacement id in edges: ", + findNonClusterChild(id, graph) + ); + descendants[id] = extractDescendants(id, graph); + clusterDb[id] = { id: findNonClusterChild(id, graph), clusterData: graph.node(id) }; + } + }); + graph.nodes().forEach(function(id) { + const children = graph.children(id); + const edges = graph.edges(); + if (children.length > 0) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Cluster identified", id, descendants); + edges.forEach((edge) => { + if (edge.v !== id && edge.w !== id) { + const d1 = isDescendant(edge.v, id); + const d2 = isDescendant(edge.w, id); + if (d1 ^ d2) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge: ", edge, " leaves cluster ", id); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Descendants of XXX ", id, ": ", descendants[id]); + clusterDb[id].externalConnections = true; + } + } + }); + } else { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster ", id, descendants); + } + }); + for (let id of Object.keys(clusterDb)) { + const nonClusterChild = clusterDb[id].id; + const parent = graph.parent(nonClusterChild); + if (parent !== id && clusterDb[parent] && !clusterDb[parent].externalConnections) { + clusterDb[id].id = parent; + } + } + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(graph.edge(e))); + let v = e.v; + let w = e.w; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Fix XXX", + clusterDb, + "ids:", + e.v, + e.w, + "Translating: ", + clusterDb[e.v], + " --- ", + clusterDb[e.w] + ); + if (clusterDb[e.v] && clusterDb[e.w] && clusterDb[e.v] === clusterDb[e.w]) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing link to self - removing XXX", e.v, e.w, e.name); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); + v = getAnchorId(e.v); + w = getAnchorId(e.w); + graph.removeEdge(e.v, e.w, e.name); + const specialId = e.w + "---" + e.v; + graph.setNode(specialId, { + domId: specialId, + id: specialId, + labelStyle: "", + labelText: edge.label, + padding: 0, + shape: "labelRect", + style: "" + }); + const edge1 = structuredClone(edge); + const edge2 = structuredClone(edge); + edge1.label = ""; + edge1.arrowTypeEnd = "none"; + edge2.label = ""; + edge1.fromCluster = e.v; + edge2.toCluster = e.v; + graph.setEdge(v, specialId, edge1, e.name + "-cyclic-special"); + graph.setEdge(specialId, w, edge2, e.name + "-cyclic-special"); + } else if (clusterDb[e.v] || clusterDb[e.w]) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); + v = getAnchorId(e.v); + w = getAnchorId(e.w); + graph.removeEdge(e.v, e.w, e.name); + if (v !== e.v) { + const parent = graph.parent(v); + clusterDb[parent].externalConnections = true; + edge.fromCluster = e.v; + } + if (w !== e.w) { + const parent = graph.parent(w); + clusterDb[parent].externalConnections = true; + edge.toCluster = e.w; + } + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fix Replacing with XXX", v, w, e.name); + graph.setEdge(v, w, edge, e.name); + } + }); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Adjusted Graph", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph)); + extractor(graph, 0); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(clusterDb); +}; +const extractor = (graph, depth) => { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("extractor - ", depth, dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph), graph.children("D")); + if (depth > 10) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.error("Bailing out"); + return; + } + let nodes = graph.nodes(); + let hasChildren = false; + for (const node of nodes) { + const children = graph.children(node); + hasChildren = hasChildren || children.length > 0; + } + if (!hasChildren) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Done, no node has children", graph.nodes()); + return; + } + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Nodes = ", nodes, depth); + for (const node of nodes) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + "Extracting node", + node, + clusterDb, + clusterDb[node] && !clusterDb[node].externalConnections, + !graph.parent(node), + graph.node(node), + graph.children("D"), + " Depth ", + depth + ); + if (!clusterDb[node]) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster", node, depth); + } else if (!clusterDb[node].externalConnections && // !graph.parent(node) && + graph.children(node) && graph.children(node).length > 0) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster without external connections, without a parent and with children", + node, + depth + ); + const graphSettings = graph.graph(); + let dir = graphSettings.rankdir === "TB" ? "LR" : "TB"; + if (clusterDb[node] && clusterDb[node].clusterData && clusterDb[node].clusterData.dir) { + dir = clusterDb[node].clusterData.dir; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing dir", clusterDb[node].clusterData.dir, dir); + } + const clusterGraph = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .T({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + // Todo: set proper spacing + nodesep: 50, + ranksep: 50, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Old graph before copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph)); + copy(node, graph, clusterGraph, node); + graph.setNode(node, { + clusterNode: true, + id: node, + clusterData: clusterDb[node].clusterData, + labelText: clusterDb[node].labelText, + graph: clusterGraph + }); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New graph after copy node: (", node, ")", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(clusterGraph)); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Old graph after copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph)); + } else { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster ** ", + node, + " **not meeting the criteria !externalConnections:", + !clusterDb[node].externalConnections, + " no parent: ", + !graph.parent(node), + " children ", + graph.children(node) && graph.children(node).length > 0, + graph.children("D"), + depth + ); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(clusterDb); + } + } + nodes = graph.nodes(); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New list of nodes", nodes); + for (const node of nodes) { + const data = graph.node(node); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(" Now next level", node, data); + if (data.clusterNode) { + extractor(data.graph, depth + 1); + } + } +}; +const sorter = (graph, nodes) => { + if (nodes.length === 0) { + return []; + } + let result = Object.assign(nodes); + nodes.forEach((node) => { + const children = graph.children(node); + const sorted = sorter(graph, children); + result = [...result, ...sorted]; + }); + return result; +}; +const sortNodesByHierarchy = (graph) => sorter(graph, graph.children()); +const rect = (parent, node) => { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Creating subgraph rect for ", node.id, node); + const siteConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + const shapeSvg = parent.insert("g").attr("class", "cluster" + (node.class ? " " + node.class : "")).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const useHtmlLabels = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const text = node.labelType === "markdown" ? (0,_createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_5__.a)(label, node.labelText, { style: node.labelStyle, useHtmlLabels }) : label.node().appendChild((0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ltv)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const padding = 0 * node.padding; + const halfPadding = padding / 2; + const width = node.width <= bbox.width + padding ? bbox.width + padding : node.width; + if (node.width <= bbox.width + padding) { + node.diff = (bbox.width - node.width) / 2 - node.padding / 2; + } else { + node.diff = -node.padding / 2; + } + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Data ", node, JSON.stringify(node)); + rect2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - width / 2).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width).attr("height", node.height + padding); + const { subGraphTitleTopMargin } = (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); + if (useHtmlLabels) { + label.attr( + "transform", + // This puts the label on top of the box instead of inside it + `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 + subGraphTitleTopMargin})` + ); + } else { + label.attr( + "transform", + // This puts the label on top of the box instead of inside it + `translate(${node.x}, ${node.y - node.height / 2 + subGraphTitleTopMargin})` + ); + } + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const noteGroup = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "note-cluster").attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", node.width + padding).attr("height", node.height + padding).attr("fill", "none"); + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const roundedWithTitle = (parent, node) => { + const siteConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const innerRect = shapeSvg.append("rect"); + const text = label.node().appendChild((0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ltv)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + bbox = text.getBBox(); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width; + if (node.width <= bbox.width + node.padding) { + node.diff = (bbox.width + node.padding * 0 - node.width) / 2; + } else { + node.diff = -node.padding / 2; + } + rect2.attr("class", "outer").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width + padding).attr("height", node.height + padding); + innerRect.attr("class", "inner").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding + bbox.height - 1).attr("width", width + padding).attr("height", node.height + padding - bbox.height - 3); + const { subGraphTitleTopMargin } = (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); + label.attr( + "transform", + `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 - node.padding / 3 + ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels) ? 5 : 3) + subGraphTitleTopMargin})` + ); + const rectBox = rect2.node().getBBox(); + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const divider = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + rect2.attr("class", "divider").attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2).attr("width", node.width + padding).attr("height", node.height + padding); + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.diff = -node.padding / 2; + node.intersect = function(point) { + return (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const shapes = { rect, roundedWithTitle, noteGroup, divider }; +let clusterElems = {}; +const insertCluster = (elem, node) => { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Inserting cluster"); + const shape = node.shape || "rect"; + clusterElems[node.id] = shapes[shape](elem, node); +}; +const clear = () => { + clusterElems = {}; +}; +const recursiveRender = async (_elem, graph, diagramType, id, parentCluster, siteConfig) => { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph in recursive render: XXX", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph), parentCluster); + const dir = graph.graph().rankdir; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Dir in recursive render - dir:", dir); + const elem = _elem.insert("g").attr("class", "root"); + if (!graph.nodes()) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("No nodes found for", graph); + } else { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Recursive render XXX", graph.nodes()); + } + if (graph.edges().length > 0) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Recursive edges", graph.edge(graph.edges()[0])); + } + const clusters = elem.insert("g").attr("class", "clusters"); + const edgePaths = elem.insert("g").attr("class", "edgePaths"); + const edgeLabels = elem.insert("g").attr("class", "edgeLabels"); + const nodes = elem.insert("g").attr("class", "nodes"); + await Promise.all( + graph.nodes().map(async function(v) { + const node = graph.node(v); + if (parentCluster !== void 0) { + const data = JSON.parse(JSON.stringify(parentCluster.clusterData)); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Setting data for cluster XXX (", v, ") ", data, parentCluster); + graph.setNode(parentCluster.id, data); + if (!graph.parent(v)) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Setting parent", v, parentCluster.id); + graph.setParent(v, parentCluster.id, data); + } + } + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("(Insert) Node XXX" + v + ": " + JSON.stringify(graph.node(v))); + if (node && node.clusterNode) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster identified", v, node.width, graph.node(v)); + const o = await recursiveRender( + nodes, + node.graph, + diagramType, + id, + graph.node(v), + siteConfig + ); + const newEl = o.elem; + (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.u)(node, newEl); + node.diff = o.diff || 0; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node bounds (abc123)", v, node, node.width, node.x, node.y); + (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.s)(newEl, node); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Recursive render complete ", newEl, node); + } else { + if (graph.children(v).length > 0) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster - the non recursive path XXX", v, node.id, node, graph); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info(findNonClusterChild(node.id, graph)); + clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node }; + } else { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node - the non recursive path", v, node.id, node); + await (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.e)(nodes, graph.node(v), dir); + } + } + }) + ); + graph.edges().forEach(function(e) { + const edge = graph.edge(e.v, e.w, e.name); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": ", e, " ", JSON.stringify(graph.edge(e))); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Fix", clusterDb, "ids:", e.v, e.w, "Translating: ", clusterDb[e.v], clusterDb[e.w]); + (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.f)(edgeLabels, edge); + }); + graph.edges().forEach(function(e) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + }); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("### Layout ###"); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info(graph); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__/* .layout */ .Zp)(graph); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph after layout:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph)); + let diff = 0; + const { subGraphTitleTotalMargin } = (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); + sortNodesByHierarchy(graph).forEach(function(v) { + const node = graph.node(v); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Position " + v + ": " + JSON.stringify(graph.node(v))); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Position " + v + ": (" + node.x, + "," + node.y, + ") width: ", + node.width, + " height: ", + node.height + ); + if (node && node.clusterNode) { + node.y += subGraphTitleTotalMargin; + (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } else { + if (graph.children(v).length > 0) { + node.height += subGraphTitleTotalMargin; + insertCluster(clusters, node); + clusterDb[node.id].node = node; + } else { + node.y += subGraphTitleTotalMargin / 2; + (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(edge), edge); + edge.points.forEach((point) => point.y += subGraphTitleTotalMargin / 2); + const paths = (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.h)(edgePaths, e, edge, clusterDb, diagramType, graph, id); + (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.j)(edge, paths); + }); + graph.nodes().forEach(function(v) { + const n = graph.node(v); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info(v, n.type, n.diff); + if (n.type === "group") { + diff = n.diff; + } + }); + return { elem, diff }; +}; +const render = async (elem, graph, markers, diagramType, id) => { + (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.a)(elem, markers, diagramType, id); + (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.b)(); + (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.d)(); + clear(); + clear$1(); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph at first:", JSON.stringify(dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph))); + adjustClustersAndEdges(graph); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph after:", JSON.stringify(dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph))); + const siteConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + await recursiveRender(elem, graph, diagramType, id, void 0, siteConfig); +}; + + + +/***/ }), + +/***/ 65382: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ flowStyles), +/* harmony export */ f: () => (/* binding */ flowRendererV2) +/* harmony export */ }); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(697); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(26312); +/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(99702); +/* harmony import */ var _index_01f381cb_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(35364); +/* harmony import */ var dagre_d3_es_src_dagre_js_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(10646); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(75937); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(25582); + + + + + + +const conf = {}; +const setConf = function(cnf) { + const keys = Object.keys(cnf); + for (const key of keys) { + conf[key] = cnf[key]; + } +}; +const addVertices = async function(vert, g, svgId, root, doc, diagObj) { + const svg = root.select(`[id="${svgId}"]`); + const keys = Object.keys(vert); + for (const id of keys) { + const vertex = vert[id]; + let classStr = "default"; + if (vertex.classes.length > 0) { + classStr = vertex.classes.join(" "); + } + classStr = classStr + " flowchart-label"; + const styles = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.k)(vertex.styles); + let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id; + let vertexNode; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("vertex", vertex, vertex.labelType); + if (vertex.labelType === "markdown") { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("vertex", vertex, vertex.labelType); + } else { + if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.c)().flowchart.htmlLabels)) { + const node = { + label: vertexText + }; + vertexNode = (0,dagre_d3_es_src_dagre_js_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_3__/* .addHtmlLabel */ .H)(svg, node).node(); + vertexNode.parentNode.removeChild(vertexNode); + } else { + const svgLabel = doc.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", styles.labelStyle.replace("color:", "fill:")); + const rows = vertexText.split(_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.e.lineBreakRegex); + for (const row of rows) { + const tspan = doc.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "1"); + tspan.textContent = row; + svgLabel.appendChild(tspan); + } + vertexNode = svgLabel; + } + } + let radius = 0; + let _shape = ""; + switch (vertex.type) { + case "round": + radius = 5; + _shape = "rect"; + break; + case "square": + _shape = "rect"; + break; + case "diamond": + _shape = "question"; + break; + case "hexagon": + _shape = "hexagon"; + break; + case "odd": + _shape = "rect_left_inv_arrow"; + break; + case "lean_right": + _shape = "lean_right"; + break; + case "lean_left": + _shape = "lean_left"; + break; + case "trapezoid": + _shape = "trapezoid"; + break; + case "inv_trapezoid": + _shape = "inv_trapezoid"; + break; + case "odd_right": + _shape = "rect_left_inv_arrow"; + break; + case "circle": + _shape = "circle"; + break; + case "ellipse": + _shape = "ellipse"; + break; + case "stadium": + _shape = "stadium"; + break; + case "subroutine": + _shape = "subroutine"; + break; + case "cylinder": + _shape = "cylinder"; + break; + case "group": + _shape = "rect"; + break; + case "doublecircle": + _shape = "doublecircle"; + break; + default: + _shape = "rect"; + } + const labelText = await (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.r)(vertexText, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.c)()); + g.setNode(vertex.id, { + labelStyle: styles.labelStyle, + shape: _shape, + labelText, + labelType: vertex.labelType, + rx: radius, + ry: radius, + class: classStr, + style: styles.style, + id: vertex.id, + link: vertex.link, + linkTarget: vertex.linkTarget, + tooltip: diagObj.db.getTooltip(vertex.id) || "", + domId: diagObj.db.lookUpDomId(vertex.id), + haveCallback: vertex.haveCallback, + width: vertex.type === "group" ? 500 : void 0, + dir: vertex.dir, + type: vertex.type, + props: vertex.props, + padding: (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.c)().flowchart.padding + }); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("setNode", { + labelStyle: styles.labelStyle, + labelType: vertex.labelType, + shape: _shape, + labelText, + rx: radius, + ry: radius, + class: classStr, + style: styles.style, + id: vertex.id, + domId: diagObj.db.lookUpDomId(vertex.id), + width: vertex.type === "group" ? 500 : void 0, + type: vertex.type, + dir: vertex.dir, + props: vertex.props, + padding: (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.c)().flowchart.padding + }); + } +}; +const addEdges = async function(edges, g, diagObj) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("abc78 edges = ", edges); + let cnt = 0; + let linkIdCnt = {}; + let defaultStyle; + let defaultLabelStyle; + if (edges.defaultStyle !== void 0) { + const defaultStyles = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.k)(edges.defaultStyle); + defaultStyle = defaultStyles.style; + defaultLabelStyle = defaultStyles.labelStyle; + } + for (const edge of edges) { + cnt++; + const linkIdBase = "L-" + edge.start + "-" + edge.end; + if (linkIdCnt[linkIdBase] === void 0) { + linkIdCnt[linkIdBase] = 0; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } else { + linkIdCnt[linkIdBase]++; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } + let linkId = linkIdBase + "-" + linkIdCnt[linkIdBase]; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("abc78 new link id to be used is", linkIdBase, linkId, linkIdCnt[linkIdBase]); + const linkNameStart = "LS-" + edge.start; + const linkNameEnd = "LE-" + edge.end; + const edgeData = { style: "", labelStyle: "" }; + edgeData.minlen = edge.length || 1; + if (edge.type === "arrow_open") { + edgeData.arrowhead = "none"; + } else { + edgeData.arrowhead = "normal"; + } + edgeData.arrowTypeStart = "arrow_open"; + edgeData.arrowTypeEnd = "arrow_open"; + switch (edge.type) { + case "double_arrow_cross": + edgeData.arrowTypeStart = "arrow_cross"; + case "arrow_cross": + edgeData.arrowTypeEnd = "arrow_cross"; + break; + case "double_arrow_point": + edgeData.arrowTypeStart = "arrow_point"; + case "arrow_point": + edgeData.arrowTypeEnd = "arrow_point"; + break; + case "double_arrow_circle": + edgeData.arrowTypeStart = "arrow_circle"; + case "arrow_circle": + edgeData.arrowTypeEnd = "arrow_circle"; + break; + } + let style = ""; + let labelStyle = ""; + switch (edge.stroke) { + case "normal": + style = "fill:none;"; + if (defaultStyle !== void 0) { + style = defaultStyle; + } + if (defaultLabelStyle !== void 0) { + labelStyle = defaultLabelStyle; + } + edgeData.thickness = "normal"; + edgeData.pattern = "solid"; + break; + case "dotted": + edgeData.thickness = "normal"; + edgeData.pattern = "dotted"; + edgeData.style = "fill:none;stroke-width:2px;stroke-dasharray:3;"; + break; + case "thick": + edgeData.thickness = "thick"; + edgeData.pattern = "solid"; + edgeData.style = "stroke-width: 3.5px;fill:none;"; + break; + case "invisible": + edgeData.thickness = "invisible"; + edgeData.pattern = "solid"; + edgeData.style = "stroke-width: 0;fill:none;"; + break; + } + if (edge.style !== void 0) { + const styles = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.k)(edge.style); + style = styles.style; + labelStyle = styles.labelStyle; + } + edgeData.style = edgeData.style += style; + edgeData.labelStyle = edgeData.labelStyle += labelStyle; + if (edge.interpolate !== void 0) { + edgeData.curve = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.n)(edge.interpolate, d3__WEBPACK_IMPORTED_MODULE_1__/* .curveLinear */ .lUB); + } else if (edges.defaultInterpolate !== void 0) { + edgeData.curve = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.n)(edges.defaultInterpolate, d3__WEBPACK_IMPORTED_MODULE_1__/* .curveLinear */ .lUB); + } else { + edgeData.curve = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.n)(conf.curve, d3__WEBPACK_IMPORTED_MODULE_1__/* .curveLinear */ .lUB); + } + if (edge.text === void 0) { + if (edge.style !== void 0) { + edgeData.arrowheadStyle = "fill: #333"; + } + } else { + edgeData.arrowheadStyle = "fill: #333"; + edgeData.labelpos = "c"; + } + edgeData.labelType = edge.labelType; + edgeData.label = await (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.r)(edge.text.replace(_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.e.lineBreakRegex, "\n"), (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.c)()); + if (edge.style === void 0) { + edgeData.style = edgeData.style || "stroke: #333; stroke-width: 1.5px;fill:none;"; + } + edgeData.labelStyle = edgeData.labelStyle.replace("color:", "fill:"); + edgeData.id = linkId; + edgeData.classes = "flowchart-link " + linkNameStart + " " + linkNameEnd; + g.setEdge(edge.start, edge.end, edgeData, cnt); + } +}; +const getClasses = function(text, diagObj) { + return diagObj.db.getClasses(); +}; +const draw = async function(text, id, _version, diagObj) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Drawing flowchart"); + let dir = diagObj.db.getDirection(); + if (dir === void 0) { + dir = "TD"; + } + const { securityLevel, flowchart: conf2 } = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.c)(); + const nodeSpacing = conf2.nodeSpacing || 50; + const rankSpacing = conf2.rankSpacing || 50; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ltv)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ltv)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ltv)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__/* .Graph */ .T({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + nodesep: nodeSpacing, + ranksep: rankSpacing, + marginx: 0, + marginy: 0 + }).setDefaultEdgeLabel(function() { + return {}; + }); + let subG; + const subGraphs = diagObj.db.getSubGraphs(); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Subgraphs - ", subGraphs); + for (let i2 = subGraphs.length - 1; i2 >= 0; i2--) { + subG = subGraphs[i2]; + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Subgraph - ", subG); + diagObj.db.addVertex( + subG.id, + { text: subG.title, type: subG.labelType }, + "group", + void 0, + subG.classes, + subG.dir + ); + } + const vert = diagObj.db.getVertices(); + const edges = diagObj.db.getEdges(); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Edges", edges); + let i = 0; + for (i = subGraphs.length - 1; i >= 0; i--) { + subG = subGraphs[i]; + (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .selectAll */ .Ubm)("cluster").append("text"); + for (let j = 0; j < subG.nodes.length; j++) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Setting up subgraphs", subG.nodes[j], subG.id); + g.setParent(subG.nodes[j], subG.id); + } + } + await addVertices(vert, g, id, root, doc, diagObj); + await addEdges(edges, g); + const svg = root.select(`[id="${id}"]`); + const element = root.select("#" + id + " g"); + await (0,_index_01f381cb_js__WEBPACK_IMPORTED_MODULE_4__.r)(element, g, ["point", "circle", "cross"], "flowchart", id); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.u.insertTitle(svg, "flowchartTitleText", conf2.titleTopMargin, diagObj.db.getDiagramTitle()); + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.o)(g, svg, conf2.diagramPadding, conf2.useMaxWidth); + diagObj.db.indexNodes("subGraph" + i); + if (!conf2.htmlLabels) { + const labels = doc.querySelectorAll('[id="' + id + '"] .edgeLabel .label'); + for (const label of labels) { + const dim = label.getBBox(); + const rect = doc.createElementNS("http://www.w3.org/2000/svg", "rect"); + rect.setAttribute("rx", 0); + rect.setAttribute("ry", 0); + rect.setAttribute("width", dim.width); + rect.setAttribute("height", dim.height); + label.insertBefore(rect, label.firstChild); + } + } + const keys = Object.keys(vert); + keys.forEach(function(key) { + const vertex = vert[key]; + if (vertex.link) { + const node = (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ltv)("#" + id + ' [id="' + key + '"]'); + if (node) { + const link = doc.createElementNS("http://www.w3.org/2000/svg", "a"); + link.setAttributeNS("http://www.w3.org/2000/svg", "class", vertex.classes.join(" ")); + link.setAttributeNS("http://www.w3.org/2000/svg", "href", vertex.link); + link.setAttributeNS("http://www.w3.org/2000/svg", "rel", "noopener"); + if (securityLevel === "sandbox") { + link.setAttributeNS("http://www.w3.org/2000/svg", "target", "_top"); + } else if (vertex.linkTarget) { + link.setAttributeNS("http://www.w3.org/2000/svg", "target", vertex.linkTarget); + } + const linkNode = node.insert(function() { + return link; + }, ":first-child"); + const shape = node.select(".label-container"); + if (shape) { + linkNode.append(function() { + return shape.node(); + }); + } + const label = node.select(".label"); + if (label) { + linkNode.append(function() { + return label.node(); + }); + } + } + } + }); +}; +const flowRendererV2 = { + setConf, + addVertices, + addEdges, + getClasses, + draw +}; +const fade = (color, opacity) => { + const channel = khroma__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A; + const r = channel(color, "r"); + const g = channel(color, "g"); + const b = channel(color, "b"); + return khroma__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A(r, g, b, opacity); +}; +const getStyles = (options) => `.label { + font-family: ${options.fontFamily}; + color: ${options.nodeTextColor || options.textColor}; + } + .cluster-label text { + fill: ${options.titleColor}; + } + .cluster-label span,p { + color: ${options.titleColor}; + } + + .label text,span,p { + fill: ${options.nodeTextColor || options.textColor}; + color: ${options.nodeTextColor || options.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + stroke-width: 1px; + } + .flowchart-label text { + text-anchor: middle; + } + // .flowchart-label .text-outer-tspan { + // text-anchor: middle; + // } + // .flowchart-label .text-inner-tspan { + // text-anchor: start; + // } + + .node .katex path { + fill: #000; + stroke: #000; + stroke-width: 1px; + } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${options.arrowheadColor}; + } + + .edgePath .path { + stroke: ${options.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${options.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${options.edgeLabelBackground}; + rect { + opacity: 0.5; + background-color: ${options.edgeLabelBackground}; + fill: ${options.edgeLabelBackground}; + } + text-align: center; + } + + /* For html labels only */ + .labelBkg { + background-color: ${fade(options.edgeLabelBackground, 0.5)}; + // background-color: + } + + .cluster rect { + fill: ${options.clusterBkg}; + stroke: ${options.clusterBorder}; + stroke-width: 1px; + } + + .cluster text { + fill: ${options.titleColor}; + } + + .cluster span,p { + color: ${options.titleColor}; + } + /* .cluster div { + color: ${options.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${options.fontFamily}; + font-size: 12px; + background: ${options.tertiaryColor}; + border: 1px solid ${options.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; + } +`; +const flowStyles = getStyles; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/45c974ba.0b665fc2.js b/assets/js/45c974ba.0b665fc2.js new file mode 100644 index 0000000000..4d721b5725 --- /dev/null +++ b/assets/js/45c974ba.0b665fc2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2668],{14726:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var t=s(74848),o=s(28453);const r={slug:"v7-2-release",title:"v7.2",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:-5},l="eCalc v7.2",i={id:"changelog/v7-2",title:"v7.2",description:"Features",source:"@site/docs/changelog/v7-2.md",sourceDirName:"changelog",slug:"/changelog/v7-2-release",permalink:"/ecalc/docs/changelog/v7-2-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v7-2.md",tags:[{inline:!0,label:"release",permalink:"/ecalc/docs/tags/release"},{inline:!0,label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:-5,frontMatter:{slug:"v7-2-release",title:"v7.2",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:-5},sidebar:"changelog",previous:{title:"v7.3",permalink:"/ecalc/docs/changelog/v7-3-release"},next:{title:"v7.1",permalink:"/ecalc/docs/changelog/v7-1-release"}},a={},c=[{value:"Features",id:"features",level:2},{value:"Fixes",id:"fixes",level:2}];function d(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"ecalc-v72",children:"eCalc v7.2"}),"\n",(0,t.jsx)(n.h2,{id:"features",children:(0,t.jsx)(n.em,{children:"Features"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Add :code:",(0,t.jsx)(n.code,{children:"ecalc show yaml model.yaml"})," command."]}),"\n",(0,t.jsx)(n.p,{children:"The command will only read the yaml file, include the files that should be included, then show the resulting yaml.\nThere is no need to run the model beforehand."}),"\n",(0,t.jsxs)(n.p,{children:["This should help figure out problems with :code:",(0,t.jsx)(n.code,{children:"!include"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["BREAKING CHANGE!: ",(0,t.jsx)(n.a,{href:"../about/references/CATEGORY",children:"CATEGORY"})," is MANDATORY for Generator Sets. To be able to handle this, the ",(0,t.jsx)(n.code,{children:"MISCELLANEOUS"})," category\nhas been introduced for Generator sets for users to be able to set this to generator sets that do not apply to other categories,\nand to e.g. except for LTP output."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"GENERATORSETS:\n - NAME: genset\n CATEGORY: TURBINE-GENERATOR\n ELECTRICITY2FUEL: A_genset\n ...\n ...\n - NAME: power_from_shore\n CATEGORY: POWER-FROM-SHORE\n ELECTRICITY2FUEL: onshore_power\n ...\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"EXPERIMENTAL: Add show results command to cli."}),"\n",(0,t.jsxs)(n.p,{children:["When running ecalc, either by ",(0,t.jsx)(n.code,{children:"ecalc run model.yaml"})," or ",(0,t.jsx)(n.code,{children:"ecalc model.yaml"})," we will store the results in your\nhome-directory. You don't have to specify any specific arguments for this to happen."]}),"\n",(0,t.jsxs)(n.p,{children:["A new command ",(0,t.jsx)(n.code,{children:"ecalc show results"})," is introduced. This command can be used to display all the results, or you can use\nthe argument ",(0,t.jsx)(n.code,{children:"--name"})," to only show results for a specific component."]}),"\n",(0,t.jsx)(n.p,{children:"What is a component? Currently the supported component names are the name of the model (filename without the yaml ending),\ninstallation names, generator set names, electricity consumer names and fuel consumer names."}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:'ecalc show results --name "component name"'})," will give a json file with only the specified component results."]}),"\n",(0,t.jsxs)(n.p,{children:["The output format can be changed to csv by specifying ",(0,t.jsx)(n.code,{children:"--output-format csv"}),". This will try to give all the data represented\nin the json output, but some of it will be filtered as it does not fit the tabular csv format."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Examples"})}),"\n",(0,t.jsxs)(n.p,{children:["Show all results in json format: ",(0,t.jsx)(n.code,{children:"ecalc show results"})," or ",(0,t.jsx)(n.code,{children:"ecalc show results --output-format json"}),"\nShow model results (totals) in json format ",(0,t.jsx)(n.code,{children:"ecalc show results --name model"})," (if using the model.yaml file as shown above)\nShow model results (totals) in csv format ",(0,t.jsx)(n.code,{children:"ecalc show results --name model --output-format csv"})]}),"\n",(0,t.jsxs)(n.p,{children:["Deprecation warning: Running ecalc without the 'run' argument is deprecated. Use 'ecalc run arg1 ... argN' instead.\nAs this is an experimental feature ",(0,t.jsx)(n.code,{children:"ecalc run"})," might see breaking changes in future releases, you are free to ignore\nthe deprecation warning for a while if you don't want to be exposed to those changes. ",(0,t.jsx)(n.code,{children:"ecalc show"})," will still work as\nexpected."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"fixes",children:(0,t.jsx)(n.em,{children:"Fixes"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Deprecate json_v2 output, json_v3 should be used instead. json_v2 (and json_v1) will be removed in the next release."}),"\n",(0,t.jsx)(n.li,{children:"Allow Single and Variable Speed Compressor Trains to run regardless of non-convergence in numeric root finding algorithms. This is a rate situation and caused by numeric instability. If this happens there will be logged an error in the log together with relevant data. Use result with caution."}),"\n",(0,t.jsx)(n.li,{children:"Use Brent's method instead of secant method to find roots used in numeric iterations for compressor models. Faster and more robust compared to old secant method."}),"\n",(0,t.jsx)(n.li,{children:"Correct prioritization of compressor system when the compressor system is more complex than only splitting rates on more and more duplicate compressor trains."}),"\n",(0,t.jsxs)(n.li,{children:["Added warning both in documentation and code about using ",(0,t.jsx)(n.code,{children:"Generic compressor chart with design point calculated from input data"})," in a ",(0,t.jsx)(n.code,{children:"COMPRESSOR_SYSTEM energy usage model"})]}),"\n",(0,t.jsx)(n.li,{children:"Improved units and results mapping. The consumed energy is now reported under energy_usage, and power_rate is included if relevant regardless of energy_usage."}),"\n",(0,t.jsx)(n.li,{children:"Suction pressures were not correctly set, and defaulting to 0, in some cases when a list of pressures were given."}),"\n",(0,t.jsx)(n.li,{children:"In cases when only one timestep was evaluated in a consumer system, and the first prioritized operational setting was outside capacity, it was nevertheless chosen."}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>l,x:()=>i});var t=s(96540);const o={},r=t.createContext(o);function l(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/465c5577.777fdbe2.js b/assets/js/465c5577.777fdbe2.js new file mode 100644 index 0000000000..4124a97041 --- /dev/null +++ b/assets/js/465c5577.777fdbe2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[165],{39551:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>r,metadata:()=>o,toc:()=>l});var i=t(74848),s=t(28453);const r={},c="INTERPOLATION_TYPE",o={id:"about/references/INTERPOLATION_TYPE",title:"INTERPOLATION_TYPE",description:"TIMESERIES /",source:"@site/docs/about/references/INTERPOLATION_TYPE.md",sourceDirName:"about/references",slug:"/about/references/INTERPOLATION_TYPE",permalink:"/ecalc/docs/about/references/INTERPOLATION_TYPE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/INTERPOLATION_TYPE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"INSTALLATIONS",permalink:"/ecalc/docs/about/references/INSTALLATIONS"},next:{title:"INTERSTAGE_CONTROL_PRESSURE",permalink:"/ecalc/docs/about/references/INTERSTAGE_CONTROL_PRESSURE"}},a={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Requirements",id:"requirements",level:3},{value:"Example",id:"example",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"interpolation_type",children:"INTERPOLATION_TYPE"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"/ecalc/docs/about/references/TIME_SERIES",children:"TIME_SERIES"})," /\n",(0,i.jsx)(n.a,{href:"/ecalc/docs/about/references/INTERPOLATION_TYPE",children:"INTERPOLATION_TYPE"})]}),"\n",(0,i.jsxs)(n.p,{children:["New in ",(0,i.jsx)(n.strong,{children:"v8.1"}),", previously known as ",(0,i.jsx)(n.code,{children:"RATE_INTERPOLATION_TYPE"})," that was renamed to ",(0,i.jsx)(n.code,{children:"INTERPOLATION_TYPE"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,i.jsxs)(n.admonition,{title:"Caution",type:"caution",children:[(0,i.jsxs)(n.p,{children:["Only valid for CSV data of source ",(0,i.jsx)(n.code,{children:"MISCELLANEOUS"}),". For ",(0,i.jsx)(n.code,{children:"TIME_SERIES"})," of ",(0,i.jsx)(n.a,{href:"/ecalc/docs/about/references/TYPE",children:"TYPE"}),"\n",(0,i.jsx)(n.code,{children:"DEFAULT"})," the keyword is not allowed as input. The following applies:"]}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"MISCELLANEOUS: Interpolation type is mandatory."}),"\n",(0,i.jsxs)(n.li,{children:["DEFAULT: Interpolation type not allowed. Default ",(0,i.jsx)(n.code,{children:"RIGHT"})," is used."]}),"\n"]})]}),"\n",(0,i.jsx)(n.admonition,{title:"Caution",type:"caution",children:(0,i.jsxs)(n.p,{children:["Different data types may require different types of interpolation. While reservoir rates are\ntypically interpolated ",(0,i.jsx)(n.code,{children:"RIGHT"})," or ",(0,i.jsx)(n.code,{children:"LEFT"}),", other data such as pressure is often interpolated\nlinearly (",(0,i.jsx)(n.code,{children:"LINEAR"}),"). Data that should be interpolated differently must be specified in\ndifferent input files, as it is not possible to have multiple interpolation types for vectors\nwithin the same file."]})}),"\n",(0,i.jsxs)(n.p,{children:["Rates are given at defined time steps in the data source but are in essence valid for a time\ninterval. The ",(0,i.jsx)(n.a,{href:"/ecalc/docs/about/references/INTERPOLATION_TYPE",children:"INTERPOLATION_TYPE"}),"\nwill determine how rates are interpolated between the given time steps."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"LEFT"}),": The rate given at the current time step is defining the rate in the time interval between the current and\nprevious time step. This is in data science also known as backwards filling of missing values."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"RIGHT"}),": The rate given at the current time step is defining the rate in the time interval between the current and\nnext time step. This is in data science also known as forward filling of missing values."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"LINEAR"}),": The rate will be linearly interpolated between the time steps."]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["The plot below shows how the different choices for ",(0,i.jsx)(n.a,{href:"/ecalc/docs/about/references/INTERPOLATION_TYPE",children:"INTERPOLATION_TYPE"})," works in practice."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:t(66499).A+"",width:"512",height:"384"})}),"\n",(0,i.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"INTERPOLATION_TYPE: \n"})}),"\n",(0,i.jsx)(n.h3,{id:"requirements",children:"Requirements"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"/ecalc/docs/about/references/INTERPOLATION_TYPE",children:"INTERPOLATION_TYPE"})," has to be specified if\n",(0,i.jsx)(n.a,{href:"/ecalc/docs/about/references/TYPE",children:"TYPE"})," is set to ",(0,i.jsx)(n.code,{children:"MISCELLANEOUS"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"/ecalc/docs/about/references/INTERPOLATION_TYPE",children:"INTERPOLATION_TYPE"})," can not be specified if ",(0,i.jsx)(n.a,{href:"/ecalc/docs/about/references/TYPE",children:"TYPE"})," is set to ",(0,i.jsx)(n.code,{children:"DEFAULT"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,i.jsxs)(n.p,{children:["See the ",(0,i.jsx)(n.a,{href:"/ecalc/docs/about/references/TIME_SERIES",children:"TIME_SERIES"})," ",(0,i.jsx)(n.code,{children:"time_series_format"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},66499:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/interpolation_plot-d4eee4126032e046bf374ef66ceb9946.png"},28453:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>o});var i=t(96540);const s={},r=i.createContext(s);function c(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/46613219.210a2a47.js b/assets/js/46613219.210a2a47.js new file mode 100644 index 0000000000..c0e43c4d08 --- /dev/null +++ b/assets/js/46613219.210a2a47.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5387],{58257:(e,s,a)=>{a.r(s),a.d(s,{assets:()=>t,contentTitle:()=>c,default:()=>h,frontMatter:()=>l,metadata:()=>i,toc:()=>m});var n=a(74848),r=a(28453);const l={},c="CONSUMPTION_RATE_TYPE",i={id:"about/references/CONSUMPTION_RATE_TYPE",title:"CONSUMPTION_RATE_TYPE",description:"INSTALLATIONS /",source:"@site/docs/about/references/CONSUMPTION_RATE_TYPE.md",sourceDirName:"about/references",slug:"/about/references/CONSUMPTION_RATE_TYPE",permalink:"/ecalc/docs/about/references/CONSUMPTION_RATE_TYPE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/CONSUMPTION_RATE_TYPE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CONSUMERS",permalink:"/ecalc/docs/about/references/CONSUMERS"},next:{title:"CONTROL_MARGIN",permalink:"/ecalc/docs/about/references/CONTROL_MARGIN"}},t={},m=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function d(e){const s={a:"a",admonition:"admonition",annotation:"annotation",code:"code",h1:"h1",h2:"h2",math:"math",mfrac:"mfrac",mi:"mi",mo:"mo",mrow:"mrow",mtext:"mtext",p:"p",pre:"pre",semantics:"semantics",span:"span",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"consumption_rate_type",children:"CONSUMPTION_RATE_TYPE"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/CONSUMPTION_RATE_TYPE",children:"CONSUMPTION_RATE_TYPE"})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Required"}),(0,n.jsx)(s.th,{children:"Child of"}),(0,n.jsx)(s.th,{children:"Children/Options"})]})}),(0,n.jsx)(s.tbody,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"No"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"ENERGY_USAGE_MODEL"})}),(0,n.jsx)(s.td,{children:"None"})]})})]}),"\n",(0,n.jsx)(s.h2,{id:"description",children:"Description"}),"\n",(0,n.jsx)(s.admonition,{type:"important",children:(0,n.jsxs)(s.p,{children:["You must have good control of the input rates - which are stream day rates and which are calendar day rates - and\nspecify ",(0,n.jsx)(s.code,{children:"CALENDAR_DAY"})," as input if necessary."]})}),"\n",(0,n.jsxs)(s.p,{children:["When ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/REGULARITY",children:"REGULARITY"})," is used,the consumption rate type may be specified for\n",(0,n.jsx)(s.code,{children:"DIRECT ENERGY USAGE MODEL"}),"(",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/LOAD",children:"LOAD"})," or ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/FUELRATE",children:"FUELRATE"}),")\nby setting ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/CONSUMPTION_RATE_TYPE",children:"CONSUMPTION_RATE_TYPE"})," to either ",(0,n.jsx)(s.code,{children:"CALENDAR_DAY"})," or\n",(0,n.jsx)(s.code,{children:"STREAM_DAY"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["The default behaviour, is that these will be interpreted as ",(0,n.jsx)(s.code,{children:"STREAM_DAY"})," if not set explicitly. This will result in\nfuel rates being multiplied by regularity to obtain (average) calendar day fuel rates, while the loads will be kept\nstream day when passed to the generator set calculation."]}),"\n",(0,n.jsxs)(s.admonition,{type:"note",children:[(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"CALENDAR_DAY"}),": The average rate over a period after adjusting for operating conditions that keeps the\naverage throughput below the maximum achievable throughput for a single day, known as stream day."]}),(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"STREAM_DAY"}),": The actual rate at a given moment. When multiplied with a ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/REGULARITY",children:"REGULARITY"}),"\nfactor you get the calendar day rate which needs to be used when evaluating the economics of a process unit."]}),(0,n.jsx)(s.span,{className:"katex-display",children:(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"s"}),(0,n.jsx)(s.mi,{children:"t"}),(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mi,{children:"e"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"m"}),(0,n.jsx)(s.mtext,{children:"\xa0"}),(0,n.jsx)(s.mi,{children:"d"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"y"}),(0,n.jsx)(s.mtext,{children:"\xa0"}),(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"t"}),(0,n.jsx)(s.mi,{children:"e"}),(0,n.jsx)(s.mo,{children:"="}),(0,n.jsxs)(s.mfrac,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"c"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"l"}),(0,n.jsx)(s.mi,{children:"e"}),(0,n.jsx)(s.mi,{children:"n"}),(0,n.jsx)(s.mi,{children:"d"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mtext,{children:"\xa0"}),(0,n.jsx)(s.mi,{children:"d"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"y"}),(0,n.jsx)(s.mtext,{children:"\xa0"}),(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"t"}),(0,n.jsx)(s.mi,{children:"e"})]}),(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mi,{children:"e"}),(0,n.jsx)(s.mi,{children:"g"}),(0,n.jsx)(s.mi,{children:"u"}),(0,n.jsx)(s.mi,{children:"l"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mi,{children:"i"}),(0,n.jsx)(s.mi,{children:"t"}),(0,n.jsx)(s.mi,{children:"y"})]})]})]}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"stream\\ day\\ rate = \\frac{calendar\\ day\\ rate}{regularity}"})]})})}),(0,n.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"s"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"re"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"am"}),(0,n.jsx)(s.span,{className:"mspace",children:"\xa0"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"}),(0,n.jsx)(s.span,{className:"mspace",children:"\xa0"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(s.span,{className:"mrel",children:"="}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"2.2519em",verticalAlign:"-0.8804em"}}),(0,n.jsxs)(s.span,{className:"mord",children:[(0,n.jsx)(s.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(s.span,{className:"mfrac",children:(0,n.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(s.span,{className:"vlist-r",children:[(0,n.jsxs)(s.span,{className:"vlist",style:{height:"1.3714em"},children:[(0,n.jsxs)(s.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(s.span,{className:"mord",children:[(0,n.jsx)(s.span,{className:"mord mathnormal",children:"re"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"gu"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"})]})]}),(0,n.jsxs)(s.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(s.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(s.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(s.span,{className:"mord",children:[(0,n.jsx)(s.span,{className:"mord mathnormal",children:"c"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(s.span,{className:"mspace",children:"\xa0"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"}),(0,n.jsx)(s.span,{className:"mspace",children:"\xa0"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"e"})]})]})]}),(0,n.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(s.span,{className:"vlist-r",children:(0,n.jsx)(s.span,{className:"vlist",style:{height:"0.8804em"},children:(0,n.jsx)(s.span,{})})})]})}),(0,n.jsx)(s.span,{className:"mclose nulldelimiter"})]})]})]})]})})]}),"\n",(0,n.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"CONSUMPTION_RATE_TYPE: \n"})}),"\n",(0,n.jsxs)(s.p,{children:["Where ",(0,n.jsx)(s.code,{children:""})," can either be ",(0,n.jsx)(s.code,{children:"CALENDAR_DAY"})," or ",(0,n.jsx)(s.code,{children:"STREAM_DAY"}),"."]}),"\n",(0,n.jsx)(s.h2,{id:"example",children:"Example"}),"\n",(0,n.jsx)(s.p,{children:"Specifying consumption rate type for fixed/direct consumers:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"LOAD: 10\nCONSUMPTION_RATE_TYPE: CALENDAR_DAY\n...\nFUELRATE: 10000\nCONSUMPTION_RATE_TYPE: STREAM_DAY\n"})}),"\n",(0,n.jsxs)(s.p,{children:["Given ",(0,n.jsx)(s.code,{children:"CALENDAR_DAY"})," input the rate will be converted to ",(0,n.jsx)(s.code,{children:"STREAM_DAY"})," when evaluating, and any fuel rate in output\nwill be converted back again to ",(0,n.jsx)(s.code,{children:"CALENDAR_DAY"})," rate equivalent in the results."]}),"\n",(0,n.jsxs)(s.p,{children:["Given ",(0,n.jsx)(s.code,{children:"STREAM_DAY"})," input, and a ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/REGULARITY",children:"REGULARITY"})," factor of 0.5 (50%), the\ninterpretation is that the process unit will run at full capacity half of the time. The resulting fuel rate reported\nfor a fuel consumer will be halved compared to 1 (100%) regularity."]})]})}function h(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},28453:(e,s,a)=>{a.d(s,{R:()=>c,x:()=>i});var n=a(96540);const r={},l=n.createContext(r);function c(e){const s=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),n.createElement(l.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4741.8ba96072.js b/assets/js/4741.8ba96072.js new file mode 100644 index 0000000000..b7bfc5a199 --- /dev/null +++ b/assets/js/4741.8ba96072.js @@ -0,0 +1 @@ +(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4741],{62954:(n,t,e)=>{n.exports=function(){function n(t,e,i){function r(a,o){if(!e[a]){if(!t[a]){if(c)return c(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var s=e[a]={exports:{}};t[a][0].call(s.exports,(function(n){return r(t[a][1][n]||n)}),s,s.exports,n,t,e,i)}return e[a].exports}for(var c=void 0,a=0;a0&&void 0!==arguments[0]?arguments[0]:{},i=e.defaultLayoutOptions,c=void 0===i?{}:i,o=e.algorithms,u=void 0===o?["layered","stress","mrtree","radial","force","disco","sporeOverlap","sporeCompaction","rectpacking"]:o,s=e.workerFactory,h=e.workerUrl;if(r(this,n),this.defaultLayoutOptions=c,this.initialized=!1,void 0===h&&void 0===s)throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'.");var f=s;void 0!==h&&void 0===s&&(f=function(n){return new Worker(n)});var l=f(h);if("function"!=typeof l.postMessage)throw new TypeError("Created worker does not provide the required 'postMessage' function.");this.worker=new a(l),this.worker.postMessage({cmd:"register",algorithms:u}).then((function(n){return t.initialized=!0})).catch(console.err)}return i(n,[{key:"layout",value:function(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},e=t.layoutOptions,i=void 0===e?this.defaultLayoutOptions:e,r=t.logging,c=void 0!==r&&r,a=t.measureExecutionTime,o=void 0!==a&&a;return n?this.worker.postMessage({cmd:"layout",graph:n,layoutOptions:i,options:{logging:c,measureExecutionTime:o}}):Promise.reject(new Error("Missing mandatory parameter 'graph'."))}},{key:"knownLayoutAlgorithms",value:function(){return this.worker.postMessage({cmd:"algorithms"})}},{key:"knownLayoutOptions",value:function(){return this.worker.postMessage({cmd:"options"})}},{key:"knownLayoutCategories",value:function(){return this.worker.postMessage({cmd:"categories"})}},{key:"terminateWorker",value:function(){this.worker&&this.worker.terminate()}}]),n}();e.default=c;var a=function(){function n(t){var e=this;if(r(this,n),void 0===t)throw new Error("Missing mandatory parameter 'worker'.");this.resolvers={},this.worker=t,this.worker.onmessage=function(n){setTimeout((function(){e.receive(e,n)}),0)}}return i(n,[{key:"postMessage",value:function(n){var t=this.id||0;this.id=t+1,n.id=t;var e=this;return new Promise((function(i,r){e.resolvers[t]=function(n,t){n?(e.convertGwtStyleError(n),r(n)):i(t)},e.worker.postMessage(n)}))}},{key:"receive",value:function(n,t){var e=t.data,i=n.resolvers[e.id];i&&(delete n.resolvers[e.id],e.error?i(e.error):i(null,e.data))}},{key:"terminate",value:function(){this.worker&&this.worker.terminate()}},{key:"convertGwtStyleError",value:function(n){if(n){var t=n.__java$exception;t&&(t.cause&&t.cause.backingJsObject&&(n.cause=t.cause.backingJsObject,this.convertGwtStyleError(n.cause)),delete n.__java$exception)}}}]),n}()},{}],2:[function(n,t,i){(function(n){(function(){"use strict";var e;function r(){}function c(){}function a(){}function o(){}function u(){}function s(){}function h(){}function f(){}function l(){}function b(){}function w(){}function d(){}function g(){}function p(){}function m(){}function v(){}function k(){}function y(){}function M(){}function T(){}function j(){}function E(){}function S(){}function P(){}function C(){}function I(){}function O(){}function A(){}function L(){}function N(){}function $(){}function D(){}function x(){}function R(){}function K(){}function F(){}function _(){}function B(){}function H(){}function U(){}function G(){}function q(){}function X(){}function z(){}function V(){}function W(){}function Q(){}function J(){}function Y(){}function Z(){}function nn(){}function tn(){}function en(){}function rn(){}function cn(){}function an(){}function on(){}function un(){}function sn(){}function hn(){}function fn(){}function ln(){}function bn(){}function wn(){}function dn(){}function gn(){}function pn(){}function mn(){}function vn(){}function kn(){}function yn(){}function Mn(){}function Tn(){}function jn(){}function En(){}function Sn(){}function Pn(){}function Cn(){}function In(){}function On(){}function An(){}function Ln(){}function Nn(){}function $n(){}function Dn(){}function xn(){}function Rn(){}function Kn(){}function Fn(){}function _n(){}function Bn(){}function Hn(){}function Un(){}function Gn(){}function qn(){}function Xn(){}function zn(){}function Vn(){}function Wn(){}function Qn(){}function Jn(){}function Yn(){}function Zn(){}function nt(){}function tt(){}function et(){}function it(){}function rt(){}function ct(){}function at(){}function ot(){}function ut(){}function st(){}function ht(){}function ft(){}function lt(){}function bt(){}function wt(){}function dt(){}function gt(){}function pt(){}function mt(){}function vt(){}function kt(){}function yt(){}function Mt(){}function Tt(){}function jt(){}function Et(){}function St(){}function Pt(){}function Ct(){}function It(){}function Ot(){}function At(){}function Lt(){}function Nt(){}function $t(){}function Dt(){}function xt(){}function Rt(){}function Kt(){}function Ft(){}function _t(){}function Bt(){}function Ht(){}function Ut(){}function Gt(){}function qt(){}function Xt(){}function zt(){}function Vt(){}function Wt(){}function Qt(){}function Jt(){}function Yt(){}function Zt(){}function ne(){}function te(){}function ee(){}function ie(){}function re(){}function ce(){}function ae(){}function oe(){}function ue(){}function se(){}function he(){}function fe(){}function le(){}function be(){}function we(){}function de(){}function ge(){}function pe(){}function me(){}function ve(){}function ke(){}function ye(){}function Me(){}function Te(){}function je(){}function Ee(){}function Se(){}function Pe(){}function Ce(){}function Ie(){}function Oe(){}function Ae(){}function Le(){}function Ne(){}function $e(){}function De(){}function xe(){}function Re(){}function Ke(){}function Fe(){}function _e(){}function Be(){}function He(){}function Ue(){}function Ge(){}function qe(){}function Xe(){}function ze(){}function Ve(){}function We(){}function Qe(){}function Je(){}function Ye(){}function Ze(){}function ni(){}function ti(){}function ei(){}function ii(){}function ri(){}function ci(){}function ai(){}function oi(){}function ui(){}function si(){}function hi(){}function fi(){}function li(){}function bi(){}function wi(){}function di(){}function gi(){}function pi(){}function mi(){}function vi(){}function ki(){}function yi(){}function Mi(){}function Ti(){}function ji(){}function Ei(){}function Si(){}function Pi(){}function Ci(){}function Ii(){}function Oi(){}function Ai(){}function Li(){}function Ni(){}function $i(){}function Di(){}function xi(){}function Ri(){}function Ki(){}function Fi(){}function _i(){}function Bi(){}function Hi(){}function Ui(){}function Gi(){}function qi(){}function Xi(){}function zi(){}function Vi(){}function Wi(){}function Qi(){}function Ji(){}function Yi(){}function Zi(){}function nr(){}function tr(){}function er(){}function ir(){}function rr(){}function cr(){}function ar(){}function or(){}function ur(){}function sr(){}function hr(){}function fr(){}function lr(){}function br(){}function wr(){}function dr(){}function gr(){}function pr(){}function mr(){}function vr(){}function kr(){}function yr(){}function Mr(){}function Tr(){}function jr(){}function Er(){}function Sr(){}function Pr(){}function Cr(){}function Ir(){}function Or(){}function Ar(){}function Lr(){}function Nr(){}function $r(){}function Dr(){}function xr(){}function Rr(){}function Kr(){}function Fr(){}function _r(){}function Br(){}function Hr(){}function Ur(){}function Gr(){}function qr(){}function Xr(){}function zr(){}function Vr(){}function Wr(){}function Qr(){}function Jr(){}function Yr(){}function Zr(){}function nc(){}function tc(){}function ec(){}function ic(){}function rc(){}function cc(){}function ac(){}function oc(){}function uc(){}function sc(){}function hc(){}function fc(){}function lc(){}function bc(){}function wc(){}function dc(){}function gc(){}function pc(){}function mc(){}function vc(){}function kc(){}function yc(){}function Mc(){}function Tc(){}function jc(){}function Ec(){}function Sc(){}function Pc(){}function Cc(){}function Ic(){}function Oc(){}function Ac(){}function Lc(){}function Nc(){}function $c(){}function Dc(){}function xc(){}function Rc(){}function Kc(){}function Fc(){}function _c(){}function Bc(){}function Hc(){}function Uc(){}function Gc(){}function qc(){}function Xc(){}function zc(){}function Vc(){}function Wc(){}function Qc(){}function Jc(){}function Yc(){}function Zc(){}function na(){}function ta(){}function ea(){}function ia(){}function ra(){}function ca(){}function aa(){}function oa(){}function ua(){}function sa(){}function ha(){}function fa(){}function la(){}function ba(){}function wa(){}function da(){}function ga(){}function pa(){}function ma(){}function va(){}function ka(){}function ya(){}function Ma(){}function Ta(){}function ja(){}function Ea(){}function Sa(){}function Pa(){}function Ca(){}function Ia(){}function Oa(){}function Aa(){}function La(){}function Na(){}function $a(){}function Da(){}function xa(){}function Ra(){}function Ka(){}function Fa(){}function _a(){}function Ba(){}function Ha(){}function Ua(){}function Ga(){}function qa(){}function Xa(){}function za(){}function Va(){}function Wa(){}function Qa(){}function Ja(){}function Ya(){}function Za(){}function no(){}function to(){}function eo(){}function io(){}function ro(){}function co(){}function ao(){}function oo(){}function uo(){}function so(){}function ho(){}function fo(){}function lo(){}function bo(){}function wo(){}function go(){}function po(){}function mo(){}function vo(){}function ko(){}function yo(){}function Mo(){}function To(){}function jo(){}function Eo(){}function So(){}function Po(){}function Co(){}function Io(){}function Oo(){}function Ao(){}function Lo(){}function No(){}function $o(){}function Do(){}function xo(){}function Ro(){}function Ko(){}function Fo(){}function _o(){}function Bo(){}function Ho(){}function Uo(){}function Go(){}function qo(){}function Xo(){}function zo(){}function Vo(){}function Wo(){}function Qo(){}function Jo(){}function Yo(){}function Zo(){}function nu(){}function tu(){}function eu(){}function iu(){}function ru(){}function cu(){}function au(){}function ou(){}function uu(){}function su(){}function hu(){}function fu(){}function lu(){}function bu(){}function wu(){}function du(){}function gu(){}function pu(){}function mu(){}function vu(){}function ku(){}function yu(){}function Mu(){}function Tu(){}function ju(){}function Eu(){}function Su(){}function Pu(){}function Cu(){}function Iu(){}function Ou(){}function Au(){}function Lu(){}function Nu(){}function $u(){}function Du(){}function xu(){}function Ru(){}function Ku(){}function Fu(){}function _u(){}function Bu(){}function Hu(){}function Uu(){}function Gu(){}function qu(){}function Xu(){}function zu(){}function Vu(){}function Wu(){}function Qu(){}function Ju(){}function Yu(){}function Zu(){}function ns(){}function ts(){}function es(){}function is(){}function rs(){}function cs(){}function as(){}function os(){}function us(){}function ss(){}function hs(){}function fs(){}function ls(){}function bs(){}function ws(){}function ds(){}function gs(){}function ps(){}function ms(){}function vs(){}function ks(){}function ys(){}function Ms(){}function Ts(){}function js(){}function Es(){}function Ss(){}function Ps(){}function Cs(){}function Is(){}function Os(){}function As(){}function Ls(){}function Ns(){}function $s(){}function Ds(){}function xs(){}function Rs(){}function Ks(){}function Fs(){}function _s(){}function Bs(){}function Hs(){}function Us(){}function Gs(){}function qs(){}function Xs(){}function zs(){}function Vs(){}function Ws(){}function Qs(){}function Js(){}function Ys(){}function Zs(){}function nh(){}function th(){}function eh(){}function ih(){}function rh(){}function ch(){}function ah(){}function oh(){}function uh(){}function sh(){}function hh(){}function fh(){}function lh(){}function bh(){}function wh(){}function dh(){}function gh(){}function ph(){}function mh(){}function vh(){}function kh(){}function yh(){}function Mh(){}function Th(){}function jh(){}function Eh(){}function Sh(){}function Ph(){}function Ch(){}function Ih(){}function Oh(){}function Ah(){}function Lh(){}function Nh(){}function $h(){}function Dh(){}function xh(){}function Rh(){}function Kh(){}function Fh(){}function _h(){}function Bh(){}function Hh(){}function Uh(){}function Gh(){}function qh(){}function Xh(){}function zh(){}function Vh(){}function Wh(){}function Qh(){}function Jh(){}function Yh(){}function Zh(){}function nf(){}function tf(){}function ef(){}function rf(){}function cf(){}function af(){}function of(){}function uf(){}function sf(){}function hf(){}function ff(){}function lf(){}function bf(){}function wf(){}function df(){}function gf(){}function pf(){}function mf(){}function vf(){}function kf(){}function yf(){}function Mf(){}function Tf(){}function jf(){}function Ef(){}function Sf(){}function Pf(){}function Cf(){}function If(){}function Of(){}function Af(){}function Lf(){}function Nf(){}function $f(){}function Df(){}function xf(){}function Rf(n){}function Kf(n){}function Ff(){gy()}function _f(){VS()}function Bf(){MEn()}function Hf(){pbn()}function Uf(){ryn()}function Gf(){oOn()}function qf(){rGn()}function Xf(){yjn()}function zf(){Bjn()}function Vf(){WS()}function Wf(){HB()}function Qf(){QS()}function Jf(){Pun()}function Yf(){F7()}function Zf(){Ean()}function nl(){Y0()}function tl(){Pan()}function el(){Unn()}function il(){Q0()}function rl(){Cln()}function cl(){Ian()}function al(){Can()}function ol(){c6()}function ul(){Oan()}function sl(){jIn()}function hl(){YS()}function fl(){VYn()}function ll(){jYn()}function bl(){Aan()}function wl(){Iun()}function dl(){Z0()}function gl(){Pjn()}function pl(){t2()}function ml(){dUn()}function vl(){eDn()}function kl(){tcn()}function yl(){Kdn()}function Ml(){QGn()}function Tl(){e3()}function jl(){ncn()}function El(){EHn()}function Sl(){jOn()}function Pl(){IHn()}function Cl(){S_n()}function Il(){fIn()}function Ol(){uBn()}function Al(){jMn()}function Ll(){oB()}function Nl(){Stn()}function $l(){lIn()}function Dl(){XYn()}function xl(){Iln()}function Rl(){Wmn()}function Kl(){Oun()}function Fl(){tXn()}function _l(){vGn()}function Bl(n){tJ(n)}function Hl(n){this.a=n}function Ul(n){this.a=n}function Gl(n){this.a=n}function ql(n){this.a=n}function Xl(n){this.a=n}function zl(n){this.a=n}function Vl(n){this.a=n}function Wl(n){this.a=n}function Ql(n){this.a=n}function Jl(n){this.a=n}function Yl(n){this.a=n}function Zl(n){this.a=n}function nb(n){this.a=n}function tb(n){this.a=n}function eb(n){this.a=n}function ib(n){this.a=n}function rb(n){this.a=n}function cb(n){this.a=n}function ab(n){this.a=n}function ob(n){this.a=n}function ub(n){this.a=n}function sb(n){this.a=n}function hb(n){this.b=n}function fb(n){this.c=n}function lb(n){this.a=n}function bb(n){this.a=n}function wb(n){this.a=n}function db(n){this.a=n}function gb(n){this.a=n}function pb(n){this.a=n}function mb(n){this.a=n}function vb(n){this.a=n}function kb(n){this.a=n}function yb(n){this.a=n}function Mb(n){this.a=n}function Tb(n){this.a=n}function jb(n){this.a=n}function Eb(n){this.a=n}function Sb(n){this.a=n}function Pb(n){this.a=n}function Cb(n){this.a=n}function Ib(){this.a=[]}function Ob(n,t){n.a=t}function Ab(n,t){n.a=t}function Lb(n,t){n.b=t}function Nb(n,t){n.b=t}function $b(n,t){n.b=t}function Db(n,t){n.j=t}function xb(n,t){n.g=t}function Rb(n,t){n.i=t}function Kb(n,t){n.c=t}function Fb(n,t){n.c=t}function _b(n,t){n.d=t}function Bb(n,t){n.d=t}function Hb(n,t){n.k=t}function Ub(n,t){n.c=t}function Gb(n,t){n.c=t}function qb(n,t){n.a=t}function Xb(n,t){n.a=t}function zb(n,t){n.f=t}function Vb(n,t){n.a=t}function Wb(n,t){n.b=t}function Qb(n,t){n.d=t}function Jb(n,t){n.i=t}function Yb(n,t){n.o=t}function Zb(n,t){n.r=t}function nw(n,t){n.a=t}function tw(n,t){n.b=t}function ew(n,t){n.e=t}function iw(n,t){n.f=t}function rw(n,t){n.g=t}function cw(n,t){n.e=t}function aw(n,t){n.f=t}function ow(n,t){n.f=t}function uw(n,t){n.a=t}function sw(n,t){n.b=t}function hw(n,t){n.n=t}function fw(n,t){n.a=t}function lw(n,t){n.c=t}function bw(n,t){n.c=t}function ww(n,t){n.c=t}function dw(n,t){n.a=t}function gw(n,t){n.a=t}function pw(n,t){n.d=t}function mw(n,t){n.d=t}function vw(n,t){n.e=t}function kw(n,t){n.e=t}function yw(n,t){n.g=t}function Mw(n,t){n.f=t}function Tw(n,t){n.j=t}function jw(n,t){n.a=t}function Ew(n,t){n.a=t}function Sw(n,t){n.b=t}function Pw(n){n.b=n.a}function Cw(n){n.c=n.d.d}function Iw(n){this.a=n}function Ow(n){this.a=n}function Aw(n){this.a=n}function Lw(n){this.a=n}function Nw(n){this.a=n}function $w(n){this.a=n}function Dw(n){this.a=n}function xw(n){this.a=n}function Rw(n){this.a=n}function Kw(n){this.a=n}function Fw(n){this.a=n}function _w(n){this.a=n}function Bw(n){this.a=n}function Hw(n){this.a=n}function Uw(n){this.b=n}function Gw(n){this.b=n}function qw(n){this.b=n}function Xw(n){this.a=n}function zw(n){this.a=n}function Vw(n){this.c=n}function Ww(n){this.c=n}function Qw(n){this.c=n}function Jw(n){this.d=n}function Yw(n){this.a=n}function Zw(n){this.a=n}function nd(n){this.a=n}function td(n){this.a=n}function ed(n){this.a=n}function id(n){this.a=n}function rd(n){this.a=n}function cd(n){this.a=n}function ad(n){this.a=n}function od(n){this.a=n}function ud(n){this.a=n}function sd(n){this.a=n}function hd(n){this.a=n}function fd(n){this.a=n}function ld(n){this.a=n}function bd(n){this.a=n}function wd(n){this.a=n}function dd(n){this.a=n}function gd(n){this.a=n}function pd(n){this.a=n}function md(n){this.a=n}function vd(n){this.a=n}function kd(n){this.a=n}function yd(n){this.a=n}function Md(n){this.a=n}function Td(n){this.a=n}function jd(n){this.a=n}function Ed(n){this.a=n}function Sd(n){this.a=n}function Pd(n){this.a=n}function Cd(n){this.a=n}function Id(n){this.a=n}function Od(n){this.a=n}function Ad(n){this.a=n}function Ld(n){this.a=n}function Nd(n){this.a=n}function $d(n){this.a=n}function Dd(n){this.a=n}function xd(n){this.a=n}function Rd(n){this.a=n}function Kd(n){this.a=n}function Fd(n){this.a=n}function _d(n){this.a=n}function Bd(n){this.a=n}function Hd(n){this.a=n}function Ud(n){this.a=n}function Gd(n){this.a=n}function qd(n){this.a=n}function Xd(n){this.e=n}function zd(n){this.a=n}function Vd(n){this.a=n}function Wd(n){this.a=n}function Qd(n){this.a=n}function Jd(n){this.a=n}function Yd(n){this.a=n}function Zd(n){this.a=n}function ng(n){this.a=n}function tg(n){this.a=n}function eg(n){this.a=n}function ig(n){this.a=n}function rg(n){this.a=n}function cg(n){this.a=n}function ag(n){this.a=n}function og(n){this.a=n}function ug(n){this.a=n}function sg(n){this.a=n}function hg(n){this.a=n}function fg(n){this.a=n}function lg(n){this.a=n}function bg(n){this.a=n}function wg(n){this.a=n}function dg(n){this.a=n}function gg(n){this.a=n}function pg(n){this.a=n}function mg(n){this.a=n}function vg(n){this.a=n}function kg(n){this.a=n}function yg(n){this.a=n}function Mg(n){this.a=n}function Tg(n){this.a=n}function jg(n){this.a=n}function Eg(n){this.a=n}function Sg(n){this.a=n}function Pg(n){this.a=n}function Cg(n){this.a=n}function Ig(n){this.a=n}function Og(n){this.a=n}function Ag(n){this.a=n}function Lg(n){this.a=n}function Ng(n){this.a=n}function $g(n){this.a=n}function Dg(n){this.a=n}function xg(n){this.a=n}function Rg(n){this.a=n}function Kg(n){this.a=n}function Fg(n){this.a=n}function _g(n){this.a=n}function Bg(n){this.a=n}function Hg(n){this.a=n}function Ug(n){this.a=n}function Gg(n){this.a=n}function qg(n){this.a=n}function Xg(n){this.a=n}function zg(n){this.c=n}function Vg(n){this.b=n}function Wg(n){this.a=n}function Qg(n){this.a=n}function Jg(n){this.a=n}function Yg(n){this.a=n}function Zg(n){this.a=n}function np(n){this.a=n}function tp(n){this.a=n}function ep(n){this.a=n}function ip(n){this.a=n}function rp(n){this.a=n}function cp(n){this.a=n}function ap(n){this.a=n}function op(n){this.a=n}function up(n){this.a=n}function sp(n){this.a=n}function hp(n){this.a=n}function fp(n){this.a=n}function lp(n){this.a=n}function bp(n){this.a=n}function wp(n){this.a=n}function dp(n){this.a=n}function gp(n){this.a=n}function pp(n){this.a=n}function mp(n){this.a=n}function vp(n){this.a=n}function kp(n){this.a=n}function yp(n){this.a=n}function Mp(n){this.a=n}function Tp(n){this.a=n}function jp(n){this.a=n}function Ep(n){this.a=n}function Sp(n){this.a=n}function Pp(n){this.a=n}function Cp(n){this.a=n}function Ip(n){this.a=n}function Op(n){this.a=n}function Ap(n){this.a=n}function Lp(n){this.a=n}function Np(n){this.a=n}function $p(n){this.a=n}function Dp(n){this.a=n}function xp(n){this.a=n}function Rp(n){this.a=n}function Kp(n){this.a=n}function Fp(n){this.a=n}function _p(n){this.a=n}function Bp(n){this.a=n}function Hp(n){this.a=n}function Up(n){this.a=n}function Gp(n){this.a=n}function qp(n){this.a=n}function Xp(n){this.a=n}function zp(n){this.a=n}function Vp(n){this.a=n}function Wp(n){this.a=n}function Qp(n){this.a=n}function Jp(n){this.f=n}function Yp(n){this.a=n}function Zp(n){this.a=n}function nm(n){this.a=n}function tm(n){this.a=n}function em(n){this.a=n}function im(n){this.a=n}function rm(n){this.a=n}function cm(n){this.a=n}function am(n){this.a=n}function om(n){this.a=n}function um(n){this.a=n}function sm(n){this.a=n}function hm(n){this.a=n}function fm(n){this.a=n}function lm(n){this.a=n}function bm(n){this.a=n}function wm(n){this.a=n}function dm(n){this.a=n}function gm(n){this.a=n}function pm(n){this.a=n}function mm(n){this.a=n}function vm(n){this.a=n}function km(n){this.a=n}function ym(n){this.a=n}function Mm(n){this.a=n}function Tm(n){this.a=n}function jm(n){this.a=n}function Em(n){this.a=n}function Sm(n){this.a=n}function Pm(n){this.a=n}function Cm(n){this.b=n}function Im(n){this.a=n}function Om(n){this.a=n}function Am(n){this.a=n}function Lm(n){this.a=n}function Nm(n){this.a=n}function $m(n){this.a=n}function Dm(n){this.a=n}function xm(n){this.b=n}function Rm(n){this.a=n}function Km(n){this.a=n}function Fm(n){this.a=n}function _m(n){this.a=n}function Bm(n){this.c=n}function Hm(n){this.e=n}function Um(n){this.a=n}function Gm(n){this.a=n}function qm(n){this.a=n}function Xm(n){this.d=n}function zm(n){this.a=n}function Vm(n){this.a=n}function Wm(n){this.a=n}function Qm(n){this.e=n}function Jm(){this.a=0}function Ym(){$V(this)}function Zm(){IN(this)}function nv(){XQ(this)}function tv(){Rf(this)}function ev(){this.c=nBt}function iv(n,t){n.b+=t}function rv(n,t){t.Wb(n)}function cv(n){return n.a}function av(n){return n.a}function ov(n){return n.a}function uv(n){return n.a}function sv(n){return n.a}function hv(n){return n.e}function fv(){return null}function lv(){return null}function bv(){mj(),xJn()}function wv(n){n.b.Of(n.e)}function dv(n){n.b=new rT}function gv(n,t){n.b=t-n.b}function pv(n,t){n.a=t-n.a}function mv(n,t){n.push(t)}function vv(n,t){n.sort(t)}function kv(n,t){t.jd(n.a)}function yv(n,t){NLn(t,n)}function Mv(n,t,e){n.Yd(e,t)}function Tv(n,t){n.e=t,t.b=n}function jv(n){sB(),this.a=n}function Ev(n){sB(),this.a=n}function Sv(n){sB(),this.a=n}function Pv(n){ZW(),this.a=n}function Cv(n){EZ(),_at.le(n)}function Iv(){Iv=E,new Ym}function Ov(){vx.call(this)}function Av(){vx.call(this)}function Lv(){Ov.call(this)}function Nv(){Ov.call(this)}function $v(){Ov.call(this)}function Dv(){Ov.call(this)}function xv(){Ov.call(this)}function Rv(){Ov.call(this)}function Kv(){Ov.call(this)}function Fv(){Ov.call(this)}function _v(){Ov.call(this)}function Bv(){Ov.call(this)}function Hv(){Ov.call(this)}function Uv(){this.a=this}function Gv(){this.Bb|=256}function qv(){this.b=new hL}function Xv(n,t){n.length=t}function zv(n,t){kD(n.a,t)}function Vv(n,t){LOn(n.c,t)}function Wv(n,t){FV(n.b,t)}function Qv(n,t){bMn(n.a,t)}function Jv(n,t){Vdn(n.a,t)}function Yv(n,t){Msn(n.e,t)}function Zv(n){C$n(n.c,n.b)}function nk(n,t){n.kc().Nb(t)}function tk(n){this.a=Agn(n)}function ek(){this.a=new Ym}function ik(){this.a=new Ym}function rk(){this.a=new hS}function ck(){this.a=new Zm}function ak(){this.a=new Zm}function ok(){this.a=new Zm}function uk(){this.a=new kn}function sk(){this.a=new g7}function hk(){this.a=new lt}function fk(){this.a=new V0}function lk(){this.a=new NF}function bk(){this.a=new Zm}function wk(){this.a=new Zm}function dk(){this.a=new Zm}function gk(){this.a=new Zm}function pk(){this.d=new Zm}function mk(){this.a=new i4}function vk(){this.a=new ek}function kk(){this.a=new Ym}function yk(){this.b=new Ym}function Mk(){this.b=new Zm}function Tk(){this.e=new Zm}function jk(){this.a=new sl}function Ek(){this.d=new Zm}function Sk(){BZ.call(this)}function Pk(){BZ.call(this)}function Ck(){Zm.call(this)}function Ik(){Lv.call(this)}function Ok(){ck.call(this)}function Ak(){HF.call(this)}function Lk(){gk.call(this)}function Nk(){tv.call(this)}function $k(){Nk.call(this)}function Dk(){tv.call(this)}function xk(){Dk.call(this)}function Rk(){oy.call(this)}function Kk(){oy.call(this)}function Fk(){oy.call(this)}function _k(){hy.call(this)}function Bk(){ts.call(this)}function Hk(){ts.call(this)}function Uk(){lS.call(this)}function Gk(){wy.call(this)}function qk(){wy.call(this)}function Xk(){Ym.call(this)}function zk(){Ym.call(this)}function Vk(){Ym.call(this)}function Wk(){Kan.call(this)}function Qk(){ek.call(this)}function Jk(){Gv.call(this)}function Yk(){$D.call(this)}function Zk(){Ym.call(this)}function ny(){$D.call(this)}function ty(){Ym.call(this)}function ey(){Ym.call(this)}function iy(){ps.call(this)}function ry(){iy.call(this)}function cy(){ps.call(this)}function ay(){$f.call(this)}function oy(){this.a=new ek}function uy(){this.a=new Ym}function sy(){this.a=new Zm}function hy(){this.a=new Ym}function fy(){this.a=new lS}function ly(){this.j=new Zm}function by(){this.a=new zj}function wy(){this.a=new gs}function dy(){this.a=new Do}function gy(){gy=E,wat=new c}function py(){py=E,Mat=new ky}function my(){my=E,Tat=new vy}function vy(){ib.call(this,"")}function ky(){ib.call(this,"")}function yy(n){Arn.call(this,n)}function My(n){Arn.call(this,n)}function Ty(n){Ql.call(this,n)}function jy(n){HE.call(this,n)}function Ey(n){HE.call(this,n)}function Sy(n){jy.call(this,n)}function Py(n){jy.call(this,n)}function Cy(n){jy.call(this,n)}function Iy(n){c8.call(this,n)}function Oy(n){c8.call(this,n)}function Ay(n){K_.call(this,n)}function Ly(n){XE.call(this,n)}function Ny(n){WE.call(this,n)}function $y(n){WE.call(this,n)}function Dy(n){WE.call(this,n)}function xy(n){cOn.call(this,n)}function Ry(n){xy.call(this,n)}function Ky(n){Uz.call(this,n)}function Fy(n){Ky.call(this,n)}function _y(){Cb.call(this,{})}function By(){By=E,Vat=new T}function Hy(){Hy=E,Iat=new X$}function Uy(){Uy=E,Dat=new r}function Gy(){Gy=E,Fat=new p}function qy(){qy=E,Hat=new k}function Xy(n){UD(),this.a=n}function zy(n){Cun(),this.a=n}function Vy(n){rz(),this.f=n}function Wy(n){rz(),this.f=n}function Qy(n){aB(),this.a=n}function Jy(n){n.b=null,n.c=0}function Yy(n,t){n.e=t,yFn(n,t)}function Zy(n,t){n.a=t,WAn(n)}function nM(n,t,e){n.a[t.g]=e}function tM(n,t,e){nSn(e,n,t)}function eM(n,t){F_(t.i,n.n)}function iM(n,t){yln(n).Cd(t)}function rM(n,t){n.a.ec().Mc(t)}function cM(n,t){return n.g-t.g}function aM(n,t){return n*n/t}function oM(n){return tJ(n),n}function uM(n){return tJ(n),n}function sM(n){return tJ(n),n}function hM(n){return new Pb(n)}function fM(n){return new QW(n)}function lM(n){return tJ(n),n}function bM(n){return tJ(n),n}function wM(n){Ky.call(this,n)}function dM(n){Ky.call(this,n)}function gM(n){Ky.call(this,n)}function pM(n){Uz.call(this,n)}function mM(n){Ky.call(this,n)}function vM(n){Ky.call(this,n)}function kM(n){Ky.call(this,n)}function yM(n){Ky.call(this,n)}function MM(n){Ky.call(this,n)}function TM(n){Ky.call(this,n)}function jM(n){Ky.call(this,n)}function EM(n){Ky.call(this,n)}function SM(n){Ky.call(this,n)}function PM(n){Ky.call(this,n)}function CM(n){Ky.call(this,n)}function IM(n){tJ(n),this.a=n}function OM(n){return hln(n),n}function AM(n){zV(n,n.length)}function LM(n){return n.b==n.c}function NM(n){return!!n&&n.b}function $M(n){return!!n&&n.k}function DM(n){return!!n&&n.j}function xM(n,t,e){n.c.Ef(t,e)}function RM(n,t){n.be(t),t.ae(n)}function KM(n){sB(),this.a=WW(n)}function FM(){this.a=mK(WW(TZn))}function _M(){throw hv(new Kv)}function BM(){throw hv(new Kv)}function HM(){throw hv(new Kv)}function UM(){throw hv(new Kv)}function GM(){throw hv(new Kv)}function qM(){throw hv(new Kv)}function XM(){XM=E,EZ()}function zM(){$w.call(this,"")}function VM(){$w.call(this,"")}function WM(){$w.call(this,"")}function QM(){$w.call(this,"")}function JM(n){dM.call(this,n)}function YM(n){dM.call(this,n)}function ZM(n){vM.call(this,n)}function nT(n){qw.call(this,n)}function tT(n){nT.call(this,n)}function eT(n){gx.call(this,n)}function iT(n){Qx.call(this,n,0)}function rT(){L2.call(this,12,3)}function cT(n,t){return B0(n,t)}function aT(n,t){return Ltn(n,t)}function oT(n,t){return n.a-t.a}function uT(n,t){return n.a-t.a}function sT(n,t){return n.a-t.a}function hT(n,t){return t in n.a}function fT(n){return n.a?n.b:0}function lT(n){return n.a?n.b:0}function bT(n,t,e){t.Cd(n.a[e])}function wT(n,t,e){t.Pe(n.a[e])}function dT(n,t){n.b=new eN(t)}function gT(n,t){return n.b=t,n}function pT(n,t){return n.c=t,n}function mT(n,t){return n.f=t,n}function vT(n,t){return n.g=t,n}function kT(n,t){return n.a=t,n}function yT(n,t){return n.f=t,n}function MT(n,t){return n.k=t,n}function TT(n,t){return n.a=t,n}function jT(n,t){return n.e=t,n}function ET(n,t){return n.e=t,n}function ST(n,t){return n.f=t,n}function PT(n,t){n.b=!0,n.d=t}function CT(n,t){return n.b-t.b}function IT(n,t){return n.g-t.g}function OT(n,t){return n?0:t-1}function AT(n,t){return n?0:t-1}function LT(n,t){return n?t-1:0}function NT(n,t){return n.s-t.s}function $T(n,t){return t.rg(n)}function DT(n,t){return n.b=t,n}function xT(n,t){return n.a=t,n}function RT(n,t){return n.c=t,n}function KT(n,t){return n.d=t,n}function FT(n,t){return n.e=t,n}function _T(n,t){return n.f=t,n}function BT(n,t){return n.a=t,n}function HT(n,t){return n.b=t,n}function UT(n,t){return n.c=t,n}function GT(n,t){return n.c=t,n}function qT(n,t){return n.b=t,n}function XT(n,t){return n.d=t,n}function zT(n,t){return n.e=t,n}function VT(n,t){return n.f=t,n}function WT(n,t){return n.g=t,n}function QT(n,t){return n.a=t,n}function JT(n,t){return n.i=t,n}function YT(n,t){return n.j=t,n}function ZT(n,t){jIn(),o2(t,n)}function nj(n,t,e){az(n.a,t,e)}function tj(n){Y_.call(this,n)}function ej(n){dpn.call(this,n)}function ij(n){TY.call(this,n)}function rj(n){TY.call(this,n)}function cj(n){Drn.call(this,n)}function aj(n){HY.call(this,n)}function oj(n){HY.call(this,n)}function uj(){S$.call(this,"")}function sj(){this.a=0,this.b=0}function hj(){this.b=0,this.a=0}function fj(n,t){n.b=0,Ccn(n,t)}function lj(n,t){return n.k=t,n}function bj(n,t){return n.j=t,n}function wj(n,t){n.c=t,n.b=!0}function dj(){dj=E,rut=ePn()}function gj(){gj=E,xKt=AEn()}function pj(){pj=E,RKt=VPn()}function mj(){mj=E,NFt=aan()}function vj(){vj=E,y_t=LEn()}function kj(){kj=E,xBt=NEn()}function yj(){yj=E,RBt=qAn()}function Mj(n){return n.e&&n.e()}function Tj(n){return n.l|n.m<<22}function jj(n,t){return n.c._b(t)}function Ej(n,t){return Uwn(n.b,t)}function Sj(n){return n?n.d:null}function Pj(n){return n?n.g:null}function Cj(n){return n?n.i:null}function Ij(n){return vK(n),n.o}function Oj(n,t){return n.a+=t,n}function Aj(n,t){return n.a+=t,n}function Lj(n,t){return n.a+=t,n}function Nj(n,t){return n.a+=t,n}function $j(n,t){for(;n.Bd(t););}function Dj(n){this.a=new sS(n)}function xj(){throw hv(new Kv)}function Rj(){throw hv(new Kv)}function Kj(){throw hv(new Kv)}function Fj(){throw hv(new Kv)}function _j(){throw hv(new Kv)}function Bj(){throw hv(new Kv)}function Hj(n){this.a=new Hz(n)}function Uj(){this.a=new mKn(iIt)}function Gj(){this.b=new mKn(ZSt)}function qj(){this.a=new mKn(dOt)}function Xj(){this.b=new mKn(VAt)}function zj(){this.b=new mKn(VAt)}function Vj(n){this.a=0,this.b=n}function Wj(n){CQn(),uYn(this,n)}function Qj(n){return GQ(n),n.a}function Jj(n){return n.b!=n.d.c}function Yj(n,t){return n.d[t.p]}function Zj(n,t){return vFn(n,t)}function nE(n,t,e){n.splice(t,e)}function tE(n,t){for(;n.Re(t););}function eE(n){n.c?P_n(n):C_n(n)}function iE(){throw hv(new Kv)}function rE(){throw hv(new Kv)}function cE(){throw hv(new Kv)}function aE(){throw hv(new Kv)}function oE(){throw hv(new Kv)}function uE(){throw hv(new Kv)}function sE(){throw hv(new Kv)}function hE(){throw hv(new Kv)}function fE(){throw hv(new Kv)}function lE(){throw hv(new Kv)}function bE(){throw hv(new Bv)}function wE(){throw hv(new Bv)}function dE(n){this.a=new gE(n)}function gE(n){Zan(this,n,fOn())}function pE(n){return!n||FQ(n)}function mE(n){return-1!=dHt[n]}function vE(){0!=Uat&&(Uat=0),qat=-1}function kE(){null==hZn&&(hZn=[])}function yE(n,t){RD.call(this,n,t)}function ME(n,t){yE.call(this,n,t)}function TE(n,t){this.a=n,this.b=t}function jE(n,t){this.a=n,this.b=t}function EE(n,t){this.a=n,this.b=t}function SE(n,t){this.a=n,this.b=t}function PE(n,t){this.a=n,this.b=t}function CE(n,t){this.a=n,this.b=t}function IE(n,t){this.a=n,this.b=t}function OE(n,t){this.e=n,this.d=t}function AE(n,t){this.b=n,this.c=t}function LE(n,t){this.b=n,this.a=t}function NE(n,t){this.b=n,this.a=t}function $E(n,t){this.b=n,this.a=t}function DE(n,t){this.b=n,this.a=t}function xE(n,t){this.a=n,this.b=t}function RE(n,t){this.a=n,this.b=t}function KE(n,t){this.a=n,this.f=t}function FE(n,t){this.g=n,this.i=t}function _E(n,t){this.f=n,this.g=t}function BE(n,t){this.b=n,this.c=t}function HE(n){FD(n.dc()),this.c=n}function UE(n,t){this.a=n,this.b=t}function GE(n,t){this.a=n,this.b=t}function qE(n){this.a=uG(WW(n),15)}function XE(n){this.a=uG(WW(n),15)}function zE(n){this.a=uG(WW(n),85)}function VE(n){this.b=uG(WW(n),85)}function WE(n){this.b=uG(WW(n),51)}function QE(){this.q=new e.Date}function JE(n,t){this.a=n,this.b=t}function YE(n,t){return PV(n.b,t)}function ZE(n,t){return n.b.Hc(t)}function nS(n,t){return n.b.Ic(t)}function tS(n,t){return n.b.Qc(t)}function eS(n,t){return n.b.Hc(t)}function iS(n,t){return n.c.uc(t)}function rS(n,t){return udn(n.c,t)}function cS(n,t){return n.a._b(t)}function aS(n,t){return n>t&&t0}function $P(n,t){return dwn(n,t)<0}function DP(n,t){return RX(n.a,t)}function xP(n,t){U0.call(this,n,t)}function RP(n){nQ(),K_.call(this,n)}function KP(n,t){zX(n,n.length,t)}function FP(n,t){dW(n,n.length,t)}function _P(n,t){return n.a.get(t)}function BP(n,t){return PV(n.e,t)}function HP(n){return tJ(n),!1}function UP(n){this.a=uG(WW(n),229)}function GP(n){h3.call(this,n,21)}function qP(n,t){_E.call(this,n,t)}function XP(n,t){_E.call(this,n,t)}function zP(n,t){this.b=n,this.a=t}function VP(n,t){this.d=n,this.e=t}function WP(n,t){this.a=n,this.b=t}function QP(n,t){this.a=n,this.b=t}function JP(n,t){this.a=n,this.b=t}function YP(n,t){this.a=n,this.b=t}function ZP(n,t){this.a=n,this.b=t}function nC(n,t){this.b=n,this.a=t}function tC(n,t){this.b=n,this.a=t}function eC(n,t){_E.call(this,n,t)}function iC(n,t){_E.call(this,n,t)}function rC(n,t){_E.call(this,n,t)}function cC(n,t){_E.call(this,n,t)}function aC(n,t){_E.call(this,n,t)}function oC(n,t){_E.call(this,n,t)}function uC(n,t){_E.call(this,n,t)}function sC(n,t){this.b=n,this.a=t}function hC(n,t){_E.call(this,n,t)}function fC(n,t){this.b=n,this.a=t}function lC(n,t){_E.call(this,n,t)}function bC(n,t){this.b=n,this.a=t}function wC(n,t){_E.call(this,n,t)}function dC(n,t){_E.call(this,n,t)}function gC(n,t){_E.call(this,n,t)}function pC(n,t,e){n.splice(t,0,e)}function mC(n,t,e){n.Mb(e)&&t.Cd(e)}function vC(n,t,e){t.Pe(n.a.Ye(e))}function kC(n,t,e){t.Dd(n.a.Ze(e))}function yC(n,t,e){t.Cd(n.a.Kb(e))}function MC(n,t){return $x(n.c,t)}function TC(n,t){return $x(n.e,t)}function jC(n,t){_E.call(this,n,t)}function EC(n,t){_E.call(this,n,t)}function SC(n,t){_E.call(this,n,t)}function PC(n,t){_E.call(this,n,t)}function CC(n,t){_E.call(this,n,t)}function IC(n,t){_E.call(this,n,t)}function OC(n,t){this.a=n,this.b=t}function AC(n,t){this.a=n,this.b=t}function LC(n,t){this.a=n,this.b=t}function NC(n,t){this.a=n,this.b=t}function $C(n,t){this.a=n,this.b=t}function DC(n,t){this.a=n,this.b=t}function xC(n,t){this.b=n,this.a=t}function RC(n,t){this.b=n,this.a=t}function KC(n,t){this.b=n,this.a=t}function FC(n,t){this.c=n,this.d=t}function _C(n,t){this.e=n,this.d=t}function BC(n,t){this.a=n,this.b=t}function HC(n,t){this.a=n,this.b=t}function UC(n,t){this.a=n,this.b=t}function GC(n,t){this.b=n,this.a=t}function qC(n,t){this.b=t,this.c=n}function XC(n,t){_E.call(this,n,t)}function zC(n,t){_E.call(this,n,t)}function VC(n,t){_E.call(this,n,t)}function WC(n,t){_E.call(this,n,t)}function QC(n,t){_E.call(this,n,t)}function JC(n,t){_E.call(this,n,t)}function YC(n,t){_E.call(this,n,t)}function ZC(n,t){_E.call(this,n,t)}function nI(n,t){_E.call(this,n,t)}function tI(n,t){_E.call(this,n,t)}function eI(n,t){_E.call(this,n,t)}function iI(n,t){_E.call(this,n,t)}function rI(n,t){_E.call(this,n,t)}function cI(n,t){_E.call(this,n,t)}function aI(n,t){_E.call(this,n,t)}function oI(n,t){_E.call(this,n,t)}function uI(n,t){_E.call(this,n,t)}function sI(n,t){_E.call(this,n,t)}function hI(n,t){_E.call(this,n,t)}function fI(n,t){_E.call(this,n,t)}function lI(n,t){_E.call(this,n,t)}function bI(n,t){_E.call(this,n,t)}function wI(n,t){_E.call(this,n,t)}function dI(n,t){_E.call(this,n,t)}function gI(n,t){_E.call(this,n,t)}function pI(n,t){_E.call(this,n,t)}function mI(n,t){_E.call(this,n,t)}function vI(n,t){_E.call(this,n,t)}function kI(n,t){_E.call(this,n,t)}function yI(n,t){_E.call(this,n,t)}function MI(n,t){_E.call(this,n,t)}function TI(n,t){_E.call(this,n,t)}function jI(n,t){_E.call(this,n,t)}function EI(n,t){this.b=n,this.a=t}function SI(n,t){_E.call(this,n,t)}function PI(n,t){this.a=n,this.b=t}function CI(n,t){this.a=n,this.b=t}function II(n,t){this.a=n,this.b=t}function OI(n,t){_E.call(this,n,t)}function AI(n,t){_E.call(this,n,t)}function LI(n,t){this.a=n,this.b=t}function NI(n,t){return PU(),t!=n}function $I(n){return MK(n.a),n.b}function DI(n){return K$n(n,n.c),n}function xI(){return dj(),new rut}function RI(){UB(),this.a=new xF}function KI(){oFn(),this.a=new ek}function FI(){e2(),this.b=new ek}function _I(n,t){this.b=n,this.d=t}function BI(n,t){this.a=n,this.b=t}function HI(n,t){this.a=n,this.b=t}function UI(n,t){this.a=n,this.b=t}function GI(n,t){this.b=n,this.a=t}function qI(n,t){_E.call(this,n,t)}function XI(n,t){_E.call(this,n,t)}function zI(n,t){_E.call(this,n,t)}function VI(n,t){_E.call(this,n,t)}function WI(n,t){_E.call(this,n,t)}function QI(n,t){_E.call(this,n,t)}function JI(n,t){_E.call(this,n,t)}function YI(n,t){_E.call(this,n,t)}function ZI(n,t){_E.call(this,n,t)}function nO(n,t){_E.call(this,n,t)}function tO(n,t){_E.call(this,n,t)}function eO(n,t){_E.call(this,n,t)}function iO(n,t){_E.call(this,n,t)}function rO(n,t){_E.call(this,n,t)}function cO(n,t){_E.call(this,n,t)}function aO(n,t){_E.call(this,n,t)}function oO(n,t){_E.call(this,n,t)}function uO(n,t){_E.call(this,n,t)}function sO(n,t){_E.call(this,n,t)}function hO(n,t){_E.call(this,n,t)}function fO(n,t){_E.call(this,n,t)}function lO(n,t){_E.call(this,n,t)}function bO(n,t){_E.call(this,n,t)}function wO(n,t){_E.call(this,n,t)}function dO(n,t){this.b=n,this.a=t}function gO(n,t){this.b=n,this.a=t}function pO(n,t){this.b=n,this.a=t}function mO(n,t){this.b=n,this.a=t}function vO(n,t){this.a=n,this.b=t}function kO(n,t){this.a=n,this.b=t}function yO(n,t){this.a=n,this.b=t}function MO(n,t){this.a=n,this.b=t}function TO(n,t){_E.call(this,n,t)}function jO(n,t){_E.call(this,n,t)}function EO(n,t){_E.call(this,n,t)}function SO(n,t){_E.call(this,n,t)}function PO(n,t){_E.call(this,n,t)}function CO(n,t){_E.call(this,n,t)}function IO(n,t){_E.call(this,n,t)}function OO(n,t){_E.call(this,n,t)}function AO(n,t){_E.call(this,n,t)}function LO(n,t){_E.call(this,n,t)}function NO(n,t){_E.call(this,n,t)}function $O(n,t){_E.call(this,n,t)}function DO(n,t){_E.call(this,n,t)}function xO(n,t){_E.call(this,n,t)}function RO(n,t){_E.call(this,n,t)}function KO(n,t){_E.call(this,n,t)}function FO(n,t){_E.call(this,n,t)}function _O(n,t){_E.call(this,n,t)}function BO(n,t){_E.call(this,n,t)}function HO(n,t){_E.call(this,n,t)}function UO(n,t){this.a=n,this.b=t}function GO(n,t){this.a=n,this.b=t}function qO(n,t){this.a=n,this.b=t}function XO(n,t){this.a=n,this.b=t}function zO(n,t){this.a=n,this.b=t}function VO(n,t){this.a=n,this.b=t}function WO(n,t){this.a=n,this.b=t}function QO(n,t){this.a=n,this.b=t}function JO(n,t){this.a=n,this.b=t}function YO(n,t){this.a=n,this.b=t}function ZO(n,t){this.a=n,this.b=t}function nA(n,t){this.a=n,this.b=t}function tA(n,t){this.a=n,this.b=t}function eA(n,t){this.b=n,this.a=t}function iA(n,t){this.b=n,this.a=t}function rA(n,t){this.b=n,this.a=t}function cA(n,t){this.b=n,this.a=t}function aA(n,t){this.a=n,this.b=t}function oA(n,t){this.a=n,this.b=t}function uA(n,t){_E.call(this,n,t)}function sA(n,t){this.a=n,this.b=t}function hA(n,t){this.a=n,this.b=t}function fA(n,t){_E.call(this,n,t)}function lA(n,t){this.f=n,this.c=t}function bA(n,t){return $x(n.g,t)}function wA(n,t){return $x(t.b,n)}function dA(n,t){return ymn(n.a,t)}function gA(n,t){return-n.b.af(t)}function pA(n,t){n&&vJ(AFt,n,t)}function mA(n,t){n.i=null,lon(n,t)}function vA(n,t,e){MSn(t,jAn(n,e))}function kA(n,t,e){MSn(t,jAn(n,e))}function yA(n,t){BRn(n.a,uG(t,58))}function MA(n,t){aen(n.a,uG(t,12))}function TA(n,t){this.a=n,this.b=t}function jA(n,t){this.a=n,this.b=t}function EA(n,t){this.a=n,this.b=t}function SA(n,t){this.a=n,this.b=t}function PA(n,t){this.a=n,this.b=t}function CA(n,t){this.d=n,this.b=t}function IA(n,t){this.e=n,this.a=t}function OA(n,t){this.b=n,this.c=t}function AA(n,t){this.i=n,this.g=t}function LA(n,t){this.d=n,this.e=t}function NA(n,t){Iin(new DD(n),t)}function $A(n){return kmn(n.c,n.b)}function DA(n){return n?n.md():null}function xA(n){return null==n?null:n}function RA(n){return typeof n===pZn}function KA(n){return typeof n===dZn}function FA(n){return typeof n===gZn}function _A(n,t){return 0==dwn(n,t)}function BA(n,t){return dwn(n,t)>=0}function HA(n,t){return 0!=dwn(n,t)}function UA(n,t){return Zun(n.Kc(),t)}function GA(n,t){return n.Rd().Xb(t)}function qA(n){return bpn(n),n.d.gc()}function XA(n){return Fq(null==n),n}function zA(n,t){return n.a+=""+t,n}function VA(n,t){return n.a+=""+t,n}function WA(n,t){return n.a+=""+t,n}function QA(n,t){return n.a+=""+t,n}function JA(n,t){return n.a+=""+t,n}function YA(n,t){return n.a+=""+t,n}function ZA(n){return""+(tJ(n),n)}function nL(n){$V(this),xun(this,n)}function tL(){J0(),ez.call(this)}function eL(n,t){Bz.call(this,n,t)}function iL(n,t){Bz.call(this,n,t)}function rL(n,t){Bz.call(this,n,t)}function cL(n,t){s8(n,t,n.c.b,n.c)}function aL(n,t){s8(n,t,n.a,n.a.a)}function oL(n){return u3(n,0),null}function uL(){this.b=0,this.a=!1}function sL(){this.b=0,this.a=!1}function hL(){this.b=new sS(orn(12))}function fL(){fL=E,fht=Abn(Nkn())}function lL(){lL=E,_wt=Abn(bKn())}function bL(){bL=E,bPt=Abn(usn())}function wL(){wL=E,Iv(),Bat=new Ym}function dL(n){return n.a=0,n.b=0,n}function gL(n,t){return n.a=t.g+1,n}function pL(n,t){w_.call(this,n,t)}function mL(n,t){uF.call(this,n,t)}function vL(n,t){AA.call(this,n,t)}function kL(n,t){zx.call(this,n,t)}function yL(n,t){Zsn.call(this,n,t)}function ML(n,t){TP(),vJ(_Ft,n,t)}function TL(n,t){n.q.setTime(W4(t))}function jL(n){e.clearTimeout(n)}function EL(n){return WW(n),new iN(n)}function SL(n,t){return xA(n)===xA(t)}function PL(n,t){return n.a.a.a.cc(t)}function CL(n,t){return r1(n.a,0,t)}function IL(n){return jW(uG(n,74))}function OL(n){return t0((tJ(n),n))}function AL(n){return t0((tJ(n),n))}function LL(n){return p$(n.l,n.m,n.h)}function NL(n,t){return d$(n.a,t.a)}function $L(n,t){return rW(n.a,t.a)}function DL(n,t){return ugn(n.a,t.a)}function xL(n,t){return n.indexOf(t)}function RL(n,t){return 2==n.j[t.p]}function KL(n,t){return n==t?0:n?1:-1}function FL(n){return n<10?"0"+n:""+n}function _L(n){return typeof n===gZn}function BL(n){return n==Flt||n==Hlt}function HL(n){return n==Flt||n==_lt}function UL(n,t){return d$(n.g,t.g)}function GL(n){return Ten(n.b.b,n,0)}function qL(){lX.call(this,0,0,0,0)}function XL(){td.call(this,new u8)}function zL(n,t){Ntn(n,0,n.length,t)}function VL(n,t){return kD(n.a,t),t}function WL(n,t){return GB(),t.a+=n}function QL(n,t){return GB(),t.a+=n}function JL(n,t){return GB(),t.c+=n}function YL(n,t){return kD(n.c,t),n}function ZL(n,t){return gsn(n.a,t),n}function nN(n){this.a=xI(),this.b=n}function tN(n){this.a=xI(),this.b=n}function eN(n){this.a=n.a,this.b=n.b}function iN(n){this.a=n,Ff.call(this)}function rN(n){this.a=n,Ff.call(this)}function cN(){gY.call(this,0,0,0,0)}function aN(n){return gsn(new wJ,n)}function oN(n){return xJ(uG(n,123))}function uN(n){return n.vh()&&n.wh()}function sN(n){return n!=uRt&&n!=sRt}function hN(n){return n==JDt||n==YDt}function fN(n){return n==nxt||n==QDt}function lN(n){return n==wjt||n==bjt}function bN(n,t){return d$(n.g,t.g)}function wN(n,t){return new Zsn(t,n)}function dN(n,t){return new Zsn(t,n)}function gN(n){return nG(n.b.Kc(),n.a)}function pN(n,t){sbn(n,t),Ocn(n,n.D)}function mN(n,t,e){Scn(n,t),pcn(n,e)}function vN(n,t,e){kcn(n,t),vcn(n,e)}function kN(n,t,e){ycn(n,t),Mcn(n,e)}function yN(n,t,e){mcn(n,t),jcn(n,e)}function MN(n,t,e){Tcn(n,t),Ecn(n,e)}function TN(n,t,e){AK.call(this,n,t,e)}function jN(n){lA.call(this,n,!0)}function EN(){qP.call(this,"Tail",3)}function SN(){qP.call(this,"Head",1)}function PN(n){cHn(),Bun.call(this,n)}function CN(n){lX.call(this,n,n,n,n)}function IN(n){n.c=Inn(dat,EZn,1,0,5,1)}function ON(n){return n.b&&sXn(n),n.a}function AN(n){return n.b&&sXn(n),n.c}function LN(n,t){Nut||(n.b=t)}function NN(n,t){return n[n.length]=t}function $N(n,t){return n[n.length]=t}function DN(n,t){return Ern(t,h0(n))}function xN(n,t){return Ern(t,h0(n))}function RN(n,t){return kan(UW(n.d),t)}function KN(n,t){return kan(UW(n.g),t)}function FN(n,t){return kan(UW(n.j),t)}function _N(n,t){uF.call(this,n.b,t)}function BN(n,t){ttn(z5(n.a),v2(t))}function HN(n,t){ttn(Aen(n.a),k2(t))}function UN(n,t,e){kN(e,e.i+n,e.j+t)}function GN(n,t,e){uQ(n.c[t.g],t.g,e)}function qN(n,t,e){uG(n.c,71).Gi(t,e)}function XN(n,t,e){return uQ(n,t,e),e}function zN(n){Prn(n.Sf(),new Od(n))}function VN(n){return null!=n?Hon(n):0}function WN(n){return null==n?0:Hon(n)}function QN(n){QYn(),Qm.call(this,n)}function JN(n){this.a=n,WU.call(this,n)}function YN(){YN=E,e.Math.log(2)}function ZN(){ZN=E,kP(),rBt=WKt}function n$(){n$=E,vSt=new rpn(kxt)}function t$(){t$=E,new e$,new Zm}function e$(){new Ym,new Ym,new Ym}function i$(){throw hv(new TM(hat))}function r$(){throw hv(new TM(hat))}function c$(){throw hv(new TM(fat))}function a$(){throw hv(new TM(fat))}function o$(n){this.a=n,VE.call(this,n)}function u$(n){this.a=n,VE.call(this,n)}function s$(n,t){ZW(),this.a=n,this.b=t}function h$(n,t){WW(t),uY(n).Jc(new b)}function f$(n,t){UX(n.c,n.c.length,t)}function l$(n){return n.at?1:0}function g$(n,t){return dwn(n,t)>0?n:t}function p$(n,t,e){return{l:n,m:t,h:e}}function m$(n,t){null!=n.a&&MA(t,n.a)}function v$(n){c2(n,null),u2(n,null)}function k$(n,t,e){return vJ(n.g,e,t)}function y$(n,t,e){return avn(t,e,n.c)}function M$(n,t,e){return vJ(n.k,e,t)}function T$(n,t,e){return gWn(n,t,e),e}function j$(n,t){return n2(),t.n.b+=n}function E$(n){HZ.call(this),this.b=n}function S$(n){LF.call(this),this.a=n}function P$(){qP.call(this,"Range",2)}function C$(n){this.b=n,this.a=new Zm}function I$(n){this.b=new tt,this.a=n}function O$(n){n.a=new R,n.c=new R}function A$(n){n.a=new Ym,n.d=new Ym}function L$(n){s2(n,null),h2(n,null)}function N$(n,t){return kWn(n.a,t,null)}function $$(n,t){return vJ(n.a,t.a,t)}function D$(n){return new MO(n.a,n.b)}function x$(n){return new MO(n.c,n.d)}function R$(n){return new MO(n.c,n.d)}function K$(n,t){return rVn(n.c,n.b,t)}function F$(n,t){return null!=n&&Eyn(n,t)}function _$(n,t){return-1!=Yhn(n.Kc(),t)}function B$(n){return n.Ob()?n.Pb():null}function H$(n){this.b=(hZ(),new Vw(n))}function U$(n){this.a=n,Ym.call(this)}function G$(){zx.call(this,null,null)}function q$(){Vx.call(this,null,null)}function X$(){_E.call(this,"INSTANCE",0)}function z$(){FEn(),this.a=new mKn(Llt)}function V$(n){return mvn(n,0,n.length)}function W$(n,t){return new ex(n.Kc(),t)}function Q$(n,t){return null!=n.a.Bc(t)}function J$(n,t){Czn(n),n.Gc(uG(t,15))}function Y$(n,t,e){n.c.bd(t,uG(e,136))}function Z$(n,t,e){n.c.Ui(t,uG(e,136))}function nD(n,t){n.c&&(cq(t),B1(t))}function tD(n,t){n.q.setHours(t),Iqn(n,t)}function eD(n,t){KR(t,n.a.a.a,n.a.a.b)}function iD(n,t,e,i){uQ(n.a[t.g],e.g,i)}function rD(n,t,e){return n.a[t.g][e.g]}function cD(n,t){return n.e[t.c.p][t.p]}function aD(n,t){return n.c[t.c.p][t.p]}function oD(n,t){return n.a[t.c.p][t.p]}function uD(n,t){return n.j[t.p]=oRn(t)}function sD(n,t){return null!=n.a.Bc(t)}function hD(n,t){return uM(pK(t.a))<=n}function fD(n,t){return uM(pK(t.a))>=n}function lD(n,t){return r7(n.f,t.Pg())}function bD(n,t){return n.a*t.a+n.b*t.b}function wD(n,t){return n.a0?t/(n*n):100*t}function jR(n,t){return n>0?t*t/n:t*t*100}function ER(n,t){return uG(ain(n.a,t),34)}function SR(n,t){return jIn(),UNn(n,t.e,t)}function PR(n,t,e){return ZS(),e.Mg(n,t)}function CR(n){return tcn(),n.e.a+n.f.a/2}function IR(n,t,e){return tcn(),e.e.a-n*t}function OR(n){return tcn(),n.e.b+n.f.b/2}function AR(n,t,e){return tcn(),e.e.b-n*t}function LR(n){n.d=new bR(n),n.e=new Ym}function NR(){this.a=new K1,this.b=new K1}function $R(n){this.c=n,this.a=1,this.b=1}function DR(n){aYn(),dv(this),this.Ff(n)}function xR(n,t,e){Stn(),n.pf(t)&&e.Cd(n)}function RR(n,t,e){return kD(t,xpn(n,e))}function KR(n,t,e){return n.a+=t,n.b+=e,n}function FR(n,t,e){return n.a*=t,n.b*=e,n}function _R(n,t){return n.a=t.a,n.b=t.b,n}function BR(n){return n.a=-n.a,n.b=-n.b,n}function HR(n,t,e){return n.a-=t,n.b-=e,n}function UR(n){lS.call(this),dan(this,n)}function GR(){_E.call(this,"GROW_TREE",0)}function qR(){_E.call(this,"POLYOMINO",0)}function XR(n,t,e){ltn.call(this,n,t,e,2)}function zR(n,t,e){$dn(z5(n.a),t,v2(e))}function VR(n,t){jP(),zx.call(this,n,t)}function WR(n,t){EP(),Vx.call(this,n,t)}function QR(n,t){EP(),WR.call(this,n,t)}function JR(n,t){EP(),Vx.call(this,n,t)}function YR(n,t){return n.c.Fc(uG(t,136))}function ZR(n,t,e){$dn(Aen(n.a),t,k2(e))}function nK(n){this.c=n,ycn(n,0),Mcn(n,0)}function tK(n,t){ZN(),OX.call(this,n,t)}function eK(n,t){ZN(),tK.call(this,n,t)}function iK(n,t){ZN(),tK.call(this,n,t)}function rK(n,t){ZN(),OX.call(this,n,t)}function cK(n,t){ZN(),iK.call(this,n,t)}function aK(n,t){ZN(),rK.call(this,n,t)}function oK(n,t){ZN(),OX.call(this,n,t)}function uK(n,t,e){return t.zl(n.e,n.c,e)}function sK(n,t,e){return t.Al(n.e,n.c,e)}function hK(n,t,e){return QXn(Len(n,t),e)}function fK(n,t){return mwn(n.e,uG(t,54))}function lK(n){return null==n?null:AQn(n)}function bK(n){return null==n?null:mOn(n)}function wK(n){return null==n?null:cpn(n)}function dK(n){return null==n?null:cpn(n)}function gK(n){return Fq(null==n||KA(n)),n}function pK(n){return Fq(null==n||FA(n)),n}function mK(n){return Fq(null==n||RA(n)),n}function vK(n){null==n.o&&axn(n)}function kK(n){if(!n)throw hv(new Dv)}function yK(n){if(!n)throw hv(new Nv)}function MK(n){if(!n)throw hv(new Bv)}function TK(n){if(!n)throw hv(new xv)}function jK(n){if(!n)throw hv(new Fv)}function EK(){EK=E,KFt=new Gk,new qk}function SK(){SK=E,zCt=new Cm("root")}function PK(){Kan.call(this),this.Bb|=P0n}function CK(n,t){this.d=n,Cw(this),this.b=t}function IK(n,t){Fnn.call(this,n),this.a=t}function OK(n,t){Fnn.call(this,n),this.a=t}function AK(n,t,e){A7.call(this,n,t,e,null)}function LK(n,t,e){A7.call(this,n,t,e,null)}function NK(n,t){this.c=n,OE.call(this,n,t)}function $K(n,t){this.a=n,NK.call(this,n,t)}function DK(n){this.q=new e.Date(W4(n))}function xK(n){return n>8?0:n+1}function RK(n,t){Nut||kD(n.a,t)}function KK(n,t){return WS(),jsn(t.d.i,n)}function FK(n,t){return Pun(),new oHn(t,n)}function _K(n,t,e){return n.Ne(t,e)<=0?e:t}function BK(n,t,e){return n.Ne(t,e)<=0?t:e}function HK(n,t){return uG(ain(n.b,t),143)}function UK(n,t){return uG(ain(n.c,t),233)}function GK(n){return uG(zq(n.a,n.b),294)}function qK(n){return new MO(n.c,n.d+n.a)}function XK(n){return tJ(n),n?1231:1237}function zK(n){return n2(),lN(uG(n,203))}function VK(){VK=E,lht=ggn((Qmn(),JRt))}function WK(n,t){t.a?W$n(n,t):sD(n.a,t.b)}function QK(n,t,e){++n.j,n.tj(),Ann(n,t,e)}function JK(n,t,e){++n.j,n.qj(t,n.Zi(t,e))}function YK(n,t,e){n.fd(t).Rb(e)}function ZK(n,t,e){return e=$Un(n,t,6,e)}function nF(n,t,e){return e=$Un(n,t,3,e)}function tF(n,t,e){return e=$Un(n,t,9,e)}function eF(n,t){return ZZ(t,W2n),n.f=t,n}function iF(n,t){return(t&vZn)%n.d.length}function rF(n,t,e){return fXn(n.c,n.b,t,e)}function cF(n,t){this.c=n,Drn.call(this,t)}function aF(n,t){this.a=n,xm.call(this,t)}function oF(n,t){this.a=n,xm.call(this,t)}function uF(n,t){Cm.call(this,n),this.a=t}function sF(n,t){Bm.call(this,n),this.a=t}function hF(n,t){Bm.call(this,n),this.a=t}function fF(n){smn.call(this,0,0),this.f=n}function lF(n,t,e){return n.a+=mvn(t,0,e),n}function bF(n){return!n.a&&(n.a=new M),n.a}function wF(n,t){var e;return e=n.e,n.e=t,e}function dF(n,t){var e;return e=t,!!n.Fe(e)}function gF(n,t){return qx(),n==t?0:n?1:-1}function pF(n,t){n.a.bd(n.b,t),++n.b,n.c=-1}function mF(n){n.b?mF(n.b):n.f.c.zc(n.e,n.d)}function vF(n){$V(n.e),n.d.b=n.d,n.d.a=n.d}function kF(n,t,e){vS(),Ob(n,t.Ve(n.a,e))}function yF(n,t,e){return UV(n,uG(t,22),e)}function MF(n,t){return aT(new Array(t),n)}function TF(n){return pz(Dz(n,32))^pz(n)}function jF(n){return String.fromCharCode(n)}function EF(n){return null==n?null:n.message}function SF(n,t,e){return n.apply(t,e)}function PF(n,t){n[U0n].call(n,t)}function CF(n,t){n[U0n].call(n,t)}function IF(n,t){return WS(),!jsn(t.d.i,n)}function OF(n,t,e,i){lX.call(this,n,t,e,i)}function AF(){HF.call(this),this.a=new sj}function LF(){this.n=new sj,this.o=new sj}function NF(){this.b=new sj,this.c=new Zm}function $F(){this.a=new Zm,this.b=new Zm}function DF(){this.a=new lt,this.b=new qv}function xF(){this.b=new u8,this.a=new u8}function RF(){this.b=new ek,this.a=new ek}function KF(){this.b=new Ym,this.a=new Ym}function FF(){this.b=new Gj,this.a=new Ma}function _F(){this.a=new hl,this.b=new oc}function BF(){this.a=new Zm,this.d=new Zm}function HF(){this.n=new Dk,this.i=new cN}function UF(n){this.a=(man(n,g1n),new R7(n))}function GF(n){this.a=(man(n,g1n),new R7(n))}function qF(n){return n<100?null:new cj(n)}function XF(n,t){return n.n.a=(tJ(t),t+10)}function zF(n,t){return n.n.a=(tJ(t),t+10)}function VF(n,t){return t==n||sSn(mRn(t),n)}function WF(n,t){return null==vJ(n.a,t,"")}function QF(n,t){return t.qi(n.a)}function JF(n,t){return n.a+=t.a,n.b+=t.b,n}function YF(n,t){return n.a-=t.a,n.b-=t.b,n}function ZF(n){return Xv(n.j.c,0),n.a=-1,n}function n_(n,t,e){return e=$Un(n,t,11,e)}function t_(n,t,e){null!=e&&Xan(t,gTn(n,e))}function e_(n,t,e){null!=e&&zan(t,gTn(n,e))}function i_(n,t,e,i){fV.call(this,n,t,e,i)}function r_(n,t,e,i){fV.call(this,n,t,e,i)}function c_(n,t,e,i){r_.call(this,n,t,e,i)}function a_(n,t,e,i){wV.call(this,n,t,e,i)}function o_(n,t,e,i){wV.call(this,n,t,e,i)}function u_(n,t,e,i){wV.call(this,n,t,e,i)}function s_(n,t,e,i){o_.call(this,n,t,e,i)}function h_(n,t,e,i){o_.call(this,n,t,e,i)}function f_(n,t,e,i){u_.call(this,n,t,e,i)}function l_(n,t,e,i){h_.call(this,n,t,e,i)}function b_(n,t,e,i){kV.call(this,n,t,e,i)}function w_(n,t){dM.call(this,Hit+n+Vet+t)}function d_(n,t){return n.jk().wi().ri(n,t)}function g_(n,t){return n.jk().wi().ti(n,t)}function p_(n,t){return tJ(n),xA(n)===xA(t)}function m_(n,t){return tJ(n),xA(n)===xA(t)}function v_(n,t){return n.b.Bd(new QP(n,t))}function k_(n,t){return n.b.Bd(new JP(n,t))}function y_(n,t){return n.b.Bd(new YP(n,t))}function M_(n,t){return n.e=uG(n.d.Kb(t),159)}function T_(n,t,e){return n.lastIndexOf(t,e)}function j_(n,t,e){return ugn(n[t.a],n[e.a])}function E_(n,t){return kfn(t,(jYn(),Oyt),n)}function S_(n,t){return d$(t.a.d.p,n.a.d.p)}function P_(n,t){return d$(n.a.d.p,t.a.d.p)}function C_(n,t){return ugn(n.c-n.s,t.c-t.s)}function I_(n,t){return ugn(n.b.e.a,t.b.e.a)}function O_(n,t){return ugn(n.c.e.a,t.c.e.a)}function A_(n){return n.c?Ten(n.c.a,n,0):-1}function L_(n){return n==rRt||n==aRt||n==cRt}function N_(n,t){this.c=n,QV.call(this,n,t)}function $_(n,t,e){this.a=n,Qx.call(this,t,e)}function D_(n){this.c=n,rL.call(this,YZn,0)}function x_(n,t,e){this.c=t,this.b=e,this.a=n}function R_(n){PU(),this.d=n,this.a=new ND}function K_(n){sB(),this.a=(hZ(),new nT(n))}function F_(n,t){hN(n.f)?JDn(n,t):wCn(n,t)}function __(n,t){sG.call(this,n,n.length,t)}function B_(n,t){Nut||t&&(n.d=t)}function H_(n,t){return F$(t,15)&&G_n(n.c,t)}function U_(n,t,e){return uG(n.c,71).Wk(t,e)}function G_(n,t,e){return uG(n.c,71).Xk(t,e)}function q_(n,t,e){return uK(n,uG(t,343),e)}function X_(n,t,e){return sK(n,uG(t,343),e)}function z_(n,t,e){return yPn(n,uG(t,343),e)}function V_(n,t,e){return FCn(n,uG(t,343),e)}function W_(n,t){return null==t?null:Xwn(n.b,t)}function Q_(n){return FA(n)?(tJ(n),n):n.ue()}function J_(n){return!isNaN(n)&&!isFinite(n)}function Y_(n){O$(this),BY(this),Qon(this,n)}function Z_(n){IN(this),dG(this.c,0,n.Pc())}function nB(n,t,e){this.a=n,this.b=t,this.c=e}function tB(n,t,e){this.a=n,this.b=t,this.c=e}function eB(n,t,e){this.d=n,this.b=e,this.a=t}function iB(n){this.a=n,bS(),Bsn(Date.now())}function rB(n){LQ(n.a),Lnn(n.c,n.b),n.b=null}function cB(){cB=E,out=new K,uut=new F}function aB(){aB=E,DFt=Inn(dat,EZn,1,0,5,1)}function oB(){oB=E,X_t=Inn(dat,EZn,1,0,5,1)}function uB(){uB=E,z_t=Inn(dat,EZn,1,0,5,1)}function sB(){sB=E,new jv((hZ(),hZ(),zot))}function hB(n){return Rtn(),Fcn((xtn(),Mut),n)}function fB(n){return ybn(),Fcn((bnn(),xut),n)}function lB(n){return _kn(),Fcn((k8(),Jut),n)}function bB(n){return Xin(),Fcn((y8(),tst),n)}function wB(n){return W_n(),Fcn((uhn(),kst),n)}function dB(n){return Yrn(),Fcn((fnn(),Cst),n)}function gB(n){return Ktn(),Fcn((hnn(),Dst),n)}function pB(n){return Yen(),Fcn((lnn(),Bst),n)}function mB(n){return JYn(),Fcn((fL(),fht),n)}function vB(n){return ehn(),Fcn((_tn(),vht),n)}function kB(n){return vyn(),Fcn((Htn(),Eht),n)}function yB(n){return myn(),Fcn((Btn(),Rht),n)}function MB(n){return BS(),Fcn((r6(),_ht),n)}function TB(n){return zin(),Fcn((M8(),vft),n)}function jB(n){return Jen(),Fcn((wnn(),vlt),n)}function EB(n){return uIn(),Fcn(($in(),Ilt),n)}function SB(n){return Xhn(),Fcn((Gtn(),Glt),n)}function PB(n){return Uvn(),Fcn((Utn(),ibt),n)}function CB(n,t){if(!n)throw hv(new vM(t))}function IB(n){if(!n)throw hv(new kM(PZn))}function OB(n,t){if(n!=t)throw hv(new Fv)}function AB(n,t,e){this.a=n,this.b=t,this.c=e}function LB(n,t,e){this.a=n,this.b=t,this.c=e}function NB(n,t,e){this.a=n,this.b=t,this.c=e}function $B(n,t,e){this.b=n,this.a=t,this.c=e}function DB(n,t,e){this.b=n,this.c=t,this.a=e}function xB(n,t,e){this.a=n,this.b=t,this.c=e}function RB(n,t,e){this.e=t,this.b=n,this.d=e}function KB(n,t,e){this.b=n,this.a=t,this.c=e}function FB(n,t,e){return vS(),n.a.Yd(t,e),t}function _B(n){var t;return(t=new yn).e=n,t}function BB(n){var t;return(t=new pk).b=n,t}function HB(){HB=E,Nbt=new $e,$bt=new De}function UB(){UB=E,Jwt=new ui,Qwt=new si}function GB(){GB=E,rdt=new mr,cdt=new vr}function qB(n){return gon(),Fcn((q7(),Cdt),n)}function XB(n){return zYn(),Fcn((lL(),_wt),n)}function zB(n){return Ghn(),Fcn((Xtn(),Wwt),n)}function VB(n){return qhn(),Fcn((qtn(),ldt),n)}function WB(n){return gPn(),Fcn((Din(),vdt),n)}function QB(n){return h_n(),Fcn((osn(),Kdt),n)}function JB(n){return vAn(),Fcn((ecn(),zdt),n)}function YB(n){return H7(),Fcn((I8(),Jdt),n)}function ZB(n){return jan(),Fcn((U7(),egt),n)}function nH(n){return ran(),Fcn((G7(),ogt),n)}function tH(n){return kvn(),Fcn((xin(),wgt),n)}function eH(n){return Vin(),Fcn((E8(),mgt),n)}function iH(n){return RIn(),Fcn((ccn(),Jgt),n)}function rH(n){return r_n(),Fcn((Efn(),spt),n)}function cH(n){return ihn(),Fcn((z7(),wpt),n)}function aH(n){return Zen(),Fcn((V7(),vpt),n)}function oH(n){return Y6(),Fcn((j8(),Tpt),n)}function uH(n){return ESn(),Fcn((rcn(),Ugt),n)}function sH(n){return Pfn(),Fcn((X7(),Tgt),n)}function hH(n){return tOn(),Fcn((icn(),Agt),n)}function fH(n){return Wtn(),Fcn((S8(),Dgt),n)}function lH(n){return Gpn(),Fcn((Kin(),$mt),n)}function bH(n){return MKn(),Fcn((chn(),ojt),n)}function wH(n){return Cwn(),Fcn((W7(),ljt),n)}function dH(n){return Yyn(),Fcn((ztn(),mjt),n)}function gH(n){return pyn(),Fcn((Rin(),Ejt),n)}function pH(n){return THn(),Fcn((Sfn(),Rjt),n)}function mH(n){return yvn(),Fcn((Vtn(),Ujt),n)}function vH(n){return nin(),Fcn((P8(),zjt),n)}function kH(n){return can(),Fcn((Y7(),Yjt),n)}function yH(n){return isn(),Fcn((Q7(),iEt),n)}function MH(n){return Sln(),Fcn((J7(),uEt),n)}function TH(n){return kbn(),Fcn((Z7(),bEt),n)}function jH(n){return ian(),Fcn((nnn(),mEt),n)}function EH(n){return zhn(),Fcn((tnn(),TEt),n)}function SH(n){return ean(),Fcn((snn(),GEt),n)}function PH(n){return Z6(),Fcn((C8(),nSt),n)}function CH(n){return b0(),Fcn((L8(),bSt),n)}function IH(n){return w0(),Fcn((N8(),pSt),n)}function OH(n){return _7(),Fcn(($8(),RSt),n)}function AH(n){return l0(),Fcn((D8(),XSt),n)}function LH(n){return Cjn(),Fcn((sen(),YSt),n)}function NH(n){return OHn(),Fcn((bL(),bPt),n)}function $H(n){return Pln(),Fcn((enn(),mPt),n)}function DH(n){return mbn(),Fcn((uen(),KCt),n)}function xH(n){return i3(),Fcn((O8(),HCt),n)}function RH(n){return pon(),Fcn((A8(),JCt),n)}function KH(n){return zPn(),Fcn((Fin(),rIt),n)}function FH(n){return vbn(),Fcn((inn(),bIt),n)}function _H(n){return Ptn(),Fcn((x8(),uIt),n)}function BH(n){return dTn(),Fcn((oen(),tOt),n)}function HH(n){return esn(),Fcn((rnn(),aOt),n)}function UH(n){return Jmn(),Fcn((cnn(),fOt),n)}function GH(n){return Zyn(),Fcn((ann(),gOt),n)}function qH(n){return Bgn(),Fcn((onn(),LOt),n)}function XH(n){return a9(),Fcn((R8(),jAt),n)}function zH(n){return Aun(),Fcn((T8(),Lbt),n)}function VH(n){return zIn(),Fcn((acn(),mbt),n)}function WH(n){return den(),Fcn((unn(),IAt),n)}function QH(n){return rhn(),Fcn((K8(),NAt),n)}function JH(n){return _Rn(),Fcn((_in(),BAt),n)}function YH(n){return nP(),Fcn(($6(),WAt),n)}function ZH(n){return Rdn(),Fcn((gnn(),XAt),n)}function nU(n){return tP(),Fcn((D6(),YAt),n)}function tU(n){return B7(),Fcn((F8(),eLt),n)}function eU(n){return pOn(),Fcn((Bin(),sLt),n)}function iU(n){return eP(),Fcn((x6(),XLt),n)}function rU(n){return Vhn(),Fcn((_8(),QLt),n)}function cU(n){return Rkn(),Fcn((Uin(),bNt),n)}function aU(n){return lAn(),Fcn((csn(),TNt),n)}function oU(n){return nMn(),Fcn((ocn(),DNt),n)}function uU(n){return ZSn(),Fcn((ucn(),t$t),n)}function sU(n){return xdn(),Fcn((Hin(),ext),n)}function hU(n){return Zrn(),Fcn((pnn(),oxt),n)}function fU(n){return _gn(),Fcn((hen(),bxt),n)}function lU(n){return RCn(),Fcn((scn(),yxt),n)}function bU(n){return Own(),Fcn((dnn(),Nxt),n)}function wU(n){return Ajn(),Fcn((fen(),Fxt),n)}function dU(n){return VDn(),Fcn((ohn(),Qxt),n)}function gU(n){return Vkn(),Fcn((Gin(),iRt),n)}function pU(n){return $Pn(),Fcn((hcn(),fRt),n)}function mU(n){return eNn(),Fcn((fcn(),vRt),n)}function vU(n){return KQn(),Fcn((qin(),HRt),n)}function kU(n){return Qmn(),Fcn((len(),ZRt),n)}function yU(n){return aUn(),Fcn((ahn(),hKt),n)}function MU(n){return Iwn(),Fcn((mnn(),dKt),n)}function TU(n,t){return tJ(n),n+(tJ(t),t)}function jU(n){return CU(),Fcn((B8(),vKt),n)}function EU(n){return qpn(),Fcn((ben(),EKt),n)}function SU(n){return Eln(),Fcn((wen(),LKt),n)}function PU(){PU=E,KQn(),zEt=_Rt,VEt=kRt}function CU(){CU=E,gKt=new Pq,pKt=new gV}function IU(n){return!n.e&&(n.e=new Zm),n.e}function OU(n,t){this.c=n,this.a=t,this.b=t-n}function AU(n,t,e){this.a=n,this.b=t,this.c=e}function LU(n,t,e){this.a=n,this.b=t,this.c=e}function NU(n,t,e){this.a=n,this.b=t,this.c=e}function $U(n,t,e){this.a=n,this.b=t,this.c=e}function DU(n,t,e){this.a=n,this.b=t,this.c=e}function xU(n,t,e){this.a=n,this.b=t,this.c=e}function RU(n,t,e){this.e=n,this.a=t,this.c=e}function KU(n,t,e){ZN(),_1.call(this,n,t,e)}function FU(n,t,e){ZN(),CQ.call(this,n,t,e)}function _U(n,t,e){ZN(),CQ.call(this,n,t,e)}function BU(n,t,e){ZN(),CQ.call(this,n,t,e)}function HU(n,t,e){ZN(),FU.call(this,n,t,e)}function UU(n,t,e){ZN(),FU.call(this,n,t,e)}function GU(n,t,e){ZN(),UU.call(this,n,t,e)}function qU(n,t,e){ZN(),_U.call(this,n,t,e)}function XU(n,t,e){ZN(),BU.call(this,n,t,e)}function zU(n){lX.call(this,n.d,n.c,n.a,n.b)}function VU(n){lX.call(this,n.d,n.c,n.a,n.b)}function WU(n){this.d=n,Cw(this),this.b=Ez(n.d)}function QU(n){return rDn(),Fcn((asn(),SFt),n)}function JU(n,t){return WW(n),WW(t),new jE(n,t)}function YU(n,t){return WW(n),WW(t),new WG(n,t)}function ZU(n,t){return WW(n),WW(t),new QG(n,t)}function nG(n,t){return WW(n),WW(t),new DE(n,t)}function tG(n){return MK(0!=n.b),Lrn(n,n.a.a)}function eG(n){return MK(0!=n.b),Lrn(n,n.c.b)}function iG(n){return!n.c&&(n.c=new Ks),n.c}function rG(n){var t;return cin(t=new Zm,n),t}function cG(n){var t;return cin(t=new ek,n),t}function aG(n){var t;return Fon(t=new rk,n),t}function oG(n){var t;return Fon(t=new lS,n),t}function uG(n,t){return Fq(null==n||Eyn(n,t)),n}function sG(n,t,e){_z.call(this,t,e),this.a=n}function hG(n,t){this.c=n,this.b=t,this.a=!1}function fG(){this.a=";,;",this.b="",this.c=""}function lG(n,t,e){this.b=n,eL.call(this,t,e)}function bG(n,t,e){this.c=n,VP.call(this,t,e)}function wG(n,t,e){FC.call(this,n,t),this.b=e}function dG(n,t,e){b$n(e,0,n,t,e.length,!1)}function gG(n,t,e,i,r){n.b=t,n.c=e,n.d=i,n.a=r}function pG(n,t,e,i,r){n.d=t,n.c=e,n.a=i,n.b=r}function mG(n,t){t&&(n.b=t,n.a=(GQ(t),t.a))}function vG(n,t){if(!n)throw hv(new vM(t))}function kG(n,t){if(!n)throw hv(new kM(t))}function yG(n,t){if(!n)throw hv(new gM(t))}function MG(n,t){return YS(),d$(n.d.p,t.d.p)}function TG(n,t){return tcn(),ugn(n.e.b,t.e.b)}function jG(n,t){return tcn(),ugn(n.e.a,t.e.a)}function EG(n,t){return d$(wq(n.d),wq(t.d))}function SG(n,t){return t&&$Q(n,t.d)?t:null}function PG(n,t){return t==(KQn(),_Rt)?n.c:n.d}function CG(n){return Esn(LV(_L(n)?Gsn(n):n))}function IG(n){return new MO(n.c+n.b,n.d+n.a)}function OG(n){return null!=n&&!mpn(n,n_t,t_t)}function AG(n,t){return(ldn(n)<<4|ldn(t))&D1n}function LG(n,t,e,i,r){n.c=t,n.d=e,n.b=i,n.a=r}function NG(n){var t,e;t=n.b,e=n.c,n.b=e,n.c=t}function $G(n){var t,e;e=n.d,t=n.a,n.d=t,n.a=e}function DG(n,t){var e;return e=n.c,Jan(n,t),e}function xG(n,t){return n.g=t<0?-1:t,n}function RG(n,t){return Brn(n),n.a*=t,n.b*=t,n}function KG(n,t,e){Orn.call(this,t,e),this.d=n}function FG(n,t,e){LA.call(this,n,t),this.c=e}function _G(n,t,e){LA.call(this,n,t),this.c=e}function BG(n){uB(),ps.call(this),this.ci(n)}function HG(){N7(),OQ.call(this,(MP(),l_t))}function UG(n){return QYn(),new IX(0,n)}function GG(){GG=E,hZ(),CBt=new Xw(bct)}function qG(){qG=E,new Gyn((my(),Tat),(py(),Mat))}function XG(){XG=E,bot=Inn(dot,zZn,17,256,0,1)}function zG(){this.b=uM(pK(Jkn((rGn(),Bft))))}function VG(n){this.b=n,this.a=Mz(this.b.a).Od()}function WG(n,t){this.b=n,this.a=t,Ff.call(this)}function QG(n,t){this.a=n,this.b=t,Ff.call(this)}function JG(n,t,e){this.a=n,vL.call(this,t,e)}function YG(n,t,e){this.a=n,vL.call(this,t,e)}function ZG(n,t,e){nrn(n,t,new QW(e))}function nq(n,t,e){var i;return i=n[t],n[t]=e,i}function tq(n){return Ltn(n.slice(),n)}function eq(n){var t;return t=n.n,n.a.b+t.d+t.a}function iq(n){var t;return t=n.n,n.e.b+t.d+t.a}function rq(n){var t;return t=n.n,n.e.a+t.b+t.c}function cq(n){n.a.b=n.b,n.b.a=n.a,n.a=n.b=null}function aq(n,t){return s8(n,t,n.c.b,n.c),!0}function oq(n){return n.a?n.a:sY(n)}function uq(n){return lZ(),bIn(n)==R0(gIn(n))}function sq(n){return lZ(),gIn(n)==R0(bIn(n))}function hq(n,t){return CEn(n,new FC(t.a,t.b))}function fq(n,t){return TJ(),IMn(n,t),new bJ(n,t)}function lq(n,t){return n.c=t)throw hv(new Ik)}function Wz(n,t){return cdn(n,(tJ(t),new ud(t)))}function Qz(n,t){return cdn(n,(tJ(t),new sd(t)))}function Jz(n,t,e){return BYn(n,uG(t,12),uG(e,12))}function Yz(n){return Lun(),0!=uG(n,12).g.c.length}function Zz(n){return Lun(),0!=uG(n,12).e.c.length}function nV(n,t){return Pun(),ugn(t.a.o.a,n.a.o.a)}function tV(n,t){t.Bb&Qtt&&!n.a.o&&(n.a.o=t)}function eV(n,t){t.Ug("General 'Rotator",1),lQn(n)}function iV(n,t,e){t.qf(e,uM(pK(cQ(n.b,e)))*n.a)}function rV(n,t,e){return l_n(),qun(n,t)&&qun(n,e)}function cV(n){return eNn(),!n.Hc(wRt)&&!n.Hc(gRt)}function aV(n){return n.e?T7(n.e):null}function oV(n){return _L(n)?""+n:K_n(n)}function uV(n){var t;for(t=n;t.f;)t=t.f;return t}function sV(n,t,e){return uQ(t,0,nX(t[0],e[0])),t}function hV(n,t,e,i){var r;(r=n.i).i=t,r.a=e,r.b=i}function fV(n,t,e,i){MD.call(this,n,t,e),this.b=i}function lV(n,t,e,i,r){btn.call(this,n,t,e,i,r,-1)}function bV(n,t,e,i,r){wtn.call(this,n,t,e,i,r,-1)}function wV(n,t,e,i){FG.call(this,n,t,e),this.b=i}function dV(n){lA.call(this,n,!1),this.a=!1}function gV(){BO.call(this,"LOOKAHEAD_LAYOUT",1)}function pV(n){this.b=n,Zx.call(this,n),qD(this)}function mV(n){this.b=n,tR.call(this,n),XD(this)}function vV(n,t,e){this.a=n,i_.call(this,t,e,5,6)}function kV(n,t,e,i){this.b=n,MD.call(this,t,e,i)}function yV(n,t){this.b=n,fb.call(this,n.b),this.a=t}function MV(n){this.a=Fyn(n.a),this.b=new Z_(n.b)}function TV(n,t){ZW(),UE.call(this,n,Dwn(new IM(t)))}function jV(n,t){return QYn(),new PQ(n,t,0)}function EV(n,t){return QYn(),new PQ(6,n,t)}function SV(n,t){for(tJ(t);n.Ob();)t.Cd(n.Pb())}function PV(n,t){return RA(t)?AZ(n,t):!!FX(n.f,t)}function CV(n,t){return t.Vh()?mwn(n.b,uG(t,54)):t}function IV(n,t){return m_(n.substr(0,t.length),t)}function OV(n){return new Fz(new YD(n.a.length,n.a))}function AV(n){return new MO(n.c+n.b/2,n.d+n.a/2)}function LV(n){return p$(~n.l&f0n,~n.m&f0n,~n.h&l0n)}function NV(n){return typeof n===wZn||typeof n===mZn}function $V(n){n.f=new nN(n),n.i=new tN(n),++n.g}function DV(n){if(!n)throw hv(new Bv);return n.d}function xV(n){var t;return MK(null!=(t=Rfn(n))),t}function RV(n){var t;return MK(null!=(t=sgn(n))),t}function KV(n,t){var e;return e7(t,e=n.a.gc()),e-t}function FV(n,t){return null==n.a.zc(t,n)}function _V(n,t){return null==n.a.zc(t,(qx(),tot))}function BV(n){return new fX(null,oW(n,n.length))}function HV(n,t,e){return HXn(n,uG(t,42),uG(e,176))}function UV(n,t,e){return Mon(n.a,t),nq(n.b,t.g,e)}function GV(n,t,e){Vz(e,n.a.c.length),Y8(n.a,e,t)}function qV(n,t,e,i){ubn(t,e,n.length),XV(n,t,e,i)}function XV(n,t,e,i){var r;for(r=t;r0?e.Math.log(n/t):-100}function rW(n,t){return dwn(n,t)<0?-1:dwn(n,t)>0?1:0}function cW(n,t){J$(n,F$(t,160)?t:uG(t,2036).Rl())}function aW(n,t){if(null==n)throw hv(new MM(t))}function oW(n,t){return $rn(t,n.length),new Sq(n,t)}function uW(n,t){return!!t&&Qon(n,t)}function sW(){return Hy(),Uhn(cT(Lat,1),p1n,549,0,[Iat])}function hW(n){return 0==n.e?n:new VV(-n.e,n.d,n.a)}function fW(n,t){return ugn(n.c.c+n.c.b,t.c.c+t.c.b)}function lW(n,t){s8(n.d,t,n.b.b,n.b),++n.a,n.c=null}function bW(n,t){return n.c?bW(n.c,t):kD(n.b,t),n}function wW(n,t,e){var i;return i=uin(n,t),W5(n,t,e),i}function dW(n,t,e){var i;for(i=0;i=n.g}function uQ(n,t,e){return yK(null==e||cGn(n,e)),n[t]=e}function sQ(n,t){return s3(t,n.length+1),n.substr(t)}function hQ(n,t){for(tJ(t);n.c=n?new mS:ton(n-1)}function HQ(n){return!n.a&&n.c?n.c.b:n.a}function UQ(n){return F$(n,616)?n:new e0(n)}function GQ(n){n.c?GQ(n.c):(vgn(n),n.d=!0)}function qQ(n){n.c?n.c.$e():(n.d=!0,uKn(n))}function XQ(n){n.b=!1,n.c=!1,n.d=!1,n.a=!1}function zQ(n){return n.c.i.c==n.d.i.c}function VQ(n,t){var e;(e=n.Ih(t))>=0?n.ki(e):zLn(n,t)}function WQ(n,t){n.c<0||n.b.b0;)n=n<<1|(n<0?1:0);return n}function CJ(n,t){var e;return e=new bQ(n),mv(t.c,e),e}function IJ(n,t){n.u.Hc((eNn(),wRt))&&vNn(n,t),knn(n,t)}function OJ(n,t){return xA(n)===xA(t)||null!=n&&udn(n,t)}function AJ(n,t){return RX(n.a,t)?n.b[uG(t,22).g]:null}function LJ(){return BS(),Uhn(cT(oft,1),p1n,489,0,[Kht])}function NJ(){return nP(),Uhn(cT(JAt,1),p1n,490,0,[zAt])}function $J(){return tP(),Uhn(cT(tLt,1),p1n,558,0,[QAt])}function DJ(){return eP(),Uhn(cT(WLt,1),p1n,539,0,[GLt])}function xJ(n){return!n.n&&(n.n=new fV(lFt,n,1,7)),n.n}function RJ(n){return!n.c&&(n.c=new fV(wFt,n,9,9)),n.c}function KJ(n){return!n.c&&(n.c=new f_(cFt,n,5,8)),n.c}function FJ(n){return!n.b&&(n.b=new f_(cFt,n,4,7)),n.b}function _J(n){return n.j.c.length=0,oY(n.c),ZF(n.a),n}function BJ(n){return n.e==wct&&kw(n,akn(n.g,n.b)),n.e}function HJ(n){return n.f==wct&&Mw(n,tEn(n.g,n.b)),n.f}function UJ(n,t,e,i){return Dsn(n,t,e,!1),pdn(n,i),n}function GJ(n,t){this.b=n,QV.call(this,n,t),qD(this)}function qJ(n,t){this.b=n,N_.call(this,n,t),XD(this)}function XJ(n){this.d=n,this.a=this.d.b,this.b=this.d.c}function zJ(n,t){this.b=n,this.c=t,this.a=new fS(this.b)}function VJ(n,t){return s3(t,n.length),n.charCodeAt(t)}function WJ(n,t){jgn(n,uM($cn(t,"x")),uM($cn(t,"y")))}function QJ(n,t){jgn(n,uM($cn(t,"x")),uM($cn(t,"y")))}function JJ(n,t){return vgn(n),new fX(n,new ien(t,n.a))}function YJ(n,t){return vgn(n),new fX(n,new f7(t,n.a))}function ZJ(n,t){return vgn(n),new IK(n,new s7(t,n.a))}function nY(n,t){return vgn(n),new OK(n,new h7(t,n.a))}function tY(n,t){return new MZ(uG(WW(n),50),uG(WW(t),50))}function eY(n,t){return ugn(n.d.c+n.d.b/2,t.d.c+t.d.b/2)}function iY(n,t,e){e.a?Mcn(n,t.b-n.f/2):ycn(n,t.a-n.g/2)}function rY(n,t){return ugn(n.g.c+n.g.b/2,t.g.c+t.g.b/2)}function cY(n,t){return qS(),ugn((tJ(n),n),(tJ(t),t))}function aY(n){return null!=n&&ZE(UFt,n.toLowerCase())}function oY(n){var t;for(t=n.Kc();t.Ob();)t.Pb(),t.Qb()}function uY(n){var t;return!(t=n.b)&&(n.b=t=new Yl(n)),t}function sY(n){return con(n)||null}function hY(n,t){var e,i;return(e=n/t)>(i=t0(e))&&++i,i}function fY(n,t,e){var i;(i=uG(n.d.Kb(e),159))&&i.Nb(t)}function lY(n,t,e){KXn(n.a,e),jhn(e),EDn(n.b,e),Mzn(t,e)}function bY(n,t,e,i){this.a=n,this.c=t,this.b=e,this.d=i}function wY(n,t,e,i){this.c=n,this.b=t,this.a=e,this.d=i}function dY(n,t,e,i){this.c=n,this.b=t,this.d=e,this.a=i}function gY(n,t,e,i){this.c=n,this.d=t,this.b=e,this.a=i}function pY(n,t,e,i){this.a=n,this.d=t,this.c=e,this.b=i}function mY(n,t,e,i){this.a=n,this.e=t,this.d=e,this.c=i}function vY(n,t,e,i){this.a=n,this.c=t,this.d=e,this.b=i}function kY(n,t,e){this.a=L1n,this.d=n,this.b=t,this.c=e}function yY(n,t,e,i){_E.call(this,n,t),this.a=e,this.b=i}function MY(n,t){this.d=(tJ(n),n),this.a=16449,this.c=t}function TY(n){this.a=new Zm,this.e=Inn(YHt,zZn,53,n,0,2)}function jY(n){n.Ug("No crossing minimization",1),n.Vg()}function EY(){Ky.call(this,"There is no more element.")}function SY(n,t,e,i){this.a=n,this.b=t,this.c=e,this.d=i}function PY(n,t,e,i){this.a=n,this.b=t,this.c=e,this.d=i}function CY(n,t,e,i){this.e=n,this.a=t,this.c=e,this.d=i}function IY(n,t,e,i){this.a=n,this.c=t,this.d=e,this.b=i}function OY(n,t,e,i){ZN(),l7.call(this,t,e,i),this.a=n}function AY(n,t,e,i){ZN(),l7.call(this,t,e,i),this.a=n}function LY(n,t,e){var i;return i=eJn(n),t.ti(e,i)}function NY(n){var t;return Urn(t=new ev,n),t}function $Y(n){var t;return MIn(t=new ev,n),t}function DY(n,t){return Qun(t,cQ(n.f,t)),null}function xY(n){return!n.b&&(n.b=new fV(aFt,n,12,3)),n.b}function RY(n){return Fq(null==n||NV(n)&&!(n.Tm===j)),n}function KY(n){return n.n&&(n.e!==E1n&&n.je(),n.j=null),n}function FY(n){if(bpn(n.d),n.d.d!=n.c)throw hv(new Fv)}function _Y(n){return MK(n.b0&&XEn(this)}function UY(n,t){this.a=n,CK.call(this,n,uG(n.d,15).fd(t))}function GY(n,t){return ugn(EX(n)*jX(n),EX(t)*jX(t))}function qY(n,t){return ugn(EX(n)*jX(n),EX(t)*jX(t))}function XY(n){return BNn(n)&&oM(gK(zDn(n,(jYn(),hMt))))}function zY(n,t){return UNn(n,uG(oIn(t,(jYn(),UMt)),17),t)}function VY(n,t){return uG(oIn(n,(GYn(),Vpt)),15).Fc(t),t}function WY(n,t){return n.b=t.b,n.c=t.c,n.d=t.d,n.a=t.a,n}function QY(n,t,e,i){this.b=n,this.c=i,rL.call(this,t,e)}function JY(n,t,e){n.i=0,n.e=0,t!=e&&tln(n,t,e)}function YY(n,t,e){n.i=0,n.e=0,t!=e&&eln(n,t,e)}function ZY(n,t,e){return JS(),opn(uG(cQ(n.e,t),529),e)}function nZ(n){return n.f||(n.f=new OE(n,n.c))}function tZ(n,t){return Hwn(n.j,t.s,t.c)+Hwn(t.e,n.s,n.c)}function eZ(n,t){n.e&&!n.e.a&&(iv(n.e,t),eZ(n.e,t))}function iZ(n,t){n.d&&!n.d.a&&(iv(n.d,t),iZ(n.d,t))}function rZ(n,t){return-ugn(EX(n)*jX(n),EX(t)*jX(t))}function cZ(n){return uG(n.ld(),149).Pg()+":"+cpn(n.md())}function aZ(){HIn(this,new Fl),this.wb=(tQ(),M_t),vj()}function oZ(n){this.b=new Zm,Ohn(this.b,this.b),this.a=n}function uZ(n,t){new lS,this.a=new Uk,this.b=n,this.c=t}function sZ(){sZ=E,Jot=new N,Yot=new N,Zot=new $}function hZ(){hZ=E,zot=new C,Vot=new O,Wot=new A}function fZ(){fZ=E,Gut=new dn,Xut=new tz,qut=new gn}function lZ(){lZ=E,aft=new Zm,cft=new Ym,rft=new Zm}function bZ(n,t){if(null==n)throw hv(new MM(t));return n}function wZ(n){return!n.a&&(n.a=new fV(bFt,n,10,11)),n.a}function dZ(n){return!n.q&&(n.q=new fV(p_t,n,11,10)),n.q}function gZ(n){return!n.s&&(n.s=new fV(o_t,n,21,17)),n.s}function pZ(n){return WW(n),KMn(new Fz(ix(n.a.Kc(),new h)))}function mZ(n,t){return Tbn(n),Tbn(t),cM(uG(n,22),uG(t,22))}function vZ(n,t,e){nrn(n,t,new Pb(Q_(e)))}function kZ(n,t,e,i,r,c){wtn.call(this,n,t,e,i,r,c?-2:-1)}function yZ(n,t,e,i){LA.call(this,t,e),this.b=n,this.a=i}function MZ(n,t){Sy.call(this,new Hz(n)),this.a=n,this.b=t}function TZ(n){this.b=n,this.c=n,n.e=null,n.c=null,this.a=1}function jZ(n){var t;GB(),(t=uG(n.g,10)).n.a=n.d.c+t.d.b}function EZ(){var n,t;EZ=E,t=!ovn(),n=new v,_at=t?new m:n}function SZ(n){return hZ(),F$(n,59)?new eT(n):new gx(n)}function PZ(n){return F$(n,16)?new oX(uG(n,16)):cG(n.Kc())}function CZ(n){return new WD(n,n.e.Rd().gc()*n.c.Rd().gc())}function IZ(n){return new QD(n,n.e.Rd().gc()*n.c.Rd().gc())}function OZ(n){return n&&n.hashCode?n.hashCode():xx(n)}function AZ(n,t){return null==t?!!FX(n.f,null):_X(n.i,t)}function LZ(n,t){var e;return(e=Q$(n.a,t))&&(t.d=null),e}function NZ(n,t,e){return!!n.f&&n.f.ef(t,e)}function $Z(n,t,e,i){uQ(n.c[t.g],e.g,i),uQ(n.c[e.g],t.g,i)}function DZ(n,t,e,i){uQ(n.c[t.g],t.g,e),uQ(n.b[t.g],t.g,i)}function xZ(n,t,e){return uM(pK(e.a))<=n&&uM(pK(e.b))>=t}function RZ(n,t){this.g=n,this.d=Uhn(cT(pbt,1),e6n,10,0,[t])}function KZ(n){this.c=n,this.b=new Hj(uG(WW(new pn),50))}function FZ(n){this.c=n,this.b=new Hj(uG(WW(new jt),50))}function _Z(n){this.b=n,this.a=new Hj(uG(WW(new nt),50))}function BZ(){this.b=new ek,this.d=new lS,this.e=new Ok}function HZ(){this.c=new sj,this.d=new sj,this.e=new sj}function UZ(){this.a=new Uk,this.b=(man(3,g1n),new R7(3))}function GZ(n,t){this.e=n,this.a=dat,this.b=$Bn(t),this.c=t}function qZ(n){this.c=n.c,this.d=n.d,this.b=n.b,this.a=n.a}function XZ(n,t,e,i,r,c){this.a=n,Ran.call(this,t,e,i,r,c)}function zZ(n,t,e,i,r,c){this.a=n,Ran.call(this,t,e,i,r,c)}function VZ(n,t,e,i,r,c,a){return new i8(n.e,t,e,i,r,c,a)}function WZ(n,t,e){return e>=0&&m_(n.substr(e,t.length),t)}function QZ(n,t){return F$(t,149)&&m_(n.b,uG(t,149).Pg())}function JZ(n,t){return n.a?t.Gh().Kc():uG(t.Gh(),71).Ii()}function YZ(n,t){var e;return w8(e=n.b.Qc(t),n.b.gc()),e}function ZZ(n,t){if(null==n)throw hv(new MM(t));return n}function n1(n){return n.u||(y9(n),n.u=new aF(n,n)),n.u}function t1(n){this.a=(hZ(),F$(n,59)?new eT(n):new gx(n))}function e1(n){return uG(Lsn(n,16),29)||n.ii()}function i1(n,t){var e;return e=Ij(n.Rm),null==t?e:e+": "+t}function r1(n,t,e){return Knn(t,e,n.length),n.substr(t,e-t)}function c1(n,t){HF.call(this),Qrn(this),this.a=n,this.c=t}function a1(n){n&&i1(n,n.ie()),String.fromCharCode(10)}function o1(n){XM(),e.setTimeout((function(){throw n}),0)}function u1(){return _kn(),Uhn(cT(nst,1),p1n,436,0,[Wut,Vut])}function s1(){return Xin(),Uhn(cT(mst,1),p1n,435,0,[Yut,Zut])}function h1(){return zin(),Uhn(cT(mlt,1),p1n,432,0,[gft,pft])}function f1(){return Aun(),Uhn(cT(Dbt,1),p1n,517,0,[Obt,Ibt])}function l1(){return Y6(),Uhn(cT(Nmt,1),p1n,429,0,[kpt,ypt])}function b1(){return Vin(),Uhn(cT(Mgt,1),p1n,428,0,[dgt,ggt])}function w1(){return H7(),Uhn(cT(tgt,1),p1n,431,0,[Vdt,Wdt])}function d1(){return nin(),Uhn(cT(Jjt,1),p1n,430,0,[Gjt,qjt])}function g1(){return Z6(),Uhn(cT(cSt,1),p1n,531,0,[YEt,JEt])}function p1(){return pon(),Uhn(cT(iIt,1),p1n,501,0,[VCt,WCt])}function m1(){return b0(),Uhn(cT(gSt,1),p1n,523,0,[fSt,hSt])}function v1(){return w0(),Uhn(cT(xSt,1),p1n,522,0,[wSt,dSt])}function k1(){return _7(),Uhn(cT(qSt,1),p1n,528,0,[DSt,$St])}function y1(){return Wtn(),Uhn(cT(Hgt,1),p1n,488,0,[Ngt,Lgt])}function M1(){return a9(),Uhn(cT(CAt,1),p1n,491,0,[yAt,MAt])}function T1(){return rhn(),Uhn(cT($At,1),p1n,492,0,[OAt,AAt])}function j1(){return i3(),Uhn(cT(QCt,1),p1n,433,0,[_Ct,FCt])}function E1(){return Ptn(),Uhn(cT(lIt,1),p1n,434,0,[cIt,aIt])}function S1(){return l0(),Uhn(cT(JSt,1),p1n,465,0,[USt,GSt])}function P1(){return B7(),Uhn(cT(uLt,1),p1n,438,0,[nLt,ZAt])}function C1(){return Vhn(),Uhn(cT(JLt,1),p1n,437,0,[VLt,zLt])}function I1(){return CU(),Uhn(cT(jKt,1),p1n,347,0,[gKt,pKt])}function O1(n,t,e,i){return e>=0?n.Uh(t,e,i):n.Ch(null,e,i)}function A1(n){return 0==n.b.b?n.a.sf():tG(n.b)}function L1(n){if(5!=n.p)throw hv(new xv);return pz(n.f)}function N1(n){if(5!=n.p)throw hv(new xv);return pz(n.k)}function $1(n){return xA(n.a)===xA((Oun(),Q_t))&&eVn(n),n.a}function D1(n,t){n.b=t,n.c>0&&n.b>0&&(n.g=mX(n.c,n.b,n.a))}function x1(n,t){n.c=t,n.c>0&&n.b>0&&(n.g=mX(n.c,n.b,n.a))}function R1(n,t){nw(this,new MO(n.a,n.b)),tw(this,oG(t))}function K1(){Py.call(this,new sS(orn(12))),FD(!0),this.a=2}function F1(n,t,e){QYn(),Qm.call(this,n),this.b=t,this.a=e}function _1(n,t,e){ZN(),Hm.call(this,t),this.a=n,this.b=e}function B1(n){var t;t=n.c.d.b,n.b=t,n.a=n.c.d,t.a=n.c.d.b=n}function H1(n){return 0==n.b?null:(MK(0!=n.b),Lrn(n,n.a.a))}function U1(n,t){return null==t?DA(FX(n.f,null)):_P(n.i,t)}function G1(n,t,e,i,r){return new AOn(n,(Rtn(),vut),t,e,i,r)}function q1(n,t){return V5(t),Jcn(n,Inn(YHt,W1n,28,t,15,1),t)}function X1(n,t){return bZ(n,"set1"),bZ(t,"set2"),new GE(n,t)}function z1(n,t){var e=Rat[n.charCodeAt(0)];return null==e?n:e}function V1(n,t){var e;return pWn(n,t,e=new B),e.d}function W1(n,t,e,i){var r;r=new AF,t.a[e.g]=r,UV(n.b,i,r)}function Q1(n,t){return JF(BR(Lcn(n.f,t)),n.f.d)}function J1(n){Lan(n.a),zN(n.a),Apn(new Ad(n.a))}function Y1(n,t){iBn(n,!0),Prn(n.e.Rf(),new DB(n,!0,t))}function Z1(n,t){return lZ(),n==R0(bIn(t))||n==R0(gIn(t))}function n0(n,t){return tcn(),uG(oIn(t,(QGn(),ACt)),17).a==n}function t0(n){return 0|Math.max(Math.min(n,vZn),-2147483648)}function e0(n){this.a=uG(WW(n),277),this.b=(hZ(),new mx(n))}function i0(n,t,e){this.i=new Zm,this.b=n,this.g=t,this.a=e}function r0(n,t,e){this.a=new Zm,this.e=n,this.f=t,this.c=e}function c0(n,t,e){this.c=new Zm,this.e=n,this.f=t,this.b=e}function a0(n){HF.call(this),Qrn(this),this.a=n,this.c=!0}function o0(n){function t(){}return t.prototype=n||{},new t}function u0(n){if(n.Ae())return null;var t=n.n;return sZn[t]}function s0(n){return n.Db>>16!=3?null:uG(n.Cb,27)}function h0(n){return n.Db>>16!=9?null:uG(n.Cb,27)}function f0(n){return n.Db>>16!=6?null:uG(n.Cb,74)}function l0(){l0=E,USt=new XI(z2n,0),GSt=new XI(V2n,1)}function b0(){b0=E,fSt=new OI(V2n,0),hSt=new OI(z2n,1)}function w0(){w0=E,wSt=new AI(c3n,0),dSt=new AI("UP",1)}function d0(){d0=E,Aat=Abn((Hy(),Uhn(cT(Lat,1),p1n,549,0,[Iat])))}function g0(n){var t;return Dfn(t=new Dj(orn(n.length)),n),t}function p0(n,t){return n.b+=t.b,n.c+=t.c,n.d+=t.d,n.a+=t.a,n}function m0(n,t){return!!Chn(n,t)&&(lan(n),!0)}function v0(n,t){if(null==t)throw hv(new Rv);return Tvn(n,t)}function k0(n,t){var e;e=n.q.getHours(),n.q.setDate(t),Iqn(n,e)}function y0(n,t,e){var i;(i=n.Ih(t))>=0?n.bi(i,e):lRn(n,t,e)}function M0(n,t){var e;return(e=n.Ih(t))>=0?n.Wh(e):$Nn(n,t)}function T0(n,t){var e;for(WW(t),e=n.a;e;e=e.c)t.Yd(e.g,e.i)}function j0(n,t,e){var i;i=Ufn(n,t,e),n.b=new Don(i.c.length)}function E0(n,t,e){W0(),n&&vJ(LFt,n,t),n&&vJ(AFt,n,e)}function S0(n,t){return UB(),qx(),uG(t.a,17).a0}function O0(n){var t;return t=n.d,t=n.bj(n.f),ttn(n,t),t.Ob()}function A0(n,t){var e;return zCn(e=new aX(t),n),new Z_(e)}function L0(n){if(0!=n.p)throw hv(new xv);return HA(n.f,0)}function N0(n){if(0!=n.p)throw hv(new xv);return HA(n.k,0)}function $0(n){return n.Db>>16!=7?null:uG(n.Cb,241)}function D0(n){return n.Db>>16!=6?null:uG(n.Cb,241)}function x0(n){return n.Db>>16!=7?null:uG(n.Cb,167)}function R0(n){return n.Db>>16!=11?null:uG(n.Cb,27)}function K0(n){return n.Db>>16!=17?null:uG(n.Cb,29)}function F0(n){return n.Db>>16!=3?null:uG(n.Cb,155)}function _0(n){return vgn(n),JJ(n,new Md(new ek))}function B0(n,t){var e=n.a=n.a||[];return e[t]||(e[t]=n.ve(t))}function H0(n,t){var e;e=n.q.getHours(),n.q.setMonth(t),Iqn(n,e)}function U0(n,t){LD(this),this.f=t,this.g=n,KY(this),this.je()}function G0(n,t){this.a=n,this.c=D$(this.a),this.b=new qZ(t)}function q0(n,t,e){this.a=t,this.c=n,this.b=(WW(e),new Z_(e))}function X0(n,t,e){this.a=t,this.c=n,this.b=(WW(e),new Z_(e))}function z0(n){this.a=n,this.b=Inn(WEt,zZn,2043,n.e.length,0,2)}function V0(){this.a=new XL,this.e=new ek,this.g=0,this.i=0}function W0(){W0=E,LFt=new Ym,AFt=new Ym,pA(iut,new fs)}function Q0(){Q0=E,jEt=wz(new wJ,(uIn(),Plt),(zYn(),Owt))}function J0(){J0=E,EEt=wz(new wJ,(uIn(),Plt),(zYn(),Owt))}function Y0(){Y0=E,PEt=wz(new wJ,(uIn(),Plt),(zYn(),Owt))}function Z0(){Z0=E,tSt=Aq(new wJ,(uIn(),Plt),(zYn(),ewt))}function n2(){n2=E,aSt=Aq(new wJ,(uIn(),Plt),(zYn(),ewt))}function t2(){t2=E,sSt=Aq(new wJ,(uIn(),Plt),(zYn(),ewt))}function e2(){e2=E,mSt=Aq(new wJ,(uIn(),Plt),(zYn(),ewt))}function i2(n,t,e,i,r,c){return new Ken(n.e,t,n.Lj(),e,i,r,c)}function r2(n,t,e){return null==t?VAn(n.f,null,e):kgn(n.i,t,e)}function c2(n,t){n.c&&men(n.c.g,n),n.c=t,n.c&&kD(n.c.g,n)}function a2(n,t){n.c&&men(n.c.a,n),n.c=t,n.c&&kD(n.c.a,n)}function o2(n,t){n.i&&men(n.i.j,n),n.i=t,n.i&&kD(n.i.j,n)}function u2(n,t){n.d&&men(n.d.e,n),n.d=t,n.d&&kD(n.d.e,n)}function s2(n,t){n.a&&men(n.a.k,n),n.a=t,n.a&&kD(n.a.k,n)}function h2(n,t){n.b&&men(n.b.f,n),n.b=t,n.b&&kD(n.b.f,n)}function f2(n,t){dQ(n,n.b,n.c),uG(n.b.b,68),t&&uG(t.b,68).b}function l2(n,t){return ugn(uG(n.c,65).c.e.b,uG(t.c,65).c.e.b)}function b2(n,t){return ugn(uG(n.c,65).c.e.a,uG(t.c,65).c.e.a)}function w2(n){return Mbn(),qx(),0!=uG(n.a,86).d.e}function d2(n,t){F$(n.Cb,184)&&(uG(n.Cb,184).tb=null),qon(n,t)}function g2(n,t){F$(n.Cb,90)&&yLn(y9(uG(n.Cb,90)),4),qon(n,t)}function p2(n,t){Pgn(n,t),F$(n.Cb,90)&&yLn(y9(uG(n.Cb,90)),2)}function m2(n,t){null!=t.c&&pQ(n,new QW(t.c))}function v2(n){var t;return vj(),Urn(t=new ev,n),t}function k2(n){var t;return vj(),Urn(t=new ev,n),t}function y2(n){for(var t;;)if(t=n.Pb(),!n.Ob())return t}function M2(n,t,e){return kD(n.a,(TJ(),IMn(t,e),new FE(t,e))),n}function T2(n,t){return PP(),ein(t)?new Cq(t,n):new OA(t,n)}function j2(n){return cHn(),dwn(n,0)>=0?Rmn(n):hW(Rmn(Men(n)))}function E2(n){var t;return t=uG(tq(n.b),9),new nB(n.a,t,n.c)}function S2(n,t){var e;return(e=uG(Xwn(nZ(n.a),t),16))?e.gc():0}function P2(n,t,e){var i;hdn(t,e,n.c.length),i=e-t,nE(n.c,t,i)}function C2(n,t,e){hdn(t,e,n.gc()),this.c=n,this.a=t,this.b=e-t}function I2(n){this.c=new lS,this.b=n.b,this.d=n.c,this.a=n.a}function O2(n){this.a=e.Math.cos(n),this.b=e.Math.sin(n)}function A2(n,t,e,i){this.c=n,this.d=i,s2(this,t),h2(this,e)}function L2(n,t){Ey.call(this,new sS(orn(n))),man(t,XZn),this.a=t}function N2(n,t,e){return new AOn(n,(Rtn(),mut),null,!1,t,e)}function $2(n,t,e){return new AOn(n,(Rtn(),kut),t,e,null,!1)}function D2(){return ybn(),Uhn(cT(Rut,1),p1n,108,0,[Cut,Iut,Out])}function x2(){return Yen(),Uhn(cT(hht,1),p1n,472,0,[Fst,Kst,Rst])}function R2(){return Ktn(),Uhn(cT(xst,1),p1n,471,0,[Ast,Ost,Lst])}function K2(){return Yrn(),Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])}function F2(){return Jen(),Uhn(cT(Clt,1),p1n,391,0,[glt,dlt,plt])}function _2(){return gon(),Uhn(cT(Rdt,1),p1n,372,0,[Sdt,Edt,jdt])}function B2(){return jan(),Uhn(cT(agt,1),p1n,322,0,[Zdt,Ydt,ngt])}function H2(){return ran(),Uhn(cT(bgt,1),p1n,351,0,[igt,cgt,rgt])}function U2(){return Pfn(),Uhn(cT(Ogt,1),p1n,460,0,[kgt,vgt,ygt])}function G2(){return ihn(),Uhn(cT(mpt,1),p1n,299,0,[fpt,lpt,hpt])}function q2(){return Zen(),Uhn(cT(Mpt,1),p1n,311,0,[gpt,ppt,dpt])}function X2(){return Cwn(),Uhn(cT(pjt,1),p1n,390,0,[ujt,sjt,hjt])}function z2(){return can(),Uhn(cT(eEt,1),p1n,463,0,[Qjt,Vjt,Wjt])}function V2(){return isn(),Uhn(cT(oEt,1),p1n,387,0,[Zjt,nEt,tEt])}function W2(){return Sln(),Uhn(cT(lEt,1),p1n,349,0,[aEt,rEt,cEt])}function Q2(){return kbn(),Uhn(cT(pEt,1),p1n,350,0,[sEt,hEt,fEt])}function J2(){return ian(),Uhn(cT(MEt,1),p1n,352,0,[gEt,wEt,dEt])}function Y2(){return zhn(),Uhn(cT(xEt,1),p1n,388,0,[kEt,yEt,vEt])}function Z2(){return ean(),Uhn(cT(qEt,1),p1n,464,0,[_Et,BEt,HEt])}function n3(n){return Gfn(Uhn(cT(PNt,1),zZn,8,0,[n.i.n,n.n,n.a]))}function t3(){return Pln(),Uhn(cT(RCt,1),p1n,392,0,[gPt,dPt,wPt])}function e3(){e3=E,UCt=wz(new wJ,(Cjn(),WSt),(OHn(),ePt))}function i3(){i3=E,_Ct=new JI("DFS",0),FCt=new JI("BFS",1)}function r3(n,t,e){var i;(i=new ia).b=t,i.a=e,++t.b,kD(n.d,i)}function c3(n,t,e){var i;JF(i=new eN(e.d),n),jgn(t,i.a,i.b)}function a3(n,t){pD(n,pz(E3($z(t,24),W0n)),pz(E3(t,W0n)))}function o3(n,t){if(n<0||n>t)throw hv(new dM(h2n+n+f2n+t))}function u3(n,t){if(n<0||n>=t)throw hv(new dM(h2n+n+f2n+t))}function s3(n,t){if(n<0||n>=t)throw hv(new JM(h2n+n+f2n+t))}function h3(n,t){this.b=(tJ(n),n),this.a=t&j0n?t:64|t|VZn}function f3(n){return vgn(n),sZ(),sZ(),krn(n,Yot)}function l3(n,t,e){var i;return(i=uXn(n,t,!1)).b<=t&&i.a<=e}function b3(){return den(),Uhn(cT(LAt,1),p1n,439,0,[EAt,PAt,SAt])}function w3(){return Bgn(),Uhn(cT(kAt,1),p1n,394,0,[IOt,OOt,COt])}function d3(){return Jmn(),Uhn(cT(dOt,1),p1n,445,0,[oOt,uOt,sOt])}function g3(){return Zyn(),Uhn(cT(AOt,1),p1n,456,0,[lOt,wOt,bOt])}function p3(){return vbn(),Uhn(cT(nOt,1),p1n,393,0,[sIt,hIt,fIt])}function m3(){return esn(),Uhn(cT(hOt,1),p1n,300,0,[iOt,rOt,eOt])}function v3(){return Own(),Uhn(cT(Kxt,1),p1n,346,0,[Oxt,Ixt,Axt])}function k3(){return Rdn(),Uhn(cT(VAt,1),p1n,444,0,[HAt,UAt,GAt])}function y3(){return Zrn(),Uhn(cT(lxt,1),p1n,278,0,[ixt,rxt,cxt])}function M3(){return Iwn(),Uhn(cT(mKt,1),p1n,280,0,[lKt,fKt,bKt])}function T3(n){return WW(n),F$(n,16)?new Z_(uG(n,16)):rG(n.Kc())}function j3(n,t){return n&&n.equals?n.equals(t):xA(n)===xA(t)}function E3(n,t){return Esn(Oz(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t))}function S3(n,t){return Esn(Az(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t))}function P3(n,t){return Esn(Lz(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t))}function C3(n,t){var e;return kK(!!(e=(tJ(n),n).g)),tJ(t),e(t)}function I3(n,t){var e,i;return i=KV(n,t),e=n.a.fd(i),new BE(n,e)}function O3(n){return n.Db>>16!=6?null:uG(J$n(n),241)}function A3(n){if(2!=n.p)throw hv(new xv);return pz(n.f)&D1n}function L3(n){if(2!=n.p)throw hv(new xv);return pz(n.k)&D1n}function N3(n){return MK(n.ai?1:0}function Y3(n,t){var e;return e=jen(t),uG(cQ(n.c,e),17).a}function Z3(n,t,e){var i;i=n.d[t.p],n.d[t.p]=n.d[e.p],n.d[e.p]=i}function n4(n,t,e){var i;n.n&&t&&e&&(i=new Yu,kD(n.e,i))}function t4(n,t){if(FV(n.a,t),t.d)throw hv(new Ky(p2n));t.d=n}function e4(n,t){this.a=new Zm,this.d=new Zm,this.f=n,this.c=t}function i4(){this.c=new z$,this.a=new p7,this.b=new yk,XS()}function r4(){Whn(),this.b=new Ym,this.a=new Ym,this.c=new Zm}function c4(n,t,e){this.d=n,this.j=t,this.e=e,this.o=-1,this.p=3}function a4(n,t,e){this.d=n,this.k=t,this.f=e,this.o=-1,this.p=5}function o4(n,t,e,i,r,c){Bcn.call(this,n,t,e,i,r),c&&(this.o=-2)}function u4(n,t,e,i,r,c){Hcn.call(this,n,t,e,i,r),c&&(this.o=-2)}function s4(n,t,e,i,r,c){E9.call(this,n,t,e,i,r),c&&(this.o=-2)}function h4(n,t,e,i,r,c){qcn.call(this,n,t,e,i,r),c&&(this.o=-2)}function f4(n,t,e,i,r,c){S9.call(this,n,t,e,i,r),c&&(this.o=-2)}function l4(n,t,e,i,r,c){Ucn.call(this,n,t,e,i,r),c&&(this.o=-2)}function b4(n,t,e,i,r,c){Gcn.call(this,n,t,e,i,r),c&&(this.o=-2)}function w4(n,t,e,i,r,c){P9.call(this,n,t,e,i,r),c&&(this.o=-2)}function d4(n,t,e,i){Hm.call(this,e),this.b=n,this.c=t,this.d=i}function g4(n,t){this.f=n,this.a=(N7(),MBt),this.c=MBt,this.b=t}function p4(n,t){this.g=n,this.d=(N7(),TBt),this.a=TBt,this.b=t}function m4(n,t){!n.c&&(n.c=new wsn(n,0)),BXn(n.c,(uVn(),nHt),t)}function v4(n,t){return lxn(n,t,F$(t,102)&&!!(uG(t,19).Bb&P0n))}function k4(n,t){return rW(Bsn(n.q.getTime()),Bsn(t.q.getTime()))}function y4(n){return Dq(n.e.Rd().gc()*n.c.Rd().gc(),16,new zl(n))}function M4(n){return!(!n.u||0==z5(n.u.a).i||n.n&&yMn(n.n))}function T4(n){return!(!n.a||0==Aen(n.a.a).i||n.b&&MMn(n.b))}function j4(n,t){return 0==t?!!n.o&&0!=n.o.f:Wkn(n,t)}function E4(n,t,e){var i;return!!(i=uG(n.Zb().xc(t),16))&&i.Hc(e)}function S4(n,t,e){var i;return!!(i=uG(n.Zb().xc(t),16))&&i.Mc(e)}function P4(n,t){var e;return e=1-t,n.a[e]=Ton(n.a[e],e),Ton(n,t)}function C4(n,t){var e;return e=E3(n,L0n),S3(Nz(t,32),e)}function I4(n,t,e){WW(n),mjn(new q0(new Z_(n),t,e))}function O4(n,t,e){WW(n),vjn(new X0(new Z_(n),t,e))}function A4(n,t,e,i,r,c){return Dsn(n,t,e,c),gdn(n,i),vdn(n,r),n}function L4(n,t,e,i){return n.a+=""+r1(null==t?IZn:cpn(t),e,i),n}function N4(n,t){this.a=n,Jw.call(this,n),o3(t,n.gc()),this.b=t}function $4(n){this.a=Inn(dat,EZn,1,pfn(e.Math.max(8,n))<<1,5,1)}function D4(n){return uG(Ekn(n,Inn(pbt,e6n,10,n.c.length,0,1)),199)}function x4(n){return uG(Ekn(n,Inn(obt,t6n,18,n.c.length,0,1)),483)}function R4(n){return n.a?0==n.e.length?n.a.a:n.a.a+""+n.e:n.c}function K4(n){for(;n.d>0&&0==n.a[--n.d];);0==n.a[n.d++]&&(n.e=0)}function F4(n){return MK(n.b.b!=n.d.a),n.c=n.b=n.b.b,--n.a,n.c.c}function _4(n,t,e){n.a=t,n.c=e,n.b.a.$b(),BY(n.d),Xv(n.e.a.c,0)}function B4(n,t){var e;n.e=new dy,f$(e=GFn(t),n.c),T_n(n,e,0)}function H4(n,t,e,i){var r;(r=new gu).a=t,r.b=e,r.c=i,aq(n.a,r)}function U4(n,t,e,i){var r;(r=new gu).a=t,r.b=e,r.c=i,aq(n.b,r)}function G4(n,t,e){if(n<0||te)throw hv(new dM(QOn(n,t,e)))}function q4(n,t){if(n<0||n>=t)throw hv(new dM(TLn(n,t)));return n}function X4(n){if(!("stack"in n))try{throw n}catch(t){}return n}function z4(n){return JS(),F$(n.g,10)?uG(n.g,10):null}function V4(n){return!uY(n).dc()&&(h$(n,new w),!0)}function W4(n){var t;return _L(n)?-0==(t=n)?0:t:Gen(n)}function Q4(n,t){return!!F$(t,44)&&sTn(n.a,uG(t,44))}function J4(n,t){return!!F$(t,44)&&sTn(n.a,uG(t,44))}function Y4(n,t){return!!F$(t,44)&&sTn(n.a,uG(t,44))}function Z4(n){var t;return GQ(n),t=new D,tE(n.a,new vd(t)),t}function n6(){var n,t;return n=new ev,kD(gBt,t=n),t}function t6(n){var t;return GQ(n),t=new x,tE(n.a,new kd(t)),t}function e6(n,t){return n.a<=n.b&&(t.Dd(n.a++),!0)}function i6(n){dun.call(this,n,(Rtn(),put),null,!1,null,!1)}function r6(){r6=E,_ht=Abn((BS(),Uhn(cT(oft,1),p1n,489,0,[Kht])))}function c6(){c6=E,$Et=MJ(xwn(1),xwn(4)),NEt=MJ(xwn(1),xwn(2))}function a6(n,t){return new LU(t,HR(D$(t.e),n,n),(qx(),!0))}function o6(n){return new R7((man(n,v1n),arn(Lgn(Lgn(5,n),n/10|0))))}function u6(n){return Dq(n.e.Rd().gc()*n.c.Rd().gc(),273,new Xl(n))}function s6(n){return uG(Ekn(n,Inn(Abt,i6n,12,n.c.length,0,1)),2042)}function h6(n){return n2(),!(v9(n)||!v9(n)&&n.c.i.c==n.d.i.c)}function f6(n,t){return ncn(),uG(oIn(t,(QGn(),kCt)),17).a>=n.gc()}function l6(n,t){_Jn(t,n),NG(n.d),NG(uG(oIn(n,(jYn(),SMt)),214))}function b6(n,t){BJn(t,n),$G(n.d),$G(uG(oIn(n,(jYn(),SMt)),214))}function w6(n,t,e){n.d&&men(n.d.e,n),n.d=t,n.d&&GX(n.d.e,e,n)}function d6(n,t,e){return e.f.c.length>0?HV(n.a,t,e):HV(n.b,t,e)}function g6(n,t,e){var i;i=bkn();try{return SF(n,t,e)}finally{m8(i)}}function p6(n,t){var e,i;return i=null,(e=v0(n,t))&&(i=e.pe()),i}function m6(n,t){var e,i;return i=null,(e=v0(n,t))&&(i=e.se()),i}function v6(n,t){var e,i;return i=null,(e=uin(n,t))&&(i=e.se()),i}function k6(n,t){var e,i;return i=null,(e=v0(n,t))&&(i=uAn(e)),i}function y6(n,t,e){var i;return i=jvn(e),yHn(n.g,i,t),yHn(n.i,t,e),t}function M6(n,t,e){this.d=new qg(this),this.e=n,this.i=t,this.f=e}function T6(n,t,e,i){this.e=null,this.c=n,this.d=t,this.a=e,this.b=i}function j6(n,t,e,i){A$(this),this.c=n,this.e=t,this.f=e,this.b=i}function E6(n,t,e,i){this.d=n,this.n=t,this.g=e,this.o=i,this.p=-1}function S6(n,t,e,i){return F$(e,59)?new Yx(n,t,e,i):new qz(n,t,e,i)}function P6(n){return F$(n,16)?uG(n,16).dc():!n.Kc().Ob()}function C6(n){if(n.e.g!=n.b)throw hv(new Fv);return!!n.c&&n.d>0}function I6(n){return MK(n.b!=n.d.c),n.c=n.b,n.b=n.b.a,++n.a,n.c.c}function O6(n,t){tJ(t),uQ(n.a,n.c,t),n.c=n.c+1&n.a.length-1,JTn(n)}function A6(n,t){tJ(t),n.b=n.b-1&n.a.length-1,uQ(n.a,n.b,t),JTn(n)}function L6(n){var t;t=n.Gh(),this.a=F$(t,71)?uG(t,71).Ii():t.Kc()}function N6(n){return new h3(Vrn(uG(n.a.md(),16).gc(),n.a.ld()),16)}function $6(){$6=E,WAt=Abn((nP(),Uhn(cT(JAt,1),p1n,490,0,[zAt])))}function D6(){D6=E,YAt=Abn((tP(),Uhn(cT(tLt,1),p1n,558,0,[QAt])))}function x6(){x6=E,XLt=Abn((eP(),Uhn(cT(WLt,1),p1n,539,0,[GLt])))}function R6(){return Uvn(),Uhn(cT(abt,1),p1n,389,0,[tbt,Zlt,Ylt,nbt])}function K6(){return Rtn(),Uhn(cT(Tut,1),p1n,304,0,[put,mut,vut,kut])}function F6(){return vyn(),Uhn(cT(Sht,1),p1n,332,0,[yht,kht,Mht,Tht])}function _6(){return myn(),Uhn(cT(Fht,1),p1n,406,0,[Nht,Lht,$ht,Dht])}function B6(){return ehn(),Uhn(cT(jht,1),p1n,417,0,[pht,wht,dht,ght])}function H6(){return Xhn(),Uhn(cT(ebt,1),p1n,416,0,[Flt,Hlt,_lt,Blt])}function U6(){return qhn(),Uhn(cT(mdt,1),p1n,421,0,[odt,udt,sdt,hdt])}function G6(){return Ghn(),Uhn(cT(adt,1),p1n,371,0,[zwt,qwt,Xwt,Gwt])}function q6(){return Yyn(),Uhn(cT(jjt,1),p1n,203,0,[djt,gjt,wjt,bjt])}function X6(){return yvn(),Uhn(cT(Xjt,1),p1n,284,0,[Fjt,Kjt,_jt,Bjt])}function z6(n){return n.j==(KQn(),KRt)&&$x(_$n(n),kRt)}function V6(n,t){var e;c2(e=t.a,t.c.d),u2(e,t.d.d),Xun(e.a,n.n)}function W6(n,t){var e;return!(e=uG(ain(n.b,t),67))&&(e=new lS),e}function Q6(n){return JS(),F$(n.g,154)?uG(n.g,154):null}function J6(n){n.a=null,n.e=null,Xv(n.b.c,0),Xv(n.f.c,0),n.c=null}function Y6(){Y6=E,kpt=new sI(G2n,0),ypt=new sI("TOP_LEFT",1)}function Z6(){Z6=E,YEt=new SI("UPPER",0),JEt=new SI("LOWER",1)}function n5(n,t){return bD(new MO(t.e.a+t.f.a/2,t.e.b+t.f.b/2),n)}function t5(n,t){return uG(yx(Wz(uG(Y9(n.k,t),15).Oc(),Fdt)),113)}function e5(n,t){return uG(yx(Qz(uG(Y9(n.k,t),15).Oc(),Fdt)),113)}function i5(){return Cjn(),Uhn(cT(ZSt,1),p1n,405,0,[zSt,VSt,WSt,QSt])}function r5(){return mbn(),Uhn(cT(BCt,1),p1n,353,0,[xCt,$Ct,DCt,NCt])}function c5(){return dTn(),Uhn(cT(cOt,1),p1n,354,0,[ZIt,JIt,YIt,QIt])}function a5(){return Qmn(),Uhn(cT(sKt,1),p1n,386,0,[QRt,JRt,WRt,VRt])}function o5(){return Ajn(),Uhn(cT(Wxt,1),p1n,291,0,[Rxt,$xt,Dxt,xxt])}function u5(){return _gn(),Uhn(cT(kxt,1),p1n,223,0,[fxt,sxt,uxt,hxt])}function s5(){return qpn(),Uhn(cT(SKt,1),p1n,320,0,[TKt,kKt,MKt,yKt])}function h5(){return Eln(),Uhn(cT(DKt,1),p1n,415,0,[CKt,IKt,PKt,OKt])}function f5(n){return W0(),PV(LFt,n)?uG(cQ(LFt,n),341).Qg():null}function l5(n,t,e){return t<0?$Nn(n,e):uG(e,69).wk().Bk(n,n.hi(),t)}function b5(n,t,e){var i;return i=jvn(e),yHn(n.j,i,t),vJ(n.k,t,e),t}function w5(n,t,e){var i;return i=jvn(e),yHn(n.d,i,t),vJ(n.e,t,e),t}function d5(n){var t;return gj(),t=new es,n&&ARn(t,n),t}function g5(n){var t;return t=n.aj(n.i),n.i>0&&qGn(n.g,0,t,0,n.i),t}function p5(n,t){var e;for(e=n.j.c.length;e>24}function y5(n){if(1!=n.p)throw hv(new xv);return pz(n.k)<<24>>24}function M5(n){if(7!=n.p)throw hv(new xv);return pz(n.k)<<16>>16}function T5(n){if(7!=n.p)throw hv(new xv);return pz(n.f)<<16>>16}function j5(n,t){return 0==t.e||0==n.e?_ot:(b_n(),yKn(n,t))}function E5(n,t){return xA(t)===xA(n)?"(this Map)":null==t?IZn:cpn(t)}function S5(n,t,e){return Rz(pK(DA(FX(n.f,t))),pK(DA(FX(n.f,e))))}function P5(n,t,e){var i;i=uG(cQ(n.g,e),60),kD(n.a.c,new WO(t,i))}function C5(n,t,e){n.i=0,n.e=0,t!=e&&(eln(n,t,e),tln(n,t,e))}function I5(n,t,e,i,r){kD(t,uLn(r,Bxn(r,e,i))),LIn(n,r,t)}function O5(n,t,e,i,r){this.i=n,this.a=t,this.e=e,this.j=i,this.f=r}function A5(n,t){HZ.call(this),this.a=n,this.b=t,kD(this.a.b,this)}function L5(n){this.b=new Ym,this.c=new Ym,this.d=new Ym,this.a=n}function N5(n,t){var e;return e=new QM,n.Gd(e),e.a+="..",t.Hd(e),e.a}function $5(n,t){var e;for(e=t;e;)KR(n,e.i,e.j),e=R0(e);return n}function D5(n,t,e){var i;return i=jvn(e),vJ(n.b,i,t),vJ(n.c,t,e),t}function x5(n){var t;for(t=0;n.Ob();)n.Pb(),t=Lgn(t,1);return arn(t)}function R5(n,t){var e;return PP(),uOn(e=uG(n,69).vk(),t),e.xl(t)}function K5(n,t,e){if(e){var i=e.oe();n.a[t]=i(e)}else delete n.a[t]}function F5(n,t){var e;e=n.q.getHours(),n.q.setFullYear(t+V1n),Iqn(n,e)}function _5(n,t){return uG(null==t?DA(FX(n.f,null)):_P(n.i,t),288)}function B5(n,t){return n==(zIn(),dbt)&&t==dbt?4:n==dbt||t==dbt?8:32}function H5(n,t,e){return aqn(n,t,e,F$(t,102)&&!!(uG(t,19).Bb&P0n))}function U5(n,t,e){return Dqn(n,t,e,F$(t,102)&&!!(uG(t,19).Bb&P0n))}function G5(n,t,e){return Cxn(n,t,e,F$(t,102)&&!!(uG(t,19).Bb&P0n))}function q5(n){n.b!=n.c&&(n.a=Inn(dat,EZn,1,8,5,1),n.b=0,n.c=0)}function X5(n){return MK(n.a=0&&n.a[e]===t[e];e--);return e<0}function g8(n){var t;return n?new aX(n):(Fon(t=new XL,n),t)}function p8(n,t){var e,i;i=!1;do{i|=e=Tfn(n,t)}while(e);return i}function m8(n){n&&Cin((Gy(),Fat)),--Uat,n&&-1!=qat&&(jL(qat),qat=-1)}function v8(n){aCn(),pD(this,pz(E3($z(n,24),W0n)),pz(E3(n,W0n)))}function k8(){k8=E,Jut=Abn((_kn(),Uhn(cT(nst,1),p1n,436,0,[Wut,Vut])))}function y8(){y8=E,tst=Abn((Xin(),Uhn(cT(mst,1),p1n,435,0,[Yut,Zut])))}function M8(){M8=E,vft=Abn((zin(),Uhn(cT(mlt,1),p1n,432,0,[gft,pft])))}function T8(){T8=E,Lbt=Abn((Aun(),Uhn(cT(Dbt,1),p1n,517,0,[Obt,Ibt])))}function j8(){j8=E,Tpt=Abn((Y6(),Uhn(cT(Nmt,1),p1n,429,0,[kpt,ypt])))}function E8(){E8=E,mgt=Abn((Vin(),Uhn(cT(Mgt,1),p1n,428,0,[dgt,ggt])))}function S8(){S8=E,Dgt=Abn((Wtn(),Uhn(cT(Hgt,1),p1n,488,0,[Ngt,Lgt])))}function P8(){P8=E,zjt=Abn((nin(),Uhn(cT(Jjt,1),p1n,430,0,[Gjt,qjt])))}function C8(){C8=E,nSt=Abn((Z6(),Uhn(cT(cSt,1),p1n,531,0,[YEt,JEt])))}function I8(){I8=E,Jdt=Abn((H7(),Uhn(cT(tgt,1),p1n,431,0,[Vdt,Wdt])))}function O8(){O8=E,HCt=Abn((i3(),Uhn(cT(QCt,1),p1n,433,0,[_Ct,FCt])))}function A8(){A8=E,JCt=Abn((pon(),Uhn(cT(iIt,1),p1n,501,0,[VCt,WCt])))}function L8(){L8=E,bSt=Abn((b0(),Uhn(cT(gSt,1),p1n,523,0,[fSt,hSt])))}function N8(){N8=E,pSt=Abn((w0(),Uhn(cT(xSt,1),p1n,522,0,[wSt,dSt])))}function $8(){$8=E,RSt=Abn((_7(),Uhn(cT(qSt,1),p1n,528,0,[DSt,$St])))}function D8(){D8=E,XSt=Abn((l0(),Uhn(cT(JSt,1),p1n,465,0,[USt,GSt])))}function x8(){x8=E,uIt=Abn((Ptn(),Uhn(cT(lIt,1),p1n,434,0,[cIt,aIt])))}function R8(){R8=E,jAt=Abn((a9(),Uhn(cT(CAt,1),p1n,491,0,[yAt,MAt])))}function K8(){K8=E,NAt=Abn((rhn(),Uhn(cT($At,1),p1n,492,0,[OAt,AAt])))}function F8(){F8=E,eLt=Abn((B7(),Uhn(cT(uLt,1),p1n,438,0,[nLt,ZAt])))}function _8(){_8=E,QLt=Abn((Vhn(),Uhn(cT(JLt,1),p1n,437,0,[VLt,zLt])))}function B8(){B8=E,vKt=Abn((CU(),Uhn(cT(jKt,1),p1n,347,0,[gKt,pKt])))}function H8(){return xdn(),Uhn(cT(axt,1),p1n,88,0,[ZDt,YDt,JDt,QDt,nxt])}function U8(){return KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])}function G8(n,t,e){return uG(null==t?VAn(n.f,null,e):kgn(n.i,t,e),288)}function q8(n){return(n.k==(zIn(),dbt)||n.k==lbt)&&vR(n,(GYn(),$pt))}function X8(n){return n.c&&n.d?z3(n.c)+"->"+z3(n.d):"e_"+xx(n)}function z8(n,t){var e,i;for(tJ(t),i=n.Kc();i.Ob();)e=i.Pb(),t.Cd(e)}function V8(n,t){var e;vZ(e=new _y,"x",t.a),vZ(e,"y",t.b),pQ(n,e)}function W8(n,t){var e;vZ(e=new _y,"x",t.a),vZ(e,"y",t.b),pQ(n,e)}function Q8(n,t){var e;for(e=t;e;)KR(n,-e.i,-e.j),e=R0(e);return n}function J8(n,t){var e,i;for(e=t,i=0;e>0;)i+=n.a[e],e-=e&-e;return i}function Y8(n,t,e){var i;return u3(t,n.c.length),i=n.c[t],n.c[t]=e,i}function Z8(n,t,e){n.a.c.length=0,sVn(n,t,e),0==n.a.c.length||pUn(n,t)}function n9(n){n.i=0,FP(n.b,null),FP(n.c,null),n.a=null,n.e=null,++n.g}function t9(){t9=E,Nut=!0,Aut=!1,Lut=!1,Dut=!1,$ut=!1}function e9(n){t9(),Nut||(this.c=n,this.e=!0,this.a=new Zm)}function i9(n,t){this.c=0,this.b=t,iL.call(this,n,17493),this.a=this.c}function r9(n){NYn(),dv(this),this.a=new lS,Lln(this,n),aq(this.a,n)}function c9(){IN(this),this.b=new MO(M0n,M0n),this.a=new MO(T0n,T0n)}function a9(){a9=E,yAt=new oO(x6n,0),MAt=new oO("TARGET_WIDTH",1)}function o9(n,t){return(vgn(n),Qj(new fX(n,new ien(t,n.a)))).Bd(Kut)}function u9(){return uIn(),Uhn(cT(Llt,1),p1n,367,0,[Tlt,jlt,Elt,Slt,Plt])}function s9(){return gPn(),Uhn(cT(Pdt,1),p1n,375,0,[wdt,gdt,pdt,ddt,bdt])}function h9(){return kvn(),Uhn(cT(pgt,1),p1n,348,0,[sgt,ugt,fgt,lgt,hgt])}function f9(){return pyn(),Uhn(cT(xjt,1),p1n,323,0,[Tjt,kjt,yjt,vjt,Mjt])}function l9(){return Gpn(),Uhn(cT(ajt,1),p1n,171,0,[Lmt,Cmt,Imt,Omt,Amt])}function b9(){return zPn(),Uhn(cT(oIt,1),p1n,368,0,[tIt,YCt,eIt,ZCt,nIt])}function w9(){return _Rn(),Uhn(cT(qAt,1),p1n,373,0,[xAt,DAt,KAt,RAt,FAt])}function d9(){return pOn(),Uhn(cT(qLt,1),p1n,324,0,[iLt,rLt,oLt,cLt,aLt])}function g9(){return Rkn(),Uhn(cT(MNt,1),p1n,170,0,[hNt,sNt,oNt,fNt,uNt])}function p9(){return Vkn(),Uhn(cT(hRt,1),p1n,256,0,[Zxt,tRt,Jxt,Yxt,nRt])}function m9(n){return XM(),function(){return g6(n,this,arguments)}}function v9(n){return!(!n.c||!n.d||!n.c.i||n.c.i!=n.d.i)}function k9(n,t){return!!F$(t,143)&&m_(n.c,uG(t,143).c)}function y9(n){return n.t||(n.t=new $m(n),$dn(new Qy(n),0,n.t)),n.t}function M9(n){this.b=n,DD.call(this,n),this.a=uG(Lsn(this.b.a,4),129)}function T9(n){this.b=n,nR.call(this,n),this.a=uG(Lsn(this.b.a,4),129)}function j9(n,t,e,i,r){b7.call(this,t,i,r),Kf(this),this.c=n,this.b=e}function E9(n,t,e,i,r){c4.call(this,t,i,r),Kf(this),this.c=n,this.a=e}function S9(n,t,e,i,r){a4.call(this,t,i,r),Kf(this),this.c=n,this.a=e}function P9(n,t,e,i,r){b7.call(this,t,i,r),Kf(this),this.c=n,this.a=e}function C9(n,t){return uG(ain(n.d,t),23)||uG(ain(n.e,t),23)}function I9(n,t){var e,i;return e=t.ld(),!!(i=n.Fe(e))&&OJ(i.e,t.md())}function O9(n,t){var e;return new FE(e=t.ld(),n.e.pc(e,uG(t.md(),16)))}function A9(n,t){var e;return null==(e=n.a.get(t))?Inn(dat,EZn,1,0,5,1):e}function L9(n){var t;return t=n.length,m_(S0n.substr(S0n.length-t,t),n)}function N9(n){if(hDn(n))return n.c=n.a,n.a.Pb();throw hv(new Bv)}function $9(n,t){return 0==t||0==n.e?n:t>0?MFn(n,t):rvn(n,-t)}function D9(n,t){return 0==t||0==n.e?n:t>0?rvn(n,t):MFn(n,-t)}function x9(n){xP.call(this,null==n?IZn:cpn(n),F$(n,82)?uG(n,82):null)}function R9(n){var t;return n.c||F$(t=n.r,90)&&(n.c=uG(t,29)),n.c}function K9(n){var t;return zsn(t=new UZ,n),kfn(t,(jYn(),bMt),null),t}function F9(n){var t,e;return t=n.c.i,e=n.d.i,t.k==(zIn(),lbt)&&e.k==lbt}function _9(n){return p$(n&f0n,n>>22&f0n,n<0?l0n:0)}function B9(n){var t,e,i;for(e=0,i=(t=n).length;e=0?n.Lh(i,e,!0):YNn(n,t,e)}function G9(n,t,e){return ugn(bD($kn(n),D$(t.b)),bD($kn(n),D$(e.b)))}function q9(n,t,e){return ugn(bD($kn(n),D$(t.e)),bD($kn(n),D$(e.e)))}function X9(n,t){return e.Math.min(atn(t.a,n.d.d.c),atn(t.b,n.d.d.c))}function z9(n,t){n._i(n.i+1),yD(n,n.i,n.Zi(n.i,t)),n.Mi(n.i++,t),n.Ni()}function V9(n){var t,e;++n.j,t=n.g,e=n.i,n.g=null,n.i=0,n.Oi(e,t),n.Ni()}function W9(n,t,e){var i;xun(i=new U$(n.a),n.a.a),VAn(i.f,t,e),n.a.a=i}function Q9(n,t,e,i){var r;for(r=0;r<$st;r++)qX(n.a[r][t.g],e,i[t.g])}function J9(n,t,e,i){var r;for(r=0;rt)throw hv(new dM(iLn(n,t,"index")));return n}function i7(n,t){var e;return u3(t,n.c.length),e=n.c[t],nE(n.c,t,1),e}function r7(n,t){var e,i;return tJ(n),e=n,tJ(t),e==(i=t)?0:et.p?-1:0}function E7(n){var t;return n.a||F$(t=n.r,156)&&(n.a=uG(t,156)),n.a}function S7(n,t,e){return++n.e,--n.f,uG(n.d[t].gd(e),136).md()}function P7(n){var t;return t=n.ld(),JU(uG(n.md(),16).Nc(),new Wl(t))}function C7(n,t){return!!PV(n.a,t)&&(u7(n.a,t),!0)}function I7(n,t,e){return q4(t,n.e.Rd().gc()),q4(e,n.c.Rd().gc()),n.a[t][e]}function O7(n,t,e){this.a=n,this.b=t,this.c=e,kD(n.t,this),kD(t.i,this)}function A7(n,t,e,i){this.f=n,this.e=t,this.d=e,this.b=i,this.c=i?i.d:null}function L7(){this.b=new lS,this.a=new lS,this.b=new lS,this.a=new lS}function N7(){var n,t;N7=E,vj(),t=new Gv,MBt=t,n=new Wk,TBt=n}function $7(n){return vgn(n),new IK(n,new lG(n,n.a.e,4|n.a.d))}function D7(n){var t;for(GQ(n),t=0;n.a.Bd(new hn);)t=Lgn(t,1);return t}function x7(n,t){return tJ(t),n.c=0,"Initial capacity must not be negative")}function K7(){K7=E,jNt=new Cm("org.eclipse.elk.labels.labelManager")}function F7(){F7=E,Uwt=new uF("separateLayerConnections",(Ghn(),zwt))}function _7(){_7=E,DSt=new qI("REGULAR",0),$St=new qI("CRITICAL",1)}function B7(){B7=E,nLt=new lO("FIXED",0),ZAt=new lO("CENTER_NODE",1)}function H7(){H7=E,Vdt=new WC("QUADRATIC",0),Wdt=new WC("SCANLINE",1)}function U7(){U7=E,egt=Abn((jan(),Uhn(cT(agt,1),p1n,322,0,[Zdt,Ydt,ngt])))}function G7(){G7=E,ogt=Abn((ran(),Uhn(cT(bgt,1),p1n,351,0,[igt,cgt,rgt])))}function q7(){q7=E,Cdt=Abn((gon(),Uhn(cT(Rdt,1),p1n,372,0,[Sdt,Edt,jdt])))}function X7(){X7=E,Tgt=Abn((Pfn(),Uhn(cT(Ogt,1),p1n,460,0,[kgt,vgt,ygt])))}function z7(){z7=E,wpt=Abn((ihn(),Uhn(cT(mpt,1),p1n,299,0,[fpt,lpt,hpt])))}function V7(){V7=E,vpt=Abn((Zen(),Uhn(cT(Mpt,1),p1n,311,0,[gpt,ppt,dpt])))}function W7(){W7=E,ljt=Abn((Cwn(),Uhn(cT(pjt,1),p1n,390,0,[ujt,sjt,hjt])))}function Q7(){Q7=E,iEt=Abn((isn(),Uhn(cT(oEt,1),p1n,387,0,[Zjt,nEt,tEt])))}function J7(){J7=E,uEt=Abn((Sln(),Uhn(cT(lEt,1),p1n,349,0,[aEt,rEt,cEt])))}function Y7(){Y7=E,Yjt=Abn((can(),Uhn(cT(eEt,1),p1n,463,0,[Qjt,Vjt,Wjt])))}function Z7(){Z7=E,bEt=Abn((kbn(),Uhn(cT(pEt,1),p1n,350,0,[sEt,hEt,fEt])))}function nnn(){nnn=E,mEt=Abn((ian(),Uhn(cT(MEt,1),p1n,352,0,[gEt,wEt,dEt])))}function tnn(){tnn=E,TEt=Abn((zhn(),Uhn(cT(xEt,1),p1n,388,0,[kEt,yEt,vEt])))}function enn(){enn=E,mPt=Abn((Pln(),Uhn(cT(RCt,1),p1n,392,0,[gPt,dPt,wPt])))}function inn(){inn=E,bIt=Abn((vbn(),Uhn(cT(nOt,1),p1n,393,0,[sIt,hIt,fIt])))}function rnn(){rnn=E,aOt=Abn((esn(),Uhn(cT(hOt,1),p1n,300,0,[iOt,rOt,eOt])))}function cnn(){cnn=E,fOt=Abn((Jmn(),Uhn(cT(dOt,1),p1n,445,0,[oOt,uOt,sOt])))}function ann(){ann=E,gOt=Abn((Zyn(),Uhn(cT(AOt,1),p1n,456,0,[lOt,wOt,bOt])))}function onn(){onn=E,LOt=Abn((Bgn(),Uhn(cT(kAt,1),p1n,394,0,[IOt,OOt,COt])))}function unn(){unn=E,IAt=Abn((den(),Uhn(cT(LAt,1),p1n,439,0,[EAt,PAt,SAt])))}function snn(){snn=E,GEt=Abn((ean(),Uhn(cT(qEt,1),p1n,464,0,[_Et,BEt,HEt])))}function hnn(){hnn=E,Dst=Abn((Ktn(),Uhn(cT(xst,1),p1n,471,0,[Ast,Ost,Lst])))}function fnn(){fnn=E,Cst=Abn((Yrn(),Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])))}function lnn(){lnn=E,Bst=Abn((Yen(),Uhn(cT(hht,1),p1n,472,0,[Fst,Kst,Rst])))}function bnn(){bnn=E,xut=Abn((ybn(),Uhn(cT(Rut,1),p1n,108,0,[Cut,Iut,Out])))}function wnn(){wnn=E,vlt=Abn((Jen(),Uhn(cT(Clt,1),p1n,391,0,[glt,dlt,plt])))}function dnn(){dnn=E,Nxt=Abn((Own(),Uhn(cT(Kxt,1),p1n,346,0,[Oxt,Ixt,Axt])))}function gnn(){gnn=E,XAt=Abn((Rdn(),Uhn(cT(VAt,1),p1n,444,0,[HAt,UAt,GAt])))}function pnn(){pnn=E,oxt=Abn((Zrn(),Uhn(cT(lxt,1),p1n,278,0,[ixt,rxt,cxt])))}function mnn(){mnn=E,dKt=Abn((Iwn(),Uhn(cT(mKt,1),p1n,280,0,[lKt,fKt,bKt])))}function vnn(n,t){return!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),ymn(n.o,t)}function knn(n,t){var e;n.C&&((e=uG(AJ(n.b,t),127).n).d=n.C.d,e.a=n.C.a)}function ynn(n){var t,e,i,r;r=n.d,t=n.a,e=n.b,i=n.c,n.d=e,n.a=i,n.b=r,n.c=t}function Mnn(n){return!n.g&&(n.g=new ds),!n.g.b&&(n.g.b=new Om(n)),n.g.b}function Tnn(n){return!n.g&&(n.g=new ds),!n.g.c&&(n.g.c=new Nm(n)),n.g.c}function jnn(n){return!n.g&&(n.g=new ds),!n.g.d&&(n.g.d=new Am(n)),n.g.d}function Enn(n){return!n.g&&(n.g=new ds),!n.g.a&&(n.g.a=new Lm(n)),n.g.a}function Snn(n,t,e,i){return e&&(i=e.Rh(t,emn(e.Dh(),n.c.uk()),null,i)),i}function Pnn(n,t,e,i){return e&&(i=e.Th(t,emn(e.Dh(),n.c.uk()),null,i)),i}function Cnn(n,t,e,i){var r;return KGn(r=Inn(YHt,W1n,28,t+1,15,1),n,t,e,i),r}function Inn(n,t,e,i,r,c){var a;return a=PTn(r,i),10!=r&&Uhn(cT(n,c),t,e,r,a),a}function Onn(n,t,e){var i,r;for(r=new Zsn(t,n),i=0;ie||t=0?n.Lh(e,!0,!0):YNn(n,t,!0)}function ktn(n,t,e){var i;return i=Ufn(n,t,e),n.b=new Don(i.c.length),ZFn(n,i)}function ytn(n){if(n.b<=0)throw hv(new Bv);return--n.b,n.a-=n.c.c,xwn(n.a)}function Mtn(n){var t;if(!n.a)throw hv(new EY);return t=n.a,n.a=R0(n.a),t}function Ttn(n){for(;!n.a;)if(!y_(n.c,new yd(n)))return!1;return!0}function jtn(n){return WW(n),F$(n,204)?uG(n,204):new sb(n)}function Etn(n){Stn(),uG(n.of((XYn(),bDt)),181).Fc((eNn(),dRt)),n.qf(lDt,null)}function Stn(){Stn=E,tNt=new hu,iNt=new fu,eNt=Rln((XYn(),lDt),tNt,q$t,iNt)}function Ptn(){Ptn=E,cIt=new nO("LEAF_NUMBER",0),aIt=new nO("NODE_SIZE",1)}function Ctn(n){n.a=Inn(YHt,W1n,28,n.b+1,15,1),n.c=Inn(YHt,W1n,28,n.b,15,1),n.d=0}function Itn(n,t){n.a.Ne(t.d,n.b)>0&&(kD(n.c,new wG(t.c,t.d,n.d)),n.b=t.d)}function Otn(n,t){if(null==n.g||t>=n.i)throw hv(new pL(t,n.i));return n.g[t]}function Atn(n,t,e){if(gln(n,e),null!=e&&!n.fk(e))throw hv(new Nv);return e}function Ltn(n,t){return 10!=Min(t)&&Uhn(Tbn(t),t.Sm,t.__elementTypeId$,Min(t),n),n}function Ntn(n,t,e,i){sZ(),i=i||Jot,rLn(n.slice(t,e),n,t,e,-t,i)}function $tn(n,t,e,i,r){return t<0?YNn(n,e,i):uG(e,69).wk().yk(n,n.hi(),t,i,r)}function Dtn(n,t){return ugn(uM(pK(oIn(n,(GYn(),bmt)))),uM(pK(oIn(t,bmt))))}function xtn(){xtn=E,Mut=Abn((Rtn(),Uhn(cT(Tut,1),p1n,304,0,[put,mut,vut,kut])))}function Rtn(){Rtn=E,put=new qP("All",0),mut=new SN,vut=new P$,kut=new EN}function Ktn(){Ktn=E,Ast=new aC(z2n,0),Ost=new aC(G2n,1),Lst=new aC(V2n,2)}function Ftn(){Ftn=E,tXn(),sHt=M0n,uHt=T0n,fHt=new Rw(M0n),hHt=new Rw(T0n)}function _tn(){_tn=E,vht=Abn((ehn(),Uhn(cT(jht,1),p1n,417,0,[pht,wht,dht,ght])))}function Btn(){Btn=E,Rht=Abn((myn(),Uhn(cT(Fht,1),p1n,406,0,[Nht,Lht,$ht,Dht])))}function Htn(){Htn=E,Eht=Abn((vyn(),Uhn(cT(Sht,1),p1n,332,0,[yht,kht,Mht,Tht])))}function Utn(){Utn=E,ibt=Abn((Uvn(),Uhn(cT(abt,1),p1n,389,0,[tbt,Zlt,Ylt,nbt])))}function Gtn(){Gtn=E,Glt=Abn((Xhn(),Uhn(cT(ebt,1),p1n,416,0,[Flt,Hlt,_lt,Blt])))}function qtn(){qtn=E,ldt=Abn((qhn(),Uhn(cT(mdt,1),p1n,421,0,[odt,udt,sdt,hdt])))}function Xtn(){Xtn=E,Wwt=Abn((Ghn(),Uhn(cT(adt,1),p1n,371,0,[zwt,qwt,Xwt,Gwt])))}function ztn(){ztn=E,mjt=Abn((Yyn(),Uhn(cT(jjt,1),p1n,203,0,[djt,gjt,wjt,bjt])))}function Vtn(){Vtn=E,Ujt=Abn((yvn(),Uhn(cT(Xjt,1),p1n,284,0,[Fjt,Kjt,_jt,Bjt])))}function Wtn(){Wtn=E,Ngt=new iI(q4n,0),Lgt=new iI("IMPROVE_STRAIGHTNESS",1)}function Qtn(n,t){var e,i;return i=t/n.c.Rd().gc()|0,e=t%n.c.Rd().gc(),I7(n,i,e)}function Jtn(n){var t;if(n.nl())for(t=n.i-1;t>=0;--t)zrn(n,t);return g5(n)}function Ytn(n){var t,e;if(!n.b)return null;for(e=n.b;t=e.a[0];)e=t;return e}function Ztn(n){var t,e;if(!n.b)return null;for(e=n.b;t=e.a[1];)e=t;return e}function nen(n){return F$(n,180)?""+uG(n,180).a:null==n?null:cpn(n)}function ten(n){return F$(n,180)?""+uG(n,180).a:null==n?null:cpn(n)}function een(n,t){if(t.a)throw hv(new Ky(p2n));FV(n.a,t),t.a=n,!n.j&&(n.j=t)}function ien(n,t){rL.call(this,t.zd(),-16449&t.yd()),tJ(n),this.a=n,this.c=t}function ren(n,t){return new LU(t,KR(D$(t.e),t.f.a+n,t.f.b+n),(qx(),!1))}function cen(n,t){return PU(),kD(n,new WO(t,xwn(t.e.c.length+t.g.c.length)))}function aen(n,t){return PU(),kD(n,new WO(t,xwn(t.e.c.length+t.g.c.length)))}function oen(){oen=E,tOt=Abn((dTn(),Uhn(cT(cOt,1),p1n,354,0,[ZIt,JIt,YIt,QIt])))}function uen(){uen=E,KCt=Abn((mbn(),Uhn(cT(BCt,1),p1n,353,0,[xCt,$Ct,DCt,NCt])))}function sen(){sen=E,YSt=Abn((Cjn(),Uhn(cT(ZSt,1),p1n,405,0,[zSt,VSt,WSt,QSt])))}function hen(){hen=E,bxt=Abn((_gn(),Uhn(cT(kxt,1),p1n,223,0,[fxt,sxt,uxt,hxt])))}function fen(){fen=E,Fxt=Abn((Ajn(),Uhn(cT(Wxt,1),p1n,291,0,[Rxt,$xt,Dxt,xxt])))}function len(){len=E,ZRt=Abn((Qmn(),Uhn(cT(sKt,1),p1n,386,0,[QRt,JRt,WRt,VRt])))}function ben(){ben=E,EKt=Abn((qpn(),Uhn(cT(SKt,1),p1n,320,0,[TKt,kKt,MKt,yKt])))}function wen(){wen=E,LKt=Abn((Eln(),Uhn(cT(DKt,1),p1n,415,0,[CKt,IKt,PKt,OKt])))}function den(){den=E,EAt=new uO(g7n,0),PAt=new uO(k9n,1),SAt=new uO(q4n,2)}function gen(n,t,e,i,r){return tJ(n),tJ(t),tJ(e),tJ(i),tJ(r),new WV(n,t,i)}function pen(n,t){var e;return(e=uG(u7(n.e,t),400))?(cq(e),e.e):null}function men(n,t){var e;return-1!=(e=Ten(n,t,0))&&(i7(n,e),!0)}function ven(n,t,e){var i;return GQ(n),(i=new un).a=t,n.a.Nb(new nC(i,e)),i.a}function ken(n){var t;return GQ(n),t=Inn(eUt,I0n,28,0,15,1),tE(n.a,new md(t)),t}function yen(n){var t;if(!oon(n))throw hv(new Bv);return n.e=1,t=n.d,n.d=null,t}function Men(n){var t;return _L(n)&&(t=0-n,!isNaN(t))?t:Esn(gfn(n))}function Ten(n,t,e){for(;e=0?Dyn(n,e,!0,!0):YNn(n,t,!0)}function Ven(n){var t;return null==(t=Kcn(Lsn(n,32)))&&($vn(n),t=Kcn(Lsn(n,32))),t}function Wen(n){var t;return n.Oh()||(t=iQ(n.Dh())-n.ji(),n.$h().Mk(t)),n.zh()}function Qen(n,t){Iht=new et,xht=t,uG((Cht=n).b,68),Rnn(Cht,Iht,null),Szn(Cht)}function Jen(){Jen=E,glt=new dC("XY",0),dlt=new dC("X",1),plt=new dC("Y",2)}function Yen(){Yen=E,Fst=new oC("TOP",0),Kst=new oC(G2n,1),Rst=new oC(Q2n,2)}function Zen(){Zen=E,gpt=new uI(q4n,0),ppt=new uI("TOP",1),dpt=new uI(Q2n,2)}function nin(){nin=E,Gjt=new pI("INPUT_ORDER",0),qjt=new pI("PORT_DEGREE",1)}function tin(){tin=E,Jat=p$(f0n,f0n,524287),Yat=p$(0,0,b0n),Zat=_9(1),_9(2),not=_9(0)}function ein(n){var t;return n.d!=n.r&&(t=bEn(n),n.e=!!t&&t.lk()==srt,n.d=t),n.e}function iin(n,t,e){var i;return i=n.g[t],yD(n,t,n.Zi(t,e)),n.Ri(t,e,i),n.Ni(),i}function rin(n,t){var e;return(e=n.dd(t))>=0&&(n.gd(e),!0)}function cin(n,t){var e;for(WW(n),WW(t),e=!1;t.Ob();)e|=n.Fc(t.Pb());return e}function ain(n,t){var e;return(e=uG(cQ(n.e,t),400))?(nD(n,e),e.e):null}function oin(n){var t,e;return t=n/60|0,0==(e=n%60)?""+t:t+":"+e}function uin(n,t){var e=n.a[t],i=(Cfn(),Wat)[typeof e];return i?i(e):Vbn(typeof e)}function sin(n,t){return vgn(n),new fX(n,new D_(new f7(t,n.a)))}function hin(n){var t;return null!=(t=0==n.b.c.length?null:zq(n.b,0))&&Con(n,0),t}function fin(n,t){var e,i,r;r=t.c.i,i=(e=uG(cQ(n.f,r),60)).d.c-e.e.c,fun(t.a,i,0)}function lin(n,t){var e;for(++n.d,++n.c[t],e=t+1;e=0;)++t[0]}function din(n,t){ycn(n,null==t||J_((tJ(t),t))||isNaN((tJ(t),t))?0:(tJ(t),t))}function gin(n,t){Mcn(n,null==t||J_((tJ(t),t))||isNaN((tJ(t),t))?0:(tJ(t),t))}function pin(n,t){kcn(n,null==t||J_((tJ(t),t))||isNaN((tJ(t),t))?0:(tJ(t),t))}function min(n,t){vcn(n,null==t||J_((tJ(t),t))||isNaN((tJ(t),t))?0:(tJ(t),t))}function vin(n,t,e){return bD(new MO(e.e.a+e.f.a/2,e.e.b+e.f.b/2),n)==(tJ(t),t)}function kin(n,t){return F$(t,102)&&uG(t,19).Bb&P0n?new yL(t,n):new Zsn(t,n)}function yin(n,t){return F$(t,102)&&uG(t,19).Bb&P0n?new yL(t,n):new Zsn(t,n)}function Min(n){return null==n.__elementTypeCategory$?10:n.__elementTypeCategory$}function Tin(n,t){return t==(cB(),cB(),uut)?n.toLocaleLowerCase():n.toLowerCase()}function jin(n){if(!n.e)throw hv(new Bv);return n.c=n.a=n.e,n.e=n.e.e,--n.d,n.a.f}function Ein(n){if(!n.c)throw hv(new Bv);return n.e=n.a=n.c,n.c=n.c.c,++n.d,n.a.f}function Sin(n){var t;for(++n.a,t=n.c.a.length;n.an.a[i]&&(i=e);return i}function Lin(n){var t;return!!(t=uG(oIn(n,(GYn(),Spt)),313))&&t.a==n}function Nin(n){var t;return!!(t=uG(oIn(n,(GYn(),Spt)),313))&&t.i==n}function $in(){$in=E,Ilt=Abn((uIn(),Uhn(cT(Llt,1),p1n,367,0,[Tlt,jlt,Elt,Slt,Plt])))}function Din(){Din=E,vdt=Abn((gPn(),Uhn(cT(Pdt,1),p1n,375,0,[wdt,gdt,pdt,ddt,bdt])))}function xin(){xin=E,wgt=Abn((kvn(),Uhn(cT(pgt,1),p1n,348,0,[sgt,ugt,fgt,lgt,hgt])))}function Rin(){Rin=E,Ejt=Abn((pyn(),Uhn(cT(xjt,1),p1n,323,0,[Tjt,kjt,yjt,vjt,Mjt])))}function Kin(){Kin=E,$mt=Abn((Gpn(),Uhn(cT(ajt,1),p1n,171,0,[Lmt,Cmt,Imt,Omt,Amt])))}function Fin(){Fin=E,rIt=Abn((zPn(),Uhn(cT(oIt,1),p1n,368,0,[tIt,YCt,eIt,ZCt,nIt])))}function _in(){_in=E,BAt=Abn((_Rn(),Uhn(cT(qAt,1),p1n,373,0,[xAt,DAt,KAt,RAt,FAt])))}function Bin(){Bin=E,sLt=Abn((pOn(),Uhn(cT(qLt,1),p1n,324,0,[iLt,rLt,oLt,cLt,aLt])))}function Hin(){Hin=E,ext=Abn((xdn(),Uhn(cT(axt,1),p1n,88,0,[ZDt,YDt,JDt,QDt,nxt])))}function Uin(){Uin=E,bNt=Abn((Rkn(),Uhn(cT(MNt,1),p1n,170,0,[hNt,sNt,oNt,fNt,uNt])))}function Gin(){Gin=E,iRt=Abn((Vkn(),Uhn(cT(hRt,1),p1n,256,0,[Zxt,tRt,Jxt,Yxt,nRt])))}function qin(){qin=E,HRt=Abn((KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])))}function Xin(){Xin=E,Yut=new iC("BY_SIZE",0),Zut=new iC("BY_SIZE_AND_SHAPE",1)}function zin(){zin=E,gft=new wC("EADES",0),pft=new wC("FRUCHTERMAN_REINGOLD",1)}function Vin(){Vin=E,dgt=new nI("READING_DIRECTION",0),ggt=new nI("ROTATION",1)}function Win(){Win=E,zlt=new Pt,Vlt=new At,qlt=new Lt,Xlt=new Ot,Wlt=new Nt}function Qin(n){this.b=new Zm,this.a=new Zm,this.c=new Zm,this.d=new Zm,this.e=n}function Jin(n){this.g=n,this.f=new Zm,this.a=e.Math.min(this.g.c.c,this.g.d.c)}function Yin(n,t,e){HF.call(this),Qrn(this),this.a=n,this.c=e,this.b=t.d,this.f=t.e}function Zin(n,t,e){var i;for(i=new Ww(e);i.a=0&&t0?t-1:t,lj(bj(xcn(xG(new fy,e),n.n),n.j),n.k)}function rrn(n){var t;t=new Yk,ttn((!n.q&&(n.q=new fV(p_t,n,11,10)),n.q),t)}function crn(n){return(2&n.i?"interface ":1&n.i?"":"class ")+(vK(n),n.o)}function arn(n){return dwn(n,vZn)>0?vZn:dwn(n,j1n)<0?j1n:pz(n)}function orn(n){return n<3?(man(n,b1n),n+1):n=-.01&&n.a<=Z2n&&(n.a=0),n.b>=-.01&&n.b<=Z2n&&(n.b=0),n}function Trn(n){var t,e;for(l_n(),e=G9n,t=0;te&&(e=n[t]);return e}function jrn(n,t){var e;if(!(e=EKn(n.Dh(),t)))throw hv(new vM(Gtt+t+ztt));return e}function Ern(n,t){var e;for(e=n;R0(e);)if((e=R0(e))==t)return!0;return!1}function Srn(n,t){var e,i,r;for(i=t.a.ld(),e=uG(t.a.md(),16).gc(),r=0;rn||n>t)throw hv(new YM("fromIndex: 0, toIndex: "+n+Q0n+t))}function Drn(n){if(n<0)throw hv(new vM("Illegal Capacity: "+n));this.g=this.aj(n)}function xrn(n,t){return YN(),oan(T1n),e.Math.abs(n-t)<=T1n||n==t||isNaN(n)&&isNaN(t)}function Rrn(n,t){var e,i,r,c;for(r=0,c=(i=n.d).length;r0&&(n.a/=t,n.b/=t),n}function Hrn(n){var t;return n.w?n.w:((t=O3(n))&&!t.Vh()&&(n.w=t),t)}function Urn(n,t){var e,i;i=n.a,e=kdn(n,t,null),i!=t&&!n.e&&(e=PWn(n,t,e)),e&&e.oj()}function Grn(n,t,e){var i,r;i=t;do{r=uM(n.p[i.p])+e,n.p[i.p]=r,i=n.a[i.p]}while(i!=t)}function qrn(n,t,e){var i=function(){return n.apply(i,arguments)};return t.apply(i,e),i}function Xrn(n){var t;return null==n?null:NCn(t=uG(n,195),t.length)}function zrn(n,t){if(null==n.g||t>=n.i)throw hv(new pL(t,n.i));return n.Wi(t,n.g[t])}function Vrn(n,t){var e,i;for(hZ(),i=new Zm,e=0;e=14&&t<=16)),n}function Fcn(n,t){var e;return tJ(t),vG(!!(e=n[":"+t]),"Enum constant undefined: "+t),e}function _cn(n,t,e,i,r,c){var a;return Rcn(e,a=VW(n,t)),a.i=r?8:0,a.f=i,a.e=r,a.g=c,a}function Bcn(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=1,this.c=n,this.a=e}function Hcn(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=2,this.c=n,this.a=e}function Ucn(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=6,this.c=n,this.a=e}function Gcn(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=7,this.c=n,this.a=e}function qcn(n,t,e,i,r){this.d=t,this.j=i,this.e=r,this.o=-1,this.p=4,this.c=n,this.a=e}function Xcn(n,t){var e,i,r,c;for(r=0,c=(i=t).length;r=0))throw hv(new vM("tolerance ("+n+") must be >= 0"));return n}function uan(n,t){var e;return F$(t,44)?n.c.Mc(t):(e=ymn(n,t),Svn(n,t),e)}function san(n,t,e){return Kbn(n,t),qon(n,e),Pcn(n,0),Ccn(n,1),mdn(n,!0),ddn(n,!0),n}function han(n,t){var e;if(e=n.gc(),t<0||t>e)throw hv(new w_(t,e));return new N_(n,t)}function fan(n,t){n.b=e.Math.max(n.b,t.d),n.e+=t.r+(0==n.a.c.length?0:n.c),kD(n.a,t)}function lan(n){TK(n.c>=0),Rvn(n.d,n.c)<0&&(n.a=n.a-1&n.d.a.length-1,n.b=n.d.c),n.c=-1}function ban(n){var t;for(t=n.c.Cc().Kc();t.Ob();)uG(t.Pb(),16).$b();n.c.$b(),n.d=0}function wan(n){var t,e,i,r;for(i=0,r=(e=n.a).length;i=0}function Ban(n,t){n.r>0&&n.c0&&0!=n.g&&Ban(n.i,t/n.r*n.i.d))}function Han(n,t){var e;e=n.c,n.c=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,1,e,n.c))}function Uan(n,t){var e;e=n.c,n.c=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,4,e,n.c))}function Gan(n,t){var e;e=n.k,n.k=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,2,e,n.k))}function qan(n,t){var e;e=n.D,n.D=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,2,e,n.D))}function Xan(n,t){var e;e=n.f,n.f=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,8,e,n.f))}function zan(n,t){var e;e=n.i,n.i=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,7,e,n.i))}function Van(n,t){var e;e=n.a,n.a=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,8,e,n.a))}function Wan(n,t){var e;e=n.b,n.b=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,0,e,n.b))}function Qan(n,t){var e;e=n.b,n.b=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,0,e,n.b))}function Jan(n,t){var e;e=n.c,n.c=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,1,e,n.c))}function Yan(n,t){var e;e=n.d,n.d=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,1,e,n.d))}function Zan(n,t,e){var i;n.b=t,n.a=e,i=512&~n.a?new $f:new ay,n.c=qFn(i,n.b,n.a)}function non(n,t){return EFn(n.e,t)?(PP(),ein(t)?new Cq(t,n):new OA(t,n)):new PA(t,n)}function ton(n){return 0>n?new mS:new OK(null,new i9(n+1,n))}function eon(n,t){var e;return hZ(),e=new sS(1),RA(n)?r2(e,n,t):VAn(e.f,n,t),new Vw(e)}function ion(n,t){var e,i;return e=n.c,(i=t.e[n.p])>0?uG(zq(e.a,i-1),10):null}function ron(n,t){var e,i;return(e=n.o+n.p)<(i=t.o+t.p)?-1:e==i?0:1}function con(n){var t;return F$(t=oIn(n,(GYn(),rmt)),167)?Qpn(uG(t,167)):null}function aon(n){var t;return(n=e.Math.max(n,2))>(t=pfn(n))?(t<<=1)>0?t:d1n:t}function oon(n){switch(_D(3!=n.e),n.e){case 2:return!1;case 0:return!0}return a7(n)}function uon(n,t){var e;return!!F$(t,8)&&(e=uG(t,8),n.a==e.a&&n.b==e.b)}function son(n,t){var e;e=new et,uG(t.b,68),uG(t.b,68),uG(t.b,68),Prn(t.a,new $U(n,e,t))}function hon(n,t){var e,i;for(i=t.vc().Kc();i.Ob();)rSn(n,(e=uG(i.Pb(),44)).ld(),e.md())}function fon(n,t){var e;e=n.d,n.d=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,11,e,n.d))}function lon(n,t){var e;e=n.j,n.j=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,13,e,n.j))}function bon(n,t){var e;e=n.b,n.b=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,21,e,n.b))}function won(n,t){0==(t9(),Nut?null:t.c).length&&RK(t,new G),r2(n.a,Nut?null:t.c,t)}function don(n,t){t.Ug("Hierarchical port constraint processing",1),ayn(n),yYn(n),t.Vg()}function gon(){gon=E,Sdt=new VC("START",0),Edt=new VC("MIDDLE",1),jdt=new VC("END",2)}function pon(){pon=E,VCt=new YI("P1_NODE_PLACEMENT",0),WCt=new YI("P2_EDGE_ROUTING",1)}function mon(){mon=E,Wft=new Cm(E4n),Qft=new Cm(S4n),Vft=new Cm(P4n),zft=new Cm(C4n)}function von(n){var t;return OB(n.f.g,n.d),MK(n.b),n.c=n.a,t=uG(n.a.Pb(),44),n.b=Phn(n),t}function kon(n){return null==n.b?(EP(),EP(),eBt):n.ul()?n.tl():n.sl()}function yon(n,t){var e;return!((e=null==t?-1:Ten(n.b,t,0))<0||(Con(n,e),0))}function Mon(n,t){var e;return tJ(t),e=t.g,!n.b[e]&&(uQ(n.b,e,t),++n.c,!0)}function Ton(n,t){var e,i;return e=1-t,i=n.a[e],n.a[e]=i.a[t],i.a[t]=n,n.b=!0,i.b=!1,i}function jon(n,t){var e,i;for(i=t.Kc();i.Ob();)e=uG(i.Pb(),272),n.b=!0,FV(n.e,e),e.b=n}function Eon(n,t){var e,i;return e=uG(oIn(n,(jYn(),rTt)),8),i=uG(oIn(t,rTt),8),ugn(e.b,i.b)}function Son(n,t,e){var i,r;return r=t>>5,i=31&t,E3(Dz(n.n[e][r],pz(Nz(i,1))),3)}function Pon(n,t,e){var i,r,c;for(c=n.a.length-1,r=n.b,i=0;i0?1:0:(!n.c&&(n.c=j2(Bsn(n.f))),n.c).e}function tun(n,t){t?null==n.B&&(n.B=n.D,n.D=null):null!=n.B&&(n.D=n.B,n.B=null)}function eun(n,t){return Xhn(),n==Flt&&t==Hlt||n==Hlt&&t==Flt||n==Blt&&t==_lt||n==_lt&&t==Blt}function iun(n,t){return Xhn(),n==Flt&&t==_lt||n==Flt&&t==Blt||n==Hlt&&t==Blt||n==Hlt&&t==_lt}function run(n,t){return YN(),oan(Z2n),e.Math.abs(0-t)<=Z2n||0==t||isNaN(0)&&isNaN(t)?0:n/t}function cun(n,t){return uM(pK(yx(cdn(YJ(new fX(null,new h3(n.c.b,16)),new _g(n)),t))))}function aun(n,t){return uM(pK(yx(cdn(YJ(new fX(null,new h3(n.c.b,16)),new Fg(n)),t))))}function oun(){return r_n(),Uhn(cT(bpt,1),p1n,259,0,[Zgt,tpt,ept,ipt,rpt,cpt,opt,Ygt,npt,apt])}function uun(){return THn(),Uhn(cT(Hjt,1),p1n,243,0,[$jt,Ijt,Ljt,Ojt,Ajt,Sjt,Njt,Djt,Pjt,Cjt])}function sun(n,t){t.Ug("General Compactor",1),Bpn(uG(zDn(n,(jOn(),LIt)),393)).Cg(n)}function hun(n,t){var e,i;return e=uG(zDn(n,(jOn(),FIt)),17),i=uG(zDn(t,FIt),17),d$(e.a,i.a)}function fun(n,t,e){var i,r;for(r=Fkn(n,0);r.b!=r.d.c;)(i=uG(I6(r),8)).a+=t,i.b+=e;return n}function lun(n,t,e){var i;for(i=n.b[e&n.f];i;i=i.b)if(e==i.a&&xQ(t,i.g))return i;return null}function bun(n,t,e){var i;for(i=n.c[e&n.f];i;i=i.d)if(e==i.f&&xQ(t,i.i))return i;return null}function wun(n,t,e){var i,r,c;for(i=0,r=0;r>>31;0!=i&&(n[e]=i)}function dun(n,t,e,i,r,c){var a;this.c=n,tTn(n,a=new Zm,t,n.b,e,i,r,c),this.a=new N4(a,0)}function gun(){this.c=new Vj(0),this.b=new Vj(F9n),this.d=new Vj(K9n),this.a=new Vj(_3n)}function pun(n,t,e,i,r,c,a){_E.call(this,n,t),this.d=e,this.e=i,this.c=r,this.b=c,this.a=n7(a)}function mun(n,t,e,i,r,c,a,o,u,s,h,f,l){return eLn(n,t,e,i,r,c,a,o,u,s,h,f,l),Sgn(n,!1),n}function vun(n){return n.b.c.i.k==(zIn(),lbt)?uG(oIn(n.b.c.i,(GYn(),rmt)),12):n.b.c}function kun(n){return n.b.d.i.k==(zIn(),lbt)?uG(oIn(n.b.d.i,(GYn(),rmt)),12):n.b.d}function yun(n){var t;return _A((t=t6(n)).a,0)?(gS(),gS(),fut):(gS(),new dR(t.b))}function Mun(n){var t;return _A((t=Z4(n)).a,0)?(dS(),dS(),hut):(dS(),new wR(t.b))}function Tun(n){var t;return _A((t=Z4(n)).a,0)?(dS(),dS(),hut):(dS(),new wR(t.c))}function jun(n){switch(n.g){case 2:return KQn(),_Rt;case 4:return KQn(),kRt;default:return n}}function Eun(n){switch(n.g){case 1:return KQn(),KRt;case 3:return KQn(),yRt;default:return n}}function Sun(n){switch(n.g){case 0:return new Wo;case 1:return new Qo;default:return null}}function Pun(){Pun=E,Hwt=new uF("edgelabelcenterednessanalysis.includelabel",(qx(),tot))}function Cun(){Cun=E,FEt=Lvn(gL(Aq(Aq(new wJ,(uIn(),Elt),(zYn(),kwt)),Slt,hwt),Plt),vwt)}function Iun(){Iun=E,XEt=Lvn(gL(Aq(Aq(new wJ,(uIn(),Elt),(zYn(),kwt)),Slt,hwt),Plt),vwt)}function Oun(){Oun=E,V_t=new Qk,Q_t=Uhn(cT(o_t,1),krt,179,0,[]),W_t=Uhn(cT(p_t,1),yrt,62,0,[])}function Aun(){Aun=E,Obt=new PC("TO_INTERNAL_LTR",0),Ibt=new PC("TO_INPUT_DIRECTION",1)}function Lun(){Lun=E,Tbt=new Bt,ybt=new Ht,Mbt=new Ut,kbt=new Gt,jbt=new qt,Ebt=new Xt}function Nun(n,t){t.Ug(g6n,1),Apn(FS(new Ad((zS(),new mY(n,!1,!1,new Ft))))),t.Vg()}function $un(n,t,e){e.Ug("DFS Treeifying phase",1),qmn(n,t),qKn(n,t),n.a=null,n.b=null,e.Vg()}function Dun(n,t){return qx(),RA(n)?r7(n,mK(t)):FA(n)?Rz(n,pK(t)):KA(n)?xz(n,gK(t)):n.Fd(t)}function xun(n,t){var e,i;for(tJ(t),i=t.vc().Kc();i.Ob();)e=uG(i.Pb(),44),n.zc(e.ld(),e.md())}function Run(n,t,e){var i;for(i=e.Kc();i.Ob();)if(!H5(n,t,i.Pb()))return!1;return!0}function Kun(n,t,e,i,r){var c;return e&&(c=emn(t.Dh(),n.c),r=e.Rh(t,-1-(-1==c?i:c),null,r)),r}function Fun(n,t,e,i,r){var c;return e&&(c=emn(t.Dh(),n.c),r=e.Th(t,-1-(-1==c?i:c),null,r)),r}function _un(n){var t;if(-2==n.b){if(0==n.e)t=-1;else for(t=0;0==n.a[t];t++);n.b=t}return n.b}function Bun(n){if(tJ(n),0==n.length)throw hv(new ZM("Zero length BigInteger"));qHn(this,n)}function Hun(n){this.i=n.gc(),this.i>0&&(this.g=this.aj(this.i+(this.i/8|0)+1),n.Qc(this.g))}function Uun(n,t,e){this.g=n,this.d=t,this.e=e,this.a=new Zm,RLn(this),hZ(),f$(this.a,null)}function Gun(n,t){t.q=n,n.d=e.Math.max(n.d,t.r),n.b+=t.d+(0==n.a.c.length?0:n.c),kD(n.a,t)}function qun(n,t){var e,i,r,c;return r=n.c,e=n.c+n.b,c=n.d,i=n.d+n.a,t.a>r&&t.ac&&t.b(r=n.a.length)?e=r:s3(t,e+1),n.a=r1(n.a,0,t)+""+i+sQ(n.a,e)}function msn(n,t){n.a=Lgn(n.a,1),n.c=e.Math.min(n.c,t),n.b=e.Math.max(n.b,t),n.d=Lgn(n.d,t)}function vsn(n,t){return t1||n.Ob())return++n.a,n.g=0,t=n.i,n.Ob(),t;throw hv(new Bv)}function Fsn(n){switch(n.a.g){case 1:return new KI;case 3:return new zTn;default:return new ml}}function _sn(n,t){switch(t){case 1:return!!n.n&&0!=n.n.i;case 2:return null!=n.k}return j4(n,t)}function Bsn(n){return p0n>22),r=n.h+t.h+(i>>22),p$(e&f0n,i&f0n,r&l0n)}function Thn(n,t){var e,i,r;return e=n.l-t.l,i=n.m-t.m+(e>>22),r=n.h-t.h+(i>>22),p$(e&f0n,i&f0n,r&l0n)}function jhn(n){var t,e;for(BQn(n),e=new Ww(n.d);e.a(i=n.gc()))throw hv(new w_(t,i));return n.Si()&&(e=A0(n,e)),n.Ei(t,e)}function wfn(n,t,e,i,r){var c,a;for(a=e;a<=r;a++)for(c=t;c<=i;c++)eTn(n,c,a)||HBn(n,c,a,!0,!1)}function dfn(n){var t,e,i;for(l_n(),e=Inn(PNt,zZn,8,2,0,1),i=0,t=0;t<2;t++)i+=.5,e[t]=WMn(i,n);return e}function gfn(n){var t,e;return p$(t=1+~n.l&f0n,e=~n.m+(0==t?1:0)&f0n,~n.h+(0==t&&0==e?1:0)&l0n)}function pfn(n){var t;if(n<0)return j1n;if(0==n)return 0;for(t=d1n;!(t&n);t>>=1);return t}function mfn(n,t,e){return!(n>=128)&&HA(n<64?E3(Nz(1,n),e):E3(Nz(1,n-64),t),0)}function vfn(n,t,e){return null==e?(!n.q&&(n.q=new Ym),u7(n.q,t)):(!n.q&&(n.q=new Ym),vJ(n.q,t,e)),n}function kfn(n,t,e){return null==e?(!n.q&&(n.q=new Ym),u7(n.q,t)):(!n.q&&(n.q=new Ym),vJ(n.q,t,e)),n}function yfn(n){var t,e;return zsn(e=new d7,n),kfn(e,(mon(),Wft),n),kqn(n,e,t=new Ym),zWn(n,e,t),e}function Mfn(n){var t,e;return t=n.t-n.k[n.o.p]*n.d+n.j[n.o.p]>n.f,e=n.u+n.e[n.o.p]*n.d>n.f*n.s*n.d,t||e}function Tfn(n,t){var e,i,r;for(e=!1,i=n.a[t].length,r=0;r=0,"Negative initial capacity"),vG(t>=0,"Non-positive load factor"),$V(this)}function $fn(n,t,e,i,r){var c,a;if(a=n.length,c=e.length,t<0||i<0||r<0||t+r>a||i+r>c)throw hv(new Lv)}function Dfn(n,t){var e,i,r,c,a;for(hZ(),a=!1,r=0,c=(i=t).length;r1||t>=0&&n.b<3)}function Yfn(n){var t,e,i;t=1+~n.l&f0n,e=~n.m+(0==t?1:0)&f0n,i=~n.h+(0==t&&0==e?1:0)&l0n,n.l=t,n.m=e,n.h=i}function Zfn(n){var t,e,i;for(hZ(),i=1,e=n.Kc();e.Ob();)i=31*i+(null!=(t=e.Pb())?Hon(t):0),i|=0;return i}function nln(n,t,e,i,r){var c;return c=gDn(n,t),e&&Yfn(c),r&&(n=hTn(n,t),Qat=i?gfn(n):p$(n.l,n.m,n.h)),c}function tln(n,t,e){n.g=mAn(n,t,(KQn(),kRt),n.b),n.d=mAn(n,e,kRt,n.b),0!=n.g.c&&0!=n.d.c&&AIn(n)}function eln(n,t,e){n.g=mAn(n,t,(KQn(),_Rt),n.j),n.d=mAn(n,e,_Rt,n.j),0!=n.g.c&&0!=n.d.c&&AIn(n)}function iln(n,t){switch(t){case 7:return!!n.e&&0!=n.e.i;case 8:return!!n.d&&0!=n.d.i}return Kpn(n,t)}function rln(n,t){switch(t.g){case 0:F$(n.b,641)||(n.b=new lsn);break;case 1:F$(n.b,642)||(n.b=new zG)}}function cln(n){if(0===n.g)return new eu;throw hv(new vM(lnt+(null!=n.f?n.f:""+n.g)))}function aln(n){if(0===n.g)return new nu;throw hv(new vM(lnt+(null!=n.f?n.f:""+n.g)))}function oln(n,t,e){return!Qj(JJ(new fX(null,new h3(n.c,16)),new hd(new GO(t,e)))).Bd((vS(),Kut))}function uln(n,t){return bD($kn(uG(oIn(t,(QGn(),cCt)),88)),new MO(n.c.e.a-n.b.e.a,n.c.e.b-n.b.e.b))<=0}function sln(n,t){for(;null!=n.g||n.c?null==n.g||0!=n.i&&uG(n.g[n.i-1],51).Ob():O0(n);)yA(t,Wxn(n))}function hln(n){var t;for(t=new Ww(n.a.b);t.ai?1:0}function yln(n){return kD(n.c,(Whn(),ZLt)),xrn(n.a,uM(pK(Jkn((lmn(),WTt)))))?new zu:new zp(n)}function Mln(n){for(;!n.d||!n.d.Ob();){if(!n.b||LM(n.b))return null;n.d=uG(xV(n.b),51)}return n.d}function Tln(n){switch(n.g){case 1:return K9n;default:case 2:return 0;case 3:return _3n;case 4:return F9n}}function jln(){var n;return QYn(),VHt||(n=eR(kJn("M",!0)),n=CX(kJn("M",!1),n),VHt=n)}function Eln(){Eln=E,CKt=new uA("ELK",0),IKt=new uA("JSON",1),PKt=new uA("DOT",2),OKt=new uA("SVG",3)}function Sln(){Sln=E,aEt=new kI("STACKED",0),rEt=new kI("REVERSE_STACKED",1),cEt=new kI("SEQUENCED",2)}function Pln(){Pln=E,gPt=new WI(q4n,0),dPt=new WI("MIDDLE_TO_MIDDLE",1),wPt=new WI("AVOID_OVERLAP",2)}function Cln(){Cln=E,tdt=new ji,edt=new Ei,ndt=new Mi,Zwt=new Si,tJ(new Ti),Ywt=new L}function Iln(){Iln=E,Pxt=new CN(15),Sxt=new _N((XYn(),W$t),Pxt),Cxt=mDt,Mxt=a$t,Txt=_$t,Ext=U$t,jxt=H$t}function Oln(n,t){var e,i,r,c,a;for(r=0,c=(i=t).length;r=n.b.c.length||(_ln(n,2*t+1),(e=2*t+2)0&&(t.Cd(e),e.i&&Zdn(e))}function Hln(n,t,e){var i;for(i=e-1;i>=0&&n[i]===t[i];i--);return i<0?0:$P(E3(n[i],L0n),E3(t[i],L0n))?-1:1}function Uln(n,t,e){var i,r;this.g=n,this.c=t,this.a=this,this.d=this,r=aon(e),i=Inn($at,l1n,227,r,0,1),this.b=i}function Gln(n,t,e,i,r){var c,a;for(a=e;a<=r;a++)for(c=t;c<=i;c++)if(eTn(n,c,a))return!0;return!1}function qln(n,t){var e;for(e=n.Zb().Cc().Kc();e.Ob();)if(uG(e.Pb(),16).Hc(t))return!0;return!1}function Xln(n,t,e){var i,r,c,a;for(tJ(e),a=!1,c=n.fd(t),r=e.Kc();r.Ob();)i=r.Pb(),c.Rb(i),a=!0;return a}function zln(n,t){var e,i;return i=uG(Lsn(n.a,4),129),e=Inn(xFt,Uit,424,t,0,1),null!=i&&qGn(i,0,e,0,i.length),e}function Vln(n,t){var e;return e=new Z_n(!!(256&n.f),n.i,n.a,n.d,!!(16&n.f),n.j,n.g,t),null!=n.e||(e.c=n),e}function Wln(n,t){var e;return n===t||!!F$(t,85)&&(e=uG(t,85),OOn(Mz(n),e.vc()))}function Qln(n,t,e){var i,r;for(r=e.Kc();r.Ob();)if(i=uG(r.Pb(),44),n.Be(t,i.md()))return!0;return!1}function Jln(n,t,e){return n.d[t.p][e.p]||(Kyn(n,t,e),n.d[t.p][e.p]=!0,n.d[e.p][t.p]=!0),n.a[t.p][e.p]}function Yln(n,t){return!(!n||n==t||!vR(t,(GYn(),zpt)))&&uG(oIn(t,(GYn(),zpt)),10)!=n}function Zln(n){switch(n.i){case 2:return!0;case 1:return!1;case-1:++n.c;default:return n.$l()}}function nbn(n){switch(n.i){case-2:return!0;case-1:return!1;case 1:--n.c;default:return n._l()}}function tbn(n){U0.call(this,"The given string does not match the expected format for individual spacings.",n)}function ebn(n,t){var e;t.Ug("Min Size Preprocessing",1),e=xAn(n),Myn(n,(lBn(),EOt),e.a),Myn(n,MOt,e.b),t.Vg()}function ibn(n){var t,e,i;for(t=0,i=Inn(PNt,zZn,8,n.b,0,1),e=Fkn(n,0);e.b!=e.d.c;)i[t++]=uG(I6(e),8);return i}function rbn(n,t,e){var i,r;for(i=new lS,r=Fkn(e,0);r.b!=r.d.c;)aq(i,new eN(uG(I6(r),8)));Xln(n,t,i)}function cbn(n,t){var e;return e=Lgn(n,t),$P(P3(n,t),0)|BA(P3(n,e),0)?e:Lgn(YZn,P3(Dz(e,63),1))}function abn(n,t){var e,i;return(e=uG(n.d.Bc(t),16))?((i=n.e.hc()).Gc(e),n.e.d-=e.gc(),e.$b(),i):null}function obn(n){var t;if((t=n.a.c.length)>0)return Vz(t-1,n.a.c.length),i7(n.a,t-1);throw hv(new _v)}function ubn(n,t,e){if(n>t)throw hv(new vM(o2n+n+u2n+t));if(n<0||t>e)throw hv(new YM(o2n+n+s2n+t+Q0n+e))}function sbn(n,t){null==n.D&&null!=n.B&&(n.D=n.B,n.B=null),qan(n,null==t?null:(tJ(t),t)),n.C&&n.hl(null)}function hbn(n,t){var e;e=null!=Jkn((lmn(),WTt))&&null!=t.Sg()?uM(pK(t.Sg()))/uM(pK(Jkn(WTt))):1,vJ(n.b,t,e)}function fbn(n,t){var e,i;if(0!=(i=n.c[t]))for(n.c[t]=0,n.d-=i,e=t+1;eR9n?n-i>R9n:i-n>R9n)}function Qbn(n,t){var e;for(e=0;er&&(USn(t.q,r),i=e!=t.q.d)),i}function Zbn(n,t){var i,r,c,a,o;return a=t.i,o=t.j,r=a-(i=n.f).i,c=o-i.j,e.Math.sqrt(r*r+c*c)}function nwn(n,t){var e;return(e=Kvn(n))||(!ZKt&&(ZKt=new Ps),YXn(),ttn((e=new Xm(sxn(t))).El(),n)),e}function twn(n,t){var e,i;return(e=uG(n.c.Bc(t),16))?((i=n.hc()).Gc(e),n.d-=e.gc(),e.$b(),n.mc(i)):n.jc()}function ewn(n,t){var e,i;for(i=0!=uRn(n.d,1),e=!0;e;)e=!1,e=t.c.mg(t.e,i),e|=PKn(n,t,i,!1),i=!i;Gon(n)}function iwn(n,t,e,i){var r,c;n.a=t,c=i?0:1,n.f=(r=new _On(n.c,n.a,e,c),new eBn(e,n.a,r,n.e,n.b,n.c==(ean(),BEt)))}function rwn(n){var t;return MK(n.a!=n.b),t=n.d.a[n.a],jK(n.b==n.d.c&&null!=t),n.c=n.a,n.a=n.a+1&n.d.a.length-1,t}function cwn(n){var t;if(0!=n.c)return n.c;for(t=0;t=n.c.b:n.a<=n.c.b))throw hv(new Bv);return t=n.a,n.a+=n.c.c,++n.b,xwn(t)}function own(n){var t;return zsn(t=new S$(n.a),n),kfn(t,(GYn(),rmt),n),t.o.a=n.g,t.o.b=n.f,t.n.a=n.i,t.n.b=n.j,t}function uwn(n){return(KQn(),LRt).Hc(n.j)?uM(pK(oIn(n,(GYn(),Mmt)))):Gfn(Uhn(cT(PNt,1),zZn,8,0,[n.i.n,n.n,n.a])).b}function swn(n){var t;return t=aN(KEt),uG(oIn(n,(GYn(),Hpt)),21).Hc((r_n(),rpt))&&Aq(t,(uIn(),Elt),(zYn(),Cwt)),t}function hwn(n){var t,e;for(e=new ek,t=new Ww(n);t.a=0?t:-t;i>0;)i%2==0?(e*=e,i=i/2|0):(r*=e,i-=1);return t<0?1/r:r}function pwn(n,t){var e,i,r;for(r=1,e=n,i=t>=0?t:-t;i>0;)i%2==0?(e*=e,i=i/2|0):(r*=e,i-=1);return t<0?1/r:r}function mwn(n,t){var e,i,r,c;return(c=fLn((i=t,(r=n?Kvn(n):null)&&r.Gl(),i)))==t&&(e=Kvn(n))&&e.Gl(),c}function vwn(n,t,e){var i,r;return r=n.f,n.f=t,4&n.Db&&!(1&n.Db)&&(i=new lV(n,1,0,r,t),e?e.nj(i):e=i),e}function kwn(n,t,e){var i,r;return r=n.b,n.b=t,4&n.Db&&!(1&n.Db)&&(i=new lV(n,1,3,r,t),e?e.nj(i):e=i),e}function ywn(n,t,e){var i,r;return r=n.a,n.a=t,4&n.Db&&!(1&n.Db)&&(i=new lV(n,1,1,r,t),e?e.nj(i):e=i),e}function Mwn(n){var t,e,i,r;if(null!=n)for(e=0;e=i||t-129&&n<128?(XG(),!(e=bot[t=n+128])&&(e=bot[t]=new Iw(n)),e):new Iw(n)}function Rwn(n){var t,e;return n>-129&&n<128?(eX(),!(e=Mot[t=n+128])&&(e=Mot[t]=new Aw(n)),e):new Aw(n)}function Kwn(n,t){n.a.c.length>0&&Lln(uG(zq(n.a,n.a.c.length-1),579),t)||kD(n.a,new r9(t))}function Fwn(n){var t,e;GB(),t=n.d.c-n.e.c,Prn((e=uG(n.g,154)).b,new Pg(t)),Prn(e.c,new Cg(t)),z8(e.i,new Ig(t))}function _wn(n){var t;return(t=new WM).a+="VerticalSegment ",QA(t,n.e),t.a+=" ",JA(t,KD(new FM,new Ww(n.k))),t.a}function Bwn(n,t){var e,i;for(e=0,i=Dgn(n,t).Kc();i.Ob();)e+=null!=oIn(uG(i.Pb(),12),(GYn(),lmt))?1:0;return e}function Hwn(n,t,e){var i,r,c;for(i=0,c=Fkn(n,0);c.b!=c.d.c&&!((r=uM(pK(I6(c))))>e);)r>=t&&++i;return i}function Uwn(n,t){WW(n);try{return n._b(t)}catch(e){if(F$(e=Ehn(e),212)||F$(e,169))return!1;throw hv(e)}}function Gwn(n,t){WW(n);try{return n.Hc(t)}catch(e){if(F$(e=Ehn(e),212)||F$(e,169))return!1;throw hv(e)}}function qwn(n,t){WW(n);try{return n.Mc(t)}catch(e){if(F$(e=Ehn(e),212)||F$(e,169))return!1;throw hv(e)}}function Xwn(n,t){WW(n);try{return n.xc(t)}catch(e){if(F$(e=Ehn(e),212)||F$(e,169))return null;throw hv(e)}}function zwn(n,t){WW(n);try{return n.Bc(t)}catch(e){if(F$(e=Ehn(e),212)||F$(e,169))return null;throw hv(e)}}function Vwn(n,t){switch(t.g){case 2:case 1:return Dgn(n,t);case 3:case 4:return Spn(Dgn(n,t))}return hZ(),hZ(),zot}function Wwn(n){var t;return 64&n.Db?vxn(n):((t=new fx(vxn(n))).a+=" (name: ",VA(t,n.zb),t.a+=")",t.a)}function Qwn(n){var t;return(t=uG(ain(n.c.c,""),233))||(t=new I2(UT(HT(new du,""),"Other")),Akn(n.c.c,"",t)),t}function Jwn(n,t,e){var i,r;return r=n.sb,n.sb=t,4&n.Db&&!(1&n.Db)&&(i=new lV(n,1,4,r,t),e?e.nj(i):e=i),e}function Ywn(n,t,e){var i,r;return r=n.r,n.r=t,4&n.Db&&!(1&n.Db)&&(i=new lV(n,1,8,r,n.r),e?e.nj(i):e=i),e}function Zwn(n,t,e){var i;return i=new Ken(n.e,4,13,t.c||(YYn(),N_t),null,Hyn(n,t),!1),e?e.nj(i):e=i,e}function ndn(n,t,e){var i;return i=new Ken(n.e,3,13,null,t.c||(YYn(),N_t),Hyn(n,t),!1),e?e.nj(i):e=i,e}function tdn(n,t){var e,i;return!(i=(e=uG(t,691)).el())&&e.fl(i=F$(t,90)?new CA(n,uG(t,29)):new g4(n,uG(t,156))),i}function edn(n,t,e){var i;n._i(n.i+1),i=n.Zi(t,e),t!=n.i&&qGn(n.g,t,n.g,t+1,n.i-t),uQ(n.g,t,i),++n.i,n.Mi(t,e),n.Ni()}function idn(n,t){var e;return t.a&&(e=t.a.a.length,n.a?JA(n.a,n.b):n.a=new lx(n.d),L4(n.a,t.a,t.d.length,e)),n}function rdn(n,t){var e;n.c=t,n.a=Jpn(t),n.a<54&&(n.f=(e=t.d>1?C4(t.a[0],t.a[1]):C4(t.a[0],0),W4(t.e>0?e:Men(e))))}function cdn(n,t){var e;return e=new un,n.a.Bd(e)?(UD(),new Xy(tJ(ven(n,e.a,t)))):(GQ(n),UD(),UD(),sut)}function adn(n,t){var e;0!=n.c.length&&(zL(e=uG(Ekn(n,Inn(pbt,e6n,10,n.c.length,0,1)),199),new Oe),WNn(e,t))}function odn(n,t){var e;0!=n.c.length&&(zL(e=uG(Ekn(n,Inn(pbt,e6n,10,n.c.length,0,1)),199),new Ae),WNn(e,t))}function udn(n,t){return RA(n)?m_(n,t):FA(n)?p_(n,t):KA(n)?(tJ(n),xA(n)===xA(t)):Cz(n)?n.Fb(t):xX(n)?SL(n,t):j3(n,t)}function sdn(n,t,e){if(t<0)zLn(n,e);else{if(!e.rk())throw hv(new vM(Gtt+e.xe()+qtt));uG(e,69).wk().Ek(n,n.hi(),t)}}function hdn(n,t,e){if(n<0||t>e)throw hv(new dM(o2n+n+s2n+t+", size: "+e));if(n>t)throw hv(new vM(o2n+n+u2n+t))}function fdn(n){var t;return 64&n.Db?vxn(n):((t=new fx(vxn(n))).a+=" (source: ",VA(t,n.d),t.a+=")",t.a)}function ldn(n){return n>=65&&n<=70?n-65+10:n>=97&&n<=102?n-97+10:n>=48&&n<=57?n-48:0}function bdn(n){var t,e,i,r;for(JYn(),i=0,r=(e=Nkn()).length;i=0?Rmn(n):hW(Rmn(Men(n))))}function Sdn(n,t,e,i,r,c){this.e=new Zm,this.f=(can(),Qjt),kD(this.e,n),this.d=t,this.a=e,this.b=i,this.f=r,this.c=c}function Pdn(n,t,i){n.n=Jq(nUt,[zZn,E0n],[376,28],14,[i,t0(e.Math.ceil(t/32))],2),n.o=t,n.p=i,n.j=t-1>>1,n.k=i-1>>1}function Cdn(n){return n=((n=((n-=n>>1&1431655765)>>2&858993459)+(858993459&n))>>4)+n&252645135,n+=n>>8,63&(n+=n>>16)}function Idn(n,t){var e,i;for(i=new DD(n);i.e!=i.i.gc();)if(e=uG(Zkn(i),142),xA(t)===xA(e))return!0;return!1}function Odn(n,t,e){var i,r;return(r=jxn(n.b,t))&&(i=uG(QXn(Len(n,r),""),29))?hxn(n,i,t,e):null}function Adn(n,t,e){var i,r;return(r=jxn(n.b,t))&&(i=uG(QXn(Len(n,r),""),29))?fxn(n,i,t,e):null}function Ldn(n,t){var e;if(null==(e=dcn(n.i,t)))throw hv(new SM("Node did not exist in input."));return Qun(t,e),null}function Ndn(n,t){var e;if(F$(e=EKn(n,t),331))return uG(e,35);throw hv(new vM(Gtt+t+"' is not a valid attribute"))}function $dn(n,t,e){var i;if(t>(i=n.gc()))throw hv(new w_(t,i));if(n.Si()&&n.Hc(e))throw hv(new vM(Xet));n.Gi(t,e)}function Ddn(n,t){t.Ug("Sort end labels",1),kS(JJ(sin(new fX(null,new h3(n.b,16)),new we),new de),new ge),t.Vg()}function xdn(){xdn=E,ZDt=new PO(Y2n,0),YDt=new PO(V2n,1),JDt=new PO(z2n,2),QDt=new PO(c3n,3),nxt=new PO("UP",4)}function Rdn(){Rdn=E,HAt=new fO("P1_STRUCTURE",0),UAt=new fO("P2_PROCESSING_ORDER",1),GAt=new fO("P3_EXECUTION",2)}function Kdn(){Kdn=E,qCt=Lvn(Lvn(gP(Lvn(Lvn(gP(Aq(new wJ,(Cjn(),VSt),(OHn(),fPt)),WSt),oPt),sPt),QSt),iPt),hPt)}function Fdn(n){switch(uG(oIn(n,(GYn(),Xpt)),311).g){case 1:kfn(n,Xpt,(Zen(),dpt));break;case 2:kfn(n,Xpt,(Zen(),ppt))}}function _dn(n){switch(n){case 0:return new Fk;case 1:return new Rk;case 2:return new Kk;default:throw hv(new Dv)}}function Bdn(n){switch(n.g){case 2:return YDt;case 1:return JDt;case 4:return QDt;case 3:return nxt;default:return ZDt}}function Hdn(n,t){switch(n.b.g){case 0:case 1:return t;case 2:case 3:return new gY(t.d,0,t.a,t.b);default:return null}}function Udn(n){switch(n.g){case 1:return _Rt;case 2:return yRt;case 3:return kRt;case 4:return KRt;default:return FRt}}function Gdn(n){switch(n.g){case 1:return KRt;case 2:return _Rt;case 3:return yRt;case 4:return kRt;default:return FRt}}function qdn(n){switch(n.g){case 1:return kRt;case 2:return KRt;case 3:return _Rt;case 4:return yRt;default:return FRt}}function Xdn(n,t,e,i){switch(t){case 1:return!n.n&&(n.n=new fV(lFt,n,1,7)),n.n;case 2:return n.k}return ajn(n,t,e,i)}function zdn(n,t,e){var i,r;return n.Pj()?(r=n.Qj(),i=HNn(n,t,e),n.Jj(n.Ij(7,xwn(e),i,t,r)),i):HNn(n,t,e)}function Vdn(n,t){var e,i,r;null==n.d?(++n.e,--n.f):(r=t.ld(),S7(n,i=((e=t.Bi())&vZn)%n.d.length,Txn(n,i,e,r)))}function Wdn(n,t){var e;e=!!(n.Bb&w1n),t?n.Bb|=w1n:n.Bb&=-1025,4&n.Db&&!(1&n.Db)&&Msn(n,new j9(n,1,10,e,t))}function Qdn(n,t){var e;e=!!(n.Bb&j0n),t?n.Bb|=j0n:n.Bb&=-4097,4&n.Db&&!(1&n.Db)&&Msn(n,new j9(n,1,12,e,t))}function Jdn(n,t){var e;e=!!(n.Bb&hrt),t?n.Bb|=hrt:n.Bb&=-8193,4&n.Db&&!(1&n.Db)&&Msn(n,new j9(n,1,15,e,t))}function Ydn(n,t){var e;e=!!(n.Bb&frt),t?n.Bb|=frt:n.Bb&=-2049,4&n.Db&&!(1&n.Db)&&Msn(n,new j9(n,1,11,e,t))}function Zdn(n){var t;n.g&&(CFn((t=n.c.kg()?n.f:n.a).a,n.o,!0),CFn(t.a,n.o,!1),kfn(n.o,(jYn(),JMt),($Pn(),rRt)))}function ngn(n){var t;if(!n.a)throw hv(new kM("Cannot offset an unassigned cut."));t=n.c-n.b,n.b+=t,iZ(n,t),eZ(n,t)}function tgn(n,t){var e;if(null==(e=cQ(n.k,t)))throw hv(new SM("Port did not exist in input."));return Qun(t,e),null}function egn(n){var t,e;for(e=bxn(Hrn(n)).Kc();e.Ob();)if(GUn(n,t=mK(e.Pb())))return h8((yP(),r_t),t);return null}function ign(n){var t,e;for(e=n.p.a.ec().Kc();e.Ob();)if((t=uG(e.Pb(),218)).f&&n.b[t.c]<-1e-10)return t;return null}function rgn(n){var t,e;for(e=jQ(new WM,91),t=!0;n.Ob();)t||(e.a+=TZn),t=!1,QA(e,n.Pb());return(e.a+="]",e).a}function cgn(n){var t,e,i;for(t=new Zm,i=new Ww(n.b);i.at?1:n==t?0==n?ugn(1/n,1/t):0:isNaN(n)?isNaN(t)?0:1:-1}function sgn(n){var t;return null==(t=n.a[n.c-1&n.a.length-1])?null:(n.c=n.c-1&n.a.length-1,uQ(n.a,n.c,null),t)}function hgn(n){var t,e,i;for(i=0,e=n.length,t=0;t=1?YDt:QDt:t}function mgn(n){switch(uG(oIn(n,(jYn(),Vyt)),223).g){case 1:return new ic;case 3:return new uc;default:return new ec}}function vgn(n){if(n.c)vgn(n.c);else if(n.d)throw hv(new kM("Stream already terminated, can't be modified or used"))}function kgn(n,t,e){var i;return i=n.a.get(t),n.a.set(t,void 0===e?null:e),void 0===i?(++n.c,++n.b.g):++n.d,i}function ygn(n,t,e){var i,r;for(r=n.a.ec().Kc();r.Ob();)if(i=uG(r.Pb(),10),yhn(e,uG(zq(t,i.p),16)))return i;return null}function Mgn(n,t,e){var i;return i=0,t&&(fN(n.a)?i+=t.f.a/2:i+=t.f.b/2),e&&(fN(n.a)?i+=e.f.a/2:i+=e.f.b/2),i}function Tgn(n,t,e){var i;!(i=e)&&(i=xG(new fy,0)),i.Ug(K4n,2),zyn(n.b,t,i.eh(1)),Xzn(n,t,i.eh(1)),hJn(t,i.eh(1)),i.Vg()}function jgn(n,t,e){var i;return gj(),Scn(i=new ns,t),pcn(i,e),n&&ttn((!n.a&&(n.a=new MD(eFt,n,5)),n.a),i),i}function Egn(n){var t;return 64&n.Db?vxn(n):((t=new fx(vxn(n))).a+=" (identifier: ",VA(t,n.k),t.a+=")",t.a)}function Sgn(n,t){var e;e=!!(n.Bb&Qtt),t?n.Bb|=Qtt:n.Bb&=-32769,4&n.Db&&!(1&n.Db)&&Msn(n,new j9(n,1,18,e,t))}function Pgn(n,t){var e;e=!!(n.Bb&Qtt),t?n.Bb|=Qtt:n.Bb&=-32769,4&n.Db&&!(1&n.Db)&&Msn(n,new j9(n,1,18,e,t))}function Cgn(n,t){var e;e=!!(n.Bb&VZn),t?n.Bb|=VZn:n.Bb&=-16385,4&n.Db&&!(1&n.Db)&&Msn(n,new j9(n,1,16,e,t))}function Ign(n,t){var e;e=!!(n.Bb&P0n),t?n.Bb|=P0n:n.Bb&=-65537,4&n.Db&&!(1&n.Db)&&Msn(n,new j9(n,1,20,e,t))}function Ogn(n){var t;return t=Inn(JHt,N1n,28,2,15,1),n-=P0n,t[0]=(n>>10)+C0n&D1n,t[1]=56320+(1023&n)&D1n,mvn(t,0,t.length)}function Agn(n){var t;return(t=YIn(n))>34028234663852886e22?M0n:t<-34028234663852886e22?T0n:t}function Lgn(n,t){var e;return _L(n)&&_L(t)&&p0n<(e=n+t)&&e"+V3(t.c):"e_"+Hon(t),n.b&&n.c?V3(n.b)+"->"+V3(n.c):"e_"+Hon(n))}function Kgn(n,t){return m_(t.b&&t.c?V3(t.b)+"->"+V3(t.c):"e_"+Hon(t),n.b&&n.c?V3(n.b)+"->"+V3(n.c):"e_"+Hon(n))}function Fgn(n,t){return YN(),oan(T1n),e.Math.abs(n-t)<=T1n||n==t||isNaN(n)&&isNaN(t)?0:nt?1:KL(isNaN(n),isNaN(t))}function _gn(){_gn=E,fxt=new IO(Y2n,0),sxt=new IO("POLYLINE",1),uxt=new IO("ORTHOGONAL",2),hxt=new IO("SPLINES",3)}function Bgn(){Bgn=E,IOt=new aO("ASPECT_RATIO_DRIVEN",0),OOt=new aO("MAX_SCALE_DRIVEN",1),COt=new aO("AREA_DRIVEN",2)}function Hgn(n,t,e){try{Vfn(n,t,e)}catch(i){throw F$(i=Ehn(i),606)?hv(new x9(i)):hv(i)}return t}function Ugn(n){var t,e;for(t=0,e=n.length;tt&&i.Ne(n[c-1],n[c])>0;--c)a=n[c],uQ(n,c,n[c-1]),uQ(n,c-1,a)}function Zgn(n,t){var e,i,r,c,a;if(e=t.f,Akn(n.c.d,e,t),null!=t.g)for(c=0,a=(r=t.g).length;ct){F4(e);break}}lW(e,t)}function tpn(n,t){var i,r;r=uM(pK(Omn(z4(t),(jYn(),dTt)))),TEn(t,i=e.Math.max(0,r/2-.5),1),kD(n,new xC(t,i))}function epn(n,t,e){e.Ug("Straight Line Edge Routing",1),e.dh(t,l7n),DXn(n,uG(zDn(t,(SK(),zCt)),27)),e.dh(t,w7n)}function ipn(n,t){0==n.n.c.length&&kD(n.n,new c0(n.s,n.t,n.i)),kD(n.b,t),zMn(uG(zq(n.n,n.n.c.length-1),209),t),nqn(n,t)}function rpn(n){var t;this.a=new nB(t=uG(n.e&&n.e(),9),uG(MF(t,t.length),9),0),this.b=Inn(dat,EZn,1,this.a.a.length,5,1)}function cpn(n){return Array.isArray(n)&&n.Tm===j?Ij(Tbn(n))+"@"+(Hon(n)>>>0).toString(16):n.toString()}function apn(n,t){return n.h==b0n&&0==n.m&&0==n.l?(t&&(Qat=p$(0,0,0)),LL((tin(),Zat))):(t&&(Qat=p$(n.l,n.m,n.h)),p$(0,0,0))}function opn(n,t){switch(t.g){case 2:return n.b;case 1:return n.c;case 4:return n.d;case 3:return n.a;default:return!1}}function upn(n,t){switch(t.g){case 2:return n.b;case 1:return n.c;case 4:return n.d;case 3:return n.a;default:return!1}}function spn(n,t,e,i){switch(t){case 3:return n.f;case 4:return n.g;case 5:return n.i;case 6:return n.j}return Xdn(n,t,e,i)}function hpn(n,t){if(t==n.d)return n.e;if(t==n.e)return n.d;throw hv(new vM("Node "+t+" not part of edge "+n))}function fpn(n,t){var e;if(F$(e=EKn(n.Dh(),t),102))return uG(e,19);throw hv(new vM(Gtt+t+"' is not a valid reference"))}function lpn(n,t,e,i){if(t<0)lRn(n,e,i);else{if(!e.rk())throw hv(new vM(Gtt+e.xe()+qtt));uG(e,69).wk().Ck(n,n.hi(),t,i)}}function bpn(n){var t;if(n.b){if(bpn(n.b),n.b.d!=n.c)throw hv(new Fv)}else n.d.dc()&&(t=uG(n.f.c.xc(n.e),16))&&(n.d=t)}function wpn(n){var t,e;for(VK(),t=n.o.b,e=uG(uG(Y9(n.r,(KQn(),KRt)),21),87).Kc();e.Ob();)uG(e.Pb(),117).e.b+=t}function dpn(n){var t,e,i;for(this.a=new XL,i=new Ww(n);i.a=r)return t.c+e;return t.c+t.b.gc()}function ppn(n,t){var e,i,r,c;for(EK(),r=t,Ntn(i=Jtn(n),0,i.length,r),e=0;e0&&(i+=r,++e);return e>1&&(i+=n.d*(e-1)),i}function Mpn(n){var t,e,i;return i=gCn(n),!pE(n.c)&&(nrn(i,"knownLayouters",e=new Ib),t=new jm(e),z8(n.c,t)),i}function Tpn(n){var t,e,i;for((i=new zM).a+="[",t=0,e=n.gc();t0&&(s3(t-1,n.length),58==n.charCodeAt(t-1))&&!mpn(n,n_t,t_t)}function Cpn(n,t){var e;return xA(n)===xA(t)||!!F$(t,92)&&(e=uG(t,92),n.e==e.e&&n.d==e.d&&d8(n,e.a))}function Ipn(n){switch(KQn(),n.g){case 4:return yRt;case 1:return kRt;case 3:return KRt;case 2:return _Rt;default:return FRt}}function Opn(n){var t,e;if(n.b)return n.b;for(e=Nut?null:n.d;e;){if(t=Nut?null:e.b)return t;e=Nut?null:e.d}return pS(),Eut}function Apn(n){var t,e;for(e=uM(pK(n.a.of((XYn(),LDt)))),t=new Ww(n.a.Sf());t.a>5),15,1))[e]=1<3;)r*=10,--c;n=(n+(r>>1))/r|0}return i.i=n,!0}function emn(n,t){var e,i,r;if(null==n.i&&eqn(n),e=n.i,-1!=(i=t.Lj()))for(r=e.length;i=0;--i)for(t=e[i],r=0;r>1,this.k=t-1>>1}function hmn(n){Stn(),uG(n.of((XYn(),q$t)),181).Hc((aUn(),oKt))&&(uG(n.of(bDt),181).Fc((eNn(),pRt)),uG(n.of(q$t),181).Mc(oKt))}function fmn(n){var t,e;t=n.d==(vAn(),Bdt),e=dPn(n),kfn(n.a,(jYn(),byt),t&&!e||!t&&e?(nMn(),LNt):(nMn(),ANt))}function lmn(){lmn=E,ZS(),jYn(),WTt=ETt,QTt=n7(Uhn(cT(lNt,1),m9n,149,0,[wTt,dTt,pTt,mTt,yTt,MTt,TTt,jTt,PTt,ITt,gTt,vTt,STt]))}function bmn(n,t){var e;return(e=uG(l8(n,ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15)).Qc(Nq(e.gc()))}function wmn(n,t){var e,i;if((i=new od(n.a.ad(t,!0))).a.gc()<=1)throw hv(new Rv);return(e=i.a.ec().Kc()).Pb(),uG(e.Pb(),40)}function dmn(n,t,e){var i;return i=uM(n.p[t.i.p])+uM(n.d[t.i.p])+t.n.b+t.a.b,uM(n.p[e.i.p])+uM(n.d[e.i.p])+e.n.b+e.a.b-i}function gmn(n,t){return n.i>0&&(t.lengthn.i&&uQ(t,n.i,null),t}function pmn(n){var t;return 64&n.Db?Wwn(n):((t=new fx(Wwn(n))).a+=" (instanceClassName: ",VA(t,n.D),t.a+=")",t.a)}function mmn(n){var t,e,i,r;for(r=0,e=0,i=n.length;e0&&(n._j(),-1!=Txn(n,((e=null==t?0:Hon(t))&vZn)%n.d.length,e,t))}function Mmn(n,t){var i,r;n.a=Lgn(n.a,1),n.c=e.Math.min(n.c,t),n.b=e.Math.max(n.b,t),n.d+=t,i=t-n.f,r=n.e+i,n.f=r-n.e-i,n.e=r}function Tmn(n,t){switch(t){case 3:return void vcn(n,0);case 4:return void kcn(n,0);case 5:return void ycn(n,0);case 6:return void Mcn(n,0)}Awn(n,t)}function jmn(n,t){switch(t.g){case 1:return YU(n.j,(Lun(),ybt));case 2:return YU(n.j,(Lun(),Tbt));default:return hZ(),hZ(),zot}}function Emn(n){var t;switch(ZW(),(t=n.Pc()).length){case 0:return jat;case 1:return new Uq(WW(t[0]));default:return new t1(Ugn(t))}}function Smn(n,t){n.Xj();try{n.d.bd(n.e++,t),n.f=n.d.j,n.g=-1}catch(e){throw F$(e=Ehn(e),77)?hv(new Fv):hv(e)}}function Pmn(){Pmn=E,lBt=new Is,cBt=new Os,aBt=new As,oBt=new Ls,uBt=new Ns,sBt=new $s,hBt=new Ds,fBt=new xs,bBt=new Rs}function Cmn(n,t){var e,i;return wL(),i=null,t==(e=bF((qy(),qy(),Hat)))&&(i=uG(U1(Bat,n),624)),i||(i=new JW(n),t==e&&r2(Bat,n,i)),i}function Imn(n){return Yyn(),(n.q?n.q:(hZ(),hZ(),Vot))._b((jYn(),LMt))?uG(oIn(n,LMt),203):uG(oIn(HQ(n),NMt),203)}function Omn(n,t){var e,i;return i=null,vR(n,(jYn(),kTt))&&(e=uG(oIn(n,kTt),96)).pf(t)&&(i=e.of(t)),null==i&&(i=oIn(HQ(n),t)),i}function Amn(n,t){var e,i,r;return!!F$(t,44)&&(i=(e=uG(t,44)).ld(),xQ(r=Xwn(n.Rc(),i),e.md())&&(null!=r||n.Rc()._b(i)))}function Lmn(n,t){var e,i;return n.f>0&&(n._j(),e=ZNn(n,((i=null==t?0:Hon(t))&vZn)%n.d.length,i,t))?e.md():null}function Nmn(n,t,e){var i,r,c;return n.Pj()?(i=n.i,c=n.Qj(),edn(n,i,t),r=n.Ij(3,null,t,i,c),e?e.nj(r):e=r):edn(n,n.i,t),e}function $mn(n,t,e){var i,r;return i=new Ken(n.e,4,10,F$(r=t.c,90)?uG(r,29):(YYn(),x_t),null,Hyn(n,t),!1),e?e.nj(i):e=i,e}function Dmn(n,t,e){var i,r;return i=new Ken(n.e,3,10,null,F$(r=t.c,90)?uG(r,29):(YYn(),x_t),Hyn(n,t),!1),e?e.nj(i):e=i,e}function xmn(n){var t;return VK(),t=new eN(uG(n.e.of((XYn(),U$t)),8)),n.B.Hc((aUn(),eKt))&&(t.a<=0&&(t.a=20),t.b<=0&&(t.b=20)),t}function Rmn(n){var t,e;return cHn(),e=pz(n),0!=(t=pz(Dz(n,32)))?new x3(e,t):e>10||e<0?new Z5(1,e):Rot[e]}function Kmn(n,t){var e;return _L(n)&&_L(t)&&p0n<(e=n%t)&&e=0?c=c.a[1]:(r=c,c=c.a[0])}return r}function nvn(n,t,e){var i,r,c;for(r=null,c=n.b;c;){if(i=n.a.Ne(t,c.d),e&&0==i)return c;i<=0?c=c.a[0]:(r=c,c=c.a[1])}return r}function tvn(n,t,e,i){var r,c,a;return r=!1,nWn(n.f,e,i)&&(hkn(n.f,n.a[t][e],n.a[t][i]),a=(c=n.a[t])[i],c[i]=c[e],c[e]=a,r=!0),r}function evn(n,t,e){var i,r,c;for(r=uG(cQ(n.b,e),183),i=0,c=new Ww(t.j);c.a>5,t&=31,r=n.d+e+(0==t?0:1),kCn(i=Inn(YHt,W1n,28,r,15,1),n.a,e,t),K4(c=new VV(n.e,r,i)),c}function cvn(n,t){var e;for(e=new Fz(ix(Xgn(n).a.Kc(),new h));hDn(e);)if(uG(N9(e),18).d.i.c==t)return!1;return!0}function avn(n,t,i){var r,c,a,o,u;return o=n.k,u=t.k,c=pK(Omn(n,r=i[o.g][u.g])),a=pK(Omn(t,r)),e.Math.max((tJ(c),c),(tJ(a),a))}function ovn(){return Error.stackTraceLimit>0?(e.Error.stackTraceLimit=Error.stackTraceLimit=64,!0):"stack"in new Error}function uvn(n,t){return YN(),YN(),oan(T1n),(e.Math.abs(n-t)<=T1n||n==t||isNaN(n)&&isNaN(t)?0:nt?1:KL(isNaN(n),isNaN(t)))>0}function svn(n,t){return YN(),YN(),oan(T1n),(e.Math.abs(n-t)<=T1n||n==t||isNaN(n)&&isNaN(t)?0:nt?1:KL(isNaN(n),isNaN(t)))<0}function hvn(n,t){return YN(),YN(),oan(T1n),(e.Math.abs(n-t)<=T1n||n==t||isNaN(n)&&isNaN(t)?0:nt?1:KL(isNaN(n),isNaN(t)))<=0}function fvn(n,t){for(var e=0;!t[e]||""==t[e];)e++;for(var i=t[e++];e0&&this.b>0&&(this.g=mX(this.c,this.b,this.a))}function Tvn(n,t){var e,i=n.a;t=String(t),i.hasOwnProperty(t)&&(e=i[t]);var r=(Cfn(),Wat)[typeof e];return r?r(e):Vbn(typeof e)}function jvn(n){if(!(Iet in n.a))throw hv(new SM("Every element must have an id."));return fNn(v0(n,Iet))}function Evn(n){var t,e;for(e=WOn(n),t=null;2==n.c;)EYn(n),t||(QYn(),QYn(),vzn(t=new QN(2),e),e=t),e.Jm(WOn(n));return e}function Svn(n,t){var e,i;return n._j(),(e=ZNn(n,((i=null==t?0:Hon(t))&vZn)%n.d.length,i,t))?(uan(n,e),e.md()):null}function Pvn(n,t){return n.e>t.e?1:n.et.d?n.e:n.d=48&&n<48+e.Math.min(10,10)?n-48:n>=97&&n<97?n-97+10:n>=65&&n<65?n-65+10:-1}function Ivn(n,t){if(t.c==n)return t.d;if(t.d==n)return t.c;throw hv(new vM("Input edge is not connected to the input port."))}function Ovn(n){if(Bvn(Fnt,n))return qx(),eot;if(Bvn(_nt,n))return qx(),tot;throw hv(new vM("Expecting true or false"))}function Avn(n){switch(typeof n){case pZn:return pln(n);case gZn:return OL(n);case dZn:return XK(n);default:return null==n?0:xx(n)}}function Lvn(n,t){if(n.a<0)throw hv(new kM("Did not call before(...) or after(...) before calling add(...)."));return hR(n,n.a,t),n}function Nvn(n){return W0(),F$(n,162)?uG(cQ(AFt,iut),295).Rg(n):PV(AFt,Tbn(n))?uG(cQ(AFt,Tbn(n)),295).Rg(n):null}function $vn(n){var t;return 32&n.Db||0!=(t=iQ(uG(Lsn(n,16),29)||n.ii())-iQ(n.ii()))&&Dvn(n,32,Inn(dat,EZn,1,t,5,1)),n}function Dvn(n,t,e){var i;n.Db&t?null==e?H$n(n,t):-1==(i=jTn(n,t))?n.Eb=e:uQ(Kcn(n.Eb),i,e):null!=e&&lFn(n,t,e)}function xvn(n,t,e,i){var r;0!=t.c.length&&(r=gRn(e,i),kS(krn(new fX(null,new h3(WLn(t),1)),new ba),new pY(n,e,r,i)))}function Rvn(n,t){var e,i,r;return i=n.a.length-1,e=t-n.b&i,r=n.c-t&i,jK(e<(n.c-n.b&i)),e>=r?(Pbn(n,t),-1):(Sbn(n,t),1)}function Kvn(n){var t,e,i;if(!(i=n.Jh()))for(t=0,e=n.Ph();e;e=e.Ph()){if(++t>O0n)return e.Qh();if((i=e.Jh())||e==n)break}return i}function Fvn(n,t){var e;return xA(t)===xA(n)||!!F$(t,21)&&(e=uG(t,21)).gc()==n.gc()&&n.Ic(e)}function _vn(n,t){return n.et.e?1:n.ft.f?1:Hon(n)-Hon(t)}function Bvn(n,t){return tJ(n),null!=t&&(!!m_(n,t)||n.length==t.length&&m_(n.toLowerCase(),t.toLowerCase()))}function Hvn(n){var t,e;return dwn(n,-129)>0&&dwn(n,128)<0?(tX(),t=pz(n)+128,!(e=got[t])&&(e=got[t]=new Ow(n)),e):new Ow(n)}function Uvn(){Uvn=E,tbt=new EC(q4n,0),Zlt=new EC("INSIDE_PORT_SIDE_GROUPS",1),Ylt=new EC("GROUP_MODEL_ORDER",2),nbt=new EC(X4n,3)}function Gvn(n){var t;return n.b||wj(n,!(t=QF(n.e,n.a))||!m_(_nt,Lmn((!t.b&&(t.b=new XR((YYn(),H_t),wBt,t)),t.b),"qualified"))),n.c}function qvn(n,t){var e,i;for(s3(t,n.length),e=n.charCodeAt(t),i=t+1;i2e3&&(Gat=n,qat=e.setTimeout(vE,10)),0==Uat++&&(Pin((Gy(),Fat)),!0)}function wkn(n,t,e){var i;(Aut?(Opn(n),1):Lut||Dut?(pS(),1):$ut&&(pS(),0))&&((i=new iB(t)).b=e,qIn(n,i))}function dkn(n,t){var e;e=!n.A.Hc((Qmn(),JRt))||n.q==($Pn(),cRt),n.u.Hc((eNn(),wRt))?e?QQn(n,t):MQn(n,t):n.u.Hc(gRt)&&(e?YWn(n,t):MJn(n,t))}function gkn(n){var t;xA(zDn(n,(XYn(),E$t)))===xA((Own(),Oxt))&&(R0(n)?(t=uG(zDn(R0(n),E$t),346),Myn(n,E$t,t)):Myn(n,E$t,Axt))}function pkn(n){var t,e;return!!vR(n.d.i,(jYn(),UMt))&&(t=uG(oIn(n.c.i,UMt),17),e=uG(oIn(n.d.i,UMt),17),d$(t.a,e.a)>0)}function mkn(n,t,i){return new gY(e.Math.min(n.a,t.a)-i/2,e.Math.min(n.b,t.b)-i/2,e.Math.abs(n.a-t.a)+i,e.Math.abs(n.b-t.b)+i)}function vkn(n){var t;this.d=new Zm,this.j=new sj,this.g=new sj,t=n.g.b,this.f=uG(oIn(HQ(t),(jYn(),Byt)),88),this.e=uM(pK(eyn(t,yTt)))}function kkn(n){this.d=new Zm,this.e=new u8,this.c=Inn(YHt,W1n,28,(KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length,15,1),this.b=n}function ykn(n,t,e){var i;switch(i=e[n.g][t],n.g){case 1:case 3:return new MO(0,i);case 2:case 4:return new MO(i,0);default:return null}}function Mkn(n,t,e){var i;i=uG(A1(t.f),205);try{i.rf(n,e),WQ(t.f,i)}catch(r){throw F$(r=Ehn(r),103),hv(r)}}function Tkn(n,t,e){var i,r,c,a;return i=null,(c=DVn(aan(),t))&&(r=null,null!=(a=vVn(c,e))&&(r=n.qf(c,a)),i=r),i}function jkn(n,t,e,i){var r;if(t>=(r=n.length))return r;for(t=t>0?t:0;ti&&uQ(t,i,null),t}function Skn(n,t){var e,i;for(i=n.a.length,t.lengthi&&uQ(t,i,null),t}function Pkn(n,t){var e,i;++n.j,null!=t&&e$n(t,e=F$(i=n.a.Cb,99)?uG(i,99).th():null)?Dvn(n.a,4,e):Dvn(n.a,4,uG(t,129))}function Ckn(n){var t;if(null==n)return null;if(null==(t=Exn(yXn(n,!0))))throw hv(new PM("Invalid hexBinary value: '"+n+"'"));return t}function Ikn(n,t,e){var i;t.a.length>0&&(kD(n.b,new hG(t.a,e)),0<(i=t.a.length)?t.a=r1(t.a,0,0):0>i&&(t.a+=V$(Inn(JHt,N1n,28,-i,15,1))))}function Okn(n,t,e){var i;if(!e[t.d])for(e[t.d]=!0,i=new Ww(Ebn(t));i.a=n.b>>1)for(i=n.c,e=n.b;e>t;--e)i=i.b;else for(i=n.a.a,e=0;e=0?n.Wh(r):$Nn(n,i):e<0?$Nn(n,i):uG(i,69).wk().Bk(n,n.hi(),e)}function Qkn(n){var t,e;for(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),t=(e=n.o).c.Kc();t.e!=t.i.gc();)uG(t.Yj(),44).md();return Tnn(e)}function Jkn(n){var t;if(F$(n.a,4)){if(null==(t=Nvn(n.a)))throw hv(new kM(Bnt+n.b+"'. "+Rnt+(vK($Ft),$Ft.k)+Knt));return t}return n.a}function Ykn(n,t){var e,i;if(n.j.length!=t.j.length)return!1;for(e=0,i=n.j.length;e=64&&t<128&&(r=S3(r,Nz(1,t-64)));return r}function eyn(n,t){var e,i;return i=null,vR(n,(XYn(),ODt))&&(e=uG(oIn(n,ODt),96)).pf(t)&&(i=e.of(t)),null==i&&HQ(n)&&(i=oIn(HQ(n),t)),i}function iyn(n,t){var e;return e=uG(oIn(n,(jYn(),bMt)),75),_$(t,cbt)?e?BY(e):(e=new Uk,kfn(n,bMt,e)):e&&kfn(n,bMt,null),e}function ryn(){ryn=E,XYn(),ift=SDt,Jht=M$t,Xht=c$t,Yht=W$t,MEn(),tft=cst,nft=ist,eft=ost,Zht=est,pbn(),Vht=Hht,zht=Bht,Wht=Ght,Qht=qht}function cyn(n){switch(qS(),this.c=new Zm,this.d=n,n.g){case 0:case 2:this.a=kJ(Qlt),this.b=M0n;break;case 3:case 1:this.a=Qlt,this.b=T0n}}function ayn(n){var t;L_(uG(oIn(n,(jYn(),JMt)),101))&&(c$n((u3(0,(t=n.b).c.length),uG(t.c[0],30))),c$n(uG(zq(t,t.c.length-1),30)))}function oyn(n,t){t.Ug("Self-Loop post-processing",1),kS(JJ(JJ(sin(new fX(null,new h3(n.b,16)),new Di),new xi),new Ri),new Ki),t.Vg()}function uyn(n,t,e){var i;if(n.c)ycn(n.c,n.c.i+t),Mcn(n.c,n.c.j+e);else for(i=new Ww(n.b);i.a=0&&(e.d=n.t);break;case 3:n.t>=0&&(e.a=n.t)}n.C&&(e.b=n.C.b,e.c=n.C.c)}function pyn(){pyn=E,Tjt=new wI(k9n,0),kjt=new wI(D6n,1),yjt=new wI("LINEAR_SEGMENTS",2),vjt=new wI("BRANDES_KOEPF",3),Mjt=new wI(v9n,4)}function myn(){myn=E,Nht=new lC(o3n,0),Lht=new lC(u3n,1),$ht=new lC(s3n,2),Dht=new lC(h3n,3),Nht.a=!1,Lht.a=!0,$ht.a=!1,Dht.a=!0}function vyn(){vyn=E,yht=new hC(o3n,0),kht=new hC(u3n,1),Mht=new hC(s3n,2),Tht=new hC(h3n,3),yht.a=!1,kht.a=!0,Mht.a=!1,Tht.a=!0}function kyn(n,t,e,i){var r;return e>=0?n.Sh(t,e,i):(n.Ph()&&(i=(r=n.Fh())>=0?n.Ah(i):n.Ph().Th(n,-1-r,null,i)),n.Ch(t,e,i))}function yyn(n,t){switch(t){case 7:return!n.e&&(n.e=new f_(aFt,n,7,4)),void Czn(n.e);case 8:return!n.d&&(n.d=new f_(aFt,n,8,5)),void Czn(n.d)}Tmn(n,t)}function Myn(n,t,e){return null==e?(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),Svn(n.o,t)):(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),rSn(n.o,t,e)),n}function Tyn(n,t){var e,i,r,c;for(hZ(),e=n,c=t,F$(n,21)&&!F$(t,21)&&(e=t,c=n),r=e.Kc();r.Ob();)if(i=r.Pb(),c.Hc(i))return!1;return!0}function jyn(n,t,e,i){if(t.ae.b)return!0}return!1}function Eyn(n,t){return RA(n)?!!bZn[t]:n.Sm?!!n.Sm[t]:FA(n)?!!lZn[t]:!!KA(n)&&!!fZn[t]}function Syn(n){var t;t=n.a;do{(t=uG(N9(new Fz(ix(qgn(t).a.Kc(),new h))),18).c.i).k==(zIn(),wbt)&&n.b.Fc(t)}while(t.k==(zIn(),wbt));n.b=Spn(n.b)}function Pyn(n,t){var i,r,c;for(c=n,r=new Fz(ix(qgn(t).a.Kc(),new h));hDn(r);)(i=uG(N9(r),18)).c.i.c&&(c=e.Math.max(c,i.c.i.c.p));return c}function Cyn(n,t){var e,i,r;for(r=0,i=uG(uG(Y9(n.r,t),21),87).Kc();i.Ob();)r+=(e=uG(i.Pb(),117)).d.d+e.b.Mf().b+e.d.a,i.Ob()&&(r+=n.w);return r}function Iyn(n,t){var e,i,r;for(r=0,i=uG(uG(Y9(n.r,t),21),87).Kc();i.Ob();)r+=(e=uG(i.Pb(),117)).d.b+e.b.Mf().a+e.d.c,i.Ob()&&(r+=n.w);return r}function Oyn(n){var t,e,i;if(e=0,0==(i=GFn(n)).c.length)return 1;for(t=new Ww(i);t.a=0?n.Lh(a,e,!0):YNn(n,c,e):uG(c,69).wk().yk(n,n.hi(),r,e,i)}function xyn(n,t,e,i){var r;(r=bdn(t.pf((XYn(),K$t))?uG(t.of(K$t),21):n.j))!=(JYn(),sht)&&(e&&!vvn(r)||LOn(Sxn(n,r,i),t))}function Ryn(n){switch(n.g){case 1:return ehn(),pht;case 3:return ehn(),wht;case 2:return ehn(),ght;case 4:return ehn(),dht;default:return null}}function Kyn(n,t,e){if(n.e)switch(n.b){case 1:JY(n.c,t,e);break;case 0:YY(n.c,t,e)}else C5(n.c,t,e);n.a[t.p][e.p]=n.c.i,n.a[e.p][t.p]=n.c.e}function Fyn(n){var t,e;if(null==n)return null;for(e=Inn(pbt,zZn,199,n.length,0,2),t=0;t=0)return i;if(n.ol())for(e=0;e=(r=n.gc()))throw hv(new w_(t,r));if(n.Si()&&(i=n.dd(e))>=0&&i!=t)throw hv(new vM(Xet));return n.Xi(t,e)}function Gyn(n,t){if(this.a=uG(WW(n),253),this.b=uG(WW(t),253),n.Ed(t)>0||n==(py(),Mat)||t==(my(),Tat))throw hv(new vM("Invalid range: "+N5(n,t)))}function qyn(n){var t,e;for(this.b=new Zm,this.c=n,this.a=!1,e=new Ww(n.a);e.a0),(t&-t)==t)return t0(t*uRn(n,31)*4.656612873077393e-10);do{i=(e=uRn(n,31))%t}while(e-i+(t-1)<0);return t0(i)}function rMn(n,t,e){switch(e.g){case 1:n.a=t.a/2,n.b=0;break;case 2:n.a=t.a,n.b=t.b/2;break;case 3:n.a=t.a/2,n.b=t.b;break;case 4:n.a=0,n.b=t.b/2}}function cMn(n,t,e,i){var r,c;for(r=t;r1&&(r=Xyn(n,t)),r}function sMn(n){var t;return new MO(t=uM(pK(zDn(n,(XYn(),BDt))))*e.Math.sqrt((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a).i),t/uM(pK(zDn(n,_Dt))))}function hMn(n){var t;return n.f&&n.f.Vh()&&(t=uG(n.f,54),n.f=uG(mwn(n,t),84),n.f!=t&&4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,9,8,t,n.f))),n.f}function fMn(n){var t;return n.i&&n.i.Vh()&&(t=uG(n.i,54),n.i=uG(mwn(n,t),84),n.i!=t&&4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,9,7,t,n.i))),n.i}function lMn(n){var t;return n.b&&64&n.b.Db&&(t=n.b,n.b=uG(mwn(n,t),19),n.b!=t&&4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,9,21,t,n.b))),n.b}function bMn(n,t){var e,i,r;null==n.d?(++n.e,++n.f):(i=t.Bi(),eKn(n,n.f+1),r=(i&vZn)%n.d.length,!(e=n.d[r])&&(e=n.d[r]=n.dk()),e.Fc(t),++n.f)}function wMn(n,t,e){var i;return!t.tk()&&(-2!=t.Ik()?null==(i=t.ik())?null==e:udn(i,e):t.qk()==n.e.Dh()&&null==e)}function dMn(){var n;man(16,b1n),n=aon(16),this.b=Inn(Cat,l1n,303,n,0,1),this.c=Inn(Cat,l1n,303,n,0,1),this.a=null,this.e=null,this.i=0,this.f=n-1,this.g=0}function gMn(n){LF.call(this),this.k=(zIn(),dbt),this.j=(man(6,g1n),new R7(6)),this.b=(man(2,g1n),new R7(2)),this.d=new $k,this.f=new xk,this.a=n}function pMn(n){var t,e;n.c.length<=1||(iAn(n,uG((t=w_n(n,(KQn(),KRt))).a,17).a,uG(t.b,17).a),iAn(n,uG((e=w_n(n,_Rt)).a,17).a,uG(e.b,17).a))}function mMn(n,t,e){var i,r;for(i=(r=n.a.b).c.length;i102?-1:n<=57?n-48:n<65?-1:n<=70?n-65+10:n<97?-1:n-97+10}function IMn(n,t){if(null==n)throw hv(new MM("null key in entry: null="+t));if(null==t)throw hv(new MM("null value in entry: "+n+"=null"))}function OMn(n,t){for(var e,i;n.Ob();){if(!t.Ob())return!1;if(e=n.Pb(),i=t.Pb(),!(xA(e)===xA(i)||null!=e&&udn(e,i)))return!1}return!t.Ob()}function AMn(n,t){var i;return i=Uhn(cT(eUt,1),I0n,28,15,[Nbn(n.a[0],t),Nbn(n.a[1],t),Nbn(n.a[2],t)]),n.d&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function LMn(n,t){var i;return i=Uhn(cT(eUt,1),I0n,28,15,[$bn(n.a[0],t),$bn(n.a[1],t),$bn(n.a[2],t)]),n.d&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function NMn(n,t,e){L_(uG(oIn(t,(jYn(),JMt)),101))||(Z8(n,t,yOn(t,e)),Z8(n,t,yOn(t,(KQn(),KRt))),Z8(n,t,yOn(t,yRt)),hZ(),f$(t.j,new Gg(n)))}function $Mn(n){var t,e;for(n.c||oVn(n),e=new Uk,N3(t=new Ww(n.a));t.a0&&(s3(0,t.length),43==t.charCodeAt(0))?(s3(1,t.length+1),t.substr(1)):t)}function nTn(n){var t;return null==n?null:new PN((t=yXn(n,!0)).length>0&&(s3(0,t.length),43==t.charCodeAt(0))?(s3(1,t.length+1),t.substr(1)):t)}function tTn(n,t,e,i,r,c,a,o){var u,s;i&&((u=i.a[0])&&tTn(n,t,e,u,r,c,a,o),ljn(n,e,i.d,r,c,a,o)&&t.Fc(i),(s=i.a[1])&&tTn(n,t,e,s,r,c,a,o))}function eTn(n,t,e){try{return _A(Son(n,t,e),1)}catch(i){throw F$(i=Ehn(i),333)?hv(new dM(b3n+n.o+"*"+n.p+w3n+t+TZn+e+d3n)):hv(i)}}function iTn(n,t,e){try{return _A(Son(n,t,e),0)}catch(i){throw F$(i=Ehn(i),333)?hv(new dM(b3n+n.o+"*"+n.p+w3n+t+TZn+e+d3n)):hv(i)}}function rTn(n,t,e){try{return _A(Son(n,t,e),2)}catch(i){throw F$(i=Ehn(i),333)?hv(new dM(b3n+n.o+"*"+n.p+w3n+t+TZn+e+d3n)):hv(i)}}function cTn(n,t){if(-1==n.g)throw hv(new xv);n.Xj();try{n.d.hd(n.g,t),n.f=n.d.j}catch(e){throw F$(e=Ehn(e),77)?hv(new Fv):hv(e)}}function aTn(n){var t,e,i;for(e=new Ww(n.b);e.ac&&uQ(t,c,null),t}function uTn(n,t){var e,i;if(i=n.gc(),null==t){for(e=0;e0&&(u+=r),s[h]=a,a+=o*(u+i)}function TTn(n){var t,e,i;for(i=n.f,n.n=Inn(eUt,I0n,28,i,15,1),n.d=Inn(eUt,I0n,28,i,15,1),t=0;t0?n.c:0),++c;n.b=r,n.d=a}function ATn(n,t){var i;return i=Uhn(cT(eUt,1),I0n,28,15,[eMn(n,(Yrn(),jst),t),eMn(n,Est,t),eMn(n,Sst,t)]),n.f&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function LTn(n,t,e){try{HBn(n,t+n.j,e+n.k,!1,!0)}catch(i){throw F$(i=Ehn(i),77)?hv(new dM(i.g+g3n+t+TZn+e+").")):hv(i)}}function NTn(n,t,e){try{HBn(n,t+n.j,e+n.k,!0,!1)}catch(i){throw F$(i=Ehn(i),77)?hv(new dM(i.g+g3n+t+TZn+e+").")):hv(i)}}function $Tn(n){var t;vR(n,(jYn(),PMt))&&((t=uG(oIn(n,PMt),21)).Hc((VDn(),Bxt))?(t.Mc(Bxt),t.Fc(Uxt)):t.Hc(Uxt)&&(t.Mc(Uxt),t.Fc(Bxt)))}function DTn(n){var t;vR(n,(jYn(),PMt))&&((t=uG(oIn(n,PMt),21)).Hc((VDn(),Vxt))?(t.Mc(Vxt),t.Fc(Xxt)):t.Hc(Xxt)&&(t.Mc(Xxt),t.Fc(Vxt)))}function xTn(n,t,e,i){var r,c,a;return null==n.a&&nOn(n,t),a=t.b.j.c.length,c=e.d.p,(r=i.d.p-1)<0&&(r=a-1),c<=r?n.a[r]-n.a[c]:n.a[a-1]-n.a[c]+n.a[r]}function RTn(n){var t,e;if(!n.b)for(n.b=o6(uG(n.f,27).kh().i),e=new DD(uG(n.f,27).kh());e.e!=e.i.gc();)t=uG(Zkn(e),135),kD(n.b,new Wy(t));return n.b}function KTn(n){var t,e;if(!n.e)for(n.e=o6(RJ(uG(n.f,27)).i),e=new DD(RJ(uG(n.f,27)));e.e!=e.i.gc();)t=uG(Zkn(e),123),kD(n.e,new Jp(t));return n.e}function FTn(n){var t,e;if(!n.a)for(n.a=o6(wZ(uG(n.f,27)).i),e=new DD(wZ(uG(n.f,27)));e.e!=e.i.gc();)t=uG(Zkn(e),27),kD(n.a,new Wx(n,t));return n.a}function _Tn(n){var t;if(!n.C&&(null!=n.D||null!=n.B))if(t=KWn(n))n.hl(t);else try{n.hl(null)}catch(e){if(!F$(e=Ehn(e),63))throw hv(e)}return n.C}function BTn(n){switch(n.q.g){case 5:QEn(n,(KQn(),yRt)),QEn(n,KRt);break;case 4:TVn(n,(KQn(),yRt)),TVn(n,KRt);break;default:PAn(n,(KQn(),yRt)),PAn(n,KRt)}}function HTn(n){switch(n.q.g){case 5:JEn(n,(KQn(),kRt)),JEn(n,_Rt);break;case 4:jVn(n,(KQn(),kRt)),jVn(n,_Rt);break;default:CAn(n,(KQn(),kRt)),CAn(n,_Rt)}}function UTn(n,t){var i,r,c;for(c=new sj,r=n.Kc();r.Ob();)tHn(i=uG(r.Pb(),36),c.a,0),c.a+=i.f.a+t,c.b=e.Math.max(c.b,i.f.b);return c.b>0&&(c.b+=t),c}function GTn(n,t){var i,r,c;for(c=new sj,r=n.Kc();r.Ob();)tHn(i=uG(r.Pb(),36),0,c.b),c.b+=i.f.b+t,c.a=e.Math.max(c.a,i.f.a);return c.a>0&&(c.a+=t),c}function qTn(n){var t,i,r;for(r=vZn,i=new Ww(n.a);i.a>16==6?n.Cb.Th(n,5,fFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||n.ii(),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function WTn(n){EZ();var t=n.e;if(t&&t.stack){var e=t.stack,i=t+"\n";return e.substring(0,i.length)==i&&(e=e.substring(i.length)),e.split("\n")}return[]}function QTn(n){var t;return Tan(),(t=wot)[n>>>28]|t[n>>24&15]<<4|t[n>>20&15]<<8|t[n>>16&15]<<12|t[n>>12&15]<<16|t[n>>8&15]<<20|t[n>>4&15]<<24|t[15&n]<<28}function JTn(n){var t,i,r;n.b==n.c&&(r=n.a.length,i=pfn(e.Math.max(8,r))<<1,0!=n.b?(Pon(n,t=MF(n.a,i),r),n.a=t,n.b=0):Xv(n.a,i),n.c=r)}function YTn(n,t){var e;return(e=n.b).pf((XYn(),uDt))?e.ag()==(KQn(),_Rt)?-e.Mf().a-uM(pK(e.of(uDt))):t+uM(pK(e.of(uDt))):e.ag()==(KQn(),_Rt)?-e.Mf().a:t}function ZTn(n){var t;return 0!=n.b.c.length&&uG(zq(n.b,0),72).a?uG(zq(n.b,0),72).a:null!=(t=sY(n))?t:""+(n.c?Ten(n.c.a,n,0):-1)}function njn(n){var t;return 0!=n.f.c.length&&uG(zq(n.f,0),72).a?uG(zq(n.f,0),72).a:null!=(t=sY(n))?t:""+(n.i?Ten(n.i.j,n,0):-1)}function tjn(n,t){var e,i;if(t<0||t>=n.gc())return null;for(e=t;e0?n.c:0),c=e.Math.max(c,t.d),++r;n.e=a,n.b=c}function rjn(n){var t,e;if(!n.b)for(n.b=o6(uG(n.f,123).kh().i),e=new DD(uG(n.f,123).kh());e.e!=e.i.gc();)t=uG(Zkn(e),135),kD(n.b,new Wy(t));return n.b}function cjn(n,t){var e,i,r;if(t.dc())return EK(),EK(),KFt;for(e=new cF(n,t.gc()),r=new DD(n);r.e!=r.i.gc();)i=Zkn(r),t.Hc(i)&&ttn(e,i);return e}function ajn(n,t,e,i){return 0==t?i?(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),n.o):(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),Tnn(n.o)):Dyn(n,t,e,i)}function ojn(n){var t,e;if(n.rb)for(t=0,e=n.rb.i;t>22))>>22)<0||(n.l=e&f0n,n.m=i&f0n,n.h=r&l0n,0)))}function ljn(n,t,e,i,r,c,a){var o,u;return!(t.Te()&&(u=n.a.Ne(e,i),u<0||!r&&0==u)||t.Ue()&&(o=n.a.Ne(e,c),o>0||!a&&0==o))}function bjn(n,t){if(Cln(),0!=n.j.g-t.j.g)return 0;switch(n.j.g){case 2:return Wgn(t,edt)-Wgn(n,edt);case 4:return Wgn(n,tdt)-Wgn(t,tdt)}return 0}function wjn(n){switch(n.g){case 0:return jgt;case 1:return Egt;case 2:return Sgt;case 3:return Pgt;case 4:return Cgt;case 5:return Igt;default:return null}}function djn(n,t,e){var i,r;return Kbn(r=new ny,t),qon(r,e),ttn((!n.c&&(n.c=new fV(m_t,n,12,10)),n.c),r),Pcn(i=r,0),Ccn(i,1),mdn(i,!0),ddn(i,!0),i}function gjn(n,t){var e,i;if(t>=n.i)throw hv(new pL(t,n.i));return++n.j,e=n.g[t],(i=n.i-t-1)>0&&qGn(n.g,t+1,n.g,t,i),uQ(n.g,--n.i,null),n.Qi(t,e),n.Ni(),e}function pjn(n,t){var e;return n.Db>>16==17?n.Cb.Th(n,21,h_t,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||n.ii(),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function mjn(n){var t,e,i;for(hZ(),f$(n.c,n.a),i=new Ww(n.c);i.ae.a.c.length))throw hv(new vM("index must be >= 0 and <= layer node count"));n.c&&men(n.c.a,n),n.c=e,e&&GX(e.a,t,n)}function Djn(n,t){var e,i,r;for(i=new Fz(ix(Ggn(n).a.Kc(),new h));hDn(i);)return e=uG(N9(i),18),new Ul(WW((r=uG(t.Kb(e),10)).n.b+r.o.b/2));return gy(),gy(),wat}function xjn(n,t){this.c=new Ym,this.a=n,this.b=t,this.d=uG(oIn(n,(GYn(),kmt)),312),xA(oIn(n,(jYn(),CMt)))===xA((Wtn(),Lgt))?this.e=new Pk:this.e=new Sk}function Rjn(n,t){var e,i;return i=null,n.pf((XYn(),ODt))&&(e=uG(n.of(ODt),96)).pf(t)&&(i=e.of(t)),null==i&&n.Tf()&&(i=n.Tf().of(t)),null==i&&(i=Jkn(t)),i}function Kjn(n,t){var e,i;e=n.fd(t);try{return i=e.Pb(),e.Qb(),i}catch(r){throw F$(r=Ehn(r),112)?hv(new dM("Can't remove element "+t)):hv(r)}}function Fjn(n,t){var e,i,r;if(0==(e=Wqn(n,t,r=new Lfn((i=new QE).q.getFullYear()-V1n,i.q.getMonth(),i.q.getDate())))||e0?t:0),++i;return new MO(r,c)}function zjn(n,t){var e;return n.Db>>16==6?n.Cb.Th(n,6,aFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(tYn(),BKt),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function Vjn(n,t){var e;return n.Db>>16==7?n.Cb.Th(n,1,iFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(tYn(),UKt),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function Wjn(n,t){var e;return n.Db>>16==9?n.Cb.Th(n,9,bFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(tYn(),qKt),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function Qjn(n,t){var e;return n.Db>>16==5?n.Cb.Th(n,9,w_t,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(YYn(),O_t),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function Jjn(n,t){var e;return n.Db>>16==7?n.Cb.Th(n,6,fFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(YYn(),F_t),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function Yjn(n,t){var e;return n.Db>>16==3?n.Cb.Th(n,0,uFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(YYn(),T_t),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function Zjn(){this.a=new ss,this.g=new dMn,this.j=new dMn,this.b=new Ym,this.d=new dMn,this.i=new dMn,this.k=new Ym,this.c=new Ym,this.e=new Ym,this.f=new Ym}function nEn(n,t,e){var i,r,c;for(e<0&&(e=0),c=n.i,r=e;rO0n)return eEn(n,i);if(i==n)return!0}}return!1}function iEn(n){switch(Gx(),n.q.g){case 5:uNn(n,(KQn(),yRt)),uNn(n,KRt);break;case 4:Kxn(n,(KQn(),yRt)),Kxn(n,KRt);break;default:$Qn(n,(KQn(),yRt)),$Qn(n,KRt)}}function rEn(n){switch(Gx(),n.q.g){case 5:k$n(n,(KQn(),kRt)),k$n(n,_Rt);break;case 4:fyn(n,(KQn(),kRt)),fyn(n,_Rt);break;default:DQn(n,(KQn(),kRt)),DQn(n,_Rt)}}function cEn(n){var t,e;(t=uG(oIn(n,(rGn(),Dft)),17))?(e=t.a,kfn(n,(mon(),Qft),0==e?new Upn:new v8(e))):kfn(n,(mon(),Qft),new v8(1))}function aEn(n,t){var e;switch(e=n.i,t.g){case 1:return-(n.n.b+n.o.b);case 2:return n.n.a-e.o.a;case 3:return n.n.b-e.o.b;case 4:return-(n.n.a+n.o.a)}return 0}function oEn(n,t){switch(n.g){case 0:return t==(Gpn(),Imt)?qwt:Xwt;case 1:return t==(Gpn(),Imt)?qwt:Gwt;case 2:return t==(Gpn(),Imt)?Gwt:Xwt;default:return Gwt}}function uEn(n,t){var i,r,c;for(men(n.a,t),n.e-=t.r+(0==n.a.c.length?0:n.c),c=b7n,r=new Ww(n.a);r.a>16==3?n.Cb.Th(n,12,bFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(tYn(),_Kt),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function hEn(n,t){var e;return n.Db>>16==11?n.Cb.Th(n,10,bFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(tYn(),GKt),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function fEn(n,t){var e;return n.Db>>16==10?n.Cb.Th(n,11,h_t,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(YYn(),R_t),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function lEn(n,t){var e;return n.Db>>16==10?n.Cb.Th(n,12,p_t,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(YYn(),__t),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function bEn(n){var t;return 1&n.Bb||!n.r||!n.r.Vh()||(t=uG(n.r,54),n.r=uG(mwn(n,t),142),n.r!=t&&4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,9,8,t,n.r))),n.r}function wEn(n,t,i){var r;return r=Uhn(cT(eUt,1),I0n,28,15,[BCn(n,(Yrn(),jst),t,i),BCn(n,Est,t,i),BCn(n,Sst,t,i)]),n.f&&(r[0]=e.Math.max(r[0],r[2]),r[2]=r[0]),r}function dEn(n,t){var e,i,r;if(0!=(r=lyn(n,t)).c.length)for(f$(r,new ti),e=r.c.length,i=0;i>19)!=(o=t.h>>19)?o-a:(i=n.h)!=(c=t.h)?i-c:(e=n.m)!=(r=t.m)?e-r:n.l-t.l}function MEn(){MEn=E,W_n(),ost=new mL($2n,ust=dst),Xin(),cst=new mL(D2n,ast=Zut),_kn(),ist=new mL(x2n,rst=Wut),est=new mL(R2n,(qx(),!0))}function TEn(n,t,e){var i,r;i=t*e,F$(n.g,154)?(r=Q6(n)).f.d?r.f.a||(n.d.a+=i+Z2n):(n.d.d-=i+Z2n,n.d.a+=i+Z2n):F$(n.g,10)&&(n.d.d-=i,n.d.a+=2*i)}function jEn(n,t,i){var r,c,a,o,u;for(c=n[i.g],u=new Ww(t.d);u.a0?n.b:0),++i;t.b=r,t.e=c}function SEn(n){var t,e,i;if(i=n.b,aS(n.i,i.length)){for(e=2*i.length,n.b=Inn(Cat,l1n,303,e,0,1),n.c=Inn(Cat,l1n,303,e,0,1),n.f=e-1,n.i=0,t=n.a;t;t=t.c)HLn(n,t,t);++n.g}}function PEn(n,t,e,i){var r,c,a,o;for(r=0;ro&&(u=o/r),(c=e.Math.abs(n.b))>a&&(s=a/c),vD(n,e.Math.min(u,s)),n}function AEn(){var n,t;tXn();try{if(t=uG(ASn((MP(),l_t),aet),2113))return t}catch(e){if(!F$(e=Ehn(e),103))throw hv(e);n=e,AW((t$(),n))}return new rs}function LEn(){var n,t;tXn();try{if(t=uG(ASn((MP(),l_t),Drt),2040))return t}catch(e){if(!F$(e=Ehn(e),103))throw hv(e);n=e,AW((t$(),n))}return new _s}function NEn(){var n,t;Ftn();try{if(t=uG(ASn((MP(),l_t),lct),2122))return t}catch(e){if(!F$(e=Ehn(e),103))throw hv(e);n=e,AW((t$(),n))}return new Nh}function $En(n,t,e){var i,r;return r=n.e,n.e=t,4&n.Db&&!(1&n.Db)&&(i=new lV(n,1,4,r,t),e?e.nj(i):e=i),r!=t&&(e=PWn(n,t?bRn(n,t):n.a,e)),e}function DEn(){QE.call(this),this.e=-1,this.a=!1,this.p=j1n,this.k=-1,this.c=-1,this.b=-1,this.g=!1,this.f=-1,this.j=-1,this.n=-1,this.i=-1,this.d=-1,this.o=j1n}function xEn(n,t){var e,i,r;if(i=n.b.d.d,n.a||(i+=n.b.d.a),r=t.b.d.d,t.a||(r+=t.b.d.a),0==(e=ugn(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function REn(n,t){var e,i,r;if(i=n.b.b.d,n.a||(i+=n.b.b.a),r=t.b.b.d,t.a||(r+=t.b.b.a),0==(e=ugn(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function KEn(n,t){var e,i,r;if(i=n.b.g.d,n.a||(i+=n.b.g.a),r=t.b.g.d,t.a||(r+=t.b.g.a),0==(e=ugn(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function FEn(){FEn=E,klt=wz(Aq(Aq(Aq(new wJ,(uIn(),Slt),(zYn(),owt)),Slt,fwt),Plt,mwt),Plt,Wbt),Mlt=Aq(Aq(new wJ,Slt,Fbt),Slt,Qbt),ylt=wz(new wJ,Plt,Ybt)}function _En(n){var t,e,i,r,c;for(t=uG(oIn(n,(GYn(),$pt)),85),c=n.n,i=t.Cc().Kc();i.Ob();)(r=(e=uG(i.Pb(),314)).i).c+=c.a,r.d+=c.b,e.c?P_n(e):C_n(e);kfn(n,$pt,null)}function BEn(n,t,e){var i,r;switch(i=(r=n.b).d,t.g){case 1:return-i.d-e;case 2:return r.o.a+i.c+e;case 3:return r.o.b+i.a+e;case 4:return-i.b-e;default:return-1}}function HEn(n,t,e){var i;for(e.Ug("Interactive node placement",1),n.a=uG(oIn(t,(GYn(),kmt)),312),i=new Ww(t.b);i.a0&&(r=ZNn(n,(c&vZn)%n.d.length,c,t))?r.nd(e):(i=n.ck(c,t,e),n.c.Fc(i),null)}function cSn(n,t){var e,i,r,c;switch(tdn(n,t).Kl()){case 3:case 2:for(r=0,c=(e=hXn(t)).i;r=0;r--)if(m_(n[r].d,t)||m_(n[r].d,i)){n.length>=r+1&&n.splice(0,r+1);break}return n}function bSn(n,t){var i;return _L(n)&&_L(t)&&p0n<(i=n/t)&&i0&&(n.b+=2,n.a+=r):(n.b+=1,n.a+=e.Math.min(r,c))}function ySn(n){var t;t=uG(oIn(uG(hyn(n.b,0),40),(QGn(),pCt)),107),kfn(n,(OQn(),kPt),new MO(0,0)),iUn(new L7,n,t.b+t.c-uM(pK(oIn(n,PPt))),t.d+t.a-uM(pK(oIn(n,IPt))))}function MSn(n,t){var e;if(e=!1,RA(t)&&(e=!0,pQ(n,new QW(mK(t)))),e||F$(t,242)&&(e=!0,pQ(n,new Pb(Q_(uG(t,242))))),!e)throw hv(new pM(Cet))}function TSn(n,t,e,i){var r,c,a;return r=new Ken(n.e,1,10,F$(a=t.c,90)?uG(a,29):(YYn(),x_t),F$(c=e.c,90)?uG(c,29):(YYn(),x_t),Hyn(n,t),!1),i?i.nj(r):i=r,i}function jSn(n){var t,e;switch(uG(oIn(HQ(n),(jYn(),lMt)),429).g){case 0:return t=n.n,e=n.o,new MO(t.a+e.a/2,t.b+e.b/2);case 1:return new eN(n.n);default:return null}}function ESn(){ESn=E,Fgt=new rI(q4n,0),Kgt=new rI("LEFTUP",1),Bgt=new rI("RIGHTUP",2),Rgt=new rI("LEFTDOWN",3),_gt=new rI("RIGHTDOWN",4),xgt=new rI("BALANCED",5)}function SSn(n,t,e){var i,r,c;if(0==(i=ugn(n.a[t.p],n.a[e.p]))){if(r=uG(oIn(t,(GYn(),Vpt)),15),c=uG(oIn(e,Vpt),15),r.Hc(e))return-1;if(c.Hc(t))return 1}return i}function PSn(n){switch(n.g){case 1:return new So;case 2:return new Po;case 3:return new Eo;case 0:return null;default:throw hv(new vM(k7n+(null!=n.f?n.f:""+n.g)))}}function CSn(n,t,e){switch(t){case 1:return!n.n&&(n.n=new fV(lFt,n,1,7)),Czn(n.n),!n.n&&(n.n=new fV(lFt,n,1,7)),void CW(n.n,uG(e,16));case 2:return void Gan(n,mK(e))}bln(n,t,e)}function ISn(n,t,e){switch(t){case 3:return void vcn(n,uM(pK(e)));case 4:return void kcn(n,uM(pK(e)));case 5:return void ycn(n,uM(pK(e)));case 6:return void Mcn(n,uM(pK(e)))}CSn(n,t,e)}function OSn(n,t,e){var i,r;(i=CCn(r=new ny,t,null))&&i.oj(),qon(r,e),ttn((!n.c&&(n.c=new fV(m_t,n,12,10)),n.c),r),Pcn(r,0),Ccn(r,1),mdn(r,!0),ddn(r,!0)}function ASn(n,t){var e,i;return F$(e=_P(n.i,t),241)?((i=uG(e,241)).zi(),i.wi()):F$(e,507)?i=uG(e,2037).b:null}function LSn(n,t,e,i){var r,c;return WW(t),WW(e),Ren(!!(c=uG(W_(n.d,t),17)),"Row %s not in %s",t,n.e),Ren(!!(r=uG(W_(n.b,e),17)),"Column %s not in %s",e,n.c),Hhn(n,c.a,r.a,i)}function NSn(n,t,e,i,r,c,a){var o,u,s,h,f;if(f=PTn(o=(s=c==a-1)?i:0,h=r[c]),10!=i&&Uhn(cT(n,a-c),t[c],e[c],o,f),!s)for(++c,u=0;u1||-1==o?(c=uG(u,15),r.Wb(Vpn(n,c))):r.Wb(oUn(n,uG(u,58))))}function zSn(n,t,e,i){kE();var r=hZn;function c(){for(var n=0;n0)return!1;return!0}function QSn(n){var t,e,i,r,c;for(i=new bsn(new Nw(n.b).a);i.b;)t=uG((e=von(i)).ld(),10),c=uG(uG(e.md(),42).a,10),r=uG(uG(e.md(),42).b,8),JF(dL(t.n),JF(D$(c.n),r))}function JSn(n){switch(uG(oIn(n.b,(jYn(),Jyt)),387).g){case 1:kS(YJ(sin(new fX(null,new h3(n.d,16)),new Vr),new Wr),new Qr);break;case 2:gBn(n);break;case 0:mLn(n)}}function YSn(n,t,e){var i,r,c;for(!(i=e)&&(i=new fy),i.Ug("Layout",n.a.c.length),c=new Ww(n.a);c.a$9n)return e;i>-1e-6&&++e}return e}function rPn(n,t){var e;t!=n.b?(e=null,n.b&&(e=O1(n.b,n,-4,e)),t&&(e=kyn(t,n,-4,e)),(e=kwn(n,t,e))&&e.oj()):4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,3,t,t))}function cPn(n,t){var e;t!=n.f?(e=null,n.f&&(e=O1(n.f,n,-1,e)),t&&(e=kyn(t,n,-1,e)),(e=vwn(n,t,e))&&e.oj()):4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,0,t,t))}function aPn(n,t,e,i){var r,c,a;return uN(n.e)&&(a=VZ(n,1,r=t.Lk(),t.md(),c=e.md(),r.Jk()?Dqn(n,r,c,F$(r,102)&&!!(uG(r,19).Bb&P0n)):-1,!0),i?i.nj(a):i=a),i}function oPn(n){var t,e,i;if(null==n)return null;if((e=uG(n,15)).dc())return"";for(i=new zM,t=e.Kc();t.Ob();)VA(i,(uVn(),mK(t.Pb()))),i.a+=" ";return CL(i,i.a.length-1)}function uPn(n){var t,e,i;if(null==n)return null;if((e=uG(n,15)).dc())return"";for(i=new zM,t=e.Kc();t.Ob();)VA(i,(uVn(),mK(t.Pb()))),i.a+=" ";return CL(i,i.a.length-1)}function sPn(n,t,e){var i,r;return i=n.c[t.c.p][t.p],r=n.c[e.c.p][e.p],null!=i.a&&null!=r.a?Rz(i.a,r.a):null!=i.a?-1:null!=r.a?1:0}function hPn(n,t,e){return e.Ug("Tree layout",1),_J(n.b),JV(n.b,(Cjn(),zSt),zSt),JV(n.b,VSt,VSt),JV(n.b,WSt,WSt),JV(n.b,QSt,QSt),n.a=Qzn(n.b,t),YSn(n,t,e.eh(1)),e.Vg(),t}function fPn(n,t){var e,i,r;if(t)for(r=((e=new Gz(t.a.length)).b-e.a)*e.c<0?(CP(),XHt):new xD(e);r.Ob();)i=v6(t,uG(r.Pb(),17).a),QJ(new om(n).a,i)}function lPn(n,t){var e,i,r;if(t)for(r=((e=new Gz(t.a.length)).b-e.a)*e.c<0?(CP(),XHt):new xD(e);r.Ob();)i=v6(t,uG(r.Pb(),17).a),WJ(new Yp(n).a,i)}function bPn(n){if(null!=n&&n.length>0&&33==VJ(n,n.length-1))try{return null==sxn(r1(n,0,n.length-1)).e}catch(t){if(!F$(t=Ehn(t),33))throw hv(t)}return!1}function wPn(n,t,e){var i,r;switch(i=pgn(HQ(t)),o2(r=new lOn,t),e.g){case 1:NLn(r,Gdn(Ipn(i)));break;case 2:NLn(r,Ipn(i))}return kfn(r,(jYn(),QMt),pK(oIn(n,QMt))),r}function dPn(n){var t,e;return t=uG(N9(new Fz(ix(qgn(n.a).a.Kc(),new h))),18),e=uG(N9(new Fz(ix(Xgn(n.a).a.Kc(),new h))),18),oM(gK(oIn(t,(GYn(),pmt))))||oM(gK(oIn(e,pmt)))}function gPn(){gPn=E,wdt=new zC("ONE_SIDE",0),gdt=new zC("TWO_SIDES_CORNER",1),pdt=new zC("TWO_SIDES_OPPOSING",2),ddt=new zC("THREE_SIDES",3),bdt=new zC("FOUR_SIDES",4)}function pPn(n,t){var e,i,r,c;for(c=new Zm,r=0,i=t.Kc();i.Ob();){for(e=xwn(uG(i.Pb(),17).a+r);e.a=n.f)break;mv(c.c,e)}return c}function mPn(n,t){var e,i,r;for(i=new Ww(t.a);i.a0&&Mjn(this,this.c-1,(KQn(),kRt)),this.c0&&n[0].length>0&&(this.c=oM(gK(oIn(HQ(n[0][0]),(GYn(),Wpt))))),this.a=Inn(REt,zZn,2117,n.length,0,2),this.b=Inn(UEt,zZn,2118,n.length,0,2),this.d=new zbn}function LPn(n){return 0!=n.c.length&&((u3(0,n.c.length),uG(n.c[0],18)).c.i.k==(zIn(),wbt)||o9(YJ(new fX(null,new h3(n,16)),new xc),new Rc))}function NPn(n,t){var i,r,c,a,o,u;for(o=GFn(t),c=t.f,u=t.g,a=e.Math.sqrt(c*c+u*u),r=0,i=new Ww(o);i.a=0?(e=bSn(n,g0n),i=Kmn(n,g0n)):(e=bSn(t=Dz(n,1),5e8),i=Lgn(Nz(i=Kmn(t,5e8),1),E3(n,1))),S3(Nz(i,32),E3(e,L0n))}function YPn(n,t,e){var i;switch(MK(0!=t.b),i=uG(Lrn(t,t.a.a),8),e.g){case 0:i.b=0;break;case 2:i.b=n.f;break;case 3:i.a=0;break;default:i.a=n.g}return lW(Fkn(t,0),i),t}function ZPn(n,t,e,i){var r,c,a,o,u;switch(u=n.b,o=ykn(a=(c=t.d).j,u.d[a.g],e),r=JF(D$(c.n),c.a),c.j.g){case 1:case 3:o.a+=r.a;break;case 2:case 4:o.b+=r.b}s8(i,o,i.c.b,i.c)}function nCn(n,t,e){var i,r,c,a;for(a=Ten(n.e,t,0),(c=new Tk).b=e,i=new N4(n.e,a);i.b1;t>>=1)1&t&&(i=j5(i,e)),e=1==e.d?j5(e,e):new nkn(FUn(e.a,e.d,Inn(YHt,W1n,28,e.d<<1,15,1)));return i=j5(i,e)}function aCn(){var n,t,e,i;for(aCn=E,but=Inn(eUt,I0n,28,25,15,1),wut=Inn(eUt,I0n,28,33,15,1),i=152587890625e-16,t=32;t>=0;t--)wut[t]=i,i*=.5;for(e=1,n=24;n>=0;n--)but[n]=e,e*=.5}function oCn(n){var t,e;if(oM(gK(zDn(n,(jYn(),sMt)))))for(e=new Fz(ix(eRn(n).a.Kc(),new h));hDn(e);)if(BNn(t=uG(N9(e),74))&&oM(gK(zDn(t,hMt))))return!0;return!1}function uCn(n,t){var e,i,r;FV(n.f,t)&&(t.b=n,i=t.c,-1!=Ten(n.j,i,0)||kD(n.j,i),r=t.d,-1!=Ten(n.j,r,0)||kD(n.j,r),0!=(e=t.a.b).c.length&&(!n.i&&(n.i=new vkn(n)),Psn(n.i,e)))}function sCn(n){var t,e,i,r;return(e=(t=n.c.d).j)==(r=(i=n.d.d).j)?t.p=0&&m_(n.substr(t,3),"GMT")||t>=0&&m_(n.substr(t,3),"UTC")?(e[0]=t+3,SUn(n,e,i)):SUn(n,e,i)}function wCn(n,t){var e,i,r,c,a;for(c=n.g.a,a=n.g.b,i=new Ww(n.d);i.ae;c--)n[c]|=t[c-e-1]>>>a,n[c-1]=t[c-e-1]<0&&qGn(n.g,t,n.g,t+i,o),a=e.Kc(),n.i+=i,r=0;r>4&15,c=15&n[i],a[r++]=JKt[e],a[r++]=JKt[c];return mvn(a,0,a.length)}function $Cn(n){var t,e;return n>=P0n?(t=C0n+(n-P0n>>10&1023)&D1n,e=56320+(n-P0n&1023)&D1n,String.fromCharCode(t)+""+String.fromCharCode(e)):String.fromCharCode(n&D1n)}function DCn(n,t){var e,i,r,c;return VK(),(r=uG(uG(Y9(n.r,t),21),87)).gc()>=2&&(i=uG(r.Kc().Pb(),117),e=n.u.Hc((eNn(),bRt)),c=n.u.Hc(pRt),!i.a&&!e&&(2==r.gc()||c))}function xCn(n,t,e,i,r){var c,a,o;for(c=zFn(n,t,e,i,r),o=!1;!c;)gxn(n,r,!0),o=!0,c=zFn(n,t,e,i,r);o&&gxn(n,r,!1),0!=(a=Jhn(r)).c.length&&(n.d&&n.d.Gg(a),xCn(n,r,e,i,a))}function RCn(){RCn=E,mxt=new OO(q4n,0),gxt=new OO("DIRECTED",1),vxt=new OO("UNDIRECTED",2),wxt=new OO("ASSOCIATION",3),pxt=new OO("GENERALIZATION",4),dxt=new OO("DEPENDENCY",5)}function KCn(n,t){var e;if(!h0(n))throw hv(new kM(Stt));switch(e=h0(n),t.g){case 1:return-(n.j+n.f);case 2:return n.i-e.g;case 3:return n.j-e.f;case 4:return-(n.i+n.g)}return 0}function FCn(n,t,e){var i,r,c;return i=t.Lk(),c=t.md(),r=i.Jk()?VZ(n,4,i,c,null,Dqn(n,i,c,F$(i,102)&&!!(uG(i,19).Bb&P0n)),!0):VZ(n,i.tk()?2:1,i,c,i.ik(),-1,!0),e?e.nj(r):e=r,e}function _Cn(n,t){var e,i;for(tJ(t),i=n.b.c.length,kD(n.b,t);i>0;){if(e=i,i=(i-1)/2|0,n.a.Ne(zq(n.b,i),t)<=0)return Y8(n.b,e,t),!0;Y8(n.b,e,zq(n.b,i))}return Y8(n.b,i,t),!0}function BCn(n,t,i,r){var c,a;if(c=0,i)c=$bn(n.a[i.g][t.g],r);else for(a=0;a<$st;a++)c=e.Math.max(c,$bn(n.a[a][t.g],r));return t==(Yrn(),Est)&&n.b&&(c=e.Math.max(c,n.b.a)),c}function HCn(n,t){var e,i,r,c,a;return i=n.i,r=t.i,!(!i||!r)&&i.i==r.i&&i.i!=(KQn(),kRt)&&i.i!=(KQn(),_Rt)&&(e=(c=i.g.a)+i.j.a,c<=(a=r.g.a)+r.j.a&&e>=a)}function UCn(n){switch(n.g){case 0:return new Uo;case 1:return new qo;default:throw hv(new vM("No implementation is available for the width approximator "+(null!=n.f?n.f:""+n.g)))}}function GCn(n,t,e,i){var r;if(r=!1,RA(i)&&(r=!0,ZG(t,e,mK(i))),r||KA(i)&&(r=!0,GCn(n,t,e,i)),r||F$(i,242)&&(r=!0,vZ(t,e,uG(i,242))),!r)throw hv(new pM(Cet))}function qCn(n,t){var e,i,r;if((e=t.qi(n.a))&&null!=(r=Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),Srt)))for(i=1;i<(gAn(),mBt).length;++i)if(m_(mBt[i],r))return i;return 0}function XCn(n,t){var e,i,r;if((e=t.qi(n.a))&&null!=(r=Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),Srt)))for(i=1;i<(gAn(),vBt).length;++i)if(m_(vBt[i],r))return i;return 0}function zCn(n,t){var e,i,r,c;if(tJ(t),(c=n.a.gc())0?1:0;c.a[r]!=e;)c=c.a[r],r=n.a.Ne(e.d,c.d)>0?1:0;c.a[r]=i,i.b=e.b,i.a[0]=e.a[0],i.a[1]=e.a[1],e.a[0]=null,e.a[1]=null}function ZCn(n){var t,e,i,r;for(t=new Zm,zV(e=Inn(ZHt,B2n,28,n.a.c.length,16,1),e.length),r=new Ww(n.a);r.a0&&fUn((u3(0,e.c.length),uG(e.c[0],30)),n),e.c.length>1&&fUn(uG(zq(e,e.c.length-1),30),n),t.Vg()}function eIn(n){return eNn(),!(qsn(X1(WX(wRt,Uhn(cT(BRt,1),p1n,279,0,[gRt])),n))>1||qsn(X1(WX(bRt,Uhn(cT(BRt,1),p1n,279,0,[lRt,pRt])),n))>1)}function iIn(n,t){F$(U1((MP(),l_t),n),507)?r2(l_t,n,new EA(this,t)):r2(l_t,n,this),HIn(this,t),t==(vj(),y_t)?(this.wb=uG(this,2038),uG(t,2040)):this.wb=(tQ(),M_t)}function rIn(n){var t,e;if(null==n)return null;for(t=null,e=0;e=$1n?"error":i>=900?"warn":i>=800?"info":"log",n.a),n.b&&SKn(t,e,n.b,"Exception: ",!0))}function oIn(n,t){var e,i;return!n.q&&(n.q=new Ym),null!=(i=cQ(n.q,t))?i:(F$(e=t.Sg(),4)&&(null==e?(!n.q&&(n.q=new Ym),u7(n.q,t)):(!n.q&&(n.q=new Ym),vJ(n.q,t,e))),e)}function uIn(){uIn=E,Tlt=new gC("P1_CYCLE_BREAKING",0),jlt=new gC("P2_LAYERING",1),Elt=new gC("P3_NODE_ORDERING",2),Slt=new gC("P4_NODE_PLACEMENT",3),Plt=new gC("P5_EDGE_ROUTING",4)}function sIn(n,t){var e;if(Win(),n.c==t.c){if(n.b==t.b||eun(n.b,t.b)){if(e=BL(n.b)?1:-1,n.a&&!t.a)return e;if(!n.a&&t.a)return-e}return d$(n.b.g,t.b.g)}return ugn(n.c,t.c)}function hIn(n,t){var e,i;if(kIn(n,t))return!0;for(i=new Ww(t);i.a=(r=n.Ej())||t<0)throw hv(new dM(zet+t+Vet+r));if(e>=r||e<0)throw hv(new dM(Wet+e+Vet+r));return t!=e?(c=n.Cj(e),n.qj(t,c),i=c):i=n.xj(e),i}function mIn(n){var t,e,i;if(i=n,n)for(t=0,e=n.Eh();e;e=e.Eh()){if(++t>O0n)return mIn(e);if(i=e,e==n)throw hv(new kM("There is a cycle in the containment hierarchy of "+n))}return i}function vIn(n){var t,e,i;for(i=new Ysn(TZn,"[","]"),e=n.Kc();e.Ob();)o7(i,xA(t=e.Pb())===xA(n)?"(this Collection)":null==t?IZn:cpn(t));return i.a?0==i.e.length?i.a.a:i.a.a+""+i.e:i.c}function kIn(n,t){var e,i;if(i=!1,t.gc()<2)return!1;for(e=0;e1&&(n.j.b+=n.e)):(n.j.a+=i.a,n.j.b=e.Math.max(n.j.b,i.b),n.d.c.length>1&&(n.j.a+=n.e))}function jIn(){jIn=E,ydt=Uhn(cT(YRt,1),z4n,64,0,[(KQn(),yRt),kRt,KRt]),kdt=Uhn(cT(YRt,1),z4n,64,0,[kRt,KRt,_Rt]),Mdt=Uhn(cT(YRt,1),z4n,64,0,[KRt,_Rt,yRt]),Tdt=Uhn(cT(YRt,1),z4n,64,0,[_Rt,yRt,kRt])}function EIn(n,t,e,i){var r,c,a,o,u;if(c=n.c.d,a=n.d.d,c.j!=a.j)for(u=n.b,r=c.j,o=null;r!=a.j;)o=0==t?qdn(r):Udn(r),aq(i,JF(ykn(r,u.d[r.g],e),ykn(o,u.d[o.g],e))),r=o}function SIn(n,t,e,i){var r,c,a,o,u;return o=uG((a=Sjn(n.a,t,e)).a,17).a,c=uG(a.b,17).a,i&&(u=uG(oIn(t,(GYn(),lmt)),10),r=uG(oIn(e,lmt),10),u&&r&&(C5(n.b,u,r),o+=n.b.i,c+=n.b.e)),o>c}function PIn(n){var t,e,i,r,c,a,o,u;for(this.a=Fyn(n),this.b=new Zm,i=0,r=(e=n).length;iGK(n.d).c?(n.i+=n.g.c,Bmn(n.d)):GK(n.d).c>GK(n.g).c?(n.e+=n.d.c,Bmn(n.g)):(n.i+=TX(n.g),n.e+=TX(n.d),Bmn(n.g),Bmn(n.d))}function LIn(n,t,e){var i,r,c,a;for(c=t.q,a=t.r,new A2((_7(),$St),t,c,1),new A2($St,c,a,1),r=new Ww(e);r.au&&(s=u/r),(c=e.Math.abs(t.b-n.b))>a&&(h=a/c),o=e.Math.min(s,h),n.a+=o*(t.a-n.a),n.b+=o*(t.b-n.b)}function FIn(n,t,e,i,r){var c,a;for(a=!1,c=uG(zq(e.b,0),27);Sqn(n,t,c,i,r)&&(a=!0,HSn(e,c),0!=e.b.c.length);)c=uG(zq(e.b,0),27);return 0==e.b.c.length&&uEn(e.j,e),a&&OTn(t.q),a}function _In(n,t){var e,i,r,c;if(l_n(),t.b<2)return!1;for(i=e=uG(I6(c=Fkn(t,0)),8);c.b!=c.d.c;){if(VRn(n,i,r=uG(I6(c),8)))return!0;i=r}return!!VRn(n,i,e)}function BIn(n,t,e,i){return 0==e?(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),G_(n.o,t,i)):uG(ern(uG(Lsn(n,16),29)||n.ii(),e),69).wk().Ak(n,$vn(n),e-iQ(n.ii()),t,i)}function HIn(n,t){var e;t!=n.sb?(e=null,n.sb&&(e=uG(n.sb,54).Th(n,1,sFt,e)),t&&(e=uG(t,54).Rh(n,1,sFt,e)),(e=Jwn(n,t,e))&&e.oj()):4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,4,t,t))}function UIn(n,t){var e,i;if(!t)throw hv(new SM("All edge sections need an end point."));e=$cn(t,"x"),mcn(new rm(n).a,(tJ(e),e)),i=$cn(t,"y"),jcn(new cm(n).a,(tJ(i),i))}function GIn(n,t){var e,i;if(!t)throw hv(new SM("All edge sections need a start point."));e=$cn(t,"x"),Tcn(new tm(n).a,(tJ(e),e)),i=$cn(t,"y"),Ecn(new em(n).a,(tJ(i),i))}function qIn(n,t){var e,i,r,c,a;for(i=0,c=xln(n).length;i>22-t,r=n.h<>22-t):t<44?(e=0,i=n.l<>44-t):(e=0,i=0,r=n.l<n)throw hv(new vM("k must be smaller than n"));return 0==t||t==n?1:0==n?0:uSn(n)/(uSn(t)*uSn(n-t))}function iOn(n,t){var e,i,r,c;for(e=new jN(n);null!=e.g||e.c?null==e.g||0!=e.i&&uG(e.g[e.i-1],51).Ob():O0(e);)if(F$(c=uG(Wxn(e),58),167))for(i=uG(c,167),r=0;r>4],t[2*e+1]=mHt[15&r];return mvn(t,0,t.length)}function vOn(n){var t;switch(TJ(),n.c.length){case 0:return Eat;case 1:return fq((t=uG(ULn(new Ww(n)),44)).ld(),t.md());default:return new xy(uG(Ekn(n,Inn(Sat,c1n,44,n.c.length,0,1)),173))}}function kOn(n){var t,e,i,r,c;for(t=new ND,e=new ND,A6(t,n),A6(e,n);e.b!=e.c;)for(c=new Ww(uG(xV(e),36).a);c.a0&&sHn(n,e,t),r):j$n(n,t,e)}function jOn(){jOn=E,XYn(),BIt=mDt,VIt=DDt,$It=_$t,DIt=U$t,xIt=q$t,NIt=K$t,RIt=V$t,_It=bDt,EHn(),AIt=dIt,LIt=gIt,UIt=MIt,XIt=EIt,GIt=TIt,qIt=jIt,KIt=mIt,FIt=kIt,HIt=yIt,zIt=SIt,WIt=CIt,OIt=wIt}function EOn(n,t){var e,i,r,c,a;if(n.e<=t)return n.g;if(l3(n,n.g,t))return n.g;for(c=n.r,i=n.g,a=n.r,r=(c-i)/2+i;i+11&&(n.e.b+=n.a)):(n.e.a+=i.a,n.e.b=e.Math.max(n.e.b,i.b),n.d.c.length>1&&(n.e.a+=n.a))}function NOn(n){var t,e,i,r;switch(t=(r=n.i).b,i=r.j,e=r.g,r.a.g){case 0:e.a=(n.g.b.o.a-i.a)/2;break;case 1:e.a=t.d.n.a+t.d.a.a;break;case 2:e.a=t.d.n.a+t.d.a.a-i.a;break;case 3:e.b=t.d.n.b+t.d.a.b}}function $On(n,t,e){var i,r,c;for(r=new Fz(ix(Ggn(e).a.Kc(),new h));hDn(r);)v9(i=uG(N9(r),18))||!v9(i)&&i.c.i.c==i.d.i.c||(c=aRn(n,i,e,new Ck)).c.length>1&&mv(t.c,c)}function DOn(n,t,e,i,r){if(ii&&(n.a=i),n.br&&(n.b=r),n}function xOn(n){if(F$(n,143))return dKn(uG(n,143));if(F$(n,233))return Mpn(uG(n,233));if(F$(n,23))return WIn(uG(n,23));throw hv(new vM(Aet+vIn(new IM(Uhn(cT(dat,1),EZn,1,5,[n])))))}function ROn(n,t,e,i,r){var c,a,o;for(c=!0,a=0;a>>r|e[a+i+1]<>>r,++a}return c}function KOn(n,t,e,i){var r,c;if(t.k==(zIn(),wbt))for(c=new Fz(ix(qgn(t).a.Kc(),new h));hDn(c);)if((r=uG(N9(c),18)).c.i.k==wbt&&n.c.a[r.c.i.c.p]==i&&n.c.a[t.c.p]==e)return!0;return!1}function FOn(n,t){var e,i,r,c;return t&=63,e=n.h&l0n,t<22?(c=e>>>t,r=n.m>>t|e<<22-t,i=n.l>>t|n.m<<22-t):t<44?(c=0,r=e>>>t-22,i=n.m>>t-22|n.h<<44-t):(c=0,r=0,i=e>>>t-44),p$(i&f0n,r&f0n,c&l0n)}function _On(n,t,e,i){var r;this.b=i,this.e=n==(ean(),BEt),r=t[e],this.d=Jq(ZHt,[zZn,B2n],[183,28],16,[r.length,r.length],2),this.a=Jq(YHt,[zZn,W1n],[53,28],15,[r.length,r.length],2),this.c=new IPn(t,e)}function BOn(n){var t,e,i;for(n.k=new L2((KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length,n.j.c.length),i=new Ww(n.j);i.a=e)return YOn(n,t,i.p),!0;return!1}function XOn(n,t,e,i){var r,c,a,o,u,s;for(a=e.length,c=0,r=-1,s=Tin((s3(t,n.length+1),n.substr(t)),(cB(),out)),o=0;oc&&IV(s,Tin(e[o],out))&&(r=o,c=u);return r>=0&&(i[0]=t+c),r}function zOn(n){var t;return 64&n.Db?rOn(n):(t=new lx(Ftt),!n.a||JA(JA((t.a+=' "',t),n.a),'"'),JA(Nj(JA(Nj(JA(Nj(JA(Nj((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function VOn(n,t,e){var i,r,c,a,o;for(o=VKn(n.e.Dh(),t),r=uG(n.g,124),i=0,a=0;ae?iLn(n,e,"start index"):t<0||t>e?iLn(t,e,"end index"):LBn("end index (%s) must not be less than start index (%s)",Uhn(cT(dat,1),EZn,1,5,[xwn(t),xwn(n)]))}function JOn(n,t){var e,i,r,c;for(i=0,r=n.length;i0&&nAn(n,c,e));t.p=0}function tAn(n){var t;this.c=new lS,this.f=n.e,this.e=n.d,this.i=n.g,this.d=n.c,this.b=n.b,this.k=n.j,this.a=n.a,n.i?this.j=n.i:this.j=new nB(t=uG(Mj(MNt),9),uG(MF(t,t.length),9),0),this.g=n.f}function eAn(n){var t,e,i,r;for(t=jQ(JA(new lx("Predicates."),"and"),40),e=!0,r=new Jw(n);r.b0?o[a-1]:Inn(pbt,e6n,10,0,0,1),r=o[a],s=a=0?n.ki(r):zLn(n,i)}else sdn(n,e,i)}function uAn(n){var t,e;if(e=null,t=!1,F$(n,211)&&(t=!0,e=uG(n,211).a),t||F$(n,263)&&(t=!0,e=""+uG(n,263).a),t||F$(n,493)&&(t=!0,e=""+uG(n,493).a),!t)throw hv(new pM(Cet));return e}function sAn(n,t,e){var i,r,c,a,o,u;for(u=VKn(n.e.Dh(),t),i=0,o=n.i,r=uG(n.g,124),a=0;a=n.d.b.c.length&&((t=new bQ(n.d)).p=i.p-1,kD(n.d.b,t),(e=new bQ(n.d)).p=i.p,kD(n.d.b,e)),a2(i,uG(zq(n.d.b,i.p),30))}function yAn(n,t,e){var i,r,c;if(!n.b[t.g]){for(n.b[t.g]=!0,!(i=e)&&(i=new L7),aq(i.b,t),c=n.a[t.g].Kc();c.Ob();)(r=uG(c.Pb(),65)).b!=t&&yAn(n,r.b,i),r.c!=t&&yAn(n,r.c,i),aq(i.a,r);return i}return null}function MAn(n){switch(n.g){case 0:case 1:case 2:return KQn(),yRt;case 3:case 4:case 5:return KQn(),KRt;case 6:case 7:case 8:return KQn(),_Rt;case 9:case 10:case 11:return KQn(),kRt;default:return KQn(),FRt}}function TAn(n,t){var e;return 0!=n.c.length&&(e=Imn((u3(0,n.c.length),uG(n.c[0],18)).c.i),n2(),e==(Yyn(),wjt)||e==bjt||o9(YJ(new fX(null,new h3(n,16)),new Kc),new up(t)))}function jAn(n,t){if(F$(t,207))return KN(n,uG(t,27));if(F$(t,193))return FN(n,uG(t,123));if(F$(t,452))return RN(n,uG(t,166));throw hv(new vM(Aet+vIn(new IM(Uhn(cT(dat,1),EZn,1,5,[t])))))}function EAn(n,t,e){var i,r;if(this.f=n,e7(e,r=(i=uG(cQ(n.b,t),260))?i.a:0),e>=(r/2|0))for(this.e=i?i.c:null,this.d=r;e++0;)Ein(this);this.b=t,this.a=null}function SAn(n,t){var e,i;t.a?WKn(n,t):(!!(e=uG(jS(n.b,t.b),60))&&e==n.a[t.b.f]&&!!e.a&&e.a!=t.b.a&&e.c.Fc(t.b),!!(i=uG(TS(n.b,t.b),60))&&n.a[i.f]==t.b&&!!i.a&&i.a!=t.b.a&&t.b.c.Fc(i),sD(n.b,t.b))}function PAn(n,t){var e,i;if(e=uG(AJ(n.b,t),127),uG(uG(Y9(n.r,t),21),87).dc())return e.n.b=0,void(e.n.c=0);e.n.b=n.C.b,e.n.c=n.C.c,n.A.Hc((Qmn(),JRt))&&vBn(n,t),i=Iyn(n,t),M_n(n,t)==(Vkn(),Zxt)&&(i+=2*n.w),e.a.a=i}function CAn(n,t){var e,i;if(e=uG(AJ(n.b,t),127),uG(uG(Y9(n.r,t),21),87).dc())return e.n.d=0,void(e.n.a=0);e.n.d=n.C.d,e.n.a=n.C.a,n.A.Hc((Qmn(),JRt))&&kBn(n,t),i=Cyn(n,t),M_n(n,t)==(Vkn(),Zxt)&&(i+=2*n.w),e.a.b=i}function IAn(n,t){var e,i,r,c;for(c=new Zm,i=new Ww(t);i.ai&&(s3(t-1,n.length),n.charCodeAt(t-1)<=32);)--t;return i>0||te.a&&(i.Hc((ZSn(),VNt))?r=(t.a-e.a)/2:i.Hc(QNt)&&(r=t.a-e.a)),t.b>e.b&&(i.Hc((ZSn(),YNt))?c=(t.b-e.b)/2:i.Hc(JNt)&&(c=t.b-e.b)),JCn(n,r,c)}function eLn(n,t,e,i,r,c,a,o,u,s,h,f,l){F$(n.Cb,90)&&yLn(y9(uG(n.Cb,90)),4),qon(n,e),n.f=a,Qdn(n,o),Ydn(n,u),Wdn(n,s),Jdn(n,h),mdn(n,f),Cgn(n,l),ddn(n,!0),Pcn(n,r),n.Zk(c),Kbn(n,t),null!=i&&(n.i=null,lon(n,i))}function iLn(n,t,e){if(n<0)return LBn(jZn,Uhn(cT(dat,1),EZn,1,5,[e,xwn(n)]));if(t<0)throw hv(new vM(SZn+t));return LBn("%s (%s) must not be greater than size (%s)",Uhn(cT(dat,1),EZn,1,5,[e,xwn(n),xwn(t)]))}function rLn(n,t,e,i,r,c){var a,o,u;if(i-e<7)Ygn(t,e,i,c);else if(rLn(t,n,o=e+r,u=o+((a=i+r)-o>>1),-r,c),rLn(t,n,u,a,-r,c),c.Ne(n[u-1],n[u])<=0)for(;e=0?n.bi(c,e):lRn(n,r,e)}else lpn(n,i,r,e)}function hLn(n){var t,e;if(n.f){for(;n.n>0;){if(F$(e=(t=uG(n.k.Xb(n.n-1),76)).Lk(),102)&&uG(e,19).Bb&Qtt&&(!n.e||e.pk()!=tFt||0!=e.Lj())&&null!=t.md())return!0;--n.n}return!1}return n.n>0}function fLn(n){var t,e,i,r;if(e=uG(n,54)._h())try{if(i=null,(t=jxn((MP(),l_t),DUn(jpn(e))))&&(r=t.ai())&&(i=r.Fl(bM(e.e))),i&&i!=n)return fLn(i)}catch(c){if(!F$(c=Ehn(c),63))throw hv(c)}return n}function lLn(n,t,e){var i,r;e.Ug("Remove overlaps",1),e.dh(t,l7n),i=uG(zDn(t,(SK(),zCt)),27),n.f=i,n.a=aMn(uG(zDn(t,(jOn(),zIt)),300)),rw(n,(tJ(r=pK(zDn(t,(XYn(),DDt)))),r)),xWn(n,t,GFn(i),e),e.dh(t,w7n)}function bLn(n){var t,e,i;if(oM(gK(zDn(n,(XYn(),C$t))))){for(i=new Zm,e=new Fz(ix(eRn(n).a.Kc(),new h));hDn(e);)BNn(t=uG(N9(e),74))&&oM(gK(zDn(t,I$t)))&&mv(i.c,t);return i}return hZ(),hZ(),zot}function wLn(n){if(!n)return By(),Vat;var t=n.valueOf?n.valueOf():n;if(t!==n){var i=Wat[typeof t];return i?i(t):Vbn(typeof t)}return n instanceof Array||n instanceof e.Array?new Eb(n):new Cb(n)}function dLn(n,t,i){var r,c,a;switch(a=n.o,(c=(r=uG(AJ(n.p,i),252)).i).b=gNn(r),c.a=dNn(r),c.b=e.Math.max(c.b,a.a),c.b>a.a&&!t&&(c.b=a.a),c.c=-(c.b-a.a)/2,i.g){case 1:c.d=-c.a;break;case 3:c.d=a.b}YGn(r),rqn(r)}function gLn(n,t,i){var r,c,a;switch(a=n.o,(c=(r=uG(AJ(n.p,i),252)).i).b=gNn(r),c.a=dNn(r),c.a=e.Math.max(c.a,a.b),c.a>a.b&&!t&&(c.a=a.b),c.d=-(c.a-a.b)/2,i.g){case 4:c.c=-c.b;break;case 2:c.c=a.a}YGn(r),rqn(r)}function pLn(n,t){var e,i,r,c,a;if(!t.dc())if(r=uG(t.Xb(0),131),1!=t.gc())for(e=1;e0)try{i=mUn(t,j1n,vZn)}catch(r){throw F$(r=Ehn(r),130)?hv(new Pen(r)):hv(r)}return!n.a&&(n.a=new qm(n)),i<(e=n.a).i&&i>=0?uG(zrn(e,i),58):null}function TLn(n,t){if(n<0)return LBn(jZn,Uhn(cT(dat,1),EZn,1,5,["index",xwn(n)]));if(t<0)throw hv(new vM(SZn+t));return LBn("%s (%s) must be less than size (%s)",Uhn(cT(dat,1),EZn,1,5,["index",xwn(n),xwn(t)]))}function jLn(n){var t,e,i,r,c;if(null==n)return IZn;for(c=new Ysn(TZn,"[","]"),i=0,r=(e=n).length;i=0?n.Lh(e,!0,!0):YNn(n,r,!0),160),uG(i,220).Zl(t)}function VLn(n){var t,i;return n>-0x800000000000&&n<0x800000000000?0==n?0:((t=n<0)&&(n=-n),i=t0(e.Math.floor(e.Math.log(n)/.6931471805599453)),(!t||n!=e.Math.pow(2,i))&&++i,i):dhn(Bsn(n))}function WLn(n){var t,e,i,r,c,a,o;for(c=new XL,e=new Ww(n);e.a2&&o.e.b+o.j.b<=2&&(r=o,i=a),c.a.zc(r,c),r.q=i);return c}function QLn(n,t,e){e.Ug("Eades radial",1),e.dh(t,w7n),n.d=uG(zDn(t,(SK(),zCt)),27),n.c=uM(pK(zDn(t,(jOn(),HIt)))),n.e=aMn(uG(zDn(t,zIt),300)),n.a=_pn(uG(zDn(t,WIt),434)),n.b=PSn(uG(zDn(t,KIt),354)),UEn(n),e.dh(t,w7n)}function JLn(n,t){if(t.Ug("Target Width Setter",1),!vnn(n,(S_n(),vAt)))throw hv(new jM("A target width has to be set if the TargetWidthWidthApproximator should be used."));Myn(n,(lBn(),POt),pK(zDn(n,vAt))),t.Vg()}function YLn(n,t){var e,i,r;return zsn(i=new gMn(n),t),kfn(i,(GYn(),Kpt),t),kfn(i,(jYn(),JMt),($Pn(),cRt)),kfn(i,byt,(nMn(),ONt)),Hb(i,(zIn(),lbt)),o2(e=new lOn,i),NLn(e,(KQn(),_Rt)),o2(r=new lOn,i),NLn(r,kRt),i}function ZLn(n){switch(n.g){case 0:return new zy((ean(),_Et));case 1:return new bl;case 2:return new wl;default:throw hv(new vM("No implementation is available for the crossing minimizer "+(null!=n.f?n.f:""+n.g)))}}function nNn(n,t){var e,i,r,c;for(n.c[t.p]=!0,kD(n.a,t),c=new Ww(t.j);c.a=(c=a.gc()))a.$b();else for(r=a.Kc(),i=0;i0?HM():c<0&&bNn(n,t,-c),!0)}function dNn(n){var t,e,i,r,c,a;if(a=0,0==n.b){for(t=0,r=0,c=(i=AMn(n,!0)).length;r0&&(a+=e,++t);t>1&&(a+=n.c*(t-1))}else a=fT(Mun(ZJ(JJ(BV(n.a),new jn),new En)));return a>0?a+n.n.d+n.n.a:0}function gNn(n){var t,e,i,r,c,a;if(a=0,0==n.b)a=fT(Mun(ZJ(JJ(BV(n.a),new Mn),new Tn)));else{for(t=0,r=0,c=(i=LMn(n,!0)).length;r0&&(a+=e,++t);t>1&&(a+=n.c*(t-1))}return a>0?a+n.n.b+n.n.c:0}function pNn(n){var t,e;if(2!=n.c.length)throw hv(new kM("Order only allowed for two paths."));u3(0,n.c.length),t=uG(n.c[0],18),u3(1,n.c.length),e=uG(n.c[1],18),t.d.i!=e.c.i&&(n.c.length=0,mv(n.c,e),mv(n.c,t))}function mNn(n,t,e){var i;for(vN(e,t.g,t.f),kN(e,t.i,t.j),i=0;i<(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i;i++)mNn(n,uG(zrn((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a),i),27),uG(zrn((!e.a&&(e.a=new fV(bFt,e,10,11)),e.a),i),27))}function vNn(n,t){var i,r,c,a;for(i=(a=uG(AJ(n.b,t),127)).a,c=uG(uG(Y9(n.r,t),21),87).Kc();c.Ob();)(r=uG(c.Pb(),117)).c&&(i.a=e.Math.max(i.a,rq(r.c)));if(i.a>0)switch(t.g){case 2:a.n.c=n.s;break;case 4:a.n.b=n.s}}function kNn(n,t){var e,i,r;return 0==(e=uG(oIn(t,(rGn(),$ft)),17).a-uG(oIn(n,$ft),17).a)?(i=YF(D$(uG(oIn(n,(mon(),zft)),8)),uG(oIn(n,Vft),8)),r=YF(D$(uG(oIn(t,zft),8)),uG(oIn(t,Vft),8)),ugn(i.a*i.b,r.a*r.b)):e}function yNn(n,t){var e,i,r;return 0==(e=uG(oIn(t,(QGn(),yCt)),17).a-uG(oIn(n,yCt),17).a)?(i=YF(D$(uG(oIn(n,(OQn(),vPt)),8)),uG(oIn(n,kPt),8)),r=YF(D$(uG(oIn(t,vPt),8)),uG(oIn(t,kPt),8)),ugn(i.a*i.b,r.a*r.b)):e}function MNn(n){var t,e;return(e=new WM).a+="e_",null!=(t=bhn(n))&&(e.a+=""+t),n.c&&n.d&&(JA((e.a+=" ",e),njn(n.c)),JA(QA((e.a+="[",e),n.c.i),"]"),JA((e.a+=Y4n,e),njn(n.d)),JA(QA((e.a+="[",e),n.d.i),"]")),e.a}function TNn(n){switch(n.g){case 0:return new Tl;case 1:return new jl;case 2:return new yl;case 3:return new kl;default:throw hv(new vM("No implementation is available for the layout phase "+(null!=n.f?n.f:""+n.g)))}}function jNn(n,t,i,r,c){var a;switch(a=0,c.g){case 1:a=e.Math.max(0,t.b+n.b-(i.b+r));break;case 3:a=e.Math.max(0,-n.b-r);break;case 2:a=e.Math.max(0,-n.a-r);break;case 4:a=e.Math.max(0,t.a+n.a-(i.a+r))}return a}function ENn(n,t,e){var i,r,c;if(e)for(c=((i=new Gz(e.a.length)).b-i.a)*i.c<0?(CP(),XHt):new xD(i);c.Ob();)r=v6(e,uG(c.Pb(),17).a),vet in r.a||ket in r.a?bHn(n,r,t):JJn(n,r,t),GD(uG(cQ(n.b,jvn(r)),74))}function SNn(n){var t,e;switch(n.b){case-1:return!0;case 0:return(e=n.t)>1||-1==e||(t=bEn(n))&&(PP(),t.lk()==srt)?(n.b=-1,!0):(n.b=1,!1);default:return!1}}function PNn(n,t){var e,i,r,c;if(EYn(n),0!=n.c||123!=n.a)throw hv(new CM(rZn((t$(),bit))));if(c=112==t,i=n.d,(e=aR(n.i,125,i))<0)throw hv(new CM(rZn((t$(),wit))));return r=r1(n.i,i,e),n.d=e+1,itn(r,c,!(512&~n.e))}function CNn(n){var t,e,i,r,c,a,o;if((i=n.a.c.length)>0)for(a=n.c.d,r=vD(YF(new MO((o=n.d.d).a,o.b),a),1/(i+1)),c=new MO(a.a,a.b),e=new Ww(n.a);e.a=0&&i=0?n.Lh(e,!0,!0):YNn(n,r,!0),160),uG(i,220).Wl(t);throw hv(new vM(Gtt+t.xe()+ztt))}function DNn(){var n;return IP(),pBt?uG(jxn((MP(),l_t),Drt),2038):(ML(Sat,new Eh),yWn(),n=uG(F$(U1((MP(),l_t),Drt),560)?U1(l_t,Drt):new dJ,560),pBt=!0,HYn(n),oZn(n),vJ((pP(),k_t),n,new Bs),r2(l_t,Drt,n),n)}function xNn(n,t){var e,i,r,c;n.j=-1,uN(n.e)?(e=n.i,c=0!=n.i,z9(n,t),i=new Ken(n.e,3,n.c,null,t,e,c),r=t.zl(n.e,n.c,null),(r=yPn(n,t,r))?(r.nj(i),r.oj()):Msn(n.e,i)):(z9(n,t),(r=t.zl(n.e,n.c,null))&&r.oj())}function RNn(n,t){var e,i,r;if(r=0,(i=t[0])>=n.length)return-1;for(s3(i,n.length),e=n.charCodeAt(i);e>=48&&e<=57&&(r=10*r+(e-48),!(++i>=n.length));)s3(i,n.length),e=n.charCodeAt(i);return i>t[0]?t[0]=i:r=-1,r}function KNn(n){var t,i,r,c,a;return i=c=uG(n.a,17).a,r=a=uG(n.b,17).a,t=e.Math.max(e.Math.abs(c),e.Math.abs(a)),c<=0&&c==a?(i=0,r=a-1):c==-t&&a!=t?(i=a,r=c,a>=0&&++i):(i=-a,r=c),new WO(xwn(i),xwn(r))}function FNn(n,t,e,i){var r,c,a,o,u,s;for(r=0;r=0&&s>=0&&u=n.i)throw hv(new dM(zet+t+Vet+n.i));if(e>=n.i)throw hv(new dM(Wet+e+Vet+n.i));return i=n.g[e],t!=e&&(t>16))>>16&16),e+=t=(i=(n>>=t)-256)>>16&8,e+=t=(i=(n<<=t)-j0n)>>16&4,(e+=t=(i=(n<<=t)-VZn)>>16&2)+2-(t=(i=(n<<=t)>>14)&~(i>>1)))}function qNn(n){var t,e,i,r;for(lZ(),aft=new Zm,cft=new Ym,rft=new Zm,!n.a&&(n.a=new fV(bFt,n,10,11)),JQn(t=n.a),r=new DD(t);r.e!=r.i.gc();)i=uG(Zkn(r),27),-1==Ten(aft,i,0)&&(e=new Zm,kD(rft,e),skn(i,e));return rft}function XNn(n,t,e){var i,r,c,a;n.a=e.b.d,F$(t,326)?(z8(c=COn(r=JFn(uG(t,74),!1,!1)),i=new Kd(n)),sqn(c,r),null!=t.of((XYn(),L$t))&&z8(uG(t.of(L$t),75),i)):((a=uG(t,422)).rh(a.nh()+n.a.a),a.sh(a.oh()+n.a.b))}function zNn(n,t){var e,i,r;for(r=new Zm,i=Fkn(t.a,0);i.b!=i.d.c;)(e=uG(I6(i),65)).c.g==n.g&&xA(oIn(e.b,(QGn(),ACt)))!==xA(oIn(e.c,ACt))&&!o9(new fX(null,new h3(r,16)),new kp(e))&&mv(r.c,e);return f$(r,new ja),r}function VNn(n,t,e){var i,r,c,a;return F$(t,153)&&F$(e,153)?(c=uG(t,153),a=uG(e,153),n.a[c.a][a.a]+n.a[a.a][c.a]):F$(t,250)&&F$(e,250)&&(i=uG(t,250),r=uG(e,250),i.a==r.a)?uG(oIn(r.a,(rGn(),$ft)),17).a:0}function WNn(n,t){var i,r,c,a,o,u,s,h;for(h=uM(pK(oIn(t,(jYn(),ITt)))),s=n[0].n.a+n[0].o.a+n[0].d.c+h,u=1;u=0?e:(o=NQ(YF(new MO(a.c+a.b/2,a.d+a.a/2),new MO(c.c+c.b/2,c.d+c.a/2))),-(oGn(c,a)-1)*o)}function JNn(n,t,e){var i;kS(new fX(null,(!e.a&&(e.a=new fV(oFt,e,6,6)),new h3(e.a,16))),new zO(n,t)),kS(new fX(null,(!e.n&&(e.n=new fV(lFt,e,1,7)),new h3(e.n,16))),new VO(n,t)),(i=uG(zDn(e,(XYn(),L$t)),75))&&fun(i,n,t)}function YNn(n,t,e){var i,r,c;if(c=iVn((gAn(),kBt),n.Dh(),t))return PP(),uG(c,69).xk()||(c=_3(Nen(kBt,c))),r=uG((i=n.Ih(c))>=0?n.Lh(i,!0,!0):YNn(n,c,!0),160),uG(r,220).Sl(t,e);throw hv(new vM(Gtt+t.xe()+ztt))}function ZNn(n,t,e,i){var r,c,a,o,u;if(r=n.d[t])if(c=r.g,u=r.i,null!=i){for(o=0;o=e&&(i=t,c=(u=(o.c+o.a)/2)-e,o.c<=u-e&&GX(n,i++,new OU(o.c,c)),(a=u+e)<=o.a&&(r=new OU(a,o.a),o3(i,n.c.length),pC(n.c,i,r)))}function o$n(n,t,e){var i,r,c,a;if(!t.dc()){for(i=new lS,a=t.Kc();a.Ob();)for(c=uG(a.Pb(),40),vJ(n.a,xwn(c.g),xwn(e)),r=new Tp(Fkn(new Mp(c).a.d,0));Jj(r.a);)s8(i,uG(I6(r.a),65).c,i.c.b,i.c);o$n(n,i,e+1)}}function u$n(n){var t;if(n.c||null!=n.g){if(null==n.g)return!0;if(0==n.i)return!1;t=uG(n.g[n.i-1],51)}else n.d=n.bj(n.f),ttn(n,n.d),t=n.d;return t==n.b&&null.Vm>=null.Um()?(Wxn(n),u$n(n)):t.Ob()}function s$n(n){if(this.a=n,n.c.i.k==(zIn(),lbt))this.c=n.c,this.d=uG(oIn(n.c.i,(GYn(),Fpt)),64);else{if(n.d.i.k!=lbt)throw hv(new vM("Edge "+n+" is not an external edge."));this.c=n.d,this.d=uG(oIn(n.d.i,(GYn(),Fpt)),64)}}function h$n(n,t){var e,i,r;r=n.b,n.b=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,3,r,n.b)),t?t!=n&&(qon(n,t.zb),Icn(n,t.d),Uan(n,null==(e=null==(i=t.c)?t.zb:i)||m_(e,t.zb)?null:e)):(qon(n,null),Icn(n,0),Uan(n,null))}function f$n(n,t){var e;this.e=(ZW(),WW(n),ZW(),Emn(n)),this.c=(WW(t),Emn(t)),FD(this.e.Rd().dc()==this.c.Rd().dc()),this.d=Qgn(this.e),this.b=Qgn(this.c),e=Jq(dat,[zZn,EZn],[5,1],5,[this.e.Rd().gc(),this.c.Rd().gc()],2),this.a=e,wan(this)}function l$n(n){var t=(!Rat&&(Rat=mJn()),Rat);return'"'+n.replace(/[\x00-\x1f\xad\u0600-\u0603\u06dd\u070f\u17b4\u17b5\u200b-\u200f\u2028-\u202e\u2060-\u2064\u206a-\u206f\ufeff\ufff9-\ufffb"\\]/g,(function(n){return z1(n,t)}))+'"'}function b$n(n,t,i,r,c,a){var o,u,s,h,f;if(0!=c)for(xA(n)===xA(i)&&(n=n.slice(t,t+c),t=0),s=i,u=t,h=t+c;u=(a=null==(e=uG(Lsn(n.a,4),129))?0:e.length))throw hv(new w_(t,a));return r=e[t],1==a?i=null:(qGn(e,0,i=Inn(xFt,Uit,424,a-1,0,1),0,t),(c=a-t-1)>0&&qGn(e,t+1,i,t,c)),Pkn(n,i),GAn(n,t,r),r}function p$n(n){var t,e;if(n.f){for(;n.n0?Ipn(e):Gdn(Ipn(e)),Myn(t,eTt,r)}function M$n(n,t){t.Ug("Partition preprocessing",1),kS(uG(l8(JJ(sin(JJ(new fX(null,new h3(n.a,16)),new mi),new vi),new ki),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15).Oc(),new yi),t.Vg()}function T$n(n,t){var e,i,r,c,a;for(a=n.j,t.a!=t.b&&f$(a,new Yr),r=a.c.length/2|0,i=0;i0&&sHn(n,e,t),c):null!=i.a?(sHn(n,t,e),-1):null!=r.a?(sHn(n,e,t),1):0}function E$n(n,t){var e,i,r,c,a;for(r=t.b.b,n.a=Inn(yat,H3n,15,r,0,1),n.b=Inn(ZHt,B2n,28,r,16,1),a=Fkn(t.b,0);a.b!=a.d.c;)c=uG(I6(a),40),n.a[c.g]=new lS;for(i=Fkn(t.a,0);i.b!=i.d.c;)e=uG(I6(i),65),n.a[e.b.g].Fc(e),n.a[e.c.g].Fc(e)}function S$n(n,t){var e,i,r,c;n.Pj()?(e=n.Ej(),c=n.Qj(),++n.j,n.qj(e,n.Zi(e,t)),i=n.Ij(3,null,t,e,c),n.Mj()&&(r=n.Nj(t,null))?(r.nj(i),r.oj()):n.Jj(i)):(vQ(n,t),n.Mj()&&(r=n.Nj(t,null))&&r.oj())}function P$n(n,t,e){var i,r,c;n.Pj()?(c=n.Qj(),edn(n,t,e),i=n.Ij(3,null,e,t,c),n.Mj()?(r=n.Nj(e,null),n.Tj()&&(r=n.Uj(e,r)),r?(r.nj(i),r.oj()):n.Jj(i)):n.Jj(i)):(edn(n,t,e),n.Mj()&&(r=n.Nj(e,null))&&r.oj())}function C$n(n,t){var e,i,r,c,a;for(a=VKn(n.e.Dh(),t),r=new ls,e=uG(n.g,124),c=n.i;--c>=0;)i=e[c],a.am(i.Lk())&&ttn(r,i);!PJn(n,r)&&uN(n.e)&&Yv(n,t.Jk()?VZ(n,6,t,(hZ(),zot),null,-1,!1):VZ(n,t.tk()?2:1,t,null,null,-1,!1))}function I$n(n,t){var e,i,r,c;return n.a==(RIn(),Vgt)||(r=t.a.c,e=t.a.c+t.a.b,!(t.j&&(c=(i=t.A).c.c.a-i.o.a/2,r-(i.n.a+i.o.a)>c)||t.q&&(c=(i=t.C).c.c.a-i.o.a/2,i.n.a-e>c)))}function O$n(n){var t,e,i,r,c,a;for(e2(),e=new u8,i=new Ww(n.e.b);i.a1?n.e*=uM(n.a):n.f/=uM(n.a),_bn(n),Vvn(n),EBn(n),kfn(n.b,(ryn(),Qht),n.g)}function x$n(n,t,e){var i,r,c,a,o;for(i=0,o=e,t||(i=e*(n.c.length-1),o*=-1),c=new Ww(n);c.a=0?n.Ah(null):n.Ph().Th(n,-1-t,null,null),n.Bh(uG(r,54),e),i&&i.oj(),n.vh()&&n.wh()&&e>-1&&Msn(n,new lV(n,9,e,c,r)),r):c}function Y$n(n,t){var e,i,r,c,a;for(c=n.b.Ce(t),i=null==(e=n.a.get(c))?Inn(dat,EZn,1,0,5,1):e,a=0;a>5)>=n.d)return n.e<0;if(e=n.a[r],t=1<<(31&t),n.e<0){if(r<(i=_un(n)))return!1;e=i==r?-e:~e}return!!(e&t)}function oDn(n,t,e,i){var r;uG(e.b,68),uG(e.b,68),uG(i.b,68),uG(i.b,68),RG(r=YF(D$(uG(e.b,68).c),uG(i.b,68).c),LLn(uG(e.b,68),uG(i.b,68),r)),uG(i.b,68),uG(i.b,68),uG(i.b,68).c.a,r.a,uG(i.b,68).c.b,r.b,uG(i.b,68),Prn(i.a,new $U(n,t,i))}function uDn(n,t){var e,i,r,c,a,o,u;if(c=t.e)for(e=J$n(c),i=uG(n.g,689),a=0;a>16)),15).dd(c))0&&((!hN(n.a.c)||!t.n.d)&&(!fN(n.a.c)||!t.n.b)&&(t.g.d+=e.Math.max(0,r/2-.5)),(!hN(n.a.c)||!t.n.a)&&(!fN(n.a.c)||!t.n.c)&&(t.g.a-=r-1))}function bDn(n){var t,i,r,c,a;if(a=zUn(n,c=new Zm),t=uG(oIn(n,(GYn(),lmt)),10))for(r=new Ww(t.j);r.a>t,c=n.m>>t|e<<22-t,r=n.l>>t|n.m<<22-t):t<44?(a=i?l0n:0,c=e>>t-22,r=n.m>>t-22|e<<44-t):(a=i?l0n:0,c=i?f0n:0,r=e>>t-44),p$(r&f0n,c&f0n,a&l0n)}function pDn(n){var t,i,r,c,a,o;for(this.c=new Zm,this.d=n,r=M0n,c=M0n,t=T0n,i=T0n,o=Fkn(n,0);o.b!=o.d.c;)a=uG(I6(o),8),r=e.Math.min(r,a.a),c=e.Math.min(c,a.b),t=e.Math.max(t,a.a),i=e.Math.max(i,a.b);this.a=new gY(r,c,t-r,i-c)}function mDn(n,t){var e,i,r,c;for(i=new Ww(n.b);i.a0&&F$(t,44)&&(n.a._j(),c=null==(u=(s=uG(t,44)).ld())?0:Hon(u),a=iF(n.a,c),e=n.a.d[a]))for(i=uG(e.g,379),h=e.i,o=0;o=2)for(t=pK((i=c.Kc()).Pb());i.Ob();)a=t,t=pK(i.Pb()),r=e.Math.min(r,(tJ(t),t-(tJ(a),a)));return r}function xDn(n,t){var e,i,r;for(r=new Zm,i=Fkn(t.a,0);i.b!=i.d.c;)(e=uG(I6(i),65)).b.g==n.g&&!m_(e.b.c,H9n)&&xA(oIn(e.b,(QGn(),ACt)))!==xA(oIn(e.c,ACt))&&!o9(new fX(null,new h3(r,16)),new yp(e))&&mv(r.c,e);return f$(r,new Ca),r}function RDn(n,t){var e,i,r;if(xA(t)===xA(WW(n)))return!0;if(!F$(t,15))return!1;if(i=uG(t,15),(r=n.gc())!=i.gc())return!1;if(F$(i,59)){for(e=0;e0&&(r=e),a=new Ww(n.f.e);a.a0?(t-=1,e-=1):i>=0&&r<0?(t+=1,e+=1):i>0&&r>=0?(t-=1,e+=1):(t+=1,e-=1),new WO(xwn(t),xwn(e))}function exn(n,t){return n.ct.c?1:n.bt.b?1:n.a!=t.a?Hon(n.a)-Hon(t.a):n.d==(Z6(),YEt)&&t.d==JEt?-1:n.d==JEt&&t.d==YEt?1:0}function ixn(n,t){var e,i,r,c,a;return a=(c=t.a).c.i==t.b?c.d:c.c,i=c.c.i==t.b?c.c:c.d,(r=dmn(n.a,a,i))>0&&r0):r<0&&-r0)}function rxn(n,t,e,i){var r,c,a,o,u,s;for(r=(t-n.d)/n.c.c.length,c=0,n.a+=e,n.d=t,s=new Ww(n.c);s.a>24;return a}function axn(n){if(n.ze()){var t=n.c;return t.Ae()?n.o="["+t.n:t.ze()?n.o="["+t.xe():n.o="[L"+t.xe()+";",n.b=t.we()+"[]",void(n.k=t.ye()+"[]")}var e=n.j,i=n.d;i=i.split("/"),n.o=fvn(".",[e,fvn("$",i)]),n.b=fvn(".",[e,fvn(".",i)]),n.k=i[i.length-1]}function oxn(n,t){var e,i,r,c,a;for(a=null,c=new Ww(n.e.a);c.a=0;t-=2)for(e=0;e<=t;e+=2)(n.b[e]>n.b[e+2]||n.b[e]===n.b[e+2]&&n.b[e+1]>n.b[e+3])&&(i=n.b[e+2],n.b[e+2]=n.b[e],n.b[e]=i,i=n.b[e+3],n.b[e+3]=n.b[e+1],n.b[e+1]=i);n.c=!0}}function mxn(n,t){var e,i,r,c,a,o,u,s,h;for(s=-1,h=0,o=0,u=(a=n).length;o0&&++h;++s}return h}function vxn(n){var t;return(t=new lx(Ij(n.Rm))).a+="@",JA(t,(Hon(n)>>>0).toString(16)),n.Vh()?(t.a+=" (eProxyURI: ",QA(t,n._h()),n.Kh()&&(t.a+=" eClass: ",QA(t,n.Kh())),t.a+=")"):n.Kh()&&(t.a+=" (eClass: ",QA(t,n.Kh()),t.a+=")"),t.a}function kxn(n){var t,e,i;if(n.e)throw hv(new kM((vK(Qut),v2n+Qut.k+k2n)));for(n.d==(xdn(),ZDt)&&GWn(n,JDt),e=new Ww(n.a.a);e.a>24}return e}function Sxn(n,t,e){var i,r,c;if(!(r=uG(AJ(n.i,t),314)))if(r=new Yin(n.d,t,e),UV(n.i,t,r),vvn(t))iD(n.a,t.c,t.b,r);else switch(c=MAn(t),i=uG(AJ(n.p,c),252),c.g){case 1:case 3:r.j=!0,nM(i,t.b,r);break;case 4:case 2:r.k=!0,nM(i,t.c,r)}return r}function Pxn(n,t){var e,i,r,c,a,o,u,s,h;for(u=iR(n.c-n.b&n.a.length-1),s=null,h=null,c=new XJ(n);c.a!=c.b;)r=uG(rwn(c),10),e=(o=uG(oIn(r,(GYn(),Zpt)),12))?o.i:null,i=(a=uG(oIn(r,nmt),12))?a.i:null,s==e&&h==i||(F$n(u,t),s=e,h=i),mv(u.c,r);F$n(u,t)}function Cxn(n,t,e,i){var r,c,a,o,u,s;if(o=new ls,u=VKn(n.e.Dh(),t),r=uG(n.g,124),PP(),uG(t,69).xk())for(a=0;a=0)return r;for(c=1,a=new Ww(t.j);a.a=0)return r;for(c=1,a=new Ww(t.j);a.a0&&t.Ne((u3(r-1,n.c.length),uG(n.c[r-1],10)),c)>0;)Y8(n,r,(u3(r-1,n.c.length),uG(n.c[r-1],10))),--r;u3(r,n.c.length),n.c[r]=c}e.a=new Ym,e.b=new Ym}function Lxn(n,t,e){var i,r,c,a,o,u,s;for(s=new nB(i=uG(t.e&&t.e(),9),uG(MF(i,i.length),9),0),a=0,o=(c=WGn(e,"[\\[\\]\\s,]+")).length;a=0?(t||(t=new VM,i>0&&VA(t,(Knn(0,i,n.length),n.substr(0,i)))),t.a+="\\",TQ(t,e&D1n)):t&&TQ(t,e&D1n);return t?t.a:n}function $xn(n){var t,i,r;for(i=new Ww(n.a.a.b);i.a0&&((!hN(n.a.c)||!t.n.d)&&(!fN(n.a.c)||!t.n.b)&&(t.g.d-=e.Math.max(0,r/2-.5)),(!hN(n.a.c)||!t.n.a)&&(!fN(n.a.c)||!t.n.c)&&(t.g.a+=e.Math.max(0,r-1)))}function Dxn(n,t,e){var i;if(2==(n.c-n.b&n.a.length-1))t==(KQn(),yRt)||t==kRt?(prn(uG(Rfn(n),15),(Ajn(),$xt)),prn(uG(Rfn(n),15),Dxt)):(prn(uG(Rfn(n),15),(Ajn(),Dxt)),prn(uG(Rfn(n),15),$xt));else for(i=new XJ(n);i.a!=i.b;)prn(uG(rwn(i),15),e)}function xxn(n,t){var e,i,r,c,a,o;for(a=new N4(i=rG(new Pm(n)),i.c.length),o=new N4(r=rG(new Pm(t)),r.c.length),c=null;a.b>0&&o.b>0&&(MK(a.b>0),e=uG(a.a.Xb(a.c=--a.b),27),MK(o.b>0),e==uG(o.a.Xb(o.c=--o.b),27));)c=e;return c}function Rxn(n,t,e){var i,r,c,a;Y3(n,t)>Y3(n,e)?(i=Dgn(e,(KQn(),kRt)),n.d=i.dc()?0:dq(uG(i.Xb(0),12)),a=Dgn(t,_Rt),n.b=a.dc()?0:dq(uG(a.Xb(0),12))):(r=Dgn(e,(KQn(),_Rt)),n.d=r.dc()?0:dq(uG(r.Xb(0),12)),c=Dgn(t,kRt),n.b=c.dc()?0:dq(uG(c.Xb(0),12)))}function Kxn(n,t){var e,i,r,c;for(e=n.o.a,c=uG(uG(Y9(n.r,t),21),87).Kc();c.Ob();)(r=uG(c.Pb(),117)).e.a=e*uM(pK(r.b.of(bht))),r.e.b=(i=r.b).pf((XYn(),uDt))?i.ag()==(KQn(),yRt)?-i.Mf().b-uM(pK(i.of(uDt))):uM(pK(i.of(uDt))):i.ag()==(KQn(),yRt)?-i.Mf().b:0}function Fxn(n,t){var e,i,r,c;for(t.Ug("Self-Loop pre-processing",1),i=new Ww(n.a);i.an.c));a++)r.a>=n.s&&(c<0&&(c=a),o=a);return u=(n.s+n.c)/2,c>=0&&(u=wP((u3(i=fHn(n,t,c,o),t.c.length),uG(t.c[i],339))),a$n(t,i,e)),u}function Hxn(n,t,e){var i,r,c,a,o;for(Yan(r=new vs,(tJ(t),t)),!r.b&&(r.b=new XR((YYn(),H_t),wBt,r)),o=r.b,a=1;a0&&tVn(this,r)}function Gxn(n,t,e,i,r,c){var a,o,u;if(!r[t.a]){for(r[t.a]=!0,!(a=i)&&(a=new d7),kD(a.e,t),u=c[t.a].Kc();u.Ob();)(o=uG(u.Pb(),290)).d!=e&&o.c!=e&&(o.c!=t&&Gxn(n,o.c,t,a,r,c),o.d!=t&&Gxn(n,o.d,t,a,r,c),kD(a.c,o),Ohn(a.d,o.b));return a}return null}function qxn(n){var t,e,i;for(t=0,e=new Ww(n.e);e.a=2}function Xxn(n,t,e,i,r){var c,a,o,u,s;for(c=n.c.d.j,a=uG(hyn(e,0),8),s=1;s1||qsn(X1(WX(Bxt,Uhn(cT(eRt,1),p1n,95,0,[_xt,Uxt])),n))>1||qsn(X1(WX(Vxt,Uhn(cT(eRt,1),p1n,95,0,[zxt,Xxt])),n))>1)}function Vxn(n,t,e){var i,r,c;for(c=new Ww(n.t);c.a0&&(i.b.n-=i.c,i.b.n<=0&&i.b.u>0&&aq(t,i.b));for(r=new Ww(n.i);r.a0&&(i.a.u-=i.c,i.a.u<=0&&i.a.n>0&&aq(e,i.a))}function Wxn(n){var t,e,i;if(null==n.g&&(n.d=n.bj(n.f),ttn(n,n.d),n.c))return n.f;if(i=(t=uG(n.g[n.i-1],51)).Pb(),n.e=t,(e=n.bj(i)).Ob())n.d=e,ttn(n,e);else for(n.d=null;!t.Ob()&&(uQ(n.g,--n.i,null),0!=n.i);)t=uG(n.g[n.i-1],51);return i}function Qxn(n,t){var e,i,r,c,a,o;if(r=(i=t).Lk(),EFn(n.e,r)){if(r.Si()&&H5(n,r,i.md()))return!1}else for(o=VKn(n.e.Dh(),r),e=uG(n.g,124),c=0;c1||e>1)return 2;return t+e==1?2:0}function uRn(n,t){var i,r,c,a;return c=n.a*X0n+1502*n.b,a=n.b*X0n+11,c+=i=e.Math.floor(a*z0n),a-=i*V0n,c%=V0n,n.a=c,n.b=a,t<=24?e.Math.floor(n.a*but[t]):((r=n.a*(1<=2147483648&&(r-=4294967296),r)}function sRn(n,t,e){var i,r,c,a,o,u,s;for(c=new Zm,Uqn(n,s=new lS,a=new lS,t),RVn(n,s,a,t,e),u=new Ww(n);u.ai.b.g&&mv(c.c,i);return c}function hRn(n,t,e){var i,r,c,a,o;for(a=n.c,c=(e.q?e.q:(hZ(),hZ(),Vot)).vc().Kc();c.Ob();)r=uG(c.Pb(),44),!Qj(JJ(new fX(null,new h3(a,16)),new hd(new kO(t,r)))).Bd((vS(),Kut))&&(F$(o=r.md(),4)&&null!=(i=Nvn(o))&&(o=i),t.qf(uG(r.ld(),149),o))}function fRn(n,t,e){var i;if(_J(n.b),JV(n.b,(Rdn(),HAt),(eP(),GLt)),JV(n.b,UAt,t.g),JV(n.b,GAt,t.a),n.a=Qzn(n.b,t),e.Ug("Compaction by shrinking a tree",n.a.c.length),t.i.c.length>1)for(i=new Ww(n.a);i.a=0?n.Lh(i,!0,!0):YNn(n,c,!0),160),uG(r,220).Xl(t,e)}function bRn(n,t){var e,i,r,c;if(t){for(c=!(r=F$(n.Cb,90)||F$(n.Cb,102))&&F$(n.Cb,331),e=new DD((!t.a&&(t.a=new AX(t,g_t,t)),t.a));e.e!=e.i.gc();)if(i=MGn(uG(Zkn(e),89)),r?F$(i,90):c?F$(i,156):i)return i;return r?(YYn(),x_t):(YYn(),N_t)}return null}function wRn(n,t){var e,i,r;for(t.Ug("Resize child graph to fit parent.",1),i=new Ww(n.b);i.a=2*t&&kD(e,new OU(a[i-1]+t,a[i]-t));return e}function pRn(n,t,e){var i,r,c,a,o;if(e)for(c=((i=new Gz(e.a.length)).b-i.a)*i.c<0?(CP(),XHt):new xD(i);c.Ob();)(r=v6(e,uG(c.Pb(),17).a))&&(Gan(a=b5(n,(gj(),o=new Hk,!!t&&LRn(o,t),o),r),k6(r,Iet)),fCn(r,a),kLn(r,a),qfn(n,r,a))}function mRn(n){var t,e,i,r;if(!n.j){if(r=new Ss,null==(t=V_t).a.zc(n,t)){for(i=new DD(n1(n));i.e!=i.i.gc();)CW(r,mRn(e=uG(Zkn(i),29))),ttn(r,e);t.a.Bc(n)}lbn(r),n.j=new vL((uG(zrn(gZ((tQ(),M_t).o),11),19),r.i),r.g),y9(n).b&=-33}return n.j}function vRn(n){var t,e,i,r;if(null==n)return null;if(i=yXn(n,!0),r=yct.length,m_(i.substr(i.length-r,r),yct))if(4==(e=i.length)){if(s3(0,i.length),43==(t=i.charCodeAt(0)))return fHt;if(45==t)return hHt}else if(3==e)return fHt;return new tk(i)}function kRn(n){var t,e,i;return(e=n.l)&e-1||(i=n.m)&i-1||(t=n.h)&t-1||0==t&&0==i&&0==e?-1:0==t&&0==i&&0!=e?pan(e):0==t&&0!=i&&0==e?pan(i)+22:0!=t&&0==i&&0==e?pan(t)+44:-1}function yRn(n,t){var e,i,r,c,a;for(r=t.a&n.f,c=null,i=n.b[r];;i=i.b){if(i==t){c?c.b=t.b:n.b[r]=t.b;break}c=i}for(a=t.f&n.f,c=null,e=n.c[a];;e=e.d){if(e==t){c?c.d=t.d:n.c[a]=t.d;break}c=e}t.e?t.e.c=t.c:n.a=t.c,t.c?t.c.e=t.e:n.e=t.e,--n.i,++n.g}function MRn(n,t){var e;t.d?t.d.b=t.b:n.a=t.b,t.b?t.b.d=t.d:n.e=t.d,t.e||t.c?(--(e=uG(nJ(uG(cQ(n.b,t.a),260)),260)).a,t.e?t.e.c=t.c:e.b=uG(nJ(t.c),511),t.c?t.c.e=t.e:e.c=uG(nJ(t.e),511)):((e=uG(nJ(uG(u7(n.b,t.a),260)),260)).a=0,++n.c),--n.d}function TRn(n){var t,i,r,c,a,o,u,s,h,f;for(i=n.o,t=n.p,o=vZn,c=j1n,u=vZn,a=j1n,h=0;h0),c.a.Xb(c.c=--c.b),pF(c,r),MK(c.b3&&Fen(n,0,t-3))}function CRn(n){var t,e,i,r;return xA(oIn(n,(jYn(),rMt)))===xA((Own(),Ixt))?!n.e&&xA(oIn(n,Oyt))!==xA((ihn(),hpt)):(i=uG(oIn(n,Ayt),299),r=oM(gK(oIn(n,Ryt)))||xA(oIn(n,Kyt))===xA((jan(),Ydt)),t=uG(oIn(n,Iyt),17).a,e=n.a.c.length,!r&&i!=(ihn(),hpt)&&(0==t||t>e))}function IRn(n){var t,e;for(e=0;e0);e++);if(e>0&&e0);t++);return t>0&&e>16!=6&&t){if(eEn(n,t))throw hv(new vM(net+A$n(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?zjn(n,i):n.Cb.Th(n,-1-e,null,i)),t&&(i=kyn(t,n,6,i)),(i=ZK(n,t,i))&&i.oj()}else 4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,6,t,t))}function ARn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=3&&t){if(eEn(n,t))throw hv(new vM(net+SXn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?sEn(n,i):n.Cb.Th(n,-1-e,null,i)),t&&(i=kyn(t,n,12,i)),(i=nF(n,t,i))&&i.oj()}else 4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,3,t,t))}function LRn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=9&&t){if(eEn(n,t))throw hv(new vM(net+VBn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?Wjn(n,i):n.Cb.Th(n,-1-e,null,i)),t&&(i=kyn(t,n,9,i)),(i=tF(n,t,i))&&i.oj()}else 4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,9,t,t))}function NRn(n){var t,e,i,r,c;if(i=bEn(n),null==(c=n.j)&&i)return n.Jk()?null:i.ik();if(F$(i,156)){if((e=i.jk())&&(r=e.wi())!=n.i){if((t=uG(i,156)).nk())try{n.g=r.ti(t,c)}catch(a){if(!F$(a=Ehn(a),82))throw hv(a);n.g=null}n.i=r}return n.g}return null}function $Rn(n){var t;return kD(t=new Zm,new ZP(new MO(n.c,n.d),new MO(n.c+n.b,n.d))),kD(t,new ZP(new MO(n.c,n.d),new MO(n.c,n.d+n.a))),kD(t,new ZP(new MO(n.c+n.b,n.d+n.a),new MO(n.c+n.b,n.d))),kD(t,new ZP(new MO(n.c+n.b,n.d+n.a),new MO(n.c,n.d+n.a))),t}function DRn(n){var t,e;if(null==n)return IZn;try{return cpn(n)}catch(i){if(F$(i=Ehn(i),103))return t=i,e=Ij(Tbn(n))+"@"+(bS(),(Avn(n)>>>0).toString(16)),wkn(ghn(),(pS(),"Exception during lenientFormat for "+e),t),"<"+e+" threw "+Ij(t.Rm)+">";throw hv(i)}}function xRn(n,t,e){var i,r;for(r=t.a.ec().Kc();r.Ob();)i=uG(r.Pb(),74),!uG(cQ(n.b,i),272)&&(R0(bIn(i))==R0(gIn(i))?QKn(n,i,e):bIn(i)==R0(gIn(i))?null==cQ(n.c,i)&&null!=cQ(n.b,gIn(i))&&bWn(n,i,e,!1):null==cQ(n.d,i)&&null!=cQ(n.b,bIn(i))&&bWn(n,i,e,!0))}function RRn(n,t){var e,i,r,c,a,o,u;for(r=n.Kc();r.Ob();)for(i=uG(r.Pb(),10),o2(o=new lOn,i),NLn(o,(KQn(),kRt)),kfn(o,(GYn(),fmt),(qx(),!0)),a=t.Kc();a.Ob();)c=uG(a.Pb(),10),o2(u=new lOn,c),NLn(u,_Rt),kfn(u,fmt,!0),kfn(e=new UZ,fmt,!0),c2(e,o),u2(e,u)}function KRn(n,t,e,i){var r,c,a,o;r=evn(n,t,e),c=evn(n,e,t),a=uG(cQ(n.c,t),118),o=uG(cQ(n.c,e),118),r1)for(t=jx((e=new sk,++n.b,e),n.d),o=Fkn(c,0);o.b!=o.d.c;)a=uG(I6(o),125),RKn(xS(DS(RS($S(new uk,1),0),t),a))}function URn(n,t,e){var i,r,c,a;for(e.Ug("Breaking Point Removing",1),n.a=uG(oIn(t,(jYn(),Vyt)),223),r=new Ww(t.b);r.a>16!=11&&t){if(eEn(n,t))throw hv(new vM(net+zBn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?hEn(n,i):n.Cb.Th(n,-1-e,null,i)),t&&(i=kyn(t,n,10,i)),(i=n_(n,t,i))&&i.oj()}else 4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,11,t,t))}function qRn(n){var t,e,i,r;for(i=new bsn(new Nw(n.b).a);i.b;)r=uG((e=von(i)).ld(),12),kfn(t=uG(e.md(),10),(GYn(),rmt),r),kfn(r,lmt,t),kfn(r,qpt,(qx(),!0)),NLn(r,uG(oIn(t,Fpt),64)),oIn(t,Fpt),kfn(r.i,(jYn(),JMt),($Pn(),oRt)),uG(oIn(HQ(r.i),Hpt),21).Fc((r_n(),rpt))}function XRn(n,t,e){var i,r,c;if(i=0,r=0,n.c)for(c=new Ww(n.d.i.j);c.ac.a)return-1;if(r.a(u=null==n.d?0:n.d.length)){for(h=n.d,n.d=Inn(IFt,qit,66,2*u+4,0,1),c=0;c=0x8000000000000000?(tin(),Jat):(i=!1,n<0&&(i=!0,n=-n),e=0,n>=d0n&&(n-=(e=t0(n/d0n))*d0n),t=0,n>=w0n&&(n-=(t=t0(n/w0n))*w0n),r=p$(t0(n),t,e),i&&Yfn(r),r)}function uKn(n){var t,e,i,r,c;if(c=new Zm,Prn(n.b,new Ed(c)),n.b.c.length=0,0!=c.c.length){for(u3(0,c.c.length),t=uG(c.c[0],82),e=1,i=c.c.length;e=-t&&r==t?new WO(xwn(i-1),xwn(r)):new WO(xwn(i),xwn(r-1))}function bKn(){return zYn(),Uhn(cT(Vwt,1),p1n,81,0,[qbt,Hbt,Xbt,uwt,Pwt,lwt,Nwt,pwt,Ewt,iwt,ywt,gwt,Swt,Zbt,Dwt,xbt,kwt,Iwt,swt,Cwt,Rwt,Twt,Rbt,jwt,Kwt,Awt,xwt,hwt,Qbt,fwt,owt,$wt,_bt,Vbt,wwt,Fbt,dwt,cwt,nwt,mwt,ewt,Ubt,Bbt,awt,twt,vwt,Lwt,Kbt,Mwt,rwt,bwt,Jbt,Wbt,Owt,zbt,Ybt,Gbt])}function wKn(n,t,e){n.d=0,n.b=0,t.k==(zIn(),gbt)&&e.k==gbt&&uG(oIn(t,(GYn(),rmt)),10)==uG(oIn(e,rmt),10)&&(jen(t).j==(KQn(),yRt)?Rxn(n,t,e):Rxn(n,e,t)),t.k==gbt&&e.k==wbt?jen(t).j==(KQn(),yRt)?n.d=1:n.b=1:e.k==gbt&&t.k==wbt&&(jen(e).j==(KQn(),yRt)?n.b=1:n.d=1),GMn(n,t,e)}function dKn(n){var t,e,i,r,c;return c=gCn(n),null!=n.a&&ZG(c,"category",n.a),!pE(new Lw(n.d))&&(nrn(c,"knownOptions",i=new Ib),t=new Mm(i),z8(new Lw(n.d),t)),!pE(n.g)&&(nrn(c,"supportedFeatures",r=new Ib),e=new Tm(r),z8(n.g,e)),c}function gKn(n){var t,e,i,r,c,a,o,u;for(t=336,e=0,r=new UF(n.length),o=0,u=(a=n).length;o>16!=7&&t){if(eEn(n,t))throw hv(new vM(net+zOn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?Vjn(n,i):n.Cb.Th(n,-1-e,null,i)),t&&(i=uG(t,54).Rh(n,1,iFt,i)),(i=dz(n,t,i))&&i.oj()}else 4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,7,t,t))}function kKn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=3&&t){if(eEn(n,t))throw hv(new vM(net+fdn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?Yjn(n,i):n.Cb.Th(n,-1-e,null,i)),t&&(i=uG(t,54).Rh(n,0,uFt,i)),(i=gz(n,t,i))&&i.oj()}else 4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,3,t,t))}function yKn(n,t){var e,i,r,c,a,o,u,s,h;return b_n(),t.d>n.d&&(o=n,n=t,t=o),t.d<63?KFn(n,t):(s=$9(n,a=(-2&n.d)<<4),h=$9(t,a),i=mXn(n,D9(s,a)),r=mXn(t,D9(h,a)),u=yKn(s,h),e=yKn(i,r),c=D9(c=Zzn(Zzn(c=yKn(mXn(s,i),mXn(r,h)),u),e),a),Zzn(Zzn(u=D9(u,a<<1),c),e))}function MKn(){MKn=E,rjt=new fI(v9n,0),tjt=new fI("LONGEST_PATH",1),ejt=new fI("LONGEST_PATH_SOURCE",2),YTt=new fI("COFFMAN_GRAHAM",3),njt=new fI(D6n,4),cjt=new fI("STRETCH_WIDTH",5),ijt=new fI("MIN_WIDTH",6),JTt=new fI("BF_MODEL_ORDER",7),ZTt=new fI("DF_MODEL_ORDER",8)}function TKn(n,t,e){var i,r,c,a,o;for(a=Vwn(n,e),o=Inn(pbt,e6n,10,t.length,0,1),i=0,c=a.Kc();c.Ob();)oM(gK(oIn(r=uG(c.Pb(),12),(GYn(),qpt))))&&(o[i++]=uG(oIn(r,lmt),10));if(i=0;r+=e?1:-1)c|=t.c.lg(o,r,e,i&&!oM(gK(oIn(t.j,(GYn(),Bpt))))&&!oM(gK(oIn(t.j,(GYn(),mmt))))),c|=t.q.ug(o,r,e),c|=wBn(n,o[r],e,i);return FV(n.c,t),c}function CKn(n,t,e){var i,r,c,a,o,u,s,h;for(s=0,h=(u=s6(n.j)).length;s1&&(n.a=!0),YX(uG(e.b,68),JF(D$(uG(t.b,68).c),vD(YF(D$(uG(e.b,68).a),uG(t.b,68).a),r))),f2(n,t),AKn(n,e)}function LKn(n){var t,e,i,r,c,a;for(r=new Ww(n.a.a);r.a0&&c>0?t++:i>0?e++:c>0?r++:e++}hZ(),f$(n.j,new bi)}function $Kn(n){var t,e;e=null,t=uG(zq(n.g,0),18);do{if(vR(e=t.d.i,(GYn(),nmt)))return uG(oIn(e,nmt),12).i;if(e.k!=(zIn(),dbt)&&hDn(new Fz(ix(Xgn(e).a.Kc(),new h))))t=uG(N9(new Fz(ix(Xgn(e).a.Kc(),new h))),18);else if(e.k!=dbt)return null}while(e&&e.k!=(zIn(),dbt));return e}function DKn(n,t){var e,i,r,c,a,o,u,s,h;for(o=t.j,a=t.g,u=uG(zq(o,o.c.length-1),113),u3(0,o.c.length),s=xTn(n,a,u,h=uG(o.c[0],113)),c=1;cs&&(u=e,h=r,s=i);t.a=h,t.c=u}function xKn(n,t,e){var i,r,c,a,o,u,s;for(s=new Hj(new ip(n)),o=0,u=(a=Uhn(cT(Abt,1),i6n,12,0,[t,e])).length;ou-n.b&&ou-n.a&&o0?c.a?e>(o=c.b.Mf().a)&&(r=(e-o)/2,c.d.b=r,c.d.c=r):c.d.c=n.s+e:cV(n.u)&&((i=ECn(c.b)).c<0&&(c.d.b=-i.c),i.c+i.b>c.b.Mf().a&&(c.d.c=i.c+i.b-c.b.Mf().a))}function rFn(n,t){var e,i,r,c,a;a=new Zm,e=t;do{(c=uG(cQ(n.b,e),131)).B=e.c,c.D=e.d,mv(a.c,c),e=uG(cQ(n.k,e),18)}while(e);return u3(0,a.c.length),(i=uG(a.c[0],131)).j=!0,i.A=uG(i.d.a.ec().Kc().Pb(),18).c.i,(r=uG(zq(a,a.c.length-1),131)).q=!0,r.C=uG(r.d.a.ec().Kc().Pb(),18).d.i,a}function cFn(n){var t,i;if(t=uG(n.a,17).a,i=uG(n.b,17).a,t>=0){if(t==i)return new WO(xwn(-t-1),xwn(-t-1));if(t==-i)return new WO(xwn(-t),xwn(i+1))}return e.Math.abs(t)>e.Math.abs(i)?new WO(xwn(-t),xwn(t<0?i:i+1)):new WO(xwn(t+1),xwn(i))}function aFn(n){var t,e;e=uG(oIn(n,(jYn(),gMt)),171),t=uG(oIn(n,(GYn(),Xpt)),311),e==(Gpn(),Imt)?(kfn(n,gMt,Lmt),kfn(n,Xpt,(Zen(),ppt))):e==Amt?(kfn(n,gMt,Lmt),kfn(n,Xpt,(Zen(),dpt))):t==(Zen(),ppt)?(kfn(n,gMt,Imt),kfn(n,Xpt,gpt)):t==dpt&&(kfn(n,gMt,Amt),kfn(n,Xpt,gpt))}function oFn(){oFn=E,LSt=new oa,CSt=Aq(new wJ,(uIn(),Elt),(zYn(),swt)),ASt=wz(Aq(new wJ,Elt,Twt),Plt,Mwt),NSt=Lvn(Lvn(gP(wz(Aq(new wJ,Tlt,Nwt),Plt,Lwt),Slt),Awt),$wt),ISt=wz(Aq(Aq(Aq(new wJ,jlt,lwt),Slt,wwt),Slt,dwt),Plt,bwt),OSt=wz(Aq(Aq(new wJ,Slt,dwt),Slt,Vbt),Plt,zbt)}function uFn(){uFn=E,KSt=Aq(wz(new wJ,(uIn(),Plt),(zYn(),Jbt)),Elt,swt),HSt=Lvn(Lvn(gP(wz(Aq(new wJ,Tlt,Nwt),Plt,Lwt),Slt),Awt),$wt),FSt=wz(Aq(Aq(Aq(new wJ,jlt,lwt),Slt,wwt),Slt,dwt),Plt,bwt),BSt=Aq(Aq(new wJ,Elt,Twt),Plt,Mwt),_St=wz(Aq(Aq(new wJ,Slt,dwt),Slt,Vbt),Plt,zbt)}function sFn(n,t,e,i,r){var c,a;(v9(t)||t.c.i.c!=t.d.i.c)&&uon(Gfn(Uhn(cT(PNt,1),zZn,8,0,[r.i.n,r.n,r.a])),e)||v9(t)||(t.c==r?sR(t.a,0,new eN(e)):aq(t.a,new eN(e)),i&&!cS(n.a,e)&&((a=uG(oIn(t,(jYn(),bMt)),75))||(a=new Uk,kfn(t,bMt,a)),s8(a,c=new eN(e),a.c.b,a.c),FV(n.a,c)))}function hFn(n,t){var e,i,r,c;for(e=(c=pz(Ngn(h1n,PJ(pz(Ngn(null==t?0:Hon(t),f1n)),15))))&n.b.length-1,r=null,i=n.b[e];i;r=i,i=i.a)if(i.d==c&&xQ(i.i,t))return r?r.a=i.a:n.b[e]=i.a,RM(uG(nJ(i.c),604),uG(nJ(i.f),604)),Tv(uG(nJ(i.b),227),uG(nJ(i.e),227)),--n.f,++n.e,!0;return!1}function fFn(n){var t;for(t=new Fz(ix(qgn(n).a.Kc(),new h));hDn(t);)if(uG(N9(t),18).c.i.k!=(zIn(),bbt))throw hv(new jM(y6n+ZTn(n)+"' has its layer constraint set to FIRST, but has at least one incoming edge that does not come from a FIRST_SEPARATE node. That must not happen."))}function lFn(n,t,e){var i,r,c,a,o,u;if(0==(r=Cdn(254&n.Db)))n.Eb=e;else{if(1==r)a=Inn(dat,EZn,1,2,5,1),0==jTn(n,t)?(a[0]=e,a[1]=n.Eb):(a[0]=n.Eb,a[1]=e);else for(a=Inn(dat,EZn,1,r+1,5,1),c=Kcn(n.Eb),i=2,o=0,u=0;i<=128;i<<=1)i==t?a[u++]=e:n.Db&i&&(a[u++]=c[o++]);n.Eb=a}n.Db|=t}function bFn(n,t,i){var r,c,a,o;for(this.b=new Zm,c=0,r=0,o=new Ww(n);o.a0&&(c+=(a=uG(zq(this.b,0),176)).o,r+=a.p),c*=2,r*=2,t>1?c=t0(e.Math.ceil(c*t)):r=t0(e.Math.ceil(r/t)),this.a=new smn(c,r)}function wFn(n,t,i,r,c,a){var o,u,s,h,f,l,b,w,d,g;for(h=r,t.j&&t.o?(d=(b=uG(cQ(n.f,t.A),60)).d.c+b.d.b,--h):d=t.a.c+t.a.b,f=c,i.q&&i.o?(s=(b=uG(cQ(n.f,i.C),60)).d.c,++f):s=i.a.c,w=d+(u=(s-d)/e.Math.max(2,f-h)),l=h;l=0;a+=r?1:-1){for(o=t[a],u=i==(KQn(),kRt)?r?Dgn(o,i):Spn(Dgn(o,i)):r?Spn(Dgn(o,i)):Dgn(o,i),c&&(n.c[o.p]=u.gc()),f=u.Kc();f.Ob();)h=uG(f.Pb(),12),n.d[h.p]=s++;Ohn(e,u)}}function pFn(n,t,e){var i,r,c,a,o,u,s,h;for(c=uM(pK(n.b.Kc().Pb())),s=uM(pK(whn(t.b))),i=vD(D$(n.a),s-e),r=vD(D$(t.a),e-c),vD(h=JF(i,r),1/(s-c)),this.a=h,this.b=new Zm,o=!0,(a=n.b.Kc()).Pb();a.Ob();)u=uM(pK(a.Pb())),o&&u-e>$9n&&(this.b.Fc(e),o=!1),this.b.Fc(u);o&&this.b.Fc(e)}function mFn(n){var t,e,i,r;if(wHn(n,n.n),n.d.c.length>0){for(AM(n.c);fDn(n,uG(N3(new Ww(n.e.a)),125))>5,t&=31,i>=n.d)return n.e<0?(cHn(),Dot):(cHn(),_ot);if(c=n.d-i,ROn(r=Inn(YHt,W1n,28,c+1,15,1),c,n.a,i,t),n.e<0){for(e=0;e0&&n.a[e]<<32-t){for(e=0;e=0)&&(!(e=iVn((gAn(),kBt),r,t))||((i=e.Ik())>1||-1==i)&&3!=sJ(Nen(kBt,e))))}function SFn(n,t,e,i){var r,c,a,o,u;return o=lCn(uG(zrn((!t.b&&(t.b=new f_(cFt,t,4,7)),t.b),0),84)),u=lCn(uG(zrn((!t.c&&(t.c=new f_(cFt,t,5,8)),t.c),0),84)),R0(o)==R0(u)||Ern(u,o)?null:(a=s0(t))==e?i:(c=uG(cQ(n.a,a),10))&&(r=c.e)?r:null}function PFn(n,t,e){var i,r,c,a;for(e.Ug("Longest path to source layering",1),n.a=t,a=n.a.a,n.b=Inn(YHt,W1n,28,a.c.length,15,1),i=0,c=new Ww(a);c.a0&&(i[0]+=n.d,o-=i[0]),i[2]>0&&(i[2]+=n.d,o-=i[2]),a=e.Math.max(0,o),i[1]=e.Math.max(i[1],o),Q9(n,Est,c.c+r.b+i[0]-(i[1]-o)/2,i),t==Est&&(n.c.b=a,n.c.c=c.c+r.b+(a-o)/2)}function BFn(){this.c=Inn(eUt,I0n,28,(KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length,15,1),this.b=Inn(eUt,I0n,28,Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt]).length,15,1),this.a=Inn(eUt,I0n,28,Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt]).length,15,1),KP(this.c,M0n),KP(this.b,T0n),KP(this.a,T0n)}function HFn(n,t,e){var i,r,c,a;if(t<=e?(r=t,c=e):(r=e,c=t),i=0,null==n.b)n.b=Inn(YHt,W1n,28,2,15,1),n.b[0]=r,n.b[1]=c,n.c=!0;else{if(i=n.b.length,n.b[i-1]+1==r)return void(n.b[i-1]=c);a=Inn(YHt,W1n,28,i+2,15,1),qGn(n.b,0,a,0,i),n.b=a,n.b[i-1]>=r&&(n.c=!1,n.a=!1),n.b[i++]=r,n.b[i]=c,n.c||pxn(n)}}function UFn(n,t,e){var i,r,c,a,o,u,s;for(s=t.d,n.a=new R7(s.c.length),n.c=new Ym,o=new Ww(s);o.a=0?n.Lh(s,!1,!0):YNn(n,e,!1),61).Kc();c.Ob();){for(r=uG(c.Pb(),58),h=0;h1;)e_n(r,r.i-1);return i}function YFn(n,t){var e,i,r,c,a,o;for(e=new ND,r=new Ww(n.b);r.an.d[a.p]&&(e+=J8(n.b,c),A6(n.a,xwn(c)));for(;!LM(n.a);)lin(n.b,uG(xV(n.a),17).a)}return e}function n_n(n){var t,e,i,r,c,a,o;for(n.a=new xF,o=0,r=0,i=new Ww(n.i.b);i.au.d&&(f=u.d+u.a+h));i.c.d=f,t.a.zc(i,t),s=e.Math.max(s,i.c.d+i.c.a)}return s}function r_n(){r_n=E,Zgt=new aI("COMMENTS",0),tpt=new aI("EXTERNAL_PORTS",1),ept=new aI("HYPEREDGES",2),ipt=new aI("HYPERNODES",3),rpt=new aI("NON_FREE_PORTS",4),cpt=new aI("NORTH_SOUTH_PORTS",5),opt=new aI(F6n,6),Ygt=new aI("CENTER_LABELS",7),npt=new aI("END_LABELS",8),apt=new aI("PARTITIONS",9)}function c_n(n,t,e,i,r){return i<0?((i=XOn(n,r,Uhn(cT($ot,1),zZn,2,6,[x1n,R1n,K1n,F1n,_1n,B1n,H1n,U1n,G1n,q1n,X1n,z1n]),t))<0&&(i=XOn(n,r,Uhn(cT($ot,1),zZn,2,6,["Jan","Feb","Mar","Apr",_1n,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),t)),!(i<0||(e.k=i,0))):i>0&&(e.k=i-1,!0)}function a_n(n,t,e,i,r){return i<0?((i=XOn(n,r,Uhn(cT($ot,1),zZn,2,6,[x1n,R1n,K1n,F1n,_1n,B1n,H1n,U1n,G1n,q1n,X1n,z1n]),t))<0&&(i=XOn(n,r,Uhn(cT($ot,1),zZn,2,6,["Jan","Feb","Mar","Apr",_1n,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),t)),!(i<0||(e.k=i,0))):i>0&&(e.k=i-1,!0)}function o_n(n,t,e,i,r,c){var a,o,u;if(o=32,i<0){if(t[0]>=n.length)return!1;if(43!=(o=VJ(n,t[0]))&&45!=o)return!1;if(++t[0],(i=RNn(n,t))<0)return!1;45==o&&(i=-i)}return 32==o&&t[0]-e==2&&2==r.b&&(a=(u=(new QE).q.getFullYear()-V1n+V1n-80)%100,c.a=i==a,i+=100*(u/100|0)+(i=0?Rmn(n):hW(Rmn(Men(n)))),qot[t]=BA(Nz(n,t),0)?Rmn(Nz(n,t)):hW(Rmn(Men(Nz(n,t)))),n=Ngn(n,5);for(;t=h&&(s=r);s&&(f=e.Math.max(f,s.a.o.a)),f>b&&(l=h,b=f)}return l}function v_n(n){var t,e,i,r,c,a,o;for(c=new Hj(uG(WW(new Dn),50)),o=T0n,e=new Ww(n.d);e.aF7n?f$(s,n.b):r<=F7n&&r>_7n?f$(s,n.d):r<=_7n&&r>B7n?f$(s,n.c):r<=B7n&&f$(s,n.a),a=T_n(n,s,a);return c}function j_n(n,t,e,i){var r,c,a,o,u;for(r=(i.c+i.a)/2,BY(t.j),aq(t.j,r),BY(e.e),aq(e.e,r),u=new hj,a=new Ww(n.f);a.a1&&(i=new MO(r,e.b),aq(t.a,i)),dan(t.a,Uhn(cT(PNt,1),zZn,8,0,[f,h]))}function O_n(n,t,e){var i,r;for(t=48;e--)pHt[e]=e-48<<24>>24;for(i=70;i>=65;i--)pHt[i]=i-65+10<<24>>24;for(r=102;r>=97;r--)pHt[r]=r-97+10<<24>>24;for(c=0;c<10;c++)mHt[c]=48+c&D1n;for(n=10;n<=15;n++)mHt[n]=65+n-10&D1n}function N_n(n,t){t.Ug("Process graph bounds",1),kfn(n,(OQn(),PPt),$I(Tun(ZJ(new fX(null,new h3(n.b,16)),new Ka)))),kfn(n,IPt,$I(Tun(ZJ(new fX(null,new h3(n.b,16)),new Fa)))),kfn(n,SPt,$I(Mun(ZJ(new fX(null,new h3(n.b,16)),new _a)))),kfn(n,CPt,$I(Mun(ZJ(new fX(null,new h3(n.b,16)),new Ba)))),t.Vg()}function $_n(n){var t,i,r,c,a;c=uG(oIn(n,(jYn(),DMt)),21),a=uG(oIn(n,KMt),21),t=new eN(i=new MO(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a)),c.Hc((Qmn(),VRt))&&(r=uG(oIn(n,RMt),8),a.Hc((aUn(),eKt))&&(r.a<=0&&(r.a=20),r.b<=0&&(r.b=20)),t.a=e.Math.max(i.a,r.a),t.b=e.Math.max(i.b,r.b)),oM(gK(oIn(n,xMt)))||cXn(n,i,t)}function D_n(n,t){var e,i,r,c;for(c=Dgn(t,(KQn(),KRt)).Kc();c.Ob();)i=uG(c.Pb(),12),(e=uG(oIn(i,(GYn(),lmt)),10))&&RKn(xS(DS(RS($S(new uk,0),.1),n.i[t.p].d),n.i[e.p].a));for(r=Dgn(t,yRt).Kc();r.Ob();)i=uG(r.Pb(),12),(e=uG(oIn(i,(GYn(),lmt)),10))&&RKn(xS(DS(RS($S(new uk,0),.1),n.i[e.p].d),n.i[t.p].a))}function x_n(n){var t,e,i,r,c;if(!n.c){if(c=new ks,null==(t=V_t).a.zc(n,t)){for(i=new DD(z5(n));i.e!=i.i.gc();)F$(r=MGn(e=uG(Zkn(i),89)),90)&&CW(c,x_n(uG(r,29))),ttn(c,e);t.a.Bc(n),t.a.gc()}imn(c),lbn(c),n.c=new vL((uG(zrn(gZ((tQ(),M_t).o),15),19),c.i),c.g),y9(n).b&=-33}return n.c}function R_n(n){var t;if(10!=n.c)throw hv(new CM(rZn((t$(),eit))));switch(t=n.a){case 110:t=10;break;case 114:t=13;break;case 116:t=9;break;case 92:case 124:case 46:case 94:case 45:case 63:case 42:case 43:case 123:case 125:case 40:case 41:case 91:case 93:break;default:throw hv(new CM(rZn((t$(),Lit))))}return t}function K_n(n){var t,e,i,r;if(0==n.l&&0==n.m&&0==n.h)return"0";if(n.h==b0n&&0==n.m&&0==n.l)return"-9223372036854775808";if(n.h>>19)return"-"+K_n(gfn(n));for(e=n,i="";0!=e.l||0!=e.m||0!=e.h;){if(e=Yzn(e,_9(g0n),!0),t=""+Tj(Qat),0!=e.l||0!=e.m||0!=e.h)for(r=9-t.length;r>0;r--)t="0"+t;i=t+i}return i}function F_n(n){var t,e,i,r,c,a,o;for(t=!1,e=0,r=new Ww(n.d.b);r.a=n.a)return-1;if(!_Pn(t,i))return-1;if(P6(uG(r.Kb(t),20)))return 1;for(c=0,o=uG(r.Kb(t),20).Kc();o.Ob();){if(-1==(u=U_n(n,(a=uG(o.Pb(),18)).c.i==t?a.d.i:a.c.i,i,r)))return-1;if((c=e.Math.max(c,u))>n.c-1)return-1}return c+1}function G_n(n,t){var e,i,r,c,a,o;if(xA(t)===xA(n))return!0;if(!F$(t,15))return!1;if(i=uG(t,15),o=n.gc(),i.gc()!=o)return!1;if(a=i.Kc(),n.Yi()){for(e=0;e0)if(n._j(),null!=t){for(c=0;c>24;case 97:case 98:case 99:case 100:case 101:case 102:return n-97+10<<24>>24;case 65:case 66:case 67:case 68:case 69:case 70:return n-65+10<<24>>24;default:throw hv(new ZM("Invalid hexadecimal"))}}function W_n(){W_n=E,pst=new rC("SPIRAL",0),lst=new rC("LINE_BY_LINE",1),bst=new rC("MANHATTAN",2),fst=new rC("JITTER",3),dst=new rC("QUADRANTS_LINE_BY_LINE",4),gst=new rC("QUADRANTS_MANHATTAN",5),wst=new rC("QUADRANTS_JITTER",6),hst=new rC("COMBINE_LINE_BY_LINE_MANHATTAN",7),sst=new rC("COMBINE_JITTER_MANHATTAN",8)}function Q_n(n,t,e,i){var r,c,a,o,u,s;for(u=pSn(n,e),s=pSn(t,e),r=!1;u&&s&&(i||ejn(u,s,e));)a=pSn(u,e),o=pSn(s,e),Ien(t),Ien(n),c=u.c,pVn(u,!1),pVn(s,!1),e?($jn(t,s.p,c),t.p=s.p,$jn(n,u.p+1,c),n.p=u.p):($jn(n,u.p,c),n.p=u.p,$jn(t,s.p+1,c),t.p=s.p),a2(u,null),a2(s,null),u=a,s=o,r=!0;return r}function J_n(n){switch(n.g){case 0:return new ul;case 1:return new al;case 3:return new iP;case 4:return new Sc;case 5:return new RF;case 6:return new ol;case 2:return new cl;case 7:return new Zf;case 8:return new tl;default:throw hv(new vM("No implementation is available for the layerer "+(null!=n.f?n.f:""+n.g)))}}function Y_n(n,t,e,i){var r,c,a,o,u;for(r=!1,c=!1,o=new Ww(i.j);o.a=t.length)throw hv(new dM("Greedy SwitchDecider: Free layer not in graph."));this.c=t[n],this.e=new R_(i),Aon(this.e,this.c,(KQn(),_Rt)),this.i=new R_(i),Aon(this.i,this.c,kRt),this.f=new sX(this.c),this.a=!c&&r.i&&!r.s&&this.c[0].k==(zIn(),lbt),this.a&&rAn(this,n,t.length)}function iBn(n,t){var e,i,r,c,a,o;c=!n.B.Hc((aUn(),nKt)),a=n.B.Hc(iKt),n.a=new umn(a,c,n.c),n.n&&WY(n.a.n,n.n),nM(n.g,(Yrn(),Est),n.a),t||((i=new tkn(1,c,n.c)).n.a=n.k,UV(n.p,(KQn(),yRt),i),(r=new tkn(1,c,n.c)).n.d=n.k,UV(n.p,KRt,r),(o=new tkn(0,c,n.c)).n.c=n.k,UV(n.p,_Rt,o),(e=new tkn(0,c,n.c)).n.b=n.k,UV(n.p,kRt,e))}function rBn(n){var t,e,i;switch((t=uG(oIn(n.d,(jYn(),Vyt)),223)).g){case 2:e=UJn(n);break;case 3:i=new Zm,kS(JJ(YJ(sin(sin(new fX(null,new h3(n.d.b,16)),new Or),new Ar),new Lr),new pr),new Ng(i)),e=i;break;default:throw hv(new kM("Compaction not supported for "+t+" edges."))}xzn(n,e),z8(new Lw(n.g),new Ag(n))}function cBn(n,t){var e,i,r,c,a,o,u;if(t.Ug("Process directions",1),(e=uG(oIn(n,(QGn(),cCt)),88))!=(xdn(),QDt))for(r=Fkn(n.b,0);r.b!=r.d.c;){switch(i=uG(I6(r),40),o=uG(oIn(i,(OQn(),GPt)),17).a,u=uG(oIn(i,qPt),17).a,e.g){case 4:u*=-1;break;case 1:c=o,o=u,u=c;break;case 2:a=o,o=-u,u=a}kfn(i,GPt,xwn(o)),kfn(i,qPt,xwn(u))}t.Vg()}function aBn(n,t){var e;return e=new Yn,t&&zsn(e,uG(cQ(n.a,iFt),96)),F$(t,422)&&zsn(e,uG(cQ(n.a,rFt),96)),F$(t,366)?(zsn(e,uG(cQ(n.a,lFt),96)),e):(F$(t,84)&&zsn(e,uG(cQ(n.a,cFt),96)),F$(t,207)?(zsn(e,uG(cQ(n.a,bFt),96)),e):F$(t,193)?(zsn(e,uG(cQ(n.a,wFt),96)),e):(F$(t,326)&&zsn(e,uG(cQ(n.a,aFt),96)),e))}function oBn(n){var t,e,i,r,c,a,o;for(o=new c9,a=new Ww(n.a);a.a0&&t=0)return!1;if(t.p=e.b,kD(e.e,t),i==(zIn(),wbt)||i==gbt)for(r=new Ww(t.j);r.an.d[o.p]&&(e+=J8(n.b,c),A6(n.a,xwn(c))):++a;for(e+=n.b.d*a;!LM(n.a);)lin(n.b,uG(xV(n.a),17).a)}return e}function $Bn(n){var t,e,i,r,c,a;return c=0,(t=bEn(n)).kk()&&(c|=4),n.Bb&hrt&&(c|=2),F$(n,102)?(r=lMn(e=uG(n,19)),e.Bb&Qtt&&(c|=32),r&&(iQ(K0(r)),c|=8,((a=r.t)>1||-1==a)&&(c|=16),r.Bb&Qtt&&(c|=64)),e.Bb&P0n&&(c|=frt),c|=w1n):F$(t,469)?c|=512:(i=t.kk())&&1&i.i&&(c|=256),512&n.Bb&&(c|=128),c}function DBn(n,t){var e;return n.f==CBt?(e=sJ(Nen((gAn(),kBt),t)),n.e?4==e&&t!=(m$n(),NBt)&&t!=(m$n(),OBt)&&t!=(m$n(),ABt)&&t!=(m$n(),LBt):2==e):!(!n.d||!(n.d.Hc(t)||n.d.Hc(_3(Nen((gAn(),kBt),t)))||n.d.Hc(iVn((gAn(),kBt),n.b,t))))||!(!n.f||!WRn((gAn(),n.f),HJ(Nen(kBt,t))))&&(e=sJ(Nen(kBt,t)),n.e?4==e:2==e)}function xBn(n){var t,e,i,r,c,a,o,u,s,h,f,l;for(f=-1,l=0,s=0,h=(u=n).length;s0&&++l;++f}return l}function RBn(n,t,i,r){var c,a,o,u,s,h,f,l;return s=(o=uG(zDn(i,(XYn(),mDt)),8)).a,f=o.b+n,(c=e.Math.atan2(f,s))<0&&(c+=f7n),(c+=t)>f7n&&(c-=f7n),h=(u=uG(zDn(r,mDt),8)).a,l=u.b+n,(a=e.Math.atan2(l,h))<0&&(a+=f7n),(a+=t)>f7n&&(a-=f7n),YN(),oan(1e-10),e.Math.abs(c-a)<=1e-10||c==a||isNaN(c)&&isNaN(a)?0:ca?1:KL(isNaN(c),isNaN(a))}function KBn(n){var t,e,i,r,c,a,o;for(o=new Ym,i=new Ww(n.a.b);i.a=n.o)throw hv(new Ik);a=t>>5,c=Nz(1,pz(Nz(31&t,1))),n.n[e][a]=r?S3(n.n[e][a],c):E3(n.n[e][a],CG(c)),c=Nz(c,1),n.n[e][a]=i?S3(n.n[e][a],c):E3(n.n[e][a],CG(c))}catch(o){throw F$(o=Ehn(o),333)?hv(new dM(b3n+n.o+"*"+n.p+w3n+t+TZn+e+d3n)):hv(o)}}function UBn(n,t,e,i){var r,c,a,o,u,s,h,f;for(f=new Hj(new ep(n)),o=0,u=(a=Uhn(cT(pbt,1),e6n,10,0,[t,e])).length;o0&&(!(i=(!n.n&&(n.n=new fV(lFt,n,1,7)),uG(zrn(n.n,0),135)).a)||JA(JA((t.a+=' "',t),i),'"'))),JA(Nj(JA(Nj(JA(Nj(JA(Nj((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function VBn(n){var t,e,i;return 64&n.Db?rOn(n):(t=new lx(Btt),(e=n.k)?JA(JA((t.a+=' "',t),e),'"'):(!n.n&&(n.n=new fV(lFt,n,1,7)),n.n.i>0&&(!(i=(!n.n&&(n.n=new fV(lFt,n,1,7)),uG(zrn(n.n,0),135)).a)||JA(JA((t.a+=' "',t),i),'"'))),JA(Nj(JA(Nj(JA(Nj(JA(Nj((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function WBn(n,t){var e,i,r,c,a;for(t==(Sln(),rEt)&&_An(uG(Y9(n.a,(gPn(),wdt)),15)),r=uG(Y9(n.a,(gPn(),wdt)),15).Kc();r.Ob();)switch(i=uG(r.Pb(),105),e=uG(zq(i.j,0),113).d.j,f$(c=new Z_(i.j),new Fr),t.g){case 2:TCn(n,c,e,(gon(),Edt),1);break;case 1:case 0:TCn(n,new C2(c,0,a=IRn(c)),e,(gon(),Edt),0),TCn(n,new C2(c,a,c.c.length),e,Edt,1)}}function QBn(n,t){var e,i,r,c,a,o;if(null==t||0==t.length)return null;if(!(r=uG(U1(n.a,t),143))){for(i=new _w(new Fw(n.b).a.vc().Kc());i.a.Ob();)if(c=uG(i.a.Pb(),44),a=(e=uG(c.md(),143)).c,o=t.length,m_(a.substr(a.length-o,o),t)&&(t.length==a.length||46==VJ(a,a.length-t.length-1))){if(r)return null;r=e}r&&r2(n.a,t,r)}return r}function JBn(n,t){var e,i,r;return e=new Bn,(i=uG(l8(YJ(new fX(null,new h3(n.f,16)),e),gen(new W,new Q,new rn,new cn,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Out),Iut]))),21).gc())<(r=uG(l8(YJ(new fX(null,new h3(t.f,16)),e),gen(new W,new Q,new rn,new cn,Uhn(cT(Rut,1),p1n,108,0,[Out,Iut]))),21).gc())?-1:i==r?0:1}function YBn(n){var t,e,i;vR(n,(jYn(),PMt))&&((i=uG(oIn(n,PMt),21)).dc()||(e=new nB(t=uG(Mj(eRt),9),uG(MF(t,t.length),9),0),i.Hc((VDn(),Gxt))?Mon(e,Gxt):Mon(e,qxt),i.Hc(Hxt)||Mon(e,Hxt),i.Hc(Bxt)?Mon(e,Vxt):i.Hc(_xt)?Mon(e,zxt):i.Hc(Uxt)&&Mon(e,Xxt),i.Hc(Vxt)?Mon(e,Bxt):i.Hc(zxt)?Mon(e,_xt):i.Hc(Xxt)&&Mon(e,Uxt),kfn(n,PMt,e)))}function ZBn(n){var t,e,i,r,c,a,o;for(r=uG(oIn(n,(GYn(),zpt)),10),u3(0,(i=n.j).c.length),e=uG(i.c[0],12),a=new Ww(r.j);a.ar.p?(NLn(c,KRt),c.d&&(o=c.o.b,t=c.a.b,c.a.b=o-t)):c.j==KRt&&r.p>n.p&&(NLn(c,yRt),c.d&&(o=c.o.b,t=c.a.b,c.a.b=-(o-t)));break}return r}function nHn(n,t,e,i,r){var c,a,o,u,s,h,f;if(!(F$(t,207)||F$(t,366)||F$(t,193)))throw hv(new vM("Method only works for ElkNode-, ElkLabel and ElkPort-objects."));return a=n.a/2,u=t.i+i-a,h=t.j+r-a,s=u+t.g+n.a,f=h+t.f+n.a,aq(c=new Uk,new MO(u,h)),aq(c,new MO(u,f)),aq(c,new MO(s,f)),aq(c,new MO(s,h)),zsn(o=new pDn(c),t),e&&vJ(n.b,t,o),o}function tHn(n,t,e){var i,r,c,a,o,u,s,h;for(c=new MO(t,e),s=new Ww(n.a);s.a1&&(i=new MO(r,e.b),aq(t.a,i)),dan(t.a,Uhn(cT(PNt,1),zZn,8,0,[f,h]))}function THn(){THn=E,$jt=new dI(q4n,0),Ijt=new dI("NIKOLOV",1),Ljt=new dI("NIKOLOV_PIXEL",2),Ojt=new dI("NIKOLOV_IMPROVED",3),Ajt=new dI("NIKOLOV_IMPROVED_PIXEL",4),Sjt=new dI("DUMMYNODE_PERCENTAGE",5),Njt=new dI("NODECOUNT_PERCENTAGE",6),Djt=new dI("NO_BOUNDARY",7),Pjt=new dI("MODEL_ORDER_LEFT_TO_RIGHT",8),Cjt=new dI("MODEL_ORDER_RIGHT_TO_LEFT",9)}function jHn(n){var t,e,i,r,c;for(i=n.length,t=new VM,c=0;c=40)&&IGn(n),izn(n),mFn(n),e=ign(n),i=0;e&&i0&&aq(n.f,c)):(n.c[a]-=s+1,n.c[a]<=0&&n.a[a]>0&&aq(n.e,c))))}function iUn(n,t,e,i){var r,c,a,o,u,s,h;for(YF(u=new MO(e,i),uG(oIn(t,(OQn(),kPt)),8)),h=Fkn(t.b,0);h.b!=h.d.c;)JF((s=uG(I6(h),40)).e,u),aq(n.b,s);for(o=uG(l8(_0(new fX(null,new h3(t.a,16))),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15).Kc();o.Ob();){for(c=Fkn((a=uG(o.Pb(),65)).a,0);c.b!=c.d.c;)(r=uG(I6(c),8)).a+=u.a,r.b+=u.b;aq(n.a,a)}}function rUn(n,t){var e,i,r,c;if(0<(F$(n,16)?uG(n,16).gc():x5(n.Kc()))){if(1<(r=t)){for(--r,c=new Ea,i=n.Kc();i.Ob();)e=uG(i.Pb(),40),c=zcn(Uhn(cT(vat,1),EZn,20,0,[c,new Mp(e)]));return rUn(c,r)}if(r<0){for(c=new Sa,i=n.Kc();i.Ob();)e=uG(i.Pb(),40),c=zcn(Uhn(cT(vat,1),EZn,20,0,[c,new Mp(e)]));if(0<(F$(c,16)?uG(c,16).gc():x5(c.Kc())))return rUn(c,r)}}return uG(B$(n.Kc()),40)}function cUn(n,t,e){var i,r,c,a;for(e.Ug("Processor order nodes",2),n.b=uM(pK(oIn(t,(QGn(),ECt)))),n.a=uG(oIn(t,cCt),88),n.a==(xdn(),ZDt)&&(n.a=QDt,kfn(t,cCt,n.a)),r=new lS,a=Fkn(t.b,0);a.b!=a.d.c;)oM(gK(oIn(c=uG(I6(a),40),(OQn(),UPt))))&&s8(r,c,r.c.b,r.c);MK(0!=r.b),ezn(n,i=uG(r.a.a.c,40)),e.fh(1),GBn(n,i,0-uM(pK(oIn(i,(OQn(),NPt))))/2,0),e.fh(1),e.Vg()}function aUn(){aUn=E,eKt=new FO("DEFAULT_MINIMUM_SIZE",0),rKt=new FO("MINIMUM_SIZE_ACCOUNTS_FOR_PADDING",1),tKt=new FO("COMPUTE_PADDING",2),cKt=new FO("OUTSIDE_NODE_LABELS_OVERHANG",3),aKt=new FO("PORTS_OVERHANG",4),uKt=new FO("UNIFORM_PORT_SPACING",5),oKt=new FO("SPACE_EFFICIENT_PORT_LABELS",6),iKt=new FO("FORCE_TABULAR_NODE_LABELS",7),nKt=new FO("ASYMMETRICAL",8)}function oUn(n,t){var e,i,r,c,a,o,u,s;if(t){if(e=(c=t.Dh())?Hrn(c).wi().si(c):null){for(Akn(n,t,e),u=0,s=(null==(r=t.Dh()).i&&eqn(r),r.i).length;u=0&&u2*c?(h=new Jrn(f),s=EX(a)/jX(a),u=KJn(h,t,new Dk,e,i,r,s),JF(dL(h.e),u),f.c.length=0,c=0,mv(f.c,h),mv(f.c,a),c=EX(h)*jX(h)+EX(a)*jX(a)):(mv(f.c,a),c+=EX(a)*jX(a));return f}function fUn(n,t){var e,i,r,c,a,o;if((o=uG(oIn(t,(jYn(),JMt)),101))==($Pn(),aRt)||o==cRt)for(r=new MO(t.f.a+t.d.b+t.d.c,t.f.b+t.d.d+t.d.a).b,a=new Ww(n.a);a.ae?t:e;s<=f;++s)s==e?o=i++:(c=r[s],h=w.am(c.Lk()),s==t&&(u=s!=f||h?i:i-1),h&&++i);return l=uG(zdn(n,t,e),76),o!=u&&Yv(n,new wtn(n.e,7,a,xwn(o),b.md(),u)),l}return uG(zdn(n,t,e),76)}function bUn(n,t){var e,i,r,c,a,o;for(t.Ug("Port order processing",1),o=uG(oIn(n,(jYn(),iTt)),430),e=new Ww(n.b);e.a=0&&(!fjn(n,a)||(u<22?o.l|=1<>>1,a.m=s>>>1|(1&h)<<21,a.l=f>>>1|(1&s)<<21,--u;return e&&Yfn(o),c&&(i?(Qat=gfn(n),r&&(Qat=Thn(Qat,(tin(),Zat)))):Qat=p$(n.l,n.m,n.h)),o}function pUn(n,t){var e,i,r,c,a,o,u,s,h,f;for(s=n.e[t.c.p][t.p]+1,u=t.c.a.c.length+1,o=new Ww(n.a);o.a0&&(s3(0,n.length),45==n.charCodeAt(0)||(s3(0,n.length),43==n.charCodeAt(0)))?1:0;ie)throw hv(new ZM(y0n+n+'"'));return a}function vUn(n){var t,i,r,c,a,o;for(a=new lS,c=new Ww(n.a);c.a1)&&1==t&&uG(n.a[n.b],10).k==(zIn(),bbt)?Gqn(uG(n.a[n.b],10),(Ajn(),$xt)):i&&(!e||(n.c-n.b&n.a.length-1)>1)&&1==t&&uG(n.a[n.c-1&n.a.length-1],10).k==(zIn(),bbt)?Gqn(uG(n.a[n.c-1&n.a.length-1],10),(Ajn(),Dxt)):2==(n.c-n.b&n.a.length-1)?(Gqn(uG(Rfn(n),10),(Ajn(),$xt)),Gqn(uG(Rfn(n),10),Dxt)):Pxn(n,r),q5(n)}function jUn(n,t,i){var r,c,a,o,u;for(a=0,c=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));c.e!=c.i.gc();)o="",0==(!(r=uG(Zkn(c),27)).n&&(r.n=new fV(lFt,r,1,7)),r.n).i||(o=uG(zrn((!r.n&&(r.n=new fV(lFt,r,1,7)),r.n),0),135).a),zsn(u=new wln(a++,t,o),r),kfn(u,(OQn(),RPt),r),u.e.b=r.j+r.f/2,u.f.a=e.Math.max(r.g,1),u.e.a=r.i+r.g/2,u.f.b=e.Math.max(r.f,1),aq(t.b,u),VAn(i.f,r,u)}function EUn(n){var t,e,i,r,c;i=uG(oIn(n,(GYn(),rmt)),27),c=uG(zDn(i,(jYn(),DMt)),181).Hc((Qmn(),JRt)),n.e||(r=uG(oIn(n,Hpt),21),t=new MO(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a),r.Hc((r_n(),tpt))?(Myn(i,JMt,($Pn(),cRt)),ZQn(i,t.a,t.b,!1,!0)):oM(gK(zDn(i,xMt)))||ZQn(i,t.a,t.b,!0,!0)),Myn(i,DMt,c?ggn(JRt):new nB(e=uG(Mj(sKt),9),uG(MF(e,e.length),9),0))}function SUn(n,t,e){var i,r,c,a;if(t[0]>=n.length)return e.o=0,!0;switch(VJ(n,t[0])){case 43:r=1;break;case 45:r=-1;break;default:return e.o=0,!0}if(++t[0],c=t[0],0==(a=RNn(n,t))&&t[0]==c)return!1;if(t[0]a&&(a=r,s.c.length=0),r==a&&kD(s,new WO(e.c.i,e)));hZ(),f$(s,n.c),GX(n.b,o.p,s)}}function OUn(n,t){var e,i,r,c,a,o,u,s;for(c=new Ww(t.b);c.aa&&(a=r,s.c.length=0),r==a&&kD(s,new WO(e.d.i,e)));hZ(),f$(s,n.c),GX(n.f,o.p,s)}}function AUn(n,t){var e,i,r,c,a,o,u;if(null==(u=gK(oIn(t,(QGn(),TCt))))||(tJ(u),u)){for(E$n(n,t),r=new Zm,o=Fkn(t.b,0);o.b!=o.d.c;)(e=yAn(n,uG(I6(o),40),null))&&(zsn(e,t),mv(r.c,e));if(n.a=null,n.b=null,r.c.length>1)for(i=new Ww(r);i.a=0&&o!=e&&(c=new lV(n,1,o,a,null),i?i.nj(c):i=c),e>=0&&(c=new lV(n,1,e,o==e?a:null,t),i?i.nj(c):i=c)),i}function DUn(n){var t,e,i;if(null==n.b){if(i=new zM,null!=n.i&&(VA(i,n.i),i.a+=":"),256&n.f){for(256&n.f&&null!=n.a&&(aY(n.i)||(i.a+="//"),VA(i,n.a)),null!=n.d&&(i.a+="/",VA(i,n.d)),16&n.f&&(i.a+="/"),t=0,e=n.j.length;ts)&&(u+o+uXn(i,s,!1).a<=t.b&&(dtn(e,c-e.s),e.c=!0,dtn(i,c-e.s),oMn(i,e.s,e.t+e.d+o),i.k=!0,Gun(e.q,i),h=!0,r&&(fan(t,i),i.j=t,n.c.length>a&&(uEn((u3(a,n.c.length),uG(n.c[a],186)),i),0==(u3(a,n.c.length),uG(n.c[a],186)).a.c.length&&i7(n,a)))),h)}function HUn(n,t){var e,i,r,c,a;if(t.Ug("Partition midprocessing",1),r=new K1,kS(JJ(new fX(null,new h3(n.a,16)),new di),new kg(r)),0!=r.d){for(a=uG(l8(f3(new fX(null,(r.i||(r.i=new RD(r,r.c))).Nc())),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),e=uG((i=a.Kc()).Pb(),17);i.Ob();)c=uG(i.Pb(),17),RRn(uG(Y9(r,e),21),uG(Y9(r,c),21)),e=c;t.Vg()}}function UUn(n,t,e){var i,r,c,a,o;if(0==t.p){for(t.p=1,(r=e)||(r=new WO(new Zm,new nB(i=uG(Mj(YRt),9),uG(MF(i,i.length),9),0))),uG(r.a,15).Fc(t),t.k==(zIn(),lbt)&&uG(r.b,21).Fc(uG(oIn(t,(GYn(),Fpt)),64)),a=new Ww(t.j);a.a0)if(r=uG(n.Ab.g,2033),null==t){for(c=0;ci.s&&ua)return KQn(),kRt;break;case 4:case 3:if(h<0)return KQn(),yRt;if(h+e>c)return KQn(),KRt}return(u=(s+o/2)/a)+(i=(h+e/2)/c)<=1&&u-i<=0?(KQn(),_Rt):u+i>=1&&u-i>=0?(KQn(),kRt):i<.5?(KQn(),yRt):(KQn(),KRt)}function nGn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b;for(e=!1,u=uM(pK(oIn(t,(jYn(),ETt)))),l=T1n*u,r=new Ww(t.b);r.aa.n.b-a.d.d+h.a+l&&(b=s.g+h.g,h.a=(h.g*h.a+s.g*s.a)/b,h.g=b,s.f=h,e=!0)),c=a,s=h;return e}function tGn(n,t,e,i,r,c,a){var o,u,s,h,f;for(f=new cN,u=t.Kc();u.Ob();)for(h=new Ww(uG(u.Pb(),853).Rf());h.a0?o.a?r>(s=o.b.Mf().b)&&(n.v||1==o.c.d.c.length?(a=(r-s)/2,o.d.d=a,o.d.a=a):(i=(uG(zq(o.c.d,0),187).Mf().b-s)/2,o.d.d=e.Math.max(0,i),o.d.a=r-i-s)):o.d.a=n.t+r:cV(n.u)&&((c=ECn(o.b)).d<0&&(o.d.d=-c.d),c.d+c.a>o.b.Mf().b&&(o.d.a=c.d+c.a-o.b.Mf().b))}function rGn(){rGn=E,$ft=new _N((XYn(),vDt),xwn(1)),_ft=new _N(DDt,80),Fft=new _N(CDt,5),kft=new _N(c$t,r4n),Dft=new _N(kDt,xwn(1)),Kft=new _N(TDt,(qx(),!0)),Aft=new CN(50),Oft=new _N(W$t,Aft),Mft=O$t,Lft=sDt,yft=new _N(p$t,!1),Ift=V$t,Pft=H$t,Cft=q$t,Sft=_$t,Eft=K$t,Nft=bDt,oOn(),jft=sft,Bft=wft,Tft=uft,xft=fft,Rft=bft,Gft=HDt,Xft=XDt,Uft=BDt,Hft=_Dt,Iwn(),new _N(UDt,qft=fKt)}function cGn(n,t){var e;switch(Min(n)){case 6:return RA(t);case 7:return FA(t);case 8:return KA(t);case 3:return Array.isArray(t)&&!((e=Min(t))>=14&&e<=16);case 11:return null!=t&&typeof t===mZn;case 12:return null!=t&&(typeof t===wZn||typeof t==mZn);case 0:return Eyn(t,n.__elementTypeId$);case 2:return NV(t)&&!(t.Tm===j);case 1:return NV(t)&&!(t.Tm===j)||Eyn(t,n.__elementTypeId$);default:return!0}}function aGn(n){var t,i,r,c;r=n.o,VK(),n.A.dc()||udn(n.A,lht)?c=r.a:(c=n.D?e.Math.max(r.a,gNn(n.f)):gNn(n.f),n.A.Hc((Qmn(),WRt))&&!n.B.Hc((aUn(),cKt))&&(c=e.Math.max(c,gNn(uG(AJ(n.p,(KQn(),yRt)),252))),c=e.Math.max(c,gNn(uG(AJ(n.p,KRt),252)))),(t=fsn(n))&&(c=e.Math.max(c,t.a))),oM(gK(n.e.Tf().of((XYn(),H$t))))?r.a=e.Math.max(r.a,c):r.a=c,(i=n.f.i).c=0,i.b=c,YGn(n.f)}function oGn(n,t){var i,r,c,a;return r=e.Math.min(e.Math.abs(n.c-(t.c+t.b)),e.Math.abs(n.c+n.b-t.c)),a=e.Math.min(e.Math.abs(n.d-(t.d+t.a)),e.Math.abs(n.d+n.a-t.d)),(i=e.Math.abs(n.c+n.b/2-(t.c+t.b/2)))>n.b/2+t.b/2||(c=e.Math.abs(n.d+n.a/2-(t.d+t.a/2)))>n.a/2+t.a/2?1:0==i&&0==c?0:0==i?a/c+1:0==c?r/i+1:e.Math.min(r/i,a/c)+1}function uGn(n,t){var e,i,r,c,a,o,u;for(c=0,o=0,u=0,r=new Ww(n.f.e);r.a0&&n.d!=(Jen(),plt)&&(o+=a*(i.d.a+n.a[t.a][i.a]*(t.d.a-i.d.a)/e)),e>0&&n.d!=(Jen(),dlt)&&(u+=a*(i.d.b+n.a[t.a][i.a]*(t.d.b-i.d.b)/e)));switch(n.d.g){case 1:return new MO(o/c,t.d.b);case 2:return new MO(t.d.a,u/c);default:return new MO(o/c,u/c)}}function sGn(n){var t,e,i,r,c;for(kD(c=new R7((!n.a&&(n.a=new MD(eFt,n,5)),n.a).i+2),new MO(n.j,n.k)),kS(new fX(null,(!n.a&&(n.a=new MD(eFt,n,5)),new h3(n.a,16))),new Vp(c)),kD(c,new MO(n.b,n.c)),t=1;t0&&(hfn(u,!1,(xdn(),JDt)),hfn(u,!0,YDt)),Prn(t.g,new UC(n,e)),vJ(n.g,t,e)}function lGn(){var n;for(lGn=E,pot=Uhn(cT(YHt,1),W1n,28,15,[-1,-1,30,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5]),mot=Inn(YHt,W1n,28,37,15,1),vot=Uhn(cT(YHt,1),W1n,28,15,[-1,-1,63,40,32,28,25,23,21,20,19,19,18,18,17,17,16,16,16,15,15,15,15,14,14,14,14,14,14,13,13,13,13,13,13,13,13]),kot=Inn(nUt,E0n,28,37,14,1),n=2;n<=36;n++)mot[n]=t0(e.Math.pow(n,pot[n])),kot[n]=bSn(YZn,mot[n])}function bGn(n){var t;if(1!=(!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i)throw hv(new vM(Ptt+(!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i));return t=new Uk,Shn(uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84))&&Qon(t,pYn(n,Shn(uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84)),!1)),Shn(uG(zrn((!n.c&&(n.c=new f_(cFt,n,5,8)),n.c),0),84))&&Qon(t,pYn(n,Shn(uG(zrn((!n.c&&(n.c=new f_(cFt,n,5,8)),n.c),0),84)),!0)),t}function wGn(n,t){var e,i,r;for(r=!1,i=new Fz(ix((t.d?n.a.c==(b0(),fSt)?qgn(t.b):Xgn(t.b):n.a.c==(b0(),hSt)?qgn(t.b):Xgn(t.b)).a.Kc(),new h));hDn(i);)if(e=uG(N9(i),18),(oM(n.a.f[n.a.g[t.b.p].p])||v9(e)||e.c.i.c!=e.d.i.c)&&!oM(n.a.n[n.a.g[t.b.p].p])&&!oM(n.a.n[n.a.g[t.b.p].p])&&(r=!0,cS(n.b,n.a.g[vTn(e,t.b).p])))return t.c=!0,t.a=e,t;return t.c=r,t.a=null,t}function dGn(n,t,e){var i,r,c,a,o,u,s;if(0==(i=e.gc()))return!1;if(n.Pj())if(u=n.Qj(),nmn(n,t,e),a=1==i?n.Ij(3,null,e.Kc().Pb(),t,u):n.Ij(5,null,e,t,u),n.Mj()){for(o=i<100?null:new cj(i),c=t+i,r=t;r0){for(o=0;o>16==-15&&n.Cb.Yh()&&Cen(new btn(n.Cb,9,13,e,n.c,Hyn(Aen(uG(n.Cb,62)),n))):F$(n.Cb,90)&&n.Db>>16==-23&&n.Cb.Yh()&&(F$(t=n.c,90)||(YYn(),t=x_t),F$(e,90)||(YYn(),e=x_t),Cen(new btn(n.Cb,9,10,e,t,Hyn(z5(uG(n.Cb,29)),n)))))),n.c}function TGn(n,t,e){var i,r,c,a,o,u,s,h;for(e.Ug("Hyperedge merging",1),CDn(n,t),o=new N4(t.b,0);o.b0,o=hpn(t,c),Px(e?o.b:o.g,t),1==Ebn(o).c.length&&s8(i,o,i.c.b,i.c),r=new WO(c,t),A6(n.o,r),men(n.e.a,c))}function OGn(n,t){var i,r,c,a;return r=e.Math.abs(AV(n.b).a-AV(t.b).a),a=e.Math.abs(AV(n.b).b-AV(t.b).b),i=1,c=1,r>n.b.b/2+t.b.b/2&&(i=1-e.Math.min(e.Math.abs(n.b.c-(t.b.c+t.b.b)),e.Math.abs(n.b.c+n.b.b-t.b.c))/r),a>n.b.a/2+t.b.a/2&&(c=1-e.Math.min(e.Math.abs(n.b.d-(t.b.d+t.b.a)),e.Math.abs(n.b.d+n.b.a-t.b.d))/a),(1-e.Math.min(i,c))*e.Math.sqrt(r*r+a*a)}function AGn(n){var t,e,i;for(wQn(n,n.e,n.f,(l0(),USt),!0,n.c,n.i),wQn(n,n.e,n.f,USt,!1,n.c,n.i),wQn(n,n.e,n.f,GSt,!0,n.c,n.i),wQn(n,n.e,n.f,GSt,!1,n.c,n.i),yGn(n,n.c,n.e,n.f,n.i),e=new N4(n.i,0);e.b=65;e--)dHt[e]=e-65<<24>>24;for(i=122;i>=97;i--)dHt[i]=i-97+26<<24>>24;for(r=57;r>=48;r--)dHt[r]=r-48+52<<24>>24;for(dHt[43]=62,dHt[47]=63,c=0;c<=25;c++)gHt[c]=65+c&D1n;for(a=26,u=0;a<=51;++a,u++)gHt[a]=97+u&D1n;for(n=52,o=0;n<=61;++n,o++)gHt[n]=48+o&D1n;gHt[62]=43,gHt[63]=47}function $Gn(n,t){var i,r,c,a,o,u;return(c=nun(n))==(u=nun(t))?n.e==t.e&&n.a<54&&t.a<54?n.ft.f?1:0:(r=n.e-t.e,(i=(n.d>0?n.d:e.Math.floor((n.a-1)*A0n)+1)-(t.d>0?t.d:e.Math.floor((t.a-1)*A0n)+1))>r+1?c:i0&&(o=j5(o,_qn(r))),Pvn(a,o))):cs&&(l=0,b+=u+t,u=0),tHn(a,l,b),i=e.Math.max(i,l+h.a),u=e.Math.max(u,h.b),l+=h.a+t;return new MO(i+t,b+u+t)}function RGn(n,t){var e,i,r,c,a,o,u;if(!h0(n))throw hv(new kM(Stt));if(c=(i=h0(n)).g,r=i.f,c<=0&&r<=0)return KQn(),FRt;switch(o=n.i,u=n.j,t.g){case 2:case 1:if(o<0)return KQn(),_Rt;if(o+n.g>c)return KQn(),kRt;break;case 4:case 3:if(u<0)return KQn(),yRt;if(u+n.f>r)return KQn(),KRt}return(a=(o+n.g/2)/c)+(e=(u+n.f/2)/r)<=1&&a-e<=0?(KQn(),_Rt):a+e>=1&&a-e>=0?(KQn(),kRt):e<.5?(KQn(),yRt):(KQn(),KRt)}function KGn(n,t,e,i,r){var c,a;if(c=Lgn(E3(t[0],L0n),E3(i[0],L0n)),n[0]=pz(c),c=$z(c,32),e>=r){for(a=1;a0&&(r.b[a++]=0,r.b[a++]=c.b[0]-1),t=1;t0&&(Qb(u,u.d-r.d),r.c==(_7(),$St)&&Vb(u,u.a-r.d),u.d<=0&&u.i>0&&s8(t,u,t.c.b,t.c));for(c=new Ww(n.f);c.a0&&(Jb(o,o.i-r.d),r.c==(_7(),$St)&&Wb(o,o.b-r.d),o.i<=0&&o.d>0&&s8(e,o,e.c.b,e.c))}function GGn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b;for(hZ(),f$(n,new Bu),a=oG(n),b=new Zm,l=new Zm,o=null,u=0;0!=a.b;)c=uG(0==a.b?null:(MK(0!=a.b),Lrn(a,a.a.a)),163),!o||EX(o)*jX(o)/21&&(u>EX(o)*jX(o)/2||0==a.b)&&(f=new Jrn(l),h=EX(o)/jX(o),s=KJn(f,t,new Dk,e,i,r,h),JF(dL(f.e),s),o=f,mv(b.c,f),u=0,l.c.length=0));return Ohn(b,l),b}function qGn(n,t,e,i,r){var c,a,o,u,s,h,f;if(bS(),aW(n,"src"),aW(e,"dest"),f=Tbn(n),u=Tbn(e),yG(!!(4&f.i),"srcType is not an array"),yG(!!(4&u.i),"destType is not an array"),h=f.c,a=u.c,yG(1&h.i?h==a:!(1&a.i),"Array types don't match"),$fn(n,t,e,i,r),1&h.i||f==u)b$n(n,t,e,i,r,!0);else if(s=Kcn(n),c=Kcn(e),xA(n)===xA(e)&&ti;)uQ(c,o,s[--t]);else for(o=i+r;i0),i.a.Xb(i.c=--i.b),h>f+o&&LQ(i);for(c=new Ww(l);c.a0),i.a.Xb(i.c=--i.b)}}function VGn(){var n,t,e,i,r,c;if(QYn(),WHt)return WHt;for(TXn(n=new K3(4),kJn(iat,!0)),lWn(n,kJn("M",!0)),lWn(n,kJn("C",!0)),c=new K3(4),i=0;i<11;i++)HFn(c,i,i);return TXn(t=new K3(4),kJn("M",!0)),HFn(t,4448,4607),HFn(t,65438,65439),vzn(r=new QN(2),n),vzn(r,OHt),(e=new QN(2)).Jm(CX(c,kJn("L",!0))),e.Jm(t),e=new n8(3,e),e=new eW(r,e),WHt=e}function WGn(n,t){var e,i,r,c,a,o,u,s;for(e=new RegExp(t,"g"),u=Inn($ot,zZn,2,0,6,1),i=0,s=n,c=null;;){if(null==(o=e.exec(s))||""==s){u[i]=s;break}a=o.index,u[i]=(Knn(0,a,s.length),s.substr(0,a)),s=r1(s,a+o[0].length,s.length),e.lastIndex=0,c==s&&(u[i]=(Knn(0,1,s.length),s.substr(0,1)),s3(1,s.length+1),s=s.substr(1)),c=s,++i}if(n.length>0){for(r=u.length;r>0&&""==u[r-1];)--r;r0&&(l-=r[0]+n.c,r[0]+=n.c),r[2]>0&&(l-=r[2]+n.c),r[1]=e.Math.max(r[1],l),qX(n.a[1],i.c+t.b+r[0]-(r[1]-l)/2,r[1]);for(u=0,h=(a=n.a).length;u0?(n.n.c.length-1)*n.i:0,i=new Ww(n.n);i.a1)for(i=Fkn(r,0);i.b!=i.d.c;)for(c=0,o=new Ww((e=uG(I6(i),235)).e);o.a0&&(t[0]+=n.c,l-=t[0]),t[2]>0&&(l-=t[2]+n.c),t[1]=e.Math.max(t[1],l),XX(n.a[1],r.d+i.d+t[0]-(t[1]-l)/2,t[1]);else for(w=r.d+i.d,b=r.a-i.d-i.a,s=0,f=(o=n.a).length;s0||0==Fgn(c.b.d,n.b.d+n.b.a)&&r.b<0||0==Fgn(c.b.d+c.b.a,n.b.d)&&r.b>0){u=0;break}}else u=e.Math.min(u,LLn(n,c,r));u=e.Math.min(u,uqn(n,a,u,r))}return u}function sqn(n,t){var e,i,r,c,a,o;if(n.b<2)throw hv(new vM("The vector chain must contain at least a source and a target point."));for(MK(0!=n.b),MN(t,(i=uG(n.a.a.c,8)).a,i.b),o=new Zx((!t.a&&(t.a=new MD(eFt,t,5)),t.a)),c=Fkn(n,1);c.a=0&&c!=e)throw hv(new vM(Xet));for(r=0,u=0;uuM(oD(a.g,a.d[0]).a)?(MK(u.b>0),u.a.Xb(u.c=--u.b),pF(u,a),r=!0):o.e&&o.e.gc()>0&&(c=(!o.e&&(o.e=new Zm),o.e).Mc(t),s=(!o.e&&(o.e=new Zm),o.e).Mc(e),(c||s)&&((!o.e&&(o.e=new Zm),o.e).Fc(a),++a.c));r||mv(i.c,a)}function bqn(n,t,e){var i,r,c,a,o,u,s,h,f,l;return h=n.a.i+n.a.g/2,f=n.a.i+n.a.g/2,a=new MO(t.i+t.g/2,t.j+t.f/2),(u=uG(zDn(t,(XYn(),mDt)),8)).a=u.a+h,u.b=u.b+f,r=(a.b-u.b)/(a.a-u.a),i=a.b-r*a.a,o=new MO(e.i+e.g/2,e.j+e.f/2),(s=uG(zDn(e,mDt),8)).a=s.a+h,s.b=s.b+f,c=(o.b-s.b)/(o.a-s.a),l=(i-(o.b-c*o.a))/(c-r),!(u.a>>0).toString(16),t.length-2,t.length):n>=P0n?"\\v"+r1(t="0"+(n>>>0).toString(16),t.length-6,t.length):""+String.fromCharCode(n&D1n)}return e}function Tqn(n){var t,e,i;if(sN(uG(oIn(n,(jYn(),JMt)),101)))for(e=new Ww(n.j);e.a=t.o&&e.f<=t.f||.5*t.a<=e.f&&1.5*t.a>=e.f){if((c=uG(zq(t.n,t.n.c.length-1),209)).e+c.d+e.g+r<=i&&(uG(zq(t.n,t.n.c.length-1),209).f-n.f+e.f<=n.b||1==n.a.c.length))return ipn(t,e),!0;if(t.s+e.g<=i&&(t.t+t.d+e.f+r<=n.b||1==n.a.c.length))return kD(t.b,e),a=uG(zq(t.n,t.n.c.length-1),209),kD(t.n,new c0(t.s,a.f+a.a+t.i,t.i)),zMn(uG(zq(t.n,t.n.c.length-1),209),e),nqn(t,e),!0}return!1}function Pqn(n,t,e){var i,r,c,a;return n.Pj()?(r=null,c=n.Qj(),i=n.Ij(1,a=iin(n,t,e),e,t,c),n.Mj()&&!(n.Yi()&&null!=a?udn(a,e):xA(a)===xA(e))?(null!=a&&(r=n.Oj(a,r)),r=n.Nj(e,r),n.Tj()&&(r=n.Wj(a,e,r)),r?(r.nj(i),r.oj()):n.Jj(i)):(n.Tj()&&(r=n.Wj(a,e,r)),r?(r.nj(i),r.oj()):n.Jj(i)),a):(a=iin(n,t,e),n.Mj()&&!(n.Yi()&&null!=a?udn(a,e):xA(a)===xA(e))&&(r=null,null!=a&&(r=n.Oj(a,null)),(r=n.Nj(e,r))&&r.oj()),a)}function Cqn(n,t){var e,i,r,c;if(t.Ug("Path-Like Graph Wrapping",1),0!=n.b.c.length)if(null==(r=new dDn(n)).i&&(r.i=aun(r,new pc)),e=uM(r.i)*r.f/(null==r.i&&(r.i=aun(r,new pc)),uM(r.i)),r.b>e)t.Vg();else{switch(uG(oIn(n,(jYn(),BTt)),351).g){case 2:c=new kc;break;case 0:c=new hc;break;default:c=new yc}if(i=c.og(n,r),!c.pg())switch(uG(oIn(n,zTt),352).g){case 2:i=KLn(r,i);break;case 1:i=pPn(r,i)}kzn(n,r,i),t.Vg()}else t.Vg()}function Iqn(n,t){var i,r,c,a,o,u,s;t%=24,n.q.getHours()!=t&&((i=new e.Date(n.q.getTime())).setDate(i.getDate()+1),(o=n.q.getTimezoneOffset()-i.getTimezoneOffset())>0&&(u=o/60|0,s=o%60,r=n.q.getDate(),n.q.getHours()+u>=24&&++r,c=new e.Date(n.q.getFullYear(),n.q.getMonth(),r,t+u,n.q.getMinutes()+s,n.q.getSeconds(),n.q.getMilliseconds()),n.q.setTime(c.getTime()))),a=n.q.getTime(),n.q.setTime(a+36e5),n.q.getHours()!=t&&n.q.setTime(a)}function Oqn(n,t){var e,i,r,c;if(a3(n.d,n.e),n.c.a.$b(),0!=uM(pK(oIn(t.j,(jYn(),yyt))))||0!=uM(pK(oIn(t.j,yyt))))for(e=B3n,xA(oIn(t.j,Syt))!==xA((yvn(),Fjt))&&kfn(t.j,(GYn(),Bpt),(qx(),!0)),c=uG(oIn(t.j,OTt),17).a,r=0;r(u3(c+1,t.c.length),uG(t.c[c+1],17)).a-i&&++o,kD(r,(u3(c+o,t.c.length),uG(t.c[c+o],17))),a+=(u3(c+o,t.c.length),uG(t.c[c+o],17)).a-i,++e;e=g&&n.e[s.p]>w*n.b||v>=i*g)&&(mv(l.c,u),u=new Zm,Qon(o,a),a.a.$b(),h-=f,b=e.Math.max(b,h*n.b+d),h+=v,m=v,v=0,f=0,d=0);return new WO(b,l)}function $qn(n){var t,e,i,r,c;if(!n.d){if(c=new js,null==(t=V_t).a.zc(n,t)){for(e=new DD(n1(n));e.e!=e.i.gc();)CW(c,$qn(uG(Zkn(e),29)));t.a.Bc(n),t.a.gc()}for(r=c.i,!n.q&&(n.q=new fV(p_t,n,11,10)),i=new DD(n.q);i.e!=i.i.gc();++r)uG(Zkn(i),411);CW(c,(!n.q&&(n.q=new fV(p_t,n,11,10)),n.q)),lbn(c),n.d=new vL((uG(zrn(gZ((tQ(),M_t).o),9),19),c.i),c.g),n.e=uG(c.g,688),null==n.e&&(n.e=W_t),y9(n).b&=-17}return n.d}function Dqn(n,t,e,i){var r,c,a,o,u,s;if(s=VKn(n.e.Dh(),t),u=0,r=uG(n.g,124),PP(),uG(t,69).xk()){for(a=0;a1||-1==w)if(f=uG(d,71),l=uG(h,71),f.dc())l.$b();else for(a=!!lMn(t),c=0,o=n.a?f.Kc():f.Ii();o.Ob();)s=uG(o.Pb(),58),(r=uG(ain(n,s),58))?(a?-1==(u=l.dd(r))?l.Gi(c,r):c!=u&&l.Ui(c,r):l.Gi(c,r),++c):n.b&&!a&&(l.Gi(c,s),++c);else null==d?h.Wb(null):null==(r=ain(n,d))?n.b&&!lMn(t)&&h.Wb(d):h.Wb(r)}function Rqn(n,t){var i,r,c,a,o,u,s,f;for(i=new Ne,c=new Fz(ix(qgn(t).a.Kc(),new h));hDn(c);)if(!v9(r=uG(N9(c),18))&&_Pn(u=r.c.i,$bt)){if(-1==(f=U_n(n,u,$bt,Nbt)))continue;i.b=e.Math.max(i.b,f),!i.a&&(i.a=new Zm),kD(i.a,u)}for(o=new Fz(ix(Xgn(t).a.Kc(),new h));hDn(o);)if(!v9(a=uG(N9(o),18))&&_Pn(s=a.d.i,Nbt)){if(-1==(f=U_n(n,s,Nbt,$bt)))continue;i.d=e.Math.max(i.d,f),!i.c&&(i.c=new Zm),kD(i.c,s)}return i}function Kqn(n,t,e,i){var r,c,a,o,u,s,h;if(e.d.i!=t.i){for(Hb(r=new gMn(n),(zIn(),wbt)),kfn(r,(GYn(),rmt),e),kfn(r,(jYn(),JMt),($Pn(),cRt)),mv(i.c,r),o2(a=new lOn,r),NLn(a,(KQn(),_Rt)),o2(o=new lOn,r),NLn(o,kRt),h=e.d,u2(e,a),zsn(c=new UZ,e),kfn(c,bMt,null),c2(c,o),u2(c,h),s=new N4(e.b,0);s.b1e6)throw hv(new wM("power of ten too big"));if(n<=vZn)return D9(t$n(Got[1],t),t);for(r=i=t$n(Got[1],vZn),e=Bsn(n-vZn),t=t0(n%vZn);dwn(e,vZn)>0;)r=j5(r,i),e=$gn(e,vZn);for(r=D9(r=j5(r,t$n(Got[1],t)),vZn),e=Bsn(n-vZn);dwn(e,vZn)>0;)r=D9(r,vZn),e=$gn(e,vZn);return r=D9(r,t)}function Bqn(n){var t,e,i,r,c,a,o,u;for(a=new Ww(n.a);a.as&&i>s)){r=!1,e._g()&&e.bh("bk node placement breaks on "+o+" which should have been after "+h);break}h=o,s=uM(t.p[o.p])+uM(t.d[o.p])+o.o.b+o.d.a}if(!r)break}return e._g()&&e.bh(t+" is feasible: "+r),r}function Xqn(n,t,e,i){var r,c,a,o,u,s,h;if(Hb(c=new gMn(n),(zIn(),gbt)),kfn(c,(jYn(),JMt),($Pn(),cRt)),r=0,t){for(kfn(a=new lOn,(GYn(),rmt),t),kfn(c,rmt,t.i),NLn(a,(KQn(),_Rt)),o2(a,c),s=0,h=(u=x4(t.e)).length;s0)){if(r=-1,32==VJ(h.c,0)){if(f=s[0],win(t,s),s[0]>f)continue}else if(WZ(t,h.c,s[0])){s[0]+=h.c.length;continue}return 0}if(r<0&&h.a&&(r=u,c=s[0],i=0),r>=0){if(o=h.b,u==r&&0==(o-=i++))return 0;if(!rJn(t,s,h,o,a)){u=r-1,s[0]=c;continue}}else if(r=-1,!rJn(t,s,h,0,a))return 0}return LQn(a,e)?s[0]:0}function Qqn(n,t,e){var i,r,c,a,o,u,s,h,f,l;for(h=new Kz(new Fd(e)),zV(o=Inn(ZHt,B2n,28,n.f.e.c.length,16,1),o.length),e[t.a]=0,s=new Ww(n.f.e);s.a=0&&!eTn(n,h,f);)--f;r[h]=f}for(b=0;b=0&&!eTn(n,o,w);)--o;c[w]=o}for(u=0;ut[l]&&li[u]&&HBn(n,u,l,!1,!0)}function Yqn(n){var t,e,i,r,c,a,o,u;e=oM(gK(oIn(n,(rGn(),yft)))),c=n.a.c.d,o=n.a.d.d,e?(a=vD(YF(new MO(o.a,o.b),c),.5),u=vD(D$(n.e),.5),t=YF(JF(new MO(c.a,c.b),a),u),_R(n.d,t)):(r=uM(pK(oIn(n.a,Fft))),i=n.d,c.a>=o.a?c.b>=o.b?(i.a=o.a+(c.a-o.a)/2+r,i.b=o.b+(c.b-o.b)/2-r-n.e.b):(i.a=o.a+(c.a-o.a)/2+r,i.b=c.b+(o.b-c.b)/2+r):c.b>=o.b?(i.a=c.a+(o.a-c.a)/2+r,i.b=o.b+(c.b-o.b)/2+r):(i.a=c.a+(o.a-c.a)/2+r,i.b=c.b+(o.b-c.b)/2-r-n.e.b))}function Zqn(n){var t,e,i,r,c,a;if(!n.f){if(a=new Ms,c=new Ms,null==(t=V_t).a.zc(n,t)){for(r=new DD(n1(n));r.e!=r.i.gc();)CW(a,Zqn(uG(Zkn(r),29)));t.a.Bc(n),t.a.gc()}for(!n.s&&(n.s=new fV(o_t,n,21,17)),i=new DD(n.s);i.e!=i.i.gc();)F$(e=uG(Zkn(i),179),102)&&ttn(c,uG(e,19));lbn(c),n.r=new JG(n,(uG(zrn(gZ((tQ(),M_t).o),6),19),c.i),c.g),CW(a,n.r),lbn(a),n.f=new vL((uG(zrn(gZ(M_t.o),5),19),a.i),a.g),y9(n).b&=-3}return n.f}function nXn(n){hP(n,new hCn(FT(DT(KT(RT(new bu,$3n),"ELK DisCo"),"Layouter for arranging unconnected subgraphs. The subgraphs themselves are, by default, not laid out."),new ct))),U4(n,$3n,D3n,Jkn(ift)),U4(n,$3n,x3n,Jkn(Jht)),U4(n,$3n,R3n,Jkn(Xht)),U4(n,$3n,K3n,Jkn(Yht)),U4(n,$3n,D2n,Jkn(tft)),U4(n,$3n,x2n,Jkn(nft)),U4(n,$3n,$2n,Jkn(eft)),U4(n,$3n,R2n,Jkn(Zht)),U4(n,$3n,I3n,Jkn(Vht)),U4(n,$3n,O3n,Jkn(zht)),U4(n,$3n,A3n,Jkn(Wht)),U4(n,$3n,L3n,Jkn(Qht))}function tXn(){tXn=E,JKt=Uhn(cT(JHt,1),N1n,28,15,[48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70]),YKt=new RegExp("[ \t\n\r\f]+");try{QKt=Uhn(cT(iBt,1),EZn,2114,0,[new Km((wL(),Cmn("yyyy-MM-dd'T'HH:mm:ss'.'SSSZ",bF((qy(),qy(),Hat))))),new Km(Cmn("yyyy-MM-dd'T'HH:mm:ss'.'SSS",bF(Hat))),new Km(Cmn("yyyy-MM-dd'T'HH:mm:ss",bF(Hat))),new Km(Cmn("yyyy-MM-dd'T'HH:mm",bF(Hat))),new Km(Cmn("yyyy-MM-dd",bF(Hat)))])}catch(n){if(!F$(n=Ehn(n),82))throw hv(n)}}function eXn(n,t){var e,i,r;if(i=0!=uRn(n.d,1),0==rHn(n,t)&&oM(gK(oIn(t.j,(GYn(),Bpt)))))return 0;!oM(gK(oIn(t.j,(GYn(),Bpt))))&&!oM(gK(oIn(t.j,mmt)))||xA(oIn(t.j,(jYn(),Syt)))===xA((yvn(),Fjt))?t.c.mg(t.e,i):i=oM(gK(oIn(t.j,Bpt))),PKn(n,t,i,!0),oM(gK(oIn(t.j,mmt)))&&kfn(t.j,mmt,(qx(),!1)),oM(gK(oIn(t.j,Bpt)))&&(kfn(t.j,Bpt,(qx(),!1)),kfn(t.j,mmt,!0)),e=rHn(n,t);do{if(Gon(n),0==e)return 0;r=e,PKn(n,t,i=!i,!1),e=rHn(n,t)}while(r>e);return r}function iXn(n,t){var e,i,r;if(i=0!=uRn(n.d,1),0==BAn(n,t)&&oM(gK(oIn(t.j,(GYn(),Bpt)))))return 0;!oM(gK(oIn(t.j,(GYn(),Bpt))))&&!oM(gK(oIn(t.j,mmt)))||xA(oIn(t.j,(jYn(),Syt)))===xA((yvn(),Fjt))?t.c.mg(t.e,i):i=oM(gK(oIn(t.j,Bpt))),PKn(n,t,i,!0),oM(gK(oIn(t.j,mmt)))&&kfn(t.j,mmt,(qx(),!1)),oM(gK(oIn(t.j,Bpt)))&&(kfn(t.j,Bpt,(qx(),!1)),kfn(t.j,mmt,!0)),e=BAn(n,t);do{if(Gon(n),0==e)return 0;r=e,PKn(n,t,i=!i,!1),e=BAn(n,t)}while(r>e);return r}function rXn(n,t,i,r){var c,a,o,u,s,h,f,l,b;return h=(s=YF(new MO(i.a,i.b),n)).a*t.b-s.b*t.a,f=t.a*r.b-t.b*r.a,l=(s.a*r.b-s.b*r.a)/f,b=h/f,0==f?0==h?(a=atn(n,c=JF(new MO(i.a,i.b),vD(new MO(r.a,r.b),.5))),o=atn(JF(new MO(n.a,n.b),t),c),u=.5*e.Math.sqrt(r.a*r.a+r.b*r.b),a=0&&l<=1&&b>=0&&b<=1?JF(new MO(n.a,n.b),vD(new MO(t.a,t.b),l)):null}function cXn(n,t,e){var i,r,c,a,o;if(i=uG(oIn(n,(jYn(),Pyt)),21),e.a>t.a&&(i.Hc((ZSn(),VNt))?n.c.a+=(e.a-t.a)/2:i.Hc(QNt)&&(n.c.a+=e.a-t.a)),e.b>t.b&&(i.Hc((ZSn(),YNt))?n.c.b+=(e.b-t.b)/2:i.Hc(JNt)&&(n.c.b+=e.b-t.b)),uG(oIn(n,(GYn(),Hpt)),21).Hc((r_n(),tpt))&&(e.a>t.a||e.b>t.b))for(o=new Ww(n.a);o.at.a&&(i.Hc((ZSn(),VNt))?n.c.a+=(e.a-t.a)/2:i.Hc(QNt)&&(n.c.a+=e.a-t.a)),e.b>t.b&&(i.Hc((ZSn(),YNt))?n.c.b+=(e.b-t.b)/2:i.Hc(JNt)&&(n.c.b+=e.b-t.b)),uG(oIn(n,(GYn(),Hpt)),21).Hc((r_n(),tpt))&&(e.a>t.a||e.b>t.b))for(a=new Ww(n.a);a.a0?n.i:0)>t&&s>0&&(a=0,o+=s+n.i,c=e.Math.max(c,b),r+=s+n.i,s=0,b=0,i&&(++l,kD(n.n,new c0(n.s,o,n.i))),u=0),b+=h.g+(u>0?n.i:0),s=e.Math.max(s,h.f),i&&zMn(uG(zq(n.n,l),209),h),a+=h.g+(u>0?n.i:0),++u;return c=e.Math.max(c,b),r+=s,i&&(n.r=c,n.d=r,ijn(n.j)),new gY(n.s,n.t,c,r)}function sXn(n){var t,i,r,c,a,o,u,s,h,f,l;for(n.b=!1,f=M0n,u=T0n,l=M0n,s=T0n,i=n.e.a.ec().Kc();i.Ob();)for(r=(t=uG(i.Pb(),272)).a,f=e.Math.min(f,r.c),u=e.Math.max(u,r.c+r.b),l=e.Math.min(l,r.d),s=e.Math.max(s,r.d+r.a),a=new Ww(t.c);a.an.o.a&&(f=(s-n.o.a)/2,u.b=e.Math.max(u.b,f),u.c=e.Math.max(u.c,f))}}function wXn(n){var t,e,i,r,c,a;for(YL(r=new r4,(Whn(),YLt)),i=new Jw(new IM(new JE(n,Yon(n,Inn($ot,zZn,2,0,6,1))).b));i.bo?1:-1:Hln(n.a,t.a,c)))f=-u,h=a==u?t7(t.a,o,n.a,c):Cnn(t.a,o,n.a,c);else if(f=a,a==u){if(0==r)return cHn(),_ot;h=t7(n.a,c,t.a,o)}else h=Cnn(n.a,c,t.a,o);return K4(s=new VV(f,h.length,h)),s}function vXn(n,t){var e,i,r;if(r=PGn(t),!t.c&&(t.c=new fV(wFt,t,9,9)),kS(new fX(null,(!t.c&&(t.c=new fV(wFt,t,9,9)),new h3(t.c,16))),new Jd(r)),CWn(t,i=uG(oIn(r,(GYn(),Hpt)),21)),i.Hc((r_n(),tpt)))for(e=new DD((!t.c&&(t.c=new fV(wFt,t,9,9)),t.c));e.e!=e.i.gc();)pQn(n,t,r,uG(Zkn(e),123));return 0!=uG(zDn(t,(jYn(),DMt)),181).gc()&&u_n(t,r),oM(gK(oIn(r,HMt)))&&i.Fc(apt),vR(r,fTt)&&iM(new omn(uM(pK(oIn(r,fTt)))),r),xA(zDn(t,rMt))===xA((Own(),Ixt))?UYn(n,t,r):dYn(n,t,r),r}function kXn(n){var t,e,i,r,c,a,o;for(i=new Ww(n.b);i.a0?r1(e.a,0,c-1):"":(Knn(0,c-1,n.length),n.substr(0,c-1)):e?e.a:n}function MXn(n,t){var e,i,r,c,a,o,u;for(t.Ug("Sort By Input Model "+oIn(n,(jYn(),Syt)),1),r=0,i=new Ww(n.b);i.a=n.b.length?(c[r++]=a.b[i++],c[r++]=a.b[i++]):i>=a.b.length?(c[r++]=n.b[e++],c[r++]=n.b[e++]):a.b[i]0?n.i:0)),++t;for(dgn(n.n,s),n.d=i,n.r=r,n.g=0,n.f=0,n.e=0,n.o=M0n,n.p=M0n,a=new Ww(n.b);a.a0&&(!(r=(!n.n&&(n.n=new fV(lFt,n,1,7)),uG(zrn(n.n,0),135)).a)||JA(JA((t.a+=' "',t),r),'"'))),!n.b&&(n.b=new f_(cFt,n,4,7)),e=!(n.b.i<=1&&(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c.i<=1)),t.a+=e?" [":" ",JA(t,KD(new FM,new DD(n.b))),e&&(t.a+="]"),t.a+=Y4n,e&&(t.a+="["),JA(t,KD(new FM,new DD(n.c))),e&&(t.a+="]"),t.a)}function PXn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E;for(k=n.c,y=t.c,e=Ten(k.a,n,0),i=Ten(y.a,t,0),m=uG(jmn(n,(can(),Vjt)).Kc().Pb(),12),j=uG(jmn(n,Wjt).Kc().Pb(),12),v=uG(jmn(t,Vjt).Kc().Pb(),12),E=uG(jmn(t,Wjt).Kc().Pb(),12),g=x4(m.e),M=x4(j.g),p=x4(v.e),T=x4(E.g),$jn(n,i,y),s=0,b=(c=p).length;sh?new A2((_7(),DSt),i,t,s-h):s>0&&h>0&&(new A2((_7(),DSt),t,i,0),new A2(DSt,i,t,0))),a)}function AXn(n,t,e){var i,r,c;for(n.a=new Zm,c=Fkn(t.b,0);c.b!=c.d.c;){for(r=uG(I6(c),40);uG(oIn(r,(QGn(),ACt)),17).a>n.a.c.length-1;)kD(n.a,new WO(B3n,G9n));i=uG(oIn(r,ACt),17).a,e==(xdn(),JDt)||e==YDt?(r.e.auM(pK(uG(zq(n.a,i),42).b))&&sw(uG(zq(n.a,i),42),r.e.a+r.f.a)):(r.e.buM(pK(uG(zq(n.a,i),42).b))&&sw(uG(zq(n.a,i),42),r.e.b+r.f.b))}}function LXn(n,t,e,i){var r,c,a,o,u,s;if(c=pgn(i),!oM(gK(oIn(i,(jYn(),jMt))))&&!oM(gK(oIn(n,uMt)))||sN(uG(oIn(n,JMt),101)))switch(o2(o=new lOn,n),t?((s=o.n).a=t.a-n.n.a,s.b=t.b-n.n.b,DOn(s,0,0,n.o.a,n.o.b),NLn(o,ZUn(o,c))):(r=Ipn(c),NLn(o,e==(can(),Wjt)?r:Gdn(r))),a=uG(oIn(i,(GYn(),Hpt)),21),u=o.j,c.g){case 2:case 1:(u==(KQn(),yRt)||u==KRt)&&a.Fc((r_n(),cpt));break;case 4:case 3:(u==(KQn(),kRt)||u==_Rt)&&a.Fc((r_n(),cpt))}else r=Ipn(c),o=XUn(n,e,e==(can(),Wjt)?r:Gdn(r));return o}function NXn(n,t){var i,r,c,a,o;for(o=new bsn(new Nw(n.f.b).a);o.b;){if(c=uG((a=von(o)).ld(),602),1==t){if(c.Af()!=(xdn(),nxt)&&c.Af()!=QDt)continue}else if(c.Af()!=(xdn(),JDt)&&c.Af()!=YDt)continue;switch(r=uG(uG(a.md(),42).b,86),i=uG(uG(a.md(),42).a,194).c,c.Af().g){case 2:r.g.c=n.e.a,r.g.b=e.Math.max(1,r.g.b+i);break;case 1:r.g.c=r.g.c+i,r.g.b=e.Math.max(1,r.g.b-i);break;case 4:r.g.d=n.e.b,r.g.a=e.Math.max(1,r.g.a+i);break;case 3:r.g.d=r.g.d+i,r.g.a=e.Math.max(1,r.g.a-i)}}}function $Xn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(u=Inn(YHt,W1n,28,t.b.c.length,15,1),h=Inn(vbt,p1n,273,t.b.c.length,0,1),s=Inn(pbt,e6n,10,t.b.c.length,0,1),b=0,w=(l=n.a).length;b0&&s[r]&&(d=y$(n.b,s[r],c)),g=e.Math.max(g,c.c.c.b+d);for(a=new Ww(f.e);a.a1)throw hv(new vM(dct));u||(c=R5(t,i.Kc().Pb()),a.Fc(c))}return bfn(n,sAn(n,t,e),a)}function BXn(n,t,e){var i,r,c,a,o,u,s;if(EFn(n.e,t))PP(),C$n((o=uG(t,69).xk()?new Cq(t,n):new OA(t,n)).c,o.b),K$(o,uG(e,16));else{for(s=VKn(n.e.Dh(),t),i=uG(n.g,124),c=0;c"}null!=u&&(t.a+=""+u)}else n.e?null!=(o=n.e.zb)&&(t.a+=""+o):(t.a+="?",n.b?(t.a+=" super ",qXn(n.b,t)):n.f&&(t.a+=" extends ",qXn(n.f,t)))}function XXn(n){n.b=null,n.a=null,n.o=null,n.q=null,n.v=null,n.w=null,n.B=null,n.p=null,n.Q=null,n.R=null,n.S=null,n.T=null,n.U=null,n.V=null,n.W=null,n.bb=null,n.eb=null,n.ab=null,n.H=null,n.db=null,n.c=null,n.d=null,n.f=null,n.n=null,n.r=null,n.s=null,n.u=null,n.G=null,n.J=null,n.e=null,n.j=null,n.i=null,n.g=null,n.k=null,n.t=null,n.F=null,n.I=null,n.L=null,n.M=null,n.O=null,n.P=null,n.$=null,n.N=null,n.Z=null,n.cb=null,n.K=null,n.D=null,n.A=null,n.C=null,n._=null,n.fb=null,n.X=null,n.Y=null,n.gb=!1,n.hb=!1}function zXn(n){var t,i,r,c;if(r=bYn((!n.c&&(n.c=j2(Bsn(n.f))),n.c),0),0==n.e||0==n.a&&-1!=n.f&&n.e<0)return r;if(t=nun(n)<0?1:0,i=n.e,r.length,e.Math.abs(t0(n.e)),c=new QM,1==t&&(c.a+="-"),n.e>0)if((i-=r.length-t)>=0){for(c.a+="0.";i>Pot.length;i-=Pot.length)Xq(c,Pot);lF(c,Pot,t0(i)),JA(c,(s3(t,r.length+1),r.substr(t)))}else JA(c,r1(r,t,t0(i=t-i))),c.a+=".",JA(c,sQ(r,t0(i)));else{for(JA(c,(s3(t,r.length+1),r.substr(t)));i<-Pot.length;i+=Pot.length)Xq(c,Pot);lF(c,Pot,t0(-i))}return c.a}function VXn(n){var t,e,i,r,c;if(n.k!=(zIn(),dbt))return!1;if(n.j.c.length<=1)return!1;if(uG(oIn(n,(jYn(),JMt)),101)==($Pn(),cRt))return!1;if(Yyn(),(i=(n.q?n.q:(hZ(),hZ(),Vot))._b(LMt)?uG(oIn(n,LMt),203):uG(oIn(HQ(n),NMt),203))==djt)return!1;if(i!=wjt&&i!=bjt){if(r=uM(pK(Omn(n,ITt))),!(t=uG(oIn(n,CTt),140))&&(t=new OF(r,r,r,r)),c=Dgn(n,(KQn(),_Rt)),t.d+t.a+(c.gc()-1)*r>n.o.b)return!1;if(e=Dgn(n,kRt),t.d+t.a+(e.gc()-1)*r>n.o.b)return!1}return!0}function WXn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d;t.Ug("Orthogonal edge routing",1),s=uM(pK(oIn(n,(jYn(),STt)))),e=uM(pK(oIn(n,gTt))),i=uM(pK(oIn(n,vTt))),l=new NW(0,e),d=0,a=new N4(n.b,0),o=null,h=null,u=null,f=null;do{f=(h=a.b0?(b=(w-1)*e,o&&(b+=i),h&&(b+=i),bt||oM(gK(zDn(o,(S_n(),nAt)))))&&(r=0,c+=s.b+e,mv(h.c,s),fan(s=new e4(c,e),i=new dln(0,s.f,s,e)),r=0),0==i.b.c.length||!oM(gK(zDn(R0(o),(S_n(),uAt))))&&(o.f>=i.o&&o.f<=i.f||.5*i.a<=o.f&&1.5*i.a>=o.f)?ipn(i,o):(fan(s,a=new dln(i.s+i.r+e,s.f,s,e)),ipn(a,o)),r=o.i+o.g;return mv(h.c,s),h}function uzn(n){var t,e,i,r;if(!(null==n.b||n.b.length<=2||n.a)){for(t=0,r=0;r=n.b[r+1])r+=2;else{if(!(e0)for(i=new Z_(uG(Y9(n.a,c),21)),hZ(),f$(i,new Gd(t)),r=new N4(c.b,0);r.b0&&i>=-6?i>=0?Ex(c,e-t0(n.e),String.fromCharCode(46)):(psn(c,t-1,t-1,"0."),Ex(c,t+1,mvn(Pot,0,-t0(i)-1))):(e-t>=1&&(Ex(c,t,String.fromCharCode(46)),++e),Ex(c,e,String.fromCharCode(69)),i>0&&Ex(c,++e,String.fromCharCode(43)),Ex(c,++e,""+oV(Bsn(i)))),n.g=c.a,n.g))}function dzn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;r=uM(pK(oIn(t,(jYn(),AMt)))),l=4,c=3,M=20/(y=uG(oIn(t,OTt),17).a),b=!1,s=0,o=vZn;do{for(a=1!=s,f=0!=s,T=0,m=0,k=(g=n.a).length;my)?(s=2,o=vZn):0==s?(s=1,o=T):(s=0,o=T):(b=T>=o||o-T0?1:KL(isNaN(r),isNaN(0)))>=0^(oan(I9n),(e.Math.abs(u)<=I9n||0==u||isNaN(u)&&isNaN(0)?0:u<0?-1:u>0?1:KL(isNaN(u),isNaN(0)))>=0)?e.Math.max(u,r):(oan(I9n),(e.Math.abs(r)<=I9n||0==r||isNaN(r)&&isNaN(0)?0:r<0?-1:r>0?1:KL(isNaN(r),isNaN(0)))>0?e.Math.sqrt(u*u+r*r):-e.Math.sqrt(u*u+r*r))}function vzn(n,t){var e,i,r,c,a;if(t)if(!n.a&&(n.a=new ck),2!=n.e)if(1!=t.e)0!=(a=n.a.a.c.length)?0!=(c=uG(DQ(n.a,a-1),122)).e&&10!=c.e||0!=t.e&&10!=t.e?zv(n.a,t):(0==t.e||t.Mm().length,0==c.e?(e=new VM,(i=c.Km())>=P0n?VA(e,Ogn(i)):TQ(e,i&D1n),c=new F1(10,null,0),GV(n.a,c,a-1)):(c.Mm().length,VA(e=new VM,c.Mm())),0==t.e?(i=t.Km())>=P0n?VA(e,Ogn(i)):TQ(e,i&D1n):VA(e,t.Mm()),uG(c,530).b=e.a):zv(n.a,t);else for(r=0;r1&&(u=s.Hg(u,n.a,o));return 1==u.c.length?uG(zq(u,u.c.length-1),238):2==u.c.length?tzn((u3(0,u.c.length),uG(u.c[0],238)),(u3(1,u.c.length),uG(u.c[1],238)),a,c):null}function Ezn(n,t,e){var i,r,c,a,o,u,s;for(e.Ug("Find roots",1),n.a.c.length=0,r=Fkn(t.b,0);r.b!=r.d.c;)0==(i=uG(I6(r),40)).b.b&&(kfn(i,(OQn(),UPt),(qx(),!0)),kD(n.a,i));switch(n.a.c.length){case 0:kfn(c=new wln(0,t,"DUMMY_ROOT"),(OQn(),UPt),(qx(),!0)),kfn(c,jPt,!0),aq(t.b,c);break;case 1:break;default:for(a=new wln(0,t,H9n),u=new Ww(n.a);u.a=e.Math.abs(r.b)?(r.b=0,a.d+a.a>o.d&&a.do.c&&a.c0){if(t=new AA(n.i,n.g),c=(e=n.i)<100?null:new cj(e),n.Tj())for(i=0;i0){for(o=n.g,s=n.i,V9(n),c=s<100?null:new cj(s),i=0;i>13|(15&n.m)<<9,r=n.m>>4&8191,c=n.m>>17|(255&n.h)<<5,a=(1048320&n.h)>>8,g=i*(o=8191&t.l),p=r*o,m=c*o,v=a*o,0!=(u=t.l>>13|(15&t.m)<<9)&&(g+=e*u,p+=i*u,m+=r*u,v+=c*u),0!=(s=t.m>>4&8191)&&(p+=e*s,m+=i*s,v+=r*s),0!=(h=t.m>>17|(255&t.h)<<5)&&(m+=e*h,v+=i*h),0!=(f=(1048320&t.h)>>8)&&(v+=e*f),b=((d=e*o)>>22)+(g>>9)+((262143&p)<<4)+((31&m)<<17),w=(p>>18)+(m>>5)+((4095&v)<<8),w+=(b+=(l=(d&f0n)+((511&g)<<13))>>22)>>22,p$(l&=f0n,b&=f0n,w&=l0n)}function Azn(n){var t,i,r,c,a,o,u;if(0!=(u=uG(zq(n.j,0),12)).g.c.length&&0!=u.e.c.length)throw hv(new kM("Interactive layout does not support NORTH/SOUTH ports with incoming _and_ outgoing edges."));if(0!=u.g.c.length){for(a=M0n,i=new Ww(u.g);i.a4){if(!n.fk(t))return!1;if(n.al()){if(o=(e=(i=uG(t,54)).Eh())==n.e&&(n.ml()?i.yh(i.Fh(),n.il())==n.jl():-1-i.Fh()==n.Lj()),n.nl()&&!o&&!e&&i.Jh())for(r=0;r0&&nAn(n,o,h);for(r=new Ww(h);r.an.d[r.p]&&(e+=J8(n.b,i)*uG(a.b,17).a,A6(n.a,xwn(i)));for(;!LM(n.a);)lin(n.b,uG(xV(n.a),17).a)}return e}function Dzn(n,t){var e,i,r,c,a,o,u,s,h,f;if(h=uG(oIn(n,(GYn(),Fpt)),64),i=uG(zq(n.j,0),12),h==(KQn(),yRt)?NLn(i,KRt):h==KRt&&NLn(i,yRt),uG(oIn(t,(jYn(),DMt)),181).Hc((Qmn(),JRt))){if(u=uM(pK(oIn(n,TTt))),s=uM(pK(oIn(n,jTt))),a=uM(pK(oIn(n,yTt))),(o=uG(oIn(t,nTt),21)).Hc((eNn(),wRt)))for(e=s,f=n.o.a/2-i.n.a,c=new Ww(i.f);c.a0&&(s=n.n.a/c);break;case 2:case 4:(r=n.i.o.b)>0&&(s=n.n.b/r)}kfn(n,(GYn(),bmt),s)}if(u=n.o,a=n.a,i)a.a=i.a,a.b=i.b,n.d=!0;else if(t!=uRt&&t!=sRt&&o!=FRt)switch(o.g){case 1:a.a=u.a/2;break;case 2:a.a=u.a,a.b=u.b/2;break;case 3:a.a=u.a/2,a.b=u.b;break;case 4:a.b=u.b/2}else a.a=u.a/2,a.b=u.b/2}function _zn(n){var t,e,i,r,c,a,o,u,s,h;if(n.Pj())if(h=n.Ej(),u=n.Qj(),h>0)if(t=new Hun(n.pj()),c=(e=h)<100?null:new cj(e),QK(n,e,t.g),r=1==e?n.Ij(4,zrn(t,0),null,0,u):n.Ij(6,t,null,-1,u),n.Mj()){for(i=new DD(t);i.e!=i.i.gc();)c=n.Oj(Zkn(i),c);c?(c.nj(r),c.oj()):n.Jj(r)}else c?(c.nj(r),c.oj()):n.Jj(r);else QK(n,n.Ej(),n.Fj()),n.Jj(n.Ij(6,(hZ(),zot),null,-1,u));else if(n.Mj())if((h=n.Ej())>0){for(o=n.Fj(),s=h,QK(n,h,o),c=s<100?null:new cj(s),i=0;i1&&EX(a)*jX(a)/2>o[0]){for(c=0;co[c];)++c;f=new Jrn(new C2(b,0,c+1)),h=EX(a)/jX(a),u=KJn(f,t,new Dk,e,i,r,h),JF(dL(f.e),u),kG(_Cn(l,f),D0n),_jn(l,new C2(b,c+1,b.c.length)),b.c.length=0,s=0,zX(o,o.length,0)}else null!=(0==l.b.c.length?null:zq(l.b,0))&&Con(l,0),s>0&&(o[s]=o[s-1]),o[s]+=EX(a)*jX(a),++s,mv(b.c,a);return b}function Hzn(n,t){var e,i,r,c;c=new Z_((e=t.b).j),r=0,(i=e.j).c.length=0,mW(uG(ssn(n.b,(KQn(),yRt),(gon(),Sdt)),15),e),r=cMn(c,r,new Br,i),mW(uG(ssn(n.b,yRt,Edt),15),e),r=cMn(c,r,new $r,i),mW(uG(ssn(n.b,yRt,jdt),15),e),mW(uG(ssn(n.b,kRt,Sdt),15),e),mW(uG(ssn(n.b,kRt,Edt),15),e),r=cMn(c,r,new Hr,i),mW(uG(ssn(n.b,kRt,jdt),15),e),mW(uG(ssn(n.b,KRt,Sdt),15),e),r=cMn(c,r,new Ur,i),mW(uG(ssn(n.b,KRt,Edt),15),e),r=cMn(c,r,new Gr,i),mW(uG(ssn(n.b,KRt,jdt),15),e),mW(uG(ssn(n.b,_Rt,Sdt),15),e),r=cMn(c,r,new Rr,i),mW(uG(ssn(n.b,_Rt,Edt),15),e),mW(uG(ssn(n.b,_Rt,jdt),15),e)}function Uzn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;for(o=new Ww(t);o.a.5?p-=2*a*(w-.5):w<.5&&(p+=2*c*(.5-w)),p<(r=o.d.b)&&(p=r),d=o.d.c,p>g.a-d-h&&(p=g.a-d-h),o.n.a=t+p}}function Wzn(n){var t,e,i;if((e=uG(oIn(n,(jYn(),gMt)),171))==(Gpn(),Imt)){for(t=new Fz(ix(qgn(n).a.Kc(),new h));hDn(t);)if(!F9(uG(N9(t),18)))throw hv(new jM(y6n+ZTn(n)+"' has its layer constraint set to FIRST_SEPARATE, but has at least one incoming edge. FIRST_SEPARATE nodes must not have incoming edges."))}else if(e==Amt)for(i=new Fz(ix(Xgn(n).a.Kc(),new h));hDn(i);)if(!F9(uG(N9(i),18)))throw hv(new jM(y6n+ZTn(n)+"' has its layer constraint set to LAST_SEPARATE, but has at least one outgoing edge. LAST_SEPARATE nodes must not have outgoing edges."))}function Qzn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w;if(n.e&&n.c.c>19&&(t=gfn(t),u=!u),a=kRn(t),c=!1,r=!1,i=!1,n.h==b0n&&0==n.m&&0==n.l){if(r=!0,c=!0,-1!=a)return o=gDn(n,a),u&&Yfn(o),e&&(Qat=p$(0,0,0)),o;n=LL((tin(),Jat)),i=!0,u=!u}else n.h>>19&&(c=!0,n=gfn(n),i=!0,u=!u);return-1!=a?nln(n,a,u,c,e):yEn(n,t)<0?(e&&(Qat=c?gfn(n):p$(n.l,n.m,n.h)),p$(0,0,0)):gUn(i?n:p$(n.l,n.m,n.h),t,u,c,r,e)}function Zzn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w;if(a=n.e,u=t.e,0==a)return t;if(0==u)return n;if((c=n.d)+(o=t.d)==2)return e=E3(n.a[0],L0n),i=E3(t.a[0],L0n),a==u?(w=pz(h=Lgn(e,i)),0==(b=pz(Dz(h,32)))?new Z5(a,w):new VV(a,2,Uhn(cT(YHt,1),W1n,28,15,[w,b]))):(cHn(),BA(a<0?$gn(i,e):$gn(e,i),0)?Rmn(a<0?$gn(i,e):$gn(e,i)):hW(Rmn(Men(a<0?$gn(i,e):$gn(e,i)))));if(a==u)l=a,f=c>=o?Cnn(n.a,c,t.a,o):Cnn(t.a,o,n.a,c);else{if(0==(r=c!=o?c>o?1:-1:Hln(n.a,t.a,c)))return cHn(),_ot;1==r?(l=a,f=t7(n.a,c,t.a,o)):(l=u,f=t7(t.a,o,n.a,c))}return K4(s=new VV(l,f.length,f)),s}function nVn(n,t){var e,i,r,c,a,o,u;if(!(n.g>t.f||t.g>n.f)){for(e=0,i=0,a=n.w.a.ec().Kc();a.Ob();)r=uG(a.Pb(),12),Wbn(Gfn(Uhn(cT(PNt,1),zZn,8,0,[r.i.n,r.n,r.a])).b,t.g,t.f)&&++e;for(o=n.r.a.ec().Kc();o.Ob();)r=uG(o.Pb(),12),Wbn(Gfn(Uhn(cT(PNt,1),zZn,8,0,[r.i.n,r.n,r.a])).b,t.g,t.f)&&--e;for(u=t.w.a.ec().Kc();u.Ob();)r=uG(u.Pb(),12),Wbn(Gfn(Uhn(cT(PNt,1),zZn,8,0,[r.i.n,r.n,r.a])).b,n.g,n.f)&&++i;for(c=t.r.a.ec().Kc();c.Ob();)r=uG(c.Pb(),12),Wbn(Gfn(Uhn(cT(PNt,1),zZn,8,0,[r.i.n,r.n,r.a])).b,n.g,n.f)&&--i;e=0)return e;switch(sJ(Nen(n,e))){case 2:if(m_("",tdn(n,e.qk()).xe())){if(u=hxn(n,t,o=HJ(Nen(n,e)),BJ(Nen(n,e))))return u;for(a=0,s=(r=AHn(n,t)).gc();a1)throw hv(new vM(dct));for(h=VKn(n.e.Dh(),t),i=uG(n.g,124),a=0;a1,h=new w7(b.b);l$(h.a)||l$(h.b);)l=(s=uG(l$(h.a)?N3(h.a):N3(h.b),18)).c==b?s.d:s.c,e.Math.abs(Gfn(Uhn(cT(PNt,1),zZn,8,0,[l.i.n,l.n,l.a])).b-o.b)>1&&sFn(n,s,o,a,b)}}function oVn(n){var t,i,r,c,a,o;if(c=new N4(n.e,0),r=new N4(n.a,0),n.d)for(i=0;i$9n;){for(a=t,o=0;e.Math.abs(t-a)<$9n;)++o,t=uM((MK(c.b0),c.a.Xb(c.c=--c.b),zGn(n,n.b-o,a,r,c),MK(c.b0),r.a.Xb(r.c=--r.b)}if(!n.d)for(i=0;i0?(n.f[s.p]=l/(s.e.c.length+s.g.c.length),n.c=e.Math.min(n.c,n.f[s.p]),n.b=e.Math.max(n.b,n.f[s.p])):o&&(n.f[s.p]=l)}}function hVn(n){n.b=null,n.bb=null,n.fb=null,n.qb=null,n.a=null,n.c=null,n.d=null,n.e=null,n.f=null,n.n=null,n.M=null,n.L=null,n.Q=null,n.R=null,n.K=null,n.db=null,n.eb=null,n.g=null,n.i=null,n.j=null,n.k=null,n.gb=null,n.o=null,n.p=null,n.q=null,n.r=null,n.$=null,n.ib=null,n.S=null,n.T=null,n.t=null,n.s=null,n.u=null,n.v=null,n.w=null,n.B=null,n.A=null,n.C=null,n.D=null,n.F=null,n.G=null,n.H=null,n.I=null,n.J=null,n.P=null,n.Z=null,n.U=null,n.V=null,n.W=null,n.X=null,n.Y=null,n._=null,n.ab=null,n.cb=null,n.hb=null,n.nb=null,n.lb=null,n.mb=null,n.ob=null,n.pb=null,n.jb=null,n.kb=null,n.N=!1,n.O=!1}function fVn(n,t,e){var i,r;for(e.Ug("Graph transformation ("+n.a+")",1),r=T3(t.a),i=new Ww(t.b);i.a=o.b.c)&&(o.b=t),(!o.c||t.c<=o.c.c)&&(o.d=o.c,o.c=t),(!o.e||t.d>=o.e.d)&&(o.e=t),(!o.f||t.d<=o.f.d)&&(o.f=t);return i=new cyn((Xhn(),Flt)),O4(n,Vlt,new IM(Uhn(cT(Klt,1),EZn,382,0,[i]))),a=new cyn(Hlt),O4(n,zlt,new IM(Uhn(cT(Klt,1),EZn,382,0,[a]))),r=new cyn(_lt),O4(n,Xlt,new IM(Uhn(cT(Klt,1),EZn,382,0,[r]))),c=new cyn(Blt),O4(n,qlt,new IM(Uhn(cT(Klt,1),EZn,382,0,[c]))),jRn(i.c,Flt),jRn(r.c,_lt),jRn(c.c,Blt),jRn(a.c,Hlt),o.a.c.length=0,Ohn(o.a,i.c),Ohn(o.a,Spn(r.c)),Ohn(o.a,c.c),Ohn(o.a,Spn(a.c)),o}function wVn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d;for(t.Ug(snt,1),w=uM(pK(zDn(n,(lBn(),POt)))),o=uM(pK(zDn(n,(S_n(),bAt)))),u=uG(zDn(n,hAt),107),Non((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a)),f=ozn((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a),w,o),!n.a&&(n.a=new fV(bFt,n,10,11)),h=new Ww(f);h.a0&&(n.a=o+(l-1)*r,t.c.b+=n.a,t.f.b+=n.a),0!=b.a.gc()&&(l=YVn(new NW(1,r),t,b,w,t.f.b+o-t.c.b))>0&&(t.f.b+=o+(l-1)*r)}function gVn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;for(f=uM(pK(oIn(n,(jYn(),mTt)))),r=uM(pK(oIn(n,RTt))),kfn(b=new Qu,mTt,f+r),m=(h=t).d,g=h.c.i,v=h.d.i,p=GL(g.c),k=GL(v.c),c=new Zm,l=p;l<=k;l++)Hb(u=new gMn(n),(zIn(),wbt)),kfn(u,(GYn(),rmt),h),kfn(u,JMt,($Pn(),cRt)),kfn(u,kTt,b),w=uG(zq(n.b,l),30),l==p?$jn(u,w.a.c.length-i,w):a2(u,w),(y=uM(pK(oIn(h,tMt))))<0&&kfn(h,tMt,y=0),u.o.b=y,d=e.Math.floor(y/2),NLn(o=new lOn,(KQn(),_Rt)),o2(o,u),o.n.b=d,NLn(s=new lOn,kRt),o2(s,u),s.n.b=d,u2(h,o),zsn(a=new UZ,h),kfn(a,bMt,null),c2(a,s),u2(a,m),IEn(u,h,a),mv(c.c,a),h=a;return c}function pVn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(o=uG(yOn(n,(KQn(),_Rt)).Kc().Pb(),12).e,f=uG(yOn(n,kRt).Kc().Pb(),12).g,a=o.c.length,g=n3(uG(zq(n.j,0),12));a-- >0;){for(u3(0,o.c.length),b=uG(o.c[0],18),u3(0,f.c.length),r=Ten((i=uG(f.c[0],18)).d.e,i,0),w6(b,i.d,r),c2(i,null),u2(i,null),l=b.a,t&&aq(l,new eN(g)),e=Fkn(i.a,0);e.b!=e.d.c;)aq(l,new eN(uG(I6(e),8)));for(d=b.b,h=new Ww(i.b);h.aa)&&FV(n.b,uG(g.b,18));++o}c=a}}}function vVn(n,t){var e;if(null==t||m_(t,IZn))return null;if(0==t.length&&n.k!=(lAn(),pNt))return null;switch(n.k.g){case 1:return Bvn(t,Fnt)?(qx(),eot):Bvn(t,_nt)?(qx(),tot):null;case 2:try{return xwn(mUn(t,j1n,vZn))}catch(i){if(F$(i=Ehn(i),130))return null;throw hv(i)}case 4:try{return YIn(t)}catch(i){if(F$(i=Ehn(i),130))return null;throw hv(i)}case 3:return t;case 5:return wbn(n),NNn(n,t);case 6:return wbn(n),Lxn(n,n.a,t);case 7:try{return(e=Q$n(n)).cg(t),e}catch(i){if(F$(i=Ehn(i),33))return null;throw hv(i)}default:throw hv(new kM("Invalid type set for this layout option."))}}function kVn(n){var t;switch(n.d){case 1:if(n.Sj())return-2!=n.o;break;case 2:if(n.Sj())return-2==n.o;break;case 3:case 5:case 4:case 6:case 7:return n.o>-2;default:return!1}switch(t=n.Rj(),n.p){case 0:return null!=t&&oM(gK(t))!=HA(n.k,0);case 1:return null!=t&&uG(t,222).a!=pz(n.k)<<24>>24;case 2:return null!=t&&uG(t,180).a!=(pz(n.k)&D1n);case 6:return null!=t&&HA(uG(t,168).a,n.k);case 5:return null!=t&&uG(t,17).a!=pz(n.k);case 7:return null!=t&&uG(t,191).a!=pz(n.k)<<16>>16;case 3:return null!=t&&uM(pK(t))!=n.j;case 4:return null!=t&&uG(t,161).a!=n.j;default:return null==t?null!=n.n:!udn(t,n.n)}}function yVn(n,t,e){var i,r,c,a;return n.ol()&&n.nl()&&xA(a=CV(n,uG(e,58)))!==xA(e)?(n.xj(t),n.Dj(t,Atn(n,t,a)),n.al()&&(r=uG(e,54),c=n.ml()?n.kl()?r.Th(n.b,lMn(uG(ern(e1(n.b),n.Lj()),19)).n,uG(ern(e1(n.b),n.Lj()).Hk(),29).kk(),null):r.Th(n.b,emn(r.Dh(),lMn(uG(ern(e1(n.b),n.Lj()),19))),null,null):r.Th(n.b,-1-n.Lj(),null,null),!uG(a,54).Ph()&&(i=uG(a,54),c=n.ml()?n.kl()?i.Rh(n.b,lMn(uG(ern(e1(n.b),n.Lj()),19)).n,uG(ern(e1(n.b),n.Lj()).Hk(),29).kk(),c):i.Rh(n.b,emn(i.Dh(),lMn(uG(ern(e1(n.b),n.Lj()),19))),null,c):i.Rh(n.b,-1-n.Lj(),null,c)),c&&c.oj()),uN(n.b)&&n.Jj(n.Ij(9,e,a,t,!1)),a):e}function MVn(n){var t,e,i,r,c,a,o,u,s,h;for(i=new Zm,a=new Ww(n.e.a);a.a0&&(o=e.Math.max(o,run(n.C.b+r.d.b,c))),f=r,l=c,b=a;n.C&&n.C.c>0&&(w=b+n.C.c,h&&(w+=f.d.c),o=e.Math.max(o,(YN(),oan(Z2n),e.Math.abs(l-1)<=Z2n||1==l||isNaN(l)&&isNaN(1)?0:w/(1-l)))),i.n.b=0,i.a.a=o}function jVn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w;if(i=uG(AJ(n.b,t),127),(s=uG(uG(Y9(n.r,t),21),87)).dc())return i.n.d=0,void(i.n.a=0);for(h=n.u.Hc((eNn(),wRt)),o=0,n.A.Hc((Qmn(),JRt))&&kBn(n,t),u=s.Kc(),f=null,b=0,l=0;u.Ob();)a=uM(pK((r=uG(u.Pb(),117)).b.of((Gx(),bht)))),c=r.b.Mf().b,f?(w=l+f.d.a+n.w+r.d.d,o=e.Math.max(o,(YN(),oan(Z2n),e.Math.abs(b-a)<=Z2n||b==a||isNaN(b)&&isNaN(a)?0:w/(a-b)))):n.C&&n.C.d>0&&(o=e.Math.max(o,run(n.C.d+r.d.d,a))),f=r,b=a,l=c;n.C&&n.C.a>0&&(w=l+n.C.a,h&&(w+=f.d.a),o=e.Math.max(o,(YN(),oan(Z2n),e.Math.abs(b-1)<=Z2n||1==b||isNaN(b)&&isNaN(1)?0:w/(1-b)))),i.n.d=0,i.a.b=o}function EVn(n,t,e,i,r,c,a,o){var u,s,h,f,l,b,w,d;if(b=!1,u=cKn(e.q,t.f+t.b-e.q.f),l=i.f>t.b&&o,h=uXn(i,d=r-(e.q.e+u-a),!1).a,l&&h>i.f)return!1;if(l){for(f=0,w=new Ww(t.d);w.a=(u3(c,n.c.length),uG(n.c[c],186)).e,!(!l&&h>t.b&&!s)&&((s||l||h<=t.b)&&(s&&h>t.b?(e.d=h,dtn(e,EOn(e,h))):(USn(e.q,u),e.c=!0),dtn(i,r-(e.s+e.r)),oMn(i,e.q.e+e.q.d,t.f),fan(t,i),n.c.length>c&&(uEn((u3(c,n.c.length),uG(n.c[c],186)),i),0==(u3(c,n.c.length),uG(n.c[c],186)).a.c.length&&i7(n,c)),b=!0),b))}function SVn(n,t,e){var i,r,c,a,o,u;for(this.g=n,o=t.d.length,u=e.d.length,this.d=Inn(pbt,e6n,10,o+u,0,1),a=0;a0?Rrn(this,this.f/this.a):null!=oD(t.g,t.d[0]).a&&null!=oD(e.g,e.d[0]).a?Rrn(this,(uM(oD(t.g,t.d[0]).a)+uM(oD(e.g,e.d[0]).a))/2):null!=oD(t.g,t.d[0]).a?Rrn(this,oD(t.g,t.d[0]).a):null!=oD(e.g,e.d[0]).a&&Rrn(this,oD(e.g,e.d[0]).a)}function PVn(n,t){var e,i,r,c,a,o,u,s,h;for(n.a=new wQ(efn(axt)),i=new Ww(t.a);i.a=1&&(g-a>0&&f>=0?(u.n.a+=d,u.n.b+=c*a):g-a<0&&h>=0&&(u.n.a+=d*g,u.n.b+=c));n.o.a=t.a,n.o.b=t.b,kfn(n,(jYn(),DMt),(Qmn(),new nB(i=uG(Mj(sKt),9),uG(MF(i,i.length),9),0)))}function LVn(n,t,e,i,r,c){if(null!=t&&mpn(t,YFt,ZFt))throw hv(new vM("invalid scheme: "+t));if(!(n||null!=e&&-1==xL(e,$Cn(35))&&e.length>0&&(s3(0,e.length),47!=e.charCodeAt(0))))throw hv(new vM("invalid opaquePart: "+e));if(n&&(null==t||!ZE(UFt,t.toLowerCase()))&&null!=e&&mpn(e,n_t,t_t))throw hv(new vM(Vit+e));if(n&&null!=t&&ZE(UFt,t.toLowerCase())&&!bPn(e))throw hv(new vM(Vit+e));if(!Ppn(i))throw hv(new vM("invalid device: "+i));if(!Jbn(r))throw hv(new vM(null==r?"invalid segments: null":"invalid segment: "+Lbn(r)));if(null!=c&&-1!=xL(c,$Cn(35)))throw hv(new vM("invalid query: "+c))}function NVn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p;if(i.Ug("Network simplex layering",1),n.b=t,p=4*uG(oIn(t,(jYn(),OTt)),17).a,(g=n.b.a).c.length<1)i.Vg();else{for(d=null,c=Fkn(a=xHn(n,g),0);c.b!=c.d.c;){for(r=uG(I6(c),15),u=p*t0(e.Math.sqrt(r.gc())),JHn(kT(MT(yT(_B(o=wUn(r)),u),d),!0),i.eh(1)),l=n.b.b,w=new Ww(o.a);w.a1)for(d=Inn(YHt,W1n,28,n.b.b.c.length,15,1),f=0,h=new Ww(n.b.b);h.a0?(Ikn(n,e,0),e.a+=String.fromCharCode(i),Ikn(n,e,r=qvn(t,c)),c+=r-1):39==i?c+10&&w.a<=0){u.c.length=0,mv(u.c,w);break}(b=w.i-w.d)>=o&&(b>o&&(u.c.length=0,o=b),mv(u.c,w))}0!=u.c.length&&(a=uG(zq(u,iMn(r,u.c.length)),118),v.a.Bc(a),a.g=h++,UGn(a,t,e,i),u.c.length=0)}for(g=n.c.length+1,l=new Ww(n);l.aT0n||t.o==wSt&&s=o&&r<=u)o<=r&&c<=u?(e[h++]=r,e[h++]=c,i+=2):o<=r?(e[h++]=r,e[h++]=u,n.b[i]=u+1,a+=2):c<=u?(e[h++]=o,e[h++]=c,i+=2):(e[h++]=o,e[h++]=u,n.b[i]=u+1);else{if(!(uT1n)&&u<10);ET(n.c,new yt),_Vn(n),YV(n.c),lVn(n.f)}function XVn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(i=uG(oIn(n,(jYn(),JMt)),101),o=n.f,a=n.d,u=o.a+a.b+a.c,s=0-a.d-n.c.b,f=o.b+a.d+a.a-n.c.b,h=new Zm,l=new Zm,c=new Ww(t);c.a=2){for(a=uG(I6(u=Fkn(e,0)),8),o=uG(I6(u),8);o.a0&&hfn(u,!0,(xdn(),YDt)),a.k==(zIn(),lbt)&&XQ(u),vJ(n.f,a,t)):((s=(i=uG(pZ(Ggn(a)),18)).c.i)==a&&(s=i.d.i),f=new WO(s,YF(D$(a.n),s.n)),vJ(n.b,a,f))}function WVn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(i=uG(oIn(n,(OQn(),RPt)),27),u=vZn,s=vZn,a=j1n,o=j1n,m=Fkn(n.b,0);m.b!=m.d.c;)l=(g=uG(I6(m),40)).e,b=g.f,u=e.Math.min(u,l.a-b.a/2),s=e.Math.min(s,l.b-b.b/2),a=e.Math.max(a,l.a+b.a/2),o=e.Math.max(o,l.b+b.b/2);for(f=uG(zDn(i,(QGn(),pCt)),107),p=Fkn(n.b,0);p.b!=p.d.c;)F$(h=oIn(g=uG(I6(p),40),RPt),207)&&(kN(r=uG(h,27),g.e.a,g.e.b),aKn(r,g));for(d=Fkn(n.a,0);d.b!=d.d.c;)w=uG(I6(d),65),(t=uG(oIn(w,RPt),74))&&sqn(w.a,JFn(t,!0,!0));v=a-u+(f.b+f.c),c=o-s+(f.d+f.a),oM(gK(zDn(i,(XYn(),H$t))))||ZQn(i,v,c,!1,!1),Myn(i,h$t,v-(f.b+f.c)),Myn(i,s$t,c-(f.d+f.a))}function QVn(n,t){var e,i,r,c,a,o,u,s,f;for(o=!0,r=0,u=n.g[t.p],s=t.o.b+n.o,e=n.d[t.p][2],Y8(n.b,u,xwn(uG(zq(n.b,u),17).a-1+e)),Y8(n.c,u,uM(pK(zq(n.c,u)))-s+e*n.f),++u>=n.j?(++n.j,kD(n.b,xwn(1)),kD(n.c,s)):(i=n.d[t.p][1],Y8(n.b,u,xwn(uG(zq(n.b,u),17).a+1-i)),Y8(n.c,u,uM(pK(zq(n.c,u)))+s-i*n.f)),(n.r==(THn(),Ijt)&&(uG(zq(n.b,u),17).a>n.k||uG(zq(n.b,u-1),17).a>n.k)||n.r==Ljt&&(uM(pK(zq(n.c,u)))>n.n||uM(pK(zq(n.c,u-1)))>n.n))&&(o=!1),c=new Fz(ix(qgn(t).a.Kc(),new h));hDn(c);)a=uG(N9(c),18).c.i,n.g[a.p]==u&&(r+=uG((f=QVn(n,a)).a,17).a,o=o&&oM(gK(f.b)));return n.g[t.p]=u,new WO(xwn(r+=n.d[t.p][0]),(qx(),!!o))}function JVn(n,t){var e,i;uM(pK(oIn(t,(jYn(),dTt))))<2&&kfn(t,dTt,2),uG(oIn(t,Byt),88)==(xdn(),ZDt)&&kfn(t,Byt,pgn(t)),0==(e=uG(oIn(t,sTt),17)).a?kfn(t,(GYn(),dmt),new Upn):kfn(t,(GYn(),dmt),new v8(e.a)),null==gK(oIn(t,OMt))&&kfn(t,OMt,(qx(),xA(oIn(t,Vyt))===xA((_gn(),uxt)))),kS(new fX(null,new h3(t.a,16)),new Hd(n)),kS(sin(new fX(null,new h3(t.b,16)),new dt),new Ud(n)),i=new CVn(t),kfn(t,(GYn(),kmt),i),_J(n.a),JV(n.a,(uIn(),Tlt),uG(oIn(t,Fyt),188)),JV(n.a,jlt,uG(oIn(t,MMt),188)),JV(n.a,Elt,uG(oIn(t,Kyt),188)),JV(n.a,Slt,uG(oIn(t,$Mt),188)),JV(n.a,Plt,Rsn(uG(oIn(t,Vyt),223))),ZL(n.a,iYn(t)),kfn(t,wmt,Qzn(n.a,t))}function YVn(n,t,i,r,c){var a,o,u,s,h,f,l,b,w,d,g,p,m;for(l=new Ym,o=new Zm,HAn(n,i,n.d.Ag(),o,l),HAn(n,r,n.d.Bg(),o,l),n.b=.2*(g=DDn(sin(new fX(null,new h3(o,16)),new pa)),p=DDn(sin(new fX(null,new h3(o,16)),new ma)),e.Math.min(g,p)),a=0,u=0;u=2&&(m=sRn(o,!0,b),!n.e&&(n.e=new pp(n)),xvn(n.e,m,o,n.b)),BPn(o,b),oWn(o),w=-1,f=new Ww(o);f.ao)}function tWn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(h=M0n,f=M0n,u=T0n,s=T0n,b=new Ww(t.i);b.a-1){for(r=Fkn(o,0);r.b!=r.d.c;)(i=uG(I6(r),131)).v=a;for(;0!=o.b;)for(t=new Ww((i=uG(Kjn(o,0),131)).i);t.a-1){for(c=new Ww(o);c.a0||(Yb(u,e.Math.min(u.o,r.o-1)),Jb(u,u.i-1),0==u.i&&mv(o.c,u))}}function uWn(n,t,i,r,c){var a,o,u,s;return s=M0n,o=!1,a=!!(u=rXn(n,YF(new MO(t.a,t.b),n),JF(new MO(i.a,i.b),c),YF(new MO(r.a,r.b),i)))&&!(e.Math.abs(u.a-n.a)<=Hnt&&e.Math.abs(u.b-n.b)<=Hnt||e.Math.abs(u.a-t.a)<=Hnt&&e.Math.abs(u.b-t.b)<=Hnt),(u=rXn(n,YF(new MO(t.a,t.b),n),i,c))&&((e.Math.abs(u.a-n.a)<=Hnt&&e.Math.abs(u.b-n.b)<=Hnt)==(e.Math.abs(u.a-t.a)<=Hnt&&e.Math.abs(u.b-t.b)<=Hnt)||a?s=e.Math.min(s,NQ(YF(u,i))):o=!0),(u=rXn(n,YF(new MO(t.a,t.b),n),r,c))&&(o||(e.Math.abs(u.a-n.a)<=Hnt&&e.Math.abs(u.b-n.b)<=Hnt)==(e.Math.abs(u.a-t.a)<=Hnt&&e.Math.abs(u.b-t.b)<=Hnt)||a)&&(s=e.Math.min(s,NQ(YF(u,r)))),s}function sWn(n){hP(n,new hCn(xT(FT(DT(KT(RT(new bu,$4n),D4n),"Minimizes the stress within a layout using stress majorization. Stress exists if the euclidean distance between a pair of nodes doesn't match their graph theoretic distance, that is, the shortest path between the two nodes. The method allows to specify individual edge lengths."),new gt),c4n))),U4(n,$4n,f4n,Jkn(olt)),U4(n,$4n,b4n,(qx(),!0)),U4(n,$4n,p4n,Jkn(hlt)),U4(n,$4n,x4n,Jkn(flt)),U4(n,$4n,g4n,Jkn(llt)),U4(n,$4n,m4n,Jkn(slt)),U4(n,$4n,w4n,Jkn(blt)),U4(n,$4n,v4n,Jkn(wlt)),U4(n,$4n,I4n,Jkn(alt)),U4(n,$4n,A4n,Jkn(rlt)),U4(n,$4n,L4n,Jkn(clt)),U4(n,$4n,N4n,Jkn(ult)),U4(n,$4n,O4n,Jkn(ilt))}function hWn(n){var t,e,i,r,c,a,o,u;for(t=null,i=new Ww(n);i.a0&&0==e.c&&(!t&&(t=new Zm),mv(t.c,e));if(t)for(;0!=t.c.length;){if((e=uG(i7(t,0),239)).b&&e.b.c.length>0)for(!e.b&&(e.b=new Zm),c=new Ww(e.b);c.aTen(n,e,0))return new WO(r,e)}else if(uM(oD(r.g,r.d[0]).a)>uM(oD(e.g,e.d[0]).a))return new WO(r,e);for(o=(!e.e&&(e.e=new Zm),e.e).Kc();o.Ob();)!(a=uG(o.Pb(),239)).b&&(a.b=new Zm),o3(0,(u=a.b).c.length),pC(u.c,0,e),a.c==u.c.length&&mv(t.c,a)}return null}function fWn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(t.Ug("Interactive crossing minimization",1),a=0,c=new Ww(n.b);c.a0&&(e+=u.n.a+u.o.a/2,++f),b=new Ww(u.j);b.a0&&(e/=f),g=Inn(eUt,I0n,28,i.a.c.length,15,1),o=0,s=new Ww(i.a);s.a=o&&r<=u)o<=r&&c<=u?i+=2:o<=r?(n.b[i]=u+1,a+=2):c<=u?(e[h++]=r,e[h++]=o-1,i+=2):(e[h++]=r,e[h++]=o-1,n.b[i]=u+1,a+=2);else{if(!(u2?(Ohn(s=new Zm,new C2(w,1,w.b)),zsn(d=new pDn(vYn(s,g+n.a)),t),mv(i.c,d)):d=uG(cQ(n.b,r?bIn(t):gIn(t)),272),o=bIn(t),r&&(o=gIn(t)),a=GOn(b,o),u=g+n.a,a.a?(u+=e.Math.abs(b.b-h.b),l=new MO(h.a,(h.b+b.b)/2)):(u+=e.Math.abs(b.a-h.a),l=new MO((h.a+b.a)/2,h.b)),vJ(r?n.d:n.c,t,new bTn(d,a,l,u)),vJ(n.b,t,d),!t.n&&(t.n=new fV(lFt,t,1,7)),f=new DD(t.n);f.e!=f.i.gc();)c=nHn(n,uG(Zkn(f),135),!0,0,0),mv(i.c,c)}function wWn(n){var t,e,i,r,c,a,o;if(!n.A.dc()){if(n.A.Hc((Qmn(),QRt))&&(uG(AJ(n.b,(KQn(),yRt)),127).k=!0,uG(AJ(n.b,KRt),127).k=!0,t=n.q!=($Pn(),aRt)&&n.q!=cRt,Db(uG(AJ(n.b,kRt),127),t),Db(uG(AJ(n.b,_Rt),127),t),Db(n.g,t),n.A.Hc(JRt)&&(uG(AJ(n.b,yRt),127).j=!0,uG(AJ(n.b,KRt),127).j=!0,uG(AJ(n.b,kRt),127).k=!0,uG(AJ(n.b,_Rt),127).k=!0,n.g.k=!0)),n.A.Hc(WRt))for(n.a.j=!0,n.a.k=!0,n.g.j=!0,n.g.k=!0,o=n.B.Hc((aUn(),cKt)),c=0,a=(r=Nkn()).length;c0),c=uG(s.a.Xb(s.c=--s.b),18);c!=i&&s.b>0;)n.a[c.p]=!0,n.a[i.p]=!0,MK(s.b>0),c=uG(s.a.Xb(s.c=--s.b),18);s.b>0&&LQ(s)}}function pWn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;if(!n.b)return!1;for(a=null,l=null,r=1,(u=new _nn(null,null)).a[1]=n.b,f=u;f.a[r];)s=r,o=l,l=f,f=f.a[r],r=(i=n.a.Ne(t,f.d))<0?0:1,0==i&&(!e.c||OJ(f.e,e.d))&&(a=f),f&&f.b||NM(f.a[r])||(NM(f.a[1-r])?l=l.a[s]=Ton(f,r):NM(f.a[1-r])||(b=l.a[1-s])&&(NM(b.a[1-s])||NM(b.a[s])?(c=o.a[1]==l?1:0,NM(b.a[s])?o.a[c]=P4(l,s):NM(b.a[1-s])&&(o.a[c]=Ton(l,s)),f.b=o.a[c].b=!0,o.a[c].a[0].b=!1,o.a[c].a[1].b=!1):(l.b=!1,b.b=!0,f.b=!0)));return a&&(e.b=!0,e.d=a.e,f!=a&&(YCn(n,u,a,h=new _nn(f.d,f.e)),l==a&&(l=h)),l.a[l.a[1]==f?1:0]=f.a[f.a[0]?0:1],--n.c),n.b=u.a[1],n.b&&(n.b.b=!1),e.b}function mWn(n){var t,i,r,c,a,o,u,s,h,f,l,b;for(c=new Ww(n.a.a.b);c.a0?r-=864e5:r+=864e5,u=new DK(Lgn(Bsn(t.q.getTime()),r))),h=new QM,s=n.a.length,c=0;c=97&&i<=122||i>=65&&i<=90){for(a=c+1;a=s)throw hv(new vM("Missing trailing '"));a+1=14&&o<=16?F$(i,183)?o7(e,PLn(uG(i,183))):F$(i,195)?o7(e,xPn(uG(i,195))):F$(i,201)?o7(e,aOn(uG(i,201))):F$(i,2111)?o7(e,RPn(uG(i,2111))):F$(i,53)?o7(e,SLn(uG(i,53))):F$(i,376)?o7(e,aNn(uG(i,376))):F$(i,846)?o7(e,ELn(uG(i,846))):F$(i,109)&&o7(e,jLn(uG(i,109))):t.a._b(i)?(e.a?JA(e.a,e.b):e.a=new lx(e.d),WA(e.a,"[...]")):o7(e,MWn(Kcn(i),new oX(t))):o7(e,null==i?IZn:cpn(i));return e.a?0==e.e.length?e.a.a:e.a.a+""+e.e:e.c}function TWn(n,t){var e,i,r,c;c=n.F,null==t?(n.F=null,sbn(n,null)):(n.F=(tJ(t),t),-1!=(i=xL(t,$Cn(60)))?(Knn(0,i,t.length),r=t.substr(0,i),-1==xL(t,$Cn(46))&&!m_(r,dZn)&&!m_(r,lrt)&&!m_(r,brt)&&!m_(r,wrt)&&!m_(r,drt)&&!m_(r,grt)&&!m_(r,prt)&&!m_(r,mrt)&&(r=vrt),-1!=(e=ax(t,$Cn(62)))&&(r+=""+(s3(e+1,t.length+1),t.substr(e+1))),sbn(n,r)):(r=t,-1==xL(t,$Cn(46))&&(-1!=(i=xL(t,$Cn(91)))&&(Knn(0,i,t.length),r=t.substr(0,i)),m_(r,dZn)||m_(r,lrt)||m_(r,brt)||m_(r,wrt)||m_(r,drt)||m_(r,grt)||m_(r,prt)||m_(r,mrt)?r=t:(r=vrt,-1!=i&&(r+=""+(s3(i,t.length+1),t.substr(i))))),sbn(n,r),r==t&&(n.F=n.D))),4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,5,c,t))}function jWn(n,t){var e,i,r,c,a,o,u,s;if(s3(o=t.length-1,t.length),93==(a=t.charCodeAt(o))){if((c=xL(t,$Cn(91)))>=0)return r=fpn(n,(Knn(1,c,t.length),t.substr(1,c-1))),Knn(c+1,o,t.length),GJn(n,t.substr(c+1,o-(c+1)),r)}else{if(e=-1,null==oot&&(oot=new RegExp("\\d")),oot.test(String.fromCharCode(a))&&(e=T_(t,$Cn(46),o-1))>=0){i=uG(U9(n,jrn(n,(Knn(1,e,t.length),t.substr(1,e-1))),!1),61),u=0;try{u=mUn((s3(e+1,t.length+1),t.substr(e+1)),j1n,vZn)}catch(h){throw F$(h=Ehn(h),130)?hv(new Pen(h)):hv(h)}if(u>16==-10?e=uG(n.Cb,292).Yk(t,e):n.Db>>16==-15&&(!t&&(YYn(),t=N_t),!o&&(YYn(),o=N_t),n.Cb.Yh()&&(a=new Ken(n.Cb,1,13,o,t,Hyn(Aen(uG(n.Cb,62)),n),!1),e?e.nj(a):e=a));else if(F$(n.Cb,90))n.Db>>16==-23&&(F$(t,90)||(YYn(),t=x_t),F$(o,90)||(YYn(),o=x_t),n.Cb.Yh()&&(a=new Ken(n.Cb,1,10,o,t,Hyn(z5(uG(n.Cb,29)),n),!1),e?e.nj(a):e=a));else if(F$(n.Cb,457))for(!(c=uG(n.Cb,850)).b&&(c.b=new Um(new ty)),r=new Gm(new bsn(new Nw(c.b.a).a));r.a.b;)e=PWn(i=uG(von(r.a).ld(),89),bRn(i,c),e);return e}function CWn(n,t){var e,i,r,c,a,o,u,s,h,f,l;for(a=oM(gK(zDn(n,(jYn(),sMt)))),l=uG(zDn(n,nTt),21),u=!1,s=!1,f=new DD((!n.c&&(n.c=new fV(wFt,n,9,9)),n.c));!(f.e==f.i.gc()||u&&s);){for(c=uG(Zkn(f),123),o=0,r=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[(!c.d&&(c.d=new f_(aFt,c,8,5)),c.d),(!c.e&&(c.e=new f_(aFt,c,7,4)),c.e)])));hDn(r)&&(i=uG(N9(r),74),h=a&&BNn(i)&&oM(gK(zDn(i,hMt))),e=Lzn((!i.b&&(i.b=new f_(cFt,i,4,7)),i.b),c)?n==R0(lCn(uG(zrn((!i.c&&(i.c=new f_(cFt,i,5,8)),i.c),0),84))):n==R0(lCn(uG(zrn((!i.b&&(i.b=new f_(cFt,i,4,7)),i.b),0),84))),!((h||e)&&++o>1)););(o>0||l.Hc((eNn(),wRt))&&(!c.n&&(c.n=new fV(lFt,c,1,7)),c.n).i>0)&&(u=!0),o>1&&(s=!0)}u&&t.Fc((r_n(),tpt)),s&&t.Fc((r_n(),ept))}function IWn(n){var t,i,r,c,a,o,u,s,h,f,l,b;if((b=uG(zDn(n,(XYn(),_$t)),21)).dc())return null;if(u=0,o=0,b.Hc((Qmn(),QRt))){for(f=uG(zDn(n,sDt),101),r=2,i=2,c=2,a=2,t=R0(n)?uG(zDn(R0(n),d$t),88):uG(zDn(n,d$t),88),h=new DD((!n.c&&(n.c=new fV(wFt,n,9,9)),n.c));h.e!=h.i.gc();)if(s=uG(Zkn(h),123),(l=uG(zDn(s,gDt),64))==(KQn(),FRt)&&(l=RGn(s,t),Myn(s,gDt,l)),f==($Pn(),cRt))switch(l.g){case 1:r=e.Math.max(r,s.i+s.g);break;case 2:i=e.Math.max(i,s.j+s.f);break;case 3:c=e.Math.max(c,s.i+s.g);break;case 4:a=e.Math.max(a,s.j+s.f)}else switch(l.g){case 1:r+=s.g+2;break;case 2:i+=s.f+2;break;case 3:c+=s.g+2;break;case 4:a+=s.f+2}u=e.Math.max(r,c),o=e.Math.max(i,a)}return ZQn(n,u,o,!0,!0)}function OWn(n,t,i,r,c){var a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;for(v=uG(l8(krn(JJ(new fX(null,new h3(t.d,16)),new Rg(i)),new Kg(i)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),l=vZn,f=j1n,s=new Ww(t.b.j);s.a0)?s&&(h=d.p,a?++h:--h,f=!(VRn(i=afn(uG(zq(d.c.a,h),10)),k,e[0])||rV(i,k,e[0]))):f=!0),l=!1,(v=t.D.i)&&v.c&&o.e&&(a&&v.p>0||!a&&v.p=0){for(u=null,o=new N4(h.a,s+1);o.ba?1:KL(isNaN(0),isNaN(a)))<0&&(oan(I9n),(e.Math.abs(a-1)<=I9n||1==a||isNaN(a)&&isNaN(1)?0:a<1?-1:a>1?1:KL(isNaN(a),isNaN(1)))<0)&&(oan(I9n),(e.Math.abs(0-o)<=I9n||0==o||isNaN(0)&&isNaN(o)?0:0o?1:KL(isNaN(0),isNaN(o)))<0)&&(oan(I9n),(e.Math.abs(o-1)<=I9n||1==o||isNaN(o)&&isNaN(1)?0:o<1?-1:o>1?1:KL(isNaN(o),isNaN(1)))<0))}function KWn(n){var t,e,i,r;if(-1!=(t=xL(e=null!=n.D?n.D:n.B,$Cn(91)))){Knn(0,t,e.length),i=e.substr(0,t),r=new zM;do{r.a+="["}while(-1!=(t=aR(e,91,++t)));m_(i,dZn)?r.a+="Z":m_(i,lrt)?r.a+="B":m_(i,brt)?r.a+="C":m_(i,wrt)?r.a+="D":m_(i,drt)?r.a+="F":m_(i,grt)?r.a+="I":m_(i,prt)?r.a+="J":m_(i,mrt)?r.a+="S":(r.a+="L",r.a+=""+i,r.a+=";");try{return null}catch(c){if(!F$(c=Ehn(c),63))throw hv(c)}}else if(-1==xL(e,$Cn(46))){if(m_(e,dZn))return ZHt;if(m_(e,lrt))return tUt;if(m_(e,brt))return JHt;if(m_(e,wrt))return eUt;if(m_(e,drt))return iUt;if(m_(e,grt))return YHt;if(m_(e,prt))return nUt;if(m_(e,mrt))return rUt}return null}function FWn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k;for(n.e=t,o=qNn(t),v=new Zm,i=new Ww(o);i.a=0&&d=s.c.c.length?B5((zIn(),dbt),wbt):B5((zIn(),wbt),wbt),h*=2,c=i.a.g,i.a.g=e.Math.max(c,c+(h-c)),a=i.b.g,i.b.g=e.Math.max(a,a+(h-a)),r=t}else pNn(o),VXn((u3(0,o.c.length),uG(o.c[0],18)).d.i)||kD(n.o,o)}function UWn(n){var t,i,r,c;for(kS(JJ(new fX(null,new h3(n.a.b,16)),new kr),new yr),QSn(n),kS(JJ(new fX(null,new h3(n.a.b,16)),new Mr),new Tr),n.c==(_gn(),hxt)&&(kS(JJ(sin(new fX(null,new h3(new Lw(n.f),1)),new jr),new Er),new Og(n)),kS(JJ(YJ(sin(sin(new fX(null,new h3(n.d.b,16)),new Sr),new Pr),new Cr),new Ir),new Lg(n))),c=new MO(M0n,M0n),t=new MO(T0n,T0n),r=new Ww(n.a.b);r.a0&&(t.a+=TZn),XWn(uG(Zkn(a),167),t);for(t.a+=Y4n,o=new Zx((!i.c&&(i.c=new f_(cFt,i,5,8)),i.c));o.e!=o.i.gc();)o.e>0&&(t.a+=TZn),XWn(uG(Zkn(o),167),t);t.a+=")"}}}function zWn(n,t,i){var r,c,a,o,u,s,f,l;for(s=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));s.e!=s.i.gc();)for(c=new Fz(ix(eRn(u=uG(Zkn(s),27)).a.Kc(),new h));hDn(c);){if(!(r=uG(N9(c),74)).b&&(r.b=new f_(cFt,r,4,7)),!(r.b.i<=1&&(!r.c&&(r.c=new f_(cFt,r,5,8)),r.c.i<=1)))throw hv(new EM("Graph must not contain hyperedges."));if(!z$n(r)&&u!=lCn(uG(zrn((!r.c&&(r.c=new f_(cFt,r,5,8)),r.c),0),84)))for(zsn(f=new $F,r),kfn(f,(mon(),Wft),r),Kb(f,uG(DA(FX(i.f,u)),153)),Bb(f,uG(cQ(i,lCn(uG(zrn((!r.c&&(r.c=new f_(cFt,r,5,8)),r.c),0),84))),153)),kD(t.c,f),o=new DD((!r.n&&(r.n=new fV(lFt,r,1,7)),r.n));o.e!=o.i.gc();)zsn(l=new A5(f,(a=uG(Zkn(o),135)).a),a),kfn(l,Wft,a),l.e.a=e.Math.max(a.g,1),l.e.b=e.Math.max(a.f,1),Yqn(l),kD(t.d,l)}}function VWn(n,t,i){var r,c,a,o,u,s,h,f;switch(i.Ug("Node promotion heuristic",1),n.i=t,n.r=uG(oIn(t,(jYn(),yMt)),243),n.r!=(THn(),Pjt)&&n.r!=Cjt?RQn(n):n_n(n),f=uG(oIn(n.i,kMt),17).a,a=new hi,n.r.g){case 2:case 1:default:nzn(n,a);break;case 3:for(n.r=Djt,nzn(n,a),s=0,u=new Ww(n.b);u.an.k&&(n.r=Ijt,nzn(n,a));break;case 4:for(n.r=Djt,nzn(n,a),h=0,c=new Ww(n.c);c.an.n&&(n.r=Ljt,nzn(n,a));break;case 6:nzn(n,new mg(t0(e.Math.ceil(n.g.length*f/100))));break;case 5:nzn(n,new vg(t0(e.Math.ceil(n.e*f/100))));break;case 8:IYn(n,!0);break;case 9:IYn(n,!1)}n.r!=Pjt&&n.r!=Cjt?JKn(n,t):BBn(n,t),i.Vg()}function WWn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p;for(pF(u=new N4(s=n.b,0),new bQ(n)),g=!1,c=1;u.b0&&(b.d+=f.n.d,b.d+=f.d),b.a>0&&(b.a+=f.n.a,b.a+=f.d),b.b>0&&(b.b+=f.n.b,b.b+=f.d),b.c>0&&(b.c+=f.n.c,b.c+=f.d),b}function JWn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d;for(b=i.d,l=i.c,o=(a=new MO(i.f.a+i.d.b+i.d.c,i.f.b+i.d.d+i.d.a)).b,h=new Ww(n.a);h.a0&&(n.c[t.c.p][t.p].d+=uRn(n.i,24)*z0n*.07000000029802322-.03500000014901161,n.c[t.c.p][t.p].a=n.c[t.c.p][t.p].d/n.c[t.c.p][t.p].b)}}function tQn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w;for(l=new Ww(n);l.ar.d,r.d=e.Math.max(r.d,t),u&&i&&(r.d=e.Math.max(r.d,r.a),r.a=r.d+c);break;case 3:i=t>r.a,r.a=e.Math.max(r.a,t),u&&i&&(r.a=e.Math.max(r.a,r.d),r.d=r.a+c);break;case 2:i=t>r.c,r.c=e.Math.max(r.c,t),u&&i&&(r.c=e.Math.max(r.b,r.c),r.b=r.c+c);break;case 4:i=t>r.b,r.b=e.Math.max(r.b,t),u&&i&&(r.b=e.Math.max(r.b,r.c),r.c=r.b+c)}}}function rQn(n,t){var e,i,r,c,a,o,u,s,h;return s="",0==t.length?n.ne(L1n,O1n,-1,-1):(m_((h=KAn(t)).substr(0,3),"at ")&&(s3(3,h.length+1),h=h.substr(3)),-1==(a=(h=h.replace(/\[.*?\]/g,"")).indexOf("("))?-1==(a=h.indexOf("@"))?(s=h,h=""):(s=KAn((s3(a+1,h.length+1),h.substr(a+1))),h=KAn((Knn(0,a,h.length),h.substr(0,a)))):(Knn(a+1,e=h.indexOf(")",a),h.length),s=h.substr(a+1,e-(a+1)),h=KAn((Knn(0,a,h.length),h.substr(0,a)))),-1!=(a=xL(h,$Cn(46)))&&(s3(a+1,h.length+1),h=h.substr(a+1)),(0==h.length||m_(h,"Anonymous function"))&&(h=O1n),o=ax(s,$Cn(58)),r=T_(s,$Cn(58),o-1),u=-1,i=-1,c=L1n,-1!=o&&-1!=r&&(Knn(0,r,s.length),c=s.substr(0,r),u=rR((Knn(r+1,o,s.length),s.substr(r+1,o-(r+1)))),i=rR((s3(o+1,s.length+1),s.substr(o+1)))),n.ne(c,h,u,i))}function cQn(n){var t,e,i,r,c,a,o,u,s,h,f;for(s=new Ww(n);s.a0||h.j==_Rt&&h.e.c.length-h.g.c.length<0)){t=!1;break}for(r=new Ww(h.g);r.a=h&&M>=p&&(b+=d.n.b+g.n.b+g.a.b-y,++u));if(i)for(o=new Ww(v.e);o.a=h&&M>=p&&(b+=d.n.b+g.n.b+g.a.b-y,++u))}u>0&&(T+=b/u,++w)}w>0?(t.a=c*T/w,t.g=w):(t.a=0,t.g=0)}function oQn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;for(l=(c=n.f.b).a,h=c.b,w=n.e.g,b=n.e.f,vN(n.e,c.a,c.b),M=l/w,T=h/b,s=new DD(xJ(n.e));s.e!=s.i.gc();)ycn(u=uG(Zkn(s),135),u.i*M),Mcn(u,u.j*T);for(m=new DD(RJ(n.e));m.e!=m.i.gc();)k=(p=uG(Zkn(m),123)).i,y=p.j,k>0&&ycn(p,k*M),y>0&&Mcn(p,y*T);for(Yun(n.b,new ft),t=new Zm,o=new bsn(new Nw(n.c).a);o.b;)i=uG((a=von(o)).ld(),74),e=uG(a.md(),407).a,r=JFn(i,!1,!1),sqn(f=YPn(bIn(i),COn(r),e),r),(v=wIn(i))&&-1==Ten(t,v,0)&&(mv(t.c,v),iY(v,(MK(0!=f.b),uG(f.a.a.c,8)),e));for(g=new bsn(new Nw(n.d).a);g.b;)i=uG((d=von(g)).ld(),74),e=uG(d.md(),407).a,r=JFn(i,!1,!1),f=YPn(gIn(i),fln(COn(r)),e),sqn(f=fln(f),r),(v=dIn(i))&&-1==Ten(t,v,0)&&(mv(t.c,v),iY(v,(MK(0!=f.b),uG(f.c.b.c,8)),e))}function uQn(n,t,e,i){var r,c,a,o,u;return sKn(o=new EQn(t),i),r=!0,n&&n.pf((XYn(),d$t))&&(r=(c=uG(n.of((XYn(),d$t)),88))==(xdn(),ZDt)||c==JDt||c==YDt),iBn(o,!1),Prn(o.e.Rf(),new DB(o,!1,r)),W1(o,o.f,(Yrn(),jst),(KQn(),yRt)),W1(o,o.f,Sst,KRt),W1(o,o.g,jst,_Rt),W1(o,o.g,Sst,kRt),gyn(o,yRt),gyn(o,KRt),IJ(o,kRt),IJ(o,_Rt),VK(),(a=o.A.Hc((Qmn(),VRt))&&o.B.Hc((aUn(),rKt))?xmn(o):null)&&dT(o.a,a),iQn(o),BTn(o),HTn(o),wWn(o),aGn(o),iEn(o),dkn(o,yRt),dkn(o,KRt),IBn(o),Tzn(o),e?(wpn(o),rEn(o),dkn(o,kRt),dkn(o,_Rt),u=o.B.Hc((aUn(),cKt)),dLn(o,u,yRt),dLn(o,u,KRt),gLn(o,u,kRt),gLn(o,u,_Rt),kS(new fX(null,new h3(new Fw(o.i),0)),new Cn),kS(JJ(new fX(null,FW(o.r).a.oc()),new In),new On),jPn(o),o.e.Pf(o.o),kS(new fX(null,FW(o.r).a.oc()),new An),o.o):o.o}function sQn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(h=M0n,r=new Ww(n.a.b);r.a1)for(z8(v,new BI(n,b=new Izn(w,v,r))),mv(o.c,b),f=v.a.ec().Kc();f.Ob();)men(a,uG(f.Pb(),42).b);if(u.a.gc()>1)for(z8(u,new HI(n,b=new Izn(w,u,r))),mv(o.c,b),f=u.a.ec().Kc();f.Ob();)men(a,uG(f.Pb(),42).b)}}function dQn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;if(g=n.n,p=n.o,b=n.d,l=uM(pK(Omn(n,(jYn(),lTt)))),t){for(f=l*(t.gc()-1),w=0,s=t.Kc();s.Ob();)f+=(o=uG(s.Pb(),10)).o.a,w=e.Math.max(w,o.o.b);for(m=g.a-(f-p.a)/2,a=g.b-b.d+w,c=r=p.a/(t.gc()+1),u=t.Kc();u.Ob();)(o=uG(u.Pb(),10)).n.a=m,o.n.b=a-o.o.b,m+=o.o.a+l,(h=ERn(o)).n.a=o.o.a/2-h.a.a,h.n.b=o.o.b,(d=uG(oIn(o,(GYn(),Ppt)),12)).e.c.length+d.g.c.length==1&&(d.n.a=c-d.a.a,d.n.b=0,o2(d,n)),c+=r}if(i){for(f=l*(i.gc()-1),w=0,s=i.Kc();s.Ob();)f+=(o=uG(s.Pb(),10)).o.a,w=e.Math.max(w,o.o.b);for(m=g.a-(f-p.a)/2,a=g.b+p.b+b.a-w,c=r=p.a/(i.gc()+1),u=i.Kc();u.Ob();)(o=uG(u.Pb(),10)).n.a=m,o.n.b=a,m+=o.o.a+l,(h=ERn(o)).n.a=o.o.a/2-h.a.a,h.n.b=0,(d=uG(oIn(o,(GYn(),Ppt)),12)).e.c.length+d.g.c.length==1&&(d.n.a=c-d.a.a,d.n.b=p.b,o2(d,n)),c+=r}}function gQn(n,t){var i,r,c,a,o,u;if(uG(oIn(t,(GYn(),Hpt)),21).Hc((r_n(),tpt))){for(u=new Ww(t.a);u.a=0&&a0&&(uG(AJ(n.b,t),127).a.b=i)}function TQn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d;if(l=uM(pK(oIn(n,(jYn(),TTt)))),b=uM(pK(oIn(n,jTt))),f=uM(pK(oIn(n,yTt))),o=n.o,a=(c=uG(zq(n.j,0),12)).n,d=hAn(c,f)){if(t.Hc((eNn(),wRt)))switch(uG(oIn(n,(GYn(),Fpt)),64).g){case 1:d.c=(o.a-d.b)/2-a.a,d.d=b;break;case 3:d.c=(o.a-d.b)/2-a.a,d.d=-b-d.a;break;case 2:e&&0==c.e.c.length&&0==c.g.c.length?(h=i?d.a:uG(zq(c.f,0),72).o.b,d.d=(o.b-h)/2-a.b):d.d=o.b+b-a.b,d.c=-l-d.b;break;case 4:e&&0==c.e.c.length&&0==c.g.c.length?(h=i?d.a:uG(zq(c.f,0),72).o.b,d.d=(o.b-h)/2-a.b):d.d=o.b+b-a.b,d.c=l}else if(t.Hc(gRt))switch(uG(oIn(n,(GYn(),Fpt)),64).g){case 1:case 3:d.c=a.a+l;break;case 2:case 4:e&&!c.c?(h=i?d.a:uG(zq(c.f,0),72).o.b,d.d=(o.b-h)/2-a.b):d.d=a.b+b}for(r=d.d,s=new Ww(c.f);s.a=n.length)return{done:!0};var i=n[e++];return{value:[i,t.get(i)],done:!1}}}},__n()||(n.prototype.createObject=function(){return{}},n.prototype.get=function(n){return this.obj[":"+n]},n.prototype.set=function(n,t){this.obj[":"+n]=t},n.prototype[U0n]=function(n){delete this.obj[":"+n]},n.prototype.keys=function(){var n=[];for(var t in this.obj)58==t.charCodeAt(0)&&n.push(t.substring(1));return n}),n}function OQn(){OQn=E,RPt=new Cm(E4n),new Cm(S4n),new uF("DEPTH",xwn(0)),EPt=new uF("FAN",xwn(0)),TPt=new uF(Q9n,xwn(0)),UPt=new uF("ROOT",(qx(),!1)),APt=new uF("LEFTNEIGHBOR",null),BPt=new uF("RIGHTNEIGHBOR",null),LPt=new uF("LEFTSIBLING",null),HPt=new uF("RIGHTSIBLING",null),jPt=new uF("DUMMY",!1),new uF("LEVEL",xwn(0)),_Pt=new uF("REMOVABLE_EDGES",new lS),GPt=new uF("XCOOR",xwn(0)),qPt=new uF("YCOOR",xwn(0)),NPt=new uF("LEVELHEIGHT",0),DPt=new uF("LEVELMIN",0),$Pt=new uF("LEVELMAX",0),PPt=new uF("GRAPH_XMIN",0),IPt=new uF("GRAPH_YMIN",0),SPt=new uF("GRAPH_XMAX",0),CPt=new uF("GRAPH_YMAX",0),MPt=new uF("COMPACT_LEVEL_ASCENSION",!1),yPt=new uF("COMPACT_CONSTRAINTS",new Zm),OPt=new uF("ID",""),KPt=new uF("POSITION",xwn(0)),FPt=new uF("PRELIM",0),xPt=new uF("MODIFIER",0),kPt=new Cm(P4n),vPt=new Cm(C4n)}function AQn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w,d;if(NGn(),null==n)return null;if(0==(f=8*n.length))return"";for(l=f/24|0,c=null,c=Inn(JHt,N1n,28,4*(0!=(o=f%24)?l+1:l),15,1),s=0,h=0,t=0,e=0,i=0,a=0,r=0,u=0;u>24,s=(3&t)<<24>>24,b=-128&t?(t>>2^192)<<24>>24:t>>2<<24>>24,w=-128&e?(e>>4^240)<<24>>24:e>>4<<24>>24,d=-128&(i=n[r++])?(i>>6^252)<<24>>24:i>>6<<24>>24,c[a++]=gHt[b],c[a++]=gHt[w|s<<4],c[a++]=gHt[h<<2|d],c[a++]=gHt[63&i];return 8==o?(s=(3&(t=n[r]))<<24>>24,b=-128&t?(t>>2^192)<<24>>24:t>>2<<24>>24,c[a++]=gHt[b],c[a++]=gHt[s<<4],c[a++]=61,c[a++]=61):16==o&&(t=n[r],h=(15&(e=n[r+1]))<<24>>24,s=(3&t)<<24>>24,b=-128&t?(t>>2^192)<<24>>24:t>>2<<24>>24,w=-128&e?(e>>4^240)<<24>>24:e>>4<<24>>24,c[a++]=gHt[b],c[a++]=gHt[w|s<<4],c[a++]=gHt[h<<2],c[a++]=61),mvn(c,0,c.length)}function LQn(n,t){var i,r,c,a,o,u;if(0==n.e&&n.p>0&&(n.p=-(n.p-1)),n.p>j1n&&F5(t,n.p-V1n),o=t.q.getDate(),k0(t,1),n.k>=0&&H0(t,n.k),n.c>=0?k0(t,n.c):n.k>=0?(r=35-new Lfn(t.q.getFullYear()-V1n,t.q.getMonth(),35).q.getDate(),k0(t,e.Math.min(r,o))):k0(t,o),n.f<0&&(n.f=t.q.getHours()),n.b>0&&n.f<12&&(n.f+=12),tD(t,24==n.f&&n.g?0:n.f),n.j>=0&&y7(t,n.j),n.n>=0&&Nnn(t,n.n),n.i>=0&&TL(t,Lgn(Ngn(bSn(Bsn(t.q.getTime()),$1n),$1n),n.i)),n.a&&(F5(c=new QE,c.q.getFullYear()-V1n-80),$P(Bsn(t.q.getTime()),Bsn(c.q.getTime()))&&F5(t,c.q.getFullYear()-V1n+100)),n.d>=0)if(-1==n.c)(i=(7+n.d-t.q.getDay())%7)>3&&(i-=7),u=t.q.getMonth(),k0(t,t.q.getDate()+i),t.q.getMonth()!=u&&k0(t,t.q.getDate()+(i>0?-7:7));else if(t.q.getDay()!=n.d)return!1;return n.o>j1n&&(a=t.q.getTimezoneOffset(),TL(t,Lgn(Bsn(t.q.getTime()),60*(n.o-a)*$1n))),!0}function NQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p;if(F$(r=oIn(t,(GYn(),rmt)),207)){for(b=uG(r,27),w=t.e,f=new eN(t.c),c=t.d,f.a+=c.b,f.b+=c.d,$x(uG(zDn(b,(jYn(),KMt)),181),(aUn(),tKt))&&(Ab(l=uG(zDn(b,_Mt),107),c.a),_b(l,c.d),Lb(l,c.b),Fb(l,c.c)),e=new Zm,s=new Ww(t.a);s.ai.c.length-1;)kD(i,new WO(B3n,G9n));e=uG(oIn(r,ACt),17).a,hN(uG(oIn(n,cCt),88))?(r.e.auM(pK((u3(e,i.c.length),uG(i.c[e],42)).b))&&sw((u3(e,i.c.length),uG(i.c[e],42)),r.e.a+r.f.a)):(r.e.buM(pK((u3(e,i.c.length),uG(i.c[e],42)).b))&&sw((u3(e,i.c.length),uG(i.c[e],42)),r.e.b+r.f.b))}for(c=Fkn(n.b,0);c.b!=c.d.c;)r=uG(I6(c),40),e=uG(oIn(r,(QGn(),ACt)),17).a,kfn(r,(OQn(),DPt),pK((u3(e,i.c.length),uG(i.c[e],42)).a)),kfn(r,$Pt,pK((u3(e,i.c.length),uG(i.c[e],42)).b));t.Vg()}function RQn(n){var t,i,r,c,a,o,u,s,f,l,b,w,d,g,p;for(n.o=uM(pK(oIn(n.i,(jYn(),ETt)))),n.f=uM(pK(oIn(n.i,vTt))),n.j=n.i.b.c.length,u=n.j-1,w=0,n.k=0,n.n=0,n.b=n7(Inn(dot,zZn,17,n.j,0,1)),n.c=n7(Inn(fot,zZn,345,n.j,7,1)),o=new Ww(n.i.b);o.a0&&kD(n.q,l),kD(n.p,l);d=s+(t-=r),f+=t*n.f,Y8(n.b,u,xwn(d)),Y8(n.c,u,f),n.k=e.Math.max(n.k,d),n.n=e.Math.max(n.n,f),n.e+=t,t+=p}}function KQn(){var n;KQn=E,FRt=new RO(Y2n,0),yRt=new RO(o3n,1),kRt=new RO(u3n,2),KRt=new RO(s3n,3),_Rt=new RO(h3n,4),hZ(),SRt=new nT(new nB(n=uG(Mj(YRt),9),uG(MF(n,n.length),9),0)),PRt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[]))),MRt=Nwn(WX(kRt,Uhn(cT(YRt,1),z4n,64,0,[]))),DRt=Nwn(WX(KRt,Uhn(cT(YRt,1),z4n,64,0,[]))),RRt=Nwn(WX(_Rt,Uhn(cT(YRt,1),z4n,64,0,[]))),LRt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[KRt]))),ERt=Nwn(WX(kRt,Uhn(cT(YRt,1),z4n,64,0,[_Rt]))),$Rt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[_Rt]))),CRt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[kRt]))),xRt=Nwn(WX(KRt,Uhn(cT(YRt,1),z4n,64,0,[_Rt]))),TRt=Nwn(WX(kRt,Uhn(cT(YRt,1),z4n,64,0,[KRt]))),ARt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[kRt,_Rt]))),jRt=Nwn(WX(kRt,Uhn(cT(YRt,1),z4n,64,0,[KRt,_Rt]))),NRt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[KRt,_Rt]))),IRt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[kRt,KRt]))),ORt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[kRt,KRt,_Rt])))}function FQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;for(t.Ug(j6n,1),w=new Zm,k=new Zm,s=new Ww(n.b);s.a0&&(y-=d),Vzn(o,y),l=0,w=new Ww(o.a);w.a0),u.a.Xb(u.c=--u.b)),s=.4*r*l,!a&&u.b0&&(s3(0,t.length),64!=(o=t.charCodeAt(0)))){if(37==o&&(u=!1,0!=(h=t.lastIndexOf("%"))&&(h==f-1||(s3(h+1,t.length),u=46==t.charCodeAt(h+1))))){if(Knn(1,h,t.length),m=m_("%",a=t.substr(1,h-1))?null:eJn(a),i=0,u)try{i=mUn((s3(h+2,t.length+1),t.substr(h+2)),j1n,vZn)}catch(v){throw F$(v=Ehn(v),130)?hv(new Pen(v)):hv(v)}for(d=kon(n.Gh());d.Ob();)if(F$(b=Ksn(d),519)&&(p=(r=uG(b,598)).d,(null==m?null==p:m_(m,p))&&0==i--))return r;return null}if(l=-1==(s=t.lastIndexOf("."))?t:(Knn(0,s,t.length),t.substr(0,s)),e=0,-1!=s)try{e=mUn((s3(s+1,t.length+1),t.substr(s+1)),j1n,vZn)}catch(v){if(!F$(v=Ehn(v),130))throw hv(v);l=t}for(l=m_("%",l)?null:eJn(l),w=kon(n.Gh());w.Ob();)if(F$(b=Ksn(w),197)&&(g=(c=uG(b,197)).xe(),(null==l?null==g:m_(l,g))&&0==e--))return c;return null}return jWn(n,t)}function WQn(n){var t,e,i,r,c,a,o,u,s,f,l,b,w,d,g,p,m;for(s=new Ym,o=new K1,i=new Ww(n.a.a.b);i.at.d.c){if((b=n.c[t.a.d])==(g=n.c[f.a.d]))continue;RKn(xS(DS(RS($S(new uk,1),100),b),g))}}}function QQn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;if(b=uG(uG(Y9(n.r,t),21),87),t!=(KQn(),kRt)&&t!=_Rt){for(a=t==yRt?(ehn(),wht):(ehn(),pht),y=t==yRt?(Yen(),Fst):(Yen(),Rst),c=(r=(i=uG(AJ(n.b,t),127)).i).c+Trn(Uhn(cT(eUt,1),I0n,28,15,[i.n.b,n.C.b,n.k])),m=r.c+r.b-Trn(Uhn(cT(eUt,1),I0n,28,15,[i.n.c,n.C.c,n.k])),o=TT(BB(a),n.t),v=t==yRt?T0n:M0n,l=b.Kc();l.Ob();)!(h=uG(l.Pb(),117)).c||h.c.d.c.length<=0||(p=h.b.Mf(),g=h.e,(d=(w=h.c).i).b=(s=w.n,w.e.a+s.b+s.c),d.a=(u=w.n,w.e.b+u.d+u.a),ZZ(y,W2n),w.f=y,etn(w,(Ktn(),Lst)),d.c=g.a-(d.b-p.a)/2,M=e.Math.min(c,g.a),T=e.Math.max(m,g.a+p.a),d.cT&&(d.c=T-d.b),kD(o.d,new ZX(d,Hdn(o,d))),v=t==yRt?e.Math.max(v,g.b+h.b.Mf().b):e.Math.min(v,g.b));for(v+=t==yRt?n.t:-n.t,(k=cmn((o.e=v,o)))>0&&(uG(AJ(n.b,t),127).a.b=k),f=b.Kc();f.Ob();)!(h=uG(f.Pb(),117)).c||h.c.d.c.length<=0||((d=h.c.i).c-=h.e.a,d.d-=h.e.b)}else MQn(n,t)}function JQn(n){var t,e,i,r,c,a,o,u,s,f;for(t=new Ym,a=new DD(n);a.e!=a.i.gc();){for(c=uG(Zkn(a),27),e=new ek,vJ(cft,c,e),f=new at,i=uG(l8(new fX(null,new LW(new Fz(ix(tRn(c).a.Kc(),new h)))),HX(f,ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)])))),85),Ycn(e,uG(i.xc((qx(),!0)),16),new ot),r=uG(l8(JJ(uG(i.xc(!1),15).Lc(),new ut),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),15).Kc();r.Ob();)(s=wIn(uG(r.Pb(),74)))&&((o=uG(DA(FX(t.f,s)),21))||(o=TFn(s),VAn(t.f,s,o)),Qon(e,o));for(i=uG(l8(new fX(null,new LW(new Fz(ix(eRn(c).a.Kc(),new h)))),HX(f,ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut])))),85),Ycn(e,uG(i.xc(!0),16),new st),u=uG(l8(JJ(uG(i.xc(!1),15).Lc(),new ht),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),15).Kc();u.Ob();)(s=dIn(uG(u.Pb(),74)))&&((o=uG(DA(FX(t.f,s)),21))||(o=TFn(s),VAn(t.f,s,o)),Qon(e,o))}}function YQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d;if(pXn(),(u=dwn(n,0)<0)&&(n=Men(n)),0==dwn(n,0))switch(t){case 0:return"0";case 1:return N0n;case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return(b=new WM).a+=t<0?"0E+":"0E",b.a+=t==j1n?"2147483648":""+-t,b.a}f=Inn(JHt,N1n,28,1+(h=18),15,1),e=h,d=n;do{s=d,d=bSn(d,10),f[--e]=pz(Lgn(48,$gn(s,Ngn(d,10))))&D1n}while(0!=dwn(d,0));if(r=$gn($gn($gn(h,e),t),1),0==t)return u&&(f[--e]=45),mvn(f,e,h-e);if(t>0&&dwn(r,-6)>=0){if(dwn(r,0)>=0){for(c=e+pz(r),o=h-1;o>=c;o--)f[o+1]=f[o];return f[++c]=46,u&&(f[--e]=45),mvn(f,e,h-e+1)}for(a=2;$P(a,Lgn(Men(r),1));a++)f[--e]=48;return f[--e]=46,f[--e]=48,u&&(f[--e]=45),mvn(f,e,h-e)}return w=e+1,i=h,l=new QM,u&&(l.a+="-"),i-w>=1?(jQ(l,f[e]),l.a+=".",l.a+=mvn(f,e+1,h-e-1)):l.a+=mvn(f,e,h-e),l.a+="E",dwn(r,0)>0&&(l.a+="+"),l.a+=""+oV(r),l.a}function ZQn(n,t,i,r,c){var a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;if(p=new MO(n.g,n.f),(g=xAn(n)).a=e.Math.max(g.a,t),g.b=e.Math.max(g.b,i),T=g.a/p.a,f=g.b/p.b,y=g.a-p.a,s=g.b-p.b,r)for(o=R0(n)?uG(zDn(R0(n),(XYn(),d$t)),88):uG(zDn(n,(XYn(),d$t)),88),u=xA(zDn(n,(XYn(),sDt)))===xA(($Pn(),cRt)),v=new DD((!n.c&&(n.c=new fV(wFt,n,9,9)),n.c));v.e!=v.i.gc();)switch(m=uG(Zkn(v),123),(k=uG(zDn(m,gDt),64))==(KQn(),FRt)&&(k=RGn(m,o),Myn(m,gDt,k)),k.g){case 1:u||ycn(m,m.i*T);break;case 2:ycn(m,m.i+y),u||Mcn(m,m.j*f);break;case 3:u||ycn(m,m.i*T),Mcn(m,m.j+s);break;case 4:u||Mcn(m,m.j*f)}if(vN(n,g.a,g.b),c)for(b=new DD((!n.n&&(n.n=new fV(lFt,n,1,7)),n.n));b.e!=b.i.gc();)w=(l=uG(Zkn(b),135)).i+l.g/2,d=l.j+l.f/2,(M=w/p.a)+(h=d/p.b)>=1&&(M-h>0&&d>=0?(ycn(l,l.i+y),Mcn(l,l.j+s*h)):M-h<0&&w>=0&&(ycn(l,l.i+y*M),Mcn(l,l.j+s)));return Myn(n,(XYn(),_$t),(Qmn(),new nB(a=uG(Mj(sKt),9),uG(MF(a,a.length),9),0))),new MO(T,f)}function nJn(n){hP(n,new hCn(xT(FT(DT(KT(RT(new bu,x7n),"ELK Radial"),'A radial layout provider which is based on the algorithm of Peter Eades published in "Drawing free trees.", published by International Institute for Advanced Study of Social Information Science, Fujitsu Limited in 1991. The radial layouter takes a tree and places the nodes in radial order around the root. The nodes of the same tree level are placed on the same radius.'),new Oo),x7n))),U4(n,x7n,b9n,Jkn(BIt)),U4(n,x7n,o4n,Jkn(VIt)),U4(n,x7n,p4n,Jkn($It)),U4(n,x7n,x4n,Jkn(DIt)),U4(n,x7n,g4n,Jkn(xIt)),U4(n,x7n,m4n,Jkn(NIt)),U4(n,x7n,w4n,Jkn(RIt)),U4(n,x7n,v4n,Jkn(_It)),U4(n,x7n,P7n,Jkn(AIt)),U4(n,x7n,S7n,Jkn(LIt)),U4(n,x7n,E7n,Jkn(UIt)),U4(n,x7n,A7n,Jkn(XIt)),U4(n,x7n,L7n,Jkn(GIt)),U4(n,x7n,N7n,Jkn(qIt)),U4(n,x7n,O7n,Jkn(KIt)),U4(n,x7n,T7n,Jkn(FIt)),U4(n,x7n,j7n,Jkn(HIt)),U4(n,x7n,C7n,Jkn(zIt)),U4(n,x7n,I7n,Jkn(WIt)),U4(n,x7n,M7n,Jkn(OIt))}function tJn(n){var t,e,i,r,c,a,o,u,s,h,f;if(null==n)throw hv(new ZM(IZn));if(s=n,u=!1,(c=n.length)>0&&(s3(0,n.length),45!=(t=n.charCodeAt(0))&&43!=t||(s3(1,n.length+1),n=n.substr(1),--c,u=45==t)),0==c)throw hv(new ZM(y0n+s+'"'));for(;n.length>0&&(s3(0,n.length),48==n.charCodeAt(0));)s3(1,n.length+1),n=n.substr(1),--c;if(c>(lGn(),vot)[10])throw hv(new ZM(y0n+s+'"'));for(r=0;r0&&(f=-parseInt((Knn(0,i,n.length),n.substr(0,i)),10),s3(i,n.length+1),n=n.substr(i),c-=i,e=!1);c>=a;){if(i=parseInt((Knn(0,a,n.length),n.substr(0,a)),10),s3(a,n.length+1),n=n.substr(a),c-=a,e)e=!1;else{if(dwn(f,o)<0)throw hv(new ZM(y0n+s+'"'));f=Ngn(f,h)}f=$gn(f,i)}if(dwn(f,0)>0)throw hv(new ZM(y0n+s+'"'));if(!u&&dwn(f=Men(f),0)<0)throw hv(new ZM(y0n+s+'"'));return f}function eJn(n){var t,e,i,r,c,a,o,u;if(YXn(),null==n)return null;if((r=xL(n,$Cn(37)))<0)return n;for(u=new lx((Knn(0,r,n.length),n.substr(0,r))),t=Inn(tUt,ret,28,4,15,1),o=0,i=0,a=n.length;rr+2&&mfn((s3(r+1,n.length),n.charCodeAt(r+1)),QFt,JFt)&&mfn((s3(r+2,n.length),n.charCodeAt(r+2)),QFt,JFt))if(e=AG((s3(r+1,n.length),n.charCodeAt(r+1)),(s3(r+2,n.length),n.charCodeAt(r+2))),r+=2,i>0?128==(192&e)?t[o++]=e<<24>>24:i=0:e>=128&&(192==(224&e)?(t[o++]=e<<24>>24,i=2):224==(240&e)?(t[o++]=e<<24>>24,i=3):240==(248&e)&&(t[o++]=e<<24>>24,i=4)),i>0){if(o==i){switch(o){case 2:jQ(u,((31&t[0])<<6|63&t[1])&D1n);break;case 3:jQ(u,((15&t[0])<<12|(63&t[1])<<6|63&t[2])&D1n)}o=0,i=0}}else{for(c=0;c=2){if(0==(!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i)gj(),i=new is,ttn((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a),i);else if((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i>1)for(l=new Zx((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a));l.e!=l.i.gc();)$Sn(l);sqn(t,uG(zrn((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a),0),166))}if(f)for(r=new DD((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a));r.e!=r.i.gc();)for(s=new DD((!(i=uG(Zkn(r),166)).a&&(i.a=new MD(eFt,i,5)),i.a));s.e!=s.i.gc();)u=uG(Zkn(s),377),o.a=e.Math.max(o.a,u.a),o.b=e.Math.max(o.b,u.b);for(a=new DD((!n.n&&(n.n=new fV(lFt,n,1,7)),n.n));a.e!=a.i.gc();)c=uG(Zkn(a),135),(h=uG(zDn(c,Cxt),8))&&kN(c,h.a,h.b),f&&(o.a=e.Math.max(o.a,c.i+c.g),o.b=e.Math.max(o.b,c.j+c.f));return o}function rJn(n,t,e,i,r){var c,a,o;if(win(n,t),a=t[0],c=VJ(e.c,0),o=-1,Jfn(e))if(i>0){if(a+i>n.length)return!1;o=RNn((Knn(0,a+i,n.length),n.substr(0,a+i)),t)}else o=RNn(n,t);switch(c){case 71:return o=XOn(n,a,Uhn(cT($ot,1),zZn,2,6,[Q1n,J1n]),t),r.e=o,!0;case 77:return c_n(n,t,r,o,a);case 76:return a_n(n,t,r,o,a);case 69:return XAn(n,t,a,r);case 99:return zAn(n,t,a,r);case 97:return o=XOn(n,a,Uhn(cT($ot,1),zZn,2,6,["AM","PM"]),t),r.b=o,!0;case 121:return o_n(n,t,a,o,e,r);case 100:return!(o<=0||(r.c=o,0));case 83:return!(o<0)&&tmn(o,a,t[0],r);case 104:12==o&&(o=0);case 75:case 72:return!(o<0||(r.f=o,r.g=!1,0));case 107:return!(o<0||(r.f=o,r.g=!0,0));case 109:return!(o<0||(r.j=o,0));case 115:return!(o<0||(r.n=o,0));case 90:if(aT[s]&&(d=s),f=new Ww(n.a.b);f.a1;){if(c=nKn(t),l=a.g,d=uG(zDn(t,hAt),107),g=uM(pK(zDn(t,VOt))),(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i>1&&uM(pK(zDn(t,(lBn(),jOt))))!=M0n&&(a.c+(d.b+d.c))/(a.b+(d.d+d.a))1&&uM(pK(zDn(t,(lBn(),TOt))))!=M0n&&(a.c+(d.b+d.c))/(a.b+(d.d+d.a))>g&&Myn(c,(lBn(),POt),e.Math.max(uM(pK(zDn(t,EOt))),uM(pK(zDn(c,POt)))-uM(pK(zDn(t,TOt))))),(h=(s=kYn(w=new vO(r,f),c,b)).g)>=l&&h==h){for(o=0;o<(!c.a&&(c.a=new fV(bFt,c,10,11)),c.a).i;o++)mNn(n,uG(zrn((!c.a&&(c.a=new fV(bFt,c,10,11)),c.a),o),27),uG(zrn((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a),o),27));Irn(t,w),x1(a,s.c),D1(a,s.b)}--u}Myn(t,(lBn(),mOt),a.b),Myn(t,vOt,a.c),i.Vg()}function uJn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(t.Ug("Interactive node layering",1),i=new Zm,b=new Ww(n.a);b.a=u){MK(v.b>0),v.a.Xb(v.c=--v.b);break}p.a>s&&(r?(Ohn(r.b,p.b),r.a=e.Math.max(r.a,p.a),LQ(v)):(kD(p.b,f),p.c=e.Math.min(p.c,s),p.a=e.Math.max(p.a,u),r=p))}r||((r=new Mk).c=s,r.a=u,pF(v,r),kD(r.b,f))}for(o=n.b,h=0,m=new Ww(i);m.aw&&(a&&(cL(M,b),cL(j,xwn(h.b-1))),I=i.b,O+=b+t,b=0,f=e.Math.max(f,i.b+i.c+C)),ycn(u,I),Mcn(u,O),f=e.Math.max(f,I+C+i.c),b=e.Math.max(b,l),I+=C+t;if(f=e.Math.max(f,r),(P=O+b+i.a)t4n,S=e.Math.abs(b.b-d.b)>t4n,(!i&&E&&S||i&&(E||S))&&aq(p.a,y)),Qon(p.a,r),0==r.b?b=y:(MK(0!=r.b),b=uG(r.c.b.c,8)),hhn(w,l,g),kun(c)==j&&(HQ(j.i)!=c.a&&pAn(g=new sj,HQ(j.i),v),kfn(p,Smt,g)),sOn(w,p,v),f.a.zc(w,f);c2(p,M),u2(p,j)}for(h=f.a.ec().Kc();h.Ob();)c2(s=uG(h.Pb(),18),null),u2(s,null);t.Vg()}function fJn(n,t){var e,i,r,c,a,o,u,s,h,f,l;for(h=(r=uG(oIn(n,(QGn(),cCt)),88))==(xdn(),JDt)||r==YDt?QDt:YDt,e=uG(l8(JJ(new fX(null,new h3(n.b,16)),new $a),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),(u=uG(l8(YJ(e.Oc(),new Pp(t)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),15)).Gc(uG(l8(YJ(e.Oc(),new Cp(t)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),16)),u.jd(new Ip(h)),l=new Hj(new Op(r)),i=new Ym,o=u.Kc();o.Ob();)a=uG(o.Pb(),240),s=uG(a.a,40),oM(gK(a.c))?(l.a.zc(s,(qx(),tot)),new od(l.a.Zc(s,!1)).a.gc()>0&&vJ(i,s,uG(new od(l.a.Zc(s,!1)).a.Vc(),40)),new od(l.a.ad(s,!0)).a.gc()>1&&vJ(i,wmn(l,s),s)):(new od(l.a.Zc(s,!1)).a.gc()>0&&xA(c=uG(new od(l.a.Zc(s,!1)).a.Vc(),40))===xA(DA(FX(i.f,s)))&&uG(oIn(s,(OQn(),yPt)),15).Fc(c),new od(l.a.ad(s,!0)).a.gc()>1&&(f=wmn(l,s),xA(DA(FX(i.f,f)))===xA(s)&&uG(oIn(f,(OQn(),yPt)),15).Fc(s)),l.a.Bc(s))}function lJn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;if(1==n.gc())return uG(n.Xb(0),235);if(n.gc()<=0)return new d7;for(c=n.Kc();c.Ob();){for(i=uG(c.Pb(),235),d=0,f=vZn,l=vZn,s=j1n,h=j1n,w=new Ww(i.e);w.au&&(k=0,y+=o+m,o=0),tUn(g,i,k,y),t=e.Math.max(t,k+p.a),o=e.Math.max(o,p.b),k+=p.a+m;return g}function bJn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w,d,g;if(NGn(),null==n)return null;if((w=hgn(c=_en(n)))%4!=0)return null;if(0==(d=w/4|0))return Inn(tUt,ret,28,0,15,1);for(f=null,t=0,e=0,i=0,r=0,a=0,o=0,u=0,s=0,b=0,l=0,h=0,f=Inn(tUt,ret,28,3*d,15,1);b>4)<<24>>24,f[l++]=((15&e)<<4|i>>2&15)<<24>>24,f[l++]=(i<<6|r)<<24>>24}return mE(a=c[h++])&&mE(o=c[h++])?(t=dHt[a],e=dHt[o],u=c[h++],s=c[h++],-1==dHt[u]||-1==dHt[s]?61==u&&61==s?15&e?null:(qGn(f,0,g=Inn(tUt,ret,28,3*b+1,15,1),0,3*b),g[l]=(t<<2|e>>4)<<24>>24,g):61!=u&&61==s?3&(i=dHt[u])?null:(qGn(f,0,g=Inn(tUt,ret,28,3*b+2,15,1),0,3*b),g[l++]=(t<<2|e>>4)<<24>>24,g[l]=((15&e)<<4|i>>2&15)<<24>>24,g):null:(i=dHt[u],r=dHt[s],f[l++]=(t<<2|e>>4)<<24>>24,f[l++]=((15&e)<<4|i>>2&15)<<24>>24,f[l++]=(i<<6|r)<<24>>24,f)):null}function wJn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(t.Ug(j6n,1),l=uG(oIn(n,(jYn(),Vyt)),223),i=new Ww(n.b);i.a=2){for(b=!0,e=uG(N3(h=new Ww(r.j)),12),f=null;h.a0)if(r=f.gc(),s=t0(e.Math.floor((r+1)/2))-1,c=t0(e.Math.ceil((r+1)/2))-1,t.o==dSt)for(h=c;h>=s;h--)t.a[k.p]==k&&(d=uG(f.Xb(h),42),w=uG(d.a,10),!cS(i,d.b)&&b>n.b.e[w.p]&&(t.a[w.p]=k,t.g[k.p]=t.g[w.p],t.a[k.p]=t.g[k.p],t.f[t.g[k.p].p]=(qx(),!!(oM(t.f[t.g[k.p].p])&k.k==(zIn(),wbt))),b=n.b.e[w.p]));else for(h=s;h<=c;h++)t.a[k.p]==k&&(p=uG(f.Xb(h),42),g=uG(p.a,10),!cS(i,p.b)&&b0&&(c=uG(zq(p.c.a,T-1),10),o=n.i[c.p],E=e.Math.ceil(y$(n.n,c,p)),a=M.a.e-p.d.d-(o.a.e+c.o.b+c.d.a)-E),h=M0n,T0&&j.a.e.e-j.a.a-(j.b.e.e-j.b.a)<0,d=k.a.e.e-k.a.a-(k.b.e.e-k.b.a)<0&&j.a.e.e-j.a.a-(j.b.e.e-j.b.a)>0,w=k.a.e.e+k.b.aj.b.e.e+j.a.a,y=0,!g&&!d&&(b?a+l>0?y=l:h-r>0&&(y=r):w&&(a+u>0?y=u:h-v>0&&(y=v))),M.a.e+=y,M.b&&(M.d.e+=y),1)))}function pJn(n,t,i){var r,c,a,o,u,s,h,f,l,b;if(r=new gY(t.Lf().a,t.Lf().b,t.Mf().a,t.Mf().b),c=new cN,n.c)for(o=new Ww(t.Rf());o.as&&(i.a+=V$(Inn(JHt,N1n,28,-s,15,1))),i.a+="Is",xL(u,$Cn(32))>=0)for(r=0;r=i.o.b/2}p?(g=uG(oIn(i,(GYn(),Pmt)),15))?l?c=g:(r=uG(oIn(i,Ept),15))?c=g.gc()<=r.gc()?g:r:(c=new Zm,kfn(i,Ept,c)):(c=new Zm,kfn(i,Pmt,c)):(r=uG(oIn(i,(GYn(),Ept)),15))?f?c=r:(g=uG(oIn(i,Pmt),15))?c=r.gc()<=g.gc()?r:g:(c=new Zm,kfn(i,Pmt,c)):(c=new Zm,kfn(i,Ept,c)),c.Fc(n),kfn(n,(GYn(),Ppt),e),t.d==e?(u2(t,null),e.e.c.length+e.g.c.length==0&&o2(e,null),Nln(e)):(c2(t,null),e.e.c.length+e.g.c.length==0&&o2(e,null)),BY(t.a)}function jJn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I,O,A;for(i.Ug("MinWidth layering",1),w=t.b,j=t.a,A=uG(oIn(t,(jYn(),mMt)),17).a,u=uG(oIn(t,vMt),17).a,n.b=uM(pK(oIn(t,dTt))),n.d=M0n,y=new Ww(j);y.a0?(h=0,p&&(h+=u),h+=(E-1)*o,v&&(h+=u),j&&v&&(h=e.Math.max(h,GKn(v,o,m,T))),h=n.a&&(r=Rqn(n,m),l=e.Math.max(l,r.b),k=e.Math.max(k,r.d),kD(u,new WO(m,r)));for(T=new Zm,f=0;f0),g.a.Xb(g.c=--g.b),pF(g,j=new bQ(n.b)),MK(g.b0){for(l=h<100?null:new cj(h),w=(s=new Hun(t)).g,g=Inn(YHt,W1n,28,h,15,1),i=0,v=new Drn(h),r=0;r=0;)if(null!=b?udn(b,w[u]):xA(b)===xA(w[u])){g.length<=i&&qGn(g,0,g=Inn(YHt,W1n,28,2*g.length,15,1),0,i),g[i++]=r,ttn(v,w[u]);break n}if(xA(b)===xA(o))break}}if(s=v,w=v.g,h=i,i>g.length&&qGn(g,0,g=Inn(YHt,W1n,28,i,15,1),0,i),i>0){for(m=!0,c=0;c=0;)gjn(n,g[a]);if(i!=h){for(r=h;--r>=i;)gjn(s,r);qGn(g,0,g=Inn(YHt,W1n,28,i,15,1),0,i)}t=s}}}else for(t=cjn(n,t),r=n.i;--r>=0;)t.Hc(n.g[r])&&(gjn(n,r),m=!0);if(m){if(null!=g){for(f=1==(e=t.gc())?i2(n,4,t.Kc().Pb(),null,g[0],d):i2(n,6,t,g,g[0],d),l=e<100?null:new cj(e),r=t.Kc();r.Ob();)l=X_(n,uG(b=r.Pb(),76),l);l?(l.nj(f),l.oj()):Msn(n.e,f)}else{for(l=qF(t.gc()),r=t.Kc();r.Ob();)l=X_(n,uG(b=r.Pb(),76),l);l&&l.oj()}return!0}return!1}function CJn(n,t){var e,i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v;for((e=new qyn(t)).a||MUn(t),s=oBn(t),u=new K1,g=new BFn,d=new Ww(t.a);d.a0||i.o==dSt&&c=e}function AJn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;for(f=t,h=new K1,l=new K1,c=p6(f,yet),IOn((i=new SY(n,e,h,l)).a,i.b,i.c,i.d,c),d=(h.i||(h.i=new RD(h,h.c))).Kc();d.Ob();)for(w=uG(d.Pb(),166),o=uG(Y9(h,w),21).Kc();o.Ob();){if(a=o.Pb(),!(b=uG(dcn(n.d,a),166)))throw r=k6(f,Iet),hv(new SM(Det+a+xet+r+$et));!w.e&&(w.e=new f_(oFt,w,10,9)),ttn(w.e,b)}for(p=(l.i||(l.i=new RD(l,l.c))).Kc();p.Ob();)for(g=uG(p.Pb(),166),s=uG(Y9(l,g),21).Kc();s.Ob();){if(u=s.Pb(),!(b=uG(dcn(n.d,u),166)))throw r=k6(f,Iet),hv(new SM(Det+u+xet+r+$et));!g.g&&(g.g=new f_(oFt,g,9,10)),ttn(g.g,b)}!e.b&&(e.b=new f_(cFt,e,4,7)),0!=e.b.i&&(!e.c&&(e.c=new f_(cFt,e,5,8)),0!=e.c.i)&&(!e.b&&(e.b=new f_(cFt,e,4,7)),e.b.i<=1&&(!e.c&&(e.c=new f_(cFt,e,5,8)),e.c.i<=1))&&1==(!e.a&&(e.a=new fV(oFt,e,6,6)),e.a).i&&(hMn(m=uG(zrn((!e.a&&(e.a=new fV(oFt,e,6,6)),e.a),0),166))||fMn(m)||(Xan(m,uG(zrn((!e.b&&(e.b=new f_(cFt,e,4,7)),e.b),0),84)),zan(m,uG(zrn((!e.c&&(e.c=new f_(cFt,e,5,8)),e.c),0),84))))}function LJn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S;for(k=0,y=(v=n.a).length;k0?(f=uG(zq(l.c.a,a-1),10),j=y$(n.b,l,f),g=l.n.b-l.d.d-(f.n.b+f.o.b+f.d.a+j)):g=l.n.b-l.d.d,s=e.Math.min(g,s),a1&&(o=e.Math.min(o,e.Math.abs(uG(hyn(u.a,1),8).b-f.b)))));else for(d=new Ww(t.j);d.ac&&(a=b.a-c,o=vZn,r.c.length=0,c=b.a),b.a>=c&&(mv(r.c,u),u.a.b>1&&(o=e.Math.min(o,e.Math.abs(uG(hyn(u.a,u.a.b-2),8).b-b.b)))));if(0!=r.c.length&&a>t.o.a/2&&o>t.o.b/2){for(o2(w=new lOn,t),NLn(w,(KQn(),yRt)),w.n.a=t.o.a/2,o2(g=new lOn,t),NLn(g,KRt),g.n.a=t.o.a/2,g.n.b=t.o.b,s=new Ww(r);s.a=h.b?c2(u,g):c2(u,w)):(h=uG(eG(u.a),8),(0==u.a.b?n3(u.c):uG(pR(u.a),8)).b>=h.b?u2(u,g):u2(u,w)),(l=uG(oIn(u,(jYn(),bMt)),75))&&Wpn(l,h,!0);t.n.a=c-t.o.a/2}}function $Jn(n,t,i){var r,c,a,o,u,s,h,f,l;for(u=Fkn(n.b,0);u.b!=u.d.c;)if(!m_((o=uG(I6(u),40)).c,H9n))for(h=xDn(o,n),t==(xdn(),JDt)||t==YDt?f$(h,new co):f$(h,new ao),s=h.c.length,r=0;r=0?Ipn(o):Gdn(Ipn(o)),n.qf(eTt,b)),s=new sj,l=!1,n.pf(WMt)?(_R(s,uG(n.of(WMt),8)),l=!0):mD(s,a.a/2,a.b/2),b.g){case 4:kfn(h,gMt,(Gpn(),Imt)),kfn(h,Npt,(Pfn(),ygt)),h.o.b=a.b,d<0&&(h.o.a=-d),NLn(f,(KQn(),kRt)),l||(s.a=a.a),s.a-=a.a;break;case 2:kfn(h,gMt,(Gpn(),Amt)),kfn(h,Npt,(Pfn(),vgt)),h.o.b=a.b,d<0&&(h.o.a=-d),NLn(f,(KQn(),_Rt)),l||(s.a=0);break;case 1:kfn(h,Xpt,(Zen(),ppt)),h.o.a=a.a,d<0&&(h.o.b=-d),NLn(f,(KQn(),KRt)),l||(s.b=a.b),s.b-=a.b;break;case 3:kfn(h,Xpt,(Zen(),dpt)),h.o.a=a.a,d<0&&(h.o.b=-d),NLn(f,(KQn(),yRt)),l||(s.b=0)}if(_R(f.n,s),kfn(h,WMt,s),t==rRt||t==aRt||t==cRt){if(w=0,t==rRt&&n.pf(YMt))switch(b.g){case 1:case 2:w=uG(n.of(YMt),17).a;break;case 3:case 4:w=-uG(n.of(YMt),17).a}else switch(b.g){case 4:case 2:w=c.b,t==aRt&&(w/=r.b);break;case 1:case 3:w=c.a,t==aRt&&(w/=r.a)}kfn(h,bmt,w)}return kfn(h,Fpt,b),h}function xJn(){function n(n){var t=this;this.dispatch=function(t){var e=t.data;switch(e.cmd){case"algorithms":var i=rmn((hZ(),new qw(new Fw(NFt.b))));n.postMessage({id:e.id,data:i});break;case"categories":var r=rmn((hZ(),new qw(new Fw(NFt.c))));n.postMessage({id:e.id,data:r});break;case"options":var c=rmn((hZ(),new qw(new Fw(NFt.d))));n.postMessage({id:e.id,data:c});break;case"register":OVn(e.algorithms),n.postMessage({id:e.id});break;case"layout":Vqn(e.graph,e.layoutOptions||{},e.options||{}),n.postMessage({id:e.id,data:e.graph})}},this.saveDispatch=function(e){try{t.dispatch(e)}catch(i){n.postMessage({id:e.data.id,error:i})}}}function e(t){var e=this;this.dispatcher=new n({postMessage:function(n){e.onmessage({data:n})}}),this.postMessage=function(n){setTimeout((function(){e.dispatcher.saveDispatch({data:n})}),0)}}if(mj(),typeof document===r2n&&typeof self!==r2n){var r=new n(self);self.onmessage=r.saveDispatch}else typeof t!==r2n&&t.exports&&(Object.defineProperty(i,"__esModule",{value:!0}),t.exports={default:e,Worker:e})}function RJn(n,t,e){var i,r,c,a,o,u,s,h,f,l;for(zsn(h=new gMn(e),t),kfn(h,(GYn(),rmt),t),h.o.a=t.g,h.o.b=t.f,h.n.a=t.i,h.n.b=t.j,kD(e.a,h),vJ(n.a,t,h),(0!=(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i||oM(gK(zDn(t,(jYn(),sMt)))))&&kfn(h,Cpt,(qx(),!0)),s=uG(oIn(e,Hpt),21),(f=uG(oIn(h,(jYn(),JMt)),101))==($Pn(),sRt)?kfn(h,JMt,uRt):f!=uRt&&s.Fc((r_n(),rpt)),l=0,i=uG(oIn(e,Byt),88),u=new DD((!t.c&&(t.c=new fV(wFt,t,9,9)),t.c));u.e!=u.i.gc();)o=uG(Zkn(u),123),(xA(zDn(r=R0(t),Syt))!==xA((yvn(),Fjt))||xA(zDn(r,Fyt))===xA((kvn(),lgt))||xA(zDn(r,Fyt))===xA((kvn(),hgt))||oM(gK(zDn(r,Cyt)))||xA(zDn(r,kyt))!==xA((Uvn(),tbt))||xA(zDn(r,yMt))===xA((THn(),Pjt))||xA(zDn(r,yMt))===xA((THn(),Cjt))||xA(zDn(r,MMt))===xA((MKn(),JTt))||xA(zDn(r,MMt))===xA((MKn(),ZTt)))&&!oM(gK(zDn(t,jyt)))&&Myn(o,imt,xwn(l++)),oM(gK(zDn(o,FMt)))||mQn(n,o,h,s,i,f);for(a=new DD((!t.n&&(t.n=new fV(lFt,t,1,7)),t.n));a.e!=a.i.gc();)!oM(gK(zDn(c=uG(Zkn(a),135),FMt)))&&c.a&&kD(h.b,own(c));return oM(gK(oIn(h,gyt)))&&s.Fc((r_n(),Zgt)),oM(gK(oIn(h,uMt)))&&(s.Fc((r_n(),ipt)),s.Fc(ept),kfn(h,JMt,uRt)),h}function KJn(n,t,i,r,c,a,o){var u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I,O,A;for(g=0,P=0,h=new Ww(n.b);h.ag&&(a&&(cL(T,w),cL(E,xwn(f.b-1)),kD(n.d,d),u.c.length=0),O=i.b,A+=w+t,w=0,l=e.Math.max(l,i.b+i.c+I)),mv(u.c,s),uyn(s,O,A),l=e.Math.max(l,O+I+i.c),w=e.Math.max(w,b),O+=I+t,d=s;if(Ohn(n.a,u),kD(n.d,uG(zq(u,u.c.length-1),163)),l=e.Math.max(l,r),(C=A+w+i.a)r.d.d+r.d.a?f.f.d=!0:(f.f.d=!0,f.f.a=!0))),i.b!=i.d.c&&(t=e);f&&(c=uG(cQ(n.f,a.d.i),60),t.bc.d.d+c.d.a?f.f.d=!0:(f.f.d=!0,f.f.a=!0))}for(o=new Fz(ix(qgn(b).a.Kc(),new h));hDn(o);)0!=(a=uG(N9(o),18)).a.b&&(t=uG(pR(a.a),8),a.d.j==(KQn(),yRt)&&((g=new Hqn(t,new MO(t.a,r.d.d),r,a)).f.a=!0,g.a=a.d,mv(d.c,g)),a.d.j==KRt&&((g=new Hqn(t,new MO(t.a,r.d.d+r.d.a),r,a)).f.d=!0,g.a=a.d,mv(d.c,g)))}return d}function GJn(n,t,e){var i,r,c,a,o,u,s,h,f,l;for(u=new Zm,f=t.length,a=Ffn(e),s=0;s=w&&(m>w&&(b.c.length=0,w=m),mv(b.c,a));0!=b.c.length&&(l=uG(zq(b,iMn(t,b.c.length)),131),P.a.Bc(l),l.s=d++,Vxn(l,E,M),b.c.length=0)}for(k=n.c.length+1,o=new Ww(n);o.aS.s&&(LQ(e),men(S.i,i),i.c>0&&(i.a=S,kD(S.t,i),i.b=T,kD(T.i,i)))}function zJn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E;for(w=new R7(t.b),m=new R7(t.b),l=new R7(t.b),M=new R7(t.b),d=new R7(t.b),y=Fkn(t,0);y.b!=y.d.c;)for(o=new Ww((v=uG(I6(y),12)).g);o.a0,g=v.g.c.length>0,s&&g?mv(l.c,v):s?mv(w.c,v):g&&mv(m.c,v);for(b=new Ww(w);b.av.nh()-h.b&&(b=v.nh()-h.b),w>v.oh()-h.d&&(w=v.oh()-h.d),f0){for(k=Fkn(n.f,0);k.b!=k.d.c;)uG(I6(k),10).p+=w-n.e;kAn(n),BY(n.f),O_n(n,r,d)}else{for(aq(n.f,d),d.p=r,n.e=e.Math.max(n.e,r),a=new Fz(ix(qgn(d).a.Kc(),new h));hDn(a);)(c=uG(N9(a),18)).c.i.c||c.c.i.k!=(zIn(),bbt)||(aq(n.f,c.c.i),c.c.i.p=r-1);n.c=r}else kAn(n),BY(n.f),r=0,hDn(new Fz(ix(qgn(d).a.Kc(),new h)))?O_n(n,r=(w=Pyn(w=0,d))+2,d):(aq(n.f,d),d.p=0,n.e=e.Math.max(n.e,0),n.b=uG(zq(n.d.b,0),30),n.c=0);for(0==n.f.b||kAn(n),n.d.a.c.length=0,v=new Zm,f=new Ww(n.d.b);f.a=48&&t<=57))throw hv(new CM(rZn((t$(),Nit))));for(i=t-48;r=48&&t<=57;)if((i=10*i+t-48)<0)throw hv(new CM(rZn((t$(),Rit))));if(e=i,44==t){if(r>=n.j)throw hv(new CM(rZn((t$(),Dit))));if((t=VJ(n.i,r++))>=48&&t<=57){for(e=t-48;r=48&&t<=57;)if((e=10*e+t-48)<0)throw hv(new CM(rZn((t$(),Rit))));if(i>e)throw hv(new CM(rZn((t$(),xit))))}else e=-1}if(125!=t)throw hv(new CM(rZn((t$(),$it))));n.bm(r)?(QYn(),QYn(),c=new n8(9,c),n.d=r+1):(QYn(),QYn(),c=new n8(3,c),n.d=r),c.Om(i),c.Nm(e),EYn(n)}}return c}function iYn(n){var t,e,i;switch(e=uG(oIn(n,(GYn(),Hpt)),21),t=aN(klt),uG(oIn(n,(jYn(),rMt)),346)==(Own(),Ixt)&&gsn(t,ylt),oM(gK(oIn(n,eMt)))?Aq(t,(uIn(),Tlt),(zYn(),Iwt)):Aq(t,(uIn(),Elt),(zYn(),Iwt)),null!=oIn(n,(K7(),jNt))&&gsn(t,Mlt),(oM(gK(oIn(n,fMt)))||oM(gK(oIn(n,iMt))))&&wz(t,(uIn(),Plt),(zYn(),Ubt)),uG(oIn(n,Byt),88).g){case 2:case 3:case 4:wz(Aq(t,(uIn(),Tlt),(zYn(),qbt)),Plt,Gbt)}switch(e.Hc((r_n(),Zgt))&&wz(Aq(Aq(t,(uIn(),Tlt),(zYn(),Hbt)),Slt,_bt),Plt,Bbt),xA(oIn(n,yMt))!==xA((THn(),$jt))&&Aq(t,(uIn(),Elt),(zYn(),ywt)),e.Hc(apt)&&(Aq(t,(uIn(),Tlt),(zYn(),Pwt)),Aq(t,jlt,Ewt),Aq(t,Elt,Swt)),xA(oIn(n,vyt))!==xA((RIn(),Vgt))&&xA(oIn(n,Vyt))!==xA((_gn(),sxt))&&wz(t,(uIn(),Plt),(zYn(),rwt)),oM(gK(oIn(n,aMt)))&&Aq(t,(uIn(),Elt),(zYn(),iwt)),oM(gK(oIn(n,Ryt)))&&Aq(t,(uIn(),Elt),(zYn(),Dwt)),CRn(n)&&(i=(xA(oIn(n,rMt))===xA(Ixt)?uG(oIn(n,Oyt),299):uG(oIn(n,Ayt),299))==(ihn(),fpt)?(zYn(),jwt):(zYn(),Kwt),Aq(t,(uIn(),Slt),i)),uG(oIn(n,qTt),388).g){case 1:Aq(t,(uIn(),Slt),(zYn(),xwt));break;case 2:wz(Aq(Aq(t,(uIn(),Elt),(zYn(),xbt)),Slt,Rbt),Plt,Kbt)}return xA(oIn(n,Syt))!==xA((yvn(),Fjt))&&Aq(t,(uIn(),Elt),(zYn(),Rwt)),t}function rYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;if(PV(n.a,t)){if(cS(uG(cQ(n.a,t),49),e))return 1}else vJ(n.a,t,new ek);if(PV(n.a,e)){if(cS(uG(cQ(n.a,e),49),t))return-1}else vJ(n.a,e,new ek);if(PV(n.e,t)){if(cS(uG(cQ(n.e,t),49),e))return-1}else vJ(n.e,t,new ek);if(PV(n.e,e)){if(cS(uG(cQ(n.a,e),49),t))return 1}else vJ(n.e,e,new ek);if(n.c==(yvn(),_jt)||!vR(t,(GYn(),imt))||!vR(e,(GYn(),imt))){for(f=null,s=new Ww(t.j);s.a(a=_Sn(n,e))?uHn(n,t,e):uHn(n,e,t),ra?1:0}return(i=uG(oIn(t,(GYn(),imt)),17).a)>(c=uG(oIn(e,imt),17).a)?uHn(n,t,e):uHn(n,e,t),ic?1:0}function cYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d;if(null==e)return null;if(n.a!=t.jk())throw hv(new vM(tet+t.xe()+eet));if(F$(t,469)){if(!(d=y_n(uG(t,685),e)))throw hv(new vM(iet+e+"' is not a valid enumerator of '"+t.xe()+"'"));return d}switch(tdn((gAn(),kBt),t).Nl()){case 2:e=yXn(e,!1);break;case 3:e=yXn(e,!0)}if(i=tdn(kBt,t).Jl())return i.jk().wi().ti(i,e);if(f=tdn(kBt,t).Ll()){for(d=new Zm,s=0,h=(u=Fln(e)).length;s1)for(b=new Zx((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a));b.e!=b.i.gc();)$Sn(b);for(d=C,C>k+v?d=k+v:Cy+w?g=y+w:Ik-v&&dy-w&&gC+P?T=C+P:kI+M?j=I+M:yC-P&&TI-M&&ji&&(f=i-1),(l=N+uRn(t,24)*z0n*h-h/2)<0?l=1:l>r&&(l=r-1),gj(),Scn(c=new ns,f),pcn(c,l),ttn((!o.a&&(o.a=new MD(eFt,o,5)),o.a),c)}function lYn(n){hP(n,new hCn(FT(DT(KT(RT(new bu,ant),"ELK Rectangle Packing"),"Algorithm for packing of unconnected boxes, i.e. graphs without edges. The given order of the boxes is always preserved and the main reading direction of the boxes is left to right. The algorithm is divided into two phases. One phase approximates the width in which the rectangles can be placed. The next phase places the rectangles in rows using the previously calculated width as bounding width and bundles rectangles with a similar height in blocks. A compaction step reduces the size of the drawing. Finally, the rectangles are expanded to fill their bounding box and eliminate empty unused spaces."),new _o))),U4(n,ant,R3n,1.3),U4(n,ant,d4n,(qx(),!1)),U4(n,ant,K3n,fAt),U4(n,ant,o4n,15),U4(n,ant,r9n,Jkn(WOt)),U4(n,ant,p4n,Jkn(eAt)),U4(n,ant,x4n,Jkn(rAt)),U4(n,ant,g4n,Jkn(cAt)),U4(n,ant,m4n,Jkn(tAt)),U4(n,ant,w4n,Jkn(aAt)),U4(n,ant,v4n,Jkn(lAt)),U4(n,ant,J7n,Jkn(pAt)),U4(n,ant,Y7n,Jkn(gAt)),U4(n,ant,Q7n,Jkn(vAt)),U4(n,ant,W7n,Jkn(mAt)),U4(n,ant,Z7n,Jkn(sAt)),U4(n,ant,nnt,Jkn(uAt)),U4(n,ant,tnt,Jkn(oAt)),U4(n,ant,ent,Jkn(dAt)),U4(n,ant,f4n,Jkn(YOt)),U4(n,ant,g9n,Jkn(ZOt)),U4(n,ant,z7n,Jkn(JOt)),U4(n,ant,X7n,Jkn(QOt)),U4(n,ant,V7n,Jkn(nAt)),U4(n,ant,q7n,Jkn(wAt))}function bYn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C;if(pXn(),j=n.e,w=n.d,r=n.a,0==j)switch(t){case 0:return"0";case 1:return N0n;case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return(M=new WM).a+=t<0?"0E+":"0E",M.a+=-t,M.a}if(k=Inn(JHt,N1n,28,1+(v=10*w+1+7),15,1),e=v,1==w)if((o=r[0])<0){C=E3(o,L0n);do{d=C,C=bSn(C,10),k[--e]=48+pz($gn(d,Ngn(C,10)))&D1n}while(0!=dwn(C,0))}else{C=o;do{d=C,C=C/10|0,k[--e]=d-10*C+48&D1n}while(0!=C)}else{qGn(r,0,S=Inn(YHt,W1n,28,w,15,1),0,P=w);n:for(;;){for(T=0,s=P-1;s>=0;s--)p=JPn(Lgn(Nz(T,32),E3(S[s],L0n))),S[s]=pz(p),T=pz($z(p,32));m=pz(T),g=e;do{k[--e]=48+m%10&D1n}while(0!=(m=m/10|0)&&0!=e);for(i=9-g+e,u=0;u0;u++)k[--e]=48;for(f=P-1;0==S[f];f--)if(0==f)break n;P=f+1}for(;48==k[e];)++e}if(b=j<0,a=v-e-t-1,0==t)return b&&(k[--e]=45),mvn(k,e,v-e);if(t>0&&a>=-6){if(a>=0){for(h=e+a,l=v-1;l>=h;l--)k[l+1]=k[l];return k[++h]=46,b&&(k[--e]=45),mvn(k,e,v-e+1)}for(f=2;f<1-a;f++)k[--e]=48;return k[--e]=46,k[--e]=48,b&&(k[--e]=45),mvn(k,e,v-e)}return E=e+1,c=v,y=new QM,b&&(y.a+="-"),c-E>=1?(jQ(y,k[e]),y.a+=".",y.a+=mvn(k,e+1,v-e-1)):y.a+=mvn(k,e,v-e),y.a+="E",a>0&&(y.a+="+"),y.a+=""+a,y.a}function wYn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;switch(n.c=t,n.g=new Ym,vP(),Apn(new Ad(new Vy(n.c))),m=mK(zDn(n.c,(fIn(),dLt))),o=uG(zDn(n.c,pLt),324),k=uG(zDn(n.c,mLt),437),c=uG(zDn(n.c,hLt),490),v=uG(zDn(n.c,gLt),438),n.j=uM(pK(zDn(n.c,vLt))),a=n.a,o.g){case 0:a=n.a;break;case 1:a=n.b;break;case 2:a=n.i;break;case 3:a=n.e;break;case 4:a=n.f;break;default:throw hv(new vM(lnt+(null!=o.f?o.f:""+o.g)))}if(n.d=new i0(a,k,c),kfn(n.d,(rsn(),Oht),gK(zDn(n.c,lLt))),n.d.c=oM(gK(zDn(n.c,fLt))),0==wZ(n.c).i)return n.d;for(h=new DD(wZ(n.c));h.e!=h.i.gc();){for(l=(s=uG(Zkn(h),27)).g/2,f=s.f/2,y=new MO(s.i+l,s.j+f);PV(n.g,y);)KR(y,(e.Math.random()-.5)*t4n,(e.Math.random()-.5)*t4n);w=uG(zDn(s,(XYn(),$$t)),140),d=new G0(y,new gY(y.a-l-n.j/2-w.b,y.b-f-n.j/2-w.d,s.g+n.j+(w.b+w.c),s.f+n.j+(w.d+w.a))),kD(n.d.i,d),vJ(n.g,y,new WO(d,s))}switch(v.g){case 0:if(null==m)n.d.d=uG(zq(n.d.i,0),68);else for(p=new Ww(n.d.i);p.a0?S+1:1);for(a=new Ww(y.g);a.a0?S+1:1)}0==n.c[s]?aq(n.e,d):0==n.a[s]&&aq(n.f,d),++s}for(w=-1,b=1,f=new Zm,n.d=uG(oIn(t,(GYn(),dmt)),234);A>0;){for(;0!=n.e.b;)C=uG(tG(n.e),10),n.b[C.p]=w--,eUn(n,C),--A;for(;0!=n.f.b;)I=uG(tG(n.f),10),n.b[I.p]=b++,eUn(n,I),--A;if(A>0){for(l=j1n,m=new Ww(v);m.a=l&&(k>l&&(f.c.length=0,l=k),mv(f.c,d));h=n.sg(f),n.b[h.p]=b++,eUn(n,h),--A}}for(P=v.c.length+1,s=0;sn.b[O]&&(pqn(i,!0),kfn(t,Lpt,(qx(),!0)));n.a=null,n.c=null,n.b=null,BY(n.f),BY(n.e),e.Vg()}function pYn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;for(M=uG(zrn((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a),0),166),f=new Uk,y=new Ym,T=sGn(M),VAn(y.f,M,T),b=new Ym,r=new lS,d=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[(!t.d&&(t.d=new f_(aFt,t,8,5)),t.d),(!t.e&&(t.e=new f_(aFt,t,7,4)),t.e)])));hDn(d);){if(w=uG(N9(d),74),1!=(!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i)throw hv(new vM(Ptt+(!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i));w!=n&&(s8(r,p=uG(zrn((!w.a&&(w.a=new fV(oFt,w,6,6)),w.a),0),166),r.c.b,r.c),(g=uG(DA(FX(y.f,p)),13))||(g=sGn(p),VAn(y.f,p,g)),l=i?YF(new eN(uG(zq(T,T.c.length-1),8)),uG(zq(g,g.c.length-1),8)):YF(new eN((u3(0,T.c.length),uG(T.c[0],8))),(u3(0,g.c.length),uG(g.c[0],8))),VAn(b.f,p,l))}if(0!=r.b)for(m=uG(zq(T,i?T.c.length-1:0),8),h=1;h1&&s8(f,m,f.c.b,f.c),yrn(c)));m=v}return f}function mYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S;for(e.Ug(o7n,1),S=uG(l8(JJ(new fX(null,new h3(t,16)),new wo),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),h=uG(l8(JJ(new fX(null,new h3(t,16)),new Lp(t)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),15),w=uG(l8(JJ(new fX(null,new h3(t,16)),new Ap(t)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),15),d=Inn(lPt,z9n,40,t.gc(),0,1),a=0;a=0&&E=0&&!d[b]){d[b]=r,h.gd(o),--o;break}if((b=E-l)=0&&!d[b]){d[b]=r,h.gd(o),--o;break}}for(w.jd(new go),u=d.length-1;u>=0;u--)d[u]||w.dc()||(d[u]=uG(w.Xb(0),40),w.gd(0));for(s=0;s=0;u--)aq(e,(u3(u,a.c.length),uG(a.c[u],8)));return e}function kYn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k;for(v=uM(pK(zDn(t,(lBn(),POt)))),b=uM(pK(zDn(t,EOt))),l=uM(pK(zDn(t,MOt))),Non((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a)),p=ozn((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a),v,n.b),g=0;gl&&uEn((u3(l,t.c.length),uG(t.c[l],186)),h),h=null;t.c.length>l&&0==(u3(l,t.c.length),uG(t.c[l],186)).a.c.length;)men(t,(u3(l,t.c.length),t.c[l]));if(!h){--a;continue}if(!oM(gK(uG(zq(h.b,0),27).of((S_n(),nAt))))&&BUn(t,w,c,h,g,e,l,i)){d=!0;continue}if(g){if(b=w.b,f=h.f,!oM(gK(uG(zq(h.b,0),27).of(nAt)))&&EVn(t,w,c,h,e,l,i,r)){if(d=!0,b=n.j)return n.a=-1,void(n.c=1);if(t=VJ(n.i,n.d++),n.a=t,1!=n.b){switch(t){case 124:i=2;break;case 42:i=3;break;case 43:i=4;break;case 63:i=5;break;case 41:i=7;break;case 46:i=8;break;case 91:i=9;break;case 94:i=11;break;case 36:i=12;break;case 40:if(i=6,n.d>=n.j)break;if(63!=VJ(n.i,n.d))break;if(++n.d>=n.j)throw hv(new CM(rZn((t$(),iit))));switch(t=VJ(n.i,n.d++)){case 58:i=13;break;case 61:i=14;break;case 33:i=15;break;case 91:i=19;break;case 62:i=18;break;case 60:if(n.d>=n.j)throw hv(new CM(rZn((t$(),iit))));if(61==(t=VJ(n.i,n.d++)))i=16;else{if(33!=t)throw hv(new CM(rZn((t$(),rit))));i=17}break;case 35:for(;n.d=n.j)throw hv(new CM(rZn((t$(),eit))));n.a=VJ(n.i,n.d++);break;default:i=0}n.c=i}else{switch(t){case 92:if(i=10,n.d>=n.j)throw hv(new CM(rZn((t$(),eit))));n.a=VJ(n.i,n.d++);break;case 45:!(512&~n.e)&&n.df&&(f=d.e.a+d.f.a+b),l=f+u.f.a;break;case 4:f=g.b-b-u.f.b,d.e.b-b-u.f.bf&&(f=d.e.b+d.f.b+b),l=f+u.f.b}else if(d)switch(r.g){case 2:l=(f=d.e.a-b-u.f.a)+u.f.a;break;case 1:l=(f=d.e.a+d.f.a+b)+u.f.a;break;case 4:l=(f=d.e.b-b-u.f.b)+u.f.b;break;case 3:l=(f=d.e.b+d.f.b+b)+u.f.b}xA(oIn(t,uCt))===xA((Pln(),wPt))?(c=f,a=l,null!=(o=lln(JJ(new fX(null,new h3(n.a,16)),new GI(c,a)))).a?r==(xdn(),JDt)||r==YDt?u.e.a=f:u.e.b=f:null!=(o=r==(xdn(),JDt)||r==nxt?lln(JJ(Wrn(new fX(null,new h3(n.a,16))),new Ep(c))):lln(JJ(Wrn(new fX(null,new h3(n.a,16))),new Sp(c)))).a&&(r==JDt||r==YDt?u.e.a=uM(pK((MK(null!=o.a),uG(o.a,42)).a)):u.e.b=uM(pK((MK(null!=o.a),uG(o.a,42)).a))),null!=o.a&&(h=Ten(n.a,(MK(null!=o.a),o.a),0))>0&&h!=uG(oIn(u,ACt),17).a&&(kfn(u,MPt,(qx(),!0)),kfn(u,ACt,xwn(h)))):r==(xdn(),JDt)||r==YDt?u.e.a=f:u.e.b=f}e.Vg()}}function PYn(n){var t,e,i,r,c,a,o,u;for(n.b=1,EYn(n),t=null,0==n.c&&94==n.a?(EYn(n),QYn(),QYn(),HFn(t=new K3(4),0,zct),a=new K3(4)):(QYn(),QYn(),a=new K3(4)),r=!0;1!=(u=n.c);){if(0==u&&93==n.a&&!r){t&&(lWn(t,a),a=t);break}if(e=n.a,i=!1,10==u)switch(e){case 100:case 68:case 119:case 87:case 115:case 83:TXn(a,yUn(e)),i=!0;break;case 105:case 73:case 99:case 67:TXn(a,yUn(e)),(e=-1)<0&&(i=!0);break;case 112:case 80:if(!(o=PNn(n,e)))throw hv(new CM(rZn((t$(),git))));TXn(a,o),i=!0;break;default:e=R_n(n)}else if(24==u&&!r){if(t&&(lWn(t,a),a=t),lWn(a,PYn(n)),0!=n.c||93!=n.a)throw hv(new CM(rZn((t$(),kit))));break}if(EYn(n),!i){if(0==u){if(91==e)throw hv(new CM(rZn((t$(),yit))));if(93==e)throw hv(new CM(rZn((t$(),Mit))));if(45==e&&!r&&93!=n.a)throw hv(new CM(rZn((t$(),Tit))))}if(0!=n.c||45!=n.a||45==e&&r)HFn(a,e,e);else{if(EYn(n),1==(u=n.c))throw hv(new CM(rZn((t$(),mit))));if(0==u&&93==n.a)HFn(a,e,e),HFn(a,45,45);else{if(0==u&&93==n.a||24==u)throw hv(new CM(rZn((t$(),Tit))));if(c=n.a,0==u){if(91==c)throw hv(new CM(rZn((t$(),yit))));if(93==c)throw hv(new CM(rZn((t$(),Mit))));if(45==c)throw hv(new CM(rZn((t$(),Tit))))}else 10==u&&(c=R_n(n));if(EYn(n),e>c)throw hv(new CM(rZn((t$(),Sit))));HFn(a,e,c)}}}r=!1}if(1==n.c)throw hv(new CM(rZn((t$(),mit))));return pxn(a),uzn(a),n.b=0,EYn(n),a}function CYn(n,t,e){var i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k,y,M;if(e.Ug("Coffman-Graham Layering",1),0!=t.a.c.length){for(M=uG(oIn(t,(jYn(),wMt)),17).a,u=0,a=0,b=new Ww(t.a);b.a=M||!cvn(m,i))&&(i=CJ(t,f)),a2(m,i),c=new Fz(ix(qgn(m).a.Kc(),new h));hDn(c);)r=uG(N9(c),18),n.a[r.p]||(g=r.c.i,--n.e[g.p],0==n.e[g.p]&&kG(_Cn(w,g),D0n));for(s=f.c.length-1;s>=0;--s)kD(t.b,(u3(s,f.c.length),uG(f.c[s],30)));t.a.c.length=0,e.Vg()}else e.Vg()}function IYn(n,t){var e,i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k;k=!1;do{for(k=!1,c=t?new Lw(n.a.b).a.gc()-2:1;t?c>=0:cuG(oIn(g,imt),17).a)&&(v=!1);if(v){for(o=t?c+1:c-1,a=!1,m=!0,i=!1,s=Fkn(W6(n.a,xwn(o)),0);s.b!=s.d.c;)vR(u=uG(I6(s),10),imt)?u.p!=f.p&&(a|=t?uG(oIn(u,imt),17).auG(oIn(f,imt),17).a,m=!1):!a&&m&&u.k==(zIn(),bbt)&&(i=!0,(l=t?uG(N9(new Fz(ix(qgn(u).a.Kc(),new h))),18).c.i:uG(N9(new Fz(ix(Xgn(u).a.Kc(),new h))),18).d.i)==f&&(e=t?uG(N9(new Fz(ix(Xgn(u).a.Kc(),new h))),18).d.i:uG(N9(new Fz(ix(qgn(u).a.Kc(),new h))),18).c.i,(t?uG(ER(n.a,e),17).a-uG(ER(n.a,l),17).a:uG(ER(n.a,l),17).a-uG(ER(n.a,e),17).a)<=2&&(m=!1)));if(i&&m&&(e=t?uG(N9(new Fz(ix(Xgn(f).a.Kc(),new h))),18).d.i:uG(N9(new Fz(ix(qgn(f).a.Kc(),new h))),18).c.i,(t?uG(ER(n.a,e),17).a-uG(ER(n.a,f),17).a:uG(ER(n.a,f),17).a-uG(ER(n.a,e),17).a)<=2&&e.k==(zIn(),dbt)&&(m=!1)),a||m){for(d=SRn(n,f,t);0!=d.a.gc();)w=uG(d.a.ec().Kc().Pb(),10),d.a.Bc(w),Qon(d,SRn(n,w,t));--b,k=!0}}}}while(k)}function OYn(n){Hxn(n.c,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#decimal"])),Hxn(n.d,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#integer"])),Hxn(n.e,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#boolean"])),Hxn(n.f,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EBoolean",Bet,"EBoolean:Object"])),Hxn(n.i,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#byte"])),Hxn(n.g,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#hexBinary"])),Hxn(n.j,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EByte",Bet,"EByte:Object"])),Hxn(n.n,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EChar",Bet,"EChar:Object"])),Hxn(n.t,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#double"])),Hxn(n.u,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EDouble",Bet,"EDouble:Object"])),Hxn(n.F,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#float"])),Hxn(n.G,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EFloat",Bet,"EFloat:Object"])),Hxn(n.I,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#int"])),Hxn(n.J,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EInt",Bet,"EInt:Object"])),Hxn(n.N,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#long"])),Hxn(n.O,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"ELong",Bet,"ELong:Object"])),Hxn(n.Z,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#short"])),Hxn(n.$,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EShort",Bet,"EShort:Object"])),Hxn(n._,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#string"]))}function AYn(n,t,e,i,r,c,a){var o,u,s,h,f,l,b,w;return l=uG(i.a,17).a,b=uG(i.b,17).a,f=n.b,w=n.c,o=0,h=0,t==(xdn(),JDt)||t==YDt?(h=$I(jdn(ZJ(YJ(new fX(null,new h3(e.b,16)),new mo),new Ya))),f.e.b+f.f.b/2>h?(s=++b,o=uM(pK(yx(Wz(YJ(new fX(null,new h3(e.b,16)),new pO(r,s)),new Za))))):(u=++l,o=uM(pK(yx(Qz(YJ(new fX(null,new h3(e.b,16)),new mO(r,u)),new no)))))):(h=$I(jdn(ZJ(YJ(new fX(null,new h3(e.b,16)),new ro),new Ja))),f.e.a+f.f.a/2>h?(s=++b,o=uM(pK(yx(Wz(YJ(new fX(null,new h3(e.b,16)),new dO(r,s)),new to))))):(u=++l,o=uM(pK(yx(Qz(YJ(new fX(null,new h3(e.b,16)),new gO(r,u)),new eo)))))),t==JDt?(cL(n.a,new MO(uM(pK(oIn(f,(OQn(),DPt))))-r,o)),cL(n.a,new MO(w.e.a+w.f.a+r+c,o)),cL(n.a,new MO(w.e.a+w.f.a+r+c,w.e.b+w.f.b/2)),cL(n.a,new MO(w.e.a+w.f.a,w.e.b+w.f.b/2))):t==YDt?(cL(n.a,new MO(uM(pK(oIn(f,(OQn(),$Pt))))+r,f.e.b+f.f.b/2)),cL(n.a,new MO(f.e.a+f.f.a+r,o)),cL(n.a,new MO(w.e.a-r-c,o)),cL(n.a,new MO(w.e.a-r-c,w.e.b+w.f.b/2)),cL(n.a,new MO(w.e.a,w.e.b+w.f.b/2))):t==nxt?(cL(n.a,new MO(o,uM(pK(oIn(f,(OQn(),DPt))))-r)),cL(n.a,new MO(o,w.e.b+w.f.b+r+c)),cL(n.a,new MO(w.e.a+w.f.a/2,w.e.b+w.f.b+r+c)),cL(n.a,new MO(w.e.a+w.f.a/2,w.e.b+w.f.b+r))):(0==n.a.b||(uG(pR(n.a),8).b=uM(pK(oIn(f,(OQn(),$Pt))))+r*uG(a.b,17).a),cL(n.a,new MO(o,uM(pK(oIn(f,(OQn(),$Pt))))+r*uG(a.b,17).a)),cL(n.a,new MO(o,w.e.b-r*uG(a.a,17).a-c))),new WO(xwn(l),xwn(b))}function LYn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b;if(a=!0,f=null,i=null,r=null,t=!1,b=HFt,s=null,c=null,(u=jkn(n,o=0,YFt,ZFt))=0&&m_(n.substr(o,2),"//")?(Knn(o+=2,u=jkn(n,o,n_t,t_t),n.length),i=n.substr(o,u-o),o=u):null==f||o!=n.length&&(s3(o,n.length),47==n.charCodeAt(o))||(a=!1,-1==(u=cx(n,$Cn(35),o))&&(u=n.length),Knn(o,u,n.length),i=n.substr(o,u-o),o=u);if(!e&&o0&&58==VJ(h,h.length-1)&&(r=h,o=u)),ouxn(c))&&(f=c);for(!f&&(u3(0,d.c.length),f=uG(d.c[0],185)),w=new Ww(t.b);w.al&&(P=0,C+=f+T,f=0),iUn(y,o,P,C),t=e.Math.max(t,P+M.a),f=e.Math.max(f,M.b),P+=M.a+T;for(k=new Ym,i=new Ym,E=new Ww(n);E.a=-1900?1:0,JA(n,e>=4?Uhn(cT($ot,1),zZn,2,6,[Q1n,J1n])[a]:Uhn(cT($ot,1),zZn,2,6,["BC","AD"])[a]);break;case 121:Kkn(n,e,i);break;case 77:nUn(n,e,i);break;case 107:Fen(n,0==(o=r.q.getHours())?24:o,e);break;case 83:PRn(n,e,r);break;case 69:u=i.q.getDay(),JA(n,5==e?Uhn(cT($ot,1),zZn,2,6,["S","M","T","W","T","F","S"])[u]:4==e?Uhn(cT($ot,1),zZn,2,6,[Y1n,Z1n,n0n,t0n,e0n,i0n,r0n])[u]:Uhn(cT($ot,1),zZn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[u]);break;case 97:r.q.getHours()>=12&&r.q.getHours()<24?JA(n,Uhn(cT($ot,1),zZn,2,6,["AM","PM"])[1]):JA(n,Uhn(cT($ot,1),zZn,2,6,["AM","PM"])[0]);break;case 104:Fen(n,0==(s=r.q.getHours()%12)?12:s,e);break;case 75:Fen(n,r.q.getHours()%12,e);break;case 72:Fen(n,r.q.getHours(),e);break;case 99:h=i.q.getDay(),5==e?JA(n,Uhn(cT($ot,1),zZn,2,6,["S","M","T","W","T","F","S"])[h]):4==e?JA(n,Uhn(cT($ot,1),zZn,2,6,[Y1n,Z1n,n0n,t0n,e0n,i0n,r0n])[h]):3==e?JA(n,Uhn(cT($ot,1),zZn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[h]):Fen(n,h,1);break;case 76:f=i.q.getMonth(),5==e?JA(n,Uhn(cT($ot,1),zZn,2,6,["J","F","M","A","M","J","J","A","S","O","N","D"])[f]):4==e?JA(n,Uhn(cT($ot,1),zZn,2,6,[x1n,R1n,K1n,F1n,_1n,B1n,H1n,U1n,G1n,q1n,X1n,z1n])[f]):3==e?JA(n,Uhn(cT($ot,1),zZn,2,6,["Jan","Feb","Mar","Apr",_1n,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])[f]):Fen(n,f+1,e);break;case 81:l=i.q.getMonth()/3|0,JA(n,e<4?Uhn(cT($ot,1),zZn,2,6,["Q1","Q2","Q3","Q4"])[l]:Uhn(cT($ot,1),zZn,2,6,["1st quarter","2nd quarter","3rd quarter","4th quarter"])[l]);break;case 100:Fen(n,i.q.getDate(),e);break;case 109:Fen(n,r.q.getMinutes(),e);break;case 115:Fen(n,r.q.getSeconds(),e);break;case 122:JA(n,e<4?c.c[0]:c.c[1]);break;case 118:JA(n,c.b);break;case 90:JA(n,e<3?GLn(c):3==e?rNn(c):cNn(c.a));break;default:return!1}return!0}function FYn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C;if(iHn(t),u=uG(zrn((!t.b&&(t.b=new f_(cFt,t,4,7)),t.b),0),84),h=uG(zrn((!t.c&&(t.c=new f_(cFt,t,5,8)),t.c),0),84),o=lCn(u),s=lCn(h),a=0==(!t.a&&(t.a=new fV(oFt,t,6,6)),t.a).i?null:uG(zrn((!t.a&&(t.a=new fV(oFt,t,6,6)),t.a),0),166),M=uG(cQ(n.a,o),10),S=uG(cQ(n.a,s),10),T=null,P=null,F$(u,193)&&(F$(y=uG(cQ(n.a,u),305),12)?T=uG(y,12):F$(y,10)&&(M=uG(y,10),T=uG(zq(M.j,0),12))),F$(h,193)&&(F$(E=uG(cQ(n.a,h),305),12)?P=uG(E,12):F$(E,10)&&(S=uG(E,10),P=uG(zq(S.j,0),12))),!M||!S)throw hv(new EM("The source or the target of edge "+t+" could not be found. This usually happens when an edge connects a node laid out by ELK Layered to a node in another level of hierarchy laid out by either another instance of ELK Layered or another layout algorithm alltogether. The former can be solved by setting the hierarchyHandling option to INCLUDE_CHILDREN."));for(zsn(d=new UZ,t),kfn(d,(GYn(),rmt),t),kfn(d,(jYn(),bMt),null),b=uG(oIn(i,Hpt),21),M==S&&b.Fc((r_n(),opt)),T||(can(),k=Wjt,j=null,a&&sN(uG(oIn(M,JMt),101))&&($5(j=new MO(a.j,a.k),s0(t)),Q8(j,e),Ern(s,o)&&(k=Vjt,JF(j,M.n))),T=LXn(M,j,k,i)),P||(can(),k=Vjt,C=null,a&&sN(uG(oIn(S,JMt),101))&&($5(C=new MO(a.b,a.c),s0(t)),Q8(C,e)),P=LXn(S,C,k,HQ(S))),c2(d,T),u2(d,P),(T.e.c.length>1||T.g.c.length>1||P.e.c.length>1||P.g.c.length>1)&&b.Fc((r_n(),ept)),l=new DD((!t.n&&(t.n=new fV(lFt,t,1,7)),t.n));l.e!=l.i.gc();)if(!oM(gK(zDn(f=uG(Zkn(l),135),FMt)))&&f.a)switch(g=own(f),kD(d.b,g),uG(oIn(g,Xyt),278).g){case 1:case 2:b.Fc((r_n(),npt));break;case 0:b.Fc((r_n(),Ygt)),kfn(g,Xyt,(Zrn(),ixt))}if(c=uG(oIn(i,Kyt),322),p=uG(oIn(i,$Mt),323),r=c==(jan(),Ydt)||p==(pyn(),kjt),a&&0!=(!a.a&&(a.a=new MD(eFt,a,5)),a.a).i&&r){for(m=COn(a),w=new Uk,v=Fkn(m,0);v.b!=v.d.c;)aq(w,new eN(uG(I6(v),8)));kfn(d,cmt,w)}return d}function _Yn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I;for(j=0,E=0,M=new Ym,k=uG(yx(Wz(YJ(new fX(null,new h3(n.b,16)),new io),new fo)),17).a+1,T=Inn(YHt,W1n,28,k,15,1),d=Inn(YHt,W1n,28,k,15,1),w=0;w1)for(o=P+1;ou.b.e.b*(1-g)+u.c.e.b*g));b++);if(y.gc()>0){if(C=0==u.a.b?D$(u.b.e):uG(pR(u.a),8),m=JF(D$(uG(y.Xb(y.gc()-1),40).e),uG(y.Xb(y.gc()-1),40).f),f=JF(D$(uG(y.Xb(0),40).e),uG(y.Xb(0),40).f),b>=y.gc()-1&&C.b>m.b&&u.c.e.b>m.b)continue;if(b<=0&&C.bu.b.e.a*(1-g)+u.c.e.a*g));b++);if(y.gc()>0){if(C=0==u.a.b?D$(u.b.e):uG(pR(u.a),8),m=JF(D$(uG(y.Xb(y.gc()-1),40).e),uG(y.Xb(y.gc()-1),40).f),f=JF(D$(uG(y.Xb(0),40).e),uG(y.Xb(0),40).f),b>=y.gc()-1&&C.a>m.a&&u.c.e.a>m.a)continue;if(b<=0&&C.a=uM(pK(oIn(n,(OQn(),CPt))))&&++E):(l.f&&l.d.e.a<=uM(pK(oIn(n,(OQn(),PPt))))&&++j,l.g&&l.c.e.a+l.c.f.a>=uM(pK(oIn(n,(OQn(),SPt))))&&++E)}else 0==v?hNn(u):v<0&&(++T[P],++d[I],j=uG((S=AYn(u,t,n,new WO(xwn(j),xwn(E)),e,i,new WO(xwn(d[I]),xwn(T[P])))).a,17).a,E=uG(S.b,17).a)}function BYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;if(i=t,u=e,n.b&&i.j==(KQn(),_Rt)&&u.j==(KQn(),_Rt)&&(m=i,i=u,u=m),PV(n.a,i)){if(cS(uG(cQ(n.a,i),49),u))return 1}else vJ(n.a,i,new ek);if(PV(n.a,u)){if(cS(uG(cQ(n.a,u),49),i))return-1}else vJ(n.a,u,new ek);if(PV(n.d,i)){if(cS(uG(cQ(n.d,i),49),u))return-1}else vJ(n.d,i,new ek);if(PV(n.d,u)){if(cS(uG(cQ(n.a,u),49),i))return 1}else vJ(n.d,u,new ek);if(i.j!=u.j)return-1==(p=bN(i.j,u.j))?hHn(n,u,i):hHn(n,i,u),p;if(0!=i.e.c.length&&0!=u.e.c.length){if(n.b&&0!=(p=Dbn(i,u)))return-1==p?hHn(n,u,i):1==p&&hHn(n,i,u),p;if((c=uG(zq(i.e,0),18).c.i)==(h=uG(zq(u.e,0),18).c.i))return(r=uG(oIn(uG(zq(i.e,0),18),(GYn(),imt)),17).a)>(s=uG(oIn(uG(zq(u.e,0),18),imt),17).a)?hHn(n,i,u):hHn(n,u,i),rs?1:0;for(d=0,g=(w=n.c).length;d(s=uG(oIn(l,imt),17).a)?hHn(n,i,u):hHn(n,u,i),rs?1:0):n.b&&0!=(p=Dbn(i,u))?(-1==p?hHn(n,u,i):1==p&&hHn(n,i,u),p):(a=0,f=0,vR(uG(zq(i.g,0),18),imt)&&(a=uG(oIn(uG(zq(i.g,0),18),imt),17).a),vR(uG(zq(u.g,0),18),imt)&&(f=uG(oIn(uG(zq(i.g,0),18),imt),17).a),o&&o==l?oM(gK(oIn(uG(zq(i.g,0),18),pmt)))&&!oM(gK(oIn(uG(zq(u.g,0),18),pmt)))?(hHn(n,i,u),1):!oM(gK(oIn(uG(zq(i.g,0),18),pmt)))&&oM(gK(oIn(uG(zq(u.g,0),18),pmt)))?(hHn(n,u,i),-1):(a>f?hHn(n,i,u):hHn(n,u,i),af?1:0):(n.f&&(n.f._b(o)&&(a=uG(n.f.xc(o),17).a),n.f._b(l)&&(f=uG(n.f.xc(l),17).a)),a>f?hHn(n,i,u):hHn(n,u,i),af?1:0))):0!=i.e.c.length&&0!=u.g.c.length?(hHn(n,i,u),1):0!=i.g.c.length&&0!=u.e.c.length?(hHn(n,u,i),-1):vR(i,(GYn(),imt))&&vR(u,imt)?((r=uG(oIn(i,imt),17).a)>(s=uG(oIn(u,imt),17).a)?hHn(n,i,u):hHn(n,u,i),rs?1:0):(hHn(n,u,i),-1)}function HYn(n){n.gb||(n.gb=!0,n.b=Nsn(n,0),Von(n.b,18),Won(n.b,19),n.a=Nsn(n,1),Von(n.a,1),Won(n.a,2),Won(n.a,3),Won(n.a,4),Won(n.a,5),n.o=Nsn(n,2),Von(n.o,8),Von(n.o,9),Won(n.o,10),Won(n.o,11),Won(n.o,12),Won(n.o,13),Won(n.o,14),Won(n.o,15),Won(n.o,16),Won(n.o,17),Won(n.o,18),Won(n.o,19),Won(n.o,20),Won(n.o,21),Won(n.o,22),Won(n.o,23),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),n.p=Nsn(n,3),Von(n.p,2),Von(n.p,3),Von(n.p,4),Von(n.p,5),Won(n.p,6),Won(n.p,7),rrn(n.p),rrn(n.p),n.q=Nsn(n,4),Von(n.q,8),n.v=Nsn(n,5),Won(n.v,9),rrn(n.v),rrn(n.v),rrn(n.v),n.w=Nsn(n,6),Von(n.w,2),Von(n.w,3),Von(n.w,4),Won(n.w,5),n.B=Nsn(n,7),Won(n.B,1),rrn(n.B),rrn(n.B),rrn(n.B),n.Q=Nsn(n,8),Won(n.Q,0),rrn(n.Q),n.R=Nsn(n,9),Von(n.R,1),n.S=Nsn(n,10),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),n.T=Nsn(n,11),Won(n.T,10),Won(n.T,11),Won(n.T,12),Won(n.T,13),Won(n.T,14),rrn(n.T),rrn(n.T),n.U=Nsn(n,12),Von(n.U,2),Von(n.U,3),Won(n.U,4),Won(n.U,5),Won(n.U,6),Won(n.U,7),rrn(n.U),n.V=Nsn(n,13),Won(n.V,10),n.W=Nsn(n,14),Von(n.W,18),Von(n.W,19),Von(n.W,20),Won(n.W,21),Won(n.W,22),Won(n.W,23),n.bb=Nsn(n,15),Von(n.bb,10),Von(n.bb,11),Von(n.bb,12),Von(n.bb,13),Von(n.bb,14),Von(n.bb,15),Von(n.bb,16),Won(n.bb,17),rrn(n.bb),rrn(n.bb),n.eb=Nsn(n,16),Von(n.eb,2),Von(n.eb,3),Von(n.eb,4),Von(n.eb,5),Von(n.eb,6),Von(n.eb,7),Won(n.eb,8),Won(n.eb,9),n.ab=Nsn(n,17),Von(n.ab,0),Von(n.ab,1),n.H=Nsn(n,18),Won(n.H,0),Won(n.H,1),Won(n.H,2),Won(n.H,3),Won(n.H,4),Won(n.H,5),rrn(n.H),n.db=Nsn(n,19),Won(n.db,2),n.c=$sn(n,20),n.d=$sn(n,21),n.e=$sn(n,22),n.f=$sn(n,23),n.i=$sn(n,24),n.g=$sn(n,25),n.j=$sn(n,26),n.k=$sn(n,27),n.n=$sn(n,28),n.r=$sn(n,29),n.s=$sn(n,30),n.t=$sn(n,31),n.u=$sn(n,32),n.fb=$sn(n,33),n.A=$sn(n,34),n.C=$sn(n,35),n.D=$sn(n,36),n.F=$sn(n,37),n.G=$sn(n,38),n.I=$sn(n,39),n.J=$sn(n,40),n.L=$sn(n,41),n.M=$sn(n,42),n.N=$sn(n,43),n.O=$sn(n,44),n.P=$sn(n,45),n.X=$sn(n,46),n.Y=$sn(n,47),n.Z=$sn(n,48),n.$=$sn(n,49),n._=$sn(n,50),n.cb=$sn(n,51),n.K=$sn(n,52))}function UYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E;for(a=new lS,v=uG(oIn(e,(jYn(),Byt)),88),d=0,Qon(a,(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a));0!=a.b;)(xA(zDn(s=R0(h=uG(0==a.b?null:(MK(0!=a.b),Lrn(a,a.a.a)),27)),Syt))!==xA((yvn(),Fjt))||xA(zDn(s,Fyt))===xA((kvn(),lgt))||xA(zDn(s,Fyt))===xA((kvn(),hgt))||oM(gK(zDn(s,Cyt)))||xA(zDn(s,kyt))!==xA((Uvn(),tbt))||xA(zDn(s,yMt))===xA((THn(),Pjt))||xA(zDn(s,yMt))===xA((THn(),Cjt))||xA(zDn(s,MMt))===xA((MKn(),JTt))||xA(zDn(s,MMt))===xA((MKn(),ZTt)))&&!oM(gK(zDn(h,jyt)))&&Myn(h,(GYn(),imt),xwn(d++)),!oM(gK(zDn(h,FMt)))&&(l=0!=(!h.a&&(h.a=new fV(bFt,h,10,11)),h.a).i,w=oCn(h),b=xA(zDn(h,rMt))===xA((Own(),Ixt)),p=null,(E=!vnn(h,(XYn(),e$t))||L9(mK(zDn(h,e$t))))&&b&&(l||w)&&(kfn(p=PGn(h),Byt,v),vR(p,fTt)&&iM(new omn(uM(pK(oIn(p,fTt)))),p),0!=uG(zDn(h,DMt),181).gc()&&(f=p,kS(new fX(null,(!h.c&&(h.c=new fV(wFt,h,9,9)),new h3(h.c,16))),new Yd(f)),u_n(h,p))),k=e,(y=uG(cQ(n.a,R0(h)),10))&&(k=y.e),g=RJn(n,h,k),p&&(g.e=p,p.e=g,Qon(a,(!h.a&&(h.a=new fV(bFt,h,10,11)),h.a))));for(d=0,s8(a,t,a.c.b,a.c);0!=a.b;){for(u=new DD((!(c=uG(0==a.b?null:(MK(0!=a.b),Lrn(a,a.a.a)),27)).b&&(c.b=new fV(aFt,c,12,3)),c.b));u.e!=u.i.gc();)iHn(o=uG(Zkn(u),74)),(xA(zDn(t,Syt))!==xA((yvn(),Fjt))||xA(zDn(t,Fyt))===xA((kvn(),lgt))||xA(zDn(t,Fyt))===xA((kvn(),hgt))||oM(gK(zDn(t,Cyt)))||xA(zDn(t,kyt))!==xA((Uvn(),tbt))||xA(zDn(t,yMt))===xA((THn(),Pjt))||xA(zDn(t,yMt))===xA((THn(),Cjt))||xA(zDn(t,MMt))===xA((MKn(),JTt))||xA(zDn(t,MMt))===xA((MKn(),ZTt)))&&Myn(o,(GYn(),imt),xwn(d++)),T=lCn(uG(zrn((!o.b&&(o.b=new f_(cFt,o,4,7)),o.b),0),84)),j=lCn(uG(zrn((!o.c&&(o.c=new f_(cFt,o,5,8)),o.c),0),84)),oM(gK(zDn(o,FMt)))||oM(gK(zDn(T,FMt)))||oM(gK(zDn(j,FMt)))||(m=c,BNn(o)&&oM(gK(zDn(T,sMt)))&&oM(gK(zDn(o,hMt)))||Ern(j,T)?m=T:Ern(T,j)&&(m=j),k=e,(y=uG(cQ(n.a,m),10))&&(k=y.e),kfn(FYn(n,o,m,k),(GYn(),Ipt),SFn(n,o,t,e)));if(b=xA(zDn(c,rMt))===xA((Own(),Ixt)))for(r=new DD((!c.a&&(c.a=new fV(bFt,c,10,11)),c.a));r.e!=r.i.gc();)E=!vnn(i=uG(Zkn(r),27),(XYn(),e$t))||L9(mK(zDn(i,e$t))),M=xA(zDn(i,rMt))===xA(Ixt),E&&M&&s8(a,i,a.c.b,a.c)}}function GYn(){var n,t;GYn=E,rmt=new Cm(E4n),Ipt=new Cm("coordinateOrigin"),wmt=new Cm("processors"),Cpt=new uF("compoundNode",(qx(),!1)),qpt=new uF("insideConnections",!1),cmt=new Cm("originalBendpoints"),amt=new Cm("originalDummyNodePosition"),omt=new Cm("originalLabelEdge"),gmt=new Cm("representedLabels"),$pt=new Cm("endLabels"),Dpt=new Cm("endLabel.origin"),Qpt=new uF("labelSide",(Ajn(),Rxt)),emt=new uF("maxEdgeThickness",0),pmt=new uF("reversed",!1),dmt=new Cm(S4n),Zpt=new uF("longEdgeSource",null),nmt=new uF("longEdgeTarget",null),Ypt=new uF("longEdgeHasLabelDummies",!1),Jpt=new uF("longEdgeBeforeLabelDummy",!1),Npt=new uF("edgeConstraint",(Pfn(),kgt)),zpt=new Cm("inLayerLayoutUnit"),Xpt=new uF("inLayerConstraint",(Zen(),gpt)),Vpt=new uF("inLayerSuccessorConstraint",new Zm),Wpt=new uF("inLayerSuccessorConstraintBetweenNonDummies",!1),lmt=new Cm("portDummy"),Opt=new uF("crossingHint",xwn(0)),Hpt=new uF("graphProperties",new nB(t=uG(Mj(bpt),9),uG(MF(t,t.length),9),0)),Fpt=new uF("externalPortSide",(KQn(),FRt)),_pt=new uF("externalPortSize",new sj),Rpt=new Cm("externalPortReplacedDummies"),Kpt=new Cm("externalPortReplacedDummy"),xpt=new uF("externalPortConnections",new nB(n=uG(Mj(YRt),9),uG(MF(n,n.length),9),0)),bmt=new uF(i3n,0),jpt=new Cm("barycenterAssociates"),Pmt=new Cm("TopSideComments"),Ept=new Cm("BottomSideComments"),Ppt=new Cm("CommentConnectionPort"),Gpt=new uF("inputCollect",!1),hmt=new uF("outputCollect",!1),Lpt=new uF("cyclic",!1),Apt=new Cm("crossHierarchyMap"),Smt=new Cm("targetOffset"),new uF("splineLabelSize",new sj),kmt=new Cm("spacings"),fmt=new uF("partitionConstraint",!1),Spt=new Cm("breakingPoint.info"),jmt=new Cm("splines.survivingEdge"),Tmt=new Cm("splines.route.start"),ymt=new Cm("splines.edgeChain"),smt=new Cm("originalPortConstraints"),vmt=new Cm("selfLoopHolder"),Mmt=new Cm("splines.nsPortY"),imt=new Cm("modelOrder"),tmt=new Cm("longEdgeTargetNode"),Bpt=new uF(_6n,!1),mmt=new uF(_6n,!1),Upt=new Cm("layerConstraints.hiddenNodes"),umt=new Cm("layerConstraints.opposidePort"),Emt=new Cm("targetNode.modelOrder")}function qYn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w,d;for(l=Fkn(n.b,0);l.b!=l.d.c;)if(!m_((f=uG(I6(l),40)).c,H9n))for(a=uG(l8(new fX(null,new h3(zNn(f,n),16)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),t==(xdn(),JDt)||t==YDt?a.jd(new oo):a.jd(new uo),d=a.gc(),c=0;c0&&(u=uG(pR(uG(a.Xb(c),65).a),8).a,b=f.e.a+f.f.a/2,s=uG(pR(uG(a.Xb(c),65).a),8).b,w=f.e.b+f.f.b/2,r>0&&e.Math.abs(s-w)/(e.Math.abs(u-b)/40)>50&&cL(uG(a.Xb(c),65).a,new MO(f.e.a+f.f.a+r/5.3,w>s?f.e.b+f.f.b*o-r/2:f.e.b+f.f.b*o+r/2))),cL(uG(a.Xb(c),65).a,new MO(f.e.a+f.f.a,f.e.b+f.f.b*o))):t==YDt?(h=uM(pK(oIn(f,(OQn(),DPt)))),f.e.a-r>h?cL(uG(a.Xb(c),65).a,new MO(h-i,f.e.b+f.f.b*o)):uG(a.Xb(c),65).a.b>0&&(u=uG(pR(uG(a.Xb(c),65).a),8).a,b=f.e.a+f.f.a/2,s=uG(pR(uG(a.Xb(c),65).a),8).b,w=f.e.b+f.f.b/2,r>0&&e.Math.abs(s-w)/(e.Math.abs(u-b)/40)>50&&cL(uG(a.Xb(c),65).a,new MO(f.e.a-r/5.3,w>s?f.e.b+f.f.b*o-r/2:f.e.b+f.f.b*o+r/2))),cL(uG(a.Xb(c),65).a,new MO(f.e.a,f.e.b+f.f.b*o))):t==nxt?(h=uM(pK(oIn(f,(OQn(),$Pt)))),f.e.b+f.f.b+r0&&(u=uG(pR(uG(a.Xb(c),65).a),8).a,b=f.e.a+f.f.a/2,s=uG(pR(uG(a.Xb(c),65).a),8).b,w=f.e.b+f.f.b/2,r>0&&e.Math.abs(u-b)/(e.Math.abs(s-w)/40)>50&&cL(uG(a.Xb(c),65).a,new MO(b>u?f.e.a+f.f.a*o-r/2:f.e.a+f.f.a*o+r/2,f.e.b+r/5.3+f.f.b))),cL(uG(a.Xb(c),65).a,new MO(f.e.a+f.f.a*o,f.e.b+f.f.b))):(h=uM(pK(oIn(f,(OQn(),DPt)))),uln(uG(a.Xb(c),65),n)?cL(uG(a.Xb(c),65).a,new MO(f.e.a+f.f.a*o,uG(pR(uG(a.Xb(c),65).a),8).b)):f.e.b-r>h?cL(uG(a.Xb(c),65).a,new MO(f.e.a+f.f.a*o,h-i)):uG(a.Xb(c),65).a.b>0&&(u=uG(pR(uG(a.Xb(c),65).a),8).a,b=f.e.a+f.f.a/2,s=uG(pR(uG(a.Xb(c),65).a),8).b,w=f.e.b+f.f.b/2,r>0&&e.Math.abs(u-b)/(e.Math.abs(s-w)/40)>50&&cL(uG(a.Xb(c),65).a,new MO(b>u?f.e.a+f.f.a*o-r/2:f.e.a+f.f.a*o+r/2,f.e.b-r/5.3))),cL(uG(a.Xb(c),65).a,new MO(f.e.a+f.f.a*o,f.e.b)))}function XYn(){var n,t;XYn=E,e$t=new Cm(Vnt),yDt=new Cm(Wnt),nMn(),i$t=new mL(X8n,r$t=CNt),new Jm,c$t=new mL(R3n,null),a$t=new Cm(Qnt),ZSn(),b$t=WX(ZNt,Uhn(cT(txt,1),p1n,298,0,[WNt])),l$t=new mL(r9n,b$t),w$t=new mL(q8n,(qx(),!1)),xdn(),d$t=new mL(W8n,g$t=ZDt),_gn(),k$t=new mL(m8n,y$t=fxt),j$t=new mL(Xnt,!1),Own(),E$t=new mL(b8n,S$t=Oxt),Q$t=new CN(12),W$t=new mL(K3n,Q$t),O$t=new mL(f4n,!1),A$t=new mL(g9n,!1),V$t=new mL(w4n,!1),$Pn(),sDt=new mL(l4n,hDt=sRt),mDt=new Cm(b9n),vDt=new Cm(a4n),kDt=new Cm(s4n),TDt=new Cm(h4n),N$t=new Uk,L$t=new mL(c9n,N$t),f$t=new mL(u9n,!1),P$t=new mL(s9n,!1),new Cm(Jnt),D$t=new Nk,$$t=new mL(w9n,D$t),z$t=new mL(U8n,!1),new Jm,MDt=new mL(Ynt,1),h$t=new Cm(Znt),s$t=new Cm(ntt),HDt=new mL(k4n,!1),new mL(ttt,!0),xwn(0),new mL(ett,xwn(100)),new mL(itt,!1),xwn(0),new mL(rtt,xwn(4e3)),xwn(0),new mL(ctt,xwn(400)),new mL(att,!1),new mL(ott,!1),new mL(utt,!0),new mL(stt,!1),qpn(),o$t=new mL(znt,u$t=TKt),jDt=new mL(A8n,10),EDt=new mL(L8n,10),SDt=new mL(D3n,20),PDt=new mL(N8n,10),CDt=new mL(u4n,2),IDt=new mL($8n,10),ADt=new mL(D8n,0),LDt=new mL(K8n,5),NDt=new mL(x8n,1),$Dt=new mL(R8n,1),DDt=new mL(o4n,20),xDt=new mL(F8n,10),FDt=new mL(_8n,10),ODt=new Cm(B8n),KDt=new qL,RDt=new mL(d9n,KDt),Z$t=new Cm(l9n),J$t=new mL(f9n,Y$t=!1),R$t=new CN(5),x$t=new mL(Q8n,R$t),VDn(),t=uG(Mj(eRt),9),F$t=new nB(t,uG(MF(t,t.length),9),0),K$t=new mL(m4n,F$t),Vkn(),tDt=new mL(Z8n,eDt=Zxt),rDt=new Cm(n9n),cDt=new Cm(t9n),aDt=new Cm(e9n),iDt=new Cm(i9n),n=uG(Mj(sKt),9),B$t=new nB(n,uG(MF(n,n.length),9),0),_$t=new mL(p4n,B$t),X$t=ggn((aUn(),eKt)),q$t=new mL(g4n,X$t),G$t=new MO(0,0),U$t=new mL(x4n,G$t),H$t=new mL(d4n,!1),Zrn(),m$t=new mL(a9n,v$t=ixt),p$t=new mL(b4n,!1),new Cm(htt),xwn(1),new mL(ftt,null),oDt=new Cm(h9n),fDt=new Cm(o9n),KQn(),gDt=new mL(G8n,pDt=FRt),uDt=new Cm(H8n),eNn(),wDt=ggn(gRt),bDt=new mL(v4n,wDt),lDt=new mL(J8n,!1),dDt=new mL(Y8n,!0),new Jm,XDt=new mL(y4n,1),VDt=new mL(ltt,null),BDt=new mL(M4n,150),_Dt=new mL(T4n,1.414),UDt=new mL(j4n,null),GDt=new mL(btt,1),C$t=new mL(z8n,!1),I$t=new mL(V8n,!1),M$t=new mL(x3n,1),RCn(),new mL(wtt,T$t=mxt),nDt=!0,Iwn(),zDt=fKt,WDt=fKt,qDt=fKt}function zYn(){zYn=E,qbt=new CC("DIRECTION_PREPROCESSOR",0),Hbt=new CC("COMMENT_PREPROCESSOR",1),Xbt=new CC("EDGE_AND_LAYER_CONSTRAINT_EDGE_REVERSER",2),uwt=new CC("INTERACTIVE_EXTERNAL_PORT_POSITIONER",3),Pwt=new CC("PARTITION_PREPROCESSOR",4),lwt=new CC("LABEL_DUMMY_INSERTER",5),Nwt=new CC("SELF_LOOP_PREPROCESSOR",6),pwt=new CC("LAYER_CONSTRAINT_PREPROCESSOR",7),Ewt=new CC("PARTITION_MIDPROCESSOR",8),iwt=new CC("HIGH_DEGREE_NODE_LAYER_PROCESSOR",9),ywt=new CC("NODE_PROMOTION",10),gwt=new CC("LAYER_CONSTRAINT_POSTPROCESSOR",11),Swt=new CC("PARTITION_POSTPROCESSOR",12),Zbt=new CC("HIERARCHICAL_PORT_CONSTRAINT_PROCESSOR",13),Dwt=new CC("SEMI_INTERACTIVE_CROSSMIN_PROCESSOR",14),xbt=new CC("BREAKING_POINT_INSERTER",15),kwt=new CC("LONG_EDGE_SPLITTER",16),Iwt=new CC("PORT_SIDE_PROCESSOR",17),swt=new CC("INVERTED_PORT_PROCESSOR",18),Cwt=new CC("PORT_LIST_SORTER",19),Rwt=new CC("SORT_BY_INPUT_ORDER_OF_MODEL",20),Twt=new CC("NORTH_SOUTH_PORT_PREPROCESSOR",21),Rbt=new CC("BREAKING_POINT_PROCESSOR",22),jwt=new CC(p6n,23),Kwt=new CC(m6n,24),Awt=new CC("SELF_LOOP_PORT_RESTORER",25),xwt=new CC("SINGLE_EDGE_GRAPH_WRAPPER",26),hwt=new CC("IN_LAYER_CONSTRAINT_PROCESSOR",27),Qbt=new CC("END_NODE_PORT_LABEL_MANAGEMENT_PROCESSOR",28),fwt=new CC("LABEL_AND_NODE_SIZE_PROCESSOR",29),owt=new CC("INNERMOST_NODE_MARGIN_CALCULATOR",30),$wt=new CC("SELF_LOOP_ROUTER",31),_bt=new CC("COMMENT_NODE_MARGIN_CALCULATOR",32),Vbt=new CC("END_LABEL_PREPROCESSOR",33),wwt=new CC("LABEL_DUMMY_SWITCHER",34),Fbt=new CC("CENTER_LABEL_MANAGEMENT_PROCESSOR",35),dwt=new CC("LABEL_SIDE_SELECTOR",36),cwt=new CC("HYPEREDGE_DUMMY_MERGER",37),nwt=new CC("HIERARCHICAL_PORT_DUMMY_SIZE_PROCESSOR",38),mwt=new CC("LAYER_SIZE_AND_GRAPH_HEIGHT_CALCULATOR",39),ewt=new CC("HIERARCHICAL_PORT_POSITION_PROCESSOR",40),Ubt=new CC("CONSTRAINTS_POSTPROCESSOR",41),Bbt=new CC("COMMENT_POSTPROCESSOR",42),awt=new CC("HYPERNODE_PROCESSOR",43),twt=new CC("HIERARCHICAL_PORT_ORTHOGONAL_EDGE_ROUTER",44),vwt=new CC("LONG_EDGE_JOINER",45),Lwt=new CC("SELF_LOOP_POSTPROCESSOR",46),Kbt=new CC("BREAKING_POINT_REMOVER",47),Mwt=new CC("NORTH_SOUTH_PORT_POSTPROCESSOR",48),rwt=new CC("HORIZONTAL_COMPACTOR",49),bwt=new CC("LABEL_DUMMY_REMOVER",50),Jbt=new CC("FINAL_SPLINE_BENDPOINTS_CALCULATOR",51),Wbt=new CC("END_LABEL_SORTER",52),Owt=new CC("REVERSED_EDGE_RESTORER",53),zbt=new CC("END_LABEL_POSTPROCESSOR",54),Ybt=new CC("HIERARCHICAL_NODE_RESIZER",55),Gbt=new CC("DIRECTION_POSTPROCESSOR",56)}function VYn(){VYn=E,Vin(),mvt=new mL(B6n,vvt=dgt),xvt=new mL(H6n,(qx(),!1)),Y6(),Bvt=new mL(U6n,Hvt=kpt),akt=new mL(G6n,!1),okt=new mL(q6n,!0),Dmt=new mL(X6n,!1),nin(),Skt=new mL(z6n,Pkt=Gjt),xwn(1),Dkt=new mL(V6n,xwn(7)),xkt=new mL(W6n,!1),Rvt=new mL(Q6n,!1),kvn(),gvt=new mL(J6n,pvt=sgt),MKn(),rkt=new mL(Y6n,ckt=rjt),Gpn(),Vvt=new mL(Z6n,Wvt=Lmt),xwn(-1),zvt=new mL(n5n,null),xwn(-1),Qvt=new mL(t5n,xwn(-1)),xwn(-1),Jvt=new mL(e5n,xwn(4)),xwn(-1),Zvt=new mL(i5n,xwn(2)),THn(),ekt=new mL(r5n,ikt=$jt),xwn(0),tkt=new mL(c5n,xwn(0)),qvt=new mL(a5n,xwn(vZn)),jan(),wvt=new mL(o5n,dvt=Zdt),Jmt=new mL(u5n,!1),avt=new mL(s5n,.1),lvt=new mL(h5n,!1),uvt=new mL(f5n,null),svt=new mL(l5n,null),xwn(-1),hvt=new mL(b5n,null),xwn(-1),fvt=new mL(w5n,xwn(-1)),xwn(0),Ymt=new mL(d5n,xwn(40)),ihn(),ivt=new mL(g5n,rvt=lpt),Zmt=new mL(p5n,nvt=hpt),pyn(),jkt=new mL(m5n,Ekt=vjt),wkt=new Cm(v5n),Wtn(),ukt=new mL(k5n,skt=Lgt),ESn(),fkt=new mL(y5n,lkt=Fgt),new Jm,pkt=new mL(M5n,.3),vkt=new Cm(T5n),Yyn(),kkt=new mL(j5n,ykt=djt),isn(),Svt=new mL(E5n,Pvt=nEt),Sln(),Cvt=new mL(S5n,Ivt=aEt),kbn(),Ovt=new mL(P5n,Avt=fEt),Nvt=new mL(C5n,.2),jvt=new mL(I5n,2),Akt=new mL(O5n,null),Nkt=new mL(A5n,10),Lkt=new mL(L5n,10),$kt=new mL(N5n,20),xwn(0),Ckt=new mL($5n,xwn(0)),xwn(0),Ikt=new mL(D5n,xwn(0)),xwn(0),Okt=new mL(x5n,xwn(0)),xmt=new mL(R5n,!1),RIn(),Fmt=new mL(K5n,_mt=Vgt),H7(),Rmt=new mL(F5n,Kmt=Wdt),Fvt=new mL(_5n,!1),xwn(0),Kvt=new mL(B5n,xwn(16)),xwn(0),_vt=new mL(H5n,xwn(5)),zhn(),ryt=new mL(U5n,cyt=kEt),Rkt=new mL(G5n,10),_kt=new mL(q5n,1),ran(),Vkt=new mL(X5n,Wkt=cgt),Ukt=new Cm(z5n),Xkt=xwn(1),xwn(0),qkt=new mL(V5n,Xkt),ian(),syt=new mL(W5n,hyt=wEt),ayt=new Cm(Q5n),nyt=new mL(J5n,!0),Ykt=new mL(Y5n,2),eyt=new mL(Z5n,!0),tOn(),Mvt=new mL(n8n,Tvt=Cgt),vAn(),kvt=new mL(t8n,yvt=Hdt),yvn(),Wmt=new mL(e8n,Qmt=Fjt),Vmt=new mL(i8n,!1),zmt=new mL(r8n,!1),Uvn(),Bmt=new mL(c8n,Hmt=tbt),Cwn(),qmt=new mL(a8n,Xmt=ujt),Umt=new mL(o8n,0),Gmt=new mL(u8n,0),Gvt=fgt,Uvt=Ydt,Yvt=ijt,nkt=ijt,Xvt=YTt,Own(),ovt=Ixt,bvt=Zdt,cvt=Zdt,tvt=Zdt,evt=Ixt,dkt=Mjt,gkt=vjt,hkt=vjt,bkt=vjt,mkt=yjt,Tkt=Mjt,Mkt=Mjt,_gn(),Lvt=hxt,$vt=hxt,Dvt=fEt,Evt=sxt,Kkt=yEt,Fkt=vEt,Bkt=yEt,Hkt=vEt,Qkt=yEt,Jkt=vEt,Gkt=rgt,zkt=cgt,fyt=yEt,lyt=vEt,oyt=yEt,uyt=vEt,tyt=vEt,Zkt=vEt,iyt=vEt}function WYn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I,O,A,L,N,$,D,x,R,K,F,_,B,H,U,G,q,X,z,V,W,Q,J,Y,Z,nn,tn,en,rn,cn,an,on,un;for(Y=0,N=0,x=(O=t).length;N0&&(n.a[U.p]=Y++)}for(rn=0,$=0,R=(A=i).length;$0;){for(MK(z.b>0),X=0,u=new Ww((U=uG(z.a.Xb(z.c=--z.b),12)).e);u.a0&&(U.j==(KQn(),yRt)?(n.a[U.p]=rn,++rn):(n.a[U.p]=rn+K+_,++_))}rn+=_}for(q=new Ym,d=new XL,L=0,D=(I=t).length;Lh.b&&(h.b=V)):U.i.c==J&&(Vh.c&&(h.c=V));for(Ntn(g,0,g.length,null),en=Inn(YHt,W1n,28,g.length,15,1),r=Inn(YHt,W1n,28,rn+1,15,1),m=0;m0;)j%2>0&&(c+=on[j+1]),++on[j=(j-1)/2|0];for(S=Inn(ZEt,EZn,374,2*g.length,0,1),y=0;y0&&(A1(O.f),0)){if(uG(zDn(g,UDt),280)==fKt)throw hv(new jM("Topdown Layout Providers should only be used on parallel nodes."));XA(A1(O.f)),null.Um(),vN(g,e.Math.max(g.g,null.Vm),e.Math.max(g.f,null.Vm))}else null!=zDn(g,VDt)&&(H=uG(zDn(g,VDt),347).Tg(g),vN(g,e.Math.max(g.g,H.a),e.Math.max(g.f,H.b)));if(D=uG(zDn(t,W$t),107),b=t.g-(D.b+D.c),l=t.f-(D.d+D.a),G.bh("Available Child Area: ("+b+"|"+l+")"),Myn(t,c$t,b/l),Mkn(t,c,r.eh(N)),uG(zDn(t,UDt),280)==bKt&&(VJn(t),vN(t,D.b+uM(pK(zDn(t,h$t)))+D.c,D.d+uM(pK(zDn(t,s$t)))+D.a)),G.bh("Executed layout algorithm: "+mK(zDn(t,e$t))+" on node "+t.k),uG(zDn(t,UDt),280)==fKt){if(b<0||l<0)throw hv(new jM("The size defined by the parent parallel node is too small for the space provided by the paddings of the child hierarchical node. "+t.k));for(vnn(t,h$t)||vnn(t,s$t)||VJn(t),d=uM(pK(zDn(t,h$t))),w=uM(pK(zDn(t,s$t))),G.bh("Desired Child Area: ("+d+"|"+w+")"),R=b/d,K=l/w,x=e.Math.min(R,e.Math.min(K,uM(pK(zDn(t,GDt))))),Myn(t,XDt,x),G.bh(t.k+" -- Local Scale Factor (X|Y): ("+R+"|"+K+")"),v=uG(zDn(t,l$t),21),a=0,o=0,x'?":m_(rit,n)?"'(?<' or '(? toIndex: ",s2n=", toIndex: ",h2n="Index: ",f2n=", Size: ",l2n="org.eclipse.elk.alg.common",b2n={50:1},w2n="org.eclipse.elk.alg.common.compaction",d2n="Scanline/EventHandler",g2n="org.eclipse.elk.alg.common.compaction.oned",p2n="CNode belongs to another CGroup.",m2n="ISpacingsHandler/1",v2n="The ",k2n=" instance has been finished already.",y2n="The direction ",M2n=" is not supported by the CGraph instance.",T2n="OneDimensionalCompactor",j2n="OneDimensionalCompactor/lambda$0$Type",E2n="Quadruplet",S2n="ScanlineConstraintCalculator",P2n="ScanlineConstraintCalculator/ConstraintsScanlineHandler",C2n="ScanlineConstraintCalculator/ConstraintsScanlineHandler/lambda$0$Type",I2n="ScanlineConstraintCalculator/Timestamp",O2n="ScanlineConstraintCalculator/lambda$0$Type",A2n={178:1,46:1},L2n="org.eclipse.elk.alg.common.compaction.options",N2n="org.eclipse.elk.core.data",$2n="org.eclipse.elk.polyomino.traversalStrategy",D2n="org.eclipse.elk.polyomino.lowLevelSort",x2n="org.eclipse.elk.polyomino.highLevelSort",R2n="org.eclipse.elk.polyomino.fill",K2n={134:1},F2n="polyomino",_2n="org.eclipse.elk.alg.common.networksimplex",B2n={183:1,3:1,4:1},H2n="org.eclipse.elk.alg.common.nodespacing",U2n="org.eclipse.elk.alg.common.nodespacing.cellsystem",G2n="CENTER",q2n={217:1,336:1},X2n={3:1,4:1,5:1,603:1},z2n="LEFT",V2n="RIGHT",W2n="Vertical alignment cannot be null",Q2n="BOTTOM",J2n="org.eclipse.elk.alg.common.nodespacing.internal",Y2n="UNDEFINED",Z2n=.01,n3n="org.eclipse.elk.alg.common.nodespacing.internal.algorithm",t3n="LabelPlacer/lambda$0$Type",e3n="LabelPlacer/lambda$1$Type",i3n="portRatioOrPosition",r3n="org.eclipse.elk.alg.common.overlaps",c3n="DOWN",a3n="org.eclipse.elk.alg.common.polyomino",o3n="NORTH",u3n="EAST",s3n="SOUTH",h3n="WEST",f3n="org.eclipse.elk.alg.common.polyomino.structures",l3n="Direction",b3n="Grid is only of size ",w3n=". Requested point (",d3n=") is out of bounds.",g3n=" Given center based coordinates were (",p3n="org.eclipse.elk.graph.properties",m3n="IPropertyHolder",v3n={3:1,96:1,137:1},k3n="org.eclipse.elk.alg.common.spore",y3n="org.eclipse.elk.alg.common.utils",M3n={205:1},T3n="org.eclipse.elk.core",j3n="Connected Components Compaction",E3n="org.eclipse.elk.alg.disco",S3n="org.eclipse.elk.alg.disco.graph",P3n="org.eclipse.elk.alg.disco.options",C3n="CompactionStrategy",I3n="org.eclipse.elk.disco.componentCompaction.strategy",O3n="org.eclipse.elk.disco.componentCompaction.componentLayoutAlgorithm",A3n="org.eclipse.elk.disco.debug.discoGraph",L3n="org.eclipse.elk.disco.debug.discoPolys",N3n="componentCompaction",$3n="org.eclipse.elk.disco",D3n="org.eclipse.elk.spacing.componentComponent",x3n="org.eclipse.elk.edge.thickness",R3n="org.eclipse.elk.aspectRatio",K3n="org.eclipse.elk.padding",F3n="org.eclipse.elk.alg.disco.transform",_3n=1.5707963267948966,B3n=17976931348623157e292,H3n={3:1,4:1,5:1,198:1},U3n={3:1,6:1,4:1,5:1,100:1,115:1},G3n="org.eclipse.elk.alg.force",q3n="ComponentsProcessor",X3n="ComponentsProcessor/1",z3n="ElkGraphImporter/lambda$0$Type",V3n="org.eclipse.elk.alg.force.graph",W3n="Component Layout",Q3n="org.eclipse.elk.alg.force.model",J3n="org.eclipse.elk.force.model",Y3n="org.eclipse.elk.force.iterations",Z3n="org.eclipse.elk.force.repulsivePower",n4n="org.eclipse.elk.force.temperature",t4n=.001,e4n="org.eclipse.elk.force.repulsion",i4n="org.eclipse.elk.alg.force.options",r4n=1.600000023841858,c4n="org.eclipse.elk.force",a4n="org.eclipse.elk.priority",o4n="org.eclipse.elk.spacing.nodeNode",u4n="org.eclipse.elk.spacing.edgeLabel",s4n="org.eclipse.elk.randomSeed",h4n="org.eclipse.elk.separateConnectedComponents",f4n="org.eclipse.elk.interactive",l4n="org.eclipse.elk.portConstraints",b4n="org.eclipse.elk.edgeLabels.inline",w4n="org.eclipse.elk.omitNodeMicroLayout",d4n="org.eclipse.elk.nodeSize.fixedGraphSize",g4n="org.eclipse.elk.nodeSize.options",p4n="org.eclipse.elk.nodeSize.constraints",m4n="org.eclipse.elk.nodeLabels.placement",v4n="org.eclipse.elk.portLabels.placement",k4n="org.eclipse.elk.topdownLayout",y4n="org.eclipse.elk.topdown.scaleFactor",M4n="org.eclipse.elk.topdown.hierarchicalNodeWidth",T4n="org.eclipse.elk.topdown.hierarchicalNodeAspectRatio",j4n="org.eclipse.elk.topdown.nodeType",E4n="origin",S4n="random",P4n="boundingBox.upLeft",C4n="boundingBox.lowRight",I4n="org.eclipse.elk.stress.fixed",O4n="org.eclipse.elk.stress.desiredEdgeLength",A4n="org.eclipse.elk.stress.dimension",L4n="org.eclipse.elk.stress.epsilon",N4n="org.eclipse.elk.stress.iterationLimit",$4n="org.eclipse.elk.stress",D4n="ELK Stress",x4n="org.eclipse.elk.nodeSize.minimum",R4n="org.eclipse.elk.alg.force.stress",K4n="Layered layout",F4n="org.eclipse.elk.alg.layered",_4n="org.eclipse.elk.alg.layered.compaction.components",B4n="org.eclipse.elk.alg.layered.compaction.oned",H4n="org.eclipse.elk.alg.layered.compaction.oned.algs",U4n="org.eclipse.elk.alg.layered.compaction.recthull",G4n="org.eclipse.elk.alg.layered.components",q4n="NONE",X4n="MODEL_ORDER",z4n={3:1,6:1,4:1,9:1,5:1,126:1},V4n={3:1,6:1,4:1,5:1,150:1,100:1,115:1},W4n="org.eclipse.elk.alg.layered.compound",Q4n={47:1},J4n="org.eclipse.elk.alg.layered.graph",Y4n=" -> ",Z4n="Not supported by LGraph",n6n="Port side is undefined",t6n={3:1,6:1,4:1,5:1,483:1,150:1,100:1,115:1},e6n={3:1,6:1,4:1,5:1,150:1,199:1,210:1,100:1,115:1},i6n={3:1,6:1,4:1,5:1,150:1,2042:1,210:1,100:1,115:1},r6n="([{\"' \t\r\n",c6n=")]}\"' \t\r\n",a6n="The given string contains parts that cannot be parsed as numbers.",o6n="org.eclipse.elk.core.math",u6n={3:1,4:1,140:1,214:1,423:1},s6n={3:1,4:1,107:1,214:1,423:1},h6n="org.eclipse.elk.alg.layered.graph.transform",f6n="ElkGraphImporter",l6n="ElkGraphImporter/lambda$1$Type",b6n="ElkGraphImporter/lambda$2$Type",w6n="ElkGraphImporter/lambda$4$Type",d6n="org.eclipse.elk.alg.layered.intermediate",g6n="Node margin calculation",p6n="ONE_SIDED_GREEDY_SWITCH",m6n="TWO_SIDED_GREEDY_SWITCH",v6n="No implementation is available for the layout processor ",k6n="IntermediateProcessorStrategy",y6n="Node '",M6n="FIRST_SEPARATE",T6n="LAST_SEPARATE",j6n="Odd port side processing",E6n="org.eclipse.elk.alg.layered.intermediate.compaction",S6n="org.eclipse.elk.alg.layered.intermediate.greedyswitch",P6n="org.eclipse.elk.alg.layered.p3order.counting",C6n={230:1},I6n="org.eclipse.elk.alg.layered.intermediate.loops",O6n="org.eclipse.elk.alg.layered.intermediate.loops.ordering",A6n="org.eclipse.elk.alg.layered.intermediate.loops.routing",L6n="org.eclipse.elk.alg.layered.intermediate.preserveorder",N6n="org.eclipse.elk.alg.layered.intermediate.wrapping",$6n="org.eclipse.elk.alg.layered.options",D6n="INTERACTIVE",x6n="GREEDY",R6n="DEPTH_FIRST",K6n="EDGE_LENGTH",F6n="SELF_LOOPS",_6n="firstTryWithInitialOrder",B6n="org.eclipse.elk.layered.directionCongruency",H6n="org.eclipse.elk.layered.feedbackEdges",U6n="org.eclipse.elk.layered.interactiveReferencePoint",G6n="org.eclipse.elk.layered.mergeEdges",q6n="org.eclipse.elk.layered.mergeHierarchyEdges",X6n="org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides",z6n="org.eclipse.elk.layered.portSortingStrategy",V6n="org.eclipse.elk.layered.thoroughness",W6n="org.eclipse.elk.layered.unnecessaryBendpoints",Q6n="org.eclipse.elk.layered.generatePositionAndLayerIds",J6n="org.eclipse.elk.layered.cycleBreaking.strategy",Y6n="org.eclipse.elk.layered.layering.strategy",Z6n="org.eclipse.elk.layered.layering.layerConstraint",n5n="org.eclipse.elk.layered.layering.layerChoiceConstraint",t5n="org.eclipse.elk.layered.layering.layerId",e5n="org.eclipse.elk.layered.layering.minWidth.upperBoundOnWidth",i5n="org.eclipse.elk.layered.layering.minWidth.upperLayerEstimationScalingFactor",r5n="org.eclipse.elk.layered.layering.nodePromotion.strategy",c5n="org.eclipse.elk.layered.layering.nodePromotion.maxIterations",a5n="org.eclipse.elk.layered.layering.coffmanGraham.layerBound",o5n="org.eclipse.elk.layered.crossingMinimization.strategy",u5n="org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder",s5n="org.eclipse.elk.layered.crossingMinimization.hierarchicalSweepiness",h5n="org.eclipse.elk.layered.crossingMinimization.semiInteractive",f5n="org.eclipse.elk.layered.crossingMinimization.inLayerPredOf",l5n="org.eclipse.elk.layered.crossingMinimization.inLayerSuccOf",b5n="org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint",w5n="org.eclipse.elk.layered.crossingMinimization.positionId",d5n="org.eclipse.elk.layered.crossingMinimization.greedySwitch.activationThreshold",g5n="org.eclipse.elk.layered.crossingMinimization.greedySwitch.type",p5n="org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type",m5n="org.eclipse.elk.layered.nodePlacement.strategy",v5n="org.eclipse.elk.layered.nodePlacement.favorStraightEdges",k5n="org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening",y5n="org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment",M5n="org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening",T5n="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility",j5n="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default",E5n="org.eclipse.elk.layered.edgeRouting.selfLoopDistribution",S5n="org.eclipse.elk.layered.edgeRouting.selfLoopOrdering",P5n="org.eclipse.elk.layered.edgeRouting.splines.mode",C5n="org.eclipse.elk.layered.edgeRouting.splines.sloppy.layerSpacingFactor",I5n="org.eclipse.elk.layered.edgeRouting.polyline.slopedEdgeZoneWidth",O5n="org.eclipse.elk.layered.spacing.baseValue",A5n="org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers",L5n="org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers",N5n="org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers",$5n="org.eclipse.elk.layered.priority.direction",D5n="org.eclipse.elk.layered.priority.shortness",x5n="org.eclipse.elk.layered.priority.straightness",R5n="org.eclipse.elk.layered.compaction.connectedComponents",K5n="org.eclipse.elk.layered.compaction.postCompaction.strategy",F5n="org.eclipse.elk.layered.compaction.postCompaction.constraints",_5n="org.eclipse.elk.layered.highDegreeNodes.treatment",B5n="org.eclipse.elk.layered.highDegreeNodes.threshold",H5n="org.eclipse.elk.layered.highDegreeNodes.treeHeight",U5n="org.eclipse.elk.layered.wrapping.strategy",G5n="org.eclipse.elk.layered.wrapping.additionalEdgeSpacing",q5n="org.eclipse.elk.layered.wrapping.correctionFactor",X5n="org.eclipse.elk.layered.wrapping.cutting.strategy",z5n="org.eclipse.elk.layered.wrapping.cutting.cuts",V5n="org.eclipse.elk.layered.wrapping.cutting.msd.freedom",W5n="org.eclipse.elk.layered.wrapping.validify.strategy",Q5n="org.eclipse.elk.layered.wrapping.validify.forbiddenIndices",J5n="org.eclipse.elk.layered.wrapping.multiEdge.improveCuts",Y5n="org.eclipse.elk.layered.wrapping.multiEdge.distancePenalty",Z5n="org.eclipse.elk.layered.wrapping.multiEdge.improveWrappedEdges",n8n="org.eclipse.elk.layered.edgeLabels.sideSelection",t8n="org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy",e8n="org.eclipse.elk.layered.considerModelOrder.strategy",i8n="org.eclipse.elk.layered.considerModelOrder.portModelOrder",r8n="org.eclipse.elk.layered.considerModelOrder.noModelOrder",c8n="org.eclipse.elk.layered.considerModelOrder.components",a8n="org.eclipse.elk.layered.considerModelOrder.longEdgeStrategy",o8n="org.eclipse.elk.layered.considerModelOrder.crossingCounterNodeInfluence",u8n="org.eclipse.elk.layered.considerModelOrder.crossingCounterPortInfluence",s8n="layering",h8n="layering.minWidth",f8n="layering.nodePromotion",l8n="crossingMinimization",b8n="org.eclipse.elk.hierarchyHandling",w8n="crossingMinimization.greedySwitch",d8n="nodePlacement",g8n="nodePlacement.bk",p8n="edgeRouting",m8n="org.eclipse.elk.edgeRouting",v8n="spacing",k8n="priority",y8n="compaction",M8n="compaction.postCompaction",T8n="Specifies whether and how post-process compaction is applied.",j8n="highDegreeNodes",E8n="wrapping",S8n="wrapping.cutting",P8n="wrapping.validify",C8n="wrapping.multiEdge",I8n="edgeLabels",O8n="considerModelOrder",A8n="org.eclipse.elk.spacing.commentComment",L8n="org.eclipse.elk.spacing.commentNode",N8n="org.eclipse.elk.spacing.edgeEdge",$8n="org.eclipse.elk.spacing.edgeNode",D8n="org.eclipse.elk.spacing.labelLabel",x8n="org.eclipse.elk.spacing.labelPortHorizontal",R8n="org.eclipse.elk.spacing.labelPortVertical",K8n="org.eclipse.elk.spacing.labelNode",F8n="org.eclipse.elk.spacing.nodeSelfLoop",_8n="org.eclipse.elk.spacing.portPort",B8n="org.eclipse.elk.spacing.individual",H8n="org.eclipse.elk.port.borderOffset",U8n="org.eclipse.elk.noLayout",G8n="org.eclipse.elk.port.side",q8n="org.eclipse.elk.debugMode",X8n="org.eclipse.elk.alignment",z8n="org.eclipse.elk.insideSelfLoops.activate",V8n="org.eclipse.elk.insideSelfLoops.yo",W8n="org.eclipse.elk.direction",Q8n="org.eclipse.elk.nodeLabels.padding",J8n="org.eclipse.elk.portLabels.nextToPortIfPossible",Y8n="org.eclipse.elk.portLabels.treatAsGroup",Z8n="org.eclipse.elk.portAlignment.default",n9n="org.eclipse.elk.portAlignment.north",t9n="org.eclipse.elk.portAlignment.south",e9n="org.eclipse.elk.portAlignment.west",i9n="org.eclipse.elk.portAlignment.east",r9n="org.eclipse.elk.contentAlignment",c9n="org.eclipse.elk.junctionPoints",a9n="org.eclipse.elk.edgeLabels.placement",o9n="org.eclipse.elk.port.index",u9n="org.eclipse.elk.commentBox",s9n="org.eclipse.elk.hypernode",h9n="org.eclipse.elk.port.anchor",f9n="org.eclipse.elk.partitioning.activate",l9n="org.eclipse.elk.partitioning.partition",b9n="org.eclipse.elk.position",w9n="org.eclipse.elk.margins",d9n="org.eclipse.elk.spacing.portsSurrounding",g9n="org.eclipse.elk.interactiveLayout",p9n="org.eclipse.elk.core.util",m9n={3:1,4:1,5:1,601:1},v9n="NETWORK_SIMPLEX",k9n="SIMPLE",y9n={106:1,47:1},M9n="org.eclipse.elk.alg.layered.p1cycles",T9n="org.eclipse.elk.alg.layered.p2layers",j9n={413:1,230:1},E9n={846:1,3:1,4:1},S9n="org.eclipse.elk.alg.layered.p3order",P9n="org.eclipse.elk.alg.layered.p4nodes",C9n={3:1,4:1,5:1,854:1},I9n=1e-5,O9n="org.eclipse.elk.alg.layered.p4nodes.bk",A9n="org.eclipse.elk.alg.layered.p5edges",L9n="org.eclipse.elk.alg.layered.p5edges.orthogonal",N9n="org.eclipse.elk.alg.layered.p5edges.orthogonal.direction",$9n=1e-6,D9n="org.eclipse.elk.alg.layered.p5edges.splines",x9n=.09999999999999998,R9n=1e-8,K9n=4.71238898038469,F9n=3.141592653589793,_9n="org.eclipse.elk.alg.mrtree",B9n=.10000000149011612,H9n="SUPER_ROOT",U9n="org.eclipse.elk.alg.mrtree.graph",G9n=-17976931348623157e292,q9n="org.eclipse.elk.alg.mrtree.intermediate",X9n="Processor compute fanout",z9n={3:1,6:1,4:1,5:1,534:1,100:1,115:1},V9n="Set neighbors in level",W9n="org.eclipse.elk.alg.mrtree.options",Q9n="DESCENDANTS",J9n="org.eclipse.elk.mrtree.compaction",Y9n="org.eclipse.elk.mrtree.edgeEndTextureLength",Z9n="org.eclipse.elk.mrtree.treeLevel",n7n="org.eclipse.elk.mrtree.positionConstraint",t7n="org.eclipse.elk.mrtree.weighting",e7n="org.eclipse.elk.mrtree.edgeRoutingMode",i7n="org.eclipse.elk.mrtree.searchOrder",r7n="Position Constraint",c7n="org.eclipse.elk.mrtree",a7n="org.eclipse.elk.tree",o7n="Processor arrange level",u7n="org.eclipse.elk.alg.mrtree.p2order",s7n="org.eclipse.elk.alg.mrtree.p4route",h7n="org.eclipse.elk.alg.radial",f7n=6.283185307179586,l7n="Before",b7n=5e-324,w7n="After",d7n="org.eclipse.elk.alg.radial.intermediate",g7n="COMPACTION",p7n="org.eclipse.elk.alg.radial.intermediate.compaction",m7n={3:1,4:1,5:1,100:1},v7n="org.eclipse.elk.alg.radial.intermediate.optimization",k7n="No implementation is available for the layout option ",y7n="org.eclipse.elk.alg.radial.options",M7n="org.eclipse.elk.radial.centerOnRoot",T7n="org.eclipse.elk.radial.orderId",j7n="org.eclipse.elk.radial.radius",E7n="org.eclipse.elk.radial.rotate",S7n="org.eclipse.elk.radial.compactor",P7n="org.eclipse.elk.radial.compactionStepSize",C7n="org.eclipse.elk.radial.sorter",I7n="org.eclipse.elk.radial.wedgeCriteria",O7n="org.eclipse.elk.radial.optimizationCriteria",A7n="org.eclipse.elk.radial.rotation.targetAngle",L7n="org.eclipse.elk.radial.rotation.computeAdditionalWedgeSpace",N7n="org.eclipse.elk.radial.rotation.outgoingEdgeAngles",$7n="Compaction",D7n="rotation",x7n="org.eclipse.elk.radial",R7n="org.eclipse.elk.alg.radial.p1position.wedge",K7n="org.eclipse.elk.alg.radial.sorting",F7n=5.497787143782138,_7n=3.9269908169872414,B7n=2.356194490192345,H7n="org.eclipse.elk.alg.rectpacking",U7n="org.eclipse.elk.alg.rectpacking.intermediate",G7n="org.eclipse.elk.alg.rectpacking.options",q7n="org.eclipse.elk.rectpacking.trybox",X7n="org.eclipse.elk.rectpacking.currentPosition",z7n="org.eclipse.elk.rectpacking.desiredPosition",V7n="org.eclipse.elk.rectpacking.inNewRow",W7n="org.eclipse.elk.rectpacking.widthApproximation.strategy",Q7n="org.eclipse.elk.rectpacking.widthApproximation.targetWidth",J7n="org.eclipse.elk.rectpacking.widthApproximation.optimizationGoal",Y7n="org.eclipse.elk.rectpacking.widthApproximation.lastPlaceShift",Z7n="org.eclipse.elk.rectpacking.packing.strategy",nnt="org.eclipse.elk.rectpacking.packing.compaction.rowHeightReevaluation",tnt="org.eclipse.elk.rectpacking.packing.compaction.iterations",ent="org.eclipse.elk.rectpacking.whiteSpaceElimination.strategy",int="widthApproximation",rnt="Compaction Strategy",cnt="packing.compaction",ant="org.eclipse.elk.rectpacking",ont="org.eclipse.elk.alg.rectpacking.p1widthapproximation",unt="org.eclipse.elk.alg.rectpacking.p2packing",snt="No Compaction",hnt="org.eclipse.elk.alg.rectpacking.p3whitespaceelimination",fnt="org.eclipse.elk.alg.rectpacking.util",lnt="No implementation available for ",bnt="org.eclipse.elk.alg.spore",wnt="org.eclipse.elk.alg.spore.options",dnt="org.eclipse.elk.sporeCompaction",gnt="org.eclipse.elk.underlyingLayoutAlgorithm",pnt="org.eclipse.elk.processingOrder.treeConstruction",mnt="org.eclipse.elk.processingOrder.spanningTreeCostFunction",vnt="org.eclipse.elk.processingOrder.preferredRoot",knt="org.eclipse.elk.processingOrder.rootSelection",ynt="org.eclipse.elk.structure.structureExtractionStrategy",Mnt="org.eclipse.elk.compaction.compactionStrategy",Tnt="org.eclipse.elk.compaction.orthogonal",jnt="org.eclipse.elk.overlapRemoval.maxIterations",Ent="org.eclipse.elk.overlapRemoval.runScanline",Snt="processingOrder",Pnt="overlapRemoval",Cnt="org.eclipse.elk.sporeOverlap",Int="org.eclipse.elk.alg.spore.p1structure",Ont="org.eclipse.elk.alg.spore.p2processingorder",Ant="org.eclipse.elk.alg.spore.p3execution",Lnt="Topdown Layout",Nnt="Invalid index: ",$nt="org.eclipse.elk.core.alg",Dnt={341:1},xnt={295:1},Rnt="Make sure its type is registered with the ",Knt=" utility class.",Fnt="true",_nt="false",Bnt="Couldn't clone property '",Hnt=.05,Unt="org.eclipse.elk.core.options",Gnt=1.2999999523162842,qnt="org.eclipse.elk.box",Xnt="org.eclipse.elk.expandNodes",znt="org.eclipse.elk.box.packingMode",Vnt="org.eclipse.elk.algorithm",Wnt="org.eclipse.elk.resolvedAlgorithm",Qnt="org.eclipse.elk.bendPoints",Jnt="org.eclipse.elk.labelManager",Ynt="org.eclipse.elk.scaleFactor",Znt="org.eclipse.elk.childAreaWidth",ntt="org.eclipse.elk.childAreaHeight",ttt="org.eclipse.elk.animate",ett="org.eclipse.elk.animTimeFactor",itt="org.eclipse.elk.layoutAncestors",rtt="org.eclipse.elk.maxAnimTime",ctt="org.eclipse.elk.minAnimTime",att="org.eclipse.elk.progressBar",ott="org.eclipse.elk.validateGraph",utt="org.eclipse.elk.validateOptions",stt="org.eclipse.elk.zoomToFit",htt="org.eclipse.elk.font.name",ftt="org.eclipse.elk.font.size",ltt="org.eclipse.elk.topdown.sizeApproximator",btt="org.eclipse.elk.topdown.scaleCap",wtt="org.eclipse.elk.edge.type",dtt="partitioning",gtt="nodeLabels",ptt="portAlignment",mtt="nodeSize",vtt="port",ktt="portLabels",ytt="topdown",Mtt="insideSelfLoops",Ttt="org.eclipse.elk.fixed",jtt="org.eclipse.elk.random",Ett={3:1,34:1,22:1,347:1},Stt="port must have a parent node to calculate the port side",Ptt="The edge needs to have exactly one edge section. Found: ",Ctt="org.eclipse.elk.core.util.adapters",Itt="org.eclipse.emf.ecore",Ott="org.eclipse.elk.graph",Att="EMapPropertyHolder",Ltt="ElkBendPoint",Ntt="ElkGraphElement",$tt="ElkConnectableShape",Dtt="ElkEdge",xtt="ElkEdgeSection",Rtt="EModelElement",Ktt="ENamedElement",Ftt="ElkLabel",_tt="ElkNode",Btt="ElkPort",Htt={94:1,93:1},Utt="org.eclipse.emf.common.notify.impl",Gtt="The feature '",qtt="' is not a valid changeable feature",Xtt="Expecting null",ztt="' is not a valid feature",Vtt="The feature ID",Wtt=" is not a valid feature ID",Qtt=32768,Jtt={110:1,94:1,93:1,58:1,54:1,99:1},Ytt="org.eclipse.emf.ecore.impl",Ztt="org.eclipse.elk.graph.impl",net="Recursive containment not allowed for ",tet="The datatype '",eet="' is not a valid classifier",iet="The value '",ret={195:1,3:1,4:1},cet="The class '",aet="http://www.eclipse.org/elk/ElkGraph",oet="property",uet="value",set="source",het="properties",fet="identifier",bet="height",wet="width",det="parent",get="text",pet="children",met="hierarchical",vet="sources",ket="targets",yet="sections",Met="bendPoints",Tet="outgoingShape",jet="incomingShape",Eet="outgoingSections",Set="incomingSections",Pet="org.eclipse.emf.common.util",Cet="Severe implementation error in the Json to ElkGraph importer.",Iet="id",Oet="org.eclipse.elk.graph.json",Aet="Unhandled parameter types: ",Let="startPoint",Net="An edge must have at least one source and one target (edge id: '",$et="').",Det="Referenced edge section does not exist: ",xet=" (edge id: '",Ret="target",Ket="sourcePoint",Fet="targetPoint",_et="group",Bet="name",Het="connectableShape cannot be null",Uet="edge cannot be null",Get="Passed edge is not 'simple'.",qet="org.eclipse.elk.graph.util",Xet="The 'no duplicates' constraint is violated",zet="targetIndex=",Vet=", size=",Wet="sourceIndex=",Qet={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1},Jet={3:1,4:1,20:1,31:1,56:1,16:1,51:1,15:1,59:1,70:1,66:1,61:1,596:1},Yet="logging",Zet="measureExecutionTime",nit="parser.parse.1",tit="parser.parse.2",eit="parser.next.1",iit="parser.next.2",rit="parser.next.3",cit="parser.next.4",ait="parser.factor.1",oit="parser.factor.2",uit="parser.factor.3",sit="parser.factor.4",hit="parser.factor.5",fit="parser.factor.6",lit="parser.atom.1",bit="parser.atom.2",wit="parser.atom.3",dit="parser.atom.4",git="parser.atom.5",pit="parser.cc.1",mit="parser.cc.2",vit="parser.cc.3",kit="parser.cc.5",yit="parser.cc.6",Mit="parser.cc.7",Tit="parser.cc.8",jit="parser.ope.1",Eit="parser.ope.2",Sit="parser.ope.3",Pit="parser.descape.1",Cit="parser.descape.2",Iit="parser.descape.3",Oit="parser.descape.4",Ait="parser.descape.5",Lit="parser.process.1",Nit="parser.quantifier.1",$it="parser.quantifier.2",Dit="parser.quantifier.3",xit="parser.quantifier.4",Rit="parser.quantifier.5",Kit="org.eclipse.emf.common.notify",Fit={424:1,686:1},_it={3:1,4:1,20:1,31:1,56:1,16:1,15:1,70:1,61:1},Bit={378:1,152:1},Hit="index=",Uit={3:1,4:1,5:1,129:1},Git={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,61:1},qit={3:1,6:1,4:1,5:1,198:1},Xit={3:1,4:1,5:1,173:1,379:1},zit=";/?:@&=+$,",Vit="invalid authority: ",Wit="EAnnotation",Qit="ETypedElement",Jit="EStructuralFeature",Yit="EAttribute",Zit="EClassifier",nrt="EEnumLiteral",trt="EGenericType",ert="EOperation",irt="EParameter",rrt="EReference",crt="ETypeParameter",art="org.eclipse.emf.ecore.util",ort={79:1},urt={3:1,20:1,16:1,15:1,61:1,597:1,79:1,71:1,97:1},srt="org.eclipse.emf.ecore.util.FeatureMap$Entry",hrt=8192,frt=2048,lrt="byte",brt="char",wrt="double",drt="float",grt="int",prt="long",mrt="short",vrt="java.lang.Object",krt={3:1,4:1,5:1,254:1},yrt={3:1,4:1,5:1,688:1},Mrt={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1,71:1},Trt={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1,79:1,71:1,97:1},jrt="mixed",Ert="http:///org/eclipse/emf/ecore/util/ExtendedMetaData",Srt="kind",Prt={3:1,4:1,5:1,689:1},Crt={3:1,4:1,20:1,31:1,56:1,16:1,15:1,70:1,61:1,79:1,71:1,97:1},Irt={20:1,31:1,56:1,16:1,15:1,61:1,71:1},Ort={51:1,128:1,287:1},Art={76:1,343:1},Lrt="The value of type '",Nrt="' must be of type '",$rt=1352,Drt="http://www.eclipse.org/emf/2002/Ecore",xrt=-32768,Rrt="constraints",Krt="baseType",Frt="getEStructuralFeature",_rt="getFeatureID",Brt="feature",Hrt="getOperationID",Urt="operation",Grt="defaultValue",qrt="eTypeParameters",Xrt="isInstance",zrt="getEEnumLiteral",Vrt="eContainingClass",Wrt={57:1},Qrt={3:1,4:1,5:1,124:1},Jrt="org.eclipse.emf.ecore.resource",Yrt={94:1,93:1,599:1,2034:1},Zrt="org.eclipse.emf.ecore.resource.impl",nct="unspecified",tct="simple",ect="attribute",ict="attributeWildcard",rct="element",cct="elementWildcard",act="collapse",oct="itemType",uct="namespace",sct="##targetNamespace",hct="whiteSpace",fct="wildcards",lct="http://www.eclipse.org/emf/2003/XMLType",bct="##any",wct="uninitialized",dct="The multiplicity constraint is violated",gct="org.eclipse.emf.ecore.xml.type",pct="ProcessingInstruction",mct="SimpleAnyType",vct="XMLTypeDocumentRoot",kct="org.eclipse.emf.ecore.xml.type.impl",yct="INF",Mct="processing",Tct="ENTITIES_._base",jct="minLength",Ect="ENTITY",Sct="NCName",Pct="IDREFS_._base",Cct="integer",Ict="token",Oct="pattern",Act="[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*",Lct="\\i\\c*",Nct="[\\i-[:]][\\c-[:]]*",$ct="nonPositiveInteger",Dct="maxInclusive",xct="NMTOKEN",Rct="NMTOKENS_._base",Kct="nonNegativeInteger",Fct="minInclusive",_ct="normalizedString",Bct="unsignedByte",Hct="unsignedInt",Uct="18446744073709551615",Gct="unsignedShort",qct="processingInstruction",Xct="org.eclipse.emf.ecore.xml.type.internal",zct=1114111,Vct="Internal Error: shorthands: \\u",Wct="xml:isDigit",Qct="xml:isWord",Jct="xml:isSpace",Yct="xml:isNameChar",Zct="xml:isInitialNameChar",nat="09\u0660\u0669\u06f0\u06f9\u0966\u096f\u09e6\u09ef\u0a66\u0a6f\u0ae6\u0aef\u0b66\u0b6f\u0be7\u0bef\u0c66\u0c6f\u0ce6\u0cef\u0d66\u0d6f\u0e50\u0e59\u0ed0\u0ed9\u0f20\u0f29",tat="AZaz\xc0\xd6\xd8\xf6\xf8\u0131\u0134\u013e\u0141\u0148\u014a\u017e\u0180\u01c3\u01cd\u01f0\u01f4\u01f5\u01fa\u0217\u0250\u02a8\u02bb\u02c1\u0386\u0386\u0388\u038a\u038c\u038c\u038e\u03a1\u03a3\u03ce\u03d0\u03d6\u03da\u03da\u03dc\u03dc\u03de\u03de\u03e0\u03e0\u03e2\u03f3\u0401\u040c\u040e\u044f\u0451\u045c\u045e\u0481\u0490\u04c4\u04c7\u04c8\u04cb\u04cc\u04d0\u04eb\u04ee\u04f5\u04f8\u04f9\u0531\u0556\u0559\u0559\u0561\u0586\u05d0\u05ea\u05f0\u05f2\u0621\u063a\u0641\u064a\u0671\u06b7\u06ba\u06be\u06c0\u06ce\u06d0\u06d3\u06d5\u06d5\u06e5\u06e6\u0905\u0939\u093d\u093d\u0958\u0961\u0985\u098c\u098f\u0990\u0993\u09a8\u09aa\u09b0\u09b2\u09b2\u09b6\u09b9\u09dc\u09dd\u09df\u09e1\u09f0\u09f1\u0a05\u0a0a\u0a0f\u0a10\u0a13\u0a28\u0a2a\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59\u0a5c\u0a5e\u0a5e\u0a72\u0a74\u0a85\u0a8b\u0a8d\u0a8d\u0a8f\u0a91\u0a93\u0aa8\u0aaa\u0ab0\u0ab2\u0ab3\u0ab5\u0ab9\u0abd\u0abd\u0ae0\u0ae0\u0b05\u0b0c\u0b0f\u0b10\u0b13\u0b28\u0b2a\u0b30\u0b32\u0b33\u0b36\u0b39\u0b3d\u0b3d\u0b5c\u0b5d\u0b5f\u0b61\u0b85\u0b8a\u0b8e\u0b90\u0b92\u0b95\u0b99\u0b9a\u0b9c\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8\u0baa\u0bae\u0bb5\u0bb7\u0bb9\u0c05\u0c0c\u0c0e\u0c10\u0c12\u0c28\u0c2a\u0c33\u0c35\u0c39\u0c60\u0c61\u0c85\u0c8c\u0c8e\u0c90\u0c92\u0ca8\u0caa\u0cb3\u0cb5\u0cb9\u0cde\u0cde\u0ce0\u0ce1\u0d05\u0d0c\u0d0e\u0d10\u0d12\u0d28\u0d2a\u0d39\u0d60\u0d61\u0e01\u0e2e\u0e30\u0e30\u0e32\u0e33\u0e40\u0e45\u0e81\u0e82\u0e84\u0e84\u0e87\u0e88\u0e8a\u0e8a\u0e8d\u0e8d\u0e94\u0e97\u0e99\u0e9f\u0ea1\u0ea3\u0ea5\u0ea5\u0ea7\u0ea7\u0eaa\u0eab\u0ead\u0eae\u0eb0\u0eb0\u0eb2\u0eb3\u0ebd\u0ebd\u0ec0\u0ec4\u0f40\u0f47\u0f49\u0f69\u10a0\u10c5\u10d0\u10f6\u1100\u1100\u1102\u1103\u1105\u1107\u1109\u1109\u110b\u110c\u110e\u1112\u113c\u113c\u113e\u113e\u1140\u1140\u114c\u114c\u114e\u114e\u1150\u1150\u1154\u1155\u1159\u1159\u115f\u1161\u1163\u1163\u1165\u1165\u1167\u1167\u1169\u1169\u116d\u116e\u1172\u1173\u1175\u1175\u119e\u119e\u11a8\u11a8\u11ab\u11ab\u11ae\u11af\u11b7\u11b8\u11ba\u11ba\u11bc\u11c2\u11eb\u11eb\u11f0\u11f0\u11f9\u11f9\u1e00\u1e9b\u1ea0\u1ef9\u1f00\u1f15\u1f18\u1f1d\u1f20\u1f45\u1f48\u1f4d\u1f50\u1f57\u1f59\u1f59\u1f5b\u1f5b\u1f5d\u1f5d\u1f5f\u1f7d\u1f80\u1fb4\u1fb6\u1fbc\u1fbe\u1fbe\u1fc2\u1fc4\u1fc6\u1fcc\u1fd0\u1fd3\u1fd6\u1fdb\u1fe0\u1fec\u1ff2\u1ff4\u1ff6\u1ffc\u2126\u2126\u212a\u212b\u212e\u212e\u2180\u2182\u3007\u3007\u3021\u3029\u3041\u3094\u30a1\u30fa\u3105\u312c\u4e00\u9fa5\uac00\ud7a3",eat="Private Use",iat="ASSIGNED",rat="\0\x7f\x80\xff\u0100\u017f\u0180\u024f\u0250\u02af\u02b0\u02ff\u0300\u036f\u0370\u03ff\u0400\u04ff\u0530\u058f\u0590\u05ff\u0600\u06ff\u0700\u074f\u0780\u07bf\u0900\u097f\u0980\u09ff\u0a00\u0a7f\u0a80\u0aff\u0b00\u0b7f\u0b80\u0bff\u0c00\u0c7f\u0c80\u0cff\u0d00\u0d7f\u0d80\u0dff\u0e00\u0e7f\u0e80\u0eff\u0f00\u0fff\u1000\u109f\u10a0\u10ff\u1100\u11ff\u1200\u137f\u13a0\u13ff\u1400\u167f\u1680\u169f\u16a0\u16ff\u1780\u17ff\u1800\u18af\u1e00\u1eff\u1f00\u1fff\u2000\u206f\u2070\u209f\u20a0\u20cf\u20d0\u20ff\u2100\u214f\u2150\u218f\u2190\u21ff\u2200\u22ff\u2300\u23ff\u2400\u243f\u2440\u245f\u2460\u24ff\u2500\u257f\u2580\u259f\u25a0\u25ff\u2600\u26ff\u2700\u27bf\u2800\u28ff\u2e80\u2eff\u2f00\u2fdf\u2ff0\u2fff\u3000\u303f\u3040\u309f\u30a0\u30ff\u3100\u312f\u3130\u318f\u3190\u319f\u31a0\u31bf\u3200\u32ff\u3300\u33ff\u3400\u4db5\u4e00\u9fff\ua000\ua48f\ua490\ua4cf\uac00\ud7a3\ue000\uf8ff\uf900\ufaff\ufb00\ufb4f\ufb50\ufdff\ufe20\ufe2f\ufe30\ufe4f\ufe50\ufe6f\ufe70\ufefe\ufeff\ufeff\uff00\uffef",cat="UNASSIGNED",aat={3:1,122:1},oat="org.eclipse.emf.ecore.xml.type.util",uat={3:1,4:1,5:1,381:1},sat="org.eclipse.xtext.xbase.lib",hat="Cannot add elements to a Range",fat="Cannot set elements in a Range",lat="Cannot remove elements from a Range",bat="user.agent";e.goog=e.goog||{},e.goog.global=e.goog.global||e,sZn={},sDn(1,null,{},r),uZn.Fb=function(n){return SL(this,n)},uZn.Gb=function(){return this.Rm},uZn.Hb=function(){return xx(this)},uZn.Ib=function(){return Ij(Tbn(this))+"@"+(Hon(this)>>>0).toString(16)},uZn.equals=function(n){return this.Fb(n)},uZn.hashCode=function(){return this.Hb()},uZn.toString=function(){return this.Ib()},sDn(297,1,{297:1,2124:1},Ifn),uZn.ve=function(n){var t;return(t=new Ifn).i=4,t.c=n>1?B0(this,n-1):this,t},uZn.we=function(){return vK(this),this.b},uZn.xe=function(){return Ij(this)},uZn.ye=function(){return vK(this),this.k},uZn.ze=function(){return!!(4&this.i)},uZn.Ae=function(){return!!(1&this.i)},uZn.Ib=function(){return crn(this)},uZn.i=0;var wat,dat=zW(kZn,"Object",1),gat=zW(kZn,"Class",297);sDn(2096,1,yZn),zW(MZn,"Optional",2096),sDn(1191,2096,yZn,c),uZn.Fb=function(n){return n===this},uZn.Hb=function(){return 2040732332},uZn.Ib=function(){return"Optional.absent()"},uZn.Jb=function(n){return WW(n),gy(),wat},zW(MZn,"Absent",1191),sDn(636,1,{},FM),zW(MZn,"Joiner",636);var pat=Iq(MZn,"Predicate");sDn(589,1,{178:1,589:1,3:1,46:1},Hl),uZn.Mb=function(n){return Wfn(this,n)},uZn.Lb=function(n){return Wfn(this,n)},uZn.Fb=function(n){var t;return!!F$(n,589)&&(t=uG(n,589),PDn(this.a,t.a))},uZn.Hb=function(){return Zfn(this.a)+306654252},uZn.Ib=function(){return eAn(this.a)},zW(MZn,"Predicates/AndPredicate",589),sDn(419,2096,{419:1,3:1},Ul),uZn.Fb=function(n){var t;return!!F$(n,419)&&(t=uG(n,419),udn(this.a,t.a))},uZn.Hb=function(){return 1502476572+Hon(this.a)},uZn.Ib=function(){return CZn+this.a+")"},uZn.Jb=function(n){return new Ul(bZ(n.Kb(this.a),"the Function passed to Optional.transform() must not return null."))},zW(MZn,"Present",419),sDn(204,1,OZn),uZn.Nb=function(n){SV(this,n)},uZn.Qb=function(){_M()},zW(AZn,"UnmodifiableIterator",204),sDn(2076,204,LZn),uZn.Qb=function(){_M()},uZn.Rb=function(n){throw hv(new Kv)},uZn.Wb=function(n){throw hv(new Kv)},zW(AZn,"UnmodifiableListIterator",2076),sDn(399,2076,LZn),uZn.Ob=function(){return this.c0},uZn.Pb=function(){if(this.c>=this.d)throw hv(new Bv);return this.Xb(this.c++)},uZn.Tb=function(){return this.c},uZn.Ub=function(){if(this.c<=0)throw hv(new Bv);return this.Xb(--this.c)},uZn.Vb=function(){return this.c-1},uZn.c=0,uZn.d=0,zW(AZn,"AbstractIndexedListIterator",399),sDn(713,204,OZn),uZn.Ob=function(){return oon(this)},uZn.Pb=function(){return yen(this)},uZn.e=1,zW(AZn,"AbstractIterator",713),sDn(2084,1,{229:1}),uZn.Zb=function(){return this.f||(this.f=this.ac())},uZn.Fb=function(n){return Aln(this,n)},uZn.Hb=function(){return Hon(this.Zb())},uZn.dc=function(){return 0==this.gc()},uZn.ec=function(){return kz(this)},uZn.Ib=function(){return cpn(this.Zb())},zW(AZn,"AbstractMultimap",2084),sDn(742,2084,NZn),uZn.$b=function(){ban(this)},uZn._b=function(n){return jj(this,n)},uZn.ac=function(){return new OE(this,this.c)},uZn.ic=function(n){return this.hc()},uZn.bc=function(){return new RD(this,this.c)},uZn.jc=function(){return this.mc(this.hc())},uZn.kc=function(){return new My(this)},uZn.lc=function(){return ICn(this.c.vc().Nc(),new o,64,this.d)},uZn.cc=function(n){return Y9(this,n)},uZn.fc=function(n){return twn(this,n)},uZn.gc=function(){return this.d},uZn.mc=function(n){return hZ(),new qw(n)},uZn.nc=function(){return new yy(this)},uZn.oc=function(){return ICn(this.c.Cc().Nc(),new a,64,this.d)},uZn.pc=function(n,t){return new A7(this,n,t,null)},uZn.d=0,zW(AZn,"AbstractMapBasedMultimap",742),sDn(1696,742,NZn),uZn.hc=function(){return new R7(this.a)},uZn.jc=function(){return hZ(),hZ(),zot},uZn.cc=function(n){return uG(Y9(this,n),15)},uZn.fc=function(n){return uG(twn(this,n),15)},uZn.Zb=function(){return nZ(this)},uZn.Fb=function(n){return Aln(this,n)},uZn.qc=function(n){return uG(Y9(this,n),15)},uZn.rc=function(n){return uG(twn(this,n),15)},uZn.mc=function(n){return SZ(uG(n,15))},uZn.pc=function(n,t){return S6(this,n,uG(t,15),null)},zW(AZn,"AbstractListMultimap",1696),sDn(748,1,$Zn),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.c.Ob()||this.e.Ob()},uZn.Pb=function(){var n;return this.e.Ob()||(n=uG(this.c.Pb(),44),this.b=n.ld(),this.a=uG(n.md(),16),this.e=this.a.Kc()),this.sc(this.b,this.e.Pb())},uZn.Qb=function(){this.e.Qb(),uG(nJ(this.a),16).dc()&&this.c.Qb(),--this.d.d},zW(AZn,"AbstractMapBasedMultimap/Itr",748),sDn(1129,748,$Zn,yy),uZn.sc=function(n,t){return t},zW(AZn,"AbstractMapBasedMultimap/1",1129),sDn(1130,1,{},a),uZn.Kb=function(n){return uG(n,16).Nc()},zW(AZn,"AbstractMapBasedMultimap/1methodref$spliterator$Type",1130),sDn(1131,748,$Zn,My),uZn.sc=function(n,t){return new FE(n,t)},zW(AZn,"AbstractMapBasedMultimap/2",1131);var mat=Iq(DZn,"Map");sDn(2065,1,xZn),uZn.wc=function(n){Yun(this,n)},uZn.yc=function(n,t,e){return Jgn(this,n,t,e)},uZn.$b=function(){this.vc().$b()},uZn.tc=function(n){return sTn(this,n)},uZn._b=function(n){return!!TPn(this,n,!1)},uZn.uc=function(n){var t,e;for(t=this.vc().Kc();t.Ob();)if(e=uG(t.Pb(),44).md(),xA(n)===xA(e)||null!=n&&udn(n,e))return!0;return!1},uZn.Fb=function(n){var t,e,i;if(n===this)return!0;if(!F$(n,85))return!1;if(i=uG(n,85),this.gc()!=i.gc())return!1;for(e=i.vc().Kc();e.Ob();)if(t=uG(e.Pb(),44),!this.tc(t))return!1;return!0},uZn.xc=function(n){return DA(TPn(this,n,!1))},uZn.Hb=function(){return tfn(this.vc())},uZn.dc=function(){return 0==this.gc()},uZn.ec=function(){return new Lw(this)},uZn.zc=function(n,t){throw hv(new TM("Put not supported on this map"))},uZn.Ac=function(n){xun(this,n)},uZn.Bc=function(n){return DA(TPn(this,n,!0))},uZn.gc=function(){return this.vc().gc()},uZn.Ib=function(){return KPn(this)},uZn.Cc=function(){return new Fw(this)},zW(DZn,"AbstractMap",2065),sDn(2085,2065,xZn),uZn.bc=function(){return new VE(this)},uZn.vc=function(){return vz(this)},uZn.ec=function(){return this.g||(this.g=this.bc())},uZn.Cc=function(){return this.i||(this.i=new zE(this))},zW(AZn,"Maps/ViewCachingAbstractMap",2085),sDn(402,2085,xZn,OE),uZn.xc=function(n){return srn(this,n)},uZn.Bc=function(n){return abn(this,n)},uZn.$b=function(){this.d==this.e.c?this.e.$b():Hq(new Gq(this))},uZn._b=function(n){return Uwn(this.d,n)},uZn.Ec=function(){return new Gl(this)},uZn.Dc=function(){return this.Ec()},uZn.Fb=function(n){return this===n||udn(this.d,n)},uZn.Hb=function(){return Hon(this.d)},uZn.ec=function(){return this.e.ec()},uZn.gc=function(){return this.d.gc()},uZn.Ib=function(){return cpn(this.d)},zW(AZn,"AbstractMapBasedMultimap/AsMap",402);var vat=Iq(kZn,"Iterable");sDn(31,1,RZn),uZn.Jc=function(n){z8(this,n)},uZn.Lc=function(){return this.Oc()},uZn.Nc=function(){return new h3(this,0)},uZn.Oc=function(){return new fX(null,this.Nc())},uZn.Fc=function(n){throw hv(new TM("Add not supported on this collection"))},uZn.Gc=function(n){return Qon(this,n)},uZn.$b=function(){oY(this)},uZn.Hc=function(n){return Wpn(this,n,!1)},uZn.Ic=function(n){return yhn(this,n)},uZn.dc=function(){return 0==this.gc()},uZn.Mc=function(n){return Wpn(this,n,!0)},uZn.Pc=function(){return Sz(this)},uZn.Qc=function(n){return oTn(this,n)},uZn.Ib=function(){return vIn(this)},zW(DZn,"AbstractCollection",31);var kat=Iq(DZn,"Set");sDn(KZn,31,FZn),uZn.Nc=function(){return new h3(this,1)},uZn.Fb=function(n){return Fvn(this,n)},uZn.Hb=function(){return tfn(this)},zW(DZn,"AbstractSet",KZn),sDn(2068,KZn,FZn),zW(AZn,"Sets/ImprovedAbstractSet",2068),sDn(2069,2068,FZn),uZn.$b=function(){this.Rc().$b()},uZn.Hc=function(n){return Amn(this,n)},uZn.dc=function(){return this.Rc().dc()},uZn.Mc=function(n){var t;return!(!this.Hc(n)||!F$(n,44))&&(t=uG(n,44),this.Rc().ec().Mc(t.ld()))},uZn.gc=function(){return this.Rc().gc()},zW(AZn,"Maps/EntrySet",2069),sDn(1127,2069,FZn,Gl),uZn.Hc=function(n){return Gwn(this.a.d.vc(),n)},uZn.Kc=function(){return new Gq(this.a)},uZn.Rc=function(){return this.a},uZn.Mc=function(n){var t;return!!Gwn(this.a.d.vc(),n)&&(t=uG(nJ(uG(n,44)),44),H9(this.a.e,t.ld()),!0)},uZn.Nc=function(){return JU(this.a.d.vc().Nc(),new ql(this.a))},zW(AZn,"AbstractMapBasedMultimap/AsMap/AsMapEntries",1127),sDn(1128,1,{},ql),uZn.Kb=function(n){return O9(this.a,uG(n,44))},zW(AZn,"AbstractMapBasedMultimap/AsMap/AsMapEntries/0methodref$wrapEntry$Type",1128),sDn(746,1,$Zn,Gq),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){var n;return n=uG(this.b.Pb(),44),this.a=uG(n.md(),16),O9(this.c,n)},uZn.Ob=function(){return this.b.Ob()},uZn.Qb=function(){IB(!!this.a),this.b.Qb(),this.c.e.d-=this.a.gc(),this.a.$b(),this.a=null},zW(AZn,"AbstractMapBasedMultimap/AsMap/AsMapIterator",746),sDn(542,2068,FZn,VE),uZn.$b=function(){this.b.$b()},uZn.Hc=function(n){return this.b._b(n)},uZn.Jc=function(n){WW(n),this.b.wc(new db(n))},uZn.dc=function(){return this.b.dc()},uZn.Kc=function(){return new Ny(this.b.vc().Kc())},uZn.Mc=function(n){return!!this.b._b(n)&&(this.b.Bc(n),!0)},uZn.gc=function(){return this.b.gc()},zW(AZn,"Maps/KeySet",542),sDn(327,542,FZn,RD),uZn.$b=function(){Hq(new AE(this,this.b.vc().Kc()))},uZn.Ic=function(n){return this.b.ec().Ic(n)},uZn.Fb=function(n){return this===n||udn(this.b.ec(),n)},uZn.Hb=function(){return Hon(this.b.ec())},uZn.Kc=function(){return new AE(this,this.b.vc().Kc())},uZn.Mc=function(n){var t,e;return e=0,(t=uG(this.b.Bc(n),16))&&(e=t.gc(),t.$b(),this.a.d-=e),e>0},uZn.Nc=function(){return this.b.ec().Nc()},zW(AZn,"AbstractMapBasedMultimap/KeySet",327),sDn(747,1,$Zn,AE),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.c.Ob()},uZn.Pb=function(){return this.a=uG(this.c.Pb(),44),this.a.ld()},uZn.Qb=function(){var n;IB(!!this.a),n=uG(this.a.md(),16),this.c.Qb(),this.b.a.d-=n.gc(),n.$b(),this.a=null},zW(AZn,"AbstractMapBasedMultimap/KeySet/1",747),sDn(503,402,{85:1,133:1},NK),uZn.bc=function(){return this.Sc()},uZn.ec=function(){return this.Uc()},uZn.Sc=function(){return new yE(this.c,this.Wc())},uZn.Tc=function(){return this.Wc().Tc()},uZn.Uc=function(){return this.b||(this.b=this.Sc())},uZn.Vc=function(){return this.Wc().Vc()},uZn.Wc=function(){return uG(this.d,133)},zW(AZn,"AbstractMapBasedMultimap/SortedAsMap",503),sDn(446,503,_Zn,$K),uZn.bc=function(){return new ME(this.a,uG(uG(this.d,133),139))},uZn.Sc=function(){return new ME(this.a,uG(uG(this.d,133),139))},uZn.ec=function(){return uG(this.b||(this.b=new ME(this.a,uG(uG(this.d,133),139))),277)},uZn.Uc=function(){return uG(this.b||(this.b=new ME(this.a,uG(uG(this.d,133),139))),277)},uZn.Wc=function(){return uG(uG(this.d,133),139)},uZn.Xc=function(n){return uG(uG(this.d,133),139).Xc(n)},uZn.Yc=function(n){return uG(uG(this.d,133),139).Yc(n)},uZn.Zc=function(n,t){return new $K(this.a,uG(uG(this.d,133),139).Zc(n,t))},uZn.$c=function(n){return uG(uG(this.d,133),139).$c(n)},uZn._c=function(n){return uG(uG(this.d,133),139)._c(n)},uZn.ad=function(n,t){return new $K(this.a,uG(uG(this.d,133),139).ad(n,t))},zW(AZn,"AbstractMapBasedMultimap/NavigableAsMap",446),sDn(502,327,BZn,yE),uZn.Nc=function(){return this.b.ec().Nc()},zW(AZn,"AbstractMapBasedMultimap/SortedKeySet",502),sDn(401,502,HZn,ME),zW(AZn,"AbstractMapBasedMultimap/NavigableKeySet",401),sDn(551,31,RZn,A7),uZn.Fc=function(n){var t,e;return bpn(this),e=this.d.dc(),(t=this.d.Fc(n))&&(++this.f.d,e&&mF(this)),t},uZn.Gc=function(n){var t,e,i;return!n.dc()&&(bpn(this),i=this.d.gc(),(t=this.d.Gc(n))&&(e=this.d.gc(),this.f.d+=e-i,0==i&&mF(this)),t)},uZn.$b=function(){var n;bpn(this),0!=(n=this.d.gc())&&(this.d.$b(),this.f.d-=n,DX(this))},uZn.Hc=function(n){return bpn(this),this.d.Hc(n)},uZn.Ic=function(n){return bpn(this),this.d.Ic(n)},uZn.Fb=function(n){return n===this||(bpn(this),udn(this.d,n))},uZn.Hb=function(){return bpn(this),Hon(this.d)},uZn.Kc=function(){return bpn(this),new WU(this)},uZn.Mc=function(n){var t;return bpn(this),(t=this.d.Mc(n))&&(--this.f.d,DX(this)),t},uZn.gc=function(){return qA(this)},uZn.Nc=function(){return bpn(this),this.d.Nc()},uZn.Ib=function(){return bpn(this),cpn(this.d)},zW(AZn,"AbstractMapBasedMultimap/WrappedCollection",551);var yat=Iq(DZn,"List");sDn(744,551,{20:1,31:1,16:1,15:1},qz),uZn.jd=function(n){Lon(this,n)},uZn.Nc=function(){return bpn(this),this.d.Nc()},uZn.bd=function(n,t){var e;bpn(this),e=this.d.dc(),uG(this.d,15).bd(n,t),++this.a.d,e&&mF(this)},uZn.cd=function(n,t){var e,i,r;return!t.dc()&&(bpn(this),r=this.d.gc(),(e=uG(this.d,15).cd(n,t))&&(i=this.d.gc(),this.a.d+=i-r,0==r&&mF(this)),e)},uZn.Xb=function(n){return bpn(this),uG(this.d,15).Xb(n)},uZn.dd=function(n){return bpn(this),uG(this.d,15).dd(n)},uZn.ed=function(){return bpn(this),new JN(this)},uZn.fd=function(n){return bpn(this),new UY(this,n)},uZn.gd=function(n){var t;return bpn(this),t=uG(this.d,15).gd(n),--this.a.d,DX(this),t},uZn.hd=function(n,t){return bpn(this),uG(this.d,15).hd(n,t)},uZn.kd=function(n,t){return bpn(this),S6(this.a,this.e,uG(this.d,15).kd(n,t),this.b?this.b:this)},zW(AZn,"AbstractMapBasedMultimap/WrappedList",744),sDn(1126,744,{20:1,31:1,16:1,15:1,59:1},Yx),zW(AZn,"AbstractMapBasedMultimap/RandomAccessWrappedList",1126),sDn(628,1,$Zn,WU),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return FY(this),this.b.Ob()},uZn.Pb=function(){return FY(this),this.b.Pb()},uZn.Qb=function(){zD(this)},zW(AZn,"AbstractMapBasedMultimap/WrappedCollection/WrappedIterator",628),sDn(745,628,UZn,JN,UY),uZn.Qb=function(){zD(this)},uZn.Rb=function(n){var t;t=0==qA(this.a),(FY(this),uG(this.b,128)).Rb(n),++this.a.a.d,t&&mF(this.a)},uZn.Sb=function(){return(FY(this),uG(this.b,128)).Sb()},uZn.Tb=function(){return(FY(this),uG(this.b,128)).Tb()},uZn.Ub=function(){return(FY(this),uG(this.b,128)).Ub()},uZn.Vb=function(){return(FY(this),uG(this.b,128)).Vb()},uZn.Wb=function(n){(FY(this),uG(this.b,128)).Wb(n)},zW(AZn,"AbstractMapBasedMultimap/WrappedList/WrappedListIterator",745),sDn(743,551,BZn,AK),uZn.Nc=function(){return bpn(this),this.d.Nc()},zW(AZn,"AbstractMapBasedMultimap/WrappedSortedSet",743),sDn(1125,743,HZn,TN),zW(AZn,"AbstractMapBasedMultimap/WrappedNavigableSet",1125),sDn(1124,551,FZn,LK),uZn.Nc=function(){return bpn(this),this.d.Nc()},zW(AZn,"AbstractMapBasedMultimap/WrappedSet",1124),sDn(1133,1,{},o),uZn.Kb=function(n){return P7(uG(n,44))},zW(AZn,"AbstractMapBasedMultimap/lambda$1$Type",1133),sDn(1132,1,{},Wl),uZn.Kb=function(n){return new FE(this.a,n)},zW(AZn,"AbstractMapBasedMultimap/lambda$2$Type",1132);var Mat,Tat,jat,Eat,Sat=Iq(DZn,"Map/Entry");sDn(358,1,GZn),uZn.Fb=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),xQ(this.ld(),t.ld())&&xQ(this.md(),t.md()))},uZn.Hb=function(){var n,t;return n=this.ld(),t=this.md(),(null==n?0:Hon(n))^(null==t?0:Hon(t))},uZn.nd=function(n){throw hv(new Kv)},uZn.Ib=function(){return this.ld()+"="+this.md()},zW(AZn,qZn,358),sDn(2086,31,RZn),uZn.$b=function(){this.od().$b()},uZn.Hc=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),E4(this.od(),t.ld(),t.md()))},uZn.Mc=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),S4(this.od(),t.ld(),t.md()))},uZn.gc=function(){return this.od().d},zW(AZn,"Multimaps/Entries",2086),sDn(749,2086,RZn,Ql),uZn.Kc=function(){return this.a.kc()},uZn.od=function(){return this.a},uZn.Nc=function(){return this.a.lc()},zW(AZn,"AbstractMultimap/Entries",749),sDn(750,749,FZn,Ty),uZn.Nc=function(){return this.a.lc()},uZn.Fb=function(n){return OOn(this,n)},uZn.Hb=function(){return Jon(this)},zW(AZn,"AbstractMultimap/EntrySet",750),sDn(751,31,RZn,Jl),uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return qln(this.a,n)},uZn.Kc=function(){return this.a.nc()},uZn.gc=function(){return this.a.d},uZn.Nc=function(){return this.a.oc()},zW(AZn,"AbstractMultimap/Values",751),sDn(2087,31,{849:1,20:1,31:1,16:1}),uZn.Jc=function(n){WW(n),uY(this).Jc(new yb(n))},uZn.Nc=function(){var n;return ICn(n=uY(this).Nc(),new d,64|1296&n.yd(),this.a.d)},uZn.Fc=function(n){return HM(),!0},uZn.Gc=function(n){return WW(this),WW(n),F$(n,552)?V4(uG(n,849)):!n.dc()&&cin(this,n.Kc())},uZn.Hc=function(n){var t;return((t=uG(Xwn(nZ(this.a),n),16))?t.gc():0)>0},uZn.Fb=function(n){return nxn(this,n)},uZn.Hb=function(){return Hon(uY(this))},uZn.dc=function(){return uY(this).dc()},uZn.Mc=function(n){return bNn(this,n,1)>0},uZn.Ib=function(){return cpn(uY(this))},zW(AZn,"AbstractMultiset",2087),sDn(2089,2068,FZn),uZn.$b=function(){ban(this.a.a)},uZn.Hc=function(n){var t;return!(!F$(n,504)||(t=uG(n,425),uG(t.a.md(),16).gc()<=0||S2(this.a,t.a.ld())!=uG(t.a.md(),16).gc()))},uZn.Mc=function(n){var t,e,i;return!(!F$(n,504)||(t=(e=uG(n,425)).a.ld(),0==(i=uG(e.a.md(),16).gc())))&&wNn(this.a,t,i)},zW(AZn,"Multisets/EntrySet",2089),sDn(1139,2089,FZn,Yl),uZn.Kc=function(){return new Dy(vz(nZ(this.a.a)).Kc())},uZn.gc=function(){return nZ(this.a.a).gc()},zW(AZn,"AbstractMultiset/EntrySet",1139),sDn(627,742,NZn),uZn.hc=function(){return this.pd()},uZn.jc=function(){return this.qd()},uZn.cc=function(n){return this.rd(n)},uZn.fc=function(n){return this.sd(n)},uZn.Zb=function(){return this.f||(this.f=this.ac())},uZn.qd=function(){return hZ(),hZ(),Wot},uZn.Fb=function(n){return Aln(this,n)},uZn.rd=function(n){return uG(Y9(this,n),21)},uZn.sd=function(n){return uG(twn(this,n),21)},uZn.mc=function(n){return hZ(),new nT(uG(n,21))},uZn.pc=function(n,t){return new LK(this,n,uG(t,21))},zW(AZn,"AbstractSetMultimap",627),sDn(1723,627,NZn),uZn.hc=function(){return new Hj(this.b)},uZn.pd=function(){return new Hj(this.b)},uZn.jc=function(){return UQ(new Hj(this.b))},uZn.qd=function(){return UQ(new Hj(this.b))},uZn.cc=function(n){return uG(uG(Y9(this,n),21),87)},uZn.rd=function(n){return uG(uG(Y9(this,n),21),87)},uZn.fc=function(n){return uG(uG(twn(this,n),21),87)},uZn.sd=function(n){return uG(uG(twn(this,n),21),87)},uZn.mc=function(n){return F$(n,277)?UQ(uG(n,277)):(hZ(),new mx(uG(n,87)))},uZn.Zb=function(){return this.f||(this.f=F$(this.c,139)?new $K(this,uG(this.c,139)):F$(this.c,133)?new NK(this,uG(this.c,133)):new OE(this,this.c))},uZn.pc=function(n,t){return F$(t,277)?new TN(this,n,uG(t,277)):new AK(this,n,uG(t,87))},zW(AZn,"AbstractSortedSetMultimap",1723),sDn(1724,1723,NZn),uZn.Zb=function(){return uG(uG(this.f||(this.f=F$(this.c,139)?new $K(this,uG(this.c,139)):F$(this.c,133)?new NK(this,uG(this.c,133)):new OE(this,this.c)),133),139)},uZn.ec=function(){return uG(uG(this.i||(this.i=F$(this.c,139)?new ME(this,uG(this.c,139)):F$(this.c,133)?new yE(this,uG(this.c,133)):new RD(this,this.c)),87),277)},uZn.bc=function(){return F$(this.c,139)?new ME(this,uG(this.c,139)):F$(this.c,133)?new yE(this,uG(this.c,133)):new RD(this,this.c)},zW(AZn,"AbstractSortedKeySortedSetMultimap",1724),sDn(2109,1,{2046:1}),uZn.Fb=function(n){return fSn(this,n)},uZn.Hb=function(){return tfn(this.g||(this.g=new nb(this)))},uZn.Ib=function(){return KPn(this.f||(this.f=new VD(this)))},zW(AZn,"AbstractTable",2109),sDn(679,KZn,FZn,nb),uZn.$b=function(){UM()},uZn.Hc=function(n){var t,e;return!!F$(n,479)&&(t=uG(n,697),!!(e=uG(Xwn(BW(this.a),GA(t.c.e,t.b)),85))&&Gwn(e.vc(),new FE(GA(t.c.c,t.a),I7(t.c,t.b,t.a))))},uZn.Kc=function(){return CZ(this.a)},uZn.Mc=function(n){var t,e;return!!F$(n,479)&&(t=uG(n,697),!!(e=uG(Xwn(BW(this.a),GA(t.c.e,t.b)),85))&&qwn(e.vc(),new FE(GA(t.c.c,t.a),I7(t.c,t.b,t.a))))},uZn.gc=function(){return $q(this.a)},uZn.Nc=function(){return u6(this.a)},zW(AZn,"AbstractTable/CellSet",679),sDn(2025,31,RZn,tb),uZn.$b=function(){UM()},uZn.Hc=function(n){return QPn(this.a,n)},uZn.Kc=function(){return IZ(this.a)},uZn.gc=function(){return $q(this.a)},uZn.Nc=function(){return y4(this.a)},zW(AZn,"AbstractTable/Values",2025),sDn(1697,1696,NZn),zW(AZn,"ArrayListMultimapGwtSerializationDependencies",1697),sDn(520,1697,NZn,rT,L2),uZn.hc=function(){return new R7(this.a)},uZn.a=0,zW(AZn,"ArrayListMultimap",520),sDn(678,2109,{678:1,2046:1,3:1},f$n),zW(AZn,"ArrayTable",678),sDn(2021,399,LZn,WD),uZn.Xb=function(n){return new Ofn(this.a,n)},zW(AZn,"ArrayTable/1",2021),sDn(2022,1,{},Xl),uZn.td=function(n){return new Ofn(this.a,n)},zW(AZn,"ArrayTable/1methodref$getCell$Type",2022),sDn(2110,1,{697:1}),uZn.Fb=function(n){var t;return n===this||!!F$(n,479)&&(t=uG(n,697),xQ(GA(this.c.e,this.b),GA(t.c.e,t.b))&&xQ(GA(this.c.c,this.a),GA(t.c.c,t.a))&&xQ(I7(this.c,this.b,this.a),I7(t.c,t.b,t.a)))},uZn.Hb=function(){return Obn(Uhn(cT(dat,1),EZn,1,5,[GA(this.c.e,this.b),GA(this.c.c,this.a),I7(this.c,this.b,this.a)]))},uZn.Ib=function(){return"("+GA(this.c.e,this.b)+","+GA(this.c.c,this.a)+")="+I7(this.c,this.b,this.a)},zW(AZn,"Tables/AbstractCell",2110),sDn(479,2110,{479:1,697:1},Ofn),uZn.a=0,uZn.b=0,uZn.d=0,zW(AZn,"ArrayTable/2",479),sDn(2024,1,{},zl),uZn.td=function(n){return Qtn(this.a,n)},zW(AZn,"ArrayTable/2methodref$getValue$Type",2024),sDn(2023,399,LZn,QD),uZn.Xb=function(n){return Qtn(this.a,n)},zW(AZn,"ArrayTable/3",2023),sDn(2077,2065,xZn),uZn.$b=function(){Hq(this.kc())},uZn.vc=function(){return new wb(this)},uZn.lc=function(){return new MY(this.kc(),this.gc())},zW(AZn,"Maps/IteratorBasedAbstractMap",2077),sDn(842,2077,xZn),uZn.$b=function(){throw hv(new Kv)},uZn._b=function(n){return Ej(this.c,n)},uZn.kc=function(){return new JD(this,this.c.b.c.gc())},uZn.lc=function(){return Dq(this.c.b.c.gc(),16,new Vl(this))},uZn.xc=function(n){var t;return(t=uG(W_(this.c,n),17))?this.vd(t.a):null},uZn.dc=function(){return this.c.b.c.dc()},uZn.ec=function(){return Tz(this.c)},uZn.zc=function(n,t){var e;if(!(e=uG(W_(this.c,n),17)))throw hv(new vM(this.ud()+" "+n+" not in "+Tz(this.c)));return this.wd(e.a,t)},uZn.Bc=function(n){throw hv(new Kv)},uZn.gc=function(){return this.c.b.c.gc()},zW(AZn,"ArrayTable/ArrayMap",842),sDn(2020,1,{},Vl),uZn.td=function(n){return qW(this.a,n)},zW(AZn,"ArrayTable/ArrayMap/0methodref$getEntry$Type",2020),sDn(2018,358,GZn,TE),uZn.ld=function(){return uR(this.a,this.b)},uZn.md=function(){return this.a.vd(this.b)},uZn.nd=function(n){return this.a.wd(this.b,n)},uZn.b=0,zW(AZn,"ArrayTable/ArrayMap/1",2018),sDn(2019,399,LZn,JD),uZn.Xb=function(n){return qW(this.a,n)},zW(AZn,"ArrayTable/ArrayMap/2",2019),sDn(2017,842,xZn,yV),uZn.ud=function(){return"Column"},uZn.vd=function(n){return I7(this.b,this.a,n)},uZn.wd=function(n,t){return Hhn(this.b,this.a,n,t)},uZn.a=0,zW(AZn,"ArrayTable/Row",2017),sDn(843,842,xZn,VD),uZn.vd=function(n){return new yV(this.a,n)},uZn.zc=function(n,t){return uG(t,85),GM()},uZn.wd=function(n,t){return uG(t,85),qM()},uZn.ud=function(){return"Row"},zW(AZn,"ArrayTable/RowMap",843),sDn(1157,1,WZn,jE),uZn.Ad=function(n){return!!(-262&this.a.yd()&n)},uZn.yd=function(){return-262&this.a.yd()},uZn.zd=function(){return this.a.zd()},uZn.Nb=function(n){this.a.Nb(new SE(n,this.b))},uZn.Bd=function(n){return this.a.Bd(new EE(n,this.b))},zW(AZn,"CollectSpliterators/1",1157),sDn(1158,1,QZn,EE),uZn.Cd=function(n){this.a.Cd(this.b.Kb(n))},zW(AZn,"CollectSpliterators/1/lambda$0$Type",1158),sDn(1159,1,QZn,SE),uZn.Cd=function(n){this.a.Cd(this.b.Kb(n))},zW(AZn,"CollectSpliterators/1/lambda$1$Type",1159),sDn(1154,1,WZn,x_),uZn.Ad=function(n){return!!((16464|this.b)&n)},uZn.yd=function(){return 16464|this.b},uZn.zd=function(){return this.a.zd()},uZn.Nb=function(n){this.a.Qe(new CE(n,this.c))},uZn.Bd=function(n){return this.a.Re(new PE(n,this.c))},uZn.b=0,zW(AZn,"CollectSpliterators/1WithCharacteristics",1154),sDn(1155,1,JZn,PE),uZn.Dd=function(n){this.a.Cd(this.b.td(n))},zW(AZn,"CollectSpliterators/1WithCharacteristics/lambda$0$Type",1155),sDn(1156,1,JZn,CE),uZn.Dd=function(n){this.a.Cd(this.b.td(n))},zW(AZn,"CollectSpliterators/1WithCharacteristics/lambda$1$Type",1156),sDn(1150,1,WZn),uZn.Ad=function(n){return!!(this.a&n)},uZn.yd=function(){return this.a},uZn.zd=function(){return this.e&&(this.b=g$(this.b,this.e.zd())),g$(this.b,0)},uZn.Nb=function(n){this.e&&(this.e.Nb(n),this.e=null),this.c.Nb(new IE(this,n)),this.b=0},uZn.Bd=function(n){for(;;){if(this.e&&this.e.Bd(n))return HA(this.b,YZn)&&(this.b=$gn(this.b,1)),!0;if(this.e=null,!this.c.Bd(new eb(this)))return!1}},uZn.a=0,uZn.b=0,zW(AZn,"CollectSpliterators/FlatMapSpliterator",1150),sDn(1152,1,QZn,eb),uZn.Cd=function(n){M_(this.a,n)},zW(AZn,"CollectSpliterators/FlatMapSpliterator/lambda$0$Type",1152),sDn(1153,1,QZn,IE),uZn.Cd=function(n){fY(this.a,this.b,n)},zW(AZn,"CollectSpliterators/FlatMapSpliterator/lambda$1$Type",1153),sDn(1151,1150,WZn,T6),zW(AZn,"CollectSpliterators/FlatMapSpliteratorOfObject",1151),sDn(253,1,ZZn),uZn.Fd=function(n){return this.Ed(uG(n,253))},uZn.Ed=function(n){var t;return n==(my(),Tat)?1:n==(py(),Mat)?-1:(qG(),0!=(t=Dun(this.a,n.a))?t:F$(this,526)==F$(n,526)?0:F$(this,526)?1:-1)},uZn.Id=function(){return this.a},uZn.Fb=function(n){return pTn(this,n)},zW(AZn,"Cut",253),sDn(1823,253,ZZn,ky),uZn.Ed=function(n){return n==this?0:1},uZn.Gd=function(n){throw hv(new Av)},uZn.Hd=function(n){n.a+="+\u221e)"},uZn.Id=function(){throw hv(new kM(n1n))},uZn.Hb=function(){return bS(),Avn(this)},uZn.Jd=function(n){return!1},uZn.Ib=function(){return"+\u221e"},zW(AZn,"Cut/AboveAll",1823),sDn(526,253,{253:1,526:1,3:1,34:1},bx),uZn.Gd=function(n){QA((n.a+="(",n),this.a)},uZn.Hd=function(n){jQ(QA(n,this.a),93)},uZn.Hb=function(){return~Hon(this.a)},uZn.Jd=function(n){return qG(),Dun(this.a,n)<0},uZn.Ib=function(){return"/"+this.a+"\\"},zW(AZn,"Cut/AboveValue",526),sDn(1822,253,ZZn,vy),uZn.Ed=function(n){return n==this?0:-1},uZn.Gd=function(n){n.a+="(-\u221e"},uZn.Hd=function(n){throw hv(new Av)},uZn.Id=function(){throw hv(new kM(n1n))},uZn.Hb=function(){return bS(),Avn(this)},uZn.Jd=function(n){return!0},uZn.Ib=function(){return"-\u221e"},zW(AZn,"Cut/BelowAll",1822),sDn(1824,253,ZZn,wx),uZn.Gd=function(n){QA((n.a+="[",n),this.a)},uZn.Hd=function(n){jQ(QA(n,this.a),41)},uZn.Hb=function(){return Hon(this.a)},uZn.Jd=function(n){return qG(),Dun(this.a,n)<=0},uZn.Ib=function(){return"\\"+this.a+"/"},zW(AZn,"Cut/BelowValue",1824),sDn(547,1,t1n),uZn.Jc=function(n){z8(this,n)},uZn.Ib=function(){return rgn(uG(bZ(this,"use Optional.orNull() instead of Optional.or(null)"),20).Kc())},zW(AZn,"FluentIterable",547),sDn(442,547,t1n,iN),uZn.Kc=function(){return new Fz(ix(this.a.Kc(),new h))},zW(AZn,"FluentIterable/2",442),sDn(1059,547,t1n,rN),uZn.Kc=function(){return OV(this)},zW(AZn,"FluentIterable/3",1059),sDn(724,399,LZn,YD),uZn.Xb=function(n){return this.a[n].Kc()},zW(AZn,"FluentIterable/3/1",724),sDn(2070,1,{}),uZn.Ib=function(){return cpn(this.Kd().b)},zW(AZn,"ForwardingObject",2070),sDn(2071,2070,e1n),uZn.Kd=function(){return this.Ld()},uZn.Jc=function(n){z8(this,n)},uZn.Lc=function(){return this.Oc()},uZn.Nc=function(){return new h3(this,0)},uZn.Oc=function(){return new fX(null,this.Nc())},uZn.Fc=function(n){return this.Ld(),Rj()},uZn.Gc=function(n){return this.Ld(),Kj()},uZn.$b=function(){this.Ld(),Fj()},uZn.Hc=function(n){return this.Ld().Hc(n)},uZn.Ic=function(n){return this.Ld().Ic(n)},uZn.dc=function(){return this.Ld().b.dc()},uZn.Kc=function(){return this.Ld().Kc()},uZn.Mc=function(n){return this.Ld(),_j()},uZn.gc=function(){return this.Ld().b.gc()},uZn.Pc=function(){return this.Ld().Pc()},uZn.Qc=function(n){return this.Ld().Qc(n)},zW(AZn,"ForwardingCollection",2071),sDn(2078,31,i1n),uZn.Kc=function(){return this.Od()},uZn.Fc=function(n){throw hv(new Kv)},uZn.Gc=function(n){throw hv(new Kv)},uZn.Md=function(){return this.c||(this.c=this.Nd())},uZn.$b=function(){throw hv(new Kv)},uZn.Hc=function(n){return null!=n&&Wpn(this,n,!1)},uZn.Nd=function(){switch(this.gc()){case 0:return ZW(),ZW(),jat;case 1:return ZW(),new Uq(WW(this.Od().Pb()));default:return new TV(this,this.Pc())}},uZn.Mc=function(n){throw hv(new Kv)},zW(AZn,"ImmutableCollection",2078),sDn(727,2078,i1n,jv),uZn.Kc=function(){return jtn(this.a.Kc())},uZn.Hc=function(n){return null!=n&&this.a.Hc(n)},uZn.Ic=function(n){return this.a.Ic(n)},uZn.dc=function(){return this.a.dc()},uZn.Od=function(){return jtn(this.a.Kc())},uZn.gc=function(){return this.a.gc()},uZn.Pc=function(){return this.a.Pc()},uZn.Qc=function(n){return this.a.Qc(n)},uZn.Ib=function(){return cpn(this.a)},zW(AZn,"ForwardingImmutableCollection",727),sDn(307,2078,r1n),uZn.Kc=function(){return this.Od()},uZn.ed=function(){return this.Pd(0)},uZn.fd=function(n){return this.Pd(n)},uZn.jd=function(n){Lon(this,n)},uZn.Nc=function(){return new h3(this,16)},uZn.kd=function(n,t){return this.Qd(n,t)},uZn.bd=function(n,t){throw hv(new Kv)},uZn.cd=function(n,t){throw hv(new Kv)},uZn.Md=function(){return this},uZn.Fb=function(n){return RDn(this,n)},uZn.Hb=function(){return Xsn(this)},uZn.dd=function(n){return null==n?-1:uTn(this,n)},uZn.Od=function(){return this.Pd(0)},uZn.Pd=function(n){return oR(this,n)},uZn.gd=function(n){throw hv(new Kv)},uZn.hd=function(n,t){throw hv(new Kv)},uZn.Qd=function(n,t){return Dwn(new C2(new qE(this),n,t))},zW(AZn,"ImmutableList",307),sDn(2105,307,r1n),uZn.Kc=function(){return jtn(this.Rd().Kc())},uZn.kd=function(n,t){return Dwn(this.Rd().kd(n,t))},uZn.Hc=function(n){return null!=n&&this.Rd().Hc(n)},uZn.Ic=function(n){return this.Rd().Ic(n)},uZn.Fb=function(n){return udn(this.Rd(),n)},uZn.Xb=function(n){return GA(this,n)},uZn.Hb=function(){return Hon(this.Rd())},uZn.dd=function(n){return this.Rd().dd(n)},uZn.dc=function(){return this.Rd().dc()},uZn.Od=function(){return jtn(this.Rd().Kc())},uZn.gc=function(){return this.Rd().gc()},uZn.Qd=function(n,t){return Dwn(this.Rd().kd(n,t))},uZn.Pc=function(){return this.Rd().Qc(Inn(dat,EZn,1,this.Rd().gc(),5,1))},uZn.Qc=function(n){return this.Rd().Qc(n)},uZn.Ib=function(){return cpn(this.Rd())},zW(AZn,"ForwardingImmutableList",2105),sDn(729,1,a1n),uZn.vc=function(){return Mz(this)},uZn.wc=function(n){Yun(this,n)},uZn.ec=function(){return Tz(this)},uZn.yc=function(n,t,e){return Jgn(this,n,t,e)},uZn.Cc=function(){return this.Vd()},uZn.$b=function(){throw hv(new Kv)},uZn._b=function(n){return null!=this.xc(n)},uZn.uc=function(n){return this.Vd().Hc(n)},uZn.Td=function(){return new Ev(this)},uZn.Ud=function(){return new Sv(this)},uZn.Fb=function(n){return Wln(this,n)},uZn.Hb=function(){return Mz(this).Hb()},uZn.dc=function(){return 0==this.gc()},uZn.zc=function(n,t){return BM()},uZn.Bc=function(n){throw hv(new Kv)},uZn.Ib=function(){return QIn(this)},uZn.Vd=function(){return this.e?this.e:this.e=this.Ud()},uZn.c=null,uZn.d=null,uZn.e=null,zW(AZn,"ImmutableMap",729),sDn(730,729,a1n),uZn._b=function(n){return Ej(this,n)},uZn.uc=function(n){return iS(this.b,n)},uZn.Sd=function(){return $wn(new Zl(this))},uZn.Td=function(){return $wn(SJ(this.b))},uZn.Ud=function(){return sB(),new jv(jJ(this.b))},uZn.Fb=function(n){return rS(this.b,n)},uZn.xc=function(n){return W_(this,n)},uZn.Hb=function(){return Hon(this.b.c)},uZn.dc=function(){return this.b.c.dc()},uZn.gc=function(){return this.b.c.gc()},uZn.Ib=function(){return cpn(this.b.c)},zW(AZn,"ForwardingImmutableMap",730),sDn(2072,2071,o1n),uZn.Kd=function(){return this.Wd()},uZn.Ld=function(){return this.Wd()},uZn.Nc=function(){return new h3(this,1)},uZn.Fb=function(n){return n===this||this.Wd().Fb(n)},uZn.Hb=function(){return this.Wd().Hb()},zW(AZn,"ForwardingSet",2072),sDn(1085,2072,o1n,Zl),uZn.Kd=function(){return EJ(this.a.b)},uZn.Ld=function(){return EJ(this.a.b)},uZn.Hc=function(n){if(F$(n,44)&&null==uG(n,44).ld())return!1;try{return eS(EJ(this.a.b),n)}catch(t){if(F$(t=Ehn(t),212))return!1;throw hv(t)}},uZn.Wd=function(){return EJ(this.a.b)},uZn.Qc=function(n){var t;return t=YZ(EJ(this.a.b),n),EJ(this.a.b).b.gc()=0?"+":"")+(i/60|0),t=FL(e.Math.abs(i)%60),(cIn(),nut)[this.q.getDay()]+" "+tut[this.q.getMonth()]+" "+FL(this.q.getDate())+" "+FL(this.q.getHours())+":"+FL(this.q.getMinutes())+":"+FL(this.q.getSeconds())+" GMT"+n+t+" "+this.q.getFullYear()};var Xat,zat,Vat,Wat,Qat,Jat,Yat,Zat,not,tot,eot,iot=zW(DZn,"Date",206);sDn(2015,206,s0n,DEn),uZn.a=!1,uZn.b=0,uZn.c=0,uZn.d=0,uZn.e=0,uZn.f=0,uZn.g=!1,uZn.i=0,uZn.j=0,uZn.k=0,uZn.n=0,uZn.o=0,uZn.p=0,zW("com.google.gwt.i18n.shared.impl","DateRecord",2015),sDn(2064,1,{}),uZn.pe=function(){return null},uZn.qe=function(){return null},uZn.re=function(){return null},uZn.se=function(){return null},uZn.te=function(){return null},zW(h0n,"JSONValue",2064),sDn(221,2064,{221:1},Ib,Eb),uZn.Fb=function(n){return!!F$(n,221)&&j3(this.a,uG(n,221).a)},uZn.oe=function(){return uv},uZn.Hb=function(){return OZ(this.a)},uZn.pe=function(){return this},uZn.Ib=function(){var n,t,e;for(e=new lx("["),t=0,n=this.a.length;t0&&(e.a+=","),QA(e,uin(this,t));return e.a+="]",e.a},zW(h0n,"JSONArray",221),sDn(493,2064,{493:1},Sb),uZn.oe=function(){return sv},uZn.qe=function(){return this},uZn.Ib=function(){return qx(),""+this.a},uZn.a=!1,zW(h0n,"JSONBoolean",493),sDn(997,63,S1n,Fy),zW(h0n,"JSONException",997),sDn(1036,2064,{},T),uZn.oe=function(){return fv},uZn.Ib=function(){return IZn},zW(h0n,"JSONNull",1036),sDn(263,2064,{263:1},Pb),uZn.Fb=function(n){return!!F$(n,263)&&this.a==uG(n,263).a},uZn.oe=function(){return av},uZn.Hb=function(){return OL(this.a)},uZn.re=function(){return this},uZn.Ib=function(){return this.a+""},uZn.a=0,zW(h0n,"JSONNumber",263),sDn(190,2064,{190:1},_y,Cb),uZn.Fb=function(n){return!!F$(n,190)&&j3(this.a,uG(n,190).a)},uZn.oe=function(){return ov},uZn.Hb=function(){return OZ(this.a)},uZn.se=function(){return this},uZn.Ib=function(){var n,t,e,i,r,c;for(c=new lx("{"),n=!0,i=0,r=(e=Yon(this,Inn($ot,zZn,2,0,6,1))).length;i=0?":"+this.c:"")+")"},uZn.c=0;var jot=zW(kZn,"StackTraceElement",319);bZn={3:1,484:1,34:1,2:1};var Eot,Sot,Pot,Cot,Iot,Oot,Aot,Lot,Not,$ot=zW(kZn,C1n,2);sDn(111,427,{484:1},zM,VM,fx),zW(kZn,"StringBuffer",111),sDn(104,427,{484:1},WM,QM,lx),zW(kZn,"StringBuilder",104),sDn(702,77,v0n,JM),zW(kZn,"StringIndexOutOfBoundsException",702),sDn(2145,1,{}),sDn(48,63,{3:1,103:1,63:1,82:1,48:1},Kv,TM),zW(kZn,"UnsupportedOperationException",48),sDn(247,242,{3:1,34:1,242:1,247:1},Edn,Wj),uZn.Fd=function(n){return $Gn(this,uG(n,247))},uZn.ue=function(){return YIn(wzn(this))},uZn.Fb=function(n){var t;return this===n||!!F$(n,247)&&(t=uG(n,247),this.e==t.e&&0==$Gn(this,t))},uZn.Hb=function(){var n;return 0!=this.b?this.b:this.a<54?(n=Bsn(this.f),this.b=pz(E3(n,-1)),this.b=33*this.b+pz(E3($z(n,32),-1)),this.b=17*this.b+t0(this.e),this.b):(this.b=17*cwn(this.c)+t0(this.e),this.b)},uZn.Ib=function(){return wzn(this)},uZn.a=0,uZn.b=0,uZn.d=0,uZn.e=0,uZn.f=0;var Dot,xot,Rot,Kot,Fot,_ot,Bot=zW("java.math","BigDecimal",247);sDn(92,242,{3:1,34:1,242:1,92:1},Z5,x3,VV,nkn,PN),uZn.Fd=function(n){return Pvn(this,uG(n,92))},uZn.ue=function(){return YIn(bYn(this,0))},uZn.Fb=function(n){return Cpn(this,n)},uZn.Hb=function(){return cwn(this)},uZn.Ib=function(){return bYn(this,0)},uZn.b=-2,uZn.c=0,uZn.d=0,uZn.e=0;var Hot,Uot,Got,qot,Xot=zW("java.math","BigInteger",92);sDn(498,2065,xZn),uZn.$b=function(){$V(this)},uZn._b=function(n){return PV(this,n)},uZn.uc=function(n){return Qln(this,n,this.i)||Qln(this,n,this.f)},uZn.vc=function(){return new Nw(this)},uZn.xc=function(n){return cQ(this,n)},uZn.zc=function(n,t){return vJ(this,n,t)},uZn.Bc=function(n){return u7(this,n)},uZn.gc=function(){return oS(this)},uZn.g=0,zW(DZn,"AbstractHashMap",498),sDn(267,KZn,FZn,Nw),uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return Q4(this,n)},uZn.Kc=function(){return new bsn(this.a)},uZn.Mc=function(n){var t;return!!Q4(this,n)&&(t=uG(n,44).ld(),this.a.Bc(t),!0)},uZn.gc=function(){return this.a.gc()},zW(DZn,"AbstractHashMap/EntrySet",267),sDn(268,1,$Zn,bsn),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return von(this)},uZn.Ob=function(){return this.b},uZn.Qb=function(){Oen(this)},uZn.b=!1,uZn.d=0,zW(DZn,"AbstractHashMap/EntrySetIterator",268),sDn(426,1,$Zn,Jw),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return AP(this)},uZn.Pb=function(){return _Y(this)},uZn.Qb=function(){LQ(this)},uZn.b=0,uZn.c=-1,zW(DZn,"AbstractList/IteratorImpl",426),sDn(98,426,UZn,N4),uZn.Qb=function(){LQ(this)},uZn.Rb=function(n){pF(this,n)},uZn.Sb=function(){return this.b>0},uZn.Tb=function(){return this.b},uZn.Ub=function(){return MK(this.b>0),this.a.Xb(this.c=--this.b)},uZn.Vb=function(){return this.b-1},uZn.Wb=function(n){TK(-1!=this.c),this.a.hd(this.c,n)},zW(DZn,"AbstractList/ListIteratorImpl",98),sDn(244,56,m1n,C2),uZn.bd=function(n,t){o3(n,this.b),this.c.bd(this.a+n,t),++this.b},uZn.Xb=function(n){return u3(n,this.b),this.c.Xb(this.a+n)},uZn.gd=function(n){var t;return u3(n,this.b),t=this.c.gd(this.a+n),--this.b,t},uZn.hd=function(n,t){return u3(n,this.b),this.c.hd(this.a+n,t)},uZn.gc=function(){return this.b},uZn.a=0,uZn.b=0,zW(DZn,"AbstractList/SubList",244),sDn(266,KZn,FZn,Lw),uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return this.a._b(n)},uZn.Kc=function(){return new Kw(this.a.vc().Kc())},uZn.Mc=function(n){return!!this.a._b(n)&&(this.a.Bc(n),!0)},uZn.gc=function(){return this.a.gc()},zW(DZn,"AbstractMap/1",266),sDn(541,1,$Zn,Kw),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.a.Ob()},uZn.Pb=function(){return uG(this.a.Pb(),44).ld()},uZn.Qb=function(){this.a.Qb()},zW(DZn,"AbstractMap/1/1",541),sDn(231,31,RZn,Fw),uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return this.a.uc(n)},uZn.Kc=function(){return new _w(this.a.vc().Kc())},uZn.gc=function(){return this.a.gc()},zW(DZn,"AbstractMap/2",231),sDn(301,1,$Zn,_w),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.a.Ob()},uZn.Pb=function(){return uG(this.a.Pb(),44).md()},uZn.Qb=function(){this.a.Qb()},zW(DZn,"AbstractMap/2/1",301),sDn(494,1,{494:1,44:1}),uZn.Fb=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),OJ(this.d,t.ld())&&OJ(this.e,t.md()))},uZn.ld=function(){return this.d},uZn.md=function(){return this.e},uZn.Hb=function(){return VN(this.d)^VN(this.e)},uZn.nd=function(n){return wF(this,n)},uZn.Ib=function(){return this.d+"="+this.e},zW(DZn,"AbstractMap/AbstractEntry",494),sDn(397,494,{494:1,397:1,44:1},VP),zW(DZn,"AbstractMap/SimpleEntry",397),sDn(2082,1,$0n),uZn.Fb=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),OJ(this.ld(),t.ld())&&OJ(this.md(),t.md()))},uZn.Hb=function(){return VN(this.ld())^VN(this.md())},uZn.Ib=function(){return this.ld()+"="+this.md()},zW(DZn,qZn,2082),sDn(2090,2065,_Zn),uZn.Xc=function(n){return Sj(this.Ee(n))},uZn.tc=function(n){return I9(this,n)},uZn._b=function(n){return dF(this,n)},uZn.vc=function(){return new Uw(this)},uZn.Tc=function(){return DV(this.Ge())},uZn.Yc=function(n){return Sj(this.He(n))},uZn.xc=function(n){var t;return t=n,DA(this.Fe(t))},uZn.$c=function(n){return Sj(this.Ie(n))},uZn.ec=function(){return new Bw(this)},uZn.Vc=function(){return DV(this.Je())},uZn._c=function(n){return Sj(this.Ke(n))},zW(DZn,"AbstractNavigableMap",2090),sDn(629,KZn,FZn,Uw),uZn.Hc=function(n){return F$(n,44)&&I9(this.b,uG(n,44))},uZn.Kc=function(){return this.b.De()},uZn.Mc=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),this.b.Le(t))},uZn.gc=function(){return this.b.gc()},zW(DZn,"AbstractNavigableMap/EntrySet",629),sDn(1146,KZn,HZn,Bw),uZn.Nc=function(){return new GP(this)},uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return dF(this.a,n)},uZn.Kc=function(){return new Hw(this.a.vc().b.De())},uZn.Mc=function(n){return!!dF(this.a,n)&&(this.a.Bc(n),!0)},uZn.gc=function(){return this.a.gc()},zW(DZn,"AbstractNavigableMap/NavigableKeySet",1146),sDn(1147,1,$Zn,Hw),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return AP(this.a.a)},uZn.Pb=function(){return kR(this.a).ld()},uZn.Qb=function(){rB(this.a)},zW(DZn,"AbstractNavigableMap/NavigableKeySet/1",1147),sDn(2103,31,RZn),uZn.Fc=function(n){return kG(_Cn(this,n),D0n),!0},uZn.Gc=function(n){return tJ(n),vG(n!=this,"Can't add a queue to itself"),Qon(this,n)},uZn.$b=function(){for(;null!=hin(this););},zW(DZn,"AbstractQueue",2103),sDn(310,31,{4:1,20:1,31:1,16:1},ND,$4),uZn.Fc=function(n){return O6(this,n),!0},uZn.$b=function(){q5(this)},uZn.Hc=function(n){return Chn(new XJ(this),n)},uZn.dc=function(){return LM(this)},uZn.Kc=function(){return new XJ(this)},uZn.Mc=function(n){return m0(new XJ(this),n)},uZn.gc=function(){return this.c-this.b&this.a.length-1},uZn.Nc=function(){return new h3(this,272)},uZn.Qc=function(n){var t;return t=this.c-this.b&this.a.length-1,n.lengtht&&uQ(n,t,null),n},uZn.b=0,uZn.c=0,zW(DZn,"ArrayDeque",310),sDn(459,1,$Zn,XJ),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.a!=this.b},uZn.Pb=function(){return rwn(this)},uZn.Qb=function(){lan(this)},uZn.a=0,uZn.b=0,uZn.c=-1,zW(DZn,"ArrayDeque/IteratorImpl",459),sDn(13,56,x0n,Zm,R7,Z_),uZn.bd=function(n,t){GX(this,n,t)},uZn.Fc=function(n){return kD(this,n)},uZn.cd=function(n,t){return Cbn(this,n,t)},uZn.Gc=function(n){return Ohn(this,n)},uZn.$b=function(){Xv(this.c,0)},uZn.Hc=function(n){return-1!=Ten(this,n,0)},uZn.Jc=function(n){Prn(this,n)},uZn.Xb=function(n){return zq(this,n)},uZn.dd=function(n){return Ten(this,n,0)},uZn.dc=function(){return 0==this.c.length},uZn.Kc=function(){return new Ww(this)},uZn.gd=function(n){return i7(this,n)},uZn.Mc=function(n){return men(this,n)},uZn.ce=function(n,t){P2(this,n,t)},uZn.hd=function(n,t){return Y8(this,n,t)},uZn.gc=function(){return this.c.length},uZn.jd=function(n){f$(this,n)},uZn.Pc=function(){return tq(this.c)},uZn.Qc=function(n){return Ekn(this,n)};var zot,Vot,Wot,Qot,Jot,Yot,Zot,nut,tut,eut=zW(DZn,"ArrayList",13);sDn(7,1,$Zn,Ww),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return l$(this)},uZn.Pb=function(){return N3(this)},uZn.Qb=function(){tW(this)},uZn.a=0,uZn.b=-1,zW(DZn,"ArrayList/1",7),sDn(2112,e.Function,{},P),uZn.Me=function(n,t){return ugn(n,t)},sDn(151,56,R0n,IM),uZn.Hc=function(n){return-1!=gan(this,n)},uZn.Jc=function(n){var t,e,i,r;for(tJ(n),i=0,r=(e=this.a).length;i0)throw hv(new vM(Y0n+n+" greater than "+this.e));return this.f.Te()?G1(this.c,this.b,this.a,n,t):N2(this.c,n,t)},uZn.zc=function(n,t){if(!ljn(this.c,this.f,n,this.b,this.a,this.e,this.d))throw hv(new vM(n+" outside the range "+this.b+" to "+this.e));return xfn(this.c,n,t)},uZn.Bc=function(n){var t;return t=n,ljn(this.c,this.f,t,this.b,this.a,this.e,this.d)?V1(this.c,t):null},uZn.Le=function(n){return $Q(this,n.ld())&&Lnn(this.c,n)},uZn.gc=function(){var n,t,e;if(!((t=this.f.Te()?this.a?Zmn(this.c,this.b,!0):Zmn(this.c,this.b,!1):Ytn(this.c))&&$Q(this,t.d)&&t))return 0;for(n=0,e=new dun(this.c,this.f,this.b,this.a,this.e,this.d);AP(e.a);e.b=uG(_Y(e.a),44))++n;return n},uZn.ad=function(n,t){if(this.f.Te()&&this.c.a.Ne(n,this.b)<0)throw hv(new vM(Y0n+n+Z0n+this.b));return this.f.Ue()?G1(this.c,n,t,this.e,this.d):$2(this.c,n,t)},uZn.a=!1,uZn.d=!1,zW(DZn,"TreeMap/SubMap",631),sDn(304,22,n2n,qP),uZn.Te=function(){return!1},uZn.Ue=function(){return!1};var Mut,Tut=_cn(DZn,"TreeMap/SubMapType",304,Oat,K6,hB);sDn(1143,304,n2n,SN),uZn.Ue=function(){return!0},_cn(DZn,"TreeMap/SubMapType/1",1143,Tut,null,null),sDn(1144,304,n2n,P$),uZn.Te=function(){return!0},uZn.Ue=function(){return!0},_cn(DZn,"TreeMap/SubMapType/2",1144,Tut,null,null),sDn(1145,304,n2n,EN),uZn.Te=function(){return!0},_cn(DZn,"TreeMap/SubMapType/3",1145,Tut,null,null),sDn(157,KZn,{3:1,20:1,31:1,16:1,277:1,21:1,87:1,157:1},rk,Hj,od),uZn.Nc=function(){return new GP(this)},uZn.Fc=function(n){return _V(this,n)},uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return this.a._b(n)},uZn.Kc=function(){return this.a.ec().Kc()},uZn.Mc=function(n){return sD(this,n)},uZn.gc=function(){return this.a.gc()};var jut=zW(DZn,"TreeSet",157);sDn(1082,1,{},ud),uZn.Ve=function(n,t){return _K(this.a,n,t)},zW(t2n,"BinaryOperator/lambda$0$Type",1082),sDn(1083,1,{},sd),uZn.Ve=function(n,t){return BK(this.a,n,t)},zW(t2n,"BinaryOperator/lambda$1$Type",1083),sDn(952,1,{},H),uZn.Kb=function(n){return n},zW(t2n,"Function/lambda$0$Type",952),sDn(395,1,y1n,hd),uZn.Mb=function(n){return!this.a.Mb(n)},zW(t2n,"Predicate/lambda$2$Type",395),sDn(581,1,{581:1});var Eut,Sut,Put=zW(e2n,"Handler",581);sDn(2107,1,yZn),uZn.xe=function(){return"DUMMY"},uZn.Ib=function(){return this.xe()},zW(e2n,"Level",2107),sDn(1706,2107,yZn,U),uZn.xe=function(){return"INFO"},zW(e2n,"Level/LevelInfo",1706),sDn(1843,1,{},ik),zW(e2n,"LogManager",1843),sDn(1896,1,yZn,iB),uZn.b=null,zW(e2n,"LogRecord",1896),sDn(525,1,{525:1},e9),uZn.e=!1;var Cut,Iut,Out,Aut=!1,Lut=!1,Nut=!1,$ut=!1,Dut=!1;zW(e2n,"Logger",525),sDn(835,581,{581:1},G),zW(e2n,"SimpleConsoleLogHandler",835),sDn(108,22,{3:1,34:1,22:1,108:1},XP);var xut,Rut=_cn(c2n,"Collector/Characteristics",108,Oat,D2,fB);sDn(758,1,{},WV),zW(c2n,"CollectorImpl",758),sDn(1074,1,{},q),uZn.Ve=function(n,t){return idn(uG(n,213),uG(t,213))},zW(c2n,"Collectors/10methodref$merge$Type",1074),sDn(1075,1,{},X),uZn.Kb=function(n){return R4(uG(n,213))},zW(c2n,"Collectors/11methodref$toString$Type",1075),sDn(1076,1,{},fd),uZn.Kb=function(n){return qx(),!!IL(n)},zW(c2n,"Collectors/12methodref$test$Type",1076),sDn(144,1,{},z),uZn.Yd=function(n,t){uG(n,16).Fc(t)},zW(c2n,"Collectors/20methodref$add$Type",144),sDn(146,1,{},V),uZn.Xe=function(){return new Zm},zW(c2n,"Collectors/21methodref$ctor$Type",146),sDn(359,1,{},W),uZn.Xe=function(){return new ek},zW(c2n,"Collectors/23methodref$ctor$Type",359),sDn(360,1,{},Q),uZn.Yd=function(n,t){FV(uG(n,49),t)},zW(c2n,"Collectors/24methodref$add$Type",360),sDn(1069,1,{},J),uZn.Ve=function(n,t){return IS(uG(n,15),uG(t,16))},zW(c2n,"Collectors/4methodref$addAll$Type",1069),sDn(1073,1,{},Y),uZn.Yd=function(n,t){o7(uG(n,213),uG(t,484))},zW(c2n,"Collectors/9methodref$add$Type",1073),sDn(1072,1,{},fG),uZn.Xe=function(){return new Ysn(this.a,this.b,this.c)},zW(c2n,"Collectors/lambda$15$Type",1072),sDn(1077,1,{},Z),uZn.Xe=function(){var n;return Akn(n=new u8,(qx(),!1),new Zm),Akn(n,!0,new Zm),n},zW(c2n,"Collectors/lambda$22$Type",1077),sDn(1078,1,{},ld),uZn.Xe=function(){return Uhn(cT(dat,1),EZn,1,5,[this.a])},zW(c2n,"Collectors/lambda$25$Type",1078),sDn(1079,1,{},bd),uZn.Yd=function(n,t){Yq(this.a,Kcn(n))},zW(c2n,"Collectors/lambda$26$Type",1079),sDn(1080,1,{},wd),uZn.Ve=function(n,t){return sV(this.a,Kcn(n),Kcn(t))},zW(c2n,"Collectors/lambda$27$Type",1080),sDn(1081,1,{},nn),uZn.Kb=function(n){return Kcn(n)[0]},zW(c2n,"Collectors/lambda$28$Type",1081),sDn(728,1,{},tn),uZn.Ve=function(n,t){return nX(n,t)},zW(c2n,"Collectors/lambda$4$Type",728),sDn(145,1,{},en),uZn.Ve=function(n,t){return ES(uG(n,16),uG(t,16))},zW(c2n,"Collectors/lambda$42$Type",145),sDn(361,1,{},rn),uZn.Ve=function(n,t){return SS(uG(n,49),uG(t,49))},zW(c2n,"Collectors/lambda$50$Type",361),sDn(362,1,{},cn),uZn.Kb=function(n){return uG(n,49)},zW(c2n,"Collectors/lambda$51$Type",362),sDn(1068,1,{},dd),uZn.Yd=function(n,t){vln(this.a,uG(n,85),t)},zW(c2n,"Collectors/lambda$7$Type",1068),sDn(1070,1,{},an),uZn.Ve=function(n,t){return Ahn(uG(n,85),uG(t,85),new J)},zW(c2n,"Collectors/lambda$8$Type",1070),sDn(1071,1,{},gd),uZn.Kb=function(n){return zgn(this.a,uG(n,85))},zW(c2n,"Collectors/lambda$9$Type",1071),sDn(550,1,{}),uZn.$e=function(){qQ(this)},uZn.d=!1,zW(c2n,"TerminatableStream",550),sDn(827,550,a2n,IK),uZn.$e=function(){qQ(this)},zW(c2n,"DoubleStreamImpl",827),sDn(1847,736,WZn,lG),uZn.Re=function(n){return FMn(this,uG(n,189))},uZn.a=null,zW(c2n,"DoubleStreamImpl/2",1847),sDn(1848,1,_0n,pd),uZn.Pe=function(n){$N(this.a,n)},zW(c2n,"DoubleStreamImpl/2/lambda$0$Type",1848),sDn(1845,1,_0n,md),uZn.Pe=function(n){NN(this.a,n)},zW(c2n,"DoubleStreamImpl/lambda$0$Type",1845),sDn(1846,1,_0n,vd),uZn.Pe=function(n){Mmn(this.a,n)},zW(c2n,"DoubleStreamImpl/lambda$2$Type",1846),sDn(1397,735,WZn,i9),uZn.Re=function(n){return e6(this,uG(n,202))},uZn.a=0,uZn.b=0,uZn.c=0,zW(c2n,"IntStream/5",1397),sDn(806,550,a2n,OK),uZn.$e=function(){qQ(this)},uZn._e=function(){return GQ(this),this.a},zW(c2n,"IntStreamImpl",806),sDn(807,550,a2n,mS),uZn.$e=function(){qQ(this)},uZn._e=function(){return GQ(this),BD(),dut},zW(c2n,"IntStreamImpl/Empty",807),sDn(1687,1,JZn,kd),uZn.Dd=function(n){msn(this.a,n)},zW(c2n,"IntStreamImpl/lambda$4$Type",1687);var Kut,Fut=Iq(c2n,"Stream");sDn(26,550,{533:1,687:1,848:1},fX),uZn.$e=function(){qQ(this)},zW(c2n,"StreamImpl",26),sDn(1102,500,WZn,D_),uZn.Bd=function(n){for(;Ttn(this);){if(this.a.Bd(n))return!0;qQ(this.b),this.b=null,this.a=null}return!1},zW(c2n,"StreamImpl/1",1102),sDn(1103,1,QZn,yd),uZn.Cd=function(n){mG(this.a,uG(n,848))},zW(c2n,"StreamImpl/1/lambda$0$Type",1103),sDn(1104,1,y1n,Md),uZn.Mb=function(n){return FV(this.a,n)},zW(c2n,"StreamImpl/1methodref$add$Type",1104),sDn(1105,500,WZn,QY),uZn.Bd=function(n){var t;return this.a||(t=new Zm,this.b.a.Nb(new Td(t)),hZ(),f$(t,this.c),this.a=new h3(t,16)),urn(this.a,n)},uZn.a=null,zW(c2n,"StreamImpl/5",1105),sDn(1106,1,QZn,Td),uZn.Cd=function(n){kD(this.a,n)},zW(c2n,"StreamImpl/5/2methodref$add$Type",1106),sDn(737,500,WZn,ien),uZn.Bd=function(n){for(this.b=!1;!this.b&&this.c.Bd(new WP(this,n)););return this.b},uZn.b=!1,zW(c2n,"StreamImpl/FilterSpliterator",737),sDn(1096,1,QZn,WP),uZn.Cd=function(n){Xz(this.a,this.b,n)},zW(c2n,"StreamImpl/FilterSpliterator/lambda$0$Type",1096),sDn(1091,736,WZn,s7),uZn.Re=function(n){return v_(this,uG(n,189))},zW(c2n,"StreamImpl/MapToDoubleSpliterator",1091),sDn(1095,1,QZn,QP),uZn.Cd=function(n){vC(this.a,this.b,n)},zW(c2n,"StreamImpl/MapToDoubleSpliterator/lambda$0$Type",1095),sDn(1090,735,WZn,h7),uZn.Re=function(n){return k_(this,uG(n,202))},zW(c2n,"StreamImpl/MapToIntSpliterator",1090),sDn(1094,1,QZn,JP),uZn.Cd=function(n){kC(this.a,this.b,n)},zW(c2n,"StreamImpl/MapToIntSpliterator/lambda$0$Type",1094),sDn(734,500,WZn,f7),uZn.Bd=function(n){return y_(this,n)},zW(c2n,"StreamImpl/MapToObjSpliterator",734),sDn(1093,1,QZn,YP),uZn.Cd=function(n){yC(this.a,this.b,n)},zW(c2n,"StreamImpl/MapToObjSpliterator/lambda$0$Type",1093),sDn(1092,500,WZn,Fan),uZn.Bd=function(n){for(;NP(this.b,0);){if(!this.a.Bd(new on))return!1;this.b=$gn(this.b,1)}return this.a.Bd(n)},uZn.b=0,zW(c2n,"StreamImpl/SkipSpliterator",1092),sDn(1097,1,QZn,on),uZn.Cd=function(n){},zW(c2n,"StreamImpl/SkipSpliterator/lambda$0$Type",1097),sDn(626,1,QZn,un),uZn.Cd=function(n){Ob(this,n)},zW(c2n,"StreamImpl/ValueConsumer",626),sDn(1098,1,QZn,sn),uZn.Cd=function(n){vS()},zW(c2n,"StreamImpl/lambda$0$Type",1098),sDn(1099,1,QZn,hn),uZn.Cd=function(n){vS()},zW(c2n,"StreamImpl/lambda$1$Type",1099),sDn(1100,1,{},jd),uZn.Ve=function(n,t){return FB(this.a,n,t)},zW(c2n,"StreamImpl/lambda$4$Type",1100),sDn(1101,1,QZn,nC),uZn.Cd=function(n){kF(this.b,this.a,n)},zW(c2n,"StreamImpl/lambda$5$Type",1101),sDn(1107,1,QZn,Ed),uZn.Cd=function(n){Usn(this.a,uG(n,380))},zW(c2n,"TerminatableStream/lambda$0$Type",1107),sDn(2142,1,{}),sDn(2014,1,{},fn),zW("javaemul.internal","ConsoleLogger",2014);var _ut=0;sDn(2134,1,{}),sDn(1830,1,QZn,ln),uZn.Cd=function(n){uG(n,317)},zW(l2n,"BowyerWatsonTriangulation/lambda$0$Type",1830),sDn(1831,1,QZn,Pd),uZn.Cd=function(n){Qon(this.a,uG(n,317).e)},zW(l2n,"BowyerWatsonTriangulation/lambda$1$Type",1831),sDn(1832,1,QZn,bn),uZn.Cd=function(n){uG(n,177)},zW(l2n,"BowyerWatsonTriangulation/lambda$2$Type",1832),sDn(1827,1,b2n,Cd),uZn.Ne=function(n,t){return S5(this.a,uG(n,177),uG(t,177))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(l2n,"NaiveMinST/lambda$0$Type",1827),sDn(449,1,{},Sd),zW(l2n,"NodeMicroLayout",449),sDn(177,1,{177:1},ZP),uZn.Fb=function(n){var t;return!!F$(n,177)&&(t=uG(n,177),OJ(this.a,t.a)&&OJ(this.b,t.b)||OJ(this.a,t.b)&&OJ(this.b,t.a))},uZn.Hb=function(){return VN(this.a)+VN(this.b)};var But=zW(l2n,"TEdge",177);sDn(317,1,{317:1},gqn),uZn.Fb=function(n){var t;return!!F$(n,317)&&Den(this,(t=uG(n,317)).a)&&Den(this,t.b)&&Den(this,t.c)},uZn.Hb=function(){return VN(this.a)+VN(this.b)+VN(this.c)},zW(l2n,"TTriangle",317),sDn(225,1,{225:1},C$),zW(l2n,"Tree",225),sDn(1218,1,{},q0),zW(w2n,"Scanline",1218);var Hut=Iq(w2n,d2n);sDn(1758,1,{},Qin),zW(g2n,"CGraph",1758),sDn(316,1,{316:1},V0),uZn.b=0,uZn.c=0,uZn.d=0,uZn.g=0,uZn.i=0,uZn.k=T0n,zW(g2n,"CGroup",316),sDn(830,1,{},fk),zW(g2n,"CGroup/CGroupBuilder",830),sDn(60,1,{60:1},NF),uZn.Ib=function(){return this.j?mK(this.j.Kb(this)):(vK(zut),zut.o+"@"+(xx(this)>>>0).toString(16))},uZn.f=0,uZn.i=T0n;var Uut,Gut,qut,Xut,zut=zW(g2n,"CNode",60);sDn(829,1,{},lk),zW(g2n,"CNode/CNodeBuilder",829),sDn(1590,1,{},wn),uZn.ff=function(n,t){return 0},uZn.gf=function(n,t){return 0},zW(g2n,m2n,1590),sDn(1853,1,{},dn),uZn.cf=function(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(h=M0n,r=new Ww(n.a.b);r.ae.d.c||e.d.c==r.d.c&&e.d.b0?n+this.n.d+this.n.a:0},uZn.kf=function(){var n,t,i,r,c;if(c=0,this.e)this.b?c=this.b.a:this.a[1][1]&&(c=this.a[1][1].kf());else if(this.g)c=ypn(this,wEn(this,null,!0));else for(Yrn(),i=0,r=(t=Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length;i0?c+this.n.b+this.n.c:0},uZn.lf=function(){var n,t,e,i,r;if(this.g)for(n=wEn(this,null,!1),Yrn(),i=0,r=(e=Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length;i0&&(r[0]+=this.d,i-=r[0]),r[2]>0&&(r[2]+=this.d,i-=r[2]),this.c.a=e.Math.max(0,i),this.c.d=t.d+n.d+(this.c.a-i)/2,r[1]=e.Math.max(r[1],i),J9(this,Est,t.d+n.d+r[0]-(r[1]-i)/2,r)},uZn.b=null,uZn.d=0,uZn.e=!1,uZn.f=!1,uZn.g=!1;var Ost,Ast,Lst,Nst=0,$st=0;zW(U2n,"GridContainerCell",1538),sDn(471,22,{3:1,34:1,22:1,471:1},aC);var Dst,xst=_cn(U2n,"HorizontalLabelAlignment",471,Oat,R2,gB);sDn(314,217,{217:1,314:1},a0,Yin,c1),uZn.jf=function(){return iq(this)},uZn.kf=function(){return rq(this)},uZn.a=0,uZn.c=!1;var Rst,Kst,Fst,_st=zW(U2n,"LabelCell",314);sDn(252,336,{217:1,336:1,252:1},tkn),uZn.jf=function(){return dNn(this)},uZn.kf=function(){return gNn(this)},uZn.lf=function(){YGn(this)},uZn.mf=function(){rqn(this)},uZn.b=0,uZn.c=0,uZn.d=!1,zW(U2n,"StripContainerCell",252),sDn(1691,1,y1n,Mn),uZn.Mb=function(n){return $M(uG(n,217))},zW(U2n,"StripContainerCell/lambda$0$Type",1691),sDn(1692,1,{},Tn),uZn.Ye=function(n){return uG(n,217).kf()},zW(U2n,"StripContainerCell/lambda$1$Type",1692),sDn(1693,1,y1n,jn),uZn.Mb=function(n){return DM(uG(n,217))},zW(U2n,"StripContainerCell/lambda$2$Type",1693),sDn(1694,1,{},En),uZn.Ye=function(n){return uG(n,217).jf()},zW(U2n,"StripContainerCell/lambda$3$Type",1694),sDn(472,22,{3:1,34:1,22:1,472:1},oC);var Bst,Hst,Ust,Gst,qst,Xst,zst,Vst,Wst,Qst,Jst,Yst,Zst,nht,tht,eht,iht,rht,cht,aht,oht,uht,sht,hht=_cn(U2n,"VerticalLabelAlignment",472,Oat,x2,pB);sDn(800,1,{},EQn),uZn.c=0,uZn.d=0,uZn.k=0,uZn.s=0,uZn.t=0,uZn.v=!1,uZn.w=0,uZn.D=!1,uZn.F=!1,zW(J2n,"NodeContext",800),sDn(1536,1,b2n,Sn),uZn.Ne=function(n,t){return UL(uG(n,64),uG(t,64))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(J2n,"NodeContext/0methodref$comparePortSides$Type",1536),sDn(1537,1,b2n,Pn),uZn.Ne=function(n,t){return ACn(uG(n,117),uG(t,117))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(J2n,"NodeContext/1methodref$comparePortContexts$Type",1537),sDn(164,22,{3:1,34:1,22:1,164:1},pun);var fht,lht,bht,wht,dht,ght,pht,mht=_cn(J2n,"NodeLabelLocation",164,Oat,Nkn,mB);sDn(117,1,{117:1},v$n),uZn.a=!1,zW(J2n,"PortContext",117),sDn(1541,1,QZn,Cn),uZn.Cd=function(n){eE(uG(n,314))},zW(n3n,t3n,1541),sDn(1542,1,y1n,In),uZn.Mb=function(n){return!!uG(n,117).c},zW(n3n,e3n,1542),sDn(1543,1,QZn,On),uZn.Cd=function(n){eE(uG(n,117).c)},zW(n3n,"LabelPlacer/lambda$2$Type",1543),sDn(1540,1,QZn,An),uZn.Cd=function(n){VK(),wv(uG(n,117))},zW(n3n,"NodeLabelAndSizeUtilities/lambda$0$Type",1540),sDn(801,1,QZn,DB),uZn.Cd=function(n){aP(this.b,this.c,this.a,uG(n,187))},uZn.a=!1,uZn.c=!1,zW(n3n,"NodeLabelCellCreator/lambda$0$Type",801),sDn(1539,1,QZn,Ld),uZn.Cd=function(n){Vv(this.a,uG(n,187))},zW(n3n,"PortContextCreator/lambda$0$Type",1539),sDn(1902,1,{},Ln),zW(r3n,"GreedyRectangleStripOverlapRemover",1902),sDn(1903,1,b2n,Nn),uZn.Ne=function(n,t){return Cx(uG(n,226),uG(t,226))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(r3n,"GreedyRectangleStripOverlapRemover/0methodref$compareByYCoordinate$Type",1903),sDn(1849,1,{},pk),uZn.a=5,uZn.e=0,zW(r3n,"RectangleStripOverlapRemover",1849),sDn(1850,1,b2n,$n),uZn.Ne=function(n,t){return Ix(uG(n,226),uG(t,226))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(r3n,"RectangleStripOverlapRemover/0methodref$compareLeftRectangleBorders$Type",1850),sDn(1852,1,b2n,Dn),uZn.Ne=function(n,t){return fW(uG(n,226),uG(t,226))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(r3n,"RectangleStripOverlapRemover/1methodref$compareRightRectangleBorders$Type",1852),sDn(417,22,{3:1,34:1,22:1,417:1},uC);var vht,kht,yht,Mht,Tht,jht=_cn(r3n,"RectangleStripOverlapRemover/OverlapRemovalDirection",417,Oat,B6,vB);sDn(226,1,{226:1},ZX),zW(r3n,"RectangleStripOverlapRemover/RectangleNode",226),sDn(1851,1,QZn,Nd),uZn.Cd=function(n){lTn(this.a,uG(n,226))},zW(r3n,"RectangleStripOverlapRemover/lambda$1$Type",1851),sDn(1323,1,b2n,xn),uZn.Ne=function(n,t){return hzn(uG(n,176),uG(t,176))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(a3n,"PolyominoCompactor/CornerCasesGreaterThanRestComparator",1323),sDn(1326,1,{},Rn),uZn.Kb=function(n){return uG(n,334).a},zW(a3n,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$0$Type",1326),sDn(1327,1,y1n,Kn),uZn.Mb=function(n){return uG(n,332).a},zW(a3n,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$1$Type",1327),sDn(1328,1,y1n,Fn),uZn.Mb=function(n){return uG(n,332).a},zW(a3n,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$2$Type",1328),sDn(1321,1,b2n,_n),uZn.Ne=function(n,t){return JBn(uG(n,176),uG(t,176))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(a3n,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator",1321),sDn(1324,1,{},Bn),uZn.Kb=function(n){return uG(n,334).a},zW(a3n,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator/lambda$0$Type",1324),sDn(781,1,b2n,Hn),uZn.Ne=function(n,t){return lhn(uG(n,176),uG(t,176))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(a3n,"PolyominoCompactor/MinNumOfExtensionsComparator",781),sDn(1319,1,b2n,Un),uZn.Ne=function(n,t){return ron(uG(n,330),uG(t,330))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(a3n,"PolyominoCompactor/MinPerimeterComparator",1319),sDn(1320,1,b2n,Gn),uZn.Ne=function(n,t){return Byn(uG(n,330),uG(t,330))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(a3n,"PolyominoCompactor/MinPerimeterComparatorWithShape",1320),sDn(1322,1,b2n,qn),uZn.Ne=function(n,t){return XHn(uG(n,176),uG(t,176))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(a3n,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator",1322),sDn(1325,1,{},Xn),uZn.Kb=function(n){return uG(n,334).a},zW(a3n,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator/lambda$0$Type",1325),sDn(782,1,{},sC),uZn.Ve=function(n,t){return d6(this,uG(n,42),uG(t,176))},zW(a3n,"SuccessorCombination",782),sDn(649,1,{},zn),uZn.Ve=function(n,t){var e;return KNn((e=uG(n,42),uG(t,176),e))},zW(a3n,"SuccessorJitter",649),sDn(648,1,{},Vn),uZn.Ve=function(n,t){var e;return cFn((e=uG(n,42),uG(t,176),e))},zW(a3n,"SuccessorLineByLine",648),sDn(573,1,{},Wn),uZn.Ve=function(n,t){var e;return txn((e=uG(n,42),uG(t,176),e))},zW(a3n,"SuccessorManhattan",573),sDn(1344,1,{},Qn),uZn.Ve=function(n,t){var e;return lKn((e=uG(n,42),uG(t,176),e))},zW(a3n,"SuccessorMaxNormWindingInMathPosSense",1344),sDn(409,1,{},$d),uZn.Ve=function(n,t){return HV(this,n,t)},uZn.c=!1,uZn.d=!1,uZn.e=!1,uZn.f=!1,zW(a3n,"SuccessorQuadrantsGeneric",409),sDn(1345,1,{},Jn),uZn.Kb=function(n){return uG(n,334).a},zW(a3n,"SuccessorQuadrantsGeneric/lambda$0$Type",1345),sDn(332,22,{3:1,34:1,22:1,332:1},hC),uZn.a=!1;var Eht,Sht=_cn(f3n,l3n,332,Oat,F6,kB);sDn(1317,1,{}),uZn.Ib=function(){var n,t,e,i,r,c;for(e=" ",n=xwn(0),r=0;r=0?"b"+n+"["+X8(this.a)+"]":"b["+X8(this.a)+"]":"b_"+xx(this)},zW(V3n,"FBendpoint",250),sDn(290,137,{3:1,290:1,96:1,137:1},$F),uZn.Ib=function(){return X8(this)},zW(V3n,"FEdge",290),sDn(235,137,{3:1,235:1,96:1,137:1},d7);var uft,sft,hft,fft,lft,bft,wft,dft,gft,pft,mft=zW(V3n,"FGraph",235);sDn(454,309,{3:1,454:1,309:1,96:1,137:1},A5),uZn.Ib=function(){return null==this.b||0==this.b.length?"l["+X8(this.a)+"]":"l_"+this.b},zW(V3n,"FLabel",454),sDn(153,309,{3:1,153:1,309:1,96:1,137:1},E$),uZn.Ib=function(){return z3(this)},uZn.a=0,zW(V3n,"FNode",153),sDn(2100,1,{}),uZn.vf=function(n){pGn(this,n)},uZn.wf=function(){ITn(this)},uZn.d=0,zW(Q3n,"AbstractForceModel",2100),sDn(641,2100,{641:1},lsn),uZn.uf=function(n,t){var i,r,c,a;return qzn(this.f,n,t),c=YF(D$(t.d),n.d),a=e.Math.sqrt(c.a*c.a+c.b*c.b),r=e.Math.max(0,a-NQ(n.e)/2-NQ(t.e)/2),vD(c,((i=VNn(this.e,n,t))>0?-iW(r,this.c)*i:TR(r,this.b)*uG(oIn(n,(rGn(),$ft)),17).a)/a),c},uZn.vf=function(n){pGn(this,n),this.a=uG(oIn(n,(rGn(),Tft)),17).a,this.c=uM(pK(oIn(n,_ft))),this.b=uM(pK(oIn(n,xft)))},uZn.xf=function(n){return n0&&(a-=aM(r,this.a)*i),vD(c,a*this.b/o),c},uZn.vf=function(n){var t,i,r,c,a,o,u;for(pGn(this,n),this.b=uM(pK(oIn(n,(rGn(),Bft)))),this.c=this.b/uG(oIn(n,Tft),17).a,r=n.e.c.length,a=0,c=0,u=new Ww(n.e);u.a0},uZn.a=0,uZn.b=0,uZn.c=0,zW(Q3n,"FruchtermanReingoldModel",642),sDn(860,1,K2n,Gf),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,J3n),""),"Force Model"),"Determines the model for force calculation."),hft),(lAn(),gNt)),mlt),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Y3n),""),"Iterations"),"The number of iterations on the force model."),xwn(300)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Z3n),""),"Repulsive Power"),"Determines how many bend points are added to the edge; such bend points are regarded as repelling particles in the force model"),xwn(0)),mNt),dot),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,n4n),""),"FR Temperature"),"The temperature is used as a scaling factor for particle displacements."),t4n),dNt),fot),ggn(hNt)))),H4(n,n4n,J3n,dft),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,e4n),""),"Eades Repulsion"),"Factor for repulsive forces in Eades' model."),5),dNt),fot),ggn(hNt)))),H4(n,e4n,J3n,lft),vJn((new qf,n))},zW(i4n,"ForceMetaDataProvider",860),sDn(432,22,{3:1,34:1,22:1,432:1},wC);var vft,kft,yft,Mft,Tft,jft,Eft,Sft,Pft,Cft,Ift,Oft,Aft,Lft,Nft,$ft,Dft,xft,Rft,Kft,Fft,_ft,Bft,Hft,Uft,Gft,qft,Xft,zft,Vft,Wft,Qft,Jft,Yft,Zft,nlt,tlt,elt,ilt,rlt,clt,alt,olt,ult,slt,hlt,flt,llt,blt,wlt,dlt,glt,plt,mlt=_cn(i4n,"ForceModelStrategy",432,Oat,h1,TB);sDn($1n,1,K2n,qf),uZn.hf=function(n){vJn(n)},zW(i4n,"ForceOptions",$1n),sDn(1001,1,{},mt),uZn.sf=function(){return new hk},uZn.tf=function(n){},zW(i4n,"ForceOptions/ForceFactory",1001),sDn(861,1,K2n,Xf),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,I4n),""),"Fixed Position"),"Prevent that the node is moved by the layout algorithm."),(qx(),!1)),(lAn(),wNt)),cot),ggn((Rkn(),sNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,O4n),""),"Desired Edge Length"),"Either specified for parent nodes or for individual edges, where the latter takes higher precedence."),100),dNt),fot),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[oNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,A4n),""),"Layout Dimension"),"Dimensions that are permitted to be altered during layout."),Zft),gNt),Clt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,L4n),""),"Stress Epsilon"),"Termination criterion for the iterative process."),t4n),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,N4n),""),"Iteration Limit"),"Maximum number of performed iterations. Takes higher precedence than 'epsilon'."),xwn(vZn)),mNt),dot),ggn(hNt)))),sWn((new zf,n))},zW(i4n,"StressMetaDataProvider",861),sDn(1004,1,K2n,zf),uZn.hf=function(n){sWn(n)},zW(i4n,"StressOptions",1004),sDn(1005,1,{},gt),uZn.sf=function(){return new DF},uZn.tf=function(n){},zW(i4n,"StressOptions/StressFactory",1005),sDn(1110,205,M3n,DF),uZn.rf=function(n,t){var e,i,r,c;for(t.Ug(D4n,1),oM(gK(zDn(n,(Bjn(),olt))))?oM(gK(zDn(n,blt)))||J1(new Sd((vP(),new Vy(n)))):Zxn(new hk,n,t.eh(1)),i=yfn(n),c=(e=tqn(this.a,i)).Kc();c.Ob();)(r=uG(c.Pb(),235)).e.c.length<=1||(rzn(this.b,r),QDn(this.b),Prn(r.d,new pt));YJn(i=lJn(e)),t.Vg()},zW(R4n,"StressLayoutProvider",1110),sDn(1111,1,QZn,pt),uZn.Cd=function(n){Yqn(uG(n,454))},zW(R4n,"StressLayoutProvider/lambda$0$Type",1111),sDn(1002,1,{},qv),uZn.c=0,uZn.e=0,uZn.g=0,zW(R4n,"StressMajorization",1002),sDn(391,22,{3:1,34:1,22:1,391:1},dC);var vlt,klt,ylt,Mlt,Tlt,jlt,Elt,Slt,Plt,Clt=_cn(R4n,"StressMajorization/Dimension",391,Oat,F2,jB);sDn(1003,1,b2n,Fd),uZn.Ne=function(n,t){return j_(this.a,uG(n,153),uG(t,153))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(R4n,"StressMajorization/lambda$0$Type",1003),sDn(1192,1,{},i4),zW(F4n,"ElkLayered",1192),sDn(1193,1,QZn,_d),uZn.Cd=function(n){OLn(this.a,uG(n,36))},zW(F4n,"ElkLayered/lambda$0$Type",1193),sDn(1194,1,QZn,Bd),uZn.Cd=function(n){E_(this.a,uG(n,36))},zW(F4n,"ElkLayered/lambda$1$Type",1194),sDn(1281,1,{},z$),zW(F4n,"GraphConfigurator",1281),sDn(770,1,QZn,Hd),uZn.Cd=function(n){XIn(this.a,uG(n,10))},zW(F4n,"GraphConfigurator/lambda$0$Type",770),sDn(771,1,{},dt),uZn.Kb=function(n){return FEn(),new fX(null,new h3(uG(n,30).a,16))},zW(F4n,"GraphConfigurator/lambda$1$Type",771),sDn(772,1,QZn,Ud),uZn.Cd=function(n){XIn(this.a,uG(n,10))},zW(F4n,"GraphConfigurator/lambda$2$Type",772),sDn(1109,205,M3n,mk),uZn.rf=function(n,t){var e;e=vXn(new kk,n),xA(zDn(n,(jYn(),rMt)))===xA((Own(),Ixt))?Tgn(this.a,e,t):BDn(this.a,e,t),t.$g()||NQn(new Vf,e)},zW(F4n,"LayeredLayoutProvider",1109),sDn(367,22,{3:1,34:1,22:1,367:1},gC);var Ilt,Olt,Alt,Llt=_cn(F4n,"LayeredPhases",367,Oat,u9,EB);sDn(1717,1,{},$an),uZn.i=0,zW(_4n,"ComponentsToCGraphTransformer",1717),sDn(1718,1,{},wt),uZn.yf=function(n,t){return e.Math.min(null!=n.a?uM(n.a):n.c.i,null!=t.a?uM(t.a):t.c.i)},uZn.zf=function(n,t){return e.Math.min(null!=n.a?uM(n.a):n.c.i,null!=t.a?uM(t.a):t.c.i)},zW(_4n,"ComponentsToCGraphTransformer/1",1718),sDn(86,1,{86:1}),uZn.i=0,uZn.k=!0,uZn.o=T0n;var Nlt,$lt,Dlt,xlt=zW(B4n,"CNode",86);sDn(470,86,{470:1,86:1},Jx,Yvn),uZn.Ib=function(){return""},zW(_4n,"ComponentsToCGraphTransformer/CRectNode",470),sDn(1688,1,{},vt),zW(_4n,"OneDimensionalComponentsCompaction",1688),sDn(1689,1,{},kt),uZn.Kb=function(n){return w2(uG(n,42))},uZn.Fb=function(n){return this===n},zW(_4n,"OneDimensionalComponentsCompaction/lambda$0$Type",1689),sDn(1690,1,{},yt),uZn.Kb=function(n){return xgn(uG(n,42))},uZn.Fb=function(n){return this===n},zW(_4n,"OneDimensionalComponentsCompaction/lambda$1$Type",1690),sDn(1720,1,{},wQ),zW(B4n,"CGraph",1720),sDn(194,1,{194:1},Zvn),uZn.b=0,uZn.c=0,uZn.e=0,uZn.g=!0,uZn.i=T0n,zW(B4n,"CGroup",194),sDn(1719,1,{},Mt),uZn.yf=function(n,t){return e.Math.max(null!=n.a?uM(n.a):n.c.i,null!=t.a?uM(t.a):t.c.i)},uZn.zf=function(n,t){return e.Math.max(null!=n.a?uM(n.a):n.c.i,null!=t.a?uM(t.a):t.c.i)},zW(B4n,m2n,1719),sDn(1721,1,{},i$n),uZn.d=!1;var Rlt=zW(B4n,T2n,1721);sDn(1722,1,{},Tt),uZn.Kb=function(n){return GS(),qx(),0!=uG(uG(n,42).a,86).d.e},uZn.Fb=function(n){return this===n},zW(B4n,j2n,1722),sDn(833,1,{},cX),uZn.a=!1,uZn.b=!1,uZn.c=!1,uZn.d=!1,zW(B4n,E2n,833),sDn(1898,1,{},nz),zW(H4n,S2n,1898);var Klt=Iq(U4n,d2n);sDn(1899,1,{382:1},FZ),uZn.bf=function(n){DFn(this,uG(n,476))},zW(H4n,P2n,1899),sDn(V1n,1,b2n,jt),uZn.Ne=function(n,t){return rY(uG(n,86),uG(t,86))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(H4n,C2n,V1n),sDn(476,1,{476:1},KC),uZn.a=!1,zW(H4n,I2n,476),sDn(1901,1,b2n,Et),uZn.Ne=function(n,t){return KEn(uG(n,476),uG(t,476))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(H4n,O2n,1901),sDn(148,1,{148:1},FC,wG),uZn.Fb=function(n){var t;return null!=n&&Ult==Tbn(n)&&(t=uG(n,148),OJ(this.c,t.c)&&OJ(this.d,t.d))},uZn.Hb=function(){return Obn(Uhn(cT(dat,1),EZn,1,5,[this.c,this.d]))},uZn.Ib=function(){return"("+this.c+TZn+this.d+(this.a?"cx":"")+this.b+")"},uZn.a=!0,uZn.c=0,uZn.d=0;var Flt,_lt,Blt,Hlt,Ult=zW(U4n,"Point",148);sDn(416,22,{3:1,34:1,22:1,416:1},jC);var Glt,qlt,Xlt,zlt,Vlt,Wlt,Qlt,Jlt,Ylt,Zlt,nbt,tbt,ebt=_cn(U4n,"Point/Quadrant",416,Oat,H6,SB);sDn(1708,1,{},dk),uZn.b=null,uZn.c=null,uZn.d=null,uZn.e=null,uZn.f=null,zW(U4n,"RectilinearConvexHull",1708),sDn(583,1,{382:1},cyn),uZn.bf=function(n){Itn(this,uG(n,148))},uZn.b=0,zW(U4n,"RectilinearConvexHull/MaximalElementsEventHandler",583),sDn(1710,1,b2n,St),uZn.Ne=function(n,t){return cY(pK(n),pK(t))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U4n,"RectilinearConvexHull/MaximalElementsEventHandler/lambda$0$Type",1710),sDn(1709,1,{382:1},Jin),uZn.bf=function(n){pKn(this,uG(n,148))},uZn.a=0,uZn.b=null,uZn.c=null,uZn.d=null,uZn.e=null,zW(U4n,"RectilinearConvexHull/RectangleEventHandler",1709),sDn(1711,1,b2n,Pt),uZn.Ne=function(n,t){return H3(uG(n,148),uG(t,148))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U4n,"RectilinearConvexHull/lambda$0$Type",1711),sDn(1712,1,b2n,At),uZn.Ne=function(n,t){return U3(uG(n,148),uG(t,148))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U4n,"RectilinearConvexHull/lambda$1$Type",1712),sDn(1713,1,b2n,Lt),uZn.Ne=function(n,t){return B3(uG(n,148),uG(t,148))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U4n,"RectilinearConvexHull/lambda$2$Type",1713),sDn(1714,1,b2n,Ot),uZn.Ne=function(n,t){return G3(uG(n,148),uG(t,148))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U4n,"RectilinearConvexHull/lambda$3$Type",1714),sDn(1715,1,b2n,Nt),uZn.Ne=function(n,t){return sIn(uG(n,148),uG(t,148))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U4n,"RectilinearConvexHull/lambda$4$Type",1715),sDn(1716,1,{},X0),zW(U4n,"Scanline",1716),sDn(2104,1,{}),zW(G4n,"AbstractGraphPlacer",2104),sDn(335,1,{335:1},DR),uZn.Ff=function(n){return!!this.Gf(n)&&(UNn(this.b,uG(oIn(n,(GYn(),xpt)),21),n),!0)},uZn.Gf=function(n){var t,e,i;for(t=uG(oIn(n,(GYn(),xpt)),21),i=uG(Y9(Jlt,t),21).Kc();i.Ob();)if(e=uG(i.Pb(),21),!uG(Y9(this.b,e),15).dc())return!1;return!0},zW(G4n,"ComponentGroup",335),sDn(779,2104,{},gk),uZn.Hf=function(n){var t;for(t=new Ww(this.a);t.ai&&(f=0,l+=u+r,u=0),tHn(a,f+(s=a.c).a,l+s.b),dL(s),c=e.Math.max(c,f+h.a),u=e.Math.max(u,h.b),f+=h.a+r;t.f.a=c,t.f.b=l+u},uZn.Jf=function(n,t){var e,i,r,c,a;if(xA(oIn(t,(jYn(),kyt)))===xA((Uvn(),tbt))){for(i=n.Kc();i.Ob();){for(a=0,c=new Ww((e=uG(i.Pb(),36)).a);c.ai&&!uG(oIn(a,(GYn(),xpt)),21).Hc((KQn(),yRt))||s&&uG(oIn(s,(GYn(),xpt)),21).Hc((KQn(),kRt))||uG(oIn(a,(GYn(),xpt)),21).Hc((KQn(),_Rt)))&&(b=l,w+=u+r,u=0),h=a.c,uG(oIn(a,(GYn(),xpt)),21).Hc((KQn(),yRt))&&(b=c+r),tHn(a,b+h.a,w+h.b),c=e.Math.max(c,b+f.a),uG(oIn(a,xpt),21).Hc(KRt)&&(l=e.Math.max(l,b+f.a+r)),dL(h),u=e.Math.max(u,f.b),b+=f.a+r,s=a;t.f.a=c,t.f.b=w+u},uZn.Jf=function(n,t){},zW(G4n,"ModelOrderRowGraphPlacer",1313),sDn(1311,1,b2n,xt),uZn.Ne=function(n,t){return Wsn(uG(n,36),uG(t,36))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(G4n,"SimpleRowGraphPlacer/1",1311),sDn(1280,1,A2n,Rt),uZn.Lb=function(n){var t;return!!(t=uG(oIn(uG(n,249).b,(jYn(),bMt)),75))&&0!=t.b},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){var t;return!!(t=uG(oIn(uG(n,249).b,(jYn(),bMt)),75))&&0!=t.b},zW(W4n,"CompoundGraphPostprocessor/1",1280),sDn(1279,1,Q4n,yk),uZn.Kf=function(n,t){zyn(this,uG(n,36),t)},zW(W4n,"CompoundGraphPreprocessor",1279),sDn(453,1,{453:1},Sdn),uZn.c=!1,zW(W4n,"CompoundGraphPreprocessor/ExternalPort",453),sDn(249,1,{249:1},$B),uZn.Ib=function(){return MR(this.c)+":"+MNn(this.b)},zW(W4n,"CrossHierarchyEdge",249),sDn(777,1,b2n,Gd),uZn.Ne=function(n,t){return Njn(this,uG(n,249),uG(t,249))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(W4n,"CrossHierarchyEdgeComparator",777),sDn(305,137,{3:1,305:1,96:1,137:1}),uZn.p=0,zW(J4n,"LGraphElement",305),sDn(18,305,{3:1,18:1,305:1,96:1,137:1},UZ),uZn.Ib=function(){return MNn(this)};var obt=zW(J4n,"LEdge",18);sDn(36,305,{3:1,20:1,36:1,305:1,96:1,137:1},Dan),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new Ww(this.b)},uZn.Ib=function(){return 0==this.b.c.length?"G-unlayered"+vIn(this.a):0==this.a.c.length?"G-layered"+vIn(this.b):"G[layerless"+vIn(this.a)+", layers"+vIn(this.b)+"]"};var ubt,sbt=zW(J4n,"LGraph",36);sDn(666,1,{}),uZn.Lf=function(){return this.e.n},uZn.of=function(n){return oIn(this.e,n)},uZn.Mf=function(){return this.e.o},uZn.Nf=function(){return this.e.p},uZn.pf=function(n){return vR(this.e,n)},uZn.Of=function(n){this.e.n.a=n.a,this.e.n.b=n.b},uZn.Pf=function(n){this.e.o.a=n.a,this.e.o.b=n.b},uZn.Qf=function(n){this.e.p=n},zW(J4n,"LGraphAdapters/AbstractLShapeAdapter",666),sDn(474,1,{853:1},qd),uZn.Rf=function(){var n,t;if(!this.b)for(this.b=iR(this.a.b.c.length),t=new Ww(this.a.b);t.a0&&Hbn((s3(t-1,n.length),n.charCodeAt(t-1)),c6n);)--t;if(r> ",n),njn(e)),JA(QA((n.a+="[",n),e.i),"]")),n.a},uZn.c=!0,uZn.d=!1;var Pbt,Cbt,Ibt,Obt,Abt=zW(J4n,"LPort",12);sDn(408,1,t1n,zd),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new Vd(new Ww(this.a.e))},zW(J4n,"LPort/1",408),sDn(1309,1,$Zn,Vd),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return uG(N3(this.a),18).c},uZn.Ob=function(){return l$(this.a)},uZn.Qb=function(){tW(this.a)},zW(J4n,"LPort/1/1",1309),sDn(369,1,t1n,Wd),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new Qd(new Ww(this.a.g))},zW(J4n,"LPort/2",369),sDn(776,1,$Zn,Qd),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return uG(N3(this.a),18).d},uZn.Ob=function(){return l$(this.a)},uZn.Qb=function(){tW(this.a)},zW(J4n,"LPort/2/1",776),sDn(1302,1,t1n,LC),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new w7(this)},zW(J4n,"LPort/CombineIter",1302),sDn(208,1,$Zn,w7),uZn.Nb=function(n){SV(this,n)},uZn.Qb=function(){xj()},uZn.Ob=function(){return Dx(this)},uZn.Pb=function(){return l$(this.a)?N3(this.a):N3(this.b)},zW(J4n,"LPort/CombineIter/1",208),sDn(1303,1,A2n,Bt),uZn.Lb=function(n){return Yz(n)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Lun(),0!=uG(n,12).g.c.length},zW(J4n,"LPort/lambda$0$Type",1303),sDn(1304,1,A2n,Ht),uZn.Lb=function(n){return Zz(n)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Lun(),0!=uG(n,12).e.c.length},zW(J4n,"LPort/lambda$1$Type",1304),sDn(1305,1,A2n,Ut),uZn.Lb=function(n){return Lun(),uG(n,12).j==(KQn(),yRt)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Lun(),uG(n,12).j==(KQn(),yRt)},zW(J4n,"LPort/lambda$2$Type",1305),sDn(1306,1,A2n,Gt),uZn.Lb=function(n){return Lun(),uG(n,12).j==(KQn(),kRt)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Lun(),uG(n,12).j==(KQn(),kRt)},zW(J4n,"LPort/lambda$3$Type",1306),sDn(1307,1,A2n,qt),uZn.Lb=function(n){return Lun(),uG(n,12).j==(KQn(),KRt)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Lun(),uG(n,12).j==(KQn(),KRt)},zW(J4n,"LPort/lambda$4$Type",1307),sDn(1308,1,A2n,Xt),uZn.Lb=function(n){return Lun(),uG(n,12).j==(KQn(),_Rt)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Lun(),uG(n,12).j==(KQn(),_Rt)},zW(J4n,"LPort/lambda$5$Type",1308),sDn(30,305,{3:1,20:1,305:1,30:1,96:1,137:1},bQ),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new Ww(this.a)},uZn.Ib=function(){return"L_"+Ten(this.b.b,this,0)+vIn(this.a)},zW(J4n,"Layer",30),sDn(1330,1,{},kk),zW(h6n,f6n,1330),sDn(1334,1,{},zt),uZn.Kb=function(n){return lCn(uG(n,84))},zW(h6n,"ElkGraphImporter/0methodref$connectableShapeToNode$Type",1334),sDn(1337,1,{},Vt),uZn.Kb=function(n){return lCn(uG(n,84))},zW(h6n,"ElkGraphImporter/1methodref$connectableShapeToNode$Type",1337),sDn(1331,1,QZn,Jd),uZn.Cd=function(n){y$n(this.a,uG(n,123))},zW(h6n,z3n,1331),sDn(1332,1,QZn,Yd),uZn.Cd=function(n){y$n(this.a,uG(n,123))},zW(h6n,l6n,1332),sDn(1333,1,{},Wt),uZn.Kb=function(n){return new fX(null,new h3(KJ(uG(n,74)),16))},zW(h6n,b6n,1333),sDn(1335,1,y1n,Zd),uZn.Mb=function(n){return DN(this.a,uG(n,27))},zW(h6n,w6n,1335),sDn(1336,1,{},Qt),uZn.Kb=function(n){return new fX(null,new h3(FJ(uG(n,74)),16))},zW(h6n,"ElkGraphImporter/lambda$5$Type",1336),sDn(1338,1,y1n,ng),uZn.Mb=function(n){return xN(this.a,uG(n,27))},zW(h6n,"ElkGraphImporter/lambda$7$Type",1338),sDn(1339,1,y1n,Jt),uZn.Mb=function(n){return XY(uG(n,74))},zW(h6n,"ElkGraphImporter/lambda$8$Type",1339),sDn(1297,1,{},Vf),zW(h6n,"ElkGraphLayoutTransferrer",1297),sDn(1298,1,y1n,tg),uZn.Mb=function(n){return IF(this.a,uG(n,18))},zW(h6n,"ElkGraphLayoutTransferrer/lambda$0$Type",1298),sDn(1299,1,QZn,eg),uZn.Cd=function(n){WS(),kD(this.a,uG(n,18))},zW(h6n,"ElkGraphLayoutTransferrer/lambda$1$Type",1299),sDn(1300,1,y1n,ig),uZn.Mb=function(n){return KK(this.a,uG(n,18))},zW(h6n,"ElkGraphLayoutTransferrer/lambda$2$Type",1300),sDn(1301,1,QZn,rg),uZn.Cd=function(n){WS(),kD(this.a,uG(n,18))},zW(h6n,"ElkGraphLayoutTransferrer/lambda$3$Type",1301),sDn(819,1,{},xF),zW(d6n,"BiLinkedHashMultiMap",819),sDn(1550,1,Q4n,Yt),uZn.Kf=function(n,t){Bon(uG(n,36),t)},zW(d6n,"CommentNodeMarginCalculator",1550),sDn(1551,1,{},Zt),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"CommentNodeMarginCalculator/lambda$0$Type",1551),sDn(1552,1,QZn,ne),uZn.Cd=function(n){bXn(uG(n,10))},zW(d6n,"CommentNodeMarginCalculator/lambda$1$Type",1552),sDn(1553,1,Q4n,te),uZn.Kf=function(n,t){WFn(uG(n,36),t)},zW(d6n,"CommentPostprocessor",1553),sDn(1554,1,Q4n,ee),uZn.Kf=function(n,t){kQn(uG(n,36),t)},zW(d6n,"CommentPreprocessor",1554),sDn(1555,1,Q4n,ie),uZn.Kf=function(n,t){KKn(uG(n,36),t)},zW(d6n,"ConstraintsPostprocessor",1555),sDn(1556,1,Q4n,re),uZn.Kf=function(n,t){Csn(uG(n,36),t)},zW(d6n,"EdgeAndLayerConstraintEdgeReverser",1556),sDn(1557,1,Q4n,ce),uZn.Kf=function(n,t){amn(uG(n,36),t)},zW(d6n,"EndLabelPostprocessor",1557),sDn(1558,1,{},ae),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"EndLabelPostprocessor/lambda$0$Type",1558),sDn(1559,1,y1n,oe),uZn.Mb=function(n){return q8(uG(n,10))},zW(d6n,"EndLabelPostprocessor/lambda$1$Type",1559),sDn(1560,1,QZn,ue),uZn.Cd=function(n){_En(uG(n,10))},zW(d6n,"EndLabelPostprocessor/lambda$2$Type",1560),sDn(1561,1,Q4n,se),uZn.Kf=function(n,t){AAn(uG(n,36),t)},zW(d6n,"EndLabelPreprocessor",1561),sDn(1562,1,{},he),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"EndLabelPreprocessor/lambda$0$Type",1562),sDn(1563,1,QZn,NB),uZn.Cd=function(n){oP(this.a,this.b,this.c,uG(n,10))},uZn.a=0,uZn.b=0,uZn.c=!1,zW(d6n,"EndLabelPreprocessor/lambda$1$Type",1563),sDn(1564,1,y1n,fe),uZn.Mb=function(n){return xA(oIn(uG(n,72),(jYn(),Xyt)))===xA((Zrn(),cxt))},zW(d6n,"EndLabelPreprocessor/lambda$2$Type",1564),sDn(1565,1,QZn,cg),uZn.Cd=function(n){aq(this.a,uG(n,72))},zW(d6n,"EndLabelPreprocessor/lambda$3$Type",1565),sDn(1566,1,y1n,le),uZn.Mb=function(n){return xA(oIn(uG(n,72),(jYn(),Xyt)))===xA((Zrn(),rxt))},zW(d6n,"EndLabelPreprocessor/lambda$4$Type",1566),sDn(1567,1,QZn,ag),uZn.Cd=function(n){aq(this.a,uG(n,72))},zW(d6n,"EndLabelPreprocessor/lambda$5$Type",1567),sDn(1615,1,Q4n,_f),uZn.Kf=function(n,t){Ddn(uG(n,36),t)},zW(d6n,"EndLabelSorter",1615),sDn(1616,1,b2n,be),uZn.Ne=function(n,t){return okn(uG(n,466),uG(t,466))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"EndLabelSorter/1",1616),sDn(466,1,{466:1},oZ),zW(d6n,"EndLabelSorter/LabelGroup",466),sDn(1617,1,{},we),uZn.Kb=function(n){return VS(),new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"EndLabelSorter/lambda$0$Type",1617),sDn(1618,1,y1n,de),uZn.Mb=function(n){return VS(),uG(n,10).k==(zIn(),dbt)},zW(d6n,"EndLabelSorter/lambda$1$Type",1618),sDn(1619,1,QZn,ge),uZn.Cd=function(n){VIn(uG(n,10))},zW(d6n,"EndLabelSorter/lambda$2$Type",1619),sDn(1620,1,y1n,pe),uZn.Mb=function(n){return VS(),xA(oIn(uG(n,72),(jYn(),Xyt)))===xA((Zrn(),rxt))},zW(d6n,"EndLabelSorter/lambda$3$Type",1620),sDn(1621,1,y1n,me),uZn.Mb=function(n){return VS(),xA(oIn(uG(n,72),(jYn(),Xyt)))===xA((Zrn(),cxt))},zW(d6n,"EndLabelSorter/lambda$4$Type",1621),sDn(1568,1,Q4n,ve),uZn.Kf=function(n,t){GXn(this,uG(n,36))},uZn.b=0,uZn.c=0,zW(d6n,"FinalSplineBendpointsCalculator",1568),sDn(1569,1,{},ke),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"FinalSplineBendpointsCalculator/lambda$0$Type",1569),sDn(1570,1,{},ye),uZn.Kb=function(n){return new fX(null,new LW(new Fz(ix(Xgn(uG(n,10)).a.Kc(),new h))))},zW(d6n,"FinalSplineBendpointsCalculator/lambda$1$Type",1570),sDn(1571,1,y1n,Me),uZn.Mb=function(n){return!v9(uG(n,18))},zW(d6n,"FinalSplineBendpointsCalculator/lambda$2$Type",1571),sDn(1572,1,y1n,Te),uZn.Mb=function(n){return vR(uG(n,18),(GYn(),Tmt))},zW(d6n,"FinalSplineBendpointsCalculator/lambda$3$Type",1572),sDn(1573,1,QZn,og),uZn.Cd=function(n){YHn(this.a,uG(n,131))},zW(d6n,"FinalSplineBendpointsCalculator/lambda$4$Type",1573),sDn(1574,1,QZn,je),uZn.Cd=function(n){_An(uG(n,18).a)},zW(d6n,"FinalSplineBendpointsCalculator/lambda$5$Type",1574),sDn(803,1,Q4n,ug),uZn.Kf=function(n,t){fVn(this,uG(n,36),t)},zW(d6n,"GraphTransformer",803),sDn(517,22,{3:1,34:1,22:1,517:1},PC);var Lbt,Nbt,$bt,Dbt=_cn(d6n,"GraphTransformer/Mode",517,Oat,f1,zH);sDn(1575,1,Q4n,Ee),uZn.Kf=function(n,t){wRn(uG(n,36),t)},zW(d6n,"HierarchicalNodeResizingProcessor",1575),sDn(1576,1,Q4n,Se),uZn.Kf=function(n,t){don(uG(n,36),t)},zW(d6n,"HierarchicalPortConstraintProcessor",1576),sDn(1577,1,b2n,Pe),uZn.Ne=function(n,t){return wyn(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"HierarchicalPortConstraintProcessor/NodeComparator",1577),sDn(1578,1,Q4n,Ce),uZn.Kf=function(n,t){HGn(uG(n,36),t)},zW(d6n,"HierarchicalPortDummySizeProcessor",1578),sDn(1579,1,Q4n,Ie),uZn.Kf=function(n,t){z_n(this,uG(n,36),t)},uZn.a=0,zW(d6n,"HierarchicalPortOrthogonalEdgeRouter",1579),sDn(1580,1,b2n,Oe),uZn.Ne=function(n,t){return Ox(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"HierarchicalPortOrthogonalEdgeRouter/1",1580),sDn(1581,1,b2n,Ae),uZn.Ne=function(n,t){return Dtn(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"HierarchicalPortOrthogonalEdgeRouter/2",1581),sDn(1582,1,Q4n,Le),uZn.Kf=function(n,t){tIn(uG(n,36),t)},zW(d6n,"HierarchicalPortPositionProcessor",1582),sDn(1583,1,Q4n,Wf),uZn.Kf=function(n,t){SJn(this,uG(n,36))},uZn.a=0,uZn.c=0,zW(d6n,"HighDegreeNodeLayeringProcessor",1583),sDn(580,1,{580:1},Ne),uZn.b=-1,uZn.d=-1,zW(d6n,"HighDegreeNodeLayeringProcessor/HighDegreeNodeInformation",580),sDn(1584,1,{},$e),uZn.Kb=function(n){return HB(),qgn(uG(n,10))},uZn.Fb=function(n){return this===n},zW(d6n,"HighDegreeNodeLayeringProcessor/lambda$0$Type",1584),sDn(1585,1,{},De),uZn.Kb=function(n){return HB(),Xgn(uG(n,10))},uZn.Fb=function(n){return this===n},zW(d6n,"HighDegreeNodeLayeringProcessor/lambda$1$Type",1585),sDn(1591,1,Q4n,xe),uZn.Kf=function(n,t){TGn(this,uG(n,36),t)},zW(d6n,"HyperedgeDummyMerger",1591),sDn(804,1,{},xB),uZn.a=!1,uZn.b=!1,uZn.c=!1,zW(d6n,"HyperedgeDummyMerger/MergeState",804),sDn(1592,1,{},Re),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"HyperedgeDummyMerger/lambda$0$Type",1592),sDn(1593,1,{},Ke),uZn.Kb=function(n){return new fX(null,new h3(uG(n,10).j,16))},zW(d6n,"HyperedgeDummyMerger/lambda$1$Type",1593),sDn(1594,1,QZn,Fe),uZn.Cd=function(n){uG(n,12).p=-1},zW(d6n,"HyperedgeDummyMerger/lambda$2$Type",1594),sDn(1595,1,Q4n,_e),uZn.Kf=function(n,t){kGn(uG(n,36),t)},zW(d6n,"HypernodesProcessor",1595),sDn(1596,1,Q4n,Be),uZn.Kf=function(n,t){_Gn(uG(n,36),t)},zW(d6n,"InLayerConstraintProcessor",1596),sDn(1597,1,Q4n,He),uZn.Kf=function(n,t){Nun(uG(n,36),t)},zW(d6n,"InnermostNodeMarginCalculator",1597),sDn(1598,1,Q4n,Ue),uZn.Kf=function(n,t){gQn(this,uG(n,36))},uZn.a=T0n,uZn.b=T0n,uZn.c=M0n,uZn.d=M0n;var xbt,Rbt,Kbt,Fbt,_bt,Bbt,Hbt,Ubt,Gbt,qbt,Xbt,zbt,Vbt,Wbt,Qbt,Jbt,Ybt,Zbt,nwt,twt,ewt,iwt,rwt,cwt,awt,owt,uwt,swt,hwt,fwt,lwt,bwt,wwt,dwt,gwt,pwt,mwt,vwt,kwt,ywt,Mwt,Twt,jwt,Ewt,Swt,Pwt,Cwt,Iwt,Owt,Awt,Lwt,Nwt,$wt,Dwt,xwt,Rwt,Kwt,Fwt=zW(d6n,"InteractiveExternalPortPositioner",1598);sDn(1599,1,{},Ge),uZn.Kb=function(n){return uG(n,18).d.i},uZn.Fb=function(n){return this===n},zW(d6n,"InteractiveExternalPortPositioner/lambda$0$Type",1599),sDn(1600,1,{},sg),uZn.Kb=function(n){return Lx(this.a,pK(n))},uZn.Fb=function(n){return this===n},zW(d6n,"InteractiveExternalPortPositioner/lambda$1$Type",1600),sDn(1601,1,{},qe),uZn.Kb=function(n){return uG(n,18).c.i},uZn.Fb=function(n){return this===n},zW(d6n,"InteractiveExternalPortPositioner/lambda$2$Type",1601),sDn(1602,1,{},hg),uZn.Kb=function(n){return Nx(this.a,pK(n))},uZn.Fb=function(n){return this===n},zW(d6n,"InteractiveExternalPortPositioner/lambda$3$Type",1602),sDn(1603,1,{},fg),uZn.Kb=function(n){return XF(this.a,pK(n))},uZn.Fb=function(n){return this===n},zW(d6n,"InteractiveExternalPortPositioner/lambda$4$Type",1603),sDn(1604,1,{},lg),uZn.Kb=function(n){return zF(this.a,pK(n))},uZn.Fb=function(n){return this===n},zW(d6n,"InteractiveExternalPortPositioner/lambda$5$Type",1604),sDn(81,22,{3:1,34:1,22:1,81:1,196:1},CC),uZn.dg=function(){switch(this.g){case 15:return new fc;case 22:return new lc;case 47:return new dc;case 28:case 35:return new ei;case 32:return new Yt;case 42:return new te;case 1:return new ee;case 41:return new ie;case 56:return new ug((Aun(),Obt));case 0:return new ug((Aun(),Ibt));case 2:return new re;case 54:return new ce;case 33:return new se;case 51:return new ve;case 55:return new Ee;case 13:return new Se;case 38:return new Ce;case 44:return new Ie;case 40:return new Le;case 9:return new Wf;case 49:return new Ux;case 37:return new xe;case 43:return new _e;case 27:return new Be;case 30:return new He;case 3:return new Ue;case 18:return new ze;case 29:return new Ve;case 5:return new Qf;case 50:return new Xe;case 34:return new Jf;case 36:return new ii;case 52:return new _f;case 11:return new ri;case 7:return new Yf;case 39:return new ci;case 45:return new ai;case 16:return new oi;case 10:return new RI;case 48:return new fi;case 21:return new li;case 23:return new zy((ean(),BEt));case 8:return new wi;case 12:return new gi;case 4:return new pi;case 19:return new rl;case 17:return new Pi;case 53:return new Ci;case 6:return new Bi;case 25:return new jk;case 46:return new $i;case 31:return new _F;case 14:return new Wi;case 26:return new Mc;case 20:return new nr;case 24:return new zy((ean(),HEt));default:throw hv(new vM(v6n+(null!=this.f?this.f:""+this.g)))}};var _wt,Bwt,Hwt,Uwt,Gwt,qwt,Xwt,zwt,Vwt=_cn(d6n,k6n,81,Oat,bKn,XB);sDn(1605,1,Q4n,ze),uZn.Kf=function(n,t){bQn(uG(n,36),t)},zW(d6n,"InvertedPortProcessor",1605),sDn(1606,1,Q4n,Ve),uZn.Kf=function(n,t){DHn(uG(n,36),t)},zW(d6n,"LabelAndNodeSizeProcessor",1606),sDn(1607,1,y1n,We),uZn.Mb=function(n){return uG(n,10).k==(zIn(),dbt)},zW(d6n,"LabelAndNodeSizeProcessor/lambda$0$Type",1607),sDn(1608,1,y1n,Qe),uZn.Mb=function(n){return uG(n,10).k==(zIn(),lbt)},zW(d6n,"LabelAndNodeSizeProcessor/lambda$1$Type",1608),sDn(1609,1,QZn,KB),uZn.Cd=function(n){uP(this.b,this.a,this.c,uG(n,10))},uZn.a=!1,uZn.c=!1,zW(d6n,"LabelAndNodeSizeProcessor/lambda$2$Type",1609),sDn(1610,1,Q4n,Qf),uZn.Kf=function(n,t){EWn(uG(n,36),t)},zW(d6n,"LabelDummyInserter",1610),sDn(1611,1,A2n,Je),uZn.Lb=function(n){return xA(oIn(uG(n,72),(jYn(),Xyt)))===xA((Zrn(),ixt))},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return xA(oIn(uG(n,72),(jYn(),Xyt)))===xA((Zrn(),ixt))},zW(d6n,"LabelDummyInserter/1",1611),sDn(1612,1,Q4n,Xe),uZn.Kf=function(n,t){eWn(uG(n,36),t)},zW(d6n,"LabelDummyRemover",1612),sDn(1613,1,y1n,Ye),uZn.Mb=function(n){return oM(gK(oIn(uG(n,72),(jYn(),qyt))))},zW(d6n,"LabelDummyRemover/lambda$0$Type",1613),sDn(1378,1,Q4n,Jf),uZn.Kf=function(n,t){UVn(this,uG(n,36),t)},uZn.a=null,zW(d6n,"LabelDummySwitcher",1378),sDn(293,1,{293:1},oHn),uZn.c=0,uZn.d=null,uZn.f=0,zW(d6n,"LabelDummySwitcher/LabelDummyInfo",293),sDn(1379,1,{},Ze),uZn.Kb=function(n){return Pun(),new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"LabelDummySwitcher/lambda$0$Type",1379),sDn(1380,1,y1n,ni),uZn.Mb=function(n){return Pun(),uG(n,10).k==(zIn(),bbt)},zW(d6n,"LabelDummySwitcher/lambda$1$Type",1380),sDn(1381,1,{},bg),uZn.Kb=function(n){return FK(this.a,uG(n,10))},zW(d6n,"LabelDummySwitcher/lambda$2$Type",1381),sDn(1382,1,QZn,wg),uZn.Cd=function(n){gQ(this.a,uG(n,293))},zW(d6n,"LabelDummySwitcher/lambda$3$Type",1382),sDn(1383,1,b2n,ti),uZn.Ne=function(n,t){return nV(uG(n,293),uG(t,293))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"LabelDummySwitcher/lambda$4$Type",1383),sDn(802,1,Q4n,ei),uZn.Kf=function(n,t){Dnn(uG(n,36),t)},zW(d6n,"LabelManagementProcessor",802),sDn(1614,1,Q4n,ii),uZn.Kf=function(n,t){jFn(uG(n,36),t)},zW(d6n,"LabelSideSelector",1614),sDn(1622,1,Q4n,ri),uZn.Kf=function(n,t){yqn(uG(n,36),t)},zW(d6n,"LayerConstraintPostprocessor",1622),sDn(1623,1,Q4n,Yf),uZn.Kf=function(n,t){vDn(uG(n,36),t)},zW(d6n,"LayerConstraintPreprocessor",1623),sDn(371,22,{3:1,34:1,22:1,371:1},IC);var Wwt,Qwt,Jwt,Ywt,Zwt,ndt,tdt,edt,idt,rdt,cdt,adt=_cn(d6n,"LayerConstraintPreprocessor/HiddenNodeConnections",371,Oat,G6,zB);sDn(1624,1,Q4n,ci),uZn.Kf=function(n,t){zzn(uG(n,36),t)},zW(d6n,"LayerSizeAndGraphHeightCalculator",1624),sDn(1625,1,Q4n,ai),uZn.Kf=function(n,t){dRn(uG(n,36),t)},zW(d6n,"LongEdgeJoiner",1625),sDn(1626,1,Q4n,oi),uZn.Kf=function(n,t){lzn(uG(n,36),t)},zW(d6n,"LongEdgeSplitter",1626),sDn(1627,1,Q4n,RI),uZn.Kf=function(n,t){VWn(this,uG(n,36),t)},uZn.e=0,uZn.f=0,uZn.j=0,uZn.k=0,uZn.n=0,uZn.o=0,zW(d6n,"NodePromotion",1627),sDn(1628,1,b2n,ui),uZn.Ne=function(n,t){return $ln(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"NodePromotion/1",1628),sDn(1629,1,b2n,si),uZn.Ne=function(n,t){return Dln(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"NodePromotion/2",1629),sDn(1630,1,{},hi),uZn.Kb=function(n){return uG(n,42),UB(),qx(),!0},uZn.Fb=function(n){return this===n},zW(d6n,"NodePromotion/lambda$0$Type",1630),sDn(1631,1,{},mg),uZn.Kb=function(n){return P0(this.a,uG(n,42))},uZn.Fb=function(n){return this===n},uZn.a=0,zW(d6n,"NodePromotion/lambda$1$Type",1631),sDn(1632,1,{},vg),uZn.Kb=function(n){return S0(this.a,uG(n,42))},uZn.Fb=function(n){return this===n},uZn.a=0,zW(d6n,"NodePromotion/lambda$2$Type",1632),sDn(1633,1,Q4n,fi),uZn.Kf=function(n,t){wJn(uG(n,36),t)},zW(d6n,"NorthSouthPortPostprocessor",1633),sDn(1634,1,Q4n,li),uZn.Kf=function(n,t){FQn(uG(n,36),t)},zW(d6n,"NorthSouthPortPreprocessor",1634),sDn(1635,1,b2n,bi),uZn.Ne=function(n,t){return Qsn(uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"NorthSouthPortPreprocessor/lambda$0$Type",1635),sDn(1636,1,Q4n,wi),uZn.Kf=function(n,t){HUn(uG(n,36),t)},zW(d6n,"PartitionMidprocessor",1636),sDn(1637,1,y1n,di),uZn.Mb=function(n){return vR(uG(n,10),(jYn(),UMt))},zW(d6n,"PartitionMidprocessor/lambda$0$Type",1637),sDn(1638,1,QZn,kg),uZn.Cd=function(n){zY(this.a,uG(n,10))},zW(d6n,"PartitionMidprocessor/lambda$1$Type",1638),sDn(1639,1,Q4n,gi),uZn.Kf=function(n,t){JRn(uG(n,36),t)},zW(d6n,"PartitionPostprocessor",1639),sDn(1640,1,Q4n,pi),uZn.Kf=function(n,t){M$n(uG(n,36),t)},zW(d6n,"PartitionPreprocessor",1640),sDn(1641,1,y1n,mi),uZn.Mb=function(n){return vR(uG(n,10),(jYn(),UMt))},zW(d6n,"PartitionPreprocessor/lambda$0$Type",1641),sDn(1642,1,{},vi),uZn.Kb=function(n){return new fX(null,new LW(new Fz(ix(Xgn(uG(n,10)).a.Kc(),new h))))},zW(d6n,"PartitionPreprocessor/lambda$1$Type",1642),sDn(1643,1,y1n,ki),uZn.Mb=function(n){return pkn(uG(n,18))},zW(d6n,"PartitionPreprocessor/lambda$2$Type",1643),sDn(1644,1,QZn,yi),uZn.Cd=function(n){rfn(uG(n,18))},zW(d6n,"PartitionPreprocessor/lambda$3$Type",1644),sDn(1645,1,Q4n,rl),uZn.Kf=function(n,t){bUn(uG(n,36),t)},zW(d6n,"PortListSorter",1645),sDn(1648,1,b2n,Mi),uZn.Ne=function(n,t){return Q5(uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"PortListSorter/lambda$0$Type",1648),sDn(1650,1,b2n,Ti),uZn.Ne=function(n,t){return hGn(uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"PortListSorter/lambda$1$Type",1650),sDn(1646,1,{},ji),uZn.Kb=function(n){return Cln(),uG(n,12).e},zW(d6n,"PortListSorter/lambda$2$Type",1646),sDn(1647,1,{},Ei),uZn.Kb=function(n){return Cln(),uG(n,12).g},zW(d6n,"PortListSorter/lambda$3$Type",1647),sDn(1649,1,b2n,Si),uZn.Ne=function(n,t){return bjn(uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"PortListSorter/lambda$4$Type",1649),sDn(1651,1,Q4n,Pi),uZn.Kf=function(n,t){FDn(uG(n,36),t)},zW(d6n,"PortSideProcessor",1651),sDn(1652,1,Q4n,Ci),uZn.Kf=function(n,t){SBn(uG(n,36),t)},zW(d6n,"ReversedEdgeRestorer",1652),sDn(1657,1,Q4n,jk),uZn.Kf=function(n,t){kTn(this,uG(n,36),t)},zW(d6n,"SelfLoopPortRestorer",1657),sDn(1658,1,{},Ii),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"SelfLoopPortRestorer/lambda$0$Type",1658),sDn(1659,1,y1n,Oi),uZn.Mb=function(n){return uG(n,10).k==(zIn(),dbt)},zW(d6n,"SelfLoopPortRestorer/lambda$1$Type",1659),sDn(1660,1,y1n,Ai),uZn.Mb=function(n){return vR(uG(n,10),(GYn(),vmt))},zW(d6n,"SelfLoopPortRestorer/lambda$2$Type",1660),sDn(1661,1,{},Li),uZn.Kb=function(n){return uG(oIn(uG(n,10),(GYn(),vmt)),337)},zW(d6n,"SelfLoopPortRestorer/lambda$3$Type",1661),sDn(1662,1,QZn,gg),uZn.Cd=function(n){gOn(this.a,uG(n,337))},zW(d6n,"SelfLoopPortRestorer/lambda$4$Type",1662),sDn(805,1,QZn,Ni),uZn.Cd=function(n){BOn(uG(n,105))},zW(d6n,"SelfLoopPortRestorer/lambda$5$Type",805),sDn(1663,1,Q4n,$i),uZn.Kf=function(n,t){oyn(uG(n,36),t)},zW(d6n,"SelfLoopPostProcessor",1663),sDn(1664,1,{},Di),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"SelfLoopPostProcessor/lambda$0$Type",1664),sDn(1665,1,y1n,xi),uZn.Mb=function(n){return uG(n,10).k==(zIn(),dbt)},zW(d6n,"SelfLoopPostProcessor/lambda$1$Type",1665),sDn(1666,1,y1n,Ri),uZn.Mb=function(n){return vR(uG(n,10),(GYn(),vmt))},zW(d6n,"SelfLoopPostProcessor/lambda$2$Type",1666),sDn(1667,1,QZn,Ki),uZn.Cd=function(n){gSn(uG(n,10))},zW(d6n,"SelfLoopPostProcessor/lambda$3$Type",1667),sDn(1668,1,{},Fi),uZn.Kb=function(n){return new fX(null,new h3(uG(n,105).f,1))},zW(d6n,"SelfLoopPostProcessor/lambda$4$Type",1668),sDn(1669,1,QZn,dg),uZn.Cd=function(n){V6(this.a,uG(n,340))},zW(d6n,"SelfLoopPostProcessor/lambda$5$Type",1669),sDn(1670,1,y1n,_i),uZn.Mb=function(n){return!!uG(n,105).i},zW(d6n,"SelfLoopPostProcessor/lambda$6$Type",1670),sDn(1671,1,QZn,pg),uZn.Cd=function(n){eM(this.a,uG(n,105))},zW(d6n,"SelfLoopPostProcessor/lambda$7$Type",1671),sDn(1653,1,Q4n,Bi),uZn.Kf=function(n,t){Fxn(uG(n,36),t)},zW(d6n,"SelfLoopPreProcessor",1653),sDn(1654,1,{},Hi),uZn.Kb=function(n){return new fX(null,new h3(uG(n,105).f,1))},zW(d6n,"SelfLoopPreProcessor/lambda$0$Type",1654),sDn(1655,1,{},Ui),uZn.Kb=function(n){return uG(n,340).a},zW(d6n,"SelfLoopPreProcessor/lambda$1$Type",1655),sDn(1656,1,QZn,Gi),uZn.Cd=function(n){v$(uG(n,18))},zW(d6n,"SelfLoopPreProcessor/lambda$2$Type",1656),sDn(1672,1,Q4n,_F),uZn.Kf=function(n,t){xIn(this,uG(n,36),t)},zW(d6n,"SelfLoopRouter",1672),sDn(1673,1,{},qi),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"SelfLoopRouter/lambda$0$Type",1673),sDn(1674,1,y1n,Xi),uZn.Mb=function(n){return uG(n,10).k==(zIn(),dbt)},zW(d6n,"SelfLoopRouter/lambda$1$Type",1674),sDn(1675,1,y1n,zi),uZn.Mb=function(n){return vR(uG(n,10),(GYn(),vmt))},zW(d6n,"SelfLoopRouter/lambda$2$Type",1675),sDn(1676,1,{},Vi),uZn.Kb=function(n){return uG(oIn(uG(n,10),(GYn(),vmt)),337)},zW(d6n,"SelfLoopRouter/lambda$3$Type",1676),sDn(1677,1,QZn,OC),uZn.Cd=function(n){lY(this.a,this.b,uG(n,337))},zW(d6n,"SelfLoopRouter/lambda$4$Type",1677),sDn(1678,1,Q4n,Wi),uZn.Kf=function(n,t){tFn(uG(n,36),t)},zW(d6n,"SemiInteractiveCrossMinProcessor",1678),sDn(1679,1,y1n,Qi),uZn.Mb=function(n){return uG(n,10).k==(zIn(),dbt)},zW(d6n,"SemiInteractiveCrossMinProcessor/lambda$0$Type",1679),sDn(1680,1,y1n,Ji),uZn.Mb=function(n){return MX(uG(n,10))._b((jYn(),rTt))},zW(d6n,"SemiInteractiveCrossMinProcessor/lambda$1$Type",1680),sDn(1681,1,b2n,Yi),uZn.Ne=function(n,t){return Eon(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"SemiInteractiveCrossMinProcessor/lambda$2$Type",1681),sDn(1682,1,{},Zi),uZn.Ve=function(n,t){return VY(uG(n,10),uG(t,10))},zW(d6n,"SemiInteractiveCrossMinProcessor/lambda$3$Type",1682),sDn(1684,1,Q4n,nr),uZn.Kf=function(n,t){MXn(uG(n,36),t)},zW(d6n,"SortByInputModelProcessor",1684),sDn(1685,1,y1n,tr),uZn.Mb=function(n){return 0!=uG(n,12).g.c.length},zW(d6n,"SortByInputModelProcessor/lambda$0$Type",1685),sDn(1686,1,QZn,yg),uZn.Cd=function(n){ZOn(this.a,uG(n,12))},zW(d6n,"SortByInputModelProcessor/lambda$1$Type",1686),sDn(1759,817,{},Kon),uZn.df=function(n){var t,e,i,r;switch(this.c=n,this.a.g){case 2:t=new Zm,kS(JJ(new fX(null,new h3(this.c.a.b,16)),new dr),new BC(this,t)),QAn(this,new ir),Prn(t,new rr),t.c.length=0,kS(JJ(new fX(null,new h3(this.c.a.b,16)),new cr),new Tg(t)),QAn(this,new ar),Prn(t,new or),t.c.length=0,e=w$(Tun(ZJ(new fX(null,new h3(this.c.a.b,16)),new jg(this))),new ur),kS(new fX(null,new h3(this.c.a.a,16)),new NC(e,t)),QAn(this,new hr),Prn(t,new fr),t.c.length=0;break;case 3:i=new Zm,QAn(this,new er),r=w$(Tun(ZJ(new fX(null,new h3(this.c.a.b,16)),new Mg(this))),new sr),kS(JJ(new fX(null,new h3(this.c.a.b,16)),new lr),new DC(r,i)),QAn(this,new br),Prn(i,new wr),i.c.length=0;break;default:throw hv(new Hv)}},uZn.b=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation",1759),sDn(1760,1,A2n,er),uZn.Lb=function(n){return F$(uG(n,60).g,154)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return F$(uG(n,60).g,154)},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$0$Type",1760),sDn(1761,1,{},Mg),uZn.Ye=function(n){return $Ln(this.a,uG(n,60))},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$1$Type",1761),sDn(1769,1,M1n,AC),uZn.de=function(){TEn(this.a,this.b,-1)},uZn.b=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$10$Type",1769),sDn(1771,1,A2n,ir),uZn.Lb=function(n){return F$(uG(n,60).g,154)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return F$(uG(n,60).g,154)},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$11$Type",1771),sDn(1772,1,QZn,rr),uZn.Cd=function(n){uG(n,380).de()},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$12$Type",1772),sDn(1773,1,y1n,cr),uZn.Mb=function(n){return F$(uG(n,60).g,10)},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$13$Type",1773),sDn(1775,1,QZn,Tg),uZn.Cd=function(n){tpn(this.a,uG(n,60))},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$14$Type",1775),sDn(1774,1,M1n,xC),uZn.de=function(){TEn(this.b,this.a,-1)},uZn.a=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$15$Type",1774),sDn(1776,1,A2n,ar),uZn.Lb=function(n){return F$(uG(n,60).g,10)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return F$(uG(n,60).g,10)},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$16$Type",1776),sDn(1777,1,QZn,or),uZn.Cd=function(n){uG(n,380).de()},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$17$Type",1777),sDn(1778,1,{},jg),uZn.Ye=function(n){return DLn(this.a,uG(n,60))},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$18$Type",1778),sDn(1779,1,{},ur),uZn.We=function(){return 0},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$19$Type",1779),sDn(1762,1,{},sr),uZn.We=function(){return 0},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$2$Type",1762),sDn(1781,1,QZn,NC),uZn.Cd=function(n){uz(this.a,this.b,uG(n,316))},uZn.a=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$20$Type",1781),sDn(1780,1,M1n,$C),uZn.de=function(){HDn(this.a,this.b,-1)},uZn.b=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$21$Type",1780),sDn(1782,1,A2n,hr),uZn.Lb=function(n){return uG(n,60),!0},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return uG(n,60),!0},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$22$Type",1782),sDn(1783,1,QZn,fr),uZn.Cd=function(n){uG(n,380).de()},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$23$Type",1783),sDn(1763,1,y1n,lr),uZn.Mb=function(n){return F$(uG(n,60).g,10)},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$3$Type",1763),sDn(1765,1,QZn,DC),uZn.Cd=function(n){sz(this.a,this.b,uG(n,60))},uZn.a=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$4$Type",1765),sDn(1764,1,M1n,RC),uZn.de=function(){TEn(this.b,this.a,-1)},uZn.a=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$5$Type",1764),sDn(1766,1,A2n,br),uZn.Lb=function(n){return uG(n,60),!0},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return uG(n,60),!0},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$6$Type",1766),sDn(1767,1,QZn,wr),uZn.Cd=function(n){uG(n,380).de()},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$7$Type",1767),sDn(1768,1,y1n,dr),uZn.Mb=function(n){return F$(uG(n,60).g,154)},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$8$Type",1768),sDn(1770,1,QZn,BC),uZn.Cd=function(n){mrn(this.a,this.b,uG(n,60))},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$9$Type",1770),sDn(1586,1,Q4n,Ux),uZn.Kf=function(n,t){yzn(this,uG(n,36),t)},zW(E6n,"HorizontalGraphCompactor",1586),sDn(1587,1,{},Eg),uZn.ff=function(n,t){var e,i;return $en(n,t)?0:(e=z4(n),i=z4(t),e&&e.k==(zIn(),lbt)||i&&i.k==(zIn(),lbt)?0:_x(uG(oIn(this.a.a,(GYn(),kmt)),312),e?e.k:(zIn(),wbt),i?i.k:(zIn(),wbt)))},uZn.gf=function(n,t){var e,i;return $en(n,t)?1:(e=z4(n),i=z4(t),Bx(uG(oIn(this.a.a,(GYn(),kmt)),312),e?e.k:(zIn(),wbt),i?i.k:(zIn(),wbt)))},zW(E6n,"HorizontalGraphCompactor/1",1587),sDn(1588,1,{},gr),uZn.ef=function(n,t){return JS(),0==n.a.i},zW(E6n,"HorizontalGraphCompactor/lambda$0$Type",1588),sDn(1589,1,{},Sg),uZn.ef=function(n,t){return ZY(this.a,n,t)},zW(E6n,"HorizontalGraphCompactor/lambda$1$Type",1589),sDn(1730,1,{},Sen),zW(E6n,"LGraphToCGraphTransformer",1730),sDn(1738,1,y1n,pr),uZn.Mb=function(n){return null!=n},zW(E6n,"LGraphToCGraphTransformer/0methodref$nonNull$Type",1738),sDn(1731,1,{},mr),uZn.Kb=function(n){return GB(),cpn(oIn(uG(uG(n,60).g,10),(GYn(),rmt)))},zW(E6n,"LGraphToCGraphTransformer/lambda$0$Type",1731),sDn(1732,1,{},vr),uZn.Kb=function(n){return GB(),_wn(uG(uG(n,60).g,154))},zW(E6n,"LGraphToCGraphTransformer/lambda$1$Type",1732),sDn(1741,1,y1n,kr),uZn.Mb=function(n){return GB(),F$(uG(n,60).g,10)},zW(E6n,"LGraphToCGraphTransformer/lambda$10$Type",1741),sDn(1742,1,QZn,yr),uZn.Cd=function(n){jZ(uG(n,60))},zW(E6n,"LGraphToCGraphTransformer/lambda$11$Type",1742),sDn(1743,1,y1n,Mr),uZn.Mb=function(n){return GB(),F$(uG(n,60).g,154)},zW(E6n,"LGraphToCGraphTransformer/lambda$12$Type",1743),sDn(1747,1,QZn,Tr),uZn.Cd=function(n){Fwn(uG(n,60))},zW(E6n,"LGraphToCGraphTransformer/lambda$13$Type",1747),sDn(1744,1,QZn,Pg),uZn.Cd=function(n){WL(this.a,uG(n,8))},uZn.a=0,zW(E6n,"LGraphToCGraphTransformer/lambda$14$Type",1744),sDn(1745,1,QZn,Cg),uZn.Cd=function(n){JL(this.a,uG(n,116))},uZn.a=0,zW(E6n,"LGraphToCGraphTransformer/lambda$15$Type",1745),sDn(1746,1,QZn,Ig),uZn.Cd=function(n){QL(this.a,uG(n,8))},uZn.a=0,zW(E6n,"LGraphToCGraphTransformer/lambda$16$Type",1746),sDn(1748,1,{},jr),uZn.Kb=function(n){return GB(),new fX(null,new LW(new Fz(ix(Xgn(uG(n,10)).a.Kc(),new h))))},zW(E6n,"LGraphToCGraphTransformer/lambda$17$Type",1748),sDn(1749,1,y1n,Er),uZn.Mb=function(n){return GB(),v9(uG(n,18))},zW(E6n,"LGraphToCGraphTransformer/lambda$18$Type",1749),sDn(1750,1,QZn,Og),uZn.Cd=function(n){fin(this.a,uG(n,18))},zW(E6n,"LGraphToCGraphTransformer/lambda$19$Type",1750),sDn(1734,1,QZn,Ag),uZn.Cd=function(n){Q3(this.a,uG(n,154))},zW(E6n,"LGraphToCGraphTransformer/lambda$2$Type",1734),sDn(1751,1,{},Sr),uZn.Kb=function(n){return GB(),new fX(null,new h3(uG(n,30).a,16))},zW(E6n,"LGraphToCGraphTransformer/lambda$20$Type",1751),sDn(1752,1,{},Pr),uZn.Kb=function(n){return GB(),new fX(null,new LW(new Fz(ix(Xgn(uG(n,10)).a.Kc(),new h))))},zW(E6n,"LGraphToCGraphTransformer/lambda$21$Type",1752),sDn(1753,1,{},Cr),uZn.Kb=function(n){return GB(),uG(oIn(uG(n,18),(GYn(),Tmt)),15)},zW(E6n,"LGraphToCGraphTransformer/lambda$22$Type",1753),sDn(1754,1,y1n,Ir),uZn.Mb=function(n){return Hx(uG(n,15))},zW(E6n,"LGraphToCGraphTransformer/lambda$23$Type",1754),sDn(1755,1,QZn,Lg),uZn.Cd=function(n){pLn(this.a,uG(n,15))},zW(E6n,"LGraphToCGraphTransformer/lambda$24$Type",1755),sDn(1733,1,QZn,HC),uZn.Cd=function(n){P5(this.a,this.b,uG(n,154))},zW(E6n,"LGraphToCGraphTransformer/lambda$3$Type",1733),sDn(1735,1,{},Or),uZn.Kb=function(n){return GB(),new fX(null,new h3(uG(n,30).a,16))},zW(E6n,"LGraphToCGraphTransformer/lambda$4$Type",1735),sDn(1736,1,{},Ar),uZn.Kb=function(n){return GB(),new fX(null,new LW(new Fz(ix(Xgn(uG(n,10)).a.Kc(),new h))))},zW(E6n,"LGraphToCGraphTransformer/lambda$5$Type",1736),sDn(1737,1,{},Lr),uZn.Kb=function(n){return GB(),uG(oIn(uG(n,18),(GYn(),Tmt)),15)},zW(E6n,"LGraphToCGraphTransformer/lambda$6$Type",1737),sDn(1739,1,QZn,Ng),uZn.Cd=function(n){xLn(this.a,uG(n,15))},zW(E6n,"LGraphToCGraphTransformer/lambda$8$Type",1739),sDn(1740,1,QZn,UC),uZn.Cd=function(n){k$(this.a,this.b,uG(n,154))},zW(E6n,"LGraphToCGraphTransformer/lambda$9$Type",1740),sDn(1729,1,{},Nr),uZn.cf=function(n){var t,e,i,r,c;for(this.a=n,this.d=new ak,this.c=Inn(Tst,EZn,125,this.a.a.a.c.length,0,1),this.b=0,e=new Ww(this.a.a.a);e.a=g&&(kD(a,xwn(f)),v=e.Math.max(v,k[f-1]-l),u+=d,p+=k[f-1]-p,l=k[f-1],d=s[f]),d=e.Math.max(d,s[f]),++f;u+=d}(w=e.Math.min(1/v,1/t.b/u))>r&&(r=w,i=a)}return i},uZn.pg=function(){return!1},zW(N6n,"MSDCutIndexHeuristic",816),sDn(1683,1,Q4n,Mc),uZn.Kf=function(n,t){Cqn(uG(n,36),t)},zW(N6n,"SingleEdgeGraphWrapper",1683),sDn(232,22,{3:1,34:1,22:1,232:1},QC);var zdt,Vdt,Wdt,Qdt=_cn($6n,"CenterEdgeLabelPlacementStrategy",232,Oat,znn,JB);sDn(431,22,{3:1,34:1,22:1,431:1},WC);var Jdt,Ydt,Zdt,ngt,tgt=_cn($6n,"ConstraintCalculationStrategy",431,Oat,w1,YB);sDn(322,22,{3:1,34:1,22:1,322:1,188:1,196:1},JC),uZn.dg=function(){return ZLn(this)},uZn.qg=function(){return ZLn(this)};var egt,igt,rgt,cgt,agt=_cn($6n,"CrossingMinimizationStrategy",322,Oat,B2,ZB);sDn(351,22,{3:1,34:1,22:1,351:1},YC);var ogt,ugt,sgt,hgt,fgt,lgt,bgt=_cn($6n,"CuttingStrategy",351,Oat,H2,nH);sDn(348,22,{3:1,34:1,22:1,348:1,188:1,196:1},ZC),uZn.dg=function(){return ODn(this)},uZn.qg=function(){return ODn(this)};var wgt,dgt,ggt,pgt=_cn($6n,"CycleBreakingStrategy",348,Oat,h9,tH);sDn(428,22,{3:1,34:1,22:1,428:1},nI);var mgt,vgt,kgt,ygt,Mgt=_cn($6n,"DirectionCongruency",428,Oat,b1,eH);sDn(460,22,{3:1,34:1,22:1,460:1},tI);var Tgt,jgt,Egt,Sgt,Pgt,Cgt,Igt,Ogt=_cn($6n,"EdgeConstraint",460,Oat,U2,sH);sDn(283,22,{3:1,34:1,22:1,283:1},eI);var Agt,Lgt,Ngt,$gt=_cn($6n,"EdgeLabelSideSelection",283,Oat,Gnn,hH);sDn(488,22,{3:1,34:1,22:1,488:1},iI);var Dgt,xgt,Rgt,Kgt,Fgt,_gt,Bgt,Hgt=_cn($6n,"EdgeStraighteningStrategy",488,Oat,y1,fH);sDn(281,22,{3:1,34:1,22:1,281:1},rI);var Ugt,Ggt,qgt,Xgt,zgt,Vgt,Wgt,Qgt=_cn($6n,"FixedAlignment",281,Oat,qnn,uH);sDn(282,22,{3:1,34:1,22:1,282:1},cI);var Jgt,Ygt,Zgt,npt,tpt,ept,ipt,rpt,cpt,apt,opt,upt=_cn($6n,"GraphCompactionStrategy",282,Oat,Xnn,iH);sDn(259,22,{3:1,34:1,22:1,259:1},aI);var spt,hpt,fpt,lpt,bpt=_cn($6n,"GraphProperties",259,Oat,oun,rH);sDn(299,22,{3:1,34:1,22:1,299:1},oI);var wpt,dpt,gpt,ppt,mpt=_cn($6n,"GreedySwitchType",299,Oat,G2,cH);sDn(311,22,{3:1,34:1,22:1,311:1},uI);var vpt,kpt,ypt,Mpt=_cn($6n,"InLayerConstraint",311,Oat,q2,aH);sDn(429,22,{3:1,34:1,22:1,429:1},sI);var Tpt,jpt,Ept,Spt,Ppt,Cpt,Ipt,Opt,Apt,Lpt,Npt,$pt,Dpt,xpt,Rpt,Kpt,Fpt,_pt,Bpt,Hpt,Upt,Gpt,qpt,Xpt,zpt,Vpt,Wpt,Qpt,Jpt,Ypt,Zpt,nmt,tmt,emt,imt,rmt,cmt,amt,omt,umt,smt,hmt,fmt,lmt,bmt,wmt,dmt,gmt,pmt,mmt,vmt,kmt,ymt,Mmt,Tmt,jmt,Emt,Smt,Pmt,Cmt,Imt,Omt,Amt,Lmt,Nmt=_cn($6n,"InteractiveReferencePoint",429,Oat,l1,oH);sDn(171,22,{3:1,34:1,22:1,171:1},hI);var $mt,Dmt,xmt,Rmt,Kmt,Fmt,_mt,Bmt,Hmt,Umt,Gmt,qmt,Xmt,zmt,Vmt,Wmt,Qmt,Jmt,Ymt,Zmt,nvt,tvt,evt,ivt,rvt,cvt,avt,ovt,uvt,svt,hvt,fvt,lvt,bvt,wvt,dvt,gvt,pvt,mvt,vvt,kvt,yvt,Mvt,Tvt,jvt,Evt,Svt,Pvt,Cvt,Ivt,Ovt,Avt,Lvt,Nvt,$vt,Dvt,xvt,Rvt,Kvt,Fvt,_vt,Bvt,Hvt,Uvt,Gvt,qvt,Xvt,zvt,Vvt,Wvt,Qvt,Jvt,Yvt,Zvt,nkt,tkt,ekt,ikt,rkt,ckt,akt,okt,ukt,skt,hkt,fkt,lkt,bkt,wkt,dkt,gkt,pkt,mkt,vkt,kkt,ykt,Mkt,Tkt,jkt,Ekt,Skt,Pkt,Ckt,Ikt,Okt,Akt,Lkt,Nkt,$kt,Dkt,xkt,Rkt,Kkt,Fkt,_kt,Bkt,Hkt,Ukt,Gkt,qkt,Xkt,zkt,Vkt,Wkt,Qkt,Jkt,Ykt,Zkt,nyt,tyt,eyt,iyt,ryt,cyt,ayt,oyt,uyt,syt,hyt,fyt,lyt,byt,wyt,dyt,gyt,pyt,myt,vyt,kyt,yyt,Myt,Tyt,jyt,Eyt,Syt,Pyt,Cyt,Iyt,Oyt,Ayt,Lyt,Nyt,$yt,Dyt,xyt,Ryt,Kyt,Fyt,_yt,Byt,Hyt,Uyt,Gyt,qyt,Xyt,zyt,Vyt,Wyt,Qyt,Jyt,Yyt,Zyt,nMt,tMt,eMt,iMt,rMt,cMt,aMt,oMt,uMt,sMt,hMt,fMt,lMt,bMt,wMt,dMt,gMt,pMt,mMt,vMt,kMt,yMt,MMt,TMt,jMt,EMt,SMt,PMt,CMt,IMt,OMt,AMt,LMt,NMt,$Mt,DMt,xMt,RMt,KMt,FMt,_Mt,BMt,HMt,UMt,GMt,qMt,XMt,zMt,VMt,WMt,QMt,JMt,YMt,ZMt,nTt,tTt,eTt,iTt,rTt,cTt,aTt,oTt,uTt,sTt,hTt,fTt,lTt,bTt,wTt,dTt,gTt,pTt,mTt,vTt,kTt,yTt,MTt,TTt,jTt,ETt,STt,PTt,CTt,ITt,OTt,ATt,LTt,NTt,$Tt,DTt,xTt,RTt,KTt,FTt,_Tt,BTt,HTt,UTt,GTt,qTt,XTt,zTt,VTt,WTt,QTt,JTt,YTt,ZTt,njt,tjt,ejt,ijt,rjt,cjt,ajt=_cn($6n,"LayerConstraint",171,Oat,l9,lH);sDn(859,1,K2n,fl),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,B6n),""),"Direction Congruency"),"Specifies how drawings of the same graph with different layout directions compare to each other: either a natural reading direction is preserved or the drawings are rotated versions of each other."),vvt),(lAn(),gNt)),Mgt),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,H6n),""),"Feedback Edges"),"Whether feedback edges should be highlighted by routing around the nodes."),(qx(),!1)),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,U6n),""),"Interactive Reference Point"),"Determines which point of a node is considered by interactive layout phases."),Hvt),gNt),Nmt),ggn(hNt)))),H4(n,U6n,J6n,Gvt),H4(n,U6n,o5n,Uvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,G6n),""),"Merge Edges"),"Edges that have no ports are merged so they touch the connected nodes at the same points. When this option is disabled, one port is created for each edge directly connected to a node. When it is enabled, all such incoming edges share an input port, and all outgoing edges share an output port."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,q6n),""),"Merge Hierarchy-Crossing Edges"),"If hierarchical layout is active, hierarchy-crossing edges use as few hierarchical ports as possible. They are broken by the algorithm, with hierarchical ports inserted as required. Usually, one such port is created for each edge at each hierarchy crossing point. With this option set to true, we try to create as few hierarchical ports as possible in the process. In particular, all edges that form a hyperedge can share a port."),!0),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(VT(JT(QT(YT(qT(GT(WT(XT(zT(new xu,X6n),""),"Allow Non-Flow Ports To Switch Sides"),"Specifies whether non-flow ports may switch sides if their node's port constraints are either FIXED_SIDE or FIXED_ORDER. A non-flow port is a port on a side that is not part of the currently configured layout flow. For instance, given a left-to-right layout direction, north and south ports would be considered non-flow ports. Further note that the underlying criterium whether to switch sides or not solely relies on the minimization of edge crossings. Hence, edge length and other aesthetics criteria are not addressed."),!1),wNt),cot),ggn(fNt)),Uhn(cT($ot,1),zZn,2,6,["org.eclipse.elk.layered.northOrSouthPort"])))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,z6n),""),"Port Sorting Strategy"),"Only relevant for nodes with FIXED_SIDE port constraints. Determines the way a node's ports are distributed on the sides of a node if their order is not prescribed. The option is set on parent nodes."),Pkt),gNt),Jjt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,V6n),""),"Thoroughness"),"How much effort should be spent to produce a nice layout."),xwn(7)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,W6n),""),"Add Unnecessary Bendpoints"),"Adds bend points even if an edge does not change direction. If true, each long edge dummy will contribute a bend point to its edges and hierarchy-crossing edges will always get a bend point where they cross hierarchy boundaries. By default, bend points are only added where an edge changes direction."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Q6n),""),"Generate Position and Layer IDs"),"If enabled position id and layer id are generated, which are usually only used internally when setting the interactiveLayout option. This option should be specified on the root node."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,J6n),"cycleBreaking"),"Cycle Breaking Strategy"),"Strategy for cycle breaking. Cycle breaking looks for cycles in the graph and determines which edges to reverse to break the cycles. Reversed edges will end up pointing to the opposite direction of regular edges (that is, reversed edges will point left if edges usually point right)."),pvt),gNt),pgt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Y6n),s8n),"Node Layering Strategy"),"Strategy for node layering."),ckt),gNt),fjt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Z6n),s8n),"Layer Constraint"),"Determines a constraint on the placement of the node regarding the layering."),Wvt),gNt),ajt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,n5n),s8n),"Layer Choice Constraint"),"Allows to set a constraint regarding the layer placement of a node. Let i be the value of teh constraint. Assumed the drawing has n layers and i < n. If set to i, it expresses that the node should be placed in i-th layer. Should i>=n be true then the node is placed in the last layer of the drawing. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),null),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,t5n),s8n),"Layer ID"),"Layer identifier that was calculated by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),xwn(-1)),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,e5n),h8n),"Upper Bound On Width [MinWidth Layerer]"),"Defines a loose upper bound on the width of the MinWidth layerer. If set to '-1' multiple values are tested and the best result is selected."),xwn(4)),mNt),dot),ggn(hNt)))),H4(n,e5n,Y6n,Yvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,i5n),h8n),"Upper Layer Estimation Scaling Factor [MinWidth Layerer]"),"Multiplied with Upper Bound On Width for defining an upper bound on the width of layers which haven't been determined yet, but whose maximum width had been (roughly) estimated by the MinWidth algorithm. Compensates for too high estimations. If set to '-1' multiple values are tested and the best result is selected."),xwn(2)),mNt),dot),ggn(hNt)))),H4(n,i5n,Y6n,nkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,r5n),f8n),"Node Promotion Strategy"),"Reduces number of dummy nodes after layering phase (if possible)."),ikt),gNt),Hjt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,c5n),f8n),"Max Node Promotion Iterations"),"Limits the number of iterations for node promotion."),xwn(0)),mNt),dot),ggn(hNt)))),H4(n,c5n,r5n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,a5n),"layering.coffmanGraham"),"Layer Bound"),"The maximum number of nodes allowed per layer."),xwn(vZn)),mNt),dot),ggn(hNt)))),H4(n,a5n,Y6n,Xvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,o5n),l8n),"Crossing Minimization Strategy"),"Strategy for crossing minimization."),dvt),gNt),agt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,u5n),l8n),"Force Node Model Order"),"The node order given by the model does not change to produce a better layout. E.g. if node A is before node B in the model this is not changed during crossing minimization. This assumes that the node model order is already respected before crossing minimization. This can be achieved by setting considerModelOrder.strategy to NODES_AND_EDGES."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,s5n),l8n),"Hierarchical Sweepiness"),"How likely it is to use cross-hierarchy (1) vs bottom-up (-1)."),.1),dNt),fot),ggn(hNt)))),H4(n,s5n,b8n,ovt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,h5n),l8n),"Semi-Interactive Crossing Minimization"),"Preserves the order of nodes within a layer but still minimizes crossings between edges connecting long edge dummies. Derives the desired order from positions specified by the 'org.eclipse.elk.position' layout option. Requires a crossing minimization strategy that is able to process 'in-layer' constraints."),!1),wNt),cot),ggn(hNt)))),H4(n,h5n,o5n,bvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,f5n),l8n),"In Layer Predecessor of"),"Allows to set a constraint which specifies of which node the current node is the predecessor. If set to 's' then the node is the predecessor of 's' and is in the same layer"),null),kNt),$ot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,l5n),l8n),"In Layer Successor of"),"Allows to set a constraint which specifies of which node the current node is the successor. If set to 's' then the node is the successor of 's' and is in the same layer"),null),kNt),$ot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,b5n),l8n),"Position Choice Constraint"),"Allows to set a constraint regarding the position placement of a node in a layer. Assumed the layer in which the node placed includes n other nodes and i < n. If set to i, it expresses that the node should be placed at the i-th position. Should i>=n be true then the node is placed at the last position in the layer. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),null),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,w5n),l8n),"Position ID"),"Position within a layer that was determined by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),xwn(-1)),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,d5n),w8n),"Greedy Switch Activation Threshold"),"By default it is decided automatically if the greedy switch is activated or not. The decision is based on whether the size of the input graph (without dummy nodes) is smaller than the value of this option. A '0' enforces the activation."),xwn(40)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,g5n),w8n),"Greedy Switch Crossing Minimization"),"Greedy Switch strategy for crossing minimization. The greedy switch heuristic is executed after the regular crossing minimization as a post-processor. Note that if 'hierarchyHandling' is set to 'INCLUDE_CHILDREN', the 'greedySwitchHierarchical.type' option must be used."),rvt),gNt),mpt),ggn(hNt)))),H4(n,g5n,o5n,cvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,p5n),"crossingMinimization.greedySwitchHierarchical"),"Greedy Switch Crossing Minimization (hierarchical)"),"Activates the greedy switch heuristic in case hierarchical layout is used. The differences to the non-hierarchical case (see 'greedySwitch.type') are: 1) greedy switch is inactive by default, 3) only the option value set on the node at which hierarchical layout starts is relevant, and 2) if it's activated by the user, it properly addresses hierarchy-crossing edges."),nvt),gNt),mpt),ggn(hNt)))),H4(n,p5n,o5n,tvt),H4(n,p5n,b8n,evt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,m5n),d8n),"Node Placement Strategy"),"Strategy for node placement."),Ekt),gNt),xjt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,v5n),d8n),"Favor Straight Edges Over Balancing"),"Favor straight edges over a balanced node placement. The default behavior is determined automatically based on the used 'edgeRouting'. For an orthogonal style it is set to true, for all other styles to false."),wNt),cot),ggn(hNt)))),H4(n,v5n,m5n,dkt),H4(n,v5n,m5n,gkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,k5n),g8n),"BK Edge Straightening"),"Specifies whether the Brandes Koepf node placer tries to increase the number of straight edges at the expense of diagram size. There is a subtle difference to the 'favorStraightEdges' option, which decides whether a balanced placement of the nodes is desired, or not. In bk terms this means combining the four alignments into a single balanced one, or not. This option on the other hand tries to straighten additional edges during the creation of each of the four alignments."),skt),gNt),Hgt),ggn(hNt)))),H4(n,k5n,m5n,hkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,y5n),g8n),"BK Fixed Alignment"),"Tells the BK node placer to use a certain alignment (out of its four) instead of the one producing the smallest height, or the combination of all four."),lkt),gNt),Qgt),ggn(hNt)))),H4(n,y5n,m5n,bkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,M5n),"nodePlacement.linearSegments"),"Linear Segments Deflection Dampening"),"Dampens the movement of nodes to keep the diagram from getting too large."),.3),dNt),fot),ggn(hNt)))),H4(n,M5n,m5n,mkt),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,T5n),"nodePlacement.networkSimplex"),"Node Flexibility"),"Aims at shorter and straighter edges. Two configurations are possible: (a) allow ports to move freely on the side they are assigned to (the order is always defined beforehand), (b) additionally allow to enlarge a node wherever it helps. If this option is not configured for a node, the 'nodeFlexibility.default' value is used, which is specified for the node's parent."),gNt),jjt),ggn(sNt)))),H4(n,T5n,m5n,Tkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,j5n),"nodePlacement.networkSimplex.nodeFlexibility"),"Node Flexibility Default"),"Default value of the 'nodeFlexibility' option for the children of a hierarchical node."),ykt),gNt),jjt),ggn(hNt)))),H4(n,j5n,m5n,Mkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,E5n),p8n),"Self-Loop Distribution"),"Alter the distribution of the loops around the node. It only takes effect for PortConstraints.FREE."),Pvt),gNt),oEt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,S5n),p8n),"Self-Loop Ordering"),"Alter the ordering of the loops they can either be stacked or sequenced. It only takes effect for PortConstraints.FREE."),Ivt),gNt),lEt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,P5n),"edgeRouting.splines"),"Spline Routing Mode"),"Specifies the way control points are assembled for each individual edge. CONSERVATIVE ensures that edges are properly routed around the nodes but feels rather orthogonal at times. SLOPPY uses fewer control points to obtain curvier edge routes but may result in edges overlapping nodes."),Avt),gNt),pEt),ggn(hNt)))),H4(n,P5n,m8n,Lvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,C5n),"edgeRouting.splines.sloppy"),"Sloppy Spline Layer Spacing Factor"),"Spacing factor for routing area between layers when using sloppy spline routing."),.2),dNt),fot),ggn(hNt)))),H4(n,C5n,m8n,$vt),H4(n,C5n,P5n,Dvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,I5n),"edgeRouting.polyline"),"Sloped Edge Zone Width"),"Width of the strip to the left and to the right of each layer where the polyline edge router is allowed to refrain from ensuring that edges are routed horizontally. This prevents awkward bend points for nodes that extent almost to the edge of their layer."),2),dNt),fot),ggn(hNt)))),H4(n,I5n,m8n,Evt),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,O5n),v8n),"Spacing Base Value"),"An optional base value for all other layout options of the 'spacing' group. It can be used to conveniently alter the overall 'spaciousness' of the drawing. Whenever an explicit value is set for the other layout options, this base value will have no effect. The base value is not inherited, i.e. it must be set for each hierarchical node."),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,A5n),v8n),"Edge Node Between Layers Spacing"),"The spacing to be preserved between nodes and edges that are routed next to the node's layer. For the spacing between nodes and edges that cross the node's layer 'spacing.edgeNode' is used."),10),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,L5n),v8n),"Edge Edge Between Layer Spacing"),"Spacing to be preserved between pairs of edges that are routed between the same pair of layers. Note that 'spacing.edgeEdge' is used for the spacing between pairs of edges crossing the same layer."),10),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,N5n),v8n),"Node Node Between Layers Spacing"),"The spacing to be preserved between any pair of nodes of two adjacent layers. Note that 'spacing.nodeNode' is used for the spacing between nodes within the layer itself."),20),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,$5n),k8n),"Direction Priority"),"Defines how important it is to have a certain edge point into the direction of the overall layout. This option is evaluated during the cycle breaking phase."),xwn(0)),mNt),dot),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,D5n),k8n),"Shortness Priority"),"Defines how important it is to keep an edge as short as possible. This option is evaluated during the layering phase."),xwn(0)),mNt),dot),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,x5n),k8n),"Straightness Priority"),"Defines how important it is to keep an edge straight, i.e. aligned with one of the two axes. This option is evaluated during node placement."),xwn(0)),mNt),dot),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,R5n),y8n),j3n),"Tries to further compact components (disconnected sub-graphs)."),!1),wNt),cot),ggn(hNt)))),H4(n,R5n,h4n,!0),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,K5n),M8n),"Post Compaction Strategy"),T8n),_mt),gNt),upt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,F5n),M8n),"Post Compaction Constraint Calculation"),T8n),Kmt),gNt),tgt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,_5n),j8n),"High Degree Node Treatment"),"Makes room around high degree nodes to place leafs and trees."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,B5n),j8n),"High Degree Node Threshold"),"Whether a node is considered to have a high degree."),xwn(16)),mNt),dot),ggn(hNt)))),H4(n,B5n,_5n,!0),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,H5n),j8n),"High Degree Node Maximum Tree Height"),"Maximum height of a subtree connected to a high degree node to be moved to separate layers."),xwn(5)),mNt),dot),ggn(hNt)))),H4(n,H5n,_5n,!0),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,U5n),E8n),"Graph Wrapping Strategy"),"For certain graphs and certain prescribed drawing areas it may be desirable to split the laid out graph into chunks that are placed side by side. The edges that connect different chunks are 'wrapped' around from the end of one chunk to the start of the other chunk. The points between the chunks are referred to as 'cuts'."),cyt),gNt),xEt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,G5n),E8n),"Additional Wrapped Edges Spacing"),"To visually separate edges that are wrapped from regularly routed edges an additional spacing value can be specified in form of this layout option. The spacing is added to the regular edgeNode spacing."),10),dNt),fot),ggn(hNt)))),H4(n,G5n,U5n,Kkt),H4(n,G5n,U5n,Fkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,q5n),E8n),"Correction Factor for Wrapping"),"At times and for certain types of graphs the executed wrapping may produce results that are consistently biased in the same fashion: either wrapping to often or to rarely. This factor can be used to correct the bias. Internally, it is simply multiplied with the 'aspect ratio' layout option."),1),dNt),fot),ggn(hNt)))),H4(n,q5n,U5n,Bkt),H4(n,q5n,U5n,Hkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,X5n),S8n),"Cutting Strategy"),"The strategy by which the layer indexes are determined at which the layering crumbles into chunks."),Wkt),gNt),bgt),ggn(hNt)))),H4(n,X5n,U5n,Qkt),H4(n,X5n,U5n,Jkt),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,z5n),S8n),"Manually Specified Cuts"),"Allows the user to specify her own cuts for a certain graph."),vNt),yat),ggn(hNt)))),H4(n,z5n,X5n,Gkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,V5n),"wrapping.cutting.msd"),"MSD Freedom"),"The MSD cutting strategy starts with an initial guess on the number of chunks the graph should be split into. The freedom specifies how much the strategy may deviate from this guess. E.g. if an initial number of 3 is computed, a freedom of 1 allows 2, 3, and 4 cuts."),Xkt),mNt),dot),ggn(hNt)))),H4(n,V5n,X5n,zkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,W5n),P8n),"Validification Strategy"),"When wrapping graphs, one can specify indices that are not allowed as split points. The validification strategy makes sure every computed split point is allowed."),hyt),gNt),MEt),ggn(hNt)))),H4(n,W5n,U5n,fyt),H4(n,W5n,U5n,lyt),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,Q5n),P8n),"Valid Indices for Wrapping"),null),vNt),yat),ggn(hNt)))),H4(n,Q5n,U5n,oyt),H4(n,Q5n,U5n,uyt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,J5n),C8n),"Improve Cuts"),"For general graphs it is important that not too many edges wrap backwards. Thus a compromise between evenly-distributed cuts and the total number of cut edges is sought."),!0),wNt),cot),ggn(hNt)))),H4(n,J5n,U5n,tyt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Y5n),C8n),"Distance Penalty When Improving Cuts"),null),2),dNt),fot),ggn(hNt)))),H4(n,Y5n,U5n,Zkt),H4(n,Y5n,J5n,!0),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Z5n),C8n),"Improve Wrapped Edges"),"The initial wrapping is performed in a very simple way. As a consequence, edges that wrap from one chunk to another may be unnecessarily long. Activating this option tries to shorten such edges."),!0),wNt),cot),ggn(hNt)))),H4(n,Z5n,U5n,iyt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,n8n),I8n),"Edge Label Side Selection"),"Method to decide on edge label sides."),Tvt),gNt),$gt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,t8n),I8n),"Edge Center Label Placement Strategy"),"Determines in which layer center labels of long edges should be placed."),yvt),gNt),Qdt),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[uNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,e8n),O8n),"Consider Model Order"),"Preserves the order of nodes and edges in the model file if this does not lead to additional edge crossings. Depending on the strategy this is not always possible since the node and edge order might be conflicting."),Qmt),gNt),Xjt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,i8n),O8n),"Consider Port Order"),"If disabled the port order of output ports is derived from the edge order and input ports are ordered by their incoming connections. If enabled all ports are ordered by the port model order."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,r8n),O8n),"No Model Order"),"Set on a node to not set a model order for this node even though it is a real node."),!1),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,c8n),O8n),"Consider Model Order for Components"),"If set to NONE the usual ordering strategy (by cumulative node priority and size of nodes) is used. INSIDE_PORT_SIDES orders the components with external ports only inside the groups with the same port side. FORCE_MODEL_ORDER enforces the mode order on components. This option might produce bad alignments and sub optimal drawings in terms of used area since the ordering should be respected."),Hmt),gNt),abt),ggn(hNt)))),H4(n,c8n,h4n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,a8n),O8n),"Long Edge Ordering Strategy"),"Indicates whether long edges are sorted under, over, or equal to nodes that have no connection to a previous layer in a left-to-right or right-to-left layout. Under and over changes to right and left in a vertical layout."),Xmt),gNt),pjt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,o8n),O8n),"Crossing Counter Node Order Influence"),"Indicates with what percentage (1 for 100%) violations of the node model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal node order. Defaults to no influence (0)."),0),dNt),fot),ggn(hNt)))),H4(n,o8n,e8n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,u8n),O8n),"Crossing Counter Port Order Influence"),"Indicates with what percentage (1 for 100%) violations of the port model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal port order. Defaults to no influence (0)."),0),dNt),fot),ggn(hNt)))),H4(n,u8n,e8n,null),eZn((new ll,n))},zW($6n,"LayeredMetaDataProvider",859),sDn(998,1,K2n,ll),uZn.hf=function(n){eZn(n)},zW($6n,"LayeredOptions",998),sDn(999,1,{},Tc),uZn.sf=function(){return new mk},uZn.tf=function(n){},zW($6n,"LayeredOptions/LayeredFactory",999),sDn(1391,1,{}),uZn.a=0,zW(p9n,"ElkSpacings/AbstractSpacingsBuilder",1391),sDn(792,1391,{},omn),zW($6n,"LayeredSpacings/LayeredSpacingsBuilder",792),sDn(265,22,{3:1,34:1,22:1,265:1,188:1,196:1},fI),uZn.dg=function(){return J_n(this)},uZn.qg=function(){return J_n(this)};var ojt,ujt,sjt,hjt,fjt=_cn($6n,"LayeringStrategy",265,Oat,tan,bH);sDn(390,22,{3:1,34:1,22:1,390:1},lI);var ljt,bjt,wjt,djt,gjt,pjt=_cn($6n,"LongEdgeOrderingStrategy",390,Oat,X2,wH);sDn(203,22,{3:1,34:1,22:1,203:1},bI);var mjt,vjt,kjt,yjt,Mjt,Tjt,jjt=_cn($6n,"NodeFlexibility",203,Oat,q6,dH);sDn(323,22,{3:1,34:1,22:1,323:1,188:1,196:1},wI),uZn.dg=function(){return IDn(this)},uZn.qg=function(){return IDn(this)};var Ejt,Sjt,Pjt,Cjt,Ijt,Ojt,Ajt,Ljt,Njt,$jt,Djt,xjt=_cn($6n,"NodePlacementStrategy",323,Oat,f9,gH);sDn(243,22,{3:1,34:1,22:1,243:1},dI);var Rjt,Kjt,Fjt,_jt,Bjt,Hjt=_cn($6n,"NodePromotionStrategy",243,Oat,uun,pH);sDn(284,22,{3:1,34:1,22:1,284:1},gI);var Ujt,Gjt,qjt,Xjt=_cn($6n,"OrderingStrategy",284,Oat,X6,mH);sDn(430,22,{3:1,34:1,22:1,430:1},pI);var zjt,Vjt,Wjt,Qjt,Jjt=_cn($6n,"PortSortingStrategy",430,Oat,d1,vH);sDn(463,22,{3:1,34:1,22:1,463:1},mI);var Yjt,Zjt,nEt,tEt,eEt=_cn($6n,"PortType",463,Oat,z2,kH);sDn(387,22,{3:1,34:1,22:1,387:1},vI);var iEt,rEt,cEt,aEt,oEt=_cn($6n,"SelfLoopDistributionStrategy",387,Oat,V2,yH);sDn(349,22,{3:1,34:1,22:1,349:1},kI);var uEt,sEt,hEt,fEt,lEt=_cn($6n,"SelfLoopOrderingStrategy",349,Oat,W2,MH);sDn(312,1,{312:1},CVn),zW($6n,"Spacings",312),sDn(350,22,{3:1,34:1,22:1,350:1},yI);var bEt,wEt,dEt,gEt,pEt=_cn($6n,"SplineRoutingMode",350,Oat,Q2,TH);sDn(352,22,{3:1,34:1,22:1,352:1},MI);var mEt,vEt,kEt,yEt,MEt=_cn($6n,"ValidifyStrategy",352,Oat,J2,jH);sDn(388,22,{3:1,34:1,22:1,388:1},TI);var TEt,jEt,EEt,SEt,PEt,CEt,IEt,OEt,AEt,LEt,NEt,$Et,DEt,xEt=_cn($6n,"WrappingStrategy",388,Oat,Y2,EH);sDn(1398,1,y9n,il),uZn.rg=function(n){return uG(n,36),jEt},uZn.Kf=function(n,t){pzn(this,uG(n,36),t)},zW(M9n,"DepthFirstCycleBreaker",1398),sDn(793,1,y9n,ez),uZn.rg=function(n){return uG(n,36),EEt},uZn.Kf=function(n,t){gYn(this,uG(n,36),t)},uZn.sg=function(n){return uG(zq(n,iMn(this.d,n.c.length)),10)},zW(M9n,"GreedyCycleBreaker",793),sDn(1401,793,y9n,tL),uZn.sg=function(n){var t,e,i,r;for(r=null,t=vZn,i=new Ww(n);i.a1&&(oM(gK(oIn(HQ((u3(0,n.c.length),uG(n.c[0],10))),(jYn(),Cyt))))?Axn(n,this.d,uG(this,669)):(hZ(),f$(n,this.d)),xsn(this.e,n))},uZn.lg=function(n,t,e,i){var r,c,a,o,u,s,h;for(t!=vX(e,n.length)&&(c=n[t-(e?1:-1)],v7(this.f,c,e?(can(),Wjt):(can(),Vjt))),r=n[t][0],h=!i||r.k==(zIn(),lbt),s=n7(n[t]),this.vg(s,h,!1,e),a=0,u=new Ww(s);u.a"),n0?j0(this.a,n[t-1],n[t]):!e&&t1&&(oM(gK(oIn(HQ((u3(0,n.c.length),uG(n.c[0],10))),(jYn(),Cyt))))?Axn(n,this.d,this):(hZ(),f$(n,this.d)),oM(gK(oIn(HQ((u3(0,n.c.length),uG(n.c[0],10))),Cyt)))||xsn(this.e,n))},zW(S9n,"ModelOrderBarycenterHeuristic",669),sDn(1866,1,b2n,Zg),uZn.Ne=function(n,t){return TOn(this.a,uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(S9n,"ModelOrderBarycenterHeuristic/lambda$0$Type",1866),sDn(1423,1,y9n,wl),uZn.rg=function(n){var t;return uG(n,36),Aq(t=aN(XEt),(uIn(),Elt),(zYn(),Cwt)),t},uZn.Kf=function(n,t){jY((uG(n,36),t))},zW(S9n,"NoCrossingMinimizer",1423),sDn(809,413,j9n,rj),uZn.tg=function(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;switch(f=this.g,e.g){case 1:for(r=0,c=0,h=new Ww(n.j);h.a1&&(r.j==(KQn(),kRt)?this.b[n]=!0:r.j==_Rt&&n>0&&(this.b[n-1]=!0))},uZn.f=0,zW(P6n,"AllCrossingsCounter",1861),sDn(595,1,{},Don),uZn.b=0,uZn.d=0,zW(P6n,"BinaryIndexedTree",595),sDn(532,1,{},R_),zW(P6n,"CrossingsCounter",532),sDn(1950,1,b2n,np),uZn.Ne=function(n,t){return wX(this.a,uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(P6n,"CrossingsCounter/lambda$0$Type",1950),sDn(1951,1,b2n,tp),uZn.Ne=function(n,t){return dX(this.a,uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(P6n,"CrossingsCounter/lambda$1$Type",1951),sDn(1952,1,b2n,ep),uZn.Ne=function(n,t){return gX(this.a,uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(P6n,"CrossingsCounter/lambda$2$Type",1952),sDn(1953,1,b2n,ip),uZn.Ne=function(n,t){return pX(this.a,uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(P6n,"CrossingsCounter/lambda$3$Type",1953),sDn(1954,1,QZn,rp),uZn.Cd=function(n){cen(this.a,uG(n,12))},zW(P6n,"CrossingsCounter/lambda$4$Type",1954),sDn(1955,1,y1n,cp),uZn.Mb=function(n){return NI(this.a,uG(n,12))},zW(P6n,"CrossingsCounter/lambda$5$Type",1955),sDn(1956,1,QZn,ap),uZn.Cd=function(n){MA(this,n)},zW(P6n,"CrossingsCounter/lambda$6$Type",1956),sDn(1957,1,QZn,EI),uZn.Cd=function(n){var t;PU(),A6(this.b,(t=this.a,uG(n,12),t))},zW(P6n,"CrossingsCounter/lambda$7$Type",1957),sDn(839,1,A2n,Nc),uZn.Lb=function(n){return PU(),vR(uG(n,12),(GYn(),lmt))},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return PU(),vR(uG(n,12),(GYn(),lmt))},zW(P6n,"CrossingsCounter/lambda$8$Type",839),sDn(1949,1,{},op),zW(P6n,"HyperedgeCrossingsCounter",1949),sDn(478,1,{34:1,478:1},BF),uZn.Fd=function(n){return _vn(this,uG(n,478))},uZn.b=0,uZn.c=0,uZn.e=0,uZn.f=0;var QEt=zW(P6n,"HyperedgeCrossingsCounter/Hyperedge",478);sDn(374,1,{34:1,374:1},bY),uZn.Fd=function(n){return exn(this,uG(n,374))},uZn.b=0,uZn.c=0;var JEt,YEt,ZEt=zW(P6n,"HyperedgeCrossingsCounter/HyperedgeCorner",374);sDn(531,22,{3:1,34:1,22:1,531:1},SI);var nSt,tSt,eSt,iSt,rSt,cSt=_cn(P6n,"HyperedgeCrossingsCounter/HyperedgeCorner/Type",531,Oat,g1,PH);sDn(1425,1,y9n,dl),uZn.rg=function(n){return uG(oIn(uG(n,36),(GYn(),Hpt)),21).Hc((r_n(),tpt))?tSt:null},uZn.Kf=function(n,t){HEn(this,uG(n,36),t)},zW(P9n,"InteractiveNodePlacer",1425),sDn(1426,1,y9n,gl),uZn.rg=function(n){return uG(oIn(uG(n,36),(GYn(),Hpt)),21).Hc((r_n(),tpt))?eSt:null},uZn.Kf=function(n,t){XMn(this,uG(n,36),t)},zW(P9n,"LinearSegmentsNodePlacer",1426),sDn(261,1,{34:1,261:1},Tk),uZn.Fd=function(n){return CT(this,uG(n,261))},uZn.Fb=function(n){var t;return!!F$(n,261)&&(t=uG(n,261),this.b==t.b)},uZn.Hb=function(){return this.b},uZn.Ib=function(){return"ls"+vIn(this.e)},uZn.a=0,uZn.b=0,uZn.c=-1,uZn.d=-1,uZn.g=0;var aSt,oSt=zW(P9n,"LinearSegmentsNodePlacer/LinearSegment",261);sDn(1428,1,y9n,iz),uZn.rg=function(n){return uG(oIn(uG(n,36),(GYn(),Hpt)),21).Hc((r_n(),tpt))?aSt:null},uZn.Kf=function(n,t){WJn(this,uG(n,36),t)},uZn.b=0,uZn.g=0,zW(P9n,"NetworkSimplexPlacer",1428),sDn(1447,1,b2n,$c),uZn.Ne=function(n,t){return d$(uG(n,17).a,uG(t,17).a)},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(P9n,"NetworkSimplexPlacer/0methodref$compare$Type",1447),sDn(1449,1,b2n,Dc),uZn.Ne=function(n,t){return d$(uG(n,17).a,uG(t,17).a)},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(P9n,"NetworkSimplexPlacer/1methodref$compare$Type",1449),sDn(655,1,{655:1},PI);var uSt=zW(P9n,"NetworkSimplexPlacer/EdgeRep",655);sDn(412,1,{412:1},wY),uZn.b=!1;var sSt,hSt,fSt,lSt=zW(P9n,"NetworkSimplexPlacer/NodeRep",412);sDn(515,13,{3:1,4:1,20:1,31:1,56:1,13:1,16:1,15:1,59:1,515:1},Ck),zW(P9n,"NetworkSimplexPlacer/Path",515),sDn(1429,1,{},xc),uZn.Kb=function(n){return uG(n,18).d.i.k},zW(P9n,"NetworkSimplexPlacer/Path/lambda$0$Type",1429),sDn(1430,1,y1n,Rc),uZn.Mb=function(n){return uG(n,273)==(zIn(),wbt)},zW(P9n,"NetworkSimplexPlacer/Path/lambda$1$Type",1430),sDn(1431,1,{},Kc),uZn.Kb=function(n){return uG(n,18).d.i},zW(P9n,"NetworkSimplexPlacer/Path/lambda$2$Type",1431),sDn(1432,1,y1n,up),uZn.Mb=function(n){return zK(Imn(uG(n,10)))},zW(P9n,"NetworkSimplexPlacer/Path/lambda$3$Type",1432),sDn(1433,1,y1n,Fc),uZn.Mb=function(n){return mq(uG(n,12))},zW(P9n,"NetworkSimplexPlacer/lambda$0$Type",1433),sDn(1434,1,QZn,CI),uZn.Cd=function(n){M$(this.a,this.b,uG(n,12))},zW(P9n,"NetworkSimplexPlacer/lambda$1$Type",1434),sDn(1443,1,QZn,sp),uZn.Cd=function(n){FLn(this.a,uG(n,18))},zW(P9n,"NetworkSimplexPlacer/lambda$10$Type",1443),sDn(1444,1,{},_c),uZn.Kb=function(n){return n2(),new fX(null,new h3(uG(n,30).a,16))},zW(P9n,"NetworkSimplexPlacer/lambda$11$Type",1444),sDn(1445,1,QZn,hp),uZn.Cd=function(n){D_n(this.a,uG(n,10))},zW(P9n,"NetworkSimplexPlacer/lambda$12$Type",1445),sDn(1446,1,{},Bc),uZn.Kb=function(n){return n2(),xwn(uG(n,125).e)},zW(P9n,"NetworkSimplexPlacer/lambda$13$Type",1446),sDn(1448,1,{},Hc),uZn.Kb=function(n){return n2(),xwn(uG(n,125).e)},zW(P9n,"NetworkSimplexPlacer/lambda$15$Type",1448),sDn(1450,1,y1n,Uc),uZn.Mb=function(n){return n2(),uG(n,412).c.k==(zIn(),dbt)},zW(P9n,"NetworkSimplexPlacer/lambda$17$Type",1450),sDn(1451,1,y1n,Gc),uZn.Mb=function(n){return n2(),uG(n,412).c.j.c.length>1},zW(P9n,"NetworkSimplexPlacer/lambda$18$Type",1451),sDn(1452,1,QZn,dY),uZn.Cd=function(n){Dpn(this.c,this.b,this.d,this.a,uG(n,412))},uZn.c=0,uZn.d=0,zW(P9n,"NetworkSimplexPlacer/lambda$19$Type",1452),sDn(1435,1,{},qc),uZn.Kb=function(n){return n2(),new fX(null,new h3(uG(n,30).a,16))},zW(P9n,"NetworkSimplexPlacer/lambda$2$Type",1435),sDn(1453,1,QZn,fp),uZn.Cd=function(n){j$(this.a,uG(n,12))},uZn.a=0,zW(P9n,"NetworkSimplexPlacer/lambda$20$Type",1453),sDn(1454,1,{},Xc),uZn.Kb=function(n){return n2(),new fX(null,new h3(uG(n,30).a,16))},zW(P9n,"NetworkSimplexPlacer/lambda$21$Type",1454),sDn(1455,1,QZn,lp),uZn.Cd=function(n){uD(this.a,uG(n,10))},zW(P9n,"NetworkSimplexPlacer/lambda$22$Type",1455),sDn(1456,1,y1n,zc),uZn.Mb=function(n){return zK(n)},zW(P9n,"NetworkSimplexPlacer/lambda$23$Type",1456),sDn(1457,1,{},Vc),uZn.Kb=function(n){return n2(),new fX(null,new h3(uG(n,30).a,16))},zW(P9n,"NetworkSimplexPlacer/lambda$24$Type",1457),sDn(1458,1,y1n,bp),uZn.Mb=function(n){return RL(this.a,uG(n,10))},zW(P9n,"NetworkSimplexPlacer/lambda$25$Type",1458),sDn(1459,1,QZn,II),uZn.Cd=function(n){$On(this.a,this.b,uG(n,10))},zW(P9n,"NetworkSimplexPlacer/lambda$26$Type",1459),sDn(1460,1,y1n,Wc),uZn.Mb=function(n){return n2(),!v9(uG(n,18))},zW(P9n,"NetworkSimplexPlacer/lambda$27$Type",1460),sDn(1461,1,y1n,Qc),uZn.Mb=function(n){return n2(),!v9(uG(n,18))},zW(P9n,"NetworkSimplexPlacer/lambda$28$Type",1461),sDn(1462,1,{},wp),uZn.Ve=function(n,t){return T$(this.a,uG(n,30),uG(t,30))},zW(P9n,"NetworkSimplexPlacer/lambda$29$Type",1462),sDn(1436,1,{},Jc),uZn.Kb=function(n){return n2(),new fX(null,new LW(new Fz(ix(Xgn(uG(n,10)).a.Kc(),new h))))},zW(P9n,"NetworkSimplexPlacer/lambda$3$Type",1436),sDn(1437,1,y1n,Yc),uZn.Mb=function(n){return n2(),h6(uG(n,18))},zW(P9n,"NetworkSimplexPlacer/lambda$4$Type",1437),sDn(1438,1,QZn,dp),uZn.Cd=function(n){vqn(this.a,uG(n,18))},zW(P9n,"NetworkSimplexPlacer/lambda$5$Type",1438),sDn(1439,1,{},Zc),uZn.Kb=function(n){return n2(),new fX(null,new h3(uG(n,30).a,16))},zW(P9n,"NetworkSimplexPlacer/lambda$6$Type",1439),sDn(1440,1,y1n,na),uZn.Mb=function(n){return n2(),uG(n,10).k==(zIn(),dbt)},zW(P9n,"NetworkSimplexPlacer/lambda$7$Type",1440),sDn(1441,1,{},ta),uZn.Kb=function(n){return n2(),new fX(null,new LW(new Fz(ix(Ggn(uG(n,10)).a.Kc(),new h))))},zW(P9n,"NetworkSimplexPlacer/lambda$8$Type",1441),sDn(1442,1,y1n,ea),uZn.Mb=function(n){return n2(),pq(uG(n,18))},zW(P9n,"NetworkSimplexPlacer/lambda$9$Type",1442),sDn(1424,1,y9n,pl),uZn.rg=function(n){return uG(oIn(uG(n,36),(GYn(),Hpt)),21).Hc((r_n(),tpt))?sSt:null},uZn.Kf=function(n,t){RXn(uG(n,36),t)},zW(P9n,"SimpleNodePlacer",1424),sDn(185,1,{185:1},VHn),uZn.Ib=function(){var n;return n="",this.c==(b0(),fSt)?n+=V2n:this.c==hSt&&(n+=z2n),this.o==(w0(),wSt)?n+=c3n:this.o==dSt?n+="UP":n+="BALANCED",n},zW(O9n,"BKAlignedLayout",185),sDn(523,22,{3:1,34:1,22:1,523:1},OI);var bSt,wSt,dSt,gSt=_cn(O9n,"BKAlignedLayout/HDirection",523,Oat,m1,CH);sDn(522,22,{3:1,34:1,22:1,522:1},AI);var pSt,mSt,vSt,kSt,ySt,MSt,TSt,jSt,ESt,SSt,PSt,CSt,ISt,OSt,ASt,LSt,NSt,$St,DSt,xSt=_cn(O9n,"BKAlignedLayout/VDirection",522,Oat,v1,IH);sDn(1699,1,{},LI),zW(O9n,"BKAligner",1699),sDn(1702,1,{},xjn),zW(O9n,"BKCompactor",1702),sDn(663,1,{663:1},ia),uZn.a=0,zW(O9n,"BKCompactor/ClassEdge",663),sDn(467,1,{467:1},Ek),uZn.a=null,uZn.b=0,zW(O9n,"BKCompactor/ClassNode",467),sDn(1427,1,y9n,FI),uZn.rg=function(n){return uG(oIn(uG(n,36),(GYn(),Hpt)),21).Hc((r_n(),tpt))?mSt:null},uZn.Kf=function(n,t){$Yn(this,uG(n,36),t)},uZn.d=!1,zW(O9n,"BKNodePlacer",1427),sDn(1700,1,{},ra),uZn.d=0,zW(O9n,"NeighborhoodInformation",1700),sDn(1701,1,b2n,gp),uZn.Ne=function(n,t){return vrn(this,uG(n,42),uG(t,42))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(O9n,"NeighborhoodInformation/NeighborComparator",1701),sDn(823,1,{}),zW(O9n,"ThresholdStrategy",823),sDn(1825,823,{},Sk),uZn.wg=function(n,t,e){return this.a.o==(w0(),dSt)?M0n:T0n},uZn.xg=function(){},zW(O9n,"ThresholdStrategy/NullThresholdStrategy",1825),sDn(587,1,{587:1},_I),uZn.c=!1,uZn.d=!1,zW(O9n,"ThresholdStrategy/Postprocessable",587),sDn(1826,823,{},Pk),uZn.wg=function(n,t,e){var i,r,c;return r=t==e,i=this.a.a[e.p]==t,r||i?(c=n,this.a.c,b0(),r&&(c=FXn(this,t,!0)),!isNaN(c)&&!isFinite(c)&&i&&(c=FXn(this,e,!1)),c):n},uZn.xg=function(){for(var n,t,e;0!=this.d.b;)(t=wGn(this,e=uG(H1(this.d),587))).a&&(n=t.a,(oM(this.a.f[this.a.g[e.b.p].p])||v9(n)||n.c.i.c!=n.d.i.c)&&(ixn(this,e)||VL(this.e,e)));for(;0!=this.e.a.c.length;)ixn(this,uG(obn(this.e),587))},zW(O9n,"ThresholdStrategy/SimpleThresholdStrategy",1826),sDn(645,1,{645:1,188:1,196:1},ca),uZn.dg=function(){return Fsn(this)},uZn.qg=function(){return Fsn(this)},zW(A9n,"EdgeRouterFactory",645),sDn(1485,1,y9n,ml),uZn.rg=function(n){return RFn(uG(n,36))},uZn.Kf=function(n,t){WXn(uG(n,36),t)},zW(A9n,"OrthogonalEdgeRouter",1485),sDn(1478,1,y9n,KI),uZn.rg=function(n){return oSn(uG(n,36))},uZn.Kf=function(n,t){XQn(this,uG(n,36),t)},zW(A9n,"PolylineEdgeRouter",1478),sDn(1479,1,A2n,oa),uZn.Lb=function(n){return shn(uG(n,10))},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return shn(uG(n,10))},zW(A9n,"PolylineEdgeRouter/1",1479),sDn(1872,1,y1n,ua),uZn.Mb=function(n){return uG(n,132).c==(_7(),$St)},zW(L9n,"HyperEdgeCycleDetector/lambda$0$Type",1872),sDn(1873,1,{},sa),uZn.Ze=function(n){return uG(n,132).d},zW(L9n,"HyperEdgeCycleDetector/lambda$1$Type",1873),sDn(1874,1,y1n,ha),uZn.Mb=function(n){return uG(n,132).c==(_7(),$St)},zW(L9n,"HyperEdgeCycleDetector/lambda$2$Type",1874),sDn(1875,1,{},fa),uZn.Ze=function(n){return uG(n,132).d},zW(L9n,"HyperEdgeCycleDetector/lambda$3$Type",1875),sDn(1876,1,{},la),uZn.Ze=function(n){return uG(n,132).d},zW(L9n,"HyperEdgeCycleDetector/lambda$4$Type",1876),sDn(1877,1,{},aa),uZn.Ze=function(n){return uG(n,132).d},zW(L9n,"HyperEdgeCycleDetector/lambda$5$Type",1877),sDn(118,1,{34:1,118:1},nhn),uZn.Fd=function(n){return IT(this,uG(n,118))},uZn.Fb=function(n){var t;return!!F$(n,118)&&(t=uG(n,118),this.g==t.g)},uZn.Hb=function(){return this.g},uZn.Ib=function(){var n,t,e,i;for(n=new lx("{"),i=new Ww(this.n);i.a"+this.b+" ("+yR(this.c)+")"},uZn.d=0,zW(L9n,"HyperEdgeSegmentDependency",132),sDn(528,22,{3:1,34:1,22:1,528:1},qI);var RSt,KSt,FSt,_St,BSt,HSt,USt,GSt,qSt=_cn(L9n,"HyperEdgeSegmentDependency/DependencyType",528,Oat,k1,OH);sDn(1878,1,{},pp),zW(L9n,"HyperEdgeSegmentSplitter",1878),sDn(1879,1,{},hj),uZn.a=0,uZn.b=0,zW(L9n,"HyperEdgeSegmentSplitter/AreaRating",1879),sDn(339,1,{339:1},OU),uZn.a=0,uZn.b=0,uZn.c=0,zW(L9n,"HyperEdgeSegmentSplitter/FreeArea",339),sDn(1880,1,b2n,ba),uZn.Ne=function(n,t){return C_(uG(n,118),uG(t,118))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(L9n,"HyperEdgeSegmentSplitter/lambda$0$Type",1880),sDn(1881,1,QZn,pY),uZn.Cd=function(n){I5(this.a,this.d,this.c,this.b,uG(n,118))},uZn.b=0,zW(L9n,"HyperEdgeSegmentSplitter/lambda$1$Type",1881),sDn(1882,1,{},wa),uZn.Kb=function(n){return new fX(null,new h3(uG(n,118).e,16))},zW(L9n,"HyperEdgeSegmentSplitter/lambda$2$Type",1882),sDn(1883,1,{},da),uZn.Kb=function(n){return new fX(null,new h3(uG(n,118).j,16))},zW(L9n,"HyperEdgeSegmentSplitter/lambda$3$Type",1883),sDn(1884,1,{},ga),uZn.Ye=function(n){return uM(pK(n))},zW(L9n,"HyperEdgeSegmentSplitter/lambda$4$Type",1884),sDn(664,1,{},NW),uZn.a=0,uZn.b=0,uZn.c=0,zW(L9n,"OrthogonalRoutingGenerator",664),sDn(1703,1,{},pa),uZn.Kb=function(n){return new fX(null,new h3(uG(n,118).e,16))},zW(L9n,"OrthogonalRoutingGenerator/lambda$0$Type",1703),sDn(1704,1,{},ma),uZn.Kb=function(n){return new fX(null,new h3(uG(n,118).j,16))},zW(L9n,"OrthogonalRoutingGenerator/lambda$1$Type",1704),sDn(670,1,{}),zW(N9n,"BaseRoutingDirectionStrategy",670),sDn(1870,670,{},Rk),uZn.yg=function(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t+n.o*i,h=new Ww(n.n);h.at4n&&(c=n,r=new MO(l,a=f),aq(o.a,r),VUn(this,o,c,r,!1),(b=n.r)&&(r=new MO(w=uM(pK(hyn(b.e,0))),a),aq(o.a,r),VUn(this,o,c,r,!1),c=b,r=new MO(w,a=t+b.o*i),aq(o.a,r),VUn(this,o,c,r,!1)),r=new MO(g,a),aq(o.a,r),VUn(this,o,c,r,!1)))},uZn.zg=function(n){return n.i.n.a+n.n.a+n.a.a},uZn.Ag=function(){return KQn(),KRt},uZn.Bg=function(){return KQn(),yRt},zW(N9n,"NorthToSouthRoutingStrategy",1870),sDn(1871,670,{},Kk),uZn.yg=function(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t-n.o*i,h=new Ww(n.n);h.at4n&&(c=n,r=new MO(l,a=f),aq(o.a,r),VUn(this,o,c,r,!1),(b=n.r)&&(r=new MO(w=uM(pK(hyn(b.e,0))),a),aq(o.a,r),VUn(this,o,c,r,!1),c=b,r=new MO(w,a=t-b.o*i),aq(o.a,r),VUn(this,o,c,r,!1)),r=new MO(g,a),aq(o.a,r),VUn(this,o,c,r,!1)))},uZn.zg=function(n){return n.i.n.a+n.n.a+n.a.a},uZn.Ag=function(){return KQn(),yRt},uZn.Bg=function(){return KQn(),KRt},zW(N9n,"SouthToNorthRoutingStrategy",1871),sDn(1869,670,{},Fk),uZn.yg=function(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t+n.o*i,h=new Ww(n.n);h.at4n&&(c=n,r=new MO(a=f,l),aq(o.a,r),VUn(this,o,c,r,!0),(b=n.r)&&(r=new MO(a,w=uM(pK(hyn(b.e,0)))),aq(o.a,r),VUn(this,o,c,r,!0),c=b,r=new MO(a=t+b.o*i,w),aq(o.a,r),VUn(this,o,c,r,!0)),r=new MO(a,g),aq(o.a,r),VUn(this,o,c,r,!0)))},uZn.zg=function(n){return n.i.n.b+n.n.b+n.a.b},uZn.Ag=function(){return KQn(),kRt},uZn.Bg=function(){return KQn(),_Rt},zW(N9n,"WestToEastRoutingStrategy",1869),sDn(828,1,{},jqn),uZn.Ib=function(){return vIn(this.a)},uZn.b=0,uZn.c=!1,uZn.d=!1,uZn.f=0,zW(D9n,"NubSpline",828),sDn(418,1,{418:1},pFn,R1),zW(D9n,"NubSpline/PolarCP",418),sDn(1480,1,y9n,zTn),uZn.rg=function(n){return HPn(uG(n,36))},uZn.Kf=function(n,t){EJn(this,uG(n,36),t)},zW(D9n,"SplineEdgeRouter",1480),sDn(274,1,{274:1},O7),uZn.Ib=function(){return this.a+" ->("+this.c+") "+this.b},uZn.c=0,zW(D9n,"SplineEdgeRouter/Dependency",274),sDn(465,22,{3:1,34:1,22:1,465:1},XI);var XSt,zSt,VSt,WSt,QSt,JSt=_cn(D9n,"SplineEdgeRouter/SideToProcess",465,Oat,S1,AH);sDn(1481,1,y1n,va),uZn.Mb=function(n){return uFn(),!uG(n,131).o},zW(D9n,"SplineEdgeRouter/lambda$0$Type",1481),sDn(1482,1,{},ka),uZn.Ze=function(n){return uFn(),uG(n,131).v+1},zW(D9n,"SplineEdgeRouter/lambda$1$Type",1482),sDn(1483,1,QZn,BI),uZn.Cd=function(n){yq(this.a,this.b,uG(n,42))},zW(D9n,"SplineEdgeRouter/lambda$2$Type",1483),sDn(1484,1,QZn,HI),uZn.Cd=function(n){Mq(this.a,this.b,uG(n,42))},zW(D9n,"SplineEdgeRouter/lambda$3$Type",1484),sDn(131,1,{34:1,131:1},UAn,Izn),uZn.Fd=function(n){return NT(this,uG(n,131))},uZn.b=0,uZn.e=!1,uZn.f=0,uZn.g=0,uZn.j=!1,uZn.k=!1,uZn.n=0,uZn.o=!1,uZn.p=!1,uZn.q=!1,uZn.s=0,uZn.u=0,uZn.v=0,uZn.F=0,zW(D9n,"SplineSegment",131),sDn(468,1,{468:1},ya),uZn.a=0,uZn.b=!1,uZn.c=!1,uZn.d=!1,uZn.e=!1,uZn.f=0,zW(D9n,"SplineSegment/EdgeInformation",468),sDn(1198,1,{},Ma),zW(_9n,q3n,1198),sDn(1199,1,b2n,Ta),uZn.Ne=function(n,t){return yNn(uG(n,121),uG(t,121))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(_9n,X3n,1199),sDn(1197,1,{},Gj),zW(_9n,"MrTree",1197),sDn(405,22,{3:1,34:1,22:1,405:1,188:1,196:1},zI),uZn.dg=function(){return TNn(this)},uZn.qg=function(){return TNn(this)};var YSt,ZSt=_cn(_9n,"TreeLayoutPhases",405,Oat,i5,LH);sDn(1112,205,M3n,FF),uZn.rf=function(n,t){var e,i,r,c,a,o,u;for(oM(gK(zDn(n,(QGn(),gCt))))||J1(new Sd((vP(),new Vy(n)))),(c=t.eh(B9n)).Ug("build tGraph",1),zsn(o=new L7,n),kfn(o,(OQn(),RPt),n),jUn(n,o,u=new Ym),eGn(n,o,u),a=o,c.Vg(),(c=t.eh(B9n)).Ug("Split graph",1),r=AUn(this.a,a),c.Vg(),i=new Ww(r);i.a"+V3(this.c):"e_"+Hon(this)},zW(U9n,"TEdge",65),sDn(121,137,{3:1,121:1,96:1,137:1},L7),uZn.Ib=function(){var n,t,e,i,r;for(r=null,i=Fkn(this.b,0);i.b!=i.d.c;)r+=(null==(e=uG(I6(i),40)).c||0==e.c.length?"n_"+e.g:"n_"+e.c)+"\n";for(t=Fkn(this.a,0);t.b!=t.d.c;)r+=((n=uG(I6(t),65)).b&&n.c?V3(n.b)+"->"+V3(n.c):"e_"+Hon(n))+"\n";return r};var nPt=zW(U9n,"TGraph",121);sDn(643,508,{3:1,508:1,643:1,96:1,137:1}),zW(U9n,"TShape",643),sDn(40,643,{3:1,508:1,40:1,643:1,96:1,137:1},wln),uZn.Ib=function(){return V3(this)};var tPt,ePt,iPt,rPt,cPt,aPt,oPt,uPt,sPt,hPt,fPt,lPt=zW(U9n,"TNode",40);sDn(236,1,t1n,Mp),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new Tp(Fkn(this.a.d,0))},zW(U9n,"TNode/2",236),sDn(329,1,$Zn,Tp),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return uG(I6(this.a),65).c},uZn.Ob=function(){return Jj(this.a)},uZn.Qb=function(){yrn(this.a)},zW(U9n,"TNode/2/1",329),sDn(1923,1,Q4n,Oa),uZn.Kf=function(n,t){SYn(this,uG(n,121),t)},zW(q9n,"CompactionProcessor",1923),sDn(1924,1,b2n,jp),uZn.Ne=function(n,t){return ksn(this.a,uG(n,40),uG(t,40))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$0$Type",1924),sDn(1925,1,y1n,GI),uZn.Mb=function(n){return xZ(this.b,this.a,uG(n,42))},uZn.a=0,uZn.b=0,zW(q9n,"CompactionProcessor/lambda$1$Type",1925),sDn(1934,1,b2n,Aa),uZn.Ne=function(n,t){return vW(uG(n,40),uG(t,40))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$10$Type",1934),sDn(1935,1,b2n,La),uZn.Ne=function(n,t){return Kx(uG(n,40),uG(t,40))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$11$Type",1935),sDn(1936,1,b2n,Na),uZn.Ne=function(n,t){return kW(uG(n,40),uG(t,40))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$12$Type",1936),sDn(1926,1,y1n,Ep),uZn.Mb=function(n){return hD(this.a,uG(n,42))},uZn.a=0,zW(q9n,"CompactionProcessor/lambda$2$Type",1926),sDn(1927,1,y1n,Sp),uZn.Mb=function(n){return fD(this.a,uG(n,42))},uZn.a=0,zW(q9n,"CompactionProcessor/lambda$3$Type",1927),sDn(1928,1,y1n,$a),uZn.Mb=function(n){return-1==uG(n,40).c.indexOf(H9n)},zW(q9n,"CompactionProcessor/lambda$4$Type",1928),sDn(1929,1,{},Pp),uZn.Kb=function(n){return a6(this.a,uG(n,40))},uZn.a=0,zW(q9n,"CompactionProcessor/lambda$5$Type",1929),sDn(1930,1,{},Cp),uZn.Kb=function(n){return ren(this.a,uG(n,40))},uZn.a=0,zW(q9n,"CompactionProcessor/lambda$6$Type",1930),sDn(1931,1,b2n,Ip),uZn.Ne=function(n,t){return G9(this.a,uG(n,240),uG(t,240))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$7$Type",1931),sDn(1932,1,b2n,Op),uZn.Ne=function(n,t){return q9(this.a,uG(n,40),uG(t,40))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$8$Type",1932),sDn(1933,1,b2n,Da),uZn.Ne=function(n,t){return Fx(uG(n,40),uG(t,40))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$9$Type",1933),sDn(1921,1,Q4n,xa),uZn.Kf=function(n,t){cBn(uG(n,121),t)},zW(q9n,"DirectionProcessor",1921),sDn(1913,1,Q4n,KF),uZn.Kf=function(n,t){JUn(this,uG(n,121),t)},zW(q9n,"FanProcessor",1913),sDn(1937,1,Q4n,Ra),uZn.Kf=function(n,t){N_n(uG(n,121),t)},zW(q9n,"GraphBoundsProcessor",1937),sDn(1938,1,{},Ka),uZn.Ye=function(n){return uG(n,40).e.a},zW(q9n,"GraphBoundsProcessor/lambda$0$Type",1938),sDn(1939,1,{},Fa),uZn.Ye=function(n){return uG(n,40).e.b},zW(q9n,"GraphBoundsProcessor/lambda$1$Type",1939),sDn(1940,1,{},_a),uZn.Ye=function(n){return lP(uG(n,40))},zW(q9n,"GraphBoundsProcessor/lambda$2$Type",1940),sDn(1941,1,{},Ba),uZn.Ye=function(n){return fP(uG(n,40))},zW(q9n,"GraphBoundsProcessor/lambda$3$Type",1941),sDn(262,22,{3:1,34:1,22:1,262:1,196:1},VI),uZn.dg=function(){switch(this.g){case 0:return new sy;case 1:return new KF;case 2:return new uy;case 3:return new Xa;case 4:return new Ua;case 8:return new Ha;case 5:return new xa;case 6:return new Va;case 7:return new Oa;case 9:return new Ra;case 10:return new Wa;default:throw hv(new vM(v6n+(null!=this.f?this.f:""+this.g)))}};var bPt,wPt,dPt,gPt,pPt=_cn(q9n,k6n,262,Oat,usn,NH);sDn(1920,1,Q4n,Ha),uZn.Kf=function(n,t){xQn(uG(n,121),t)},zW(q9n,"LevelCoordinatesProcessor",1920),sDn(1918,1,Q4n,Ua),uZn.Kf=function(n,t){ZRn(this,uG(n,121),t)},uZn.a=0,zW(q9n,"LevelHeightProcessor",1918),sDn(1919,1,t1n,Ga),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return hZ(),wS(),Qot},zW(q9n,"LevelHeightProcessor/1",1919),sDn(1914,1,Q4n,uy),uZn.Kf=function(n,t){g_n(this,uG(n,121),t)},zW(q9n,"LevelProcessor",1914),sDn(1915,1,y1n,qa),uZn.Mb=function(n){return oM(gK(oIn(uG(n,40),(OQn(),UPt))))},zW(q9n,"LevelProcessor/lambda$0$Type",1915),sDn(1916,1,Q4n,Xa),uZn.Kf=function(n,t){DAn(this,uG(n,121),t)},uZn.a=0,zW(q9n,"NeighborsProcessor",1916),sDn(1917,1,t1n,za),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return hZ(),wS(),Qot},zW(q9n,"NeighborsProcessor/1",1917),sDn(1922,1,Q4n,Va),uZn.Kf=function(n,t){QUn(this,uG(n,121),t)},uZn.a=0,zW(q9n,"NodePositionProcessor",1922),sDn(1912,1,Q4n,sy),uZn.Kf=function(n,t){Ezn(this,uG(n,121),t)},zW(q9n,"RootProcessor",1912),sDn(1942,1,Q4n,Wa),uZn.Kf=function(n,t){Wyn(uG(n,121),t)},zW(q9n,"Untreeifyer",1942),sDn(392,22,{3:1,34:1,22:1,392:1},WI);var mPt,vPt,kPt,yPt,MPt,TPt,jPt,EPt,SPt,PPt,CPt,IPt,OPt,APt,LPt,NPt,$Pt,DPt,xPt,RPt,KPt,FPt,_Pt,BPt,HPt,UPt,GPt,qPt,XPt,zPt,VPt,WPt,QPt,JPt,YPt,ZPt,nCt,tCt,eCt,iCt,rCt,cCt,aCt,oCt,uCt,sCt,hCt,fCt,lCt,bCt,wCt,dCt,gCt,pCt,mCt,vCt,kCt,yCt,MCt,TCt,jCt,ECt,SCt,PCt,CCt,ICt,OCt,ACt,LCt,NCt,$Ct,DCt,xCt,RCt=_cn(W9n,"EdgeRoutingMode",392,Oat,t3,$H);sDn(862,1,K2n,vl),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,J9n),""),r7n),"Turns on Tree compaction which decreases the size of the whole tree by placing nodes of multiple levels in one large level"),(qx(),!1)),(lAn(),wNt)),cot),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Y9n),""),"Edge End Texture Length"),"Should be set to the length of the texture at the end of an edge. This value can be used to improve the Edge Routing."),7),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Z9n),""),"Tree Level"),"The index for the tree level the node is in"),xwn(0)),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,n7n),""),r7n),"When set to a positive number this option will force the algorithm to place the node to the specified position within the trees layer if weighting is set to constraint"),xwn(-1)),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,t7n),""),"Weighting of Nodes"),"Which weighting to use when computing a node order."),tCt),gNt),BCt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,e7n),""),"Edge Routing Mode"),"Chooses an Edge Routing algorithm."),WPt),gNt),RCt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,i7n),""),"Search Order"),"Which search order to use when computing a spanning tree."),YPt),gNt),QCt),ggn(hNt)))),yJn((new Ml,n))},zW(W9n,"MrTreeMetaDataProvider",862),sDn(1006,1,K2n,Ml),uZn.hf=function(n){yJn(n)},zW(W9n,"MrTreeOptions",1006),sDn(1007,1,{},Qa),uZn.sf=function(){return new FF},uZn.tf=function(n){},zW(W9n,"MrTreeOptions/MrtreeFactory",1007),sDn(353,22,{3:1,34:1,22:1,353:1},QI);var KCt,FCt,_Ct,BCt=_cn(W9n,"OrderWeighting",353,Oat,r5,DH);sDn(433,22,{3:1,34:1,22:1,433:1},JI);var HCt,UCt,GCt,qCt,XCt,zCt,VCt,WCt,QCt=_cn(W9n,"TreeifyingOrder",433,Oat,j1,xH);sDn(1486,1,y9n,Tl),uZn.rg=function(n){return uG(n,121),UCt},uZn.Kf=function(n,t){$un(this,uG(n,121),t)},zW("org.eclipse.elk.alg.mrtree.p1treeify","DFSTreeifyer",1486),sDn(1487,1,y9n,jl),uZn.rg=function(n){return uG(n,121),GCt},uZn.Kf=function(n,t){E_n(this,uG(n,121),t)},zW(u7n,"NodeOrderer",1487),sDn(1494,1,{},lo),uZn.td=function(n){return Nq(n)},zW(u7n,"NodeOrderer/0methodref$lambda$6$Type",1494),sDn(1488,1,y1n,bo),uZn.Mb=function(n){return ncn(),oM(gK(oIn(uG(n,40),(OQn(),UPt))))},zW(u7n,"NodeOrderer/lambda$0$Type",1488),sDn(1489,1,y1n,wo),uZn.Mb=function(n){return ncn(),uG(oIn(uG(n,40),(QGn(),kCt)),17).a<0},zW(u7n,"NodeOrderer/lambda$1$Type",1489),sDn(1490,1,y1n,Lp),uZn.Mb=function(n){return _an(this.a,uG(n,40))},zW(u7n,"NodeOrderer/lambda$2$Type",1490),sDn(1491,1,y1n,Ap),uZn.Mb=function(n){return f6(this.a,uG(n,40))},zW(u7n,"NodeOrderer/lambda$3$Type",1491),sDn(1492,1,b2n,go),uZn.Ne=function(n,t){return frn(uG(n,40),uG(t,40))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(u7n,"NodeOrderer/lambda$4$Type",1492),sDn(1493,1,y1n,po),uZn.Mb=function(n){return ncn(),0!=uG(oIn(uG(n,40),(OQn(),EPt)),17).a},zW(u7n,"NodeOrderer/lambda$5$Type",1493),sDn(1495,1,y9n,yl),uZn.rg=function(n){return uG(n,121),qCt},uZn.Kf=function(n,t){cUn(this,uG(n,121),t)},uZn.b=0,zW("org.eclipse.elk.alg.mrtree.p3place","NodePlacer",1495),sDn(1496,1,y9n,kl),uZn.rg=function(n){return uG(n,121),XCt},uZn.Kf=function(n,t){gHn(uG(n,121),t)},zW(s7n,"EdgeRouter",1496),sDn(1498,1,b2n,fo),uZn.Ne=function(n,t){return d$(uG(n,17).a,uG(t,17).a)},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/0methodref$compare$Type",1498),sDn(1503,1,{},Ya),uZn.Ye=function(n){return uM(pK(n))},zW(s7n,"EdgeRouter/1methodref$doubleValue$Type",1503),sDn(1505,1,b2n,Za),uZn.Ne=function(n,t){return ugn(uM(pK(n)),uM(pK(t)))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/2methodref$compare$Type",1505),sDn(1507,1,b2n,no),uZn.Ne=function(n,t){return ugn(uM(pK(n)),uM(pK(t)))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/3methodref$compare$Type",1507),sDn(1509,1,{},Ja),uZn.Ye=function(n){return uM(pK(n))},zW(s7n,"EdgeRouter/4methodref$doubleValue$Type",1509),sDn(1511,1,b2n,to),uZn.Ne=function(n,t){return ugn(uM(pK(n)),uM(pK(t)))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/5methodref$compare$Type",1511),sDn(1513,1,b2n,eo),uZn.Ne=function(n,t){return ugn(uM(pK(n)),uM(pK(t)))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/6methodref$compare$Type",1513),sDn(1497,1,{},io),uZn.Kb=function(n){return tcn(),uG(oIn(uG(n,40),(QGn(),ACt)),17)},zW(s7n,"EdgeRouter/lambda$0$Type",1497),sDn(1508,1,{},ro),uZn.Kb=function(n){return CR(uG(n,40))},zW(s7n,"EdgeRouter/lambda$11$Type",1508),sDn(1510,1,{},dO),uZn.Kb=function(n){return vq(this.b,this.a,uG(n,40))},uZn.a=0,uZn.b=0,zW(s7n,"EdgeRouter/lambda$13$Type",1510),sDn(1512,1,{},gO),uZn.Kb=function(n){return IR(this.b,this.a,uG(n,40))},uZn.a=0,uZn.b=0,zW(s7n,"EdgeRouter/lambda$15$Type",1512),sDn(1514,1,b2n,co),uZn.Ne=function(n,t){return Gkn(uG(n,65),uG(t,65))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/lambda$17$Type",1514),sDn(1515,1,b2n,ao),uZn.Ne=function(n,t){return qkn(uG(n,65),uG(t,65))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/lambda$18$Type",1515),sDn(1516,1,b2n,oo),uZn.Ne=function(n,t){return zkn(uG(n,65),uG(t,65))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/lambda$19$Type",1516),sDn(1499,1,y1n,Np),uZn.Mb=function(n){return n0(this.a,uG(n,40))},uZn.a=0,zW(s7n,"EdgeRouter/lambda$2$Type",1499),sDn(1517,1,b2n,uo),uZn.Ne=function(n,t){return Xkn(uG(n,65),uG(t,65))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/lambda$20$Type",1517),sDn(1500,1,b2n,so),uZn.Ne=function(n,t){return TG(uG(n,40),uG(t,40))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/lambda$3$Type",1500),sDn(1501,1,b2n,ho),uZn.Ne=function(n,t){return jG(uG(n,40),uG(t,40))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/lambda$4$Type",1501),sDn(1502,1,{},mo),uZn.Kb=function(n){return OR(uG(n,40))},zW(s7n,"EdgeRouter/lambda$5$Type",1502),sDn(1504,1,{},pO),uZn.Kb=function(n){return kq(this.b,this.a,uG(n,40))},uZn.a=0,uZn.b=0,zW(s7n,"EdgeRouter/lambda$7$Type",1504),sDn(1506,1,{},mO),uZn.Kb=function(n){return AR(this.b,this.a,uG(n,40))},uZn.a=0,uZn.b=0,zW(s7n,"EdgeRouter/lambda$9$Type",1506),sDn(675,1,{675:1},wTn),uZn.e=0,uZn.f=!1,uZn.g=!1,zW(s7n,"MultiLevelEdgeNodeNodeGap",675),sDn(1943,1,b2n,vo),uZn.Ne=function(n,t){return l2(uG(n,240),uG(t,240))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"MultiLevelEdgeNodeNodeGap/lambda$0$Type",1943),sDn(1944,1,b2n,ko),uZn.Ne=function(n,t){return b2(uG(n,240),uG(t,240))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"MultiLevelEdgeNodeNodeGap/lambda$1$Type",1944),sDn(501,22,{3:1,34:1,22:1,501:1,188:1,196:1},YI),uZn.dg=function(){return Fpn(this)},uZn.qg=function(){return Fpn(this)};var JCt,YCt,ZCt,nIt,tIt,eIt,iIt=_cn(h7n,"RadialLayoutPhases",501,Oat,p1,RH);sDn(1113,205,M3n,Uj),uZn.rf=function(n,t){var e,i,r,c;if(e=_Kn(this,n),t.Ug("Radial layout",e.c.length),oM(gK(zDn(n,(jOn(),RIt))))||J1(new Sd((vP(),new Vy(n)))),c=XPn(n),Myn(n,(SK(),zCt),c),!c)throw hv(new vM("The given graph is not a tree!"));for(0==(i=uM(pK(zDn(n,HIt))))&&(i=tNn(n)),Myn(n,HIt,i),r=new Ww(_Kn(this,n));r.a=3)for(v=uG(zrn(p,0),27),k=uG(zrn(p,1),27),r=0;r+2=v.f+k.f+u||k.f>=m.f+v.f+u){y=!0;break}++r}else y=!0;if(!y){for(h=p.i,c=new DD(p);c.e!=c.i.gc();)Myn(uG(Zkn(c),27),(XYn(),vDt),xwn(h)),--h;return XGn(n,new fy),void t.Vg()}for(_J(this.a),JV(this.a,(Jmn(),oOt),uG(zDn(n,mAt),188)),JV(this.a,uOt,uG(zDn(n,sAt),188)),JV(this.a,sOt,uG(zDn(n,dAt),188)),ZL(this.a,(Aq(T=new wJ,oOt,(Zyn(),wOt)),Aq(T,uOt,bOt),oM(gK(zDn(n,YOt)))&&Aq(T,oOt,lOt),T)),o=1/(i=Qzn(this.a,n)).c.length,l=new Ww(i);l.a0&&Qbn((s3(t-1,n.length),n.charCodeAt(t-1)),c6n);)--t;if(e>=t)throw hv(new vM("The given string does not contain any numbers."));if(2!=(i=WGn((Knn(e,t,n.length),n.substr(e,t-e)),",|;|\r|\n")).length)throw hv(new vM("Exactly two numbers are expected, "+i.length+" were found."));try{this.a=YIn(KAn(i[0])),this.b=YIn(KAn(i[1]))}catch(r){throw F$(r=Ehn(r),130)?hv(new vM(a6n+r)):hv(r)}},uZn.Ib=function(){return"("+this.a+","+this.b+")"},uZn.a=0,uZn.b=0;var PNt=zW(o6n,"KVector",8);sDn(75,67,{3:1,4:1,20:1,31:1,56:1,16:1,67:1,15:1,75:1,423:1},Uk,tj,UR),uZn.Pc=function(){return ibn(this)},uZn.cg=function(n){var t,e,i,r,c;e=WGn(n,",|;|\\(|\\)|\\[|\\]|\\{|\\}| |\t|\n"),BY(this);try{for(t=0,r=0,i=0,c=0;t0&&(r%2==0?i=YIn(e[t]):c=YIn(e[t]),r>0&&r%2!=0&&aq(this,new MO(i,c)),++r),++t}catch(a){throw F$(a=Ehn(a),130)?hv(new vM("The given string does not match the expected format for vectors."+a)):hv(a)}},uZn.Ib=function(){var n,t,e;for(n=new lx("("),t=Fkn(this,0);t.b!=t.d.c;)JA(n,(e=uG(I6(t),8)).a+","+e.b),t.b!=t.d.c&&(n.a+="; ");return(n.a+=")",n).a};var CNt,INt,ONt,ANt,LNt,NNt,$Nt=zW(o6n,"KVectorChain",75);sDn(255,22,{3:1,34:1,22:1,255:1},TO);var DNt,xNt,RNt,KNt,FNt,_Nt,BNt,HNt,UNt,GNt,qNt,XNt,zNt,VNt,WNt,QNt,JNt,YNt,ZNt,n$t=_cn(Unt,"Alignment",255,Oat,Ynn,oU);sDn(991,1,K2n,$l),uZn.hf=function(n){YUn(n)},zW(Unt,"BoxLayouterOptions",991),sDn(992,1,{},Ru),uZn.sf=function(){return new _u},uZn.tf=function(n){},zW(Unt,"BoxLayouterOptions/BoxFactory",992),sDn(298,22,{3:1,34:1,22:1,298:1},SO);var t$t,e$t,i$t,r$t,c$t,a$t,o$t,u$t,s$t,h$t,f$t,l$t,b$t,w$t,d$t,g$t,p$t,m$t,v$t,k$t,y$t,M$t,T$t,j$t,E$t,S$t,P$t,C$t,I$t,O$t,A$t,L$t,N$t,$$t,D$t,x$t,R$t,K$t,F$t,_$t,B$t,H$t,U$t,G$t,q$t,X$t,z$t,V$t,W$t,Q$t,J$t,Y$t,Z$t,nDt,tDt,eDt,iDt,rDt,cDt,aDt,oDt,uDt,sDt,hDt,fDt,lDt,bDt,wDt,dDt,gDt,pDt,mDt,vDt,kDt,yDt,MDt,TDt,jDt,EDt,SDt,PDt,CDt,IDt,ODt,ADt,LDt,NDt,$Dt,DDt,xDt,RDt,KDt,FDt,_Dt,BDt,HDt,UDt,GDt,qDt,XDt,zDt,VDt,WDt,QDt,JDt,YDt,ZDt,nxt,txt=_cn(Unt,"ContentAlignment",298,Oat,Znn,uU);sDn(699,1,K2n,Dl),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,Vnt),""),"Layout Algorithm"),"Select a specific layout algorithm."),(lAn(),kNt)),$ot),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,Wnt),""),"Resolved Layout Algorithm"),"Meta data associated with the selected algorithm."),vNt),aNt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,X8n),""),"Alignment"),"Alignment of the selected node relative to other nodes; the exact meaning depends on the used algorithm."),r$t),gNt),n$t),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,R3n),""),"Aspect Ratio"),"The desired aspect ratio of the drawing, that is the quotient of width by height."),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,Qnt),""),"Bend Points"),"A fixed list of bend points for the edge. This is used by the 'Fixed Layout' algorithm to specify a pre-defined routing for an edge. The vector chain must include the source point, any bend points, and the target point, so it must have at least two points."),vNt),$Nt),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,r9n),""),"Content Alignment"),"Specifies how the content of a node are aligned. Each node can individually control the alignment of its contents. I.e. if a node should be aligned top left in its parent node, the parent node should specify that option."),b$t),pNt),txt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,q8n),""),"Debug Mode"),"Whether additional debug information shall be generated."),(qx(),!1)),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,W8n),""),l3n),"Overall direction of edges: horizontal (right / left) or vertical (down / up)."),g$t),gNt),axt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,m8n),""),"Edge Routing"),"What kind of edge routing style should be applied for the content of a parent node. Algorithms may also set this option to single edges in order to mark them as splines. The bend point list of edges with this option set to SPLINES must be interpreted as control points for a piecewise cubic spline."),y$t),gNt),kxt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Xnt),""),"Expand Nodes"),"If active, nodes are expanded to fill the area of their parent."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,b8n),""),"Hierarchy Handling"),"Determines whether separate layout runs are triggered for different compound nodes in a hierarchical graph. Setting a node's hierarchy handling to `INCLUDE_CHILDREN` will lay out that node and all of its descendants in a single layout run, until a descendant is encountered which has its hierarchy handling set to `SEPARATE_CHILDREN`. In general, `SEPARATE_CHILDREN` will ensure that a new layout run is triggered for a node with that setting. Including multiple levels of hierarchy in a single layout run may allow cross-hierarchical edges to be laid out properly. If the root node is set to `INHERIT` (or not set at all), the default behavior is `SEPARATE_CHILDREN`."),S$t),gNt),Kxt),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[sNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,K3n),""),"Padding"),"The padding to be left to a parent element's border when placing child elements. This can also serve as an output option of a layout algorithm if node size calculation is setup appropriately."),Q$t),vNt),Sbt),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[sNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,f4n),""),"Interactive"),"Whether the algorithm should be run in interactive mode for the content of a parent node. What this means exactly depends on how the specific algorithm interprets this option. Usually in the interactive mode algorithms try to modify the current layout as little as possible."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,g9n),""),"interactive Layout"),"Whether the graph should be changeable interactively and by setting constraints"),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,w4n),""),"Omit Node Micro Layout"),"Node micro layout comprises the computation of node dimensions (if requested), the placement of ports and their labels, and the placement of node labels. The functionality is implemented independent of any specific layout algorithm and shouldn't have any negative impact on the layout algorithm's performance itself. Yet, if any unforeseen behavior occurs, this option allows to deactivate the micro layout."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,l4n),""),"Port Constraints"),"Defines constraints of the position of the ports of a node."),hDt),gNt),mRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,b9n),""),"Position"),"The position of a node, port, or label. This is used by the 'Fixed Layout' algorithm to specify a pre-defined position."),vNt),PNt),WX(sNt,Uhn(cT(MNt,1),p1n,170,0,[fNt,uNt]))))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,a4n),""),"Priority"),"Defines the priority of an object; its meaning depends on the specific layout algorithm and the context where it is used."),mNt),dot),WX(sNt,Uhn(cT(MNt,1),p1n,170,0,[oNt]))))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,s4n),""),"Randomization Seed"),"Seed used for pseudo-random number generators to control the layout algorithm. If the value is 0, the seed shall be determined pseudo-randomly (e.g. from the system time)."),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,h4n),""),"Separate Connected Components"),"Whether each connected component should be processed separately."),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,c9n),""),"Junction Points"),"This option is not used as option, but as output of the layout algorithms. It is attached to edges and determines the points where junction symbols should be drawn in order to represent hyperedges with orthogonal routing. Whether such points are computed depends on the chosen layout algorithm and edge routing style. The points are put into the vector chain with no specific order."),N$t),vNt),$Nt),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,u9n),""),"Comment Box"),"Whether the node should be regarded as a comment box instead of a regular node. In that case its placement should be similar to how labels are handled. Any edges incident to a comment box specify to which graph elements the comment is related."),!1),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,s9n),""),"Hypernode"),"Whether the node should be handled as a hypernode."),!1),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,Jnt),""),"Label Manager"),"Label managers can shorten labels upon a layout algorithm's request."),vNt),cUt),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[uNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,w9n),""),"Margins"),"Margins define additional space around the actual bounds of a graph element. For instance, ports or labels being placed on the outside of a node's border might introduce such a margin. The margin is used to guarantee non-overlap of other graph elements with those ports or labels."),D$t),vNt),hbt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,U8n),""),"No Layout"),"No layout is done for the associated element. This is used to mark parts of a diagram to avoid their inclusion in the layout graph, or to mark parts of the layout graph to prevent layout engines from processing them. If you wish to exclude the contents of a compound node from automatic layout, while the node itself is still considered on its own layer, use the 'Fixed Layout' algorithm for that node."),!1),wNt),cot),WX(sNt,Uhn(cT(MNt,1),p1n,170,0,[oNt,fNt,uNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Ynt),""),"Scale Factor"),"The scaling factor to be applied to the corresponding node in recursive layout. It causes the corresponding node's size to be adjusted, and its ports and labels to be sized and placed accordingly after the layout of that node has been determined (and before the node itself and its siblings are arranged). The scaling is not reverted afterwards, so the resulting layout graph contains the adjusted size and position data. This option is currently not supported if 'Layout Hierarchy' is set."),1),dNt),fot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,Znt),""),"Child Area Width"),"The width of the area occupied by the laid out children of a node."),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,ntt),""),"Child Area Height"),"The height of the area occupied by the laid out children of a node."),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,k4n),""),Lnt),"Turns topdown layout on and off. If this option is enabled, hierarchical layout will be computed first for the root node and then for its children recursively. Layouts are then scaled down to fit the area provided by their parents. Graphs must follow a certain structure for topdown layout to work properly. {@link TopdownNodeTypes.PARALLEL_NODE} nodes must have children of type {@link TopdownNodeTypes.HIERARCHICAL_NODE} and must define {@link topdown.hierarchicalNodeWidth} and {@link topdown.hierarchicalNodeAspectRatio} for their children. Furthermore they need to be laid out using an algorithm that is a {@link TopdownLayoutProvider}. Hierarchical nodes can also be parents of other hierarchical nodes and can optionally use a {@link TopdownSizeApproximator} to dynamically set sizes during topdown layout. In this case {@link topdown.hierarchicalNodeWidth} and {@link topdown.hierarchicalNodeAspectRatio} should be set on the node itself rather than the parent. The values are then used by the size approximator as base values. Hierarchical nodes require the layout option {@link nodeSize.fixedGraphSize} to be true to prevent the algorithm used there from resizing the hierarchical node. This option is not supported if 'Hierarchy Handling' is set to 'INCLUDE_CHILDREN'"),!1),wNt),cot),ggn(hNt)))),H4(n,k4n,j4n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,ttt),""),"Animate"),"Whether the shift from the old layout to the new computed layout shall be animated."),!0),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,ett),""),"Animation Time Factor"),"Factor for computation of animation time. The higher the value, the longer the animation time. If the value is 0, the resulting time is always equal to the minimum defined by 'Minimal Animation Time'."),xwn(100)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,itt),""),"Layout Ancestors"),"Whether the hierarchy levels on the path from the selected element to the root of the diagram shall be included in the layout process."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,rtt),""),"Maximal Animation Time"),"The maximal time for animations, in milliseconds."),xwn(4e3)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,ctt),""),"Minimal Animation Time"),"The minimal time for animations, in milliseconds."),xwn(400)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,att),""),"Progress Bar"),"Whether a progress bar shall be displayed during layout computations."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,ott),""),"Validate Graph"),"Whether the graph shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,utt),""),"Validate Options"),"Whether layout options shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user."),!0),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,stt),""),"Zoom to Fit"),"Whether the zoom level shall be set to view the whole diagram after layout."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,znt),"box"),"Box Layout Mode"),"Configures the packing mode used by the {@link BoxLayoutProvider}. If SIMPLE is not required (neither priorities are used nor the interactive mode), GROUP_DEC can improve the packing and decrease the area. GROUP_MIXED and GROUP_INC may, in very specific scenarios, work better."),u$t),gNt),SKt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,A8n),v8n),"Comment Comment Spacing"),"Spacing to be preserved between a comment box and other comment boxes connected to the same node. The space left between comment boxes of different nodes is controlled by the node-node spacing."),10),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,L8n),v8n),"Comment Node Spacing"),"Spacing to be preserved between a node and its connected comment boxes. The space left between a node and the comments of another node is controlled by the node-node spacing."),10),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,D3n),v8n),"Components Spacing"),"Spacing to be preserved between pairs of connected components. This option is only relevant if 'separateConnectedComponents' is activated."),20),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,N8n),v8n),"Edge Spacing"),"Spacing to be preserved between any two edges. Note that while this can somewhat easily be satisfied for the segments of orthogonally drawn edges, it is harder for general polylines or splines."),10),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,u4n),v8n),"Edge Label Spacing"),"The minimal distance to be preserved between a label and the edge it is associated with. Note that the placement of a label is influenced by the 'edgelabels.placement' option."),2),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,$8n),v8n),"Edge Node Spacing"),"Spacing to be preserved between nodes and edges."),10),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,D8n),v8n),"Label Spacing"),"Determines the amount of space to be left between two labels of the same graph element."),0),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,K8n),v8n),"Label Node Spacing"),"Spacing to be preserved between labels and the border of node they are associated with. Note that the placement of a label is influenced by the 'nodelabels.placement' option."),5),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,x8n),v8n),"Horizontal spacing between Label and Port"),"Horizontal spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,R8n),v8n),"Vertical spacing between Label and Port"),"Vertical spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,o4n),v8n),"Node Spacing"),"The minimal distance to be preserved between each two nodes."),20),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,F8n),v8n),"Node Self Loop Spacing"),"Spacing to be preserved between a node and its self loops."),10),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,_8n),v8n),"Port Spacing"),"Spacing between pairs of ports of the same node."),10),dNt),fot),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[sNt]))))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,B8n),v8n),"Individual Spacing"),"Allows to specify individual spacing values for graph elements that shall be different from the value specified for the element's parent."),vNt),AKt),WX(sNt,Uhn(cT(MNt,1),p1n,170,0,[oNt,fNt,uNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,d9n),v8n),"Additional Port Space"),"Additional space around the sets of ports on each node side. For each side of a node, this option can reserve additional space before and after the ports on each side. For example, a top spacing of 20 makes sure that the first port on the western and eastern side is 20 units away from the northern border."),KDt),vNt),hbt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,l9n),dtt),"Layout Partition"),"Partition to which the node belongs. This requires Layout Partitioning to be active. Nodes with lower partition IDs will appear to the left of nodes with higher partition IDs (assuming a left-to-right layout direction)."),mNt),dot),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[sNt]))))),H4(n,l9n,f9n,nDt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,f9n),dtt),"Layout Partitioning"),"Whether to activate partitioned layout. This will allow to group nodes through the Layout Partition option. a pair of nodes with different partition indices is then placed such that the node with lower index is placed to the left of the other node (with left-to-right layout direction). Depending on the layout algorithm, this may only be guaranteed to work if all nodes have a layout partition configured, or at least if edges that cross partitions are not part of a partition-crossing cycle."),Y$t),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Q8n),gtt),"Node Label Padding"),"Define padding for node labels that are placed inside of a node."),R$t),vNt),Sbt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,m4n),gtt),"Node Label Placement"),"Hints for where node labels are to be placed; if empty, the node label's position is not modified."),F$t),pNt),eRt),WX(sNt,Uhn(cT(MNt,1),p1n,170,0,[uNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Z8n),ptt),"Port Alignment"),"Defines the default port distribution for a node. May be overridden for each side individually."),eDt),gNt),hRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,n9n),ptt),"Port Alignment (North)"),"Defines how ports on the northern side are placed, overriding the node's general port alignment."),gNt),hRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,t9n),ptt),"Port Alignment (South)"),"Defines how ports on the southern side are placed, overriding the node's general port alignment."),gNt),hRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,e9n),ptt),"Port Alignment (West)"),"Defines how ports on the western side are placed, overriding the node's general port alignment."),gNt),hRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,i9n),ptt),"Port Alignment (East)"),"Defines how ports on the eastern side are placed, overriding the node's general port alignment."),gNt),hRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,p4n),mtt),"Node Size Constraints"),"What should be taken into account when calculating a node's size. Empty size constraints specify that a node's size is already fixed and should not be changed."),B$t),pNt),sKt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,g4n),mtt),"Node Size Options"),"Options modifying the behavior of the size constraints set on a node. Each member of the set specifies something that should be taken into account when calculating node sizes. The empty set corresponds to no further modifications."),X$t),pNt),wKt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,x4n),mtt),"Node Size Minimum"),"The minimal size to which a node can be reduced."),G$t),vNt),PNt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,d4n),mtt),"Fixed Graph Size"),"By default, the fixed layout provider will enlarge a graph until it is large enough to contain its children. If this option is set, it won't do so."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,a9n),I8n),"Edge Label Placement"),"Gives a hint on where to put edge labels."),v$t),gNt),lxt),ggn(uNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,b4n),I8n),"Inline Edge Labels"),"If true, an edge label is placed directly on its edge. May only apply to center edge labels. This kind of label placement is only advisable if the label's rendering is such that it is not crossed by its edge and thus stays legible."),!1),wNt),cot),ggn(uNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,htt),"font"),"Font Name"),"Font name used for a label."),kNt),$ot),ggn(uNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,ftt),"font"),"Font Size"),"Font size used for a label."),mNt),dot),ggn(uNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,h9n),vtt),"Port Anchor Offset"),"The offset to the port position where connections shall be attached."),vNt),PNt),ggn(fNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,o9n),vtt),"Port Index"),"The index of a port in the fixed order around a node. The order is assumed as clockwise, starting with the leftmost port on the top side. This option must be set if 'Port Constraints' is set to FIXED_ORDER and no specific positions are given for the ports. Additionally, the option 'Port Side' must be defined in this case."),mNt),dot),ggn(fNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,G8n),vtt),"Port Side"),"The side of a node on which a port is situated. This option must be set if 'Port Constraints' is set to FIXED_SIDE or FIXED_ORDER and no specific positions are given for the ports."),pDt),gNt),YRt),ggn(fNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,H8n),vtt),"Port Border Offset"),"The offset of ports on the node border. With a positive offset the port is moved outside of the node, while with a negative offset the port is moved towards the inside. An offset of 0 means that the port is placed directly on the node border, i.e. if the port side is north, the port's south border touches the nodes's north border; if the port side is east, the port's west border touches the nodes's east border; if the port side is south, the port's north border touches the node's south border; if the port side is west, the port's east border touches the node's west border."),dNt),fot),ggn(fNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,v4n),ktt),"Port Label Placement"),"Decides on a placement method for port labels; if empty, the node label's position is not modified."),wDt),pNt),BRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,J8n),ktt),"Port Labels Next to Port"),"Use 'portLabels.placement': NEXT_TO_PORT_OF_POSSIBLE."),!1),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Y8n),ktt),"Treat Port Labels as Group"),"If this option is true (default), the labels of a port will be treated as a group when it comes to centering them next to their port. If this option is false, only the first label will be centered next to the port, with the others being placed below. This only applies to labels of eastern and western ports and will have no effect if labels are not placed next to their port."),!0),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,y4n),ytt),"Topdown Scale Factor"),"The scaling factor to be applied to the nodes laid out within the node in recursive topdown layout. The difference to 'Scale Factor' is that the node itself is not scaled. This value has to be set on hierarchical nodes."),1),dNt),fot),ggn(hNt)))),H4(n,y4n,j4n,zDt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,ltt),ytt),"Topdown Size Approximator"),"The size approximator to be used to set sizes of hierarchical nodes during topdown layout. The default value is null, which results in nodes keeping whatever size is defined for them e.g. through parent parallel node or by manually setting the size."),null),gNt),jKt),ggn(sNt)))),H4(n,ltt,j4n,WDt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,M4n),ytt),"Topdown Hierarchical Node Width"),"The fixed size of a hierarchical node when using topdown layout. If this value is set on a parallel node it applies to its children, when set on a hierarchical node it applies to the node itself."),150),dNt),fot),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[sNt]))))),H4(n,M4n,j4n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,T4n),ytt),"Topdown Hierarchical Node Aspect Ratio"),"The fixed aspect ratio of a hierarchical node when using topdown layout. Default is 1/sqrt(2). If this value is set on a parallel node it applies to its children, when set on a hierarchical node it applies to the node itself."),1.414),dNt),fot),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[sNt]))))),H4(n,T4n,j4n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,j4n),ytt),"Topdown Node Type"),"The different node types used for topdown layout. If the node type is set to {@link TopdownNodeTypes.PARALLEL_NODE} the algorithm must be set to a {@link TopdownLayoutProvider} such as {@link TopdownPacking}. The {@link nodeSize.fixedGraphSize} option is technically only required for hierarchical nodes."),null),gNt),mKt),ggn(sNt)))),H4(n,j4n,d4n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,btt),ytt),"Topdown Scale Cap"),"Determines the upper limit for the topdown scale factor. The default value is 1.0 which ensures that nested children never end up appearing larger than their parents in terms of unit sizes such as the font size. If the limit is larger, nodes will fully utilize the available space, but it is counteriniuitive for inner nodes to have a larger scale than outer nodes."),1),dNt),fot),ggn(hNt)))),H4(n,btt,j4n,qDt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,z8n),Mtt),"Activate Inside Self Loops"),"Whether this node allows to route self loops inside of it instead of around it. If set to true, this will make the node a compound node if it isn't already, and will require the layout algorithm to support compound nodes with hierarchical ports."),!1),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,V8n),Mtt),"Inside Self Loop"),"Whether a self loop should be routed inside a node instead of around that node."),!1),wNt),cot),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,x3n),"edge"),"Edge Thickness"),"The thickness of an edge. This is a hint on the line width used to draw an edge, possibly requiring more space to be reserved for it."),1),dNt),fot),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,wtt),"edge"),"Edge Type"),"The type of an edge. This is usually used for UML class diagrams, where associations must be handled differently from generalizations."),T$t),gNt),Lxt),ggn(oNt)))),sP(n,new I2(BT(UT(HT(new du,S0n),"Layered"),'The layer-based method was introduced by Sugiyama, Tagawa and Toda in 1981. It emphasizes the direction of edges by pointing as many edges as possible into the same direction. The nodes are arranged in layers, which are sometimes called "hierarchies", and then reordered such that the number of edge crossings is minimized. Afterwards, concrete coordinates are computed for the nodes and edge bend points.'))),sP(n,new I2(BT(UT(HT(new du,"org.eclipse.elk.orthogonal"),"Orthogonal"),'Orthogonal methods that follow the "topology-shape-metrics" approach by Batini, Nardelli and Tamassia \'86. The first phase determines the topology of the drawing by applying a planarization technique, which results in a planar representation of the graph. The orthogonal shape is computed in the second phase, which aims at minimizing the number of edge bends, and is called orthogonalization. The third phase leads to concrete coordinates for nodes and edge bend points by applying a compaction method, thus defining the metrics.'))),sP(n,new I2(BT(UT(HT(new du,c4n),"Force"),"Layout algorithms that follow physical analogies by simulating a system of attractive and repulsive forces. The first successful method of this kind was proposed by Eades in 1984."))),sP(n,new I2(BT(UT(HT(new du,"org.eclipse.elk.circle"),"Circle"),"Circular layout algorithms emphasize cycles or biconnected components of a graph by arranging them in circles. This is useful if a drawing is desired where such components are clearly grouped, or where cycles are shown as prominent OPTIONS of the graph."))),sP(n,new I2(BT(UT(HT(new du,a7n),"Tree"),"Specialized layout methods for trees, i.e. acyclic graphs. The regular structure of graphs that have no undirected cycles can be emphasized using an algorithm of this type."))),sP(n,new I2(BT(UT(HT(new du,"org.eclipse.elk.planar"),"Planar"),"Algorithms that require a planar or upward planar graph. Most of these algorithms are theoretically interesting, but not practically usable."))),sP(n,new I2(BT(UT(HT(new du,x7n),"Radial"),"Radial layout algorithms usually position the nodes of the graph on concentric circles."))),kHn((new xl,n)),YUn((new $l,n)),A_n((new Rl,n))},zW(Unt,"CoreOptions",699),sDn(88,22,{3:1,34:1,22:1,88:1},PO);var ext,ixt,rxt,cxt,axt=_cn(Unt,l3n,88,Oat,H8,sU);sDn(278,22,{3:1,34:1,22:1,278:1},CO);var oxt,uxt,sxt,hxt,fxt,lxt=_cn(Unt,"EdgeLabelPlacement",278,Oat,y3,hU);sDn(223,22,{3:1,34:1,22:1,223:1},IO);var bxt,wxt,dxt,gxt,pxt,mxt,vxt,kxt=_cn(Unt,"EdgeRouting",223,Oat,u5,fU);sDn(321,22,{3:1,34:1,22:1,321:1},OO);var yxt,Mxt,Txt,jxt,Ext,Sxt,Pxt,Cxt,Ixt,Oxt,Axt,Lxt=_cn(Unt,"EdgeType",321,Oat,Jnn,lU);sDn(989,1,K2n,xl),uZn.hf=function(n){kHn(n)},zW(Unt,"FixedLayouterOptions",989),sDn(990,1,{},Ku),uZn.sf=function(){return new Wu},uZn.tf=function(n){},zW(Unt,"FixedLayouterOptions/FixedFactory",990),sDn(346,22,{3:1,34:1,22:1,346:1},AO);var Nxt,$xt,Dxt,xxt,Rxt,Kxt=_cn(Unt,"HierarchyHandling",346,Oat,v3,bU);sDn(291,22,{3:1,34:1,22:1,291:1},LO);var Fxt,_xt,Bxt,Hxt,Uxt,Gxt,qxt,Xxt,zxt,Vxt,Wxt=_cn(Unt,"LabelSide",291,Oat,o5,wU);sDn(95,22,{3:1,34:1,22:1,95:1},NO);var Qxt,Jxt,Yxt,Zxt,nRt,tRt,eRt=_cn(Unt,"NodeLabelPlacement",95,Oat,bcn,dU);sDn(256,22,{3:1,34:1,22:1,256:1},$O);var iRt,rRt,cRt,aRt,oRt,uRt,sRt,hRt=_cn(Unt,"PortAlignment",256,Oat,p9,gU);sDn(101,22,{3:1,34:1,22:1,101:1},DO);var fRt,lRt,bRt,wRt,dRt,gRt,pRt,mRt=_cn(Unt,"PortConstraints",101,Oat,Qnn,pU);sDn(279,22,{3:1,34:1,22:1,279:1},xO);var vRt,kRt,yRt,MRt,TRt,jRt,ERt,SRt,PRt,CRt,IRt,ORt,ARt,LRt,NRt,$Rt,DRt,xRt,RRt,KRt,FRt,_Rt,BRt=_cn(Unt,"PortLabelPlacement",279,Oat,Wnn,mU);sDn(64,22,{3:1,34:1,22:1,64:1},RO);var HRt,URt,GRt,qRt,XRt,zRt,VRt,WRt,QRt,JRt,YRt=_cn(Unt,"PortSide",64,Oat,U8,vU);sDn(993,1,K2n,Rl),uZn.hf=function(n){A_n(n)},zW(Unt,"RandomLayouterOptions",993),sDn(994,1,{},Fu),uZn.sf=function(){return new Xu},uZn.tf=function(n){},zW(Unt,"RandomLayouterOptions/RandomFactory",994),sDn(386,22,{3:1,34:1,22:1,386:1},KO);var ZRt,nKt,tKt,eKt,iKt,rKt,cKt,aKt,oKt,uKt,sKt=_cn(Unt,"SizeConstraint",386,Oat,a5,kU);sDn(264,22,{3:1,34:1,22:1,264:1},FO);var hKt,fKt,lKt,bKt,wKt=_cn(Unt,"SizeOptions",264,Oat,Man,yU);sDn(280,22,{3:1,34:1,22:1,280:1},_O);var dKt,gKt,pKt,mKt=_cn(Unt,"TopdownNodeTypes",280,Oat,M3,MU);sDn(347,22,Ett);var vKt,kKt,yKt,MKt,TKt,jKt=_cn(Unt,"TopdownSizeApproximator",347,Oat,I1,jU);sDn(987,347,Ett,Pq),uZn.Tg=function(n){return sMn(n)},_cn(Unt,"TopdownSizeApproximator/1",987,jKt,null,null),sDn(988,347,Ett,gV),uZn.Tg=function(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k;for(t=uG(zDn(n,(XYn(),yDt)),143),gj(),aKn(p=new Bk,n),m=new Ym,a=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));a.e!=a.i.gc();)r=uG(Zkn(a),27),GRn(b=new Bk,p),aKn(b,r),k=sMn(r),vN(b,e.Math.max(r.g,k.a),e.Math.max(r.f,k.b)),VAn(m.f,r,b);for(c=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));c.e!=c.i.gc();)for(s=new DD((!(r=uG(Zkn(c),27)).e&&(r.e=new f_(aFt,r,7,4)),r.e));s.e!=s.i.gc();)u=uG(Zkn(s),74),d=uG(DA(FX(m.f,r)),27),g=uG(cQ(m,zrn((!u.c&&(u.c=new f_(cFt,u,5,8)),u.c),0)),27),ttn((!(w=new es).b&&(w.b=new f_(cFt,w,4,7)),w.b),d),ttn((!w.c&&(w.c=new f_(cFt,w,5,8)),w.c),g),ARn(w,R0(d)),aKn(w,u);h=uG(A1(t.f),205);try{h.rf(p,new Zu),WQ(t.f,h)}catch(y){throw F$(y=Ehn(y),103),hv(y)}return vnn(p,h$t)||vnn(p,s$t)||VJn(p),o=uM(pK(zDn(p,h$t)))/uM(pK(zDn(p,s$t))),i=uM(pK(zDn(p,BDt)))*e.Math.sqrt((!p.a&&(p.a=new fV(bFt,p,10,11)),p.a).i),l=(v=uG(zDn(p,W$t),107)).b+v.c+1,f=v.d+v.a+1,new MO(e.Math.max(l,i),e.Math.max(f,i/o))},_cn(Unt,"TopdownSizeApproximator/2",988,jKt,null,null),sDn(344,1,{871:1},fy),uZn.Ug=function(n,t){return dCn(this,n,t)},uZn.Vg=function(){POn(this)},uZn.Wg=function(){return this.q},uZn.Xg=function(){return this.f?SZ(this.f):null},uZn.Yg=function(){return SZ(this.a)},uZn.Zg=function(){return this.p},uZn.$g=function(){return!1},uZn._g=function(){return this.n},uZn.ah=function(){return null!=this.p&&!this.b},uZn.bh=function(n){var t;this.n&&(t=n,kD(this.f,t))},uZn.dh=function(n,t){var e,i;this.n&&n&&n4(this,(i=oUn(e=new DW,n),_Wn(e),i),(Eln(),CKt))},uZn.eh=function(n){var t;return this.b?null:(t=irn(this,this.g),aq(this.a,t),t.i=this,this.d=n,t)},uZn.fh=function(n){n>0&&!this.b&&Ban(this,n)},uZn.b=!1,uZn.c=0,uZn.d=-1,uZn.e=null,uZn.f=null,uZn.g=-1,uZn.j=!1,uZn.k=!1,uZn.n=!1,uZn.o=0,uZn.q=0,uZn.r=0,zW(p9n,"BasicProgressMonitor",344),sDn(717,205,M3n,_u),uZn.rf=function(n,t){XGn(n,t)},zW(p9n,"BoxLayoutProvider",717),sDn(983,1,b2n,qp),uZn.Ne=function(n,t){return tKn(this,uG(n,27),uG(t,27))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},uZn.a=!1,zW(p9n,"BoxLayoutProvider/1",983),sDn(163,1,{163:1},Jrn,nK),uZn.Ib=function(){return this.c?zBn(this.c):vIn(this.b)},zW(p9n,"BoxLayoutProvider/Group",163),sDn(320,22,{3:1,34:1,22:1,320:1},HO);var EKt,SKt=_cn(p9n,"BoxLayoutProvider/PackingMode",320,Oat,s5,EU);sDn(984,1,b2n,Bu),uZn.Ne=function(n,t){return rZ(uG(n,163),uG(t,163))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(p9n,"BoxLayoutProvider/lambda$0$Type",984),sDn(985,1,b2n,Hu),uZn.Ne=function(n,t){return GY(uG(n,163),uG(t,163))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(p9n,"BoxLayoutProvider/lambda$1$Type",985),sDn(986,1,b2n,Uu),uZn.Ne=function(n,t){return qY(uG(n,163),uG(t,163))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(p9n,"BoxLayoutProvider/lambda$2$Type",986),sDn(1384,1,{845:1},Gu),uZn.Mg=function(n,t){return ZS(),!F$(t,167)||Zj((Whn(),uG(n,167)),t)},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$0$Type",1384),sDn(1385,1,QZn,Xp),uZn.Cd=function(n){hbn(this.a,uG(n,149))},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$1$Type",1385),sDn(1386,1,QZn,zu),uZn.Cd=function(n){uG(n,96),ZS()},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$2$Type",1386),sDn(1390,1,QZn,zp),uZn.Cd=function(n){_on(this.a,uG(n,96))},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$3$Type",1390),sDn(1388,1,y1n,UO),uZn.Mb=function(n){return oln(this.a,this.b,uG(n,149))},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$4$Type",1388),sDn(1387,1,y1n,GO),uZn.Mb=function(n){return PR(this.a,this.b,uG(n,845))},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$5$Type",1387),sDn(1389,1,QZn,qO),uZn.Cd=function(n){iV(this.a,this.b,uG(n,149))},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$6$Type",1389),sDn(947,1,{},Vu),uZn.Kb=function(n){return oN(n)},uZn.Fb=function(n){return this===n},zW(p9n,"ElkUtil/lambda$0$Type",947),sDn(948,1,QZn,XO),uZn.Cd=function(n){JNn(this.a,this.b,uG(n,74))},uZn.a=0,uZn.b=0,zW(p9n,"ElkUtil/lambda$1$Type",948),sDn(949,1,QZn,zO),uZn.Cd=function(n){tM(this.a,this.b,uG(n,166))},uZn.a=0,uZn.b=0,zW(p9n,"ElkUtil/lambda$2$Type",949),sDn(950,1,QZn,VO),uZn.Cd=function(n){UN(this.a,this.b,uG(n,135))},uZn.a=0,uZn.b=0,zW(p9n,"ElkUtil/lambda$3$Type",950),sDn(951,1,QZn,Vp),uZn.Cd=function(n){Lq(this.a,uG(n,377))},zW(p9n,"ElkUtil/lambda$4$Type",951),sDn(325,1,{34:1,325:1},Jm),uZn.Fd=function(n){return wD(this,uG(n,242))},uZn.Fb=function(n){var t;return!!F$(n,325)&&(t=uG(n,325),this.a==t.a)},uZn.Hb=function(){return t0(this.a)},uZn.Ib=function(){return this.a+" (exclusive)"},uZn.a=0,zW(p9n,"ExclusiveBounds/ExclusiveLowerBound",325),sDn(1119,205,M3n,Wu),uZn.rf=function(n,t){var i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k,y,M,T,j;for(t.Ug("Fixed Layout",1),a=uG(zDn(n,(XYn(),k$t)),223),b=0,w=0,m=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));m.e!=m.i.gc();){for(g=uG(Zkn(m),27),(j=uG(zDn(g,(Iln(),Cxt)),8))&&(kN(g,j.a,j.b),uG(zDn(g,Txt),181).Hc((Qmn(),VRt))&&(d=uG(zDn(g,Ext),8)).a>0&&d.b>0&&ZQn(g,d.a,d.b,!0,!0)),b=e.Math.max(b,g.i+g.g),w=e.Math.max(w,g.j+g.f),f=new DD((!g.n&&(g.n=new fV(lFt,g,1,7)),g.n));f.e!=f.i.gc();)u=uG(Zkn(f),135),(j=uG(zDn(u,Cxt),8))&&kN(u,j.a,j.b),b=e.Math.max(b,g.i+u.i+u.g),w=e.Math.max(w,g.j+u.j+u.f);for(y=new DD((!g.c&&(g.c=new fV(wFt,g,9,9)),g.c));y.e!=y.i.gc();)for(k=uG(Zkn(y),123),(j=uG(zDn(k,Cxt),8))&&kN(k,j.a,j.b),M=g.i+k.i,T=g.j+k.j,b=e.Math.max(b,M+k.g),w=e.Math.max(w,T+k.f),s=new DD((!k.n&&(k.n=new fV(lFt,k,1,7)),k.n));s.e!=s.i.gc();)u=uG(Zkn(s),135),(j=uG(zDn(u,Cxt),8))&&kN(u,j.a,j.b),b=e.Math.max(b,M+u.i+u.g),w=e.Math.max(w,T+u.j+u.f);for(c=new Fz(ix(eRn(g).a.Kc(),new h));hDn(c);)l=iJn(i=uG(N9(c),74)),b=e.Math.max(b,l.a),w=e.Math.max(w,l.b);for(r=new Fz(ix(tRn(g).a.Kc(),new h));hDn(r);)R0(bIn(i=uG(N9(r),74)))!=n&&(l=iJn(i),b=e.Math.max(b,l.a),w=e.Math.max(w,l.b))}if(a==(_gn(),uxt))for(p=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));p.e!=p.i.gc();)for(r=new Fz(ix(eRn(g=uG(Zkn(p),27)).a.Kc(),new h));hDn(r);)0==(o=bGn(i=uG(N9(r),74))).b?Myn(i,L$t,null):Myn(i,L$t,o);oM(gK(zDn(n,(Iln(),jxt))))||ZQn(n,b+(v=uG(zDn(n,Sxt),107)).b+v.c,w+v.d+v.a,!0,!0),t.Vg()},zW(p9n,"FixedLayoutProvider",1119),sDn(385,137,{3:1,423:1,385:1,96:1,137:1},Qu,qen),uZn.cg=function(n){var t,e,i,r,c,a,o;if(n)try{for(a=WGn(n,";,;"),r=0,c=(i=a).length;r>16&D1n|n^(e&D1n)<<16},uZn.Kc=function(){return new Wp(this)},uZn.Ib=function(){return null==this.a&&null==this.b?"pair(null,null)":null==this.a?"pair(null,"+cpn(this.b)+")":null==this.b?"pair("+cpn(this.a)+",null)":"pair("+cpn(this.a)+","+cpn(this.b)+")"},zW(p9n,"Pair",42),sDn(995,1,$Zn,Wp),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return!this.c&&(!this.b&&null!=this.a.a||null!=this.a.b)},uZn.Pb=function(){if(!this.c&&!this.b&&null!=this.a.a)return this.b=!0,this.a.a;if(!this.c&&null!=this.a.b)return this.c=!0,this.a.b;throw hv(new Bv)},uZn.Qb=function(){throw this.c&&null!=this.a.b?this.a.b=null:this.b&&null!=this.a.a&&(this.a.a=null),hv(new xv)},uZn.b=!1,uZn.c=!1,zW(p9n,"Pair/1",995),sDn(455,1,{455:1},vY),uZn.Fb=function(n){return OJ(this.a,uG(n,455).a)&&OJ(this.c,uG(n,455).c)&&OJ(this.d,uG(n,455).d)&&OJ(this.b,uG(n,455).b)},uZn.Hb=function(){return Obn(Uhn(cT(dat,1),EZn,1,5,[this.a,this.c,this.d,this.b]))},uZn.Ib=function(){return"("+this.a+TZn+this.c+TZn+this.d+TZn+this.b+")"},zW(p9n,"Quadruple",455),sDn(1108,205,M3n,Xu),uZn.rf=function(n,t){var e;t.Ug("Random Layout",1),0!=(!n.a&&(n.a=new fV(bFt,n,10,11)),n.a).i?(vQn(n,(e=uG(zDn(n,(Wmn(),XRt)),17))&&0!=e.a?new v8(e.a):new Upn,sM(pK(zDn(n,URt))),sM(pK(zDn(n,zRt))),uG(zDn(n,GRt),107)),t.Vg()):t.Vg()},zW(p9n,"RandomLayoutProvider",1108),sDn(240,1,{240:1},LU),uZn.Fb=function(n){return OJ(this.a,uG(n,240).a)&&OJ(this.b,uG(n,240).b)&&OJ(this.c,uG(n,240).c)},uZn.Hb=function(){return Obn(Uhn(cT(dat,1),EZn,1,5,[this.a,this.b,this.c]))},uZn.Ib=function(){return"("+this.a+TZn+this.b+TZn+this.c+")"},zW(p9n,"Triple",240),sDn(562,1,{}),uZn.Lf=function(){return new MO(this.f.i,this.f.j)},uZn.of=function(n){return QZ(n,(XYn(),uDt))?zDn(this.f,$Kt):zDn(this.f,n)},uZn.Mf=function(){return new MO(this.f.g,this.f.f)},uZn.Nf=function(){return this.g},uZn.pf=function(n){return vnn(this.f,n)},uZn.Of=function(n){ycn(this.f,n.a),Mcn(this.f,n.b)},uZn.Pf=function(n){kcn(this.f,n.a),vcn(this.f,n.b)},uZn.Qf=function(n){this.g=n},uZn.g=0,zW(Ctt,"ElkGraphAdapters/AbstractElkGraphElementAdapter",562),sDn(563,1,{853:1},Qp),uZn.Rf=function(){var n,t;if(!this.b)for(this.b=o6(xJ(this.a).i),t=new DD(xJ(this.a));t.e!=t.i.gc();)n=uG(Zkn(t),135),kD(this.b,new Wy(n));return this.b},uZn.b=null,zW(Ctt,"ElkGraphAdapters/ElkEdgeAdapter",563),sDn(289,562,{},Vy),uZn.Sf=function(){return FTn(this)},uZn.a=null,zW(Ctt,"ElkGraphAdapters/ElkGraphAdapter",289),sDn(640,562,{187:1},Wy),zW(Ctt,"ElkGraphAdapters/ElkLabelAdapter",640),sDn(639,562,{695:1},Wx),uZn.Rf=function(){return RTn(this)},uZn.Vf=function(){var n;return!(n=uG(zDn(this.f,(XYn(),$$t)),140))&&(n=new Nk),n},uZn.Xf=function(){return KTn(this)},uZn.Zf=function(n){var t;t=new zU(n),Myn(this.f,(XYn(),$$t),t)},uZn.$f=function(n){Myn(this.f,(XYn(),W$t),new VU(n))},uZn.Tf=function(){return this.d},uZn.Uf=function(){var n,t;if(!this.a)for(this.a=new Zm,t=new Fz(ix(tRn(uG(this.f,27)).a.Kc(),new h));hDn(t);)n=uG(N9(t),74),kD(this.a,new Qp(n));return this.a},uZn.Wf=function(){var n,t;if(!this.c)for(this.c=new Zm,t=new Fz(ix(eRn(uG(this.f,27)).a.Kc(),new h));hDn(t);)n=uG(N9(t),74),kD(this.c,new Qp(n));return this.c},uZn.Yf=function(){return 0!=wZ(uG(this.f,27)).i||oM(gK(uG(this.f,27).of((XYn(),C$t))))},uZn._f=function(){Xen(this,(vP(),NKt))},uZn.a=null,uZn.b=null,uZn.c=null,uZn.d=null,uZn.e=null,zW(Ctt,"ElkGraphAdapters/ElkNodeAdapter",639),sDn(1284,562,{852:1},Jp),uZn.Rf=function(){return rjn(this)},uZn.Uf=function(){var n,t;if(!this.a)for(this.a=iR(uG(this.f,123).hh().i),t=new DD(uG(this.f,123).hh());t.e!=t.i.gc();)n=uG(Zkn(t),74),kD(this.a,new Qp(n));return this.a},uZn.Wf=function(){var n,t;if(!this.c)for(this.c=iR(uG(this.f,123).ih().i),t=new DD(uG(this.f,123).ih());t.e!=t.i.gc();)n=uG(Zkn(t),74),kD(this.c,new Qp(n));return this.c},uZn.ag=function(){return uG(uG(this.f,123).of((XYn(),gDt)),64)},uZn.bg=function(){var n,t,e,i,r,c,a;for(i=h0(uG(this.f,123)),e=new DD(uG(this.f,123).ih());e.e!=e.i.gc();)for(a=new DD((!(n=uG(Zkn(e),74)).c&&(n.c=new f_(cFt,n,5,8)),n.c));a.e!=a.i.gc();){if(Ern(lCn(c=uG(Zkn(a),84)),i))return!0;if(lCn(c)==i&&oM(gK(zDn(n,(XYn(),I$t)))))return!0}for(t=new DD(uG(this.f,123).hh());t.e!=t.i.gc();)for(r=new DD((!(n=uG(Zkn(t),74)).b&&(n.b=new f_(cFt,n,4,7)),n.b));r.e!=r.i.gc();)if(Ern(lCn(uG(Zkn(r),84)),i))return!0;return!1},uZn.a=null,uZn.b=null,uZn.c=null,zW(Ctt,"ElkGraphAdapters/ElkPortAdapter",1284),sDn(1285,1,b2n,qu),uZn.Ne=function(n,t){return XBn(uG(n,123),uG(t,123))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(Ctt,"ElkGraphAdapters/PortComparator",1285);var xKt,RKt,KKt,FKt,_Kt,BKt,HKt,UKt,GKt,qKt,XKt,zKt,VKt,WKt,QKt,JKt,YKt,ZKt,nFt=Iq(Itt,"EObject"),tFt=Iq(Ott,Att),eFt=Iq(Ott,Ltt),iFt=Iq(Ott,Ntt),rFt=Iq(Ott,"ElkShape"),cFt=Iq(Ott,$tt),aFt=Iq(Ott,Dtt),oFt=Iq(Ott,xtt),uFt=Iq(Itt,Rtt),sFt=Iq(Itt,"EFactory"),hFt=Iq(Itt,Ktt),fFt=Iq(Itt,"EPackage"),lFt=Iq(Ott,Ftt),bFt=Iq(Ott,_tt),wFt=Iq(Ott,Btt);sDn(93,1,Htt),uZn.th=function(){return this.uh(),null},uZn.uh=function(){return null},uZn.vh=function(){return this.uh(),!1},uZn.wh=function(){return!1},uZn.xh=function(n){Msn(this,n)},zW(Utt,"BasicNotifierImpl",93),sDn(99,93,Jtt),uZn.Yh=function(){return uN(this)},uZn.yh=function(n,t){return n},uZn.zh=function(){throw hv(new Kv)},uZn.Ah=function(n){var t;return t=lMn(uG(ern(this.Dh(),this.Fh()),19)),this.Ph().Th(this,t.n,t.f,n)},uZn.Bh=function(n,t){throw hv(new Kv)},uZn.Ch=function(n,t,e){return $Un(this,n,t,e)},uZn.Dh=function(){var n;return this.zh()&&(n=this.zh().Nk())?n:this.ii()},uZn.Eh=function(){return J$n(this)},uZn.Fh=function(){throw hv(new Kv)},uZn.Gh=function(){var n,t;return!(t=this.$h().Ok())&&this.zh().Tk((jP(),t=null==(n=$1(eqn(this.Dh())))?tBt:new zx(this,n))),t},uZn.Hh=function(n,t){return n},uZn.Ih=function(n){return n.pk()?n.Lj():emn(this.Dh(),n)},uZn.Jh=function(){var n;return(n=this.zh())?n.Qk():null},uZn.Kh=function(){return this.zh()?this.zh().Nk():null},uZn.Lh=function(n,t,e){return Dyn(this,n,t,e)},uZn.Mh=function(n){return vtn(this,n)},uZn.Nh=function(n,t){return U9(this,n,t)},uZn.Oh=function(){var n;return!!(n=this.zh())&&n.Rk()},uZn.Ph=function(){throw hv(new Kv)},uZn.Qh=function(){return Kvn(this)},uZn.Rh=function(n,t,e,i){return kyn(this,n,t,i)},uZn.Sh=function(n,t,e){return uG(ern(this.Dh(),t),69).wk().zk(this,this.hi(),t-this.ji(),n,e)},uZn.Th=function(n,t,e,i){return O1(this,n,t,i)},uZn.Uh=function(n,t,e){return uG(ern(this.Dh(),t),69).wk().Ak(this,this.hi(),t-this.ji(),n,e)},uZn.Vh=function(){return!!this.zh()&&!!this.zh().Pk()},uZn.Wh=function(n){return Wkn(this,n)},uZn.Xh=function(n){return M0(this,n)},uZn.Zh=function(n){return jWn(this,n)},uZn.$h=function(){throw hv(new Kv)},uZn._h=function(){return this.zh()?this.zh().Pk():null},uZn.ai=function(){return Kvn(this)},uZn.bi=function(n,t){sLn(this,n,t)},uZn.ci=function(n){this.$h().Sk(n)},uZn.di=function(n){this.$h().Vk(n)},uZn.ei=function(n){this.$h().Uk(n)},uZn.fi=function(n,t){var e,i,r,c;return(c=this.Jh())&&n&&(t=Nyn(c.El(),this,t),c.Il(this)),(i=this.Ph())&&(PHn(this,this.Ph(),this.Fh()).Bb&P0n?(r=i.Qh())&&(n?!c&&r.Il(this):r.Hl(this)):(t=(e=this.Fh())>=0?this.Ah(t):this.Ph().Th(this,-1-e,null,t),t=this.Ch(null,-1,t))),this.di(n),t},uZn.gi=function(n){var t,e,i,r,c,a,o;if((c=emn(e=this.Dh(),n))>=(t=this.ji()))return uG(n,69).wk().Dk(this,this.hi(),c-t);if(c<=-1){if(!(a=iVn((gAn(),kBt),e,n)))throw hv(new vM(Gtt+n.xe()+ztt));if(PP(),uG(a,69).xk()||(a=_3(Nen(kBt,a))),r=uG((i=this.Ih(a))>=0?this.Lh(i,!0,!0):YNn(this,a,!0),160),(o=a.Ik())>1||-1==o)return uG(uG(r,220).Sl(n,!1),79)}else if(n.Jk())return uG((i=this.Ih(n))>=0?this.Lh(i,!1,!0):YNn(this,n,!1),79);return new jA(this,n)},uZn.hi=function(){return Wen(this)},uZn.ii=function(){return(tQ(),M_t).S},uZn.ji=function(){return iQ(this.ii())},uZn.ki=function(n){oAn(this,n)},uZn.Ib=function(){return vxn(this)},zW(Ytt,"BasicEObjectImpl",99),sDn(119,99,{110:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1}),uZn.li=function(n){return Ven(this)[n]},uZn.mi=function(n,t){uQ(Ven(this),n,t)},uZn.ni=function(n){uQ(Ven(this),n,null)},uZn.th=function(){return uG(Lsn(this,4),129)},uZn.uh=function(){throw hv(new Kv)},uZn.vh=function(){return!!(4&this.Db)},uZn.zh=function(){throw hv(new Kv)},uZn.oi=function(n){Dvn(this,2,n)},uZn.Bh=function(n,t){this.Db=t<<16|255&this.Db,this.oi(n)},uZn.Dh=function(){return e1(this)},uZn.Fh=function(){return this.Db>>16},uZn.Gh=function(){var n;return jP(),null==(n=$1(eqn(uG(Lsn(this,16),29)||this.ii())))?tBt:new zx(this,n)},uZn.wh=function(){return!(1&this.Db)},uZn.Jh=function(){return uG(Lsn(this,128),2034)},uZn.Kh=function(){return uG(Lsn(this,16),29)},uZn.Oh=function(){return!!(32&this.Db)},uZn.Ph=function(){return uG(Lsn(this,2),54)},uZn.Vh=function(){return!!(64&this.Db)},uZn.$h=function(){throw hv(new Kv)},uZn._h=function(){return uG(Lsn(this,64),288)},uZn.ci=function(n){Dvn(this,16,n)},uZn.di=function(n){Dvn(this,128,n)},uZn.ei=function(n){Dvn(this,64,n)},uZn.hi=function(){return $vn(this)},uZn.Db=0,zW(Ytt,"MinimalEObjectImpl",119),sDn(120,119,{110:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),uZn.oi=function(n){this.Cb=n},uZn.Ph=function(){return this.Cb},zW(Ytt,"MinimalEObjectImpl/Container",120),sDn(2083,120,{110:1,342:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),uZn.Lh=function(n,t,e){return ajn(this,n,t,e)},uZn.Uh=function(n,t,e){return BIn(this,n,t,e)},uZn.Wh=function(n){return j4(this,n)},uZn.bi=function(n,t){bln(this,n,t)},uZn.ii=function(){return tYn(),VKt},uZn.ki=function(n){ffn(this,n)},uZn.nf=function(){return Qkn(this)},uZn.gh=function(){return!this.o&&(this.o=new ltn((tYn(),XKt),EFt,this,0)),this.o},uZn.of=function(n){return zDn(this,n)},uZn.pf=function(n){return vnn(this,n)},uZn.qf=function(n,t){return Myn(this,n,t)},zW(Ztt,"EMapPropertyHolderImpl",2083),sDn(572,120,{110:1,377:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},ns),uZn.Lh=function(n,t,e){switch(n){case 0:return this.a;case 1:return this.b}return Dyn(this,n,t,e)},uZn.Wh=function(n){switch(n){case 0:return 0!=this.a;case 1:return 0!=this.b}return Wkn(this,n)},uZn.bi=function(n,t){switch(n){case 0:return void Scn(this,uM(pK(t)));case 1:return void pcn(this,uM(pK(t)))}sLn(this,n,t)},uZn.ii=function(){return tYn(),KKt},uZn.ki=function(n){switch(n){case 0:return void Scn(this,0);case 1:return void pcn(this,0)}oAn(this,n)},uZn.Ib=function(){var n;return 64&this.Db?vxn(this):((n=new fx(vxn(this))).a+=" (x: ",Oj(n,this.a),n.a+=", y: ",Oj(n,this.b),n.a+=")",n.a)},uZn.a=0,uZn.b=0,zW(Ztt,"ElkBendPointImpl",572),sDn(739,2083,{110:1,342:1,167:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),uZn.Lh=function(n,t,e){return Xdn(this,n,t,e)},uZn.Sh=function(n,t,e){return SCn(this,n,t,e)},uZn.Uh=function(n,t,e){return phn(this,n,t,e)},uZn.Wh=function(n){return _sn(this,n)},uZn.bi=function(n,t){CSn(this,n,t)},uZn.ii=function(){return tYn(),HKt},uZn.ki=function(n){Awn(this,n)},uZn.jh=function(){return this.k},uZn.kh=function(){return xJ(this)},uZn.Ib=function(){return Egn(this)},uZn.k=null,zW(Ztt,"ElkGraphElementImpl",739),sDn(740,739,{110:1,342:1,167:1,422:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),uZn.Lh=function(n,t,e){return spn(this,n,t,e)},uZn.Wh=function(n){return Kpn(this,n)},uZn.bi=function(n,t){ISn(this,n,t)},uZn.ii=function(){return tYn(),zKt},uZn.ki=function(n){Tmn(this,n)},uZn.lh=function(){return this.f},uZn.mh=function(){return this.g},uZn.nh=function(){return this.i},uZn.oh=function(){return this.j},uZn.ph=function(n,t){vN(this,n,t)},uZn.qh=function(n,t){kN(this,n,t)},uZn.rh=function(n){ycn(this,n)},uZn.sh=function(n){Mcn(this,n)},uZn.Ib=function(){return rOn(this)},uZn.f=0,uZn.g=0,uZn.i=0,uZn.j=0,zW(Ztt,"ElkShapeImpl",740),sDn(741,740,{110:1,342:1,84:1,167:1,422:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),uZn.Lh=function(n,t,e){return SMn(this,n,t,e)},uZn.Sh=function(n,t,e){return tSn(this,n,t,e)},uZn.Uh=function(n,t,e){return eSn(this,n,t,e)},uZn.Wh=function(n){return iln(this,n)},uZn.bi=function(n,t){SDn(this,n,t)},uZn.ii=function(){return tYn(),FKt},uZn.ki=function(n){yyn(this,n)},uZn.hh=function(){return!this.d&&(this.d=new f_(aFt,this,8,5)),this.d},uZn.ih=function(){return!this.e&&(this.e=new f_(aFt,this,7,4)),this.e},zW(Ztt,"ElkConnectableShapeImpl",741),sDn(326,739,{110:1,342:1,74:1,167:1,326:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},es),uZn.Ah=function(n){return sEn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 3:return s0(this);case 4:return!this.b&&(this.b=new f_(cFt,this,4,7)),this.b;case 5:return!this.c&&(this.c=new f_(cFt,this,5,8)),this.c;case 6:return!this.a&&(this.a=new fV(oFt,this,6,6)),this.a;case 7:return qx(),!this.b&&(this.b=new f_(cFt,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new f_(cFt,this,5,8)),this.c.i<=1));case 8:return qx(),!!z$n(this);case 9:return qx(),!!BNn(this);case 10:return qx(),!this.b&&(this.b=new f_(cFt,this,4,7)),0!=this.b.i&&(!this.c&&(this.c=new f_(cFt,this,5,8)),0!=this.c.i)}return Xdn(this,n,t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 3:return this.Cb&&(e=(i=this.Db>>16)>=0?sEn(this,e):this.Cb.Th(this,-1-i,null,e)),nF(this,uG(n,27),e);case 4:return!this.b&&(this.b=new f_(cFt,this,4,7)),Nmn(this.b,n,e);case 5:return!this.c&&(this.c=new f_(cFt,this,5,8)),Nmn(this.c,n,e);case 6:return!this.a&&(this.a=new fV(oFt,this,6,6)),Nmn(this.a,n,e)}return SCn(this,n,t,e)},uZn.Uh=function(n,t,e){switch(t){case 3:return nF(this,null,e);case 4:return!this.b&&(this.b=new f_(cFt,this,4,7)),Nyn(this.b,n,e);case 5:return!this.c&&(this.c=new f_(cFt,this,5,8)),Nyn(this.c,n,e);case 6:return!this.a&&(this.a=new fV(oFt,this,6,6)),Nyn(this.a,n,e)}return phn(this,n,t,e)},uZn.Wh=function(n){switch(n){case 3:return!!s0(this);case 4:return!!this.b&&0!=this.b.i;case 5:return!!this.c&&0!=this.c.i;case 6:return!!this.a&&0!=this.a.i;case 7:return!this.b&&(this.b=new f_(cFt,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new f_(cFt,this,5,8)),this.c.i<=1));case 8:return z$n(this);case 9:return BNn(this);case 10:return!this.b&&(this.b=new f_(cFt,this,4,7)),0!=this.b.i&&(!this.c&&(this.c=new f_(cFt,this,5,8)),0!=this.c.i)}return _sn(this,n)},uZn.bi=function(n,t){switch(n){case 3:return void ARn(this,uG(t,27));case 4:return!this.b&&(this.b=new f_(cFt,this,4,7)),Czn(this.b),!this.b&&(this.b=new f_(cFt,this,4,7)),void CW(this.b,uG(t,16));case 5:return!this.c&&(this.c=new f_(cFt,this,5,8)),Czn(this.c),!this.c&&(this.c=new f_(cFt,this,5,8)),void CW(this.c,uG(t,16));case 6:return!this.a&&(this.a=new fV(oFt,this,6,6)),Czn(this.a),!this.a&&(this.a=new fV(oFt,this,6,6)),void CW(this.a,uG(t,16))}CSn(this,n,t)},uZn.ii=function(){return tYn(),_Kt},uZn.ki=function(n){switch(n){case 3:return void ARn(this,null);case 4:return!this.b&&(this.b=new f_(cFt,this,4,7)),void Czn(this.b);case 5:return!this.c&&(this.c=new f_(cFt,this,5,8)),void Czn(this.c);case 6:return!this.a&&(this.a=new fV(oFt,this,6,6)),void Czn(this.a)}Awn(this,n)},uZn.Ib=function(){return SXn(this)},zW(Ztt,"ElkEdgeImpl",326),sDn(452,2083,{110:1,342:1,166:1,452:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},is),uZn.Ah=function(n){return zjn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 1:return this.j;case 2:return this.k;case 3:return this.b;case 4:return this.c;case 5:return!this.a&&(this.a=new MD(eFt,this,5)),this.a;case 6:return f0(this);case 7:return t?fMn(this):this.i;case 8:return t?hMn(this):this.f;case 9:return!this.g&&(this.g=new f_(oFt,this,9,10)),this.g;case 10:return!this.e&&(this.e=new f_(oFt,this,10,9)),this.e;case 11:return this.d}return ajn(this,n,t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?zjn(this,e):this.Cb.Th(this,-1-i,null,e)),ZK(this,uG(n,74),e);case 9:return!this.g&&(this.g=new f_(oFt,this,9,10)),Nmn(this.g,n,e);case 10:return!this.e&&(this.e=new f_(oFt,this,10,9)),Nmn(this.e,n,e)}return uG(ern(uG(Lsn(this,16),29)||(tYn(),BKt),t),69).wk().zk(this,$vn(this),t-iQ((tYn(),BKt)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 5:return!this.a&&(this.a=new MD(eFt,this,5)),Nyn(this.a,n,e);case 6:return ZK(this,null,e);case 9:return!this.g&&(this.g=new f_(oFt,this,9,10)),Nyn(this.g,n,e);case 10:return!this.e&&(this.e=new f_(oFt,this,10,9)),Nyn(this.e,n,e)}return BIn(this,n,t,e)},uZn.Wh=function(n){switch(n){case 1:return 0!=this.j;case 2:return 0!=this.k;case 3:return 0!=this.b;case 4:return 0!=this.c;case 5:return!!this.a&&0!=this.a.i;case 6:return!!f0(this);case 7:return!!this.i;case 8:return!!this.f;case 9:return!!this.g&&0!=this.g.i;case 10:return!!this.e&&0!=this.e.i;case 11:return null!=this.d}return j4(this,n)},uZn.bi=function(n,t){switch(n){case 1:return void Tcn(this,uM(pK(t)));case 2:return void Ecn(this,uM(pK(t)));case 3:return void mcn(this,uM(pK(t)));case 4:return void jcn(this,uM(pK(t)));case 5:return!this.a&&(this.a=new MD(eFt,this,5)),Czn(this.a),!this.a&&(this.a=new MD(eFt,this,5)),void CW(this.a,uG(t,16));case 6:return void ORn(this,uG(t,74));case 7:return void zan(this,uG(t,84));case 8:return void Xan(this,uG(t,84));case 9:return!this.g&&(this.g=new f_(oFt,this,9,10)),Czn(this.g),!this.g&&(this.g=new f_(oFt,this,9,10)),void CW(this.g,uG(t,16));case 10:return!this.e&&(this.e=new f_(oFt,this,10,9)),Czn(this.e),!this.e&&(this.e=new f_(oFt,this,10,9)),void CW(this.e,uG(t,16));case 11:return void fon(this,mK(t))}bln(this,n,t)},uZn.ii=function(){return tYn(),BKt},uZn.ki=function(n){switch(n){case 1:return void Tcn(this,0);case 2:return void Ecn(this,0);case 3:return void mcn(this,0);case 4:return void jcn(this,0);case 5:return!this.a&&(this.a=new MD(eFt,this,5)),void Czn(this.a);case 6:return void ORn(this,null);case 7:return void zan(this,null);case 8:return void Xan(this,null);case 9:return!this.g&&(this.g=new f_(oFt,this,9,10)),void Czn(this.g);case 10:return!this.e&&(this.e=new f_(oFt,this,10,9)),void Czn(this.e);case 11:return void fon(this,null)}ffn(this,n)},uZn.Ib=function(){return A$n(this)},uZn.b=0,uZn.c=0,uZn.d=null,uZn.j=0,uZn.k=0,zW(Ztt,"ElkEdgeSectionImpl",452),sDn(158,120,{110:1,94:1,93:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1}),uZn.Lh=function(n,t,e){return 0==n?(!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab):$tn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t,e)},uZn.Sh=function(n,t,e){return 0==t?(!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e)):uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().zk(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Uh=function(n,t,e){return 0==t?(!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e)):uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().Ak(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Wh=function(n){return 0==n?!!this.Ab&&0!=this.Ab.i:l5(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.Zh=function(n){return VQn(this,n)},uZn.bi=function(n,t){if(0===n)return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));lpn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t)},uZn.di=function(n){Dvn(this,128,n)},uZn.ii=function(){return YYn(),$_t},uZn.ki=function(n){if(0===n)return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);sdn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.pi=function(){this.Bb|=1},uZn.qi=function(n){return GUn(this,n)},uZn.Bb=0,zW(Ytt,"EModelElementImpl",158),sDn(720,158,{110:1,94:1,93:1,480:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1},Fl),uZn.ri=function(n,t){return cWn(this,n,t)},uZn.si=function(n){var t,e,i,r;if(this.a!=Hrn(n)||256&n.Bb)throw hv(new vM(cet+n.zb+eet));for(e=n1(n);0!=z5(e.a).i;){if(_Tn(t=uG(yVn(e,0,F$(r=uG(zrn(z5(e.a),0),89).c,90)?uG(r,29):(YYn(),x_t)),29)))return uG(i=Hrn(t).wi().si(t),54).ci(n),i;e=n1(t)}return"java.util.Map$Entry"==(null!=n.D?n.D:n.B)?new Eq(n):new BG(n)},uZn.ti=function(n,t){return cYn(this,n,t)},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.a}return $tn(this,n-iQ((YYn(),A_t)),ern(uG(Lsn(this,16),29)||A_t,n),t,e)},uZn.Sh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 1:return this.a&&(e=uG(this.a,54).Th(this,4,fFt,e)),ywn(this,uG(n,241),e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),A_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),A_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 1:return ywn(this,null,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),A_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),A_t)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return!!this.a}return l5(this,n-iQ((YYn(),A_t)),ern(uG(Lsn(this,16),29)||A_t,n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void yIn(this,uG(t,241))}lpn(this,n-iQ((YYn(),A_t)),ern(uG(Lsn(this,16),29)||A_t,n),t)},uZn.ii=function(){return YYn(),A_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void yIn(this,null)}sdn(this,n-iQ((YYn(),A_t)),ern(uG(Lsn(this,16),29)||A_t,n))},zW(Ytt,"EFactoryImpl",720),sDn(1037,720,{110:1,2113:1,94:1,93:1,480:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1},rs),uZn.ri=function(n,t){switch(n.hk()){case 12:return uG(t,149).Pg();case 13:return cpn(t);default:throw hv(new vM(tet+n.xe()+eet))}},uZn.si=function(n){var t;switch(-1==n.G&&(n.G=(t=Hrn(n))?Hyn(t.vi(),n):-1),n.G){case 4:return new cs;case 6:return new Bk;case 7:return new Hk;case 8:return new es;case 9:return new ns;case 10:return new is;case 11:return new as;default:throw hv(new vM(cet+n.zb+eet))}},uZn.ti=function(n,t){switch(n.hk()){case 13:case 12:return null;default:throw hv(new vM(tet+n.xe()+eet))}},zW(Ztt,"ElkGraphFactoryImpl",1037),sDn(448,158,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1}),uZn.Gh=function(){var n;return null==(n=$1(eqn(uG(Lsn(this,16),29)||this.ii())))?(jP(),jP(),tBt):new VR(this,n)},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.xe()}return $tn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb}return l5(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void this.ui(mK(t))}lpn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t)},uZn.ii=function(){return YYn(),D_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void this.ui(null)}sdn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.xe=function(){return this.zb},uZn.ui=function(n){qon(this,n)},uZn.Ib=function(){return Wwn(this)},uZn.zb=null,zW(Ytt,"ENamedElementImpl",448),sDn(184,448,{110:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,54:1,99:1,158:1,184:1,119:1,120:1,690:1},aZ),uZn.Ah=function(n){return Jjn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.yb;case 3:return this.xb;case 4:return this.sb;case 5:return!this.rb&&(this.rb=new vV(this,s_t,this)),this.rb;case 6:return!this.vb&&(this.vb=new i_(fFt,this,6,7)),this.vb;case 7:return t?this.Db>>16==7?uG(this.Cb,241):null:$0(this)}return $tn(this,n-iQ((YYn(),F_t)),ern(uG(Lsn(this,16),29)||F_t,n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 4:return this.sb&&(e=uG(this.sb,54).Th(this,1,sFt,e)),Jwn(this,uG(n,480),e);case 5:return!this.rb&&(this.rb=new vV(this,s_t,this)),Nmn(this.rb,n,e);case 6:return!this.vb&&(this.vb=new i_(fFt,this,6,7)),Nmn(this.vb,n,e);case 7:return this.Cb&&(e=(i=this.Db>>16)>=0?Jjn(this,e):this.Cb.Th(this,-1-i,null,e)),$Un(this,n,7,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),F_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),F_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 4:return Jwn(this,null,e);case 5:return!this.rb&&(this.rb=new vV(this,s_t,this)),Nyn(this.rb,n,e);case 6:return!this.vb&&(this.vb=new i_(fFt,this,6,7)),Nyn(this.vb,n,e);case 7:return $Un(this,null,7,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),F_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),F_t)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.yb;case 3:return null!=this.xb;case 4:return!!this.sb;case 5:return!!this.rb&&0!=this.rb.i;case 6:return!!this.vb&&0!=this.vb.i;case 7:return!!$0(this)}return l5(this,n-iQ((YYn(),F_t)),ern(uG(Lsn(this,16),29)||F_t,n))},uZn.Zh=function(n){return jKn(this,n)||VQn(this,n)},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void qon(this,mK(t));case 2:return void zon(this,mK(t));case 3:return void Xon(this,mK(t));case 4:return void HIn(this,uG(t,480));case 5:return!this.rb&&(this.rb=new vV(this,s_t,this)),Czn(this.rb),!this.rb&&(this.rb=new vV(this,s_t,this)),void CW(this.rb,uG(t,16));case 6:return!this.vb&&(this.vb=new i_(fFt,this,6,7)),Czn(this.vb),!this.vb&&(this.vb=new i_(fFt,this,6,7)),void CW(this.vb,uG(t,16))}lpn(this,n-iQ((YYn(),F_t)),ern(uG(Lsn(this,16),29)||F_t,n),t)},uZn.ei=function(n){var t,e;if(n&&this.rb)for(e=new DD(this.rb);e.e!=e.i.gc();)F$(t=Zkn(e),364)&&(uG(t,364).w=null);Dvn(this,64,n)},uZn.ii=function(){return YYn(),F_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void qon(this,null);case 2:return void zon(this,null);case 3:return void Xon(this,null);case 4:return void HIn(this,null);case 5:return!this.rb&&(this.rb=new vV(this,s_t,this)),void Czn(this.rb);case 6:return!this.vb&&(this.vb=new i_(fFt,this,6,7)),void Czn(this.vb)}sdn(this,n-iQ((YYn(),F_t)),ern(uG(Lsn(this,16),29)||F_t,n))},uZn.pi=function(){ojn(this)},uZn.vi=function(){return!this.rb&&(this.rb=new vV(this,s_t,this)),this.rb},uZn.wi=function(){return this.sb},uZn.xi=function(){return this.ub},uZn.yi=function(){return this.xb},uZn.zi=function(){return this.yb},uZn.Ai=function(n){this.ub=n},uZn.Ib=function(){var n;return 64&this.Db?Wwn(this):((n=new fx(Wwn(this))).a+=" (nsURI: ",VA(n,this.yb),n.a+=", nsPrefix: ",VA(n,this.xb),n.a+=")",n.a)},uZn.xb=null,uZn.yb=null,zW(Ytt,"EPackageImpl",184),sDn(569,184,{110:1,2115:1,569:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,54:1,99:1,158:1,184:1,119:1,120:1,690:1},iDn),uZn.q=!1,uZn.r=!1;var dFt=!1;zW(Ztt,"ElkGraphPackageImpl",569),sDn(366,740,{110:1,342:1,167:1,135:1,422:1,366:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},cs),uZn.Ah=function(n){return Vjn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 7:return x0(this);case 8:return this.a}return spn(this,n,t,e)},uZn.Sh=function(n,t,e){var i;return 7===t?(this.Cb&&(e=(i=this.Db>>16)>=0?Vjn(this,e):this.Cb.Th(this,-1-i,null,e)),dz(this,uG(n,167),e)):SCn(this,n,t,e)},uZn.Uh=function(n,t,e){return 7==t?dz(this,null,e):phn(this,n,t,e)},uZn.Wh=function(n){switch(n){case 7:return!!x0(this);case 8:return!m_("",this.a)}return Kpn(this,n)},uZn.bi=function(n,t){switch(n){case 7:return void vKn(this,uG(t,167));case 8:return void Van(this,mK(t))}ISn(this,n,t)},uZn.ii=function(){return tYn(),UKt},uZn.ki=function(n){switch(n){case 7:return void vKn(this,null);case 8:return void Van(this,"")}Tmn(this,n)},uZn.Ib=function(){return zOn(this)},uZn.a="",zW(Ztt,"ElkLabelImpl",366),sDn(207,741,{110:1,342:1,84:1,167:1,27:1,422:1,207:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},Bk),uZn.Ah=function(n){return hEn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 9:return!this.c&&(this.c=new fV(wFt,this,9,9)),this.c;case 10:return!this.a&&(this.a=new fV(bFt,this,10,11)),this.a;case 11:return R0(this);case 12:return!this.b&&(this.b=new fV(aFt,this,12,3)),this.b;case 13:return qx(),!this.a&&(this.a=new fV(bFt,this,10,11)),this.a.i>0}return SMn(this,n,t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 9:return!this.c&&(this.c=new fV(wFt,this,9,9)),Nmn(this.c,n,e);case 10:return!this.a&&(this.a=new fV(bFt,this,10,11)),Nmn(this.a,n,e);case 11:return this.Cb&&(e=(i=this.Db>>16)>=0?hEn(this,e):this.Cb.Th(this,-1-i,null,e)),n_(this,uG(n,27),e);case 12:return!this.b&&(this.b=new fV(aFt,this,12,3)),Nmn(this.b,n,e)}return tSn(this,n,t,e)},uZn.Uh=function(n,t,e){switch(t){case 9:return!this.c&&(this.c=new fV(wFt,this,9,9)),Nyn(this.c,n,e);case 10:return!this.a&&(this.a=new fV(bFt,this,10,11)),Nyn(this.a,n,e);case 11:return n_(this,null,e);case 12:return!this.b&&(this.b=new fV(aFt,this,12,3)),Nyn(this.b,n,e)}return eSn(this,n,t,e)},uZn.Wh=function(n){switch(n){case 9:return!!this.c&&0!=this.c.i;case 10:return!!this.a&&0!=this.a.i;case 11:return!!R0(this);case 12:return!!this.b&&0!=this.b.i;case 13:return!this.a&&(this.a=new fV(bFt,this,10,11)),this.a.i>0}return iln(this,n)},uZn.bi=function(n,t){switch(n){case 9:return!this.c&&(this.c=new fV(wFt,this,9,9)),Czn(this.c),!this.c&&(this.c=new fV(wFt,this,9,9)),void CW(this.c,uG(t,16));case 10:return!this.a&&(this.a=new fV(bFt,this,10,11)),Czn(this.a),!this.a&&(this.a=new fV(bFt,this,10,11)),void CW(this.a,uG(t,16));case 11:return void GRn(this,uG(t,27));case 12:return!this.b&&(this.b=new fV(aFt,this,12,3)),Czn(this.b),!this.b&&(this.b=new fV(aFt,this,12,3)),void CW(this.b,uG(t,16))}SDn(this,n,t)},uZn.ii=function(){return tYn(),GKt},uZn.ki=function(n){switch(n){case 9:return!this.c&&(this.c=new fV(wFt,this,9,9)),void Czn(this.c);case 10:return!this.a&&(this.a=new fV(bFt,this,10,11)),void Czn(this.a);case 11:return void GRn(this,null);case 12:return!this.b&&(this.b=new fV(aFt,this,12,3)),void Czn(this.b)}yyn(this,n)},uZn.Ib=function(){return zBn(this)},zW(Ztt,"ElkNodeImpl",207),sDn(193,741,{110:1,342:1,84:1,167:1,123:1,422:1,193:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},Hk),uZn.Ah=function(n){return Wjn(this,n)},uZn.Lh=function(n,t,e){return 9==n?h0(this):SMn(this,n,t,e)},uZn.Sh=function(n,t,e){var i;return 9===t?(this.Cb&&(e=(i=this.Db>>16)>=0?Wjn(this,e):this.Cb.Th(this,-1-i,null,e)),tF(this,uG(n,27),e)):tSn(this,n,t,e)},uZn.Uh=function(n,t,e){return 9==t?tF(this,null,e):eSn(this,n,t,e)},uZn.Wh=function(n){return 9==n?!!h0(this):iln(this,n)},uZn.bi=function(n,t){9!==n?SDn(this,n,t):LRn(this,uG(t,27))},uZn.ii=function(){return tYn(),qKt},uZn.ki=function(n){9!==n?yyn(this,n):LRn(this,null)},uZn.Ib=function(){return VBn(this)},zW(Ztt,"ElkPortImpl",193);var gFt=Iq(Pet,"BasicEMap/Entry");sDn(1122,120,{110:1,44:1,94:1,93:1,136:1,58:1,114:1,54:1,99:1,119:1,120:1},as),uZn.Fb=function(n){return this===n},uZn.ld=function(){return this.b},uZn.Hb=function(){return xx(this)},uZn.Di=function(n){Wan(this,uG(n,149))},uZn.Lh=function(n,t,e){switch(n){case 0:return this.b;case 1:return this.c}return Dyn(this,n,t,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.b;case 1:return null!=this.c}return Wkn(this,n)},uZn.bi=function(n,t){switch(n){case 0:return void Wan(this,uG(t,149));case 1:return void Han(this,t)}sLn(this,n,t)},uZn.ii=function(){return tYn(),XKt},uZn.ki=function(n){switch(n){case 0:return void Wan(this,null);case 1:return void Han(this,null)}oAn(this,n)},uZn.Bi=function(){var n;return-1==this.a&&(n=this.b,this.a=n?Hon(n):0),this.a},uZn.md=function(){return this.c},uZn.Ci=function(n){this.a=n},uZn.nd=function(n){var t;return t=this.c,Han(this,n),t},uZn.Ib=function(){var n;return 64&this.Db?vxn(this):(JA(JA(JA(n=new WM,this.b?this.b.Pg():IZn),Y4n),ox(this.c)),n.a)},uZn.a=-1,uZn.c=null;var pFt,mFt,vFt,kFt,yFt,MFt,TFt,jFt,EFt=zW(Ztt,"ElkPropertyToValueMapEntryImpl",1122);sDn(996,1,{},ss),zW(Oet,"JsonAdapter",996),sDn(216,63,S1n,SM),zW(Oet,"JsonImportException",216),sDn(868,1,{},Zjn),zW(Oet,"JsonImporter",868),sDn(903,1,{},QO),zW(Oet,"JsonImporter/lambda$0$Type",903),sDn(904,1,{},JO),zW(Oet,"JsonImporter/lambda$1$Type",904),sDn(912,1,{},Yp),zW(Oet,"JsonImporter/lambda$10$Type",912),sDn(914,1,{},YO),zW(Oet,"JsonImporter/lambda$11$Type",914),sDn(915,1,{},ZO),zW(Oet,"JsonImporter/lambda$12$Type",915),sDn(921,1,{},SY),zW(Oet,"JsonImporter/lambda$13$Type",921),sDn(920,1,{},PY),zW(Oet,"JsonImporter/lambda$14$Type",920),sDn(916,1,{},nA),zW(Oet,"JsonImporter/lambda$15$Type",916),sDn(917,1,{},tA),zW(Oet,"JsonImporter/lambda$16$Type",917),sDn(918,1,{},eA),zW(Oet,"JsonImporter/lambda$17$Type",918),sDn(919,1,{},iA),zW(Oet,"JsonImporter/lambda$18$Type",919),sDn(924,1,{},Zp),zW(Oet,"JsonImporter/lambda$19$Type",924),sDn(905,1,{},nm),zW(Oet,"JsonImporter/lambda$2$Type",905),sDn(922,1,{},tm),zW(Oet,"JsonImporter/lambda$20$Type",922),sDn(923,1,{},em),zW(Oet,"JsonImporter/lambda$21$Type",923),sDn(927,1,{},im),zW(Oet,"JsonImporter/lambda$22$Type",927),sDn(925,1,{},rm),zW(Oet,"JsonImporter/lambda$23$Type",925),sDn(926,1,{},cm),zW(Oet,"JsonImporter/lambda$24$Type",926),sDn(929,1,{},am),zW(Oet,"JsonImporter/lambda$25$Type",929),sDn(928,1,{},om),zW(Oet,"JsonImporter/lambda$26$Type",928),sDn(930,1,QZn,rA),uZn.Cd=function(n){ptn(this.b,this.a,mK(n))},zW(Oet,"JsonImporter/lambda$27$Type",930),sDn(931,1,QZn,cA),uZn.Cd=function(n){mtn(this.b,this.a,mK(n))},zW(Oet,"JsonImporter/lambda$28$Type",931),sDn(932,1,{},aA),zW(Oet,"JsonImporter/lambda$29$Type",932),sDn(908,1,{},um),zW(Oet,"JsonImporter/lambda$3$Type",908),sDn(933,1,{},oA),zW(Oet,"JsonImporter/lambda$30$Type",933),sDn(934,1,{},sm),zW(Oet,"JsonImporter/lambda$31$Type",934),sDn(935,1,{},hm),zW(Oet,"JsonImporter/lambda$32$Type",935),sDn(936,1,{},fm),zW(Oet,"JsonImporter/lambda$33$Type",936),sDn(937,1,{},lm),zW(Oet,"JsonImporter/lambda$34$Type",937),sDn(870,1,{},bm),zW(Oet,"JsonImporter/lambda$35$Type",870),sDn(941,1,{},DU),zW(Oet,"JsonImporter/lambda$36$Type",941),sDn(938,1,QZn,wm),uZn.Cd=function(n){V8(this.a,uG(n,377))},zW(Oet,"JsonImporter/lambda$37$Type",938),sDn(939,1,QZn,sA),uZn.Cd=function(n){vA(this.a,this.b,uG(n,166))},zW(Oet,"JsonImporter/lambda$38$Type",939),sDn(940,1,QZn,hA),uZn.Cd=function(n){kA(this.a,this.b,uG(n,166))},zW(Oet,"JsonImporter/lambda$39$Type",940),sDn(906,1,{},dm),zW(Oet,"JsonImporter/lambda$4$Type",906),sDn(942,1,QZn,gm),uZn.Cd=function(n){W8(this.a,uG(n,8))},zW(Oet,"JsonImporter/lambda$40$Type",942),sDn(907,1,{},pm),zW(Oet,"JsonImporter/lambda$5$Type",907),sDn(911,1,{},mm),zW(Oet,"JsonImporter/lambda$6$Type",911),sDn(909,1,{},vm),zW(Oet,"JsonImporter/lambda$7$Type",909),sDn(910,1,{},km),zW(Oet,"JsonImporter/lambda$8$Type",910),sDn(913,1,{},ym),zW(Oet,"JsonImporter/lambda$9$Type",913),sDn(961,1,QZn,Mm),uZn.Cd=function(n){pQ(this.a,new QW(mK(n)))},zW(Oet,"JsonMetaDataConverter/lambda$0$Type",961),sDn(962,1,QZn,Tm),uZn.Cd=function(n){SW(this.a,uG(n,245))},zW(Oet,"JsonMetaDataConverter/lambda$1$Type",962),sDn(963,1,QZn,jm),uZn.Cd=function(n){m2(this.a,uG(n,143))},zW(Oet,"JsonMetaDataConverter/lambda$2$Type",963),sDn(964,1,QZn,Em),uZn.Cd=function(n){PW(this.a,uG(n,170))},zW(Oet,"JsonMetaDataConverter/lambda$3$Type",964),sDn(245,22,{3:1,34:1,22:1,245:1},fA);var SFt,PFt=_cn(p3n,"GraphFeature",245,Oat,brn,QU);sDn(11,1,{34:1,149:1},Cm,uF,mL,_N),uZn.Fd=function(n){return dD(this,uG(n,149))},uZn.Fb=function(n){return QZ(this,n)},uZn.Sg=function(){return Jkn(this)},uZn.Pg=function(){return this.b},uZn.Hb=function(){return pln(this.b)},uZn.Ib=function(){return this.b},zW(p3n,"Property",11),sDn(671,1,b2n,Sm),uZn.Ne=function(n,t){return wgn(this,uG(n,96),uG(t,96))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(p3n,"PropertyHolderComparator",671),sDn(709,1,$Zn,Pm),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return Mtn(this)},uZn.Qb=function(){xj()},uZn.Ob=function(){return!!this.a},zW(qet,"ElkGraphUtil/AncestorIterator",709);var CFt=Iq(Pet,"EList");sDn(70,56,{20:1,31:1,56:1,16:1,15:1,70:1,61:1}),uZn.bd=function(n,t){$dn(this,n,t)},uZn.Fc=function(n){return ttn(this,n)},uZn.cd=function(n,t){return bfn(this,n,t)},uZn.Gc=function(n){return CW(this,n)},uZn.Ii=function(){return new nR(this)},uZn.Ji=function(){return new tR(this)},uZn.Ki=function(n){return han(this,n)},uZn.Li=function(){return!0},uZn.Mi=function(n,t){},uZn.Ni=function(){},uZn.Oi=function(n,t){Ann(this,n,t)},uZn.Pi=function(n,t,e){},uZn.Qi=function(n,t){},uZn.Ri=function(n,t,e){},uZn.Fb=function(n){return G_n(this,n)},uZn.Hb=function(){return Bhn(this)},uZn.Si=function(){return!1},uZn.Kc=function(){return new DD(this)},uZn.ed=function(){return new Zx(this)},uZn.fd=function(n){var t;if(t=this.gc(),n<0||n>t)throw hv(new w_(n,t));return new QV(this,n)},uZn.Ui=function(n,t){this.Ti(n,this.dd(t))},uZn.Mc=function(n){return rin(this,n)},uZn.Wi=function(n,t){return t},uZn.hd=function(n,t){return Uyn(this,n,t)},uZn.Ib=function(){return Tpn(this)},uZn.Yi=function(){return!0},uZn.Zi=function(n,t){return gln(this,t)},zW(Pet,"AbstractEList",70),sDn(66,70,Qet,ls,Drn,Hun),uZn.Ei=function(n,t){return PCn(this,n,t)},uZn.Fi=function(n){return QMn(this,n)},uZn.Gi=function(n,t){edn(this,n,t)},uZn.Hi=function(n){z9(this,n)},uZn.$i=function(n){return Otn(this,n)},uZn.$b=function(){V9(this)},uZn.Hc=function(n){return sSn(this,n)},uZn.Xb=function(n){return zrn(this,n)},uZn._i=function(n){var t,e,i;++this.j,n>(e=null==this.g?0:this.g.length)&&(i=this.g,(t=e+(e/2|0)+4)=0&&(this.gd(t),!0)},uZn.Xi=function(n,t){return this.Dj(n,this.Zi(n,t))},uZn.gc=function(){return this.Ej()},uZn.Pc=function(){return this.Fj()},uZn.Qc=function(n){return this.Gj(n)},uZn.Ib=function(){return this.Hj()},zW(Pet,"DelegatingEList",2093),sDn(2094,2093,_it),uZn.Ei=function(n,t){return dGn(this,n,t)},uZn.Fi=function(n){return this.Ei(this.Ej(),n)},uZn.Gi=function(n,t){cDn(this,n,t)},uZn.Hi=function(n){S$n(this,n)},uZn.Li=function(){return!this.Mj()},uZn.$b=function(){_zn(this)},uZn.Ij=function(n,t,e,i,r){return new zZ(this,n,t,e,i,r)},uZn.Jj=function(n){Msn(this.jj(),n)},uZn.Kj=function(){return null},uZn.Lj=function(){return-1},uZn.jj=function(){return null},uZn.Mj=function(){return!1},uZn.Nj=function(n,t){return t},uZn.Oj=function(n,t){return t},uZn.Pj=function(){return!1},uZn.Qj=function(){return!this.Aj()},uZn.Ti=function(n,t){var e,i;return this.Pj()?(i=this.Qj(),e=pIn(this,n,t),this.Jj(this.Ij(7,xwn(t),e,n,i)),e):pIn(this,n,t)},uZn.gd=function(n){var t,e,i,r;return this.Pj()?(e=null,i=this.Qj(),t=this.Ij(4,r=Oq(this,n),null,n,i),this.Mj()&&r?(e=this.Oj(r,e))?(e.nj(t),e.oj()):this.Jj(t):e?(e.nj(t),e.oj()):this.Jj(t),r):(r=Oq(this,n),this.Mj()&&r&&(e=this.Oj(r,null))&&e.oj(),r)},uZn.Xi=function(n,t){return gGn(this,n,t)},zW(Utt,"DelegatingNotifyingListImpl",2094),sDn(152,1,Bit),uZn.nj=function(n){return kPn(this,n)},uZn.oj=function(){Cen(this)},uZn.gj=function(){return this.d},uZn.Kj=function(){return null},uZn.Rj=function(){return null},uZn.hj=function(n){return-1},uZn.ij=function(){return OFn(this)},uZn.jj=function(){return null},uZn.kj=function(){return AFn(this)},uZn.lj=function(){return this.o<0?this.o<-2?-2-this.o-1:-1:this.o},uZn.Sj=function(){return!1},uZn.mj=function(n){var t,e,i,r,c,a,o,u;switch(this.d){case 1:case 2:switch(n.gj()){case 1:case 2:if(xA(n.jj())===xA(this.jj())&&this.hj(null)==n.hj(null))return this.g=n.ij(),1==n.gj()&&(this.d=1),!0}case 4:if(4===n.gj()&&xA(n.jj())===xA(this.jj())&&this.hj(null)==n.hj(null))return a=kVn(this),c=this.o<0?this.o<-2?-2-this.o-1:-1:this.o,i=n.lj(),this.d=6,u=new Drn(2),c<=i?(ttn(u,this.n),ttn(u,n.kj()),this.g=Uhn(cT(YHt,1),W1n,28,15,[this.o=c,i+1])):(ttn(u,n.kj()),ttn(u,this.n),this.g=Uhn(cT(YHt,1),W1n,28,15,[this.o=i,c])),this.n=u,a||(this.o=-2-this.o-1),!0;break;case 6:if(4===n.gj()&&xA(n.jj())===xA(this.jj())&&this.hj(null)==n.hj(null)){for(a=kVn(this),i=n.lj(),o=uG(this.g,53),e=Inn(YHt,W1n,28,o.length+1,15,1),t=0;t>>0).toString(16))).a+=" (eventType: ",this.d){case 1:e.a+="SET";break;case 2:e.a+="UNSET";break;case 3:e.a+="ADD";break;case 5:e.a+="ADD_MANY";break;case 4:e.a+="REMOVE";break;case 6:e.a+="REMOVE_MANY";break;case 7:e.a+="MOVE";break;case 8:e.a+="REMOVING_ADAPTER";break;case 9:e.a+="RESOLVE";break;default:Aj(e,this.d)}if(pHn(this)&&(e.a+=", touch: true"),e.a+=", position: ",Aj(e,this.o<0?this.o<-2?-2-this.o-1:-1:this.o),e.a+=", notifier: ",zA(e,this.jj()),e.a+=", feature: ",zA(e,this.Kj()),e.a+=", oldValue: ",zA(e,AFn(this)),e.a+=", newValue: ",6==this.d&&F$(this.g,53)){for(t=uG(this.g,53),e.a+="[",n=0;n10?(this.b&&this.c.j==this.a||(this.b=new oX(this),this.a=this.j),cS(this.b,n)):sSn(this,n)},uZn.Yi=function(){return!0},uZn.a=0,zW(Pet,"AbstractEList/1",966),sDn(302,77,v0n,w_),zW(Pet,"AbstractEList/BasicIndexOutOfBoundsException",302),sDn(37,1,$Zn,DD),uZn.Nb=function(n){SV(this,n)},uZn.Xj=function(){if(this.i.j!=this.f)throw hv(new Fv)},uZn.Yj=function(){return Zkn(this)},uZn.Ob=function(){return this.e!=this.i.gc()},uZn.Pb=function(){return this.Yj()},uZn.Qb=function(){$Sn(this)},uZn.e=0,uZn.f=0,uZn.g=-1,zW(Pet,"AbstractEList/EIterator",37),sDn(286,37,UZn,Zx,QV),uZn.Qb=function(){$Sn(this)},uZn.Rb=function(n){Smn(this,n)},uZn.Zj=function(){var n;try{return n=this.d.Xb(--this.e),this.Xj(),this.g=this.e,n}catch(t){throw F$(t=Ehn(t),77)?(this.Xj(),hv(new Bv)):hv(t)}},uZn.$j=function(n){cTn(this,n)},uZn.Sb=function(){return 0!=this.e},uZn.Tb=function(){return this.e},uZn.Ub=function(){return this.Zj()},uZn.Vb=function(){return this.e-1},uZn.Wb=function(n){this.$j(n)},zW(Pet,"AbstractEList/EListIterator",286),sDn(355,37,$Zn,nR),uZn.Yj=function(){return nyn(this)},uZn.Qb=function(){throw hv(new Kv)},zW(Pet,"AbstractEList/NonResolvingEIterator",355),sDn(398,286,UZn,tR,N_),uZn.Rb=function(n){throw hv(new Kv)},uZn.Yj=function(){var n;try{return n=this.c.Vi(this.e),this.Xj(),this.g=this.e++,n}catch(t){throw F$(t=Ehn(t),77)?(this.Xj(),hv(new Bv)):hv(t)}},uZn.Zj=function(){var n;try{return n=this.c.Vi(--this.e),this.Xj(),this.g=this.e,n}catch(t){throw F$(t=Ehn(t),77)?(this.Xj(),hv(new Bv)):hv(t)}},uZn.Qb=function(){throw hv(new Kv)},uZn.Wb=function(n){throw hv(new Kv)},zW(Pet,"AbstractEList/NonResolvingEListIterator",398),sDn(2080,70,Git),uZn.Ei=function(n,t){var e,i,r,c,a,o,u,s,h;if(0!=(i=t.gc())){for(e=zln(this,(s=null==(u=uG(Lsn(this.a,4),129))?0:u.length)+i),(h=s-n)>0&&qGn(u,n,e,n+i,h),o=t.Kc(),c=0;ce)throw hv(new w_(n,e));return new qJ(this,n)},uZn.$b=function(){var n,t;++this.j,t=null==(n=uG(Lsn(this.a,4),129))?0:n.length,Pkn(this,null),Ann(this,t,n)},uZn.Hc=function(n){var t,e,i,r;if(null!=(t=uG(Lsn(this.a,4),129)))if(null!=n){for(i=0,r=(e=t).length;i=(e=null==(t=uG(Lsn(this.a,4),129))?0:t.length))throw hv(new w_(n,e));return t[n]},uZn.dd=function(n){var t,e,i;if(null!=(t=uG(Lsn(this.a,4),129)))if(null!=n){for(e=0,i=t.length;ee)throw hv(new w_(n,e));return new GJ(this,n)},uZn.Ti=function(n,t){var e,i,r;if(n>=(r=null==(e=lvn(this))?0:e.length))throw hv(new dM(zet+n+Vet+r));if(t>=r)throw hv(new dM(Wet+t+Vet+r));return i=e[t],n!=t&&(n0&&qGn(n,0,t,0,e),t},uZn.Qc=function(n){var t,e;return(e=null==(t=uG(Lsn(this.a,4),129))?0:t.length)>0&&(n.lengthe&&uQ(n,e,null),n},zW(Pet,"ArrayDelegatingEList",2080),sDn(1051,37,$Zn,M9),uZn.Xj=function(){if(this.b.j!=this.f||xA(uG(Lsn(this.b.a,4),129))!==xA(this.a))throw hv(new Fv)},uZn.Qb=function(){$Sn(this),this.a=uG(Lsn(this.b.a,4),129)},zW(Pet,"ArrayDelegatingEList/EIterator",1051),sDn(722,286,UZn,pV,GJ),uZn.Xj=function(){if(this.b.j!=this.f||xA(uG(Lsn(this.b.a,4),129))!==xA(this.a))throw hv(new Fv)},uZn.$j=function(n){cTn(this,n),this.a=uG(Lsn(this.b.a,4),129)},uZn.Qb=function(){$Sn(this),this.a=uG(Lsn(this.b.a,4),129)},zW(Pet,"ArrayDelegatingEList/EListIterator",722),sDn(1052,355,$Zn,T9),uZn.Xj=function(){if(this.b.j!=this.f||xA(uG(Lsn(this.b.a,4),129))!==xA(this.a))throw hv(new Fv)},zW(Pet,"ArrayDelegatingEList/NonResolvingEIterator",1052),sDn(723,398,UZn,mV,qJ),uZn.Xj=function(){if(this.b.j!=this.f||xA(uG(Lsn(this.b.a,4),129))!==xA(this.a))throw hv(new Fv)},zW(Pet,"ArrayDelegatingEList/NonResolvingEListIterator",723),sDn(615,302,v0n,pL),zW(Pet,"BasicEList/BasicIndexOutOfBoundsException",615),sDn(710,66,Qet,AA),uZn.bd=function(n,t){throw hv(new Kv)},uZn.Fc=function(n){throw hv(new Kv)},uZn.cd=function(n,t){throw hv(new Kv)},uZn.Gc=function(n){throw hv(new Kv)},uZn.$b=function(){throw hv(new Kv)},uZn._i=function(n){throw hv(new Kv)},uZn.Kc=function(){return this.Ii()},uZn.ed=function(){return this.Ji()},uZn.fd=function(n){return this.Ki(n)},uZn.Ti=function(n,t){throw hv(new Kv)},uZn.Ui=function(n,t){throw hv(new Kv)},uZn.gd=function(n){throw hv(new Kv)},uZn.Mc=function(n){throw hv(new Kv)},uZn.hd=function(n,t){throw hv(new Kv)},zW(Pet,"BasicEList/UnmodifiableEList",710),sDn(721,1,{3:1,20:1,16:1,15:1,61:1,597:1}),uZn.bd=function(n,t){Y$(this,n,uG(t,44))},uZn.Fc=function(n){return YR(this,uG(n,44))},uZn.Jc=function(n){z8(this,n)},uZn.Xb=function(n){return uG(zrn(this.c,n),136)},uZn.Ti=function(n,t){return uG(this.c.Ti(n,t),44)},uZn.Ui=function(n,t){Z$(this,n,uG(t,44))},uZn.Lc=function(){return new fX(null,new h3(this,16))},uZn.gd=function(n){return uG(this.c.gd(n),44)},uZn.hd=function(n,t){return EW(this,n,uG(t,44))},uZn.jd=function(n){Lon(this,n)},uZn.Nc=function(){return new h3(this,16)},uZn.Oc=function(){return new fX(null,new h3(this,16))},uZn.cd=function(n,t){return this.c.cd(n,t)},uZn.Gc=function(n){return this.c.Gc(n)},uZn.$b=function(){this.c.$b()},uZn.Hc=function(n){return this.c.Hc(n)},uZn.Ic=function(n){return yhn(this.c,n)},uZn._j=function(){var n,t;if(null==this.d){for(this.d=Inn(IFt,qit,66,2*this.f+1,0,1),t=this.e,this.f=0,n=this.c.Kc();n.e!=n.i.gc();)bMn(this,uG(n.Yj(),136));this.e=t}},uZn.Fb=function(n){return H_(this,n)},uZn.Hb=function(){return Bhn(this.c)},uZn.dd=function(n){return this.c.dd(n)},uZn.ak=function(){this.c=new Im(this)},uZn.dc=function(){return 0==this.f},uZn.Kc=function(){return this.c.Kc()},uZn.ed=function(){return this.c.ed()},uZn.fd=function(n){return this.c.fd(n)},uZn.bk=function(){return Tnn(this)},uZn.ck=function(n,t,e){return new xU(n,t,e)},uZn.dk=function(){return new ws},uZn.Mc=function(n){return uan(this,n)},uZn.gc=function(){return this.f},uZn.kd=function(n,t){return new C2(this.c,n,t)},uZn.Pc=function(){return this.c.Pc()},uZn.Qc=function(n){return this.c.Qc(n)},uZn.Ib=function(){return Tpn(this.c)},uZn.e=0,uZn.f=0,zW(Pet,"BasicEMap",721),sDn(1046,66,Qet,Im),uZn.Mi=function(n,t){Qv(this,uG(t,136))},uZn.Pi=function(n,t,e){var i;++(i=this,uG(t,136),i).a.e},uZn.Qi=function(n,t){Jv(this,uG(t,136))},uZn.Ri=function(n,t,e){fR(this,uG(t,136),uG(e,136))},uZn.Oi=function(n,t){Osn(this.a)},zW(Pet,"BasicEMap/1",1046),sDn(1047,66,Qet,ws),uZn.aj=function(n){return Inn(FFt,Xit,621,n,0,1)},zW(Pet,"BasicEMap/2",1047),sDn(1048,KZn,FZn,Om),uZn.$b=function(){this.a.c.$b()},uZn.Hc=function(n){return ymn(this.a,n)},uZn.Kc=function(){return 0==this.a.f?(EK(),KFt.a):new aj(this.a)},uZn.Mc=function(n){var t;return t=this.a.f,Svn(this.a,n),this.a.f!=t},uZn.gc=function(){return this.a.f},zW(Pet,"BasicEMap/3",1048),sDn(1049,31,RZn,Am),uZn.$b=function(){this.a.c.$b()},uZn.Hc=function(n){return q_n(this.a,n)},uZn.Kc=function(){return 0==this.a.f?(EK(),KFt.a):new oj(this.a)},uZn.gc=function(){return this.a.f},zW(Pet,"BasicEMap/4",1049),sDn(1050,KZn,FZn,Lm),uZn.$b=function(){this.a.c.$b()},uZn.Hc=function(n){var t,e,i,r,c,a,o,u,s;if(this.a.f>0&&F$(n,44)&&(this.a._j(),r=null==(o=(u=uG(n,44)).ld())?0:Hon(o),c=iF(this.a,r),t=this.a.d[c]))for(e=uG(t.g,379),s=t.i,a=0;a"+this.c},uZn.a=0;var KFt,FFt=zW(Pet,"BasicEMap/EntryImpl",621);sDn(546,1,{},ds),zW(Pet,"BasicEMap/View",546),sDn(783,1,{}),uZn.Fb=function(n){return PDn((hZ(),zot),n)},uZn.Hb=function(){return Zfn((hZ(),zot))},uZn.Ib=function(){return vIn((hZ(),zot))},zW(Pet,"ECollections/BasicEmptyUnmodifiableEList",783),sDn(1348,1,UZn,gs),uZn.Nb=function(n){SV(this,n)},uZn.Rb=function(n){throw hv(new Kv)},uZn.Ob=function(){return!1},uZn.Sb=function(){return!1},uZn.Pb=function(){throw hv(new Bv)},uZn.Tb=function(){return 0},uZn.Ub=function(){throw hv(new Bv)},uZn.Vb=function(){return-1},uZn.Qb=function(){throw hv(new Kv)},uZn.Wb=function(n){throw hv(new Kv)},zW(Pet,"ECollections/BasicEmptyUnmodifiableEList/1",1348),sDn(1346,783,{20:1,16:1,15:1,61:1},Gk),uZn.bd=function(n,t){iE()},uZn.Fc=function(n){return rE()},uZn.cd=function(n,t){return cE()},uZn.Gc=function(n){return aE()},uZn.$b=function(){oE()},uZn.Hc=function(n){return!1},uZn.Ic=function(n){return!1},uZn.Jc=function(n){z8(this,n)},uZn.Xb=function(n){return oL((hZ(),n)),null},uZn.dd=function(n){return-1},uZn.dc=function(){return!0},uZn.Kc=function(){return this.a},uZn.ed=function(){return this.a},uZn.fd=function(n){return this.a},uZn.Ti=function(n,t){return uE()},uZn.Ui=function(n,t){sE()},uZn.Lc=function(){return new fX(null,new h3(this,16))},uZn.gd=function(n){return hE()},uZn.Mc=function(n){return fE()},uZn.hd=function(n,t){return lE()},uZn.gc=function(){return 0},uZn.jd=function(n){Lon(this,n)},uZn.Nc=function(){return new h3(this,16)},uZn.Oc=function(){return new fX(null,new h3(this,16))},uZn.kd=function(n,t){return hZ(),new C2(zot,n,t)},uZn.Pc=function(){return Sz((hZ(),zot))},uZn.Qc=function(n){return hZ(),oTn(zot,n)},zW(Pet,"ECollections/EmptyUnmodifiableEList",1346),sDn(1347,783,{20:1,16:1,15:1,61:1,597:1},qk),uZn.bd=function(n,t){iE()},uZn.Fc=function(n){return rE()},uZn.cd=function(n,t){return cE()},uZn.Gc=function(n){return aE()},uZn.$b=function(){oE()},uZn.Hc=function(n){return!1},uZn.Ic=function(n){return!1},uZn.Jc=function(n){z8(this,n)},uZn.Xb=function(n){return oL((hZ(),n)),null},uZn.dd=function(n){return-1},uZn.dc=function(){return!0},uZn.Kc=function(){return this.a},uZn.ed=function(){return this.a},uZn.fd=function(n){return this.a},uZn.Ti=function(n,t){return uE()},uZn.Ui=function(n,t){sE()},uZn.Lc=function(){return new fX(null,new h3(this,16))},uZn.gd=function(n){return hE()},uZn.Mc=function(n){return fE()},uZn.hd=function(n,t){return lE()},uZn.gc=function(){return 0},uZn.jd=function(n){Lon(this,n)},uZn.Nc=function(){return new h3(this,16)},uZn.Oc=function(){return new fX(null,new h3(this,16))},uZn.kd=function(n,t){return hZ(),new C2(zot,n,t)},uZn.Pc=function(){return Sz((hZ(),zot))},uZn.Qc=function(n){return hZ(),oTn(zot,n)},uZn.bk=function(){return hZ(),hZ(),Vot},zW(Pet,"ECollections/EmptyUnmodifiableEMap",1347);var _Ft,BFt=Iq(Pet,"Enumerator");sDn(288,1,{288:1},Z_n),uZn.Fb=function(n){var t;return this===n||!!F$(n,288)&&(t=uG(n,288),this.f==t.f&&yX(this.i,t.i)&&kX(this.a,256&this.f?256&t.f?t.a:null:256&t.f?null:t.a)&&kX(this.d,t.d)&&kX(this.g,t.g)&&kX(this.e,t.e)&&Ykn(this,t))},uZn.Hb=function(){return this.f},uZn.Ib=function(){return DUn(this)},uZn.f=0;var HFt,UFt,GFt,qFt=0,XFt=0,zFt=0,VFt=0,WFt=0,QFt=0,JFt=0,YFt=0,ZFt=0,n_t=0,t_t=0,e_t=0,i_t=0;zW(Pet,"URI",288),sDn(1121,45,B0n,Xk),uZn.zc=function(n,t){return uG(r2(this,mK(n),uG(t,288)),288)},zW(Pet,"URI/URICache",1121),sDn(506,66,Qet,us,$X),uZn.Si=function(){return!0},zW(Pet,"UniqueEList",506),sDn(590,63,S1n,Pen),zW(Pet,"WrappedException",590);var r_t,c_t=Iq(Itt,Wit),a_t=Iq(Itt,Qit),o_t=Iq(Itt,Jit),u_t=Iq(Itt,Yit),s_t=Iq(Itt,Zit),h_t=Iq(Itt,"EClass"),f_t=Iq(Itt,"EDataType");sDn(1233,45,B0n,zk),uZn.xc=function(n){return RA(n)?U1(this,n):DA(FX(this.f,n))},zW(Itt,"EDataType/Internal/ConversionDelegate/Factory/Registry/Impl",1233);var l_t,b_t,w_t=Iq(Itt,"EEnum"),d_t=Iq(Itt,nrt),g_t=Iq(Itt,trt),p_t=Iq(Itt,ert),m_t=Iq(Itt,irt),v_t=Iq(Itt,rrt);sDn(1042,1,{},os),uZn.Ib=function(){return"NIL"},zW(Itt,"EStructuralFeature/Internal/DynamicValueHolder/1",1042),sDn(1041,45,B0n,Vk),uZn.xc=function(n){return RA(n)?U1(this,n):DA(FX(this.f,n))},zW(Itt,"EStructuralFeature/Internal/SettingDelegate/Factory/Registry/Impl",1041);var k_t,y_t,M_t,T_t,j_t,E_t,S_t,P_t,C_t,I_t,O_t,A_t,L_t,N_t,$_t,D_t,x_t,R_t,K_t,F_t,__t,B_t,H_t,U_t,G_t,q_t,X_t,z_t,V_t,W_t,Q_t,J_t=Iq(Itt,crt),Y_t=Iq(Itt,"EValidator/PatternMatcher"),Z_t=Iq(art,"FeatureMap/Entry");sDn(545,1,{76:1},TA),uZn.Lk=function(){return this.a},uZn.md=function(){return this.b},zW(Ytt,"BasicEObjectImpl/1",545),sDn(1040,1,ort,jA),uZn.Fk=function(n){return U9(this.a,this.b,n)},uZn.Qj=function(){return M0(this.a,this.b)},uZn.Wb=function(n){y0(this.a,this.b,n)},uZn.Gk=function(){VQ(this.a,this.b)},zW(Ytt,"BasicEObjectImpl/4",1040),sDn(2081,1,{114:1}),uZn.Mk=function(n){this.e=0==n?X_t:Inn(dat,EZn,1,n,5,1)},uZn.li=function(n){return this.e[n]},uZn.mi=function(n,t){this.e[n]=t},uZn.ni=function(n){this.e[n]=null},uZn.Nk=function(){return this.c},uZn.Ok=function(){throw hv(new Kv)},uZn.Pk=function(){throw hv(new Kv)},uZn.Qk=function(){return this.d},uZn.Rk=function(){return null!=this.e},uZn.Sk=function(n){this.c=n},uZn.Tk=function(n){throw hv(new Kv)},uZn.Uk=function(n){throw hv(new Kv)},uZn.Vk=function(n){this.d=n},zW(Ytt,"BasicEObjectImpl/EPropertiesHolderBaseImpl",2081),sDn(192,2081,{114:1},Ll),uZn.Ok=function(){return this.a},uZn.Pk=function(){return this.b},uZn.Tk=function(n){this.a=n},uZn.Uk=function(n){this.b=n},zW(Ytt,"BasicEObjectImpl/EPropertiesHolderImpl",192),sDn(516,99,Jtt,ps),uZn.uh=function(){return this.f},uZn.zh=function(){return this.k},uZn.Bh=function(n,t){this.g=n,this.i=t},uZn.Dh=function(){return 2&this.j?this.$h().Nk():this.ii()},uZn.Fh=function(){return this.i},uZn.wh=function(){return!!(1&this.j)},uZn.Ph=function(){return this.g},uZn.Vh=function(){return!!(4&this.j)},uZn.$h=function(){return!this.k&&(this.k=new Ll),this.k},uZn.ci=function(n){this.$h().Sk(n),n?this.j|=2:this.j&=-3},uZn.ei=function(n){this.$h().Uk(n),n?this.j|=4:this.j&=-5},uZn.ii=function(){return(tQ(),M_t).S},uZn.i=0,uZn.j=1,zW(Ytt,"EObjectImpl",516),sDn(798,516,{110:1,94:1,93:1,58:1,114:1,54:1,99:1},BG),uZn.li=function(n){return this.e[n]},uZn.mi=function(n,t){this.e[n]=t},uZn.ni=function(n){this.e[n]=null},uZn.Dh=function(){return this.d},uZn.Ih=function(n){return emn(this.d,n)},uZn.Kh=function(){return this.d},uZn.Oh=function(){return null!=this.e},uZn.$h=function(){return!this.k&&(this.k=new ms),this.k},uZn.ci=function(n){this.d=n},uZn.hi=function(){var n;return null==this.e&&(n=iQ(this.d),this.e=0==n?z_t:Inn(dat,EZn,1,n,5,1)),this},uZn.ji=function(){return 0},zW(Ytt,"DynamicEObjectImpl",798),sDn(1522,798,{110:1,44:1,94:1,93:1,136:1,58:1,114:1,54:1,99:1},Eq),uZn.Fb=function(n){return this===n},uZn.Hb=function(){return xx(this)},uZn.ci=function(n){this.d=n,this.b=EKn(n,"key"),this.c=EKn(n,uet)},uZn.Bi=function(){var n;return-1==this.a&&(n=zen(this,this.b),this.a=null==n?0:Hon(n)),this.a},uZn.ld=function(){return zen(this,this.b)},uZn.md=function(){return zen(this,this.c)},uZn.Ci=function(n){this.a=n},uZn.Di=function(n){y0(this,this.b,n)},uZn.nd=function(n){var t;return t=zen(this,this.c),y0(this,this.c,n),t},uZn.a=0,zW(Ytt,"DynamicEObjectImpl/BasicEMapEntry",1522),sDn(1523,1,{114:1},ms),uZn.Mk=function(n){throw hv(new Kv)},uZn.li=function(n){throw hv(new Kv)},uZn.mi=function(n,t){throw hv(new Kv)},uZn.ni=function(n){throw hv(new Kv)},uZn.Nk=function(){throw hv(new Kv)},uZn.Ok=function(){return this.a},uZn.Pk=function(){return this.b},uZn.Qk=function(){return this.c},uZn.Rk=function(){throw hv(new Kv)},uZn.Sk=function(n){throw hv(new Kv)},uZn.Tk=function(n){this.a=n},uZn.Uk=function(n){this.b=n},uZn.Vk=function(n){this.c=n},zW(Ytt,"DynamicEObjectImpl/DynamicEPropertiesHolderImpl",1523),sDn(519,158,{110:1,94:1,93:1,598:1,155:1,58:1,114:1,54:1,99:1,519:1,158:1,119:1,120:1},vs),uZn.Ah=function(n){return Yjn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.d;case 2:return e?(!this.b&&(this.b=new XR((YYn(),H_t),wBt,this)),this.b):(!this.b&&(this.b=new XR((YYn(),H_t),wBt,this)),Tnn(this.b));case 3:return F0(this);case 4:return!this.a&&(this.a=new MD(nFt,this,4)),this.a;case 5:return!this.c&&(this.c=new OD(nFt,this,5)),this.c}return $tn(this,n-iQ((YYn(),T_t)),ern(uG(Lsn(this,16),29)||T_t,n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 3:return this.Cb&&(e=(i=this.Db>>16)>=0?Yjn(this,e):this.Cb.Th(this,-1-i,null,e)),gz(this,uG(n,155),e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),T_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),T_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 2:return!this.b&&(this.b=new XR((YYn(),H_t),wBt,this)),G_(this.b,n,e);case 3:return gz(this,null,e);case 4:return!this.a&&(this.a=new MD(nFt,this,4)),Nyn(this.a,n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),T_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),T_t)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.d;case 2:return!!this.b&&0!=this.b.f;case 3:return!!F0(this);case 4:return!!this.a&&0!=this.a.i;case 5:return!!this.c&&0!=this.c.i}return l5(this,n-iQ((YYn(),T_t)),ern(uG(Lsn(this,16),29)||T_t,n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void xq(this,mK(t));case 2:return!this.b&&(this.b=new XR((YYn(),H_t),wBt,this)),void Jun(this.b,t);case 3:return void kKn(this,uG(t,155));case 4:return!this.a&&(this.a=new MD(nFt,this,4)),Czn(this.a),!this.a&&(this.a=new MD(nFt,this,4)),void CW(this.a,uG(t,16));case 5:return!this.c&&(this.c=new OD(nFt,this,5)),Czn(this.c),!this.c&&(this.c=new OD(nFt,this,5)),void CW(this.c,uG(t,16))}lpn(this,n-iQ((YYn(),T_t)),ern(uG(Lsn(this,16),29)||T_t,n),t)},uZn.ii=function(){return YYn(),T_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void Yan(this,null);case 2:return!this.b&&(this.b=new XR((YYn(),H_t),wBt,this)),void this.b.c.$b();case 3:return void kKn(this,null);case 4:return!this.a&&(this.a=new MD(nFt,this,4)),void Czn(this.a);case 5:return!this.c&&(this.c=new OD(nFt,this,5)),void Czn(this.c)}sdn(this,n-iQ((YYn(),T_t)),ern(uG(Lsn(this,16),29)||T_t,n))},uZn.Ib=function(){return fdn(this)},uZn.d=null,zW(Ytt,"EAnnotationImpl",519),sDn(141,721,urt,ltn),uZn.Gi=function(n,t){qN(this,n,uG(t,44))},uZn.Wk=function(n,t){return U_(this,uG(n,44),t)},uZn.$i=function(n){return uG(uG(this.c,71).$i(n),136)},uZn.Ii=function(){return uG(this.c,71).Ii()},uZn.Ji=function(){return uG(this.c,71).Ji()},uZn.Ki=function(n){return uG(this.c,71).Ki(n)},uZn.Xk=function(n,t){return G_(this,n,t)},uZn.Fk=function(n){return uG(this.c,79).Fk(n)},uZn.ak=function(){},uZn.Qj=function(){return uG(this.c,79).Qj()},uZn.ck=function(n,t,e){var i;return(i=uG(Hrn(this.b).wi().si(this.b),136)).Ci(n),i.Di(t),i.nd(e),i},uZn.dk=function(){return new Vm(this)},uZn.Wb=function(n){Jun(this,n)},uZn.Gk=function(){uG(this.c,79).Gk()},zW(art,"EcoreEMap",141),sDn(165,141,urt,XR),uZn._j=function(){var n,t,e,i,r;if(null==this.d){for(r=Inn(IFt,qit,66,2*this.f+1,0,1),e=this.c.Kc();e.e!=e.i.gc();)!(n=r[i=((t=uG(e.Yj(),136)).Bi()&vZn)%r.length])&&(n=r[i]=new Vm(this)),n.Fc(t);this.d=r}},zW(Ytt,"EAnnotationImpl/1",165),sDn(292,448,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,481:1,54:1,99:1,158:1,292:1,119:1,120:1}),uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return qx(),!!(256&this.Bb);case 3:return qx(),!!(512&this.Bb);case 4:return xwn(this.s);case 5:return xwn(this.t);case 6:return qx(),!!this.Jk();case 7:return qx(),this.s>=1;case 8:return t?bEn(this):this.r;case 9:return this.q}return $tn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 9:return IW(this,e)}return uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().Ak(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return!(256&this.Bb);case 3:return!(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return this.Jk();case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yQ(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yQ(this.q).i)}return l5(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.bi=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void this.ui(mK(t));case 2:return void ddn(this,oM(gK(t)));case 3:return void mdn(this,oM(gK(t)));case 4:return void Pcn(this,uG(t,17).a);case 5:return void this.Zk(uG(t,17).a);case 8:return void Kbn(this,uG(t,142));case 9:return void((e=CCn(this,uG(t,89),null))&&e.oj())}lpn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t)},uZn.ii=function(){return YYn(),G_t},uZn.ki=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void this.ui(null);case 2:return void ddn(this,!0);case 3:return void mdn(this,!0);case 4:return void Pcn(this,0);case 5:return void this.Zk(1);case 8:return void Kbn(this,null);case 9:return void((t=CCn(this,null,null))&&t.oj())}sdn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.pi=function(){bEn(this),this.Bb|=1},uZn.Hk=function(){return bEn(this)},uZn.Ik=function(){return this.t},uZn.Jk=function(){var n;return(n=this.t)>1||-1==n},uZn.Si=function(){return!!(512&this.Bb)},uZn.Yk=function(n,t){return Ywn(this,n,t)},uZn.Zk=function(n){Ccn(this,n)},uZn.Ib=function(){return L$n(this)},uZn.s=0,uZn.t=1,zW(Ytt,"ETypedElementImpl",292),sDn(462,292,{110:1,94:1,93:1,155:1,197:1,58:1,179:1,69:1,114:1,481:1,54:1,99:1,158:1,462:1,292:1,119:1,120:1,692:1}),uZn.Ah=function(n){return pjn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return qx(),!!(256&this.Bb);case 3:return qx(),!!(512&this.Bb);case 4:return xwn(this.s);case 5:return xwn(this.t);case 6:return qx(),!!this.Jk();case 7:return qx(),this.s>=1;case 8:return t?bEn(this):this.r;case 9:return this.q;case 10:return qx(),!!(this.Bb&w1n);case 11:return qx(),!!(this.Bb&frt);case 12:return qx(),!!(this.Bb&j0n);case 13:return this.j;case 14:return NRn(this);case 15:return qx(),!!(this.Bb&hrt);case 16:return qx(),!!(this.Bb&VZn);case 17:return K0(this)}return $tn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 17:return this.Cb&&(e=(i=this.Db>>16)>=0?pjn(this,e):this.Cb.Th(this,-1-i,null,e)),$Un(this,n,17,e)}return uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().zk(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 9:return IW(this,e);case 17:return $Un(this,null,17,e)}return uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().Ak(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return!(256&this.Bb);case 3:return!(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return this.Jk();case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yQ(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yQ(this.q).i);case 10:return!(this.Bb&w1n);case 11:return!!(this.Bb&frt);case 12:return!!(this.Bb&j0n);case 13:return null!=this.j;case 14:return null!=NRn(this);case 15:return!!(this.Bb&hrt);case 16:return!!(this.Bb&VZn);case 17:return!!K0(this)}return l5(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.bi=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void g2(this,mK(t));case 2:return void ddn(this,oM(gK(t)));case 3:return void mdn(this,oM(gK(t)));case 4:return void Pcn(this,uG(t,17).a);case 5:return void this.Zk(uG(t,17).a);case 8:return void Kbn(this,uG(t,142));case 9:return void((e=CCn(this,uG(t,89),null))&&e.oj());case 10:return void Wdn(this,oM(gK(t)));case 11:return void Ydn(this,oM(gK(t)));case 12:return void Qdn(this,oM(gK(t)));case 13:return void mA(this,mK(t));case 15:return void Jdn(this,oM(gK(t)));case 16:return void Cgn(this,oM(gK(t)))}lpn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t)},uZn.ii=function(){return YYn(),U_t},uZn.ki=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return F$(this.Cb,90)&&yLn(y9(uG(this.Cb,90)),4),void qon(this,null);case 2:return void ddn(this,!0);case 3:return void mdn(this,!0);case 4:return void Pcn(this,0);case 5:return void this.Zk(1);case 8:return void Kbn(this,null);case 9:return void((t=CCn(this,null,null))&&t.oj());case 10:return void Wdn(this,!0);case 11:return void Ydn(this,!1);case 12:return void Qdn(this,!1);case 13:return this.i=null,void lon(this,null);case 15:return void Jdn(this,!1);case 16:return void Cgn(this,!1)}sdn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.pi=function(){BJ(Nen((gAn(),kBt),this)),bEn(this),this.Bb|=1},uZn.pk=function(){return this.f},uZn.ik=function(){return NRn(this)},uZn.qk=function(){return K0(this)},uZn.uk=function(){return null},uZn.$k=function(){return this.k},uZn.Lj=function(){return this.n},uZn.vk=function(){return qSn(this)},uZn.wk=function(){var n,t,e,i,r,c,a,o,u;return this.p||((null==(e=K0(this)).i&&eqn(e),e.i).length,(i=this.uk())&&iQ(K0(i)),n=(a=(r=bEn(this)).kk())?1&a.i?a==ZHt?cot:a==YHt?dot:a==iUt?lot:a==eUt?fot:a==nUt?yot:a==rUt?Tot:a==tUt?uot:hot:a:null,t=NRn(this),o=r.ik(),Vgn(this),this.Bb&VZn&&((c=cSn((gAn(),kBt),e))&&c!=this||(c=_3(Nen(kBt,this))))?this.p=new SA(this,c):this.Jk()?this.al()?i?this.Bb&hrt?n?this.bl()?this.p=new CY(47,n,this,i):this.p=new CY(5,n,this,i):this.bl()?this.p=new r8(46,this,i):this.p=new r8(4,this,i):n?this.bl()?this.p=new CY(49,n,this,i):this.p=new CY(7,n,this,i):this.bl()?this.p=new r8(48,this,i):this.p=new r8(6,this,i):this.Bb&hrt?n?n==Sat?this.p=new RU(50,gFt,this):this.bl()?this.p=new RU(43,n,this):this.p=new RU(1,n,this):this.bl()?this.p=new GZ(42,this):this.p=new GZ(0,this):n?n==Sat?this.p=new RU(41,gFt,this):this.bl()?this.p=new RU(45,n,this):this.p=new RU(3,n,this):this.bl()?this.p=new GZ(44,this):this.p=new GZ(2,this):F$(r,156)?n==Z_t?this.p=new GZ(40,this):512&this.Bb?this.Bb&hrt?this.p=n?new RU(9,n,this):new GZ(8,this):this.p=n?new RU(11,n,this):new GZ(10,this):this.Bb&hrt?this.p=n?new RU(13,n,this):new GZ(12,this):this.p=n?new RU(15,n,this):new GZ(14,this):i?(u=i.t)>1||-1==u?this.bl()?this.Bb&hrt?this.p=n?new CY(25,n,this,i):new r8(24,this,i):this.p=n?new CY(27,n,this,i):new r8(26,this,i):this.Bb&hrt?this.p=n?new CY(29,n,this,i):new r8(28,this,i):this.p=n?new CY(31,n,this,i):new r8(30,this,i):this.bl()?this.Bb&hrt?this.p=n?new CY(33,n,this,i):new r8(32,this,i):this.p=n?new CY(35,n,this,i):new r8(34,this,i):this.Bb&hrt?this.p=n?new CY(37,n,this,i):new r8(36,this,i):this.p=n?new CY(39,n,this,i):new r8(38,this,i):this.bl()?this.Bb&hrt?this.p=n?new RU(17,n,this):new GZ(16,this):this.p=n?new RU(19,n,this):new GZ(18,this):this.Bb&hrt?this.p=n?new RU(21,n,this):new GZ(20,this):this.p=n?new RU(23,n,this):new GZ(22,this):this._k()?this.bl()?this.p=new KU(uG(r,29),this,i):this.p=new _1(uG(r,29),this,i):F$(r,156)?n==Z_t?this.p=new GZ(40,this):this.Bb&hrt?this.p=n?new bz(t,o,this,(Pmn(),a==YHt?hBt:a==ZHt?cBt:a==nUt?fBt:a==iUt?sBt:a==eUt?uBt:a==rUt?bBt:a==tUt?aBt:a==JHt?oBt:lBt)):new AY(uG(r,156),t,o,this):this.p=n?new lz(t,o,this,(Pmn(),a==YHt?hBt:a==ZHt?cBt:a==nUt?fBt:a==iUt?sBt:a==eUt?uBt:a==rUt?bBt:a==tUt?aBt:a==JHt?oBt:lBt)):new OY(uG(r,156),t,o,this):this.al()?i?this.Bb&hrt?this.bl()?this.p=new GU(uG(r,29),this,i):this.p=new UU(uG(r,29),this,i):this.bl()?this.p=new HU(uG(r,29),this,i):this.p=new FU(uG(r,29),this,i):this.Bb&hrt?this.bl()?this.p=new cK(uG(r,29),this):this.p=new iK(uG(r,29),this):this.bl()?this.p=new eK(uG(r,29),this):this.p=new tK(uG(r,29),this):this.bl()?i?this.Bb&hrt?this.p=new qU(uG(r,29),this,i):this.p=new _U(uG(r,29),this,i):this.Bb&hrt?this.p=new aK(uG(r,29),this):this.p=new rK(uG(r,29),this):i?this.Bb&hrt?this.p=new XU(uG(r,29),this,i):this.p=new BU(uG(r,29),this,i):this.Bb&hrt?this.p=new oK(uG(r,29),this):this.p=new OX(uG(r,29),this)),this.p},uZn.rk=function(){return!!(this.Bb&w1n)},uZn._k=function(){return!1},uZn.al=function(){return!1},uZn.sk=function(){return!!(this.Bb&VZn)},uZn.xk=function(){return ein(this)},uZn.bl=function(){return!1},uZn.tk=function(){return!!(this.Bb&hrt)},uZn.cl=function(n){this.k=n},uZn.ui=function(n){g2(this,n)},uZn.Ib=function(){return MBn(this)},uZn.e=!1,uZn.n=0,zW(Ytt,"EStructuralFeatureImpl",462),sDn(331,462,{110:1,94:1,93:1,35:1,155:1,197:1,58:1,179:1,69:1,114:1,481:1,54:1,99:1,331:1,158:1,462:1,292:1,119:1,120:1,692:1},Wk),uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return qx(),!!(256&this.Bb);case 3:return qx(),!!(512&this.Bb);case 4:return xwn(this.s);case 5:return xwn(this.t);case 6:return qx(),!!SNn(this);case 7:return qx(),this.s>=1;case 8:return t?bEn(this):this.r;case 9:return this.q;case 10:return qx(),!!(this.Bb&w1n);case 11:return qx(),!!(this.Bb&frt);case 12:return qx(),!!(this.Bb&j0n);case 13:return this.j;case 14:return NRn(this);case 15:return qx(),!!(this.Bb&hrt);case 16:return qx(),!!(this.Bb&VZn);case 17:return K0(this);case 18:return qx(),!!(this.Bb&Qtt);case 19:return t?khn(this):E7(this)}return $tn(this,n-iQ((YYn(),j_t)),ern(uG(Lsn(this,16),29)||j_t,n),t,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return!(256&this.Bb);case 3:return!(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return SNn(this);case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yQ(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yQ(this.q).i);case 10:return!(this.Bb&w1n);case 11:return!!(this.Bb&frt);case 12:return!!(this.Bb&j0n);case 13:return null!=this.j;case 14:return null!=NRn(this);case 15:return!!(this.Bb&hrt);case 16:return!!(this.Bb&VZn);case 17:return!!K0(this);case 18:return!!(this.Bb&Qtt);case 19:return!!E7(this)}return l5(this,n-iQ((YYn(),j_t)),ern(uG(Lsn(this,16),29)||j_t,n))},uZn.bi=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void g2(this,mK(t));case 2:return void ddn(this,oM(gK(t)));case 3:return void mdn(this,oM(gK(t)));case 4:return void Pcn(this,uG(t,17).a);case 5:return void fj(this,uG(t,17).a);case 8:return void Kbn(this,uG(t,142));case 9:return void((e=CCn(this,uG(t,89),null))&&e.oj());case 10:return void Wdn(this,oM(gK(t)));case 11:return void Ydn(this,oM(gK(t)));case 12:return void Qdn(this,oM(gK(t)));case 13:return void mA(this,mK(t));case 15:return void Jdn(this,oM(gK(t)));case 16:return void Cgn(this,oM(gK(t)));case 18:return void Sgn(this,oM(gK(t)))}lpn(this,n-iQ((YYn(),j_t)),ern(uG(Lsn(this,16),29)||j_t,n),t)},uZn.ii=function(){return YYn(),j_t},uZn.ki=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return F$(this.Cb,90)&&yLn(y9(uG(this.Cb,90)),4),void qon(this,null);case 2:return void ddn(this,!0);case 3:return void mdn(this,!0);case 4:return void Pcn(this,0);case 5:return this.b=0,void Ccn(this,1);case 8:return void Kbn(this,null);case 9:return void((t=CCn(this,null,null))&&t.oj());case 10:return void Wdn(this,!0);case 11:return void Ydn(this,!1);case 12:return void Qdn(this,!1);case 13:return this.i=null,void lon(this,null);case 15:return void Jdn(this,!1);case 16:return void Cgn(this,!1);case 18:return void Sgn(this,!1)}sdn(this,n-iQ((YYn(),j_t)),ern(uG(Lsn(this,16),29)||j_t,n))},uZn.pi=function(){khn(this),BJ(Nen((gAn(),kBt),this)),bEn(this),this.Bb|=1},uZn.Jk=function(){return SNn(this)},uZn.Yk=function(n,t){return this.b=0,this.a=null,Ywn(this,n,t)},uZn.Zk=function(n){fj(this,n)},uZn.Ib=function(){var n;return 64&this.Db?MBn(this):((n=new fx(MBn(this))).a+=" (iD: ",Lj(n,!!(this.Bb&Qtt)),n.a+=")",n.a)},uZn.b=0,zW(Ytt,"EAttributeImpl",331),sDn(364,448,{110:1,94:1,93:1,142:1,155:1,197:1,58:1,114:1,54:1,99:1,364:1,158:1,119:1,120:1,691:1}),uZn.dl=function(n){return n.Dh()==this},uZn.Ah=function(n){return VTn(this,n)},uZn.Bh=function(n,t){this.w=null,this.Db=t<<16|255&this.Db,this.Cb=n},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return _Tn(this);case 4:return this.ik();case 5:return this.F;case 6:return t?Hrn(this):D0(this);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),this.A}return $tn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?VTn(this,e):this.Cb.Th(this,-1-i,null,e)),$Un(this,n,6,e)}return uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().zk(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 6:return $Un(this,null,6,e);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),Nyn(this.A,n,e)}return uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().Ak(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.D&&this.D==this.F;case 3:return!!_Tn(this);case 4:return null!=this.ik();case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!D0(this);case 7:return!!this.A&&0!=this.A.i}return l5(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void d2(this,mK(t));case 2:return void pN(this,mK(t));case 5:return void TWn(this,mK(t));case 7:return!this.A&&(this.A=new PD(J_t,this,7)),Czn(this.A),!this.A&&(this.A=new PD(J_t,this,7)),void CW(this.A,uG(t,16))}lpn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t)},uZn.ii=function(){return YYn(),S_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return F$(this.Cb,184)&&(uG(this.Cb,184).tb=null),void qon(this,null);case 2:return sbn(this,null),void Ocn(this,this.D);case 5:return void TWn(this,null);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),void Czn(this.A)}sdn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.hk=function(){var n;return-1==this.G&&(this.G=(n=Hrn(this))?Hyn(n.vi(),this):-1),this.G},uZn.ik=function(){return null},uZn.jk=function(){return Hrn(this)},uZn.el=function(){return this.v},uZn.kk=function(){return _Tn(this)},uZn.lk=function(){return null!=this.D?this.D:this.B},uZn.mk=function(){return this.F},uZn.fk=function(n){return LGn(this,n)},uZn.fl=function(n){this.v=n},uZn.gl=function(n){tun(this,n)},uZn.hl=function(n){this.C=n},uZn.ui=function(n){d2(this,n)},uZn.Ib=function(){return pmn(this)},uZn.C=null,uZn.D=null,uZn.G=-1,zW(Ytt,"EClassifierImpl",364),sDn(90,364,{110:1,94:1,93:1,29:1,142:1,155:1,197:1,58:1,114:1,54:1,99:1,90:1,364:1,158:1,482:1,119:1,120:1,691:1},Kl),uZn.dl=function(n){return VF(this,n.Dh())},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return _Tn(this);case 4:return null;case 5:return this.F;case 6:return t?Hrn(this):D0(this);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),this.A;case 8:return qx(),!!(256&this.Bb);case 9:return qx(),!!(512&this.Bb);case 10:return n1(this);case 11:return!this.q&&(this.q=new fV(p_t,this,11,10)),this.q;case 12:return hXn(this);case 13:return Zqn(this);case 14:return Zqn(this),this.r;case 15:return hXn(this),this.k;case 16:return RAn(this);case 17:return $qn(this);case 18:return eqn(this);case 19:return mRn(this);case 20:return hXn(this),this.o;case 21:return!this.s&&(this.s=new fV(o_t,this,21,17)),this.s;case 22:return z5(this);case 23:return x_n(this)}return $tn(this,n-iQ((YYn(),E_t)),ern(uG(Lsn(this,16),29)||E_t,n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?VTn(this,e):this.Cb.Th(this,-1-i,null,e)),$Un(this,n,6,e);case 11:return!this.q&&(this.q=new fV(p_t,this,11,10)),Nmn(this.q,n,e);case 21:return!this.s&&(this.s=new fV(o_t,this,21,17)),Nmn(this.s,n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),E_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),E_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 6:return $Un(this,null,6,e);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),Nyn(this.A,n,e);case 11:return!this.q&&(this.q=new fV(p_t,this,11,10)),Nyn(this.q,n,e);case 21:return!this.s&&(this.s=new fV(o_t,this,21,17)),Nyn(this.s,n,e);case 22:return Nyn(z5(this),n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),E_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),E_t)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.D&&this.D==this.F;case 3:return!!_Tn(this);case 4:return!1;case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!D0(this);case 7:return!!this.A&&0!=this.A.i;case 8:return!!(256&this.Bb);case 9:return!!(512&this.Bb);case 10:return!(!this.u||0==z5(this.u.a).i||this.n&&yMn(this.n));case 11:return!!this.q&&0!=this.q.i;case 12:return 0!=hXn(this).i;case 13:return 0!=Zqn(this).i;case 14:return Zqn(this),0!=this.r.i;case 15:return hXn(this),0!=this.k.i;case 16:return 0!=RAn(this).i;case 17:return 0!=$qn(this).i;case 18:return 0!=eqn(this).i;case 19:return 0!=mRn(this).i;case 20:return hXn(this),!!this.o;case 21:return!!this.s&&0!=this.s.i;case 22:return!!this.n&&yMn(this.n);case 23:return 0!=x_n(this).i}return l5(this,n-iQ((YYn(),E_t)),ern(uG(Lsn(this,16),29)||E_t,n))},uZn.Zh=function(n){return(null==this.i||this.q&&0!=this.q.i?null:EKn(this,n))||VQn(this,n)},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void d2(this,mK(t));case 2:return void pN(this,mK(t));case 5:return void TWn(this,mK(t));case 7:return!this.A&&(this.A=new PD(J_t,this,7)),Czn(this.A),!this.A&&(this.A=new PD(J_t,this,7)),void CW(this.A,uG(t,16));case 8:return void gdn(this,oM(gK(t)));case 9:return void vdn(this,oM(gK(t)));case 10:return _zn(n1(this)),void CW(n1(this),uG(t,16));case 11:return!this.q&&(this.q=new fV(p_t,this,11,10)),Czn(this.q),!this.q&&(this.q=new fV(p_t,this,11,10)),void CW(this.q,uG(t,16));case 21:return!this.s&&(this.s=new fV(o_t,this,21,17)),Czn(this.s),!this.s&&(this.s=new fV(o_t,this,21,17)),void CW(this.s,uG(t,16));case 22:return Czn(z5(this)),void CW(z5(this),uG(t,16))}lpn(this,n-iQ((YYn(),E_t)),ern(uG(Lsn(this,16),29)||E_t,n),t)},uZn.ii=function(){return YYn(),E_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return F$(this.Cb,184)&&(uG(this.Cb,184).tb=null),void qon(this,null);case 2:return sbn(this,null),void Ocn(this,this.D);case 5:return void TWn(this,null);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),void Czn(this.A);case 8:return void gdn(this,!1);case 9:return void vdn(this,!1);case 10:return void(this.u&&_zn(this.u));case 11:return!this.q&&(this.q=new fV(p_t,this,11,10)),void Czn(this.q);case 21:return!this.s&&(this.s=new fV(o_t,this,21,17)),void Czn(this.s);case 22:return void(this.n&&Czn(this.n))}sdn(this,n-iQ((YYn(),E_t)),ern(uG(Lsn(this,16),29)||E_t,n))},uZn.pi=function(){var n,t;if(hXn(this),Zqn(this),RAn(this),$qn(this),eqn(this),mRn(this),x_n(this),V9(iG(y9(this))),this.s)for(n=0,t=this.s.i;n=0;--t)zrn(this,t);return gmn(this,n)},uZn.Gk=function(){Czn(this)},uZn.Zi=function(n,t){return Dcn(this,n,t)},zW(art,"EcoreEList",632),sDn(505,632,Trt,FG),uZn.Li=function(){return!1},uZn.Lj=function(){return this.c},uZn.Mj=function(){return!1},uZn.ol=function(){return!0},uZn.Si=function(){return!0},uZn.Wi=function(n,t){return t},uZn.Yi=function(){return!1},uZn.c=0,zW(art,"EObjectEList",505),sDn(83,505,Trt,MD),uZn.Mj=function(){return!0},uZn.ml=function(){return!1},uZn.al=function(){return!0},zW(art,"EObjectContainmentEList",83),sDn(555,83,Trt,TD),uZn.Ni=function(){this.b=!0},uZn.Qj=function(){return this.b},uZn.Gk=function(){var n;Czn(this),uN(this.e)?(n=this.b,this.b=!1,Msn(this.e,new j9(this.e,2,this.c,n,!1))):this.b=!1},uZn.b=!1,zW(art,"EObjectContainmentEList/Unsettable",555),sDn(1161,555,Trt,hz),uZn.Ti=function(n,t){var e,i;return e=uG(zdn(this,n,t),89),uN(this.e)&&Yv(this,new wtn(this.a,7,(YYn(),P_t),xwn(t),F$(i=e.c,90)?uG(i,29):x_t,n)),e},uZn.Uj=function(n,t){return Dmn(this,uG(n,89),t)},uZn.Vj=function(n,t){return $mn(this,uG(n,89),t)},uZn.Wj=function(n,t,e){return TSn(this,uG(n,89),uG(t,89),e)},uZn.Ij=function(n,t,e,i,r){switch(n){case 3:return i2(this,n,t,e,i,this.i>1);case 5:return i2(this,n,t,e,i,this.i-uG(e,15).gc()>0);default:return new Ken(this.e,n,this.c,t,e,i,!0)}},uZn.Tj=function(){return!0},uZn.Qj=function(){return yMn(this)},uZn.Gk=function(){Czn(this)},zW(Ytt,"EClassImpl/1",1161),sDn(1175,1174,Fit),uZn.dj=function(n){var t,e,i,r,c,a,o;if(8!=(e=n.gj())){if(0==(i=xkn(n)))switch(e){case 1:case 9:null!=(o=n.kj())&&(!(t=y9(uG(o,482))).c&&(t.c=new Ks),rin(t.c,n.jj())),null!=(a=n.ij())&&(1&(r=uG(a,482)).Bb||(!(t=y9(r)).c&&(t.c=new Ks),ttn(t.c,uG(n.jj(),29))));break;case 3:null!=(a=n.ij())&&(1&(r=uG(a,482)).Bb||(!(t=y9(r)).c&&(t.c=new Ks),ttn(t.c,uG(n.jj(),29))));break;case 5:if(null!=(a=n.ij()))for(c=uG(a,16).Kc();c.Ob();)1&(r=uG(c.Pb(),482)).Bb||(!(t=y9(r)).c&&(t.c=new Ks),ttn(t.c,uG(n.jj(),29)));break;case 4:null!=(o=n.kj())&&(1&(r=uG(o,482)).Bb||(!(t=y9(r)).c&&(t.c=new Ks),rin(t.c,n.jj())));break;case 6:if(null!=(o=n.kj()))for(c=uG(o,16).Kc();c.Ob();)1&(r=uG(c.Pb(),482)).Bb||(!(t=y9(r)).c&&(t.c=new Ks),rin(t.c,n.jj()))}this.ql(i)}},uZn.ql=function(n){bBn(this,n)},uZn.b=63,zW(Ytt,"ESuperAdapter",1175),sDn(1176,1175,Fit,$m),uZn.ql=function(n){yLn(this,n)},zW(Ytt,"EClassImpl/10",1176),sDn(1165,710,Trt),uZn.Ei=function(n,t){return PCn(this,n,t)},uZn.Fi=function(n){return QMn(this,n)},uZn.Gi=function(n,t){edn(this,n,t)},uZn.Hi=function(n){z9(this,n)},uZn.$i=function(n){return Otn(this,n)},uZn.Xi=function(n,t){return iin(this,n,t)},uZn.Wk=function(n,t){throw hv(new Kv)},uZn.Ii=function(){return new nR(this)},uZn.Ji=function(){return new tR(this)},uZn.Ki=function(n){return han(this,n)},uZn.Xk=function(n,t){throw hv(new Kv)},uZn.Fk=function(n){return this},uZn.Qj=function(){return 0!=this.i},uZn.Wb=function(n){throw hv(new Kv)},uZn.Gk=function(){throw hv(new Kv)},zW(art,"EcoreEList/UnmodifiableEList",1165),sDn(328,1165,Trt,vL),uZn.Yi=function(){return!1},zW(art,"EcoreEList/UnmodifiableEList/FastCompare",328),sDn(1168,328,Trt,Afn),uZn.dd=function(n){var t,e;if(F$(n,179)&&-1!=(t=uG(n,179).Lj()))for(e=this.i;t4){if(!this.fk(n))return!1;if(this.al()){if(a=(t=(e=uG(n,54)).Eh())==this.b&&(this.ml()?e.yh(e.Fh(),uG(ern(e1(this.b),this.Lj()).Hk(),29).kk())==lMn(uG(ern(e1(this.b),this.Lj()),19)).n:-1-e.Fh()==this.Lj()),this.nl()&&!a&&!t&&e.Jh())for(i=0;i1||-1==e)},uZn.ml=function(){var n;return!!F$(n=ern(e1(this.b),this.Lj()),102)&&!!lMn(uG(n,19))},uZn.nl=function(){var n;return!!F$(n=ern(e1(this.b),this.Lj()),102)&&!!(uG(n,19).Bb&P0n)},uZn.dd=function(n){var t,e,i;if((e=this.zj(n))>=0)return e;if(this.ol())for(t=0,i=this.Ej();t=0;--n)yVn(this,n,this.xj(n));return this.Fj()},uZn.Qc=function(n){var t;if(this.nl())for(t=this.Ej()-1;t>=0;--t)yVn(this,t,this.xj(t));return this.Gj(n)},uZn.Gk=function(){_zn(this)},uZn.Zi=function(n,t){return Atn(this,n,t)},zW(art,"DelegatingEcoreEList",756),sDn(1171,756,Crt,aF),uZn.qj=function(n,t){zR(this,n,uG(t,29))},uZn.rj=function(n){BN(this,uG(n,29))},uZn.xj=function(n){var t;return F$(t=uG(zrn(z5(this.a),n),89).c,90)?uG(t,29):(YYn(),x_t)},uZn.Cj=function(n){var t;return F$(t=uG(e_n(z5(this.a),n),89).c,90)?uG(t,29):(YYn(),x_t)},uZn.Dj=function(n,t){return YMn(this,n,uG(t,29))},uZn.Li=function(){return!1},uZn.Ij=function(n,t,e,i,r){return null},uZn.sj=function(){return new Rm(this)},uZn.tj=function(){Czn(z5(this.a))},uZn.uj=function(n){return Mdn(this,n)},uZn.vj=function(n){var t;for(t=n.Kc();t.Ob();)if(!Mdn(this,t.Pb()))return!1;return!0},uZn.wj=function(n){var t,e,i;if(F$(n,15)&&(i=uG(n,15)).gc()==z5(this.a).i){for(t=i.Kc(),e=new DD(this);t.Ob();)if(xA(t.Pb())!==xA(Zkn(e)))return!1;return!0}return!1},uZn.yj=function(){var n,t,e,i;for(t=1,n=new DD(z5(this.a));n.e!=n.i.gc();)t=31*t+((e=F$(i=uG(Zkn(n),89).c,90)?uG(i,29):(YYn(),x_t))?xx(e):0);return t},uZn.zj=function(n){var t,e,i,r;for(i=0,e=new DD(z5(this.a));e.e!=e.i.gc();){if(t=uG(Zkn(e),89),xA(n)===xA(F$(r=t.c,90)?uG(r,29):(YYn(),x_t)))return i;++i}return-1},uZn.Aj=function(){return 0==z5(this.a).i},uZn.Bj=function(){return null},uZn.Ej=function(){return z5(this.a).i},uZn.Fj=function(){var n,t,e,i,r,c;for(c=z5(this.a).i,r=Inn(dat,EZn,1,c,5,1),e=0,t=new DD(z5(this.a));t.e!=t.i.gc();)n=uG(Zkn(t),89),r[e++]=F$(i=n.c,90)?uG(i,29):(YYn(),x_t);return r},uZn.Gj=function(n){var t,e,i,r;for(r=z5(this.a).i,n.lengthr&&uQ(n,r,null),e=0,t=new DD(z5(this.a));t.e!=t.i.gc();)uQ(n,e++,F$(i=uG(Zkn(t),89).c,90)?uG(i,29):(YYn(),x_t));return n},uZn.Hj=function(){var n,t,e,i,r;for((r=new zM).a+="[",n=z5(this.a),t=0,i=z5(this.a).i;t>16)>=0?VTn(this,e):this.Cb.Th(this,-1-i,null,e)),$Un(this,n,6,e);case 9:return!this.a&&(this.a=new fV(d_t,this,9,5)),Nmn(this.a,n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),I_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),I_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 6:return $Un(this,null,6,e);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),Nyn(this.A,n,e);case 9:return!this.a&&(this.a=new fV(d_t,this,9,5)),Nyn(this.a,n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),I_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),I_t)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.D&&this.D==this.F;case 3:return!!_Tn(this);case 4:return!!dbn(this);case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!D0(this);case 7:return!!this.A&&0!=this.A.i;case 8:return!(256&this.Bb);case 9:return!!this.a&&0!=this.a.i}return l5(this,n-iQ((YYn(),I_t)),ern(uG(Lsn(this,16),29)||I_t,n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void d2(this,mK(t));case 2:return void pN(this,mK(t));case 5:return void TWn(this,mK(t));case 7:return!this.A&&(this.A=new PD(J_t,this,7)),Czn(this.A),!this.A&&(this.A=new PD(J_t,this,7)),void CW(this.A,uG(t,16));case 8:return void pdn(this,oM(gK(t)));case 9:return!this.a&&(this.a=new fV(d_t,this,9,5)),Czn(this.a),!this.a&&(this.a=new fV(d_t,this,9,5)),void CW(this.a,uG(t,16))}lpn(this,n-iQ((YYn(),I_t)),ern(uG(Lsn(this,16),29)||I_t,n),t)},uZn.ii=function(){return YYn(),I_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return F$(this.Cb,184)&&(uG(this.Cb,184).tb=null),void qon(this,null);case 2:return sbn(this,null),void Ocn(this,this.D);case 5:return void TWn(this,null);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),void Czn(this.A);case 8:return void pdn(this,!0);case 9:return!this.a&&(this.a=new fV(d_t,this,9,5)),void Czn(this.a)}sdn(this,n-iQ((YYn(),I_t)),ern(uG(Lsn(this,16),29)||I_t,n))},uZn.pi=function(){var n,t;if(this.a)for(n=0,t=this.a.i;n>16==5?uG(this.Cb,685):null}return $tn(this,n-iQ((YYn(),O_t)),ern(uG(Lsn(this,16),29)||O_t,n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 5:return this.Cb&&(e=(i=this.Db>>16)>=0?Qjn(this,e):this.Cb.Th(this,-1-i,null,e)),$Un(this,n,5,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),O_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),O_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 5:return $Un(this,null,5,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),O_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),O_t)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0!=this.d;case 3:return!!this.b;case 4:return null!=this.c;case 5:return!(this.Db>>16!=5||!uG(this.Cb,685))}return l5(this,n-iQ((YYn(),O_t)),ern(uG(Lsn(this,16),29)||O_t,n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void qon(this,mK(t));case 2:return void Icn(this,uG(t,17).a);case 3:return void h$n(this,uG(t,2039));case 4:return void Uan(this,mK(t))}lpn(this,n-iQ((YYn(),O_t)),ern(uG(Lsn(this,16),29)||O_t,n),t)},uZn.ii=function(){return YYn(),O_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void qon(this,null);case 2:return void Icn(this,0);case 3:return void h$n(this,null);case 4:return void Uan(this,null)}sdn(this,n-iQ((YYn(),O_t)),ern(uG(Lsn(this,16),29)||O_t,n))},uZn.Ib=function(){var n;return null==(n=this.c)?this.zb:n},uZn.b=null,uZn.c=null,uZn.d=0,zW(Ytt,"EEnumLiteralImpl",582);var nBt,tBt,eBt,iBt=Iq(Ytt,"EFactoryImpl/InternalEDateTimeFormat");sDn(499,1,{2114:1},Km),zW(Ytt,"EFactoryImpl/1ClientInternalEDateTimeFormat",499),sDn(248,120,{110:1,94:1,93:1,89:1,58:1,114:1,54:1,99:1,248:1,119:1,120:1},ev),uZn.Ch=function(n,t,e){var i;return e=$Un(this,n,t,e),this.e&&F$(n,179)&&(i=bRn(this,this.e))!=this.c&&(e=PWn(this,i,e)),e},uZn.Lh=function(n,t,e){switch(n){case 0:return this.f;case 1:return!this.d&&(this.d=new MD(g_t,this,1)),this.d;case 2:return t?MGn(this):this.c;case 3:return this.b;case 4:return this.e;case 5:return t?PMn(this):this.a}return $tn(this,n-iQ((YYn(),L_t)),ern(uG(Lsn(this,16),29)||L_t,n),t,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return vwn(this,null,e);case 1:return!this.d&&(this.d=new MD(g_t,this,1)),Nyn(this.d,n,e);case 3:return kwn(this,null,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),L_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),L_t)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.f;case 1:return!!this.d&&0!=this.d.i;case 2:return!!this.c;case 3:return!!this.b;case 4:return!!this.e;case 5:return!!this.a}return l5(this,n-iQ((YYn(),L_t)),ern(uG(Lsn(this,16),29)||L_t,n))},uZn.bi=function(n,t){switch(n){case 0:return void cPn(this,uG(t,89));case 1:return!this.d&&(this.d=new MD(g_t,this,1)),Czn(this.d),!this.d&&(this.d=new MD(g_t,this,1)),void CW(this.d,uG(t,16));case 3:return void rPn(this,uG(t,89));case 4:return void MIn(this,uG(t,850));case 5:return void Urn(this,uG(t,142))}lpn(this,n-iQ((YYn(),L_t)),ern(uG(Lsn(this,16),29)||L_t,n),t)},uZn.ii=function(){return YYn(),L_t},uZn.ki=function(n){switch(n){case 0:return void cPn(this,null);case 1:return!this.d&&(this.d=new MD(g_t,this,1)),void Czn(this.d);case 3:return void rPn(this,null);case 4:return void MIn(this,null);case 5:return void Urn(this,null)}sdn(this,n-iQ((YYn(),L_t)),ern(uG(Lsn(this,16),29)||L_t,n))},uZn.Ib=function(){var n;return(n=new lx(vxn(this))).a+=" (expression: ",qXn(this,n),n.a+=")",n.a},zW(Ytt,"EGenericTypeImpl",248),sDn(2067,2062,Irt),uZn.Gi=function(n,t){YK(this,n,t)},uZn.Wk=function(n,t){return YK(this,this.gc(),n),t},uZn.$i=function(n){return hyn(this.pj(),n)},uZn.Ii=function(){return this.Ji()},uZn.pj=function(){return new zm(this)},uZn.Ji=function(){return this.Ki(0)},uZn.Ki=function(n){return this.pj().fd(n)},uZn.Xk=function(n,t){return Wpn(this,n,!0),t},uZn.Ti=function(n,t){var e;return e=Kjn(this,t),this.fd(n).Rb(e),e},uZn.Ui=function(n,t){Wpn(this,t,!0),this.fd(n).Rb(t)},zW(art,"AbstractSequentialInternalEList",2067),sDn(496,2067,Irt,zx),uZn.$i=function(n){return hyn(this.pj(),n)},uZn.Ii=function(){return null==this.b?(EP(),EP(),eBt):this.sl()},uZn.pj=function(){return new kL(this.a,this.b)},uZn.Ji=function(){return null==this.b?(EP(),EP(),eBt):this.sl()},uZn.Ki=function(n){var t,e;if(null==this.b){if(n<0||n>1)throw hv(new dM(Hit+n+", size=0"));return EP(),EP(),eBt}for(e=this.sl(),t=0;t0;)if(t=this.c[--this.d],(!this.e||t.pk()!=tFt||0!=t.Lj())&&(!this.vl()||this.b.Xh(t)))if(c=this.b.Nh(t,this.ul()),this.f=(PP(),uG(t,69).xk()),this.f||t.Jk()){if(this.ul()?(i=uG(c,15),this.k=i):(i=uG(c,71),this.k=this.j=i),F$(this.k,59)?(this.o=this.k.gc(),this.n=this.o):this.p=this.j?this.j.Ki(this.k.gc()):this.k.fd(this.k.gc()),this.p?dAn(this,this.p):hLn(this))return r=this.p?this.p.Ub():this.j?this.j.$i(--this.n):this.k.Xb(--this.n),this.f?((n=uG(r,76)).Lk(),e=n.md(),this.i=e):(e=r,this.i=e),this.g=-3,!0}else if(null!=c)return this.k=null,this.p=null,e=c,this.i=e,this.g=-2,!0;return this.k=null,this.p=null,this.g=-1,!1}},uZn.Pb=function(){return Ksn(this)},uZn.Tb=function(){return this.a},uZn.Ub=function(){var n;if(this.g<-1||this.Sb())return--this.a,this.g=0,n=this.i,this.Sb(),n;throw hv(new Bv)},uZn.Vb=function(){return this.a-1},uZn.Qb=function(){throw hv(new Kv)},uZn.ul=function(){return!1},uZn.Wb=function(n){throw hv(new Kv)},uZn.vl=function(){return!0},uZn.a=0,uZn.d=0,uZn.f=!1,uZn.g=0,uZn.n=0,uZn.o=0,zW(art,"EContentsEList/FeatureIteratorImpl",287),sDn(711,287,Ort,WR),uZn.ul=function(){return!0},zW(art,"EContentsEList/ResolvingFeatureIteratorImpl",711),sDn(1178,711,Ort,QR),uZn.vl=function(){return!1},zW(Ytt,"ENamedElementImpl/1/1",1178),sDn(1179,287,Ort,JR),uZn.vl=function(){return!1},zW(Ytt,"ENamedElementImpl/1/2",1179),sDn(39,152,Bit,t8,e8,lV,btn,Ken,j9,Bcn,o4,Hcn,u4,E9,s4,qcn,h4,S9,f4,Ucn,l4,bV,wtn,kZ,Gcn,b4,P9,w4),uZn.Kj=function(){return ntn(this)},uZn.Rj=function(){var n;return(n=ntn(this))?n.ik():null},uZn.hj=function(n){return-1==this.b&&this.a&&(this.b=this.c.Hh(this.a.Lj(),this.a.pk())),this.c.yh(this.b,n)},uZn.jj=function(){return this.c},uZn.Sj=function(){var n;return!!(n=ntn(this))&&n.tk()},uZn.b=-1,zW(Ytt,"ENotificationImpl",39),sDn(411,292,{110:1,94:1,93:1,155:1,197:1,58:1,62:1,114:1,481:1,54:1,99:1,158:1,411:1,292:1,119:1,120:1},Yk),uZn.Ah=function(n){return fEn(this,n)},uZn.Lh=function(n,t,e){var i;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return qx(),!!(256&this.Bb);case 3:return qx(),!!(512&this.Bb);case 4:return xwn(this.s);case 5:return xwn(this.t);case 6:return qx(),(i=this.t)>1||-1==i;case 7:return qx(),this.s>=1;case 8:return t?bEn(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?uG(this.Cb,29):null;case 11:return!this.d&&(this.d=new PD(J_t,this,11)),this.d;case 12:return!this.c&&(this.c=new fV(m_t,this,12,10)),this.c;case 13:return!this.a&&(this.a=new oF(this,this)),this.a;case 14:return Aen(this)}return $tn(this,n-iQ((YYn(),R_t)),ern(uG(Lsn(this,16),29)||R_t,n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 10:return this.Cb&&(e=(i=this.Db>>16)>=0?fEn(this,e):this.Cb.Th(this,-1-i,null,e)),$Un(this,n,10,e);case 12:return!this.c&&(this.c=new fV(m_t,this,12,10)),Nmn(this.c,n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),R_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),R_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 9:return IW(this,e);case 10:return $Un(this,null,10,e);case 11:return!this.d&&(this.d=new PD(J_t,this,11)),Nyn(this.d,n,e);case 12:return!this.c&&(this.c=new fV(m_t,this,12,10)),Nyn(this.c,n,e);case 14:return Nyn(Aen(this),n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),R_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),R_t)),n,e)},uZn.Wh=function(n){var t;switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return!(256&this.Bb);case 3:return!(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return(t=this.t)>1||-1==t;case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yQ(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yQ(this.q).i);case 10:return!(this.Db>>16!=10||!uG(this.Cb,29));case 11:return!!this.d&&0!=this.d.i;case 12:return!!this.c&&0!=this.c.i;case 13:return!(!this.a||0==Aen(this.a.a).i||this.b&&MMn(this.b));case 14:return!!this.b&&MMn(this.b)}return l5(this,n-iQ((YYn(),R_t)),ern(uG(Lsn(this,16),29)||R_t,n))},uZn.bi=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void qon(this,mK(t));case 2:return void ddn(this,oM(gK(t)));case 3:return void mdn(this,oM(gK(t)));case 4:return void Pcn(this,uG(t,17).a);case 5:return void Ccn(this,uG(t,17).a);case 8:return void Kbn(this,uG(t,142));case 9:return void((e=CCn(this,uG(t,89),null))&&e.oj());case 11:return!this.d&&(this.d=new PD(J_t,this,11)),Czn(this.d),!this.d&&(this.d=new PD(J_t,this,11)),void CW(this.d,uG(t,16));case 12:return!this.c&&(this.c=new fV(m_t,this,12,10)),Czn(this.c),!this.c&&(this.c=new fV(m_t,this,12,10)),void CW(this.c,uG(t,16));case 13:return!this.a&&(this.a=new oF(this,this)),_zn(this.a),!this.a&&(this.a=new oF(this,this)),void CW(this.a,uG(t,16));case 14:return Czn(Aen(this)),void CW(Aen(this),uG(t,16))}lpn(this,n-iQ((YYn(),R_t)),ern(uG(Lsn(this,16),29)||R_t,n),t)},uZn.ii=function(){return YYn(),R_t},uZn.ki=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void qon(this,null);case 2:return void ddn(this,!0);case 3:return void mdn(this,!0);case 4:return void Pcn(this,0);case 5:return void Ccn(this,1);case 8:return void Kbn(this,null);case 9:return void((t=CCn(this,null,null))&&t.oj());case 11:return!this.d&&(this.d=new PD(J_t,this,11)),void Czn(this.d);case 12:return!this.c&&(this.c=new fV(m_t,this,12,10)),void Czn(this.c);case 13:return void(this.a&&_zn(this.a));case 14:return void(this.b&&Czn(this.b))}sdn(this,n-iQ((YYn(),R_t)),ern(uG(Lsn(this,16),29)||R_t,n))},uZn.pi=function(){var n,t;if(this.c)for(n=0,t=this.c.i;ni&&uQ(n,i,null),e=0,t=new DD(Aen(this.a));t.e!=t.i.gc();)uQ(n,e++,uG(Zkn(t),89).c||(YYn(),N_t));return n},uZn.Hj=function(){var n,t,e,i;for((i=new zM).a+="[",n=Aen(this.a),t=0,e=Aen(this.a).i;t1);case 5:return i2(this,n,t,e,i,this.i-uG(e,15).gc()>0);default:return new Ken(this.e,n,this.c,t,e,i,!0)}},uZn.Tj=function(){return!0},uZn.Qj=function(){return MMn(this)},uZn.Gk=function(){Czn(this)},zW(Ytt,"EOperationImpl/2",1377),sDn(507,1,{2037:1,507:1},EA),zW(Ytt,"EPackageImpl/1",507),sDn(14,83,Trt,fV),uZn.il=function(){return this.d},uZn.jl=function(){return this.b},uZn.ml=function(){return!0},uZn.b=0,zW(art,"EObjectContainmentWithInverseEList",14),sDn(365,14,Trt,i_),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectContainmentWithInverseEList/Resolving",365),sDn(308,365,Trt,vV),uZn.Ni=function(){this.a.tb=null},zW(Ytt,"EPackageImpl/2",308),sDn(1278,1,{},Ps),zW(Ytt,"EPackageImpl/3",1278),sDn(733,45,B0n,Zk),uZn._b=function(n){return RA(n)?AZ(this,n):!!FX(this.f,n)},zW(Ytt,"EPackageRegistryImpl",733),sDn(518,292,{110:1,94:1,93:1,155:1,197:1,58:1,2116:1,114:1,481:1,54:1,99:1,158:1,518:1,292:1,119:1,120:1},ny),uZn.Ah=function(n){return lEn(this,n)},uZn.Lh=function(n,t,e){var i;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return qx(),!!(256&this.Bb);case 3:return qx(),!!(512&this.Bb);case 4:return xwn(this.s);case 5:return xwn(this.t);case 6:return qx(),(i=this.t)>1||-1==i;case 7:return qx(),this.s>=1;case 8:return t?bEn(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?uG(this.Cb,62):null}return $tn(this,n-iQ((YYn(),__t)),ern(uG(Lsn(this,16),29)||__t,n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 10:return this.Cb&&(e=(i=this.Db>>16)>=0?lEn(this,e):this.Cb.Th(this,-1-i,null,e)),$Un(this,n,10,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),__t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),__t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 9:return IW(this,e);case 10:return $Un(this,null,10,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),__t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),__t)),n,e)},uZn.Wh=function(n){var t;switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return!(256&this.Bb);case 3:return!(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return(t=this.t)>1||-1==t;case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yQ(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yQ(this.q).i);case 10:return!(this.Db>>16!=10||!uG(this.Cb,62))}return l5(this,n-iQ((YYn(),__t)),ern(uG(Lsn(this,16),29)||__t,n))},uZn.ii=function(){return YYn(),__t},zW(Ytt,"EParameterImpl",518),sDn(102,462,{110:1,94:1,93:1,155:1,197:1,58:1,19:1,179:1,69:1,114:1,481:1,54:1,99:1,158:1,102:1,462:1,292:1,119:1,120:1,692:1},PK),uZn.Lh=function(n,t,e){var i,r;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return qx(),!!(256&this.Bb);case 3:return qx(),!!(512&this.Bb);case 4:return xwn(this.s);case 5:return xwn(this.t);case 6:return qx(),(r=this.t)>1||-1==r;case 7:return qx(),this.s>=1;case 8:return t?bEn(this):this.r;case 9:return this.q;case 10:return qx(),!!(this.Bb&w1n);case 11:return qx(),!!(this.Bb&frt);case 12:return qx(),!!(this.Bb&j0n);case 13:return this.j;case 14:return NRn(this);case 15:return qx(),!!(this.Bb&hrt);case 16:return qx(),!!(this.Bb&VZn);case 17:return K0(this);case 18:return qx(),!!(this.Bb&Qtt);case 19:return qx(),!!((i=lMn(this))&&i.Bb&Qtt);case 20:return qx(),!!(this.Bb&P0n);case 21:return t?lMn(this):this.b;case 22:return t?Ffn(this):R9(this);case 23:return!this.a&&(this.a=new OD(u_t,this,23)),this.a}return $tn(this,n-iQ((YYn(),B_t)),ern(uG(Lsn(this,16),29)||B_t,n),t,e)},uZn.Wh=function(n){var t,e;switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return!(256&this.Bb);case 3:return!(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return(e=this.t)>1||-1==e;case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yQ(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yQ(this.q).i);case 10:return!(this.Bb&w1n);case 11:return!!(this.Bb&frt);case 12:return!!(this.Bb&j0n);case 13:return null!=this.j;case 14:return null!=NRn(this);case 15:return!!(this.Bb&hrt);case 16:return!!(this.Bb&VZn);case 17:return!!K0(this);case 18:return!!(this.Bb&Qtt);case 19:return!!(t=lMn(this))&&!!(t.Bb&Qtt);case 20:return!(this.Bb&P0n);case 21:return!!this.b;case 22:return!!R9(this);case 23:return!!this.a&&0!=this.a.i}return l5(this,n-iQ((YYn(),B_t)),ern(uG(Lsn(this,16),29)||B_t,n))},uZn.bi=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void g2(this,mK(t));case 2:return void ddn(this,oM(gK(t)));case 3:return void mdn(this,oM(gK(t)));case 4:return void Pcn(this,uG(t,17).a);case 5:return void Ccn(this,uG(t,17).a);case 8:return void Kbn(this,uG(t,142));case 9:return void((e=CCn(this,uG(t,89),null))&&e.oj());case 10:return void Wdn(this,oM(gK(t)));case 11:return void Ydn(this,oM(gK(t)));case 12:return void Qdn(this,oM(gK(t)));case 13:return void mA(this,mK(t));case 15:return void Jdn(this,oM(gK(t)));case 16:return void Cgn(this,oM(gK(t)));case 18:return void p2(this,oM(gK(t)));case 20:return void Ign(this,oM(gK(t)));case 21:return void bon(this,uG(t,19));case 23:return!this.a&&(this.a=new OD(u_t,this,23)),Czn(this.a),!this.a&&(this.a=new OD(u_t,this,23)),void CW(this.a,uG(t,16))}lpn(this,n-iQ((YYn(),B_t)),ern(uG(Lsn(this,16),29)||B_t,n),t)},uZn.ii=function(){return YYn(),B_t},uZn.ki=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return F$(this.Cb,90)&&yLn(y9(uG(this.Cb,90)),4),void qon(this,null);case 2:return void ddn(this,!0);case 3:return void mdn(this,!0);case 4:return void Pcn(this,0);case 5:return void Ccn(this,1);case 8:return void Kbn(this,null);case 9:return void((t=CCn(this,null,null))&&t.oj());case 10:return void Wdn(this,!0);case 11:return void Ydn(this,!1);case 12:return void Qdn(this,!1);case 13:return this.i=null,void lon(this,null);case 15:return void Jdn(this,!1);case 16:return void Cgn(this,!1);case 18:return Pgn(this,!1),void(F$(this.Cb,90)&&yLn(y9(uG(this.Cb,90)),2));case 20:return void Ign(this,!0);case 21:return void bon(this,null);case 23:return!this.a&&(this.a=new OD(u_t,this,23)),void Czn(this.a)}sdn(this,n-iQ((YYn(),B_t)),ern(uG(Lsn(this,16),29)||B_t,n))},uZn.pi=function(){Ffn(this),BJ(Nen((gAn(),kBt),this)),bEn(this),this.Bb|=1},uZn.uk=function(){return lMn(this)},uZn._k=function(){var n;return!!(n=lMn(this))&&!!(n.Bb&Qtt)},uZn.al=function(){return!!(this.Bb&Qtt)},uZn.bl=function(){return!!(this.Bb&P0n)},uZn.Yk=function(n,t){return this.c=null,Ywn(this,n,t)},uZn.Ib=function(){var n;return 64&this.Db?MBn(this):((n=new fx(MBn(this))).a+=" (containment: ",Lj(n,!!(this.Bb&Qtt)),n.a+=", resolveProxies: ",Lj(n,!!(this.Bb&P0n)),n.a+=")",n.a)},zW(Ytt,"EReferenceImpl",102),sDn(561,120,{110:1,44:1,94:1,93:1,136:1,58:1,114:1,54:1,99:1,561:1,119:1,120:1},Cs),uZn.Fb=function(n){return this===n},uZn.ld=function(){return this.b},uZn.md=function(){return this.c},uZn.Hb=function(){return xx(this)},uZn.Di=function(n){Rq(this,mK(n))},uZn.nd=function(n){return DG(this,mK(n))},uZn.Lh=function(n,t,e){switch(n){case 0:return this.b;case 1:return this.c}return $tn(this,n-iQ((YYn(),H_t)),ern(uG(Lsn(this,16),29)||H_t,n),t,e)},uZn.Wh=function(n){switch(n){case 0:return null!=this.b;case 1:return null!=this.c}return l5(this,n-iQ((YYn(),H_t)),ern(uG(Lsn(this,16),29)||H_t,n))},uZn.bi=function(n,t){switch(n){case 0:return void Kq(this,mK(t));case 1:return void Jan(this,mK(t))}lpn(this,n-iQ((YYn(),H_t)),ern(uG(Lsn(this,16),29)||H_t,n),t)},uZn.ii=function(){return YYn(),H_t},uZn.ki=function(n){switch(n){case 0:return void Qan(this,null);case 1:return void Jan(this,null)}sdn(this,n-iQ((YYn(),H_t)),ern(uG(Lsn(this,16),29)||H_t,n))},uZn.Bi=function(){var n;return-1==this.a&&(n=this.b,this.a=null==n?0:pln(n)),this.a},uZn.Ci=function(n){this.a=n},uZn.Ib=function(){var n;return 64&this.Db?vxn(this):((n=new fx(vxn(this))).a+=" (key: ",VA(n,this.b),n.a+=", value: ",VA(n,this.c),n.a+=")",n.a)},uZn.a=-1,uZn.b=null,uZn.c=null;var rBt,cBt,aBt,oBt,uBt,sBt,hBt,fBt,lBt,bBt,wBt=zW(Ytt,"EStringToStringMapEntryImpl",561),dBt=Iq(art,"FeatureMap/Entry/Internal");sDn(576,1,Art),uZn.xl=function(n){return this.yl(uG(n,54))},uZn.yl=function(n){return this.xl(n)},uZn.Fb=function(n){var t,e;return this===n||!!F$(n,76)&&(t=uG(n,76)).Lk()==this.c&&(null==(e=this.md())?null==t.md():udn(e,t.md()))},uZn.Lk=function(){return this.c},uZn.Hb=function(){var n;return n=this.md(),Hon(this.c)^(null==n?0:Hon(n))},uZn.Ib=function(){var n,t;return t=Hrn((n=this.c).qk()).yi(),n.xe(),(null!=t&&0!=t.length?t+":"+n.xe():n.xe())+"="+this.md()},zW(Ytt,"EStructuralFeatureImpl/BasicFeatureMapEntry",576),sDn(791,576,Art,sF),uZn.yl=function(n){return new sF(this.c,n)},uZn.md=function(){return this.a},uZn.zl=function(n,t,e){return Kun(this,n,this.a,t,e)},uZn.Al=function(n,t,e){return Fun(this,n,this.a,t,e)},zW(Ytt,"EStructuralFeatureImpl/ContainmentUpdatingFeatureMapEntry",791),sDn(1350,1,{},SA),uZn.yk=function(n,t,e,i,r){return uG(vtn(n,this.b),220).Yl(this.a).Fk(i)},uZn.zk=function(n,t,e,i,r){return uG(vtn(n,this.b),220).Pl(this.a,i,r)},uZn.Ak=function(n,t,e,i,r){return uG(vtn(n,this.b),220).Ql(this.a,i,r)},uZn.Bk=function(n,t,e){return uG(vtn(n,this.b),220).Yl(this.a).Qj()},uZn.Ck=function(n,t,e,i){uG(vtn(n,this.b),220).Yl(this.a).Wb(i)},uZn.Dk=function(n,t,e){return uG(vtn(n,this.b),220).Yl(this.a)},uZn.Ek=function(n,t,e){uG(vtn(n,this.b),220).Yl(this.a).Gk()},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateFeatureMapDelegator",1350),sDn(91,1,{},RU,CY,GZ,r8),uZn.yk=function(n,t,e,i,r){var c;if(null==(c=t.li(e))&&t.mi(e,c=xYn(this,n)),!r)switch(this.e){case 50:case 41:return uG(c,597).bk();case 40:return uG(c,220).Vl()}return c},uZn.zk=function(n,t,e,i,r){var c;return null==(c=t.li(e))&&t.mi(e,c=xYn(this,n)),uG(c,71).Wk(i,r)},uZn.Ak=function(n,t,e,i,r){var c;return null!=(c=t.li(e))&&(r=uG(c,71).Xk(i,r)),r},uZn.Bk=function(n,t,e){var i;return null!=(i=t.li(e))&&uG(i,79).Qj()},uZn.Ck=function(n,t,e,i){var r;!(r=uG(t.li(e),79))&&t.mi(e,r=xYn(this,n)),r.Wb(i)},uZn.Dk=function(n,t,e){var i;return null==(i=t.li(e))&&t.mi(e,i=xYn(this,n)),F$(i,79)?uG(i,79):new _m(uG(t.li(e),15))},uZn.Ek=function(n,t,e){var i;!(i=uG(t.li(e),79))&&t.mi(e,i=xYn(this,n)),i.Gk()},uZn.b=0,uZn.e=0,zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateMany",91),sDn(512,1,{}),uZn.zk=function(n,t,e,i,r){throw hv(new Kv)},uZn.Ak=function(n,t,e,i,r){throw hv(new Kv)},uZn.Dk=function(n,t,e){return new IY(this,n,t,e)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingle",512),sDn(1367,1,ort,IY),uZn.Fk=function(n){return this.a.yk(this.c,this.d,this.b,n,!0)},uZn.Qj=function(){return this.a.Bk(this.c,this.d,this.b)},uZn.Wb=function(n){this.a.Ck(this.c,this.d,this.b,n)},uZn.Gk=function(){this.a.Ek(this.c,this.d,this.b)},uZn.b=0,zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingle/1",1367),sDn(784,512,{},_1),uZn.yk=function(n,t,e,i,r){return PHn(n,n.Ph(),n.Fh())==this.b?this.bl()&&i?J$n(n):n.Ph():null},uZn.zk=function(n,t,e,i,r){var c,a;return n.Ph()&&(r=(c=n.Fh())>=0?n.Ah(r):n.Ph().Th(n,-1-c,null,r)),a=emn(n.Dh(),this.e),n.Ch(i,a,r)},uZn.Ak=function(n,t,e,i,r){var c;return c=emn(n.Dh(),this.e),n.Ch(null,c,r)},uZn.Bk=function(n,t,e){var i;return i=emn(n.Dh(),this.e),!!n.Ph()&&n.Fh()==i},uZn.Ck=function(n,t,e,i){var r,c,a,o,u;if(null!=i&&!LGn(this.a,i))throw hv(new mM(Lrt+(F$(i,58)?nPn(uG(i,58).Dh()):crn(Tbn(i)))+Nrt+this.a+"'"));if(r=n.Ph(),a=emn(n.Dh(),this.e),xA(i)!==xA(r)||n.Fh()!=a&&null!=i){if(eEn(n,uG(i,58)))throw hv(new vM(net+n.Ib()));u=null,r&&(u=(c=n.Fh())>=0?n.Ah(u):n.Ph().Th(n,-1-c,null,u)),(o=uG(i,54))&&(u=o.Rh(n,emn(o.Dh(),this.b),null,u)),(u=n.Ch(o,a,u))&&u.oj()}else n.vh()&&n.wh()&&Msn(n,new lV(n,1,a,i,i))},uZn.Ek=function(n,t,e){var i,r,c;n.Ph()?(c=(i=n.Fh())>=0?n.Ah(null):n.Ph().Th(n,-1-i,null,null),r=emn(n.Dh(),this.e),(c=n.Ch(null,r,c))&&c.oj()):n.vh()&&n.wh()&&Msn(n,new bV(n,1,this.e,null,null))},uZn.bl=function(){return!1},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainer",784),sDn(1351,784,{},KU),uZn.bl=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainerResolving",1351),sDn(574,512,{}),uZn.yk=function(n,t,e,i,r){var c;return null==(c=t.li(e))?this.b:xA(c)===xA(rBt)?null:c},uZn.Bk=function(n,t,e){var i;return null!=(i=t.li(e))&&(xA(i)===xA(rBt)||!udn(i,this.b))},uZn.Ck=function(n,t,e,i){var r,c;n.vh()&&n.wh()?(r=null==(c=t.li(e))?this.b:xA(c)===xA(rBt)?null:c,null==i?null!=this.c?(t.mi(e,null),i=this.b):null!=this.b?t.mi(e,rBt):t.mi(e,null):(this.Bl(i),t.mi(e,i)),Msn(n,this.d.Cl(n,1,this.e,r,i))):null==i?null!=this.c?t.mi(e,null):null!=this.b?t.mi(e,rBt):t.mi(e,null):(this.Bl(i),t.mi(e,i))},uZn.Ek=function(n,t,e){var i,r;n.vh()&&n.wh()?(i=null==(r=t.li(e))?this.b:xA(r)===xA(rBt)?null:r,t.ni(e),Msn(n,this.d.Cl(n,1,this.e,i,this.b))):t.ni(e)},uZn.Bl=function(n){throw hv(new $v)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData",574),sDn($rt,1,{},Is),uZn.Cl=function(n,t,e,i,r){return new bV(n,t,e,i,r)},uZn.Dl=function(n,t,e,i,r,c){return new kZ(n,t,e,i,r,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator",$rt),sDn(1368,$rt,{},Os),uZn.Cl=function(n,t,e,i,r){return new P9(n,t,e,oM(gK(i)),oM(gK(r)))},uZn.Dl=function(n,t,e,i,r,c){return new w4(n,t,e,oM(gK(i)),oM(gK(r)),c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/1",1368),sDn(1369,$rt,{},As),uZn.Cl=function(n,t,e,i,r){return new Bcn(n,t,e,uG(i,222).a,uG(r,222).a)},uZn.Dl=function(n,t,e,i,r,c){return new o4(n,t,e,uG(i,222).a,uG(r,222).a,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/2",1369),sDn(1370,$rt,{},Ls),uZn.Cl=function(n,t,e,i,r){return new Hcn(n,t,e,uG(i,180).a,uG(r,180).a)},uZn.Dl=function(n,t,e,i,r,c){return new u4(n,t,e,uG(i,180).a,uG(r,180).a,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/3",1370),sDn(1371,$rt,{},Ns),uZn.Cl=function(n,t,e,i,r){return new E9(n,t,e,uM(pK(i)),uM(pK(r)))},uZn.Dl=function(n,t,e,i,r,c){return new s4(n,t,e,uM(pK(i)),uM(pK(r)),c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/4",1371),sDn(1372,$rt,{},$s),uZn.Cl=function(n,t,e,i,r){return new qcn(n,t,e,uG(i,161).a,uG(r,161).a)},uZn.Dl=function(n,t,e,i,r,c){return new h4(n,t,e,uG(i,161).a,uG(r,161).a,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/5",1372),sDn(1373,$rt,{},Ds),uZn.Cl=function(n,t,e,i,r){return new S9(n,t,e,uG(i,17).a,uG(r,17).a)},uZn.Dl=function(n,t,e,i,r,c){return new f4(n,t,e,uG(i,17).a,uG(r,17).a,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/6",1373),sDn(1374,$rt,{},xs),uZn.Cl=function(n,t,e,i,r){return new Ucn(n,t,e,uG(i,168).a,uG(r,168).a)},uZn.Dl=function(n,t,e,i,r,c){return new l4(n,t,e,uG(i,168).a,uG(r,168).a,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/7",1374),sDn(1375,$rt,{},Rs),uZn.Cl=function(n,t,e,i,r){return new Gcn(n,t,e,uG(i,191).a,uG(r,191).a)},uZn.Dl=function(n,t,e,i,r,c){return new b4(n,t,e,uG(i,191).a,uG(r,191).a,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/8",1375),sDn(1353,574,{},OY),uZn.Bl=function(n){if(!this.a.fk(n))throw hv(new mM(Lrt+Tbn(n)+Nrt+this.a+"'"))},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataDynamic",1353),sDn(1354,574,{},lz),uZn.Bl=function(n){},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataStatic",1354),sDn(785,574,{}),uZn.Bk=function(n,t,e){return null!=t.li(e)},uZn.Ck=function(n,t,e,i){var r,c;n.vh()&&n.wh()?(r=!0,null==(c=t.li(e))?(r=!1,c=this.b):xA(c)===xA(rBt)&&(c=null),null==i?null!=this.c?(t.mi(e,null),i=this.b):t.mi(e,rBt):(this.Bl(i),t.mi(e,i)),Msn(n,this.d.Dl(n,1,this.e,c,i,!r))):null==i?null!=this.c?t.mi(e,null):t.mi(e,rBt):(this.Bl(i),t.mi(e,i))},uZn.Ek=function(n,t,e){var i,r;n.vh()&&n.wh()?(i=!0,null==(r=t.li(e))?(i=!1,r=this.b):xA(r)===xA(rBt)&&(r=null),t.ni(e),Msn(n,this.d.Dl(n,2,this.e,r,this.b,i))):t.ni(e)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettable",785),sDn(1355,785,{},AY),uZn.Bl=function(n){if(!this.a.fk(n))throw hv(new mM(Lrt+Tbn(n)+Nrt+this.a+"'"))},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableDynamic",1355),sDn(1356,785,{},bz),uZn.Bl=function(n){},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableStatic",1356),sDn(410,512,{},OX),uZn.yk=function(n,t,e,i,r){var c,a,o,u,s;if(s=t.li(e),this.tk()&&xA(s)===xA(rBt))return null;if(this.bl()&&i&&null!=s){if((o=uG(s,54)).Vh()&&o!=(u=mwn(n,o))){if(!LGn(this.a,u))throw hv(new mM(Lrt+Tbn(u)+Nrt+this.a+"'"));t.mi(e,s=u),this.al()&&(c=uG(u,54),a=o.Th(n,this.b?emn(o.Dh(),this.b):-1-emn(n.Dh(),this.e),null,null),!c.Ph()&&(a=c.Rh(n,this.b?emn(c.Dh(),this.b):-1-emn(n.Dh(),this.e),null,a)),a&&a.oj()),n.vh()&&n.wh()&&Msn(n,new bV(n,9,this.e,o,u))}return s}return s},uZn.zk=function(n,t,e,i,r){var c,a;return xA(a=t.li(e))===xA(rBt)&&(a=null),t.mi(e,i),this.Mj()?xA(a)!==xA(i)&&null!=a&&(r=(c=uG(a,54)).Th(n,emn(c.Dh(),this.b),null,r)):this.al()&&null!=a&&(r=uG(a,54).Th(n,-1-emn(n.Dh(),this.e),null,r)),n.vh()&&n.wh()&&(!r&&(r=new cj(4)),r.nj(new bV(n,1,this.e,a,i))),r},uZn.Ak=function(n,t,e,i,r){var c;return xA(c=t.li(e))===xA(rBt)&&(c=null),t.ni(e),n.vh()&&n.wh()&&(!r&&(r=new cj(4)),this.tk()?r.nj(new bV(n,2,this.e,c,null)):r.nj(new bV(n,1,this.e,c,null))),r},uZn.Bk=function(n,t,e){return null!=t.li(e)},uZn.Ck=function(n,t,e,i){var r,c,a,o,u;if(null!=i&&!LGn(this.a,i))throw hv(new mM(Lrt+(F$(i,58)?nPn(uG(i,58).Dh()):crn(Tbn(i)))+Nrt+this.a+"'"));o=null!=(u=t.li(e)),this.tk()&&xA(u)===xA(rBt)&&(u=null),a=null,this.Mj()?xA(u)!==xA(i)&&(null!=u&&(a=(r=uG(u,54)).Th(n,emn(r.Dh(),this.b),null,a)),null!=i&&(a=(r=uG(i,54)).Rh(n,emn(r.Dh(),this.b),null,a))):this.al()&&xA(u)!==xA(i)&&(null!=u&&(a=uG(u,54).Th(n,-1-emn(n.Dh(),this.e),null,a)),null!=i&&(a=uG(i,54).Rh(n,-1-emn(n.Dh(),this.e),null,a))),null==i&&this.tk()?t.mi(e,rBt):t.mi(e,i),n.vh()&&n.wh()?(c=new kZ(n,1,this.e,u,i,this.tk()&&!o),a?(a.nj(c),a.oj()):Msn(n,c)):a&&a.oj()},uZn.Ek=function(n,t,e){var i,r,c,a,o;a=null!=(o=t.li(e)),this.tk()&&xA(o)===xA(rBt)&&(o=null),c=null,null!=o&&(this.Mj()?c=(i=uG(o,54)).Th(n,emn(i.Dh(),this.b),null,c):this.al()&&(c=uG(o,54).Th(n,-1-emn(n.Dh(),this.e),null,c))),t.ni(e),n.vh()&&n.wh()?(r=new kZ(n,this.tk()?2:1,this.e,o,null,a),c?(c.nj(r),c.oj()):Msn(n,r)):c&&c.oj()},uZn.Mj=function(){return!1},uZn.al=function(){return!1},uZn.bl=function(){return!1},uZn.tk=function(){return!1},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObject",410),sDn(575,410,{},tK),uZn.al=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainment",575),sDn(1359,575,{},eK),uZn.bl=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentResolving",1359),sDn(787,575,{},iK),uZn.tk=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettable",787),sDn(1361,787,{},cK),uZn.bl=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettableResolving",1361),sDn(650,575,{},FU),uZn.Mj=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverse",650),sDn(1360,650,{},HU),uZn.bl=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseResolving",1360),sDn(788,650,{},UU),uZn.tk=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable",788),sDn(1362,788,{},GU),uZn.bl=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving",1362),sDn(651,410,{},rK),uZn.bl=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolving",651),sDn(1363,651,{},aK),uZn.tk=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingUnsettable",1363),sDn(789,651,{},_U),uZn.Mj=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverse",789),sDn(1364,789,{},qU),uZn.tk=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable",1364),sDn(1357,410,{},oK),uZn.tk=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectUnsettable",1357),sDn(786,410,{},BU),uZn.Mj=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverse",786),sDn(1358,786,{},XU),uZn.tk=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverseUnsettable",1358),sDn(790,576,Art,EQ),uZn.yl=function(n){return new EQ(this.a,this.c,n)},uZn.md=function(){return this.b},uZn.zl=function(n,t,e){return Snn(this,n,this.b,e)},uZn.Al=function(n,t,e){return Pnn(this,n,this.b,e)},zW(Ytt,"EStructuralFeatureImpl/InverseUpdatingFeatureMapEntry",790),sDn(1365,1,ort,_m),uZn.Fk=function(n){return this.a},uZn.Qj=function(){return F$(this.a,97)?uG(this.a,97).Qj():!this.a.dc()},uZn.Wb=function(n){this.a.$b(),this.a.Gc(uG(n,15))},uZn.Gk=function(){F$(this.a,97)?uG(this.a,97).Gk():this.a.$b()},zW(Ytt,"EStructuralFeatureImpl/SettingMany",1365),sDn(1366,576,Art,o8),uZn.xl=function(n){return new hF((uVn(),oHt),this.b.ri(this.a,n))},uZn.md=function(){return null},uZn.zl=function(n,t,e){return e},uZn.Al=function(n,t,e){return e},zW(Ytt,"EStructuralFeatureImpl/SimpleContentFeatureMapEntry",1366),sDn(652,576,Art,hF),uZn.xl=function(n){return new hF(this.c,n)},uZn.md=function(){return this.a},uZn.zl=function(n,t,e){return e},uZn.Al=function(n,t,e){return e},zW(Ytt,"EStructuralFeatureImpl/SimpleFeatureMapEntry",652),sDn(403,506,Qet,Ks),uZn.aj=function(n){return Inn(h_t,EZn,29,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"ESuperAdapter/1",403),sDn(457,448,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,850:1,54:1,99:1,158:1,457:1,119:1,120:1},Fs),uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return!this.a&&(this.a=new AX(this,g_t,this)),this.a}return $tn(this,n-iQ((YYn(),q_t)),ern(uG(Lsn(this,16),29)||q_t,n),t,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 2:return!this.a&&(this.a=new AX(this,g_t,this)),Nyn(this.a,n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),q_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),q_t)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return!!this.a&&0!=this.a.i}return l5(this,n-iQ((YYn(),q_t)),ern(uG(Lsn(this,16),29)||q_t,n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void qon(this,mK(t));case 2:return!this.a&&(this.a=new AX(this,g_t,this)),Czn(this.a),!this.a&&(this.a=new AX(this,g_t,this)),void CW(this.a,uG(t,16))}lpn(this,n-iQ((YYn(),q_t)),ern(uG(Lsn(this,16),29)||q_t,n),t)},uZn.ii=function(){return YYn(),q_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void qon(this,null);case 2:return!this.a&&(this.a=new AX(this,g_t,this)),void Czn(this.a)}sdn(this,n-iQ((YYn(),q_t)),ern(uG(Lsn(this,16),29)||q_t,n))},zW(Ytt,"ETypeParameterImpl",457),sDn(458,83,Trt,AX),uZn.Nj=function(n,t){return mCn(this,uG(n,89),t)},uZn.Oj=function(n,t){return vCn(this,uG(n,89),t)},zW(Ytt,"ETypeParameterImpl/1",458),sDn(647,45,B0n,ty),uZn.ec=function(){return new Um(this)},zW(Ytt,"ETypeParameterImpl/2",647),sDn(570,KZn,FZn,Um),uZn.Fc=function(n){return WF(this,uG(n,89))},uZn.Gc=function(n){var t,e,i;for(i=!1,e=n.Kc();e.Ob();)t=uG(e.Pb(),89),null==vJ(this.a,t,"")&&(i=!0);return i},uZn.$b=function(){$V(this.a)},uZn.Hc=function(n){return PV(this.a,n)},uZn.Kc=function(){return new Gm(new bsn(new Nw(this.a).a))},uZn.Mc=function(n){return C7(this,n)},uZn.gc=function(){return oS(this.a)},zW(Ytt,"ETypeParameterImpl/2/1",570),sDn(571,1,$Zn,Gm),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return uG(von(this.a).ld(),89)},uZn.Ob=function(){return this.a.b},uZn.Qb=function(){Oen(this.a)},zW(Ytt,"ETypeParameterImpl/2/1/1",571),sDn(1329,45,B0n,ey),uZn._b=function(n){return RA(n)?AZ(this,n):!!FX(this.f,n)},uZn.xc=function(n){var t;return F$(t=RA(n)?U1(this,n):DA(FX(this.f,n)),851)?(t=uG(t,851).Kk(),vJ(this,uG(n,241),t),t):null!=t?t:null==n?(SP(),EBt):null},zW(Ytt,"EValidatorRegistryImpl",1329),sDn(1349,720,{110:1,94:1,93:1,480:1,155:1,58:1,114:1,2040:1,54:1,99:1,158:1,119:1,120:1},_s),uZn.ri=function(n,t){switch(n.hk()){case 21:case 22:case 23:case 24:case 26:case 31:case 32:case 37:case 38:case 39:case 40:case 43:case 44:case 48:case 49:case 20:return null==t?null:cpn(t);case 25:return Xrn(t);case 27:return nen(t);case 28:return ten(t);case 29:return null==t?null:N$(QKt[0],uG(t,206));case 41:return null==t?"":Ij(uG(t,297));case 42:return cpn(t);case 50:return mK(t);default:throw hv(new vM(tet+n.xe()+eet))}},uZn.si=function(n){var t;switch(-1==n.G&&(n.G=(t=Hrn(n))?Hyn(t.vi(),n):-1),n.G){case 0:return new Wk;case 1:return new vs;case 2:return new Kl;case 4:return new Gv;case 5:return new Jk;case 6:return new Uv;case 7:return new Fl;case 10:return new ps;case 11:return new Yk;case 12:return new aZ;case 13:return new ny;case 14:return new PK;case 17:return new Cs;case 18:return new ev;case 19:return new Fs;default:throw hv(new vM(cet+n.zb+eet))}},uZn.ti=function(n,t){switch(n.hk()){case 20:return null==t?null:new Wj(t);case 21:return null==t?null:new PN(t);case 23:case 22:return null==t?null:Ovn(t);case 26:case 24:return null==t?null:Ben(mUn(t,-128,127)<<24>>24);case 25:return cxn(t);case 27:return sjn(t);case 28:return hjn(t);case 29:return rIn(t);case 32:case 31:return null==t?null:YIn(t);case 38:case 37:return null==t?null:new tk(t);case 40:case 39:return null==t?null:xwn(mUn(t,j1n,vZn));case 41:case 42:return null;case 44:case 43:return null==t?null:Hvn(tJn(t));case 49:case 48:return null==t?null:Rwn(mUn(t,xrt,32767)<<16>>16);case 50:return t;default:throw hv(new vM(tet+n.xe()+eet))}},zW(Ytt,"EcoreFactoryImpl",1349),sDn(560,184,{110:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,2038:1,54:1,99:1,158:1,184:1,560:1,119:1,120:1,690:1},dJ),uZn.gb=!1,uZn.hb=!1;var gBt,pBt=!1;zW(Ytt,"EcorePackageImpl",560),sDn(1234,1,{851:1},Bs),uZn.Kk=function(){return HD(),SBt},zW(Ytt,"EcorePackageImpl/1",1234),sDn(1243,1,Wrt,Hs),uZn.fk=function(n){return F$(n,155)},uZn.gk=function(n){return Inn(uFt,EZn,155,n,0,1)},zW(Ytt,"EcorePackageImpl/10",1243),sDn(1244,1,Wrt,Us),uZn.fk=function(n){return F$(n,197)},uZn.gk=function(n){return Inn(hFt,EZn,197,n,0,1)},zW(Ytt,"EcorePackageImpl/11",1244),sDn(1245,1,Wrt,Gs),uZn.fk=function(n){return F$(n,58)},uZn.gk=function(n){return Inn(nFt,EZn,58,n,0,1)},zW(Ytt,"EcorePackageImpl/12",1245),sDn(1246,1,Wrt,qs),uZn.fk=function(n){return F$(n,411)},uZn.gk=function(n){return Inn(p_t,yrt,62,n,0,1)},zW(Ytt,"EcorePackageImpl/13",1246),sDn(1247,1,Wrt,Xs),uZn.fk=function(n){return F$(n,241)},uZn.gk=function(n){return Inn(fFt,EZn,241,n,0,1)},zW(Ytt,"EcorePackageImpl/14",1247),sDn(1248,1,Wrt,zs),uZn.fk=function(n){return F$(n,518)},uZn.gk=function(n){return Inn(m_t,EZn,2116,n,0,1)},zW(Ytt,"EcorePackageImpl/15",1248),sDn(1249,1,Wrt,Vs),uZn.fk=function(n){return F$(n,102)},uZn.gk=function(n){return Inn(v_t,krt,19,n,0,1)},zW(Ytt,"EcorePackageImpl/16",1249),sDn(1250,1,Wrt,Ws),uZn.fk=function(n){return F$(n,179)},uZn.gk=function(n){return Inn(o_t,krt,179,n,0,1)},zW(Ytt,"EcorePackageImpl/17",1250),sDn(1251,1,Wrt,Qs),uZn.fk=function(n){return F$(n,481)},uZn.gk=function(n){return Inn(a_t,EZn,481,n,0,1)},zW(Ytt,"EcorePackageImpl/18",1251),sDn(1252,1,Wrt,Js),uZn.fk=function(n){return F$(n,561)},uZn.gk=function(n){return Inn(wBt,Xit,561,n,0,1)},zW(Ytt,"EcorePackageImpl/19",1252),sDn(1235,1,Wrt,Ys),uZn.fk=function(n){return F$(n,331)},uZn.gk=function(n){return Inn(u_t,krt,35,n,0,1)},zW(Ytt,"EcorePackageImpl/2",1235),sDn(1253,1,Wrt,Zs),uZn.fk=function(n){return F$(n,248)},uZn.gk=function(n){return Inn(g_t,Prt,89,n,0,1)},zW(Ytt,"EcorePackageImpl/20",1253),sDn(1254,1,Wrt,nh),uZn.fk=function(n){return F$(n,457)},uZn.gk=function(n){return Inn(J_t,EZn,850,n,0,1)},zW(Ytt,"EcorePackageImpl/21",1254),sDn(1255,1,Wrt,th),uZn.fk=function(n){return KA(n)},uZn.gk=function(n){return Inn(cot,zZn,485,n,8,1)},zW(Ytt,"EcorePackageImpl/22",1255),sDn(1256,1,Wrt,eh),uZn.fk=function(n){return F$(n,195)},uZn.gk=function(n){return Inn(tUt,zZn,195,n,0,2)},zW(Ytt,"EcorePackageImpl/23",1256),sDn(1257,1,Wrt,ih),uZn.fk=function(n){return F$(n,222)},uZn.gk=function(n){return Inn(uot,zZn,222,n,0,1)},zW(Ytt,"EcorePackageImpl/24",1257),sDn(1258,1,Wrt,rh),uZn.fk=function(n){return F$(n,180)},uZn.gk=function(n){return Inn(hot,zZn,180,n,0,1)},zW(Ytt,"EcorePackageImpl/25",1258),sDn(1259,1,Wrt,ch),uZn.fk=function(n){return F$(n,206)},uZn.gk=function(n){return Inn(iot,zZn,206,n,0,1)},zW(Ytt,"EcorePackageImpl/26",1259),sDn(1260,1,Wrt,ah),uZn.fk=function(n){return!1},uZn.gk=function(n){return Inn(aUt,EZn,2215,n,0,1)},zW(Ytt,"EcorePackageImpl/27",1260),sDn(1261,1,Wrt,oh),uZn.fk=function(n){return FA(n)},uZn.gk=function(n){return Inn(fot,zZn,345,n,7,1)},zW(Ytt,"EcorePackageImpl/28",1261),sDn(1262,1,Wrt,uh),uZn.fk=function(n){return F$(n,61)},uZn.gk=function(n){return Inn(CFt,H3n,61,n,0,1)},zW(Ytt,"EcorePackageImpl/29",1262),sDn(1236,1,Wrt,sh),uZn.fk=function(n){return F$(n,519)},uZn.gk=function(n){return Inn(c_t,{3:1,4:1,5:1,2033:1},598,n,0,1)},zW(Ytt,"EcorePackageImpl/3",1236),sDn(1263,1,Wrt,hh),uZn.fk=function(n){return F$(n,582)},uZn.gk=function(n){return Inn(BFt,EZn,2039,n,0,1)},zW(Ytt,"EcorePackageImpl/30",1263),sDn(1264,1,Wrt,fh),uZn.fk=function(n){return F$(n,160)},uZn.gk=function(n){return Inn(IBt,H3n,160,n,0,1)},zW(Ytt,"EcorePackageImpl/31",1264),sDn(1265,1,Wrt,lh),uZn.fk=function(n){return F$(n,76)},uZn.gk=function(n){return Inn(Z_t,Qrt,76,n,0,1)},zW(Ytt,"EcorePackageImpl/32",1265),sDn(1266,1,Wrt,bh),uZn.fk=function(n){return F$(n,161)},uZn.gk=function(n){return Inn(lot,zZn,161,n,0,1)},zW(Ytt,"EcorePackageImpl/33",1266),sDn(1267,1,Wrt,wh),uZn.fk=function(n){return F$(n,17)},uZn.gk=function(n){return Inn(dot,zZn,17,n,0,1)},zW(Ytt,"EcorePackageImpl/34",1267),sDn(1268,1,Wrt,dh),uZn.fk=function(n){return F$(n,297)},uZn.gk=function(n){return Inn(gat,EZn,297,n,0,1)},zW(Ytt,"EcorePackageImpl/35",1268),sDn(1269,1,Wrt,gh),uZn.fk=function(n){return F$(n,168)},uZn.gk=function(n){return Inn(yot,zZn,168,n,0,1)},zW(Ytt,"EcorePackageImpl/36",1269),sDn(1270,1,Wrt,ph),uZn.fk=function(n){return F$(n,85)},uZn.gk=function(n){return Inn(mat,EZn,85,n,0,1)},zW(Ytt,"EcorePackageImpl/37",1270),sDn(1271,1,Wrt,mh),uZn.fk=function(n){return F$(n,599)},uZn.gk=function(n){return Inn(jBt,EZn,599,n,0,1)},zW(Ytt,"EcorePackageImpl/38",1271),sDn(1272,1,Wrt,vh),uZn.fk=function(n){return!1},uZn.gk=function(n){return Inn(oUt,EZn,2216,n,0,1)},zW(Ytt,"EcorePackageImpl/39",1272),sDn(1237,1,Wrt,kh),uZn.fk=function(n){return F$(n,90)},uZn.gk=function(n){return Inn(h_t,EZn,29,n,0,1)},zW(Ytt,"EcorePackageImpl/4",1237),sDn(1273,1,Wrt,yh),uZn.fk=function(n){return F$(n,191)},uZn.gk=function(n){return Inn(Tot,zZn,191,n,0,1)},zW(Ytt,"EcorePackageImpl/40",1273),sDn(1274,1,Wrt,Mh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(Ytt,"EcorePackageImpl/41",1274),sDn(1275,1,Wrt,Th),uZn.fk=function(n){return F$(n,596)},uZn.gk=function(n){return Inn(OFt,EZn,596,n,0,1)},zW(Ytt,"EcorePackageImpl/42",1275),sDn(1276,1,Wrt,jh),uZn.fk=function(n){return!1},uZn.gk=function(n){return Inn(uUt,zZn,2217,n,0,1)},zW(Ytt,"EcorePackageImpl/43",1276),sDn(1277,1,Wrt,Eh),uZn.fk=function(n){return F$(n,44)},uZn.gk=function(n){return Inn(Sat,c1n,44,n,0,1)},zW(Ytt,"EcorePackageImpl/44",1277),sDn(1238,1,Wrt,Sh),uZn.fk=function(n){return F$(n,142)},uZn.gk=function(n){return Inn(s_t,EZn,142,n,0,1)},zW(Ytt,"EcorePackageImpl/5",1238),sDn(1239,1,Wrt,Ph),uZn.fk=function(n){return F$(n,156)},uZn.gk=function(n){return Inn(f_t,EZn,156,n,0,1)},zW(Ytt,"EcorePackageImpl/6",1239),sDn(1240,1,Wrt,Ch),uZn.fk=function(n){return F$(n,469)},uZn.gk=function(n){return Inn(w_t,EZn,685,n,0,1)},zW(Ytt,"EcorePackageImpl/7",1240),sDn(1241,1,Wrt,Ih),uZn.fk=function(n){return F$(n,582)},uZn.gk=function(n){return Inn(d_t,EZn,694,n,0,1)},zW(Ytt,"EcorePackageImpl/8",1241),sDn(1242,1,Wrt,Oh),uZn.fk=function(n){return F$(n,480)},uZn.gk=function(n){return Inn(sFt,EZn,480,n,0,1)},zW(Ytt,"EcorePackageImpl/9",1242),sDn(1038,2080,Git,Qy),uZn.Mi=function(n,t){wdn(this,uG(t,424))},uZn.Qi=function(n,t){GAn(this,n,uG(t,424))},zW(Ytt,"MinimalEObjectImpl/1ArrayDelegatingAdapterList",1038),sDn(1039,152,Bit,SQ),uZn.jj=function(){return this.a.a},zW(Ytt,"MinimalEObjectImpl/1ArrayDelegatingAdapterList/1",1039),sDn(1067,1066,{},e$),zW("org.eclipse.emf.ecore.plugin","EcorePlugin",1067);var mBt,vBt,kBt,yBt,MBt,TBt,jBt=Iq(Jrt,"Resource");sDn(799,1524,Yrt),uZn.Hl=function(n){},uZn.Il=function(n){},uZn.El=function(){return!this.a&&(this.a=new qm(this)),this.a},uZn.Fl=function(n){var t,e,i,r,c;if((i=n.length)>0){if(s3(0,n.length),47==n.charCodeAt(0)){for(c=new R7(4),r=1,t=1;t0&&(Knn(0,e,n.length),n=n.substr(0,e))}return lNn(this,n)},uZn.Gl=function(){return this.c},uZn.Ib=function(){return Ij(this.Rm)+"@"+(Hon(this)>>>0).toString(16)+" uri='"+this.d+"'"},uZn.b=!1,zW(Zrt,"ResourceImpl",799),sDn(1525,799,Yrt,Xm),zW(Zrt,"BinaryResourceImpl",1525),sDn(1190,708,Jet),uZn.bj=function(n){return F$(n,58)?JZ(this,uG(n,58)):F$(n,599)?new DD(uG(n,599).El()):xA(n)===xA(this.f)?uG(n,16).Kc():(EK(),KFt.a)},uZn.Ob=function(){return u$n(this)},uZn.a=!1,zW(art,"EcoreUtil/ContentTreeIterator",1190),sDn(1526,1190,Jet,dV),uZn.bj=function(n){return xA(n)===xA(this.f)?uG(n,15).Kc():new L6(uG(n,58))},zW(Zrt,"ResourceImpl/5",1526),sDn(658,2092,Mrt,qm),uZn.Hc=function(n){return this.i<=4?sSn(this,n):F$(n,54)&&uG(n,54).Jh()==this.a},uZn.Mi=function(n,t){n==this.i-1&&(this.a.b||(this.a.b=!0))},uZn.Oi=function(n,t){0==n?this.a.b||(this.a.b=!0):Ann(this,n,t)},uZn.Qi=function(n,t){},uZn.Ri=function(n,t,e){},uZn.Lj=function(){return 2},uZn.jj=function(){return this.a},uZn.Mj=function(){return!0},uZn.Nj=function(n,t){return t=uG(n,54).fi(this.a,t)},uZn.Oj=function(n,t){return uG(n,54).fi(null,t)},uZn.Pj=function(){return!1},uZn.Si=function(){return!0},uZn.aj=function(n){return Inn(nFt,EZn,58,n,0,1)},uZn.Yi=function(){return!1},zW(Zrt,"ResourceImpl/ContentsEList",658),sDn(970,2062,m1n,zm),uZn.fd=function(n){return this.a.Ki(n)},uZn.gc=function(){return this.a.gc()},zW(art,"AbstractSequentialInternalEList/1",970),sDn(634,1,{},HG),zW(art,"BasicExtendedMetaData",634),sDn(1181,1,{},CA),uZn.Jl=function(){return null},uZn.Kl=function(){return-2==this.a&&fw(this,qCn(this.d,this.b)),this.a},uZn.Ll=function(){return null},uZn.Ml=function(){return hZ(),hZ(),zot},uZn.xe=function(){return this.c==wct&&lw(this,ckn(this.d,this.b)),this.c},uZn.Nl=function(){return 0},uZn.a=-2,uZn.c=wct,zW(art,"BasicExtendedMetaData/EClassExtendedMetaDataImpl",1181),sDn(1182,1,{},g4),uZn.Jl=function(){return this.a==(N7(),MBt)&&dw(this,TBn(this.f,this.b)),this.a},uZn.Kl=function(){return 0},uZn.Ll=function(){return this.c==(N7(),MBt)&&bw(this,jBn(this.f,this.b)),this.c},uZn.Ml=function(){return!this.d&&pw(this,iqn(this.f,this.b)),this.d},uZn.xe=function(){return this.e==wct&&vw(this,ckn(this.f,this.b)),this.e},uZn.Nl=function(){return-2==this.g&&yw(this,DPn(this.f,this.b)),this.g},uZn.e=wct,uZn.g=-2,zW(art,"BasicExtendedMetaData/EDataTypeExtendedMetaDataImpl",1182),sDn(1180,1,{},IA),uZn.b=!1,uZn.c=!1,zW(art,"BasicExtendedMetaData/EPackageExtendedMetaDataImpl",1180),sDn(1183,1,{},p4),uZn.c=-2,uZn.e=wct,uZn.f=wct,zW(art,"BasicExtendedMetaData/EStructuralFeatureExtendedMetaDataImpl",1183),sDn(593,632,Trt,_G),uZn.Lj=function(){return this.c},uZn.ol=function(){return!1},uZn.Wi=function(n,t){return t},uZn.c=0,zW(art,"EDataTypeEList",593);var EBt,SBt,PBt,CBt,IBt=Iq(art,"FeatureMap");sDn(78,593,{3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1,79:1,160:1,220:1,2036:1,71:1,97:1},wsn),uZn.bd=function(n,t){iKn(this,n,uG(t,76))},uZn.Fc=function(n){return Qxn(this,uG(n,76))},uZn.Hi=function(n){OW(this,uG(n,76))},uZn.Nj=function(n,t){return q_(this,uG(n,76),t)},uZn.Oj=function(n,t){return X_(this,uG(n,76),t)},uZn.Ti=function(n,t){return lUn(this,n,t)},uZn.Wi=function(n,t){return IVn(this,n,uG(t,76))},uZn.hd=function(n,t){return kFn(this,n,uG(t,76))},uZn.Uj=function(n,t){return z_(this,uG(n,76),t)},uZn.Vj=function(n,t){return V_(this,uG(n,76),t)},uZn.Wj=function(n,t,e){return aPn(this,uG(n,76),uG(t,76),e)},uZn.Zi=function(n,t){return WPn(this,n,uG(t,76))},uZn.Ol=function(n,t){return UHn(this,n,t)},uZn.cd=function(n,t){var e,i,r,c,a,o,u,s,h;for(s=new Drn(t.gc()),r=t.Kc();r.Ob();)if(c=(i=uG(r.Pb(),76)).Lk(),EFn(this.e,c))(!c.Si()||!H5(this,c,i.md())&&!sSn(s,i))&&ttn(s,i);else{for(h=VKn(this.e.Dh(),c),e=uG(this.g,124),a=!0,o=0;o=0;)if(t=n[this.c],this.k.am(t.Lk()))return this.j=this.f?t:t.md(),this.i=-2,!0;return this.i=-1,this.g=-1,!1},zW(art,"BasicFeatureMap/FeatureEIterator",420),sDn(676,420,UZn,yL),uZn.ul=function(){return!0},zW(art,"BasicFeatureMap/ResolvingFeatureEIterator",676),sDn(968,496,Irt,G$),uZn.pj=function(){return this},zW(art,"EContentsEList/1",968),sDn(969,496,Irt,kL),uZn.ul=function(){return!1},zW(art,"EContentsEList/2",969),sDn(967,287,Ort,q$),uZn.wl=function(n){},uZn.Ob=function(){return!1},uZn.Sb=function(){return!1},zW(art,"EContentsEList/FeatureIteratorImpl/1",967),sDn(840,593,Trt,jD),uZn.Ni=function(){this.a=!0},uZn.Qj=function(){return this.a},uZn.Gk=function(){var n;Czn(this),uN(this.e)?(n=this.a,this.a=!1,Msn(this.e,new j9(this.e,2,this.c,n,!1))):this.a=!1},uZn.a=!1,zW(art,"EDataTypeEList/Unsettable",840),sDn(1958,593,Trt,ED),uZn.Si=function(){return!0},zW(art,"EDataTypeUniqueEList",1958),sDn(1959,840,Trt,SD),uZn.Si=function(){return!0},zW(art,"EDataTypeUniqueEList/Unsettable",1959),sDn(147,83,Trt,PD),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectContainmentEList/Resolving",147),sDn(1184,555,Trt,CD),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectContainmentEList/Unsettable/Resolving",1184),sDn(766,14,Trt,r_),uZn.Ni=function(){this.a=!0},uZn.Qj=function(){return this.a},uZn.Gk=function(){var n;Czn(this),uN(this.e)?(n=this.a,this.a=!1,Msn(this.e,new j9(this.e,2,this.c,n,!1))):this.a=!1},uZn.a=!1,zW(art,"EObjectContainmentWithInverseEList/Unsettable",766),sDn(1222,766,Trt,c_),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectContainmentWithInverseEList/Unsettable/Resolving",1222),sDn(757,505,Trt,ID),uZn.Ni=function(){this.a=!0},uZn.Qj=function(){return this.a},uZn.Gk=function(){var n;Czn(this),uN(this.e)?(n=this.a,this.a=!1,Msn(this.e,new j9(this.e,2,this.c,n,!1))):this.a=!1},uZn.a=!1,zW(art,"EObjectEList/Unsettable",757),sDn(338,505,Trt,OD),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectResolvingEList",338),sDn(1844,757,Trt,AD),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectResolvingEList/Unsettable",1844),sDn(1527,1,{},Ah),zW(art,"EObjectValidator",1527),sDn(559,505,Trt,wV),uZn.il=function(){return this.d},uZn.jl=function(){return this.b},uZn.Mj=function(){return!0},uZn.ml=function(){return!0},uZn.b=0,zW(art,"EObjectWithInverseEList",559),sDn(1225,559,Trt,a_),uZn.ll=function(){return!0},zW(art,"EObjectWithInverseEList/ManyInverse",1225),sDn(635,559,Trt,o_),uZn.Ni=function(){this.a=!0},uZn.Qj=function(){return this.a},uZn.Gk=function(){var n;Czn(this),uN(this.e)?(n=this.a,this.a=!1,Msn(this.e,new j9(this.e,2,this.c,n,!1))):this.a=!1},uZn.a=!1,zW(art,"EObjectWithInverseEList/Unsettable",635),sDn(1224,635,Trt,s_),uZn.ll=function(){return!0},zW(art,"EObjectWithInverseEList/Unsettable/ManyInverse",1224),sDn(767,559,Trt,u_),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectWithInverseResolvingEList",767),sDn(32,767,Trt,f_),uZn.ll=function(){return!0},zW(art,"EObjectWithInverseResolvingEList/ManyInverse",32),sDn(768,635,Trt,h_),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectWithInverseResolvingEList/Unsettable",768),sDn(1223,768,Trt,l_),uZn.ll=function(){return!0},zW(art,"EObjectWithInverseResolvingEList/Unsettable/ManyInverse",1223),sDn(1185,632,Trt),uZn.Li=function(){return!(1792&this.b)},uZn.Ni=function(){this.b|=1},uZn.kl=function(){return!!(4&this.b)},uZn.Mj=function(){return!!(40&this.b)},uZn.ll=function(){return!!(16&this.b)},uZn.ml=function(){return!!(8&this.b)},uZn.nl=function(){return!!(this.b&frt)},uZn.al=function(){return!!(32&this.b)},uZn.ol=function(){return!!(this.b&w1n)},uZn.fk=function(n){return this.d?v5(this.d,n):this.Lk().Hk().fk(n)},uZn.Qj=function(){return 2&this.b?!!(1&this.b):0!=this.i},uZn.Si=function(){return!!(128&this.b)},uZn.Gk=function(){var n;Czn(this),2&this.b&&(uN(this.e)?(n=!!(1&this.b),this.b&=-2,Yv(this,new j9(this.e,2,emn(this.e.Dh(),this.Lk()),n,!1))):this.b&=-2)},uZn.Yi=function(){return!(1536&this.b)},uZn.b=0,zW(art,"EcoreEList/Generic",1185),sDn(1186,1185,Trt,yZ),uZn.Lk=function(){return this.a},zW(art,"EcoreEList/Dynamic",1186),sDn(765,66,Qet,Vm),uZn.aj=function(n){return Acn(this.a.a,n)},zW(art,"EcoreEMap/1",765),sDn(764,83,Trt,kV),uZn.Mi=function(n,t){bMn(this.b,uG(t,136))},uZn.Oi=function(n,t){Osn(this.b)},uZn.Pi=function(n,t,e){var i;++(i=this.b,uG(t,136),i).e},uZn.Qi=function(n,t){Vdn(this.b,uG(t,136))},uZn.Ri=function(n,t,e){Vdn(this.b,uG(e,136)),xA(e)===xA(t)&&uG(e,136).Ci(WN(uG(t,136).ld())),bMn(this.b,uG(t,136))},zW(art,"EcoreEMap/DelegateEObjectContainmentEList",764),sDn(1220,141,urt,xan),zW(art,"EcoreEMap/Unsettable",1220),sDn(1221,764,Trt,b_),uZn.Ni=function(){this.a=!0},uZn.Qj=function(){return this.a},uZn.Gk=function(){var n;Czn(this),uN(this.e)?(n=this.a,this.a=!1,Msn(this.e,new j9(this.e,2,this.c,n,!1))):this.a=!1},uZn.a=!1,zW(art,"EcoreEMap/Unsettable/UnsettableDelegateEObjectContainmentEList",1221),sDn(1189,215,B0n,DW),uZn.a=!1,uZn.b=!1,zW(art,"EcoreUtil/Copier",1189),sDn(759,1,$Zn,L6),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return Ymn(this)},uZn.Pb=function(){var n;return Ymn(this),n=this.b,this.b=null,n},uZn.Qb=function(){this.a.Qb()},zW(art,"EcoreUtil/ProperContentIterator",759),sDn(1528,1527,{},_l),zW(art,"EcoreValidator",1528),Iq(art,"FeatureMapUtil/Validator"),sDn(1295,1,{2041:1},Lh),uZn.am=function(n){return!0},zW(art,"FeatureMapUtil/1",1295),sDn(773,1,{2041:1},yQn),uZn.am=function(n){var t;return this.c==n||(null==(t=gK(cQ(this.a,n)))?DBn(this,n)?(W9(this.a,n,(qx(),eot)),!0):(W9(this.a,n,(qx(),tot)),!1):t==(qx(),eot))},uZn.e=!1,zW(art,"FeatureMapUtil/BasicValidator",773),sDn(774,45,B0n,U$),zW(art,"FeatureMapUtil/BasicValidator/Cache",774),sDn(509,56,{20:1,31:1,56:1,16:1,15:1,61:1,79:1,71:1,97:1},OA),uZn.bd=function(n,t){LFn(this.c,this.b,n,t)},uZn.Fc=function(n){return UHn(this.c,this.b,n)},uZn.cd=function(n,t){return _Xn(this.c,this.b,n,t)},uZn.Gc=function(n){return K$(this,n)},uZn.Gi=function(n,t){hrn(this.c,this.b,n,t)},uZn.Wk=function(n,t){return OBn(this.c,this.b,n,t)},uZn.$i=function(n){return gXn(this.c,this.b,n,!1)},uZn.Ii=function(){return wN(this.c,this.b)},uZn.Ji=function(){return dN(this.c,this.b)},uZn.Ki=function(n){return Onn(this.c,this.b,n)},uZn.Xk=function(n,t){return rF(this,n,t)},uZn.$b=function(){Zv(this)},uZn.Hc=function(n){return H5(this.c,this.b,n)},uZn.Ic=function(n){return Run(this.c,this.b,n)},uZn.Xb=function(n){return gXn(this.c,this.b,n,!0)},uZn.Fk=function(n){return this},uZn.dd=function(n){return U5(this.c,this.b,n)},uZn.dc=function(){return $A(this)},uZn.Qj=function(){return!kmn(this.c,this.b)},uZn.Kc=function(){return kin(this.c,this.b)},uZn.ed=function(){return yin(this.c,this.b)},uZn.fd=function(n){return lgn(this.c,this.b,n)},uZn.Ti=function(n,t){return EGn(this.c,this.b,n,t)},uZn.Ui=function(n,t){xnn(this.c,this.b,n,t)},uZn.gd=function(n){return VOn(this.c,this.b,n)},uZn.Mc=function(n){return $Hn(this.c,this.b,n)},uZn.hd=function(n,t){return hqn(this.c,this.b,n,t)},uZn.Wb=function(n){C$n(this.c,this.b),K$(this,uG(n,15))},uZn.gc=function(){return fgn(this.c,this.b)},uZn.Pc=function(){return v4(this.c,this.b)},uZn.Qc=function(n){return G5(this.c,this.b,n)},uZn.Ib=function(){var n,t;for((t=new zM).a+="[",n=wN(this.c,this.b);Zln(n);)VA(t,ox(_yn(n))),Zln(n)&&(t.a+=TZn);return t.a+="]",t.a},uZn.Gk=function(){C$n(this.c,this.b)},zW(art,"FeatureMapUtil/FeatureEList",509),sDn(644,39,Bit,i8),uZn.hj=function(n){return ydn(this,n)},uZn.mj=function(n){var t,e,i,r;switch(this.d){case 1:case 2:if(xA(n.jj())===xA(this.c)&&ydn(this,null)==n.hj(null))return this.g=n.ij(),1==n.gj()&&(this.d=1),!0;break;case 3:if(3===n.gj()&&xA(n.jj())===xA(this.c)&&ydn(this,null)==n.hj(null))return this.d=5,ttn(t=new Drn(2),this.g),ttn(t,n.ij()),this.g=t,!0;break;case 5:if(3===n.gj()&&xA(n.jj())===xA(this.c)&&ydn(this,null)==n.hj(null))return uG(this.g,16).Fc(n.ij()),!0;break;case 4:switch(n.gj()){case 3:if(xA(n.jj())===xA(this.c)&&ydn(this,null)==n.hj(null))return this.d=1,this.g=n.ij(),!0;break;case 4:if(xA(n.jj())===xA(this.c)&&ydn(this,null)==n.hj(null))return this.d=6,ttn(r=new Drn(2),this.n),ttn(r,n.kj()),this.n=r,i=Uhn(cT(YHt,1),W1n,28,15,[this.o,n.lj()]),this.g=i,!0}break;case 6:if(4===n.gj()&&xA(n.jj())===xA(this.c)&&ydn(this,null)==n.hj(null))return uG(this.n,16).Fc(n.kj()),qGn(i=uG(this.g,53),0,e=Inn(YHt,W1n,28,i.length+1,15,1),0,i.length),e[i.length]=n.lj(),this.g=e,!0}return!1},zW(art,"FeatureMapUtil/FeatureENotificationImpl",644),sDn(564,509,{20:1,31:1,56:1,16:1,15:1,61:1,79:1,160:1,220:1,2036:1,71:1,97:1},Cq),uZn.Ol=function(n,t){return UHn(this.c,n,t)},uZn.Pl=function(n,t,e){return OBn(this.c,n,t,e)},uZn.Ql=function(n,t,e){return fXn(this.c,n,t,e)},uZn.Rl=function(){return this},uZn.Sl=function(n,t){return dXn(this.c,n,t)},uZn.Tl=function(n){return uG(gXn(this.c,this.b,n,!1),76).Lk()},uZn.Ul=function(n){return uG(gXn(this.c,this.b,n,!1),76).md()},uZn.Vl=function(){return this.a},uZn.Wl=function(n){return!kmn(this.c,n)},uZn.Xl=function(n,t){BXn(this.c,n,t)},uZn.Yl=function(n){return non(this.c,n)},uZn.Zl=function(n){ETn(this.c,n)},zW(art,"FeatureMapUtil/FeatureFeatureMap",564),sDn(1294,1,ort,PA),uZn.Fk=function(n){return gXn(this.b,this.a,-1,n)},uZn.Qj=function(){return!kmn(this.b,this.a)},uZn.Wb=function(n){BXn(this.b,this.a,n)},uZn.Gk=function(){C$n(this.b,this.a)},zW(art,"FeatureMapUtil/FeatureValue",1294);var OBt,ABt,LBt,NBt,$Bt,DBt=Iq(gct,"AnyType");sDn(680,63,S1n,PM),zW(gct,"InvalidDatatypeValueException",680);var xBt,RBt,KBt,FBt,_Bt,BBt,HBt,UBt,GBt,qBt,XBt,zBt,VBt,WBt,QBt,JBt,YBt,ZBt,nHt,tHt,eHt,iHt,rHt,cHt,aHt,oHt,uHt,sHt,hHt,fHt,lHt=Iq(gct,pct),bHt=Iq(gct,mct),wHt=Iq(gct,vct);sDn(844,516,{110:1,94:1,93:1,58:1,54:1,99:1,857:1},iy),uZn.Lh=function(n,t,e){switch(n){case 0:return e?(!this.c&&(this.c=new wsn(this,0)),this.c):(!this.c&&(this.c=new wsn(this,0)),this.c.b);case 1:return e?(!this.c&&(this.c=new wsn(this,0)),uG(T2(this.c,(uVn(),FBt)),160)):(!this.c&&(this.c=new wsn(this,0)),uG(uG(T2(this.c,(uVn(),FBt)),160),220)).Vl();case 2:return e?(!this.b&&(this.b=new wsn(this,2)),this.b):(!this.b&&(this.b=new wsn(this,2)),this.b.b)}return $tn(this,n-iQ(this.ii()),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():this.ii(),n),t,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.c&&(this.c=new wsn(this,0)),NHn(this.c,n,e);case 1:return(!this.c&&(this.c=new wsn(this,0)),uG(uG(T2(this.c,(uVn(),FBt)),160),71)).Xk(n,e);case 2:return!this.b&&(this.b=new wsn(this,2)),NHn(this.b,n,e)}return uG(ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():this.ii(),t),69).wk().Ak(this,Wen(this),t-iQ(this.ii()),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.c&&0!=this.c.i;case 1:return!(!this.c&&(this.c=new wsn(this,0)),uG(T2(this.c,(uVn(),FBt)),160)).dc();case 2:return!!this.b&&0!=this.b.i}return l5(this,n-iQ(this.ii()),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():this.ii(),n))},uZn.bi=function(n,t){switch(n){case 0:return!this.c&&(this.c=new wsn(this,0)),void cW(this.c,t);case 1:return void(!this.c&&(this.c=new wsn(this,0)),uG(uG(T2(this.c,(uVn(),FBt)),160),220)).Wb(t);case 2:return!this.b&&(this.b=new wsn(this,2)),void cW(this.b,t)}lpn(this,n-iQ(this.ii()),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():this.ii(),n),t)},uZn.ii=function(){return uVn(),KBt},uZn.ki=function(n){switch(n){case 0:return!this.c&&(this.c=new wsn(this,0)),void Czn(this.c);case 1:return void(!this.c&&(this.c=new wsn(this,0)),uG(T2(this.c,(uVn(),FBt)),160)).$b();case 2:return!this.b&&(this.b=new wsn(this,2)),void Czn(this.b)}sdn(this,n-iQ(this.ii()),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():this.ii(),n))},uZn.Ib=function(){var n;return 4&this.j?vxn(this):((n=new fx(vxn(this))).a+=" (mixed: ",zA(n,this.c),n.a+=", anyAttribute: ",zA(n,this.b),n.a+=")",n.a)},zW(kct,"AnyTypeImpl",844),sDn(681,516,{110:1,94:1,93:1,58:1,54:1,99:1,2119:1,681:1},Uh),uZn.Lh=function(n,t,e){switch(n){case 0:return this.a;case 1:return this.b}return $tn(this,n-iQ((uVn(),JBt)),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():JBt,n),t,e)},uZn.Wh=function(n){switch(n){case 0:return null!=this.a;case 1:return null!=this.b}return l5(this,n-iQ((uVn(),JBt)),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():JBt,n))},uZn.bi=function(n,t){switch(n){case 0:return void jw(this,mK(t));case 1:return void Sw(this,mK(t))}lpn(this,n-iQ((uVn(),JBt)),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():JBt,n),t)},uZn.ii=function(){return uVn(),JBt},uZn.ki=function(n){switch(n){case 0:return void(this.a=null);case 1:return void(this.b=null)}sdn(this,n-iQ((uVn(),JBt)),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():JBt,n))},uZn.Ib=function(){var n;return 4&this.j?vxn(this):((n=new fx(vxn(this))).a+=" (data: ",VA(n,this.a),n.a+=", target: ",VA(n,this.b),n.a+=")",n.a)},uZn.a=null,uZn.b=null,zW(kct,"ProcessingInstructionImpl",681),sDn(682,844,{110:1,94:1,93:1,58:1,54:1,99:1,857:1,2120:1,682:1},ry),uZn.Lh=function(n,t,e){switch(n){case 0:return e?(!this.c&&(this.c=new wsn(this,0)),this.c):(!this.c&&(this.c=new wsn(this,0)),this.c.b);case 1:return e?(!this.c&&(this.c=new wsn(this,0)),uG(T2(this.c,(uVn(),FBt)),160)):(!this.c&&(this.c=new wsn(this,0)),uG(uG(T2(this.c,(uVn(),FBt)),160),220)).Vl();case 2:return e?(!this.b&&(this.b=new wsn(this,2)),this.b):(!this.b&&(this.b=new wsn(this,2)),this.b.b);case 3:return!this.c&&(this.c=new wsn(this,0)),mK(dXn(this.c,(uVn(),nHt),!0));case 4:return g_(this.a,(!this.c&&(this.c=new wsn(this,0)),mK(dXn(this.c,(uVn(),nHt),!0))));case 5:return this.a}return $tn(this,n-iQ((uVn(),ZBt)),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():ZBt,n),t,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.c&&0!=this.c.i;case 1:return!(!this.c&&(this.c=new wsn(this,0)),uG(T2(this.c,(uVn(),FBt)),160)).dc();case 2:return!!this.b&&0!=this.b.i;case 3:return!this.c&&(this.c=new wsn(this,0)),null!=mK(dXn(this.c,(uVn(),nHt),!0));case 4:return null!=g_(this.a,(!this.c&&(this.c=new wsn(this,0)),mK(dXn(this.c,(uVn(),nHt),!0))));case 5:return!!this.a}return l5(this,n-iQ((uVn(),ZBt)),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():ZBt,n))},uZn.bi=function(n,t){switch(n){case 0:return!this.c&&(this.c=new wsn(this,0)),void cW(this.c,t);case 1:return void(!this.c&&(this.c=new wsn(this,0)),uG(uG(T2(this.c,(uVn(),FBt)),160),220)).Wb(t);case 2:return!this.b&&(this.b=new wsn(this,2)),void cW(this.b,t);case 3:return void m4(this,mK(t));case 4:return void m4(this,d_(this.a,t));case 5:return void Ew(this,uG(t,156))}lpn(this,n-iQ((uVn(),ZBt)),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():ZBt,n),t)},uZn.ii=function(){return uVn(),ZBt},uZn.ki=function(n){switch(n){case 0:return!this.c&&(this.c=new wsn(this,0)),void Czn(this.c);case 1:return void(!this.c&&(this.c=new wsn(this,0)),uG(T2(this.c,(uVn(),FBt)),160)).$b();case 2:return!this.b&&(this.b=new wsn(this,2)),void Czn(this.b);case 3:return!this.c&&(this.c=new wsn(this,0)),void BXn(this.c,(uVn(),nHt),null);case 4:return void m4(this,d_(this.a,null));case 5:return void(this.a=null)}sdn(this,n-iQ((uVn(),ZBt)),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():ZBt,n))},zW(kct,"SimpleAnyTypeImpl",682),sDn(683,516,{110:1,94:1,93:1,58:1,54:1,99:1,2121:1,683:1},cy),uZn.Lh=function(n,t,e){switch(n){case 0:return e?(!this.a&&(this.a=new wsn(this,0)),this.a):(!this.a&&(this.a=new wsn(this,0)),this.a.b);case 1:return e?(!this.b&&(this.b=new ltn((YYn(),H_t),wBt,this,1)),this.b):(!this.b&&(this.b=new ltn((YYn(),H_t),wBt,this,1)),Tnn(this.b));case 2:return e?(!this.c&&(this.c=new ltn((YYn(),H_t),wBt,this,2)),this.c):(!this.c&&(this.c=new ltn((YYn(),H_t),wBt,this,2)),Tnn(this.c));case 3:return!this.a&&(this.a=new wsn(this,0)),T2(this.a,(uVn(),iHt));case 4:return!this.a&&(this.a=new wsn(this,0)),T2(this.a,(uVn(),rHt));case 5:return!this.a&&(this.a=new wsn(this,0)),T2(this.a,(uVn(),aHt));case 6:return!this.a&&(this.a=new wsn(this,0)),T2(this.a,(uVn(),oHt))}return $tn(this,n-iQ((uVn(),eHt)),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():eHt,n),t,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.a&&(this.a=new wsn(this,0)),NHn(this.a,n,e);case 1:return!this.b&&(this.b=new ltn((YYn(),H_t),wBt,this,1)),G_(this.b,n,e);case 2:return!this.c&&(this.c=new ltn((YYn(),H_t),wBt,this,2)),G_(this.c,n,e);case 5:return!this.a&&(this.a=new wsn(this,0)),rF(T2(this.a,(uVn(),aHt)),n,e)}return uG(ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():(uVn(),eHt),t),69).wk().Ak(this,Wen(this),t-iQ((uVn(),eHt)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.a&&0!=this.a.i;case 1:return!!this.b&&0!=this.b.f;case 2:return!!this.c&&0!=this.c.f;case 3:return!this.a&&(this.a=new wsn(this,0)),!$A(T2(this.a,(uVn(),iHt)));case 4:return!this.a&&(this.a=new wsn(this,0)),!$A(T2(this.a,(uVn(),rHt)));case 5:return!this.a&&(this.a=new wsn(this,0)),!$A(T2(this.a,(uVn(),aHt)));case 6:return!this.a&&(this.a=new wsn(this,0)),!$A(T2(this.a,(uVn(),oHt)))}return l5(this,n-iQ((uVn(),eHt)),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():eHt,n))},uZn.bi=function(n,t){switch(n){case 0:return!this.a&&(this.a=new wsn(this,0)),void cW(this.a,t);case 1:return!this.b&&(this.b=new ltn((YYn(),H_t),wBt,this,1)),void Jun(this.b,t);case 2:return!this.c&&(this.c=new ltn((YYn(),H_t),wBt,this,2)),void Jun(this.c,t);case 3:return!this.a&&(this.a=new wsn(this,0)),Zv(T2(this.a,(uVn(),iHt))),!this.a&&(this.a=new wsn(this,0)),void K$(T2(this.a,iHt),uG(t,16));case 4:return!this.a&&(this.a=new wsn(this,0)),Zv(T2(this.a,(uVn(),rHt))),!this.a&&(this.a=new wsn(this,0)),void K$(T2(this.a,rHt),uG(t,16));case 5:return!this.a&&(this.a=new wsn(this,0)),Zv(T2(this.a,(uVn(),aHt))),!this.a&&(this.a=new wsn(this,0)),void K$(T2(this.a,aHt),uG(t,16));case 6:return!this.a&&(this.a=new wsn(this,0)),Zv(T2(this.a,(uVn(),oHt))),!this.a&&(this.a=new wsn(this,0)),void K$(T2(this.a,oHt),uG(t,16))}lpn(this,n-iQ((uVn(),eHt)),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():eHt,n),t)},uZn.ii=function(){return uVn(),eHt},uZn.ki=function(n){switch(n){case 0:return!this.a&&(this.a=new wsn(this,0)),void Czn(this.a);case 1:return!this.b&&(this.b=new ltn((YYn(),H_t),wBt,this,1)),void this.b.c.$b();case 2:return!this.c&&(this.c=new ltn((YYn(),H_t),wBt,this,2)),void this.c.c.$b();case 3:return!this.a&&(this.a=new wsn(this,0)),void Zv(T2(this.a,(uVn(),iHt)));case 4:return!this.a&&(this.a=new wsn(this,0)),void Zv(T2(this.a,(uVn(),rHt)));case 5:return!this.a&&(this.a=new wsn(this,0)),void Zv(T2(this.a,(uVn(),aHt)));case 6:return!this.a&&(this.a=new wsn(this,0)),void Zv(T2(this.a,(uVn(),oHt)))}sdn(this,n-iQ((uVn(),eHt)),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():eHt,n))},uZn.Ib=function(){var n;return 4&this.j?vxn(this):((n=new fx(vxn(this))).a+=" (mixed: ",zA(n,this.a),n.a+=")",n.a)},zW(kct,"XMLTypeDocumentRootImpl",683),sDn(2028,720,{110:1,94:1,93:1,480:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1,2122:1},Nh),uZn.ri=function(n,t){switch(n.hk()){case 7:case 8:case 9:case 10:case 16:case 22:case 23:case 24:case 25:case 26:case 32:case 33:case 34:case 36:case 37:case 44:case 45:case 50:case 51:case 53:case 55:case 56:case 57:case 58:case 60:case 61:case 4:return null==t?null:cpn(t);case 19:case 28:case 29:case 35:case 38:case 39:case 41:case 46:case 52:case 54:case 5:return mK(t);case 6:return lK(uG(t,195));case 12:case 47:case 49:case 11:return cWn(this,n,t);case 13:return null==t?null:zXn(uG(t,247));case 15:case 14:return null==t?null:MW(uM(pK(t)));case 17:return oPn((uVn(),t));case 18:return oPn(t);case 21:case 20:return null==t?null:TW(uG(t,161).a);case 27:return bK(uG(t,195));case 30:return STn((uVn(),uG(t,15)));case 31:return STn(uG(t,15));case 40:return dK((uVn(),t));case 42:return uPn((uVn(),t));case 43:return uPn(t);case 59:case 48:return wK((uVn(),t));default:throw hv(new vM(tet+n.xe()+eet))}},uZn.si=function(n){var t;switch(-1==n.G&&(n.G=(t=Hrn(n))?Hyn(t.vi(),n):-1),n.G){case 0:return new iy;case 1:return new Uh;case 2:return new ry;case 3:return new cy;default:throw hv(new vM(cet+n.zb+eet))}},uZn.ti=function(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p;switch(n.hk()){case 5:case 52:case 4:return t;case 6:return syn(t);case 8:case 7:return null==t?null:MPn(t);case 9:return null==t?null:Ben(mUn((i=yXn(t,!0)).length>0&&(s3(0,i.length),43==i.charCodeAt(0))?(s3(1,i.length+1),i.substr(1)):i,-128,127)<<24>>24);case 10:return null==t?null:Ben(mUn((r=yXn(t,!0)).length>0&&(s3(0,r.length),43==r.charCodeAt(0))?(s3(1,r.length+1),r.substr(1)):r,-128,127)<<24>>24);case 11:return mK(cYn(this,(uVn(),HBt),t));case 12:return mK(cYn(this,(uVn(),UBt),t));case 13:return null==t?null:new Wj(yXn(t,!0));case 15:case 14:return iRn(t);case 16:return mK(cYn(this,(uVn(),GBt),t));case 17:return bvn((uVn(),t));case 18:return bvn(t);case 28:case 29:case 35:case 38:case 39:case 41:case 54:case 19:return yXn(t,!0);case 21:case 20:return vRn(t);case 22:return mK(cYn(this,(uVn(),qBt),t));case 23:return mK(cYn(this,(uVn(),XBt),t));case 24:return mK(cYn(this,(uVn(),zBt),t));case 25:return mK(cYn(this,(uVn(),VBt),t));case 26:return mK(cYn(this,(uVn(),WBt),t));case 27:return Ckn(t);case 30:return wvn((uVn(),t));case 31:return wvn(t);case 32:return null==t?null:xwn(mUn((h=yXn(t,!0)).length>0&&(s3(0,h.length),43==h.charCodeAt(0))?(s3(1,h.length+1),h.substr(1)):h,j1n,vZn));case 33:return null==t?null:new PN((f=yXn(t,!0)).length>0&&(s3(0,f.length),43==f.charCodeAt(0))?(s3(1,f.length+1),f.substr(1)):f);case 34:return null==t?null:xwn(mUn((l=yXn(t,!0)).length>0&&(s3(0,l.length),43==l.charCodeAt(0))?(s3(1,l.length+1),l.substr(1)):l,j1n,vZn));case 36:return null==t?null:Hvn(tJn((b=yXn(t,!0)).length>0&&(s3(0,b.length),43==b.charCodeAt(0))?(s3(1,b.length+1),b.substr(1)):b));case 37:return null==t?null:Hvn(tJn((w=yXn(t,!0)).length>0&&(s3(0,w.length),43==w.charCodeAt(0))?(s3(1,w.length+1),w.substr(1)):w));case 40:return nTn((uVn(),t));case 42:return dvn((uVn(),t));case 43:return dvn(t);case 44:return null==t?null:new PN((d=yXn(t,!0)).length>0&&(s3(0,d.length),43==d.charCodeAt(0))?(s3(1,d.length+1),d.substr(1)):d);case 45:return null==t?null:new PN((g=yXn(t,!0)).length>0&&(s3(0,g.length),43==g.charCodeAt(0))?(s3(1,g.length+1),g.substr(1)):g);case 46:return yXn(t,!1);case 47:return mK(cYn(this,(uVn(),QBt),t));case 59:case 48:return ZMn((uVn(),t));case 49:return mK(cYn(this,(uVn(),YBt),t));case 50:return null==t?null:Rwn(mUn((p=yXn(t,!0)).length>0&&(s3(0,p.length),43==p.charCodeAt(0))?(s3(1,p.length+1),p.substr(1)):p,xrt,32767)<<16>>16);case 51:return null==t?null:Rwn(mUn((c=yXn(t,!0)).length>0&&(s3(0,c.length),43==c.charCodeAt(0))?(s3(1,c.length+1),c.substr(1)):c,xrt,32767)<<16>>16);case 53:return mK(cYn(this,(uVn(),tHt),t));case 55:return null==t?null:Rwn(mUn((a=yXn(t,!0)).length>0&&(s3(0,a.length),43==a.charCodeAt(0))?(s3(1,a.length+1),a.substr(1)):a,xrt,32767)<<16>>16);case 56:return null==t?null:Rwn(mUn((o=yXn(t,!0)).length>0&&(s3(0,o.length),43==o.charCodeAt(0))?(s3(1,o.length+1),o.substr(1)):o,xrt,32767)<<16>>16);case 57:return null==t?null:Hvn(tJn((u=yXn(t,!0)).length>0&&(s3(0,u.length),43==u.charCodeAt(0))?(s3(1,u.length+1),u.substr(1)):u));case 58:return null==t?null:Hvn(tJn((s=yXn(t,!0)).length>0&&(s3(0,s.length),43==s.charCodeAt(0))?(s3(1,s.length+1),s.substr(1)):s));case 60:return null==t?null:xwn(mUn((e=yXn(t,!0)).length>0&&(s3(0,e.length),43==e.charCodeAt(0))?(s3(1,e.length+1),e.substr(1)):e,j1n,vZn));case 61:return null==t?null:xwn(mUn(yXn(t,!0),j1n,vZn));default:throw hv(new vM(tet+n.xe()+eet))}},zW(kct,"XMLTypeFactoryImpl",2028),sDn(594,184,{110:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,54:1,99:1,158:1,184:1,119:1,120:1,690:1,2044:1,594:1},gJ),uZn.N=!1,uZn.O=!1;var dHt,gHt,pHt,mHt,vHt,kHt=!1;zW(kct,"XMLTypePackageImpl",594),sDn(1961,1,{851:1},$h),uZn.Kk=function(){return vGn(),qHt},zW(kct,"XMLTypePackageImpl/1",1961),sDn(1970,1,Wrt,Dh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/10",1970),sDn(1971,1,Wrt,xh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/11",1971),sDn(1972,1,Wrt,Rh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/12",1972),sDn(1973,1,Wrt,Kh),uZn.fk=function(n){return FA(n)},uZn.gk=function(n){return Inn(fot,zZn,345,n,7,1)},zW(kct,"XMLTypePackageImpl/13",1973),sDn(1974,1,Wrt,Fh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/14",1974),sDn(1975,1,Wrt,_h),uZn.fk=function(n){return F$(n,15)},uZn.gk=function(n){return Inn(yat,H3n,15,n,0,1)},zW(kct,"XMLTypePackageImpl/15",1975),sDn(1976,1,Wrt,Bh),uZn.fk=function(n){return F$(n,15)},uZn.gk=function(n){return Inn(yat,H3n,15,n,0,1)},zW(kct,"XMLTypePackageImpl/16",1976),sDn(1977,1,Wrt,Hh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/17",1977),sDn(1978,1,Wrt,Gh),uZn.fk=function(n){return F$(n,161)},uZn.gk=function(n){return Inn(lot,zZn,161,n,0,1)},zW(kct,"XMLTypePackageImpl/18",1978),sDn(1979,1,Wrt,qh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/19",1979),sDn(1962,1,Wrt,Xh),uZn.fk=function(n){return F$(n,857)},uZn.gk=function(n){return Inn(DBt,EZn,857,n,0,1)},zW(kct,"XMLTypePackageImpl/2",1962),sDn(1980,1,Wrt,zh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/20",1980),sDn(1981,1,Wrt,Vh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/21",1981),sDn(1982,1,Wrt,Wh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/22",1982),sDn(1983,1,Wrt,Qh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/23",1983),sDn(1984,1,Wrt,Jh),uZn.fk=function(n){return F$(n,195)},uZn.gk=function(n){return Inn(tUt,zZn,195,n,0,2)},zW(kct,"XMLTypePackageImpl/24",1984),sDn(1985,1,Wrt,Yh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/25",1985),sDn(1986,1,Wrt,Zh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/26",1986),sDn(1987,1,Wrt,nf),uZn.fk=function(n){return F$(n,15)},uZn.gk=function(n){return Inn(yat,H3n,15,n,0,1)},zW(kct,"XMLTypePackageImpl/27",1987),sDn(1988,1,Wrt,tf),uZn.fk=function(n){return F$(n,15)},uZn.gk=function(n){return Inn(yat,H3n,15,n,0,1)},zW(kct,"XMLTypePackageImpl/28",1988),sDn(1989,1,Wrt,ef),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/29",1989),sDn(1963,1,Wrt,rf),uZn.fk=function(n){return F$(n,681)},uZn.gk=function(n){return Inn(lHt,EZn,2119,n,0,1)},zW(kct,"XMLTypePackageImpl/3",1963),sDn(1990,1,Wrt,cf),uZn.fk=function(n){return F$(n,17)},uZn.gk=function(n){return Inn(dot,zZn,17,n,0,1)},zW(kct,"XMLTypePackageImpl/30",1990),sDn(1991,1,Wrt,af),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/31",1991),sDn(1992,1,Wrt,of),uZn.fk=function(n){return F$(n,168)},uZn.gk=function(n){return Inn(yot,zZn,168,n,0,1)},zW(kct,"XMLTypePackageImpl/32",1992),sDn(1993,1,Wrt,uf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/33",1993),sDn(1994,1,Wrt,sf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/34",1994),sDn(1995,1,Wrt,hf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/35",1995),sDn(1996,1,Wrt,ff),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/36",1996),sDn(1997,1,Wrt,lf),uZn.fk=function(n){return F$(n,15)},uZn.gk=function(n){return Inn(yat,H3n,15,n,0,1)},zW(kct,"XMLTypePackageImpl/37",1997),sDn(1998,1,Wrt,bf),uZn.fk=function(n){return F$(n,15)},uZn.gk=function(n){return Inn(yat,H3n,15,n,0,1)},zW(kct,"XMLTypePackageImpl/38",1998),sDn(1999,1,Wrt,wf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/39",1999),sDn(1964,1,Wrt,df),uZn.fk=function(n){return F$(n,682)},uZn.gk=function(n){return Inn(bHt,EZn,2120,n,0,1)},zW(kct,"XMLTypePackageImpl/4",1964),sDn(2e3,1,Wrt,gf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/40",2e3),sDn(2001,1,Wrt,pf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/41",2001),sDn(2002,1,Wrt,mf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/42",2002),sDn(2003,1,Wrt,vf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/43",2003),sDn(2004,1,Wrt,kf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/44",2004),sDn(2005,1,Wrt,yf),uZn.fk=function(n){return F$(n,191)},uZn.gk=function(n){return Inn(Tot,zZn,191,n,0,1)},zW(kct,"XMLTypePackageImpl/45",2005),sDn(2006,1,Wrt,Mf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/46",2006),sDn(2007,1,Wrt,Tf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/47",2007),sDn(2008,1,Wrt,jf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/48",2008),sDn(2009,1,Wrt,Ef),uZn.fk=function(n){return F$(n,191)},uZn.gk=function(n){return Inn(Tot,zZn,191,n,0,1)},zW(kct,"XMLTypePackageImpl/49",2009),sDn(1965,1,Wrt,Sf),uZn.fk=function(n){return F$(n,683)},uZn.gk=function(n){return Inn(wHt,EZn,2121,n,0,1)},zW(kct,"XMLTypePackageImpl/5",1965),sDn(2010,1,Wrt,Pf),uZn.fk=function(n){return F$(n,168)},uZn.gk=function(n){return Inn(yot,zZn,168,n,0,1)},zW(kct,"XMLTypePackageImpl/50",2010),sDn(2011,1,Wrt,Cf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/51",2011),sDn(2012,1,Wrt,If),uZn.fk=function(n){return F$(n,17)},uZn.gk=function(n){return Inn(dot,zZn,17,n,0,1)},zW(kct,"XMLTypePackageImpl/52",2012),sDn(1966,1,Wrt,Of),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/6",1966),sDn(1967,1,Wrt,Af),uZn.fk=function(n){return F$(n,195)},uZn.gk=function(n){return Inn(tUt,zZn,195,n,0,2)},zW(kct,"XMLTypePackageImpl/7",1967),sDn(1968,1,Wrt,Lf),uZn.fk=function(n){return KA(n)},uZn.gk=function(n){return Inn(cot,zZn,485,n,8,1)},zW(kct,"XMLTypePackageImpl/8",1968),sDn(1969,1,Wrt,Nf),uZn.fk=function(n){return F$(n,222)},uZn.gk=function(n){return Inn(uot,zZn,222,n,0,1)},zW(kct,"XMLTypePackageImpl/9",1969),sDn(55,63,S1n,CM),zW(Xct,"RegEx/ParseException",55),sDn(836,1,{},$f),uZn.bm=function(n){return n16*e)throw hv(new CM(rZn((t$(),Cit))));e=16*e+r}if(125!=this.a)throw hv(new CM(rZn((t$(),Iit))));if(e>zct)throw hv(new CM(rZn((t$(),Oit))));n=e}else{if(r=0,0!=this.c||(r=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(e=r,EYn(this),0!=this.c||(r=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));n=e=16*e+r}break;case 117:if(i=0,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=16*t+i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=16*t+i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));n=t=16*t+i;break;case 118:if(EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=16*t+i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=16*t+i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=16*t+i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=16*t+i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if((t=16*t+i)>zct)throw hv(new CM(rZn((t$(),"parser.descappe.4"))));n=t;break;case 65:case 90:case 122:throw hv(new CM(rZn((t$(),Ait))))}return n},uZn.dm=function(n){var t;switch(n){case 100:t=32&~this.e?(QYn(),CHt):kJn("Nd",!0);break;case 68:t=32&~this.e?(QYn(),NHt):kJn("Nd",!1);break;case 119:t=32&~this.e?(QYn(),HHt):kJn("IsWord",!0);break;case 87:t=32&~this.e?(QYn(),DHt):kJn("IsWord",!1);break;case 115:t=32&~this.e?(QYn(),RHt):kJn("IsSpace",!0);break;case 83:t=32&~this.e?(QYn(),$Ht):kJn("IsSpace",!1);break;default:throw hv(new Ky(Vct+n.toString(16)))}return t},uZn.em=function(n){var t,e,i,r,c,a,o,u,s,h,f;for(this.b=1,EYn(this),t=null,0==this.c&&94==this.a?(EYn(this),n?(QYn(),QYn(),s=new K3(5)):(QYn(),QYn(),HFn(t=new K3(4),0,zct),s=new K3(4))):(QYn(),QYn(),s=new K3(4)),r=!0;1!=(f=this.c)&&(0!=f||93!=this.a||r);){if(r=!1,e=this.a,i=!1,10==f)switch(e){case 100:case 68:case 119:case 87:case 115:case 83:TXn(s,this.dm(e)),i=!0;break;case 105:case 73:case 99:case 67:(e=this.um(s,e))<0&&(i=!0);break;case 112:case 80:if(!(h=PNn(this,e)))throw hv(new CM(rZn((t$(),git))));TXn(s,h),i=!0;break;default:e=this.cm()}else if(20==f){if((c=aR(this.i,58,this.d))<0)throw hv(new CM(rZn((t$(),pit))));if(a=!0,94==VJ(this.i,this.d)&&(++this.d,a=!1),!(o=itn(r1(this.i,this.d,c),a,!(512&~this.e))))throw hv(new CM(rZn((t$(),vit))));if(TXn(s,o),i=!0,c+1>=this.j||93!=VJ(this.i,c+1))throw hv(new CM(rZn((t$(),pit))));this.d=c+2}if(EYn(this),!i)if(0!=this.c||45!=this.a)HFn(s,e,e);else{if(EYn(this),1==(f=this.c))throw hv(new CM(rZn((t$(),mit))));0==f&&93==this.a?(HFn(s,e,e),HFn(s,45,45)):(u=this.a,10==f&&(u=this.cm()),EYn(this),HFn(s,e,u))}(this.e&w1n)==w1n&&0==this.c&&44==this.a&&EYn(this)}if(1==this.c)throw hv(new CM(rZn((t$(),mit))));return t&&(lWn(t,s),s=t),pxn(s),uzn(s),this.b=0,EYn(this),s},uZn.fm=function(){var n,t,e,i;for(e=this.em(!1);7!=(i=this.c);){if(n=this.a,(0!=i||45!=n&&38!=n)&&4!=i)throw hv(new CM(rZn((t$(),Eit))));if(EYn(this),9!=this.c)throw hv(new CM(rZn((t$(),jit))));if(t=this.em(!1),4==i)TXn(e,t);else if(45==n)lWn(e,t);else{if(38!=n)throw hv(new Ky("ASSERT"));GVn(e,t)}}return EYn(this),e},uZn.gm=function(){var n,t;return n=this.a-48,QYn(),QYn(),t=new F1(12,null,n),!this.g&&(this.g=new ck),zv(this.g,new Wm(n)),EYn(this),t},uZn.hm=function(){return EYn(this),QYn(),KHt},uZn.im=function(){return EYn(this),QYn(),xHt},uZn.jm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.km=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.lm=function(){return EYn(this),jln()},uZn.mm=function(){return EYn(this),QYn(),_Ht},uZn.nm=function(){return EYn(this),QYn(),UHt},uZn.om=function(){var n;if(this.d>=this.j||64!=(65504&(n=VJ(this.i,this.d++))))throw hv(new CM(rZn((t$(),lit))));return EYn(this),QYn(),QYn(),new IX(0,n-64)},uZn.pm=function(){return EYn(this),VGn()},uZn.qm=function(){return EYn(this),QYn(),GHt},uZn.rm=function(){var n;return QYn(),QYn(),n=new IX(0,105),EYn(this),n},uZn.sm=function(){return EYn(this),QYn(),BHt},uZn.tm=function(){return EYn(this),QYn(),FHt},uZn.um=function(n,t){return this.cm()},uZn.vm=function(){return EYn(this),QYn(),AHt},uZn.wm=function(){var n,t,e,i,r;if(this.d+1>=this.j)throw hv(new CM(rZn((t$(),sit))));if(i=-1,t=null,49<=(n=VJ(this.i,this.d))&&n<=57){if(i=n-48,!this.g&&(this.g=new ck),zv(this.g,new Wm(i)),++this.d,41!=VJ(this.i,this.d))throw hv(new CM(rZn((t$(),ait))));++this.d}else switch(63==n&&--this.d,EYn(this),(t=eYn(this)).e){case 20:case 21:case 22:case 23:break;case 8:if(7!=this.c)throw hv(new CM(rZn((t$(),ait))));break;default:throw hv(new CM(rZn((t$(),hit))))}if(EYn(this),e=null,2==(r=Evn(this)).e){if(2!=r.Pm())throw hv(new CM(rZn((t$(),fit))));e=r.Lm(1),r=r.Lm(0)}if(7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),QYn(),QYn(),new bin(i,t,r,e)},uZn.xm=function(){return EYn(this),QYn(),LHt},uZn.ym=function(){var n;if(EYn(this),n=jV(24,Evn(this)),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.zm=function(){var n;if(EYn(this),n=jV(20,Evn(this)),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.Am=function(){var n;if(EYn(this),n=jV(22,Evn(this)),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.Bm=function(){var n,t,e,i,r;for(n=0,e=0,t=-1;this.d=this.j)throw hv(new CM(rZn((t$(),oit))));if(45==t){for(++this.d;this.d=this.j)throw hv(new CM(rZn((t$(),oit))))}if(58==t){if(++this.d,EYn(this),i=GW(Evn(this),n,e),7!=this.c)throw hv(new CM(rZn((t$(),ait))));EYn(this)}else{if(41!=t)throw hv(new CM(rZn((t$(),uit))));++this.d,EYn(this),i=GW(Evn(this),n,e)}return i},uZn.Cm=function(){var n;if(EYn(this),n=jV(21,Evn(this)),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.Dm=function(){var n;if(EYn(this),n=jV(23,Evn(this)),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.Em=function(){var n,t;if(EYn(this),n=this.f++,t=EV(Evn(this),n),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),t},uZn.Fm=function(){var n;if(EYn(this),n=EV(Evn(this),0),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.Gm=function(n){return EYn(this),5==this.c?(EYn(this),CX(n,(QYn(),QYn(),new n8(9,n)))):CX(n,(QYn(),QYn(),new n8(3,n)))},uZn.Hm=function(n){var t;return EYn(this),QYn(),QYn(),t=new QN(2),5==this.c?(EYn(this),vzn(t,OHt),vzn(t,n)):(vzn(t,n),vzn(t,OHt)),t},uZn.Im=function(n){return EYn(this),5==this.c?(EYn(this),QYn(),QYn(),new n8(9,n)):(QYn(),QYn(),new n8(3,n))},uZn.a=0,uZn.b=0,uZn.c=0,uZn.d=0,uZn.e=0,uZn.f=1,uZn.g=null,uZn.j=0,zW(Xct,"RegEx/RegexParser",836),sDn(1947,836,{},ay),uZn.bm=function(n){return!1},uZn.cm=function(){return R_n(this)},uZn.dm=function(n){return yUn(n)},uZn.em=function(n){return PYn(this)},uZn.fm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.gm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.hm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.im=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.jm=function(){return EYn(this),yUn(67)},uZn.km=function(){return EYn(this),yUn(73)},uZn.lm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.mm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.nm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.om=function(){return EYn(this),yUn(99)},uZn.pm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.qm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.rm=function(){return EYn(this),yUn(105)},uZn.sm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.tm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.um=function(n,t){return TXn(n,yUn(t)),-1},uZn.vm=function(){return EYn(this),QYn(),QYn(),new IX(0,94)},uZn.wm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.xm=function(){return EYn(this),QYn(),QYn(),new IX(0,36)},uZn.ym=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.zm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.Am=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.Bm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.Cm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.Dm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.Em=function(){var n;if(EYn(this),n=EV(Evn(this),0),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.Fm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.Gm=function(n){return EYn(this),CX(n,(QYn(),QYn(),new n8(3,n)))},uZn.Hm=function(n){var t;return EYn(this),QYn(),QYn(),vzn(t=new QN(2),n),vzn(t,OHt),t},uZn.Im=function(n){return EYn(this),QYn(),QYn(),new n8(3,n)};var yHt=null,MHt=null;zW(Xct,"RegEx/ParserForXMLSchema",1947),sDn(122,1,aat,Qm),uZn.Jm=function(n){throw hv(new Ky("Not supported."))},uZn.Km=function(){return-1},uZn.Lm=function(n){return null},uZn.Mm=function(){return null},uZn.Nm=function(n){},uZn.Om=function(n){},uZn.Pm=function(){return 0},uZn.Ib=function(){return this.Qm(0)},uZn.Qm=function(n){return 11==this.e?".":""},uZn.e=0;var THt,jHt,EHt,SHt,PHt,CHt,IHt,OHt,AHt,LHt,NHt,$Ht,DHt,xHt,RHt,KHt,FHt,_Ht,BHt,HHt,UHt,GHt,qHt,XHt,zHt=null,VHt=null,WHt=null,QHt=zW(Xct,"RegEx/Token",122);sDn(138,122,{3:1,138:1,122:1},K3),uZn.Qm=function(n){var t,e,i;if(4==this.e)if(this==IHt)e=".";else if(this==CHt)e="\\d";else if(this==HHt)e="\\w";else if(this==RHt)e="\\s";else{for((i=new zM).a+="[",t=0;t0&&(i.a+=","),this.b[t]===this.b[t+1]?VA(i,Mqn(this.b[t])):(VA(i,Mqn(this.b[t])),i.a+="-",VA(i,Mqn(this.b[t+1])));i.a+="]",e=i.a}else if(this==NHt)e="\\D";else if(this==DHt)e="\\W";else if(this==$Ht)e="\\S";else{for((i=new zM).a+="[^",t=0;t0&&(i.a+=","),this.b[t]===this.b[t+1]?VA(i,Mqn(this.b[t])):(VA(i,Mqn(this.b[t])),i.a+="-",VA(i,Mqn(this.b[t+1])));i.a+="]",e=i.a}return e},uZn.a=!1,uZn.c=!1,zW(Xct,"RegEx/RangeToken",138),sDn(592,1,{592:1},Wm),uZn.a=0,zW(Xct,"RegEx/RegexParser/ReferencePosition",592),sDn(591,1,{3:1,591:1},gE),uZn.Fb=function(n){var t;return null!=n&&!!F$(n,591)&&(t=uG(n,591),m_(this.b,t.b)&&this.a==t.a)},uZn.Hb=function(){return pln(this.b+"/"+XKn(this.a))},uZn.Ib=function(){return this.c.Qm(this.a)},uZn.a=0,zW(Xct,"RegEx/RegularExpression",591),sDn(228,122,aat,IX),uZn.Km=function(){return this.a},uZn.Qm=function(n){var t,e;switch(this.e){case 0:switch(this.a){case 124:case 42:case 43:case 63:case 40:case 41:case 46:case 91:case 123:case 92:e="\\"+jF(this.a&D1n);break;case 12:e="\\f";break;case 10:e="\\n";break;case 13:e="\\r";break;case 9:e="\\t";break;case 27:e="\\e";break;default:e=this.a>=P0n?"\\v"+r1(t="0"+(this.a>>>0).toString(16),t.length-6,t.length):""+jF(this.a&D1n)}break;case 8:e=this==AHt||this==LHt?""+jF(this.a&D1n):"\\"+jF(this.a&D1n);break;default:e=null}return e},uZn.a=0,zW(Xct,"RegEx/Token/CharToken",228),sDn(318,122,aat,n8),uZn.Lm=function(n){return this.a},uZn.Nm=function(n){this.b=n},uZn.Om=function(n){this.c=n},uZn.Pm=function(){return 1},uZn.Qm=function(n){var t;if(3==this.e)if(this.c<0&&this.b<0)t=this.a.Qm(n)+"*";else if(this.c==this.b)t=this.a.Qm(n)+"{"+this.c+"}";else if(this.c>=0&&this.b>=0)t=this.a.Qm(n)+"{"+this.c+","+this.b+"}";else{if(!(this.c>=0&&this.b<0))throw hv(new Ky("Token#toString(): CLOSURE "+this.c+TZn+this.b));t=this.a.Qm(n)+"{"+this.c+",}"}else if(this.c<0&&this.b<0)t=this.a.Qm(n)+"*?";else if(this.c==this.b)t=this.a.Qm(n)+"{"+this.c+"}?";else if(this.c>=0&&this.b>=0)t=this.a.Qm(n)+"{"+this.c+","+this.b+"}?";else{if(!(this.c>=0&&this.b<0))throw hv(new Ky("Token#toString(): NONGREEDYCLOSURE "+this.c+TZn+this.b));t=this.a.Qm(n)+"{"+this.c+",}?"}return t},uZn.b=0,uZn.c=0,zW(Xct,"RegEx/Token/ClosureToken",318),sDn(837,122,aat,eW),uZn.Lm=function(n){return 0==n?this.a:this.b},uZn.Pm=function(){return 2},uZn.Qm=function(n){return 3==this.b.e&&this.b.Lm(0)==this.a?this.a.Qm(n)+"+":9==this.b.e&&this.b.Lm(0)==this.a?this.a.Qm(n)+"+?":this.a.Qm(n)+""+this.b.Qm(n)},zW(Xct,"RegEx/Token/ConcatToken",837),sDn(1945,122,aat,bin),uZn.Lm=function(n){if(0==n)return this.d;if(1==n)return this.b;throw hv(new Ky("Internal Error: "+n))},uZn.Pm=function(){return this.b?2:1},uZn.Qm=function(n){var t;return t=this.c>0?"(?("+this.c+")":8==this.a.e?"(?("+this.a+")":"(?"+this.a,this.b?t+=this.d+"|"+this.b+")":t+=this.d+")",t},uZn.c=0,zW(Xct,"RegEx/Token/ConditionToken",1945),sDn(1946,122,aat,R3),uZn.Lm=function(n){return this.b},uZn.Pm=function(){return 1},uZn.Qm=function(n){return"(?"+(0==this.a?"":XKn(this.a))+(0==this.c?"":XKn(this.c))+":"+this.b.Qm(n)+")"},uZn.a=0,uZn.c=0,zW(Xct,"RegEx/Token/ModifierToken",1946),sDn(838,122,aat,PQ),uZn.Lm=function(n){return this.a},uZn.Pm=function(){return 1},uZn.Qm=function(n){var t;switch(t=null,this.e){case 6:t=0==this.b?"(?:"+this.a.Qm(n)+")":"("+this.a.Qm(n)+")";break;case 20:t="(?="+this.a.Qm(n)+")";break;case 21:t="(?!"+this.a.Qm(n)+")";break;case 22:t="(?<="+this.a.Qm(n)+")";break;case 23:t="(?"+this.a.Qm(n)+")"}return t},uZn.b=0,zW(Xct,"RegEx/Token/ParenToken",838),sDn(530,122,{3:1,122:1,530:1},F1),uZn.Mm=function(){return this.b},uZn.Qm=function(n){return 12==this.e?"\\"+this.a:Nxn(this.b)},uZn.a=0,zW(Xct,"RegEx/Token/StringToken",530),sDn(477,122,aat,QN),uZn.Jm=function(n){vzn(this,n)},uZn.Lm=function(n){return uG(DQ(this.a,n),122)},uZn.Pm=function(){return this.a?this.a.a.c.length:0},uZn.Qm=function(n){var t,e,i,r,c;if(1==this.e){if(2==this.a.a.c.length)t=uG(DQ(this.a,0),122),r=3==(e=uG(DQ(this.a,1),122)).e&&e.Lm(0)==t?t.Qm(n)+"+":9==e.e&&e.Lm(0)==t?t.Qm(n)+"+?":t.Qm(n)+""+e.Qm(n);else{for(c=new zM,i=0;i=this.c.b:this.a<=this.c.b},uZn.Sb=function(){return this.b>0},uZn.Tb=function(){return this.b},uZn.Vb=function(){return this.b-1},uZn.Qb=function(){throw hv(new TM(lat))},uZn.a=0,uZn.b=0,zW(sat,"ExclusiveRange/RangeIterator",258);var JHt=hJ(brt,"C"),YHt=hJ(grt,"I"),ZHt=hJ(dZn,"Z"),nUt=hJ(prt,"J"),tUt=hJ(lrt,"B"),eUt=hJ(wrt,"D"),iUt=hJ(drt,"F"),rUt=hJ(mrt,"S"),cUt=Iq("org.eclipse.elk.core.labels","ILabelManager"),aUt=Iq(Pet,"DiagnosticChain"),oUt=Iq(Jrt,"ResourceSet"),uUt=zW(Pet,"InvocationTargetException",null),sUt=(XM(),m9),hUt=hUt=zSn;Nan(bv),van("permProps",[[["locale","default"],[bat,"gecko1_8"]],[["locale","default"],[bat,"safari"]]]),hUt(null,"elk",null)}).call(this)}).call(this,void 0!==e.g?e.g:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],3:[function(n,t,e){"use strict";function i(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")}function r(n,t){if(!n)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?n:t}function c(n,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);n.prototype=Object.create(t&&t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(n,t):n.__proto__=t)}var a=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i(this,e);var c=Object.assign({},t),a=!1;try{n.resolve("web-worker"),a=!0}catch(s){}if(t.workerUrl)if(a){var o=n("web-worker");c.workerFactory=function(n){return new o(n)}}else console.warn("Web worker requested but 'web-worker' package not installed. \nConsider installing the package or pass your own 'workerFactory' to ELK's constructor.\n... Falling back to non-web worker version.");if(!c.workerFactory){var u=n("./elk-worker.min.js").Worker;c.workerFactory=function(n){return new u(n)}}return r(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,c))}return c(e,t),e}(n("./elk-api.js").default);Object.defineProperty(t.exports,"__esModule",{value:!0}),t.exports=a,a.default=a},{"./elk-api.js":1,"./elk-worker.min.js":2,"web-worker":4}],4:[function(n,t,e){t.exports=Worker},{}]},{},[3])(3)},74741:(n,t,e)=>{"use strict";e.d(t,{diagram:()=>y});var i=e(32548),r=e(26312),c=e(98055),a=e(99702),o=e(62954);e(74353),e(16750),e(42838);const u=new o;let s={};const h={};let f={};const l=(n,t,e)=>{const i={TB:{in:{north:"north"},out:{south:"west",west:"east",east:"south"}},LR:{in:{west:"west"},out:{east:"south",south:"north",north:"east"}},RL:{in:{east:"east"},out:{west:"north",north:"south",south:"west"}},BT:{in:{south:"south"},out:{north:"east",east:"west",west:"north"}}};return i.TD=i.TB,i[e][t][n]},b=(n,t,e)=>{if(a.l.info("getNextPort",{node:n,edgeDirection:t,graphDirection:e}),!s[n])switch(e){case"TB":case"TD":s[n]={inPosition:"north",outPosition:"south"};break;case"BT":s[n]={inPosition:"south",outPosition:"north"};break;case"RL":s[n]={inPosition:"east",outPosition:"west"};break;case"LR":s[n]={inPosition:"west",outPosition:"east"}}const i="in"===t?s[n].inPosition:s[n].outPosition;return"in"===t?s[n].inPosition=l(s[n].inPosition,t,e):s[n].outPosition=l(s[n].outPosition,t,e),i},w=function(n,t,e,i){a.l.info("abc78 edges = ",n);const o=i.insert("g").attr("class","edgeLabels");let u,s,l={},w=t.db.getDirection();if(void 0!==n.defaultStyle){const t=(0,a.k)(n.defaultStyle);u=t.style,s=t.labelStyle}return n.forEach((function(t){const i="L-"+t.start+"-"+t.end;void 0===l[i]?(l[i]=0,a.l.info("abc78 new entry",i,l[i])):(l[i]++,a.l.info("abc78 new entry",i,l[i]));let d=i+"-"+l[i];a.l.info("abc78 new link id to be used is",i,d,l[i]);const g="LS-"+t.start,p="LE-"+t.end,m={style:"",labelStyle:""};switch(m.minlen=t.length||1,"arrow_open"===t.type?m.arrowhead="none":m.arrowhead="normal",m.arrowTypeStart="arrow_open",m.arrowTypeEnd="arrow_open",t.type){case"double_arrow_cross":m.arrowTypeStart="arrow_cross";case"arrow_cross":m.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":m.arrowTypeStart="arrow_point";case"arrow_point":m.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":m.arrowTypeStart="arrow_circle";case"arrow_circle":m.arrowTypeEnd="arrow_circle"}let v="",k="";switch(t.stroke){case"normal":v="fill:none;",void 0!==u&&(v=u),void 0!==s&&(k=s),m.thickness="normal",m.pattern="solid";break;case"dotted":m.thickness="normal",m.pattern="dotted",m.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":m.thickness="thick",m.pattern="solid",m.style="stroke-width: 3.5px;fill:none;"}if(void 0!==t.style){const n=(0,a.k)(t.style);v=n.style,k=n.labelStyle}m.style=m.style+=v,m.labelStyle=m.labelStyle+=k,void 0!==t.interpolate?m.curve=(0,a.n)(t.interpolate,r.lUB):void 0!==n.defaultInterpolate?m.curve=(0,a.n)(n.defaultInterpolate,r.lUB):m.curve=(0,a.n)(h.curve,r.lUB),void 0===t.text?void 0!==t.style&&(m.arrowheadStyle="fill: #333"):(m.arrowheadStyle="fill: #333",m.labelpos="c"),m.labelType=t.labelType,m.label=t.text.replace(a.e.lineBreakRegex,"\n"),void 0===t.style&&(m.style=m.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),m.labelStyle=m.labelStyle.replace("color:","fill:"),m.id=d,m.classes="flowchart-link "+g+" "+p;const y=(0,c.f)(o,m),{source:M,target:T,sourceId:j,targetId:E}=((n,t)=>{let e=n.start,i=n.end;const r=e,c=i,a=f[e],o=f[i];return a&&o?("diamond"===a.type&&(e=`${e}-${b(e,"out",t)}`),"diamond"===o.type&&(i=`${i}-${b(i,"in",t)}`),{source:e,target:i,sourceId:r,targetId:c}):{source:e,target:i}})(t,w);a.l.debug("abc78 source and target",M,T),e.edges.push({id:"e"+t.start+t.end,sources:[M],targets:[T],sourceId:j,targetId:E,labelEl:y,labels:[{width:m.width,height:m.height,orgWidth:m.width,orgHeight:m.height,text:m.label,layoutOptions:{"edgeLabels.inline":"true","edgeLabels.placement":"CENTER"}}],edgeData:m})})),e},d=function(n,t,e){const i=((n,t,e)=>{const{parentById:i}=e,r=new Set;let c=n;for(;c;){if(r.add(c),c===t)return c;c=i[c]}for(c=t;c;){if(r.has(c))return c;c=i[c]}return"root"})(n,t,e);if(void 0===i||"root"===i)return{x:0,y:0};const r=f[i].offset;return{x:r.posX,y:r.posY}},g=function(n,t,e,i,a,o){const u=d(t.sourceId,t.targetId,a),s=t.sections[0].startPoint,h=t.sections[0].endPoint,f=(t.sections[0].bendPoints?t.sections[0].bendPoints:[]).map((n=>[n.x+u.x,n.y+u.y])),l=[[s.x+u.x,s.y+u.y],...f,[h.x+u.x,h.y+u.y]],{x:b,y:w}=(0,c.k)(t.edgeData),g=(0,r.n8j)().x(b).y(w).curve(r.lUB),p=n.insert("path").attr("d",g(l)).attr("class","path "+e.classes).attr("fill","none"),m=n.insert("g").attr("class","edgeLabel"),v=(0,r.Ltv)(m.node().appendChild(t.labelEl)),k=v.node().firstChild.getBoundingClientRect();v.attr("width",k.width),v.attr("height",k.height),m.attr("transform",`translate(${t.labels[0].x+u.x}, ${t.labels[0].y+u.y})`),function(n,t,e,i,r){let a="";i&&(a=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,a=a.replace(/\(/g,"\\("),a=a.replace(/\)/g,"\\)")),(0,c.m)(n,t,a,r,e)}(p,e,i.type,i.arrowMarkerAbsolute,o)},p=(n,t)=>{n.forEach((n=>{n.children||(n.children=[]);const e=t.childrenById[n.id];e&&e.forEach((t=>{n.children.push(f[t])})),p(n.children,t)}))},m=(n,t,e,i,r,c,o)=>{e.forEach((function(e){if(e)if(f[e.id].offset={posX:e.x+n,posY:e.y+t,x:n,y:t,depth:o,width:e.width,height:e.height},"group"===e.type){const i=r.insert("g").attr("class","subgraph");i.insert("rect").attr("class","subgraph subgraph-lvl-"+o%5+" node").attr("x",e.x+n).attr("y",e.y+t).attr("width",e.width).attr("height",e.height);const c=i.insert("g").attr("class","label"),u=(0,a.F)().flowchart.htmlLabels?e.labelData.width/2:0;c.attr("transform",`translate(${e.labels[0].x+n+e.x+u}, ${e.labels[0].y+t+e.y+3})`),c.node().appendChild(e.labelData.labelNode),a.l.info("Id (UGH)= ",e.type,e.labels)}else a.l.info("Id (UGH)= ",e.id),e.el.attr("transform",`translate(${e.x+n+e.width/2}, ${e.y+t+e.height/2})`)})),e.forEach((function(e){e&&"group"===e.type&&m(n+e.x,t+e.y,e.children,i,r,c,o+1)}))},v={getClasses:function(n,t){return a.l.info("Extracting classes"),t.db.getClasses()},draw:async function(n,t,e,i){var o;i.db.clear(),f={},s={},i.db.setGen("gen-2"),i.parser.parse(n);const h=(0,r.Ltv)("body").append("div").attr("style","height:400px").attr("id","cy");let l={id:"root",layoutOptions:{"elk.hierarchyHandling":"INCLUDE_CHILDREN","org.eclipse.elk.padding":"[top=100, left=100, bottom=110, right=110]","elk.layered.spacing.edgeNodeBetweenLayers":"30","elk.direction":"DOWN"},children:[],edges:[]};switch(a.l.info("Drawing flowchart using v3 renderer",u),i.db.getDirection()){case"BT":l.layoutOptions["elk.direction"]="UP";break;case"TB":l.layoutOptions["elk.direction"]="DOWN";break;case"LR":l.layoutOptions["elk.direction"]="RIGHT";break;case"RL":l.layoutOptions["elk.direction"]="LEFT"}const{securityLevel:b,flowchart:d}=(0,a.F)();let v;"sandbox"===b&&(v=(0,r.Ltv)("#i"+t));const k="sandbox"===b?(0,r.Ltv)(v.nodes()[0].contentDocument.body):(0,r.Ltv)("body"),y="sandbox"===b?v.nodes()[0].contentDocument:document,M=k.select(`[id="${t}"]`);(0,c.a)(M,["point","circle","cross"],i.type,t);const T=i.db.getVertices();let j;const E=i.db.getSubGraphs();a.l.info("Subgraphs - ",E);for(let r=E.length-1;r>=0;r--)j=E[r],i.db.addVertex(j.id,{text:j.title,type:j.labelType},"group",void 0,j.classes,j.dir);const S=M.insert("g").attr("class","subgraphs"),P=function(n){const t={parentById:{},childrenById:{}},e=n.getSubGraphs();return a.l.info("Subgraphs - ",e),e.forEach((function(n){n.nodes.forEach((function(e){t.parentById[e]=n.id,void 0===t.childrenById[n.id]&&(t.childrenById[n.id]=[]),t.childrenById[n.id].push(e)}))})),e.forEach((function(n){n.id,void 0!==t.parentById[n.id]&&t.parentById[n.id]})),t}(i.db);l=await async function(n,t,e,i,r,o,u){const s=e.select(`[id="${t}"]`).insert("g").attr("class","nodes"),h=Object.keys(n);return await Promise.all(h.map((async function(t){const e=n[t];let u="default";e.classes.length>0&&(u=e.classes.join(" ")),u+=" flowchart-label";const h=(0,a.k)(e.styles);let l=void 0!==e.text?e.text:e.id;const b={width:0,height:0},w=[{id:e.id+"-west",layoutOptions:{"port.side":"WEST"}},{id:e.id+"-east",layoutOptions:{"port.side":"EAST"}},{id:e.id+"-south",layoutOptions:{"port.side":"SOUTH"}},{id:e.id+"-north",layoutOptions:{"port.side":"NORTH"}}];let d=0,g="",p={};switch(e.type){case"round":d=5,g="rect";break;case"square":case"group":default:g="rect";break;case"diamond":g="question",p={portConstraints:"FIXED_SIDE"};break;case"hexagon":g="hexagon";break;case"odd":case"odd_right":g="rect_left_inv_arrow";break;case"lean_right":g="lean_right";break;case"lean_left":g="lean_left";break;case"trapezoid":g="trapezoid";break;case"inv_trapezoid":g="inv_trapezoid";break;case"circle":g="circle";break;case"ellipse":g="ellipse";break;case"stadium":g="stadium";break;case"subroutine":g="subroutine";break;case"cylinder":g="cylinder";break;case"doublecircle":g="doublecircle"}const m={labelStyle:h.labelStyle,shape:g,labelText:l,labelType:e.labelType,rx:d,ry:d,class:u,style:h.style,id:e.id,link:e.link,linkTarget:e.linkTarget,tooltip:r.db.getTooltip(e.id)||"",domId:r.db.lookUpDomId(e.id),haveCallback:e.haveCallback,width:"group"===e.type?500:void 0,dir:e.dir,type:e.type,props:e.props,padding:(0,a.F)().flowchart.padding};let v,k;if("group"!==m.type)k=await(0,c.e)(s,m,e.dir),v=k.node().getBBox();else{i.createElementNS("http://www.w3.org/2000/svg","text");const{shapeSvg:n,bbox:t}=await(0,c.l)(s,m,void 0,!0);b.width=t.width,b.wrappingWidth=(0,a.F)().flowchart.wrappingWidth,b.height=t.height,b.labelNode=n.node(),m.labelData=b}const y={id:e.id,ports:"diamond"===e.type?w:[],layoutOptions:p,labelText:l,labelData:b,domId:r.db.lookUpDomId(e.id),width:null==v?void 0:v.width,height:null==v?void 0:v.height,type:e.type,el:k,parent:o.parentById[e.id]};f[m.id]=y}))),u}(T,t,k,y,i,P,l);const C=M.insert("g").attr("class","edges edgePath"),I=i.db.getEdges();l=w(I,i,l,M);Object.keys(f).forEach((n=>{const t=f[n];t.parent||l.children.push(t),void 0!==P.childrenById[n]&&(t.labels=[{text:t.labelText,layoutOptions:{"nodeLabels.placement":"[H_CENTER, V_TOP, INSIDE]"},width:t.labelData.width,height:t.labelData.height}],delete t.x,delete t.y,delete t.width,delete t.height)})),p(l.children,P),a.l.info("after layout",JSON.stringify(l,null,2));const O=await u.layout(l);m(0,0,O.children,M,S,i,0),a.l.info("after layout",O),null==(o=O.edges)||o.map((n=>{g(C,n,n.edgeData,i,P,t)})),(0,a.o)({},M,d.diagramPadding,d.useMaxWidth),h.remove()}},k=n=>`.label {\n font-family: ${n.fontFamily};\n color: ${n.nodeTextColor||n.textColor};\n }\n .cluster-label text {\n fill: ${n.titleColor};\n }\n .cluster-label span {\n color: ${n.titleColor};\n }\n\n .label text,span {\n fill: ${n.nodeTextColor||n.textColor};\n color: ${n.nodeTextColor||n.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${n.mainBkg};\n stroke: ${n.nodeBorder};\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${n.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${n.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${n.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${n.edgeLabelBackground};\n rect {\n opacity: 0.85;\n background-color: ${n.edgeLabelBackground};\n fill: ${n.edgeLabelBackground};\n }\n text-align: center;\n }\n\n .cluster rect {\n fill: ${n.clusterBkg};\n stroke: ${n.clusterBorder};\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${n.titleColor};\n }\n\n .cluster span {\n color: ${n.titleColor};\n }\n /* .cluster div {\n color: ${n.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${n.fontFamily};\n font-size: 12px;\n background: ${n.tertiaryColor};\n border: 1px solid ${n.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${n.textColor};\n }\n .subgraph {\n stroke-width:2;\n rx:3;\n }\n // .subgraph-lvl-1 {\n // fill:#ccc;\n // // stroke:black;\n // }\n\n .flowchart-label text {\n text-anchor: middle;\n }\n\n ${(n=>{let t="";for(let e=0;e<5;e++)t+=`\n .subgraph-lvl-${e} {\n fill: ${n[`surface${e}`]};\n stroke: ${n[`surfacePeer${e}`]};\n }\n `;return t})(n)}\n`,y={db:i.d,renderer:v,parser:i.p,styles:k}}}]); \ No newline at end of file diff --git a/assets/js/478.66e42700.js b/assets/js/478.66e42700.js new file mode 100644 index 0000000000..ef4c719393 --- /dev/null +++ b/assets/js/478.66e42700.js @@ -0,0 +1,1227 @@ +"use strict"; +exports.id = 478; +exports.ids = [478]; +exports.modules = { + +/***/ 8478: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99702); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74353); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(16750); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99418); + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 3], $V1 = [1, 4], $V2 = [1, 5], $V3 = [1, 6], $V4 = [1, 7], $V5 = [1, 5, 13, 15, 17, 19, 20, 25, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50], $V6 = [1, 5, 6, 13, 15, 17, 19, 20, 25, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50], $V7 = [32, 33, 34], $V8 = [2, 7], $V9 = [1, 13], $Va = [1, 17], $Vb = [1, 18], $Vc = [1, 19], $Vd = [1, 20], $Ve = [1, 21], $Vf = [1, 22], $Vg = [1, 23], $Vh = [1, 24], $Vi = [1, 25], $Vj = [1, 26], $Vk = [1, 27], $Vl = [1, 30], $Vm = [1, 31], $Vn = [1, 32], $Vo = [1, 33], $Vp = [1, 34], $Vq = [1, 35], $Vr = [1, 36], $Vs = [1, 37], $Vt = [1, 38], $Vu = [1, 39], $Vv = [1, 40], $Vw = [1, 41], $Vx = [1, 42], $Vy = [1, 57], $Vz = [1, 58], $VA = [5, 22, 26, 32, 33, 34, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "eol": 4, "SPACE": 5, "QUADRANT": 6, "document": 7, "line": 8, "statement": 9, "axisDetails": 10, "quadrantDetails": 11, "points": 12, "title": 13, "title_value": 14, "acc_title": 15, "acc_title_value": 16, "acc_descr": 17, "acc_descr_value": 18, "acc_descr_multiline_value": 19, "section": 20, "text": 21, "point_start": 22, "point_x": 23, "point_y": 24, "X-AXIS": 25, "AXIS-TEXT-DELIMITER": 26, "Y-AXIS": 27, "QUADRANT_1": 28, "QUADRANT_2": 29, "QUADRANT_3": 30, "QUADRANT_4": 31, "NEWLINE": 32, "SEMI": 33, "EOF": 34, "alphaNumToken": 35, "textNoTagsToken": 36, "STR": 37, "MD_STR": 38, "alphaNum": 39, "PUNCTUATION": 40, "AMP": 41, "NUM": 42, "ALPHA": 43, "COMMA": 44, "PLUS": 45, "EQUALS": 46, "MULT": 47, "DOT": 48, "BRKT": 49, "UNDERSCORE": 50, "MINUS": 51, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 5: "SPACE", 6: "QUADRANT", 13: "title", 14: "title_value", 15: "acc_title", 16: "acc_title_value", 17: "acc_descr", 18: "acc_descr_value", 19: "acc_descr_multiline_value", 20: "section", 22: "point_start", 23: "point_x", 24: "point_y", 25: "X-AXIS", 26: "AXIS-TEXT-DELIMITER", 27: "Y-AXIS", 28: "QUADRANT_1", 29: "QUADRANT_2", 30: "QUADRANT_3", 31: "QUADRANT_4", 32: "NEWLINE", 33: "SEMI", 34: "EOF", 37: "STR", 38: "MD_STR", 40: "PUNCTUATION", 41: "AMP", 42: "NUM", 43: "ALPHA", 44: "COMMA", 45: "PLUS", 46: "EQUALS", 47: "MULT", 48: "DOT", 49: "BRKT", 50: "UNDERSCORE", 51: "MINUS" }, + productions_: [0, [3, 2], [3, 2], [3, 2], [7, 0], [7, 2], [8, 2], [9, 0], [9, 2], [9, 1], [9, 1], [9, 1], [9, 2], [9, 2], [9, 2], [9, 1], [9, 1], [12, 4], [10, 4], [10, 3], [10, 2], [10, 4], [10, 3], [10, 2], [11, 2], [11, 2], [11, 2], [11, 2], [4, 1], [4, 1], [4, 1], [21, 1], [21, 2], [21, 1], [21, 1], [39, 1], [39, 2], [35, 1], [35, 1], [35, 1], [35, 1], [35, 1], [35, 1], [35, 1], [35, 1], [35, 1], [35, 1], [35, 1], [36, 1], [36, 1], [36, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 12: + this.$ = $$[$0].trim(); + yy.setDiagramTitle(this.$); + break; + case 13: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 14: + case 15: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 16: + yy.addSection($$[$0].substr(8)); + this.$ = $$[$0].substr(8); + break; + case 17: + yy.addPoint($$[$0 - 3], $$[$0 - 1], $$[$0]); + break; + case 18: + yy.setXAxisLeftText($$[$0 - 2]); + yy.setXAxisRightText($$[$0]); + break; + case 19: + $$[$0 - 1].text += " ⟶ "; + yy.setXAxisLeftText($$[$0 - 1]); + break; + case 20: + yy.setXAxisLeftText($$[$0]); + break; + case 21: + yy.setYAxisBottomText($$[$0 - 2]); + yy.setYAxisTopText($$[$0]); + break; + case 22: + $$[$0 - 1].text += " ⟶ "; + yy.setYAxisBottomText($$[$0 - 1]); + break; + case 23: + yy.setYAxisBottomText($$[$0]); + break; + case 24: + yy.setQuadrant1Text($$[$0]); + break; + case 25: + yy.setQuadrant2Text($$[$0]); + break; + case 26: + yy.setQuadrant3Text($$[$0]); + break; + case 27: + yy.setQuadrant4Text($$[$0]); + break; + case 31: + this.$ = { text: $$[$0], type: "text" }; + break; + case 32: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 33: + this.$ = { text: $$[$0], type: "text" }; + break; + case 34: + this.$ = { text: $$[$0], type: "markdown" }; + break; + case 35: + this.$ = $$[$0]; + break; + case 36: + this.$ = $$[$0 - 1] + "" + $$[$0]; + break; + } + }, + table: [{ 3: 1, 4: 2, 5: $V0, 6: $V1, 32: $V2, 33: $V3, 34: $V4 }, { 1: [3] }, { 3: 8, 4: 2, 5: $V0, 6: $V1, 32: $V2, 33: $V3, 34: $V4 }, { 3: 9, 4: 2, 5: $V0, 6: $V1, 32: $V2, 33: $V3, 34: $V4 }, o($V5, [2, 4], { 7: 10 }), o($V6, [2, 28]), o($V6, [2, 29]), o($V6, [2, 30]), { 1: [2, 1] }, { 1: [2, 2] }, o($V7, $V8, { 8: 11, 9: 12, 10: 14, 11: 15, 12: 16, 21: 28, 35: 29, 1: [2, 3], 5: $V9, 13: $Va, 15: $Vb, 17: $Vc, 19: $Vd, 20: $Ve, 25: $Vf, 27: $Vg, 28: $Vh, 29: $Vi, 30: $Vj, 31: $Vk, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }), o($V5, [2, 5]), { 4: 43, 32: $V2, 33: $V3, 34: $V4 }, o($V7, $V8, { 10: 14, 11: 15, 12: 16, 21: 28, 35: 29, 9: 44, 5: $V9, 13: $Va, 15: $Vb, 17: $Vc, 19: $Vd, 20: $Ve, 25: $Vf, 27: $Vg, 28: $Vh, 29: $Vi, 30: $Vj, 31: $Vk, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }), o($V7, [2, 9]), o($V7, [2, 10]), o($V7, [2, 11]), { 14: [1, 45] }, { 16: [1, 46] }, { 18: [1, 47] }, o($V7, [2, 15]), o($V7, [2, 16]), { 21: 48, 35: 29, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }, { 21: 49, 35: 29, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }, { 21: 50, 35: 29, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }, { 21: 51, 35: 29, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }, { 21: 52, 35: 29, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }, { 21: 53, 35: 29, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }, { 5: $Vy, 22: [1, 54], 35: 56, 36: 55, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }, o($VA, [2, 31]), o($VA, [2, 33]), o($VA, [2, 34]), o($VA, [2, 37]), o($VA, [2, 38]), o($VA, [2, 39]), o($VA, [2, 40]), o($VA, [2, 41]), o($VA, [2, 42]), o($VA, [2, 43]), o($VA, [2, 44]), o($VA, [2, 45]), o($VA, [2, 46]), o($VA, [2, 47]), o($V5, [2, 6]), o($V7, [2, 8]), o($V7, [2, 12]), o($V7, [2, 13]), o($V7, [2, 14]), o($V7, [2, 20], { 36: 55, 35: 56, 5: $Vy, 26: [1, 59], 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }), o($V7, [2, 23], { 36: 55, 35: 56, 5: $Vy, 26: [1, 60], 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }), o($V7, [2, 24], { 36: 55, 35: 56, 5: $Vy, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }), o($V7, [2, 25], { 36: 55, 35: 56, 5: $Vy, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }), o($V7, [2, 26], { 36: 55, 35: 56, 5: $Vy, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }), o($V7, [2, 27], { 36: 55, 35: 56, 5: $Vy, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }), { 23: [1, 61] }, o($VA, [2, 32]), o($VA, [2, 48]), o($VA, [2, 49]), o($VA, [2, 50]), o($V7, [2, 19], { 35: 29, 21: 62, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }), o($V7, [2, 22], { 35: 29, 21: 63, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }), { 24: [1, 64] }, o($V7, [2, 18], { 36: 55, 35: 56, 5: $Vy, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }), o($V7, [2, 21], { 36: 55, 35: 56, 5: $Vy, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }), o($V7, [2, 17])], + defaultActions: { 8: [2, 1], 9: [2, 2] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + break; + case 1: + break; + case 2: + return 32; + case 3: + break; + case 4: + this.begin("title"); + return 13; + case 5: + this.popState(); + return "title_value"; + case 6: + this.begin("acc_title"); + return 15; + case 7: + this.popState(); + return "acc_title_value"; + case 8: + this.begin("acc_descr"); + return 17; + case 9: + this.popState(); + return "acc_descr_value"; + case 10: + this.begin("acc_descr_multiline"); + break; + case 11: + this.popState(); + break; + case 12: + return "acc_descr_multiline_value"; + case 13: + return 25; + case 14: + return 27; + case 15: + return 26; + case 16: + return 28; + case 17: + return 29; + case 18: + return 30; + case 19: + return 31; + case 20: + this.begin("md_string"); + break; + case 21: + return "MD_STR"; + case 22: + this.popState(); + break; + case 23: + this.begin("string"); + break; + case 24: + this.popState(); + break; + case 25: + return "STR"; + case 26: + this.begin("point_start"); + return 22; + case 27: + this.begin("point_x"); + return 23; + case 28: + this.popState(); + break; + case 29: + this.popState(); + this.begin("point_y"); + break; + case 30: + this.popState(); + return 24; + case 31: + return 6; + case 32: + return 43; + case 33: + return "COLON"; + case 34: + return 45; + case 35: + return 44; + case 36: + return 46; + case 37: + return 46; + case 38: + return 47; + case 39: + return 49; + case 40: + return 50; + case 41: + return 48; + case 42: + return 41; + case 43: + return 51; + case 44: + return 42; + case 45: + return 5; + case 46: + return 33; + case 47: + return 40; + case 48: + return 34; + } + }, + rules: [/^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n\r]+)/i, /^(?:%%[^\n]*)/i, /^(?:title\b)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?: *x-axis *)/i, /^(?: *y-axis *)/i, /^(?: *--+> *)/i, /^(?: *quadrant-1 *)/i, /^(?: *quadrant-2 *)/i, /^(?: *quadrant-3 *)/i, /^(?: *quadrant-4 *)/i, /^(?:["][`])/i, /^(?:[^`"]+)/i, /^(?:[`]["])/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:\s*:\s*\[\s*)/i, /^(?:(1)|(0(.\d+)?))/i, /^(?:\s*\] *)/i, /^(?:\s*,\s*)/i, /^(?:(1)|(0(.\d+)?))/i, /^(?: *quadrantChart *)/i, /^(?:[A-Za-z]+)/i, /^(?::)/i, /^(?:\+)/i, /^(?:,)/i, /^(?:=)/i, /^(?:=)/i, /^(?:\*)/i, /^(?:#)/i, /^(?:[\_])/i, /^(?:\.)/i, /^(?:&)/i, /^(?:-)/i, /^(?:[0-9]+)/i, /^(?:\s)/i, /^(?:;)/i, /^(?:[!"#$%&'*+,-.`?\\_/])/i, /^(?:$)/i], + conditions: { "point_y": { "rules": [30], "inclusive": false }, "point_x": { "rules": [29], "inclusive": false }, "point_start": { "rules": [27, 28], "inclusive": false }, "acc_descr_multiline": { "rules": [11, 12], "inclusive": false }, "acc_descr": { "rules": [9], "inclusive": false }, "acc_title": { "rules": [7], "inclusive": false }, "title": { "rules": [5], "inclusive": false }, "md_string": { "rules": [21, 22], "inclusive": false }, "string": { "rules": [24, 25], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 6, 8, 10, 13, 14, 15, 16, 17, 18, 19, 20, 23, 26, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const defaultThemeVariables = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.E)(); +class QuadrantBuilder { + constructor() { + this.config = this.getDefaultConfig(); + this.themeConfig = this.getDefaultThemeConfig(); + this.data = this.getDefaultData(); + } + getDefaultData() { + return { + titleText: "", + quadrant1Text: "", + quadrant2Text: "", + quadrant3Text: "", + quadrant4Text: "", + xAxisLeftText: "", + xAxisRightText: "", + yAxisBottomText: "", + yAxisTopText: "", + points: [] + }; + } + getDefaultConfig() { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r; + return { + showXAxis: true, + showYAxis: true, + showTitle: true, + chartHeight: ((_a = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _a.chartWidth) || 500, + chartWidth: ((_b = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _b.chartHeight) || 500, + titlePadding: ((_c = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _c.titlePadding) || 10, + titleFontSize: ((_d = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _d.titleFontSize) || 20, + quadrantPadding: ((_e = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _e.quadrantPadding) || 5, + xAxisLabelPadding: ((_f = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _f.xAxisLabelPadding) || 5, + yAxisLabelPadding: ((_g = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _g.yAxisLabelPadding) || 5, + xAxisLabelFontSize: ((_h = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _h.xAxisLabelFontSize) || 16, + yAxisLabelFontSize: ((_i = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _i.yAxisLabelFontSize) || 16, + quadrantLabelFontSize: ((_j = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _j.quadrantLabelFontSize) || 16, + quadrantTextTopPadding: ((_k = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _k.quadrantTextTopPadding) || 5, + pointTextPadding: ((_l = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _l.pointTextPadding) || 5, + pointLabelFontSize: ((_m = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _m.pointLabelFontSize) || 12, + pointRadius: ((_n = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _n.pointRadius) || 5, + xAxisPosition: ((_o = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _o.xAxisPosition) || "top", + yAxisPosition: ((_p = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _p.yAxisPosition) || "left", + quadrantInternalBorderStrokeWidth: ((_q = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _q.quadrantInternalBorderStrokeWidth) || 1, + quadrantExternalBorderStrokeWidth: ((_r = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _r.quadrantExternalBorderStrokeWidth) || 2 + }; + } + getDefaultThemeConfig() { + return { + quadrant1Fill: defaultThemeVariables.quadrant1Fill, + quadrant2Fill: defaultThemeVariables.quadrant2Fill, + quadrant3Fill: defaultThemeVariables.quadrant3Fill, + quadrant4Fill: defaultThemeVariables.quadrant4Fill, + quadrant1TextFill: defaultThemeVariables.quadrant1TextFill, + quadrant2TextFill: defaultThemeVariables.quadrant2TextFill, + quadrant3TextFill: defaultThemeVariables.quadrant3TextFill, + quadrant4TextFill: defaultThemeVariables.quadrant4TextFill, + quadrantPointFill: defaultThemeVariables.quadrantPointFill, + quadrantPointTextFill: defaultThemeVariables.quadrantPointTextFill, + quadrantXAxisTextFill: defaultThemeVariables.quadrantXAxisTextFill, + quadrantYAxisTextFill: defaultThemeVariables.quadrantYAxisTextFill, + quadrantTitleFill: defaultThemeVariables.quadrantTitleFill, + quadrantInternalBorderStrokeFill: defaultThemeVariables.quadrantInternalBorderStrokeFill, + quadrantExternalBorderStrokeFill: defaultThemeVariables.quadrantExternalBorderStrokeFill + }; + } + clear() { + this.config = this.getDefaultConfig(); + this.themeConfig = this.getDefaultThemeConfig(); + this.data = this.getDefaultData(); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("clear called"); + } + setData(data) { + this.data = { ...this.data, ...data }; + } + addPoints(points) { + this.data.points = [...points, ...this.data.points]; + } + setConfig(config2) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("setConfig called with: ", config2); + this.config = { ...this.config, ...config2 }; + } + setThemeConfig(themeConfig) { + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("setThemeConfig called with: ", themeConfig); + this.themeConfig = { ...this.themeConfig, ...themeConfig }; + } + calculateSpace(xAxisPosition, showXAxis, showYAxis, showTitle) { + const xAxisSpaceCalculation = this.config.xAxisLabelPadding * 2 + this.config.xAxisLabelFontSize; + const xAxisSpace = { + top: xAxisPosition === "top" && showXAxis ? xAxisSpaceCalculation : 0, + bottom: xAxisPosition === "bottom" && showXAxis ? xAxisSpaceCalculation : 0 + }; + const yAxisSpaceCalculation = this.config.yAxisLabelPadding * 2 + this.config.yAxisLabelFontSize; + const yAxisSpace = { + left: this.config.yAxisPosition === "left" && showYAxis ? yAxisSpaceCalculation : 0, + right: this.config.yAxisPosition === "right" && showYAxis ? yAxisSpaceCalculation : 0 + }; + const titleSpaceCalculation = this.config.titleFontSize + this.config.titlePadding * 2; + const titleSpace = { + top: showTitle ? titleSpaceCalculation : 0 + }; + const quadrantLeft = this.config.quadrantPadding + yAxisSpace.left; + const quadrantTop = this.config.quadrantPadding + xAxisSpace.top + titleSpace.top; + const quadrantWidth = this.config.chartWidth - this.config.quadrantPadding * 2 - yAxisSpace.left - yAxisSpace.right; + const quadrantHeight = this.config.chartHeight - this.config.quadrantPadding * 2 - xAxisSpace.top - xAxisSpace.bottom - titleSpace.top; + const quadrantHalfWidth = quadrantWidth / 2; + const quadrantHalfHeight = quadrantHeight / 2; + const quadrantSpace = { + quadrantLeft, + quadrantTop, + quadrantWidth, + quadrantHalfWidth, + quadrantHeight, + quadrantHalfHeight + }; + return { + xAxisSpace, + yAxisSpace, + titleSpace, + quadrantSpace + }; + } + getAxisLabels(xAxisPosition, showXAxis, showYAxis, spaceData) { + const { quadrantSpace, titleSpace } = spaceData; + const { + quadrantHalfHeight, + quadrantHeight, + quadrantLeft, + quadrantHalfWidth, + quadrantTop, + quadrantWidth + } = quadrantSpace; + const drawXAxisLabelsInMiddle = Boolean(this.data.xAxisRightText); + const drawYAxisLabelsInMiddle = Boolean(this.data.yAxisTopText); + const axisLabels = []; + if (this.data.xAxisLeftText && showXAxis) { + axisLabels.push({ + text: this.data.xAxisLeftText, + fill: this.themeConfig.quadrantXAxisTextFill, + x: quadrantLeft + (drawXAxisLabelsInMiddle ? quadrantHalfWidth / 2 : 0), + y: xAxisPosition === "top" ? this.config.xAxisLabelPadding + titleSpace.top : this.config.xAxisLabelPadding + quadrantTop + quadrantHeight + this.config.quadrantPadding, + fontSize: this.config.xAxisLabelFontSize, + verticalPos: drawXAxisLabelsInMiddle ? "center" : "left", + horizontalPos: "top", + rotation: 0 + }); + } + if (this.data.xAxisRightText && showXAxis) { + axisLabels.push({ + text: this.data.xAxisRightText, + fill: this.themeConfig.quadrantXAxisTextFill, + x: quadrantLeft + quadrantHalfWidth + (drawXAxisLabelsInMiddle ? quadrantHalfWidth / 2 : 0), + y: xAxisPosition === "top" ? this.config.xAxisLabelPadding + titleSpace.top : this.config.xAxisLabelPadding + quadrantTop + quadrantHeight + this.config.quadrantPadding, + fontSize: this.config.xAxisLabelFontSize, + verticalPos: drawXAxisLabelsInMiddle ? "center" : "left", + horizontalPos: "top", + rotation: 0 + }); + } + if (this.data.yAxisBottomText && showYAxis) { + axisLabels.push({ + text: this.data.yAxisBottomText, + fill: this.themeConfig.quadrantYAxisTextFill, + x: this.config.yAxisPosition === "left" ? this.config.yAxisLabelPadding : this.config.yAxisLabelPadding + quadrantLeft + quadrantWidth + this.config.quadrantPadding, + y: quadrantTop + quadrantHeight - (drawYAxisLabelsInMiddle ? quadrantHalfHeight / 2 : 0), + fontSize: this.config.yAxisLabelFontSize, + verticalPos: drawYAxisLabelsInMiddle ? "center" : "left", + horizontalPos: "top", + rotation: -90 + }); + } + if (this.data.yAxisTopText && showYAxis) { + axisLabels.push({ + text: this.data.yAxisTopText, + fill: this.themeConfig.quadrantYAxisTextFill, + x: this.config.yAxisPosition === "left" ? this.config.yAxisLabelPadding : this.config.yAxisLabelPadding + quadrantLeft + quadrantWidth + this.config.quadrantPadding, + y: quadrantTop + quadrantHalfHeight - (drawYAxisLabelsInMiddle ? quadrantHalfHeight / 2 : 0), + fontSize: this.config.yAxisLabelFontSize, + verticalPos: drawYAxisLabelsInMiddle ? "center" : "left", + horizontalPos: "top", + rotation: -90 + }); + } + return axisLabels; + } + getQuadrants(spaceData) { + const { quadrantSpace } = spaceData; + const { quadrantHalfHeight, quadrantLeft, quadrantHalfWidth, quadrantTop } = quadrantSpace; + const quadrants = [ + { + text: { + text: this.data.quadrant1Text, + fill: this.themeConfig.quadrant1TextFill, + x: 0, + y: 0, + fontSize: this.config.quadrantLabelFontSize, + verticalPos: "center", + horizontalPos: "middle", + rotation: 0 + }, + x: quadrantLeft + quadrantHalfWidth, + y: quadrantTop, + width: quadrantHalfWidth, + height: quadrantHalfHeight, + fill: this.themeConfig.quadrant1Fill + }, + { + text: { + text: this.data.quadrant2Text, + fill: this.themeConfig.quadrant2TextFill, + x: 0, + y: 0, + fontSize: this.config.quadrantLabelFontSize, + verticalPos: "center", + horizontalPos: "middle", + rotation: 0 + }, + x: quadrantLeft, + y: quadrantTop, + width: quadrantHalfWidth, + height: quadrantHalfHeight, + fill: this.themeConfig.quadrant2Fill + }, + { + text: { + text: this.data.quadrant3Text, + fill: this.themeConfig.quadrant3TextFill, + x: 0, + y: 0, + fontSize: this.config.quadrantLabelFontSize, + verticalPos: "center", + horizontalPos: "middle", + rotation: 0 + }, + x: quadrantLeft, + y: quadrantTop + quadrantHalfHeight, + width: quadrantHalfWidth, + height: quadrantHalfHeight, + fill: this.themeConfig.quadrant3Fill + }, + { + text: { + text: this.data.quadrant4Text, + fill: this.themeConfig.quadrant4TextFill, + x: 0, + y: 0, + fontSize: this.config.quadrantLabelFontSize, + verticalPos: "center", + horizontalPos: "middle", + rotation: 0 + }, + x: quadrantLeft + quadrantHalfWidth, + y: quadrantTop + quadrantHalfHeight, + width: quadrantHalfWidth, + height: quadrantHalfHeight, + fill: this.themeConfig.quadrant4Fill + } + ]; + for (const quadrant of quadrants) { + quadrant.text.x = quadrant.x + quadrant.width / 2; + if (this.data.points.length === 0) { + quadrant.text.y = quadrant.y + quadrant.height / 2; + quadrant.text.horizontalPos = "middle"; + } else { + quadrant.text.y = quadrant.y + this.config.quadrantTextTopPadding; + quadrant.text.horizontalPos = "top"; + } + } + return quadrants; + } + getQuadrantPoints(spaceData) { + const { quadrantSpace } = spaceData; + const { quadrantHeight, quadrantLeft, quadrantTop, quadrantWidth } = quadrantSpace; + const xAxis = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .scaleLinear */ .m4Y)().domain([0, 1]).range([quadrantLeft, quadrantWidth + quadrantLeft]); + const yAxis = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .scaleLinear */ .m4Y)().domain([0, 1]).range([quadrantHeight + quadrantTop, quadrantTop]); + const points = this.data.points.map((point) => { + const props = { + x: xAxis(point.x), + y: yAxis(point.y), + fill: this.themeConfig.quadrantPointFill, + radius: this.config.pointRadius, + text: { + text: point.text, + fill: this.themeConfig.quadrantPointTextFill, + x: xAxis(point.x), + y: yAxis(point.y) + this.config.pointTextPadding, + verticalPos: "center", + horizontalPos: "top", + fontSize: this.config.pointLabelFontSize, + rotation: 0 + } + }; + return props; + }); + return points; + } + getBorders(spaceData) { + const halfExternalBorderWidth = this.config.quadrantExternalBorderStrokeWidth / 2; + const { quadrantSpace } = spaceData; + const { + quadrantHalfHeight, + quadrantHeight, + quadrantLeft, + quadrantHalfWidth, + quadrantTop, + quadrantWidth + } = quadrantSpace; + const borderLines = [ + // top border + { + strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill, + strokeWidth: this.config.quadrantExternalBorderStrokeWidth, + x1: quadrantLeft - halfExternalBorderWidth, + y1: quadrantTop, + x2: quadrantLeft + quadrantWidth + halfExternalBorderWidth, + y2: quadrantTop + }, + // right border + { + strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill, + strokeWidth: this.config.quadrantExternalBorderStrokeWidth, + x1: quadrantLeft + quadrantWidth, + y1: quadrantTop + halfExternalBorderWidth, + x2: quadrantLeft + quadrantWidth, + y2: quadrantTop + quadrantHeight - halfExternalBorderWidth + }, + // bottom border + { + strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill, + strokeWidth: this.config.quadrantExternalBorderStrokeWidth, + x1: quadrantLeft - halfExternalBorderWidth, + y1: quadrantTop + quadrantHeight, + x2: quadrantLeft + quadrantWidth + halfExternalBorderWidth, + y2: quadrantTop + quadrantHeight + }, + // left border + { + strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill, + strokeWidth: this.config.quadrantExternalBorderStrokeWidth, + x1: quadrantLeft, + y1: quadrantTop + halfExternalBorderWidth, + x2: quadrantLeft, + y2: quadrantTop + quadrantHeight - halfExternalBorderWidth + }, + // vertical inner border + { + strokeFill: this.themeConfig.quadrantInternalBorderStrokeFill, + strokeWidth: this.config.quadrantInternalBorderStrokeWidth, + x1: quadrantLeft + quadrantHalfWidth, + y1: quadrantTop + halfExternalBorderWidth, + x2: quadrantLeft + quadrantHalfWidth, + y2: quadrantTop + quadrantHeight - halfExternalBorderWidth + }, + // horizontal inner border + { + strokeFill: this.themeConfig.quadrantInternalBorderStrokeFill, + strokeWidth: this.config.quadrantInternalBorderStrokeWidth, + x1: quadrantLeft + halfExternalBorderWidth, + y1: quadrantTop + quadrantHalfHeight, + x2: quadrantLeft + quadrantWidth - halfExternalBorderWidth, + y2: quadrantTop + quadrantHalfHeight + } + ]; + return borderLines; + } + getTitle(showTitle) { + if (showTitle) { + return { + text: this.data.titleText, + fill: this.themeConfig.quadrantTitleFill, + fontSize: this.config.titleFontSize, + horizontalPos: "top", + verticalPos: "center", + rotation: 0, + y: this.config.titlePadding, + x: this.config.chartWidth / 2 + }; + } + return; + } + build() { + const showXAxis = this.config.showXAxis && !!(this.data.xAxisLeftText || this.data.xAxisRightText); + const showYAxis = this.config.showYAxis && !!(this.data.yAxisTopText || this.data.yAxisBottomText); + const showTitle = this.config.showTitle && !!this.data.titleText; + const xAxisPosition = this.data.points.length > 0 ? "bottom" : this.config.xAxisPosition; + const calculatedSpace = this.calculateSpace(xAxisPosition, showXAxis, showYAxis, showTitle); + return { + points: this.getQuadrantPoints(calculatedSpace), + quadrants: this.getQuadrants(calculatedSpace), + axisLabels: this.getAxisLabels(xAxisPosition, showXAxis, showYAxis, calculatedSpace), + borderLines: this.getBorders(calculatedSpace), + title: this.getTitle(showTitle) + }; + } +} +const config = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)(); +function textSanitizer(text) { + return (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.d)(text.trim(), config); +} +const quadrantBuilder = new QuadrantBuilder(); +function setQuadrant1Text(textObj) { + quadrantBuilder.setData({ quadrant1Text: textSanitizer(textObj.text) }); +} +function setQuadrant2Text(textObj) { + quadrantBuilder.setData({ quadrant2Text: textSanitizer(textObj.text) }); +} +function setQuadrant3Text(textObj) { + quadrantBuilder.setData({ quadrant3Text: textSanitizer(textObj.text) }); +} +function setQuadrant4Text(textObj) { + quadrantBuilder.setData({ quadrant4Text: textSanitizer(textObj.text) }); +} +function setXAxisLeftText(textObj) { + quadrantBuilder.setData({ xAxisLeftText: textSanitizer(textObj.text) }); +} +function setXAxisRightText(textObj) { + quadrantBuilder.setData({ xAxisRightText: textSanitizer(textObj.text) }); +} +function setYAxisTopText(textObj) { + quadrantBuilder.setData({ yAxisTopText: textSanitizer(textObj.text) }); +} +function setYAxisBottomText(textObj) { + quadrantBuilder.setData({ yAxisBottomText: textSanitizer(textObj.text) }); +} +function addPoint(textObj, x, y) { + quadrantBuilder.addPoints([{ x, y, text: textSanitizer(textObj.text) }]); +} +function setWidth(width) { + quadrantBuilder.setConfig({ chartWidth: width }); +} +function setHeight(height) { + quadrantBuilder.setConfig({ chartHeight: height }); +} +function getQuadrantData() { + const config2 = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + const { themeVariables, quadrantChart: quadrantChartConfig } = config2; + if (quadrantChartConfig) { + quadrantBuilder.setConfig(quadrantChartConfig); + } + quadrantBuilder.setThemeConfig({ + quadrant1Fill: themeVariables.quadrant1Fill, + quadrant2Fill: themeVariables.quadrant2Fill, + quadrant3Fill: themeVariables.quadrant3Fill, + quadrant4Fill: themeVariables.quadrant4Fill, + quadrant1TextFill: themeVariables.quadrant1TextFill, + quadrant2TextFill: themeVariables.quadrant2TextFill, + quadrant3TextFill: themeVariables.quadrant3TextFill, + quadrant4TextFill: themeVariables.quadrant4TextFill, + quadrantPointFill: themeVariables.quadrantPointFill, + quadrantPointTextFill: themeVariables.quadrantPointTextFill, + quadrantXAxisTextFill: themeVariables.quadrantXAxisTextFill, + quadrantYAxisTextFill: themeVariables.quadrantYAxisTextFill, + quadrantExternalBorderStrokeFill: themeVariables.quadrantExternalBorderStrokeFill, + quadrantInternalBorderStrokeFill: themeVariables.quadrantInternalBorderStrokeFill, + quadrantTitleFill: themeVariables.quadrantTitleFill + }); + quadrantBuilder.setData({ titleText: (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.t)() }); + return quadrantBuilder.build(); +} +const clear = function() { + quadrantBuilder.clear(); + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.v)(); +}; +const db = { + setWidth, + setHeight, + setQuadrant1Text, + setQuadrant2Text, + setQuadrant3Text, + setQuadrant4Text, + setXAxisLeftText, + setXAxisRightText, + setYAxisTopText, + setYAxisBottomText, + addPoint, + getQuadrantData, + clear, + setAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.s, + getAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.g, + setDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.q, + getDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.t, + getAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.a, + setAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.b +}; +const draw = (txt, id, _version, diagObj) => { + var _a, _b, _c; + function getDominantBaseLine(horizontalPos) { + return horizontalPos === "top" ? "hanging" : "middle"; + } + function getTextAnchor(verticalPos) { + return verticalPos === "left" ? "start" : "middle"; + } + function getTransformation(data) { + return `translate(${data.x}, ${data.y}) rotate(${data.rotation || 0})`; + } + const conf = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Rendering quadrant chart\n" + txt); + const securityLevel = conf.securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("body"); + const svg = root.select(`[id="${id}"]`); + const group = svg.append("g").attr("class", "main"); + const width = ((_a = conf.quadrantChart) == null ? void 0 : _a.chartWidth) || 500; + const height = ((_b = conf.quadrantChart) == null ? void 0 : _b.chartHeight) || 500; + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.i)(svg, height, width, ((_c = conf.quadrantChart) == null ? void 0 : _c.useMaxWidth) || true); + svg.attr("viewBox", "0 0 " + width + " " + height); + diagObj.db.setHeight(height); + diagObj.db.setWidth(width); + const quadrantData = diagObj.db.getQuadrantData(); + const quadrantsGroup = group.append("g").attr("class", "quadrants"); + const borderGroup = group.append("g").attr("class", "border"); + const dataPointGroup = group.append("g").attr("class", "data-points"); + const labelGroup = group.append("g").attr("class", "labels"); + const titleGroup = group.append("g").attr("class", "title"); + if (quadrantData.title) { + titleGroup.append("text").attr("x", 0).attr("y", 0).attr("fill", quadrantData.title.fill).attr("font-size", quadrantData.title.fontSize).attr("dominant-baseline", getDominantBaseLine(quadrantData.title.horizontalPos)).attr("text-anchor", getTextAnchor(quadrantData.title.verticalPos)).attr("transform", getTransformation(quadrantData.title)).text(quadrantData.title.text); + } + if (quadrantData.borderLines) { + borderGroup.selectAll("line").data(quadrantData.borderLines).enter().append("line").attr("x1", (data) => data.x1).attr("y1", (data) => data.y1).attr("x2", (data) => data.x2).attr("y2", (data) => data.y2).style("stroke", (data) => data.strokeFill).style("stroke-width", (data) => data.strokeWidth); + } + const quadrants = quadrantsGroup.selectAll("g.quadrant").data(quadrantData.quadrants).enter().append("g").attr("class", "quadrant"); + quadrants.append("rect").attr("x", (data) => data.x).attr("y", (data) => data.y).attr("width", (data) => data.width).attr("height", (data) => data.height).attr("fill", (data) => data.fill); + quadrants.append("text").attr("x", 0).attr("y", 0).attr("fill", (data) => data.text.fill).attr("font-size", (data) => data.text.fontSize).attr( + "dominant-baseline", + (data) => getDominantBaseLine(data.text.horizontalPos) + ).attr("text-anchor", (data) => getTextAnchor(data.text.verticalPos)).attr("transform", (data) => getTransformation(data.text)).text((data) => data.text.text); + const labels = labelGroup.selectAll("g.label").data(quadrantData.axisLabels).enter().append("g").attr("class", "label"); + labels.append("text").attr("x", 0).attr("y", 0).text((data) => data.text).attr("fill", (data) => data.fill).attr("font-size", (data) => data.fontSize).attr("dominant-baseline", (data) => getDominantBaseLine(data.horizontalPos)).attr("text-anchor", (data) => getTextAnchor(data.verticalPos)).attr("transform", (data) => getTransformation(data)); + const dataPoints = dataPointGroup.selectAll("g.data-point").data(quadrantData.points).enter().append("g").attr("class", "data-point"); + dataPoints.append("circle").attr("cx", (data) => data.x).attr("cy", (data) => data.y).attr("r", (data) => data.radius).attr("fill", (data) => data.fill); + dataPoints.append("text").attr("x", 0).attr("y", 0).text((data) => data.text.text).attr("fill", (data) => data.text.fill).attr("font-size", (data) => data.text.fontSize).attr( + "dominant-baseline", + (data) => getDominantBaseLine(data.text.horizontalPos) + ).attr("text-anchor", (data) => getTextAnchor(data.text.verticalPos)).attr("transform", (data) => getTransformation(data.text)); +}; +const renderer = { + draw +}; +const diagram = { + parser: parser$1, + db, + renderer, + styles: () => "" +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/47daf389.a34e589e.js b/assets/js/47daf389.a34e589e.js new file mode 100644 index 0000000000..528d231cd7 --- /dev/null +++ b/assets/js/47daf389.a34e589e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3757],{76405:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>i,contentTitle:()=>a,default:()=>u,frontMatter:()=>c,metadata:()=>l,toc:()=>o});var r=n(74848),t=n(28453);const c={slug:"v8.4-release",title:"v8.4",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:-14},a="eCalc",l={id:"changelog/v8-4",title:"v8.4",description:"New Features",source:"@site/docs/changelog/v8-4.md",sourceDirName:"changelog",slug:"/changelog/v8.4-release",permalink:"/ecalc/docs/changelog/v8.4-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-4.md",tags:[{inline:!0,label:"release",permalink:"/ecalc/docs/tags/release"},{inline:!0,label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:-14,frontMatter:{slug:"v8.4-release",title:"v8.4",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:-14},sidebar:"changelog",previous:{title:"v8.5",permalink:"/ecalc/docs/changelog/v8.5-release"},next:{title:"v8.3",permalink:"/ecalc/docs/changelog/v8.3-release"}},i={},o=[{value:"New Features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking changes",id:"breaking-changes",level:2}];function d(e){const s={code:"code",h1:"h1",h2:"h2",li:"li",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"ecalc",children:"eCalc"}),"\n",(0,r.jsx)(s.h2,{id:"new-features",children:"New Features"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["Add ",(0,r.jsx)(s.code,{children:"requested inlet- and outlet compressor pressures"})," from input data to results. In cases where active pressure control mechanisms are active, requested inlet- and outlet pressures may differ from ",(0,r.jsx)(s.code,{children:"calculated pressures"}),". It is now possible to analyse both requested- and calculated pressures."]}),"\n",(0,r.jsxs)(s.li,{children:["Specify ",(0,r.jsx)(s.code,{children:"rate type"})," for majority of output ",(0,r.jsx)(s.code,{children:"rate"})," results as either ",(0,r.jsx)(s.code,{children:"stream day"})," or ",(0,r.jsx)(s.code,{children:"calendar day"}),"."]}),"\n",(0,r.jsx)(s.li,{children:"Improved error messages"}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"fixes",children:"Fixes"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"Actual rate"})," was incorrectly returned for ",(0,r.jsx)(s.code,{children:"compressor sampled"}),". Actual rate cannot be known for ",(0,r.jsx)(s.code,{children:"compressor sampled"})," since we need to know ",(0,r.jsx)(s.code,{children:"fluid properties"})," in order to do that. ",(0,r.jsx)(s.code,{children:"Actual rate"})," has therefore been removed from ",(0,r.jsx)(s.code,{children:"compressor sampled"}),"."]}),"\n",(0,r.jsxs)(s.li,{children:["Handle bug in ",(0,r.jsx)(s.code,{children:"Variable Speed Compressor Train With Multiple Streams And Pressures"})," when no rate is entering a compressor stage wrt. recirculation."]}),"\n",(0,r.jsx)(s.li,{children:"Other minor fixes"}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["CSV resource files must include headings. If there is a column without a header (for example ",(0,r.jsx)(s.code,{children:"HEADING1,HEADING2,"})," - the last ",(0,r.jsx)(s.code,{children:","}),' creates an empty column), you will get an error messages saying "CSV input file must include header". You can solve this by giving the column a name, or removing it.']}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,t.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,s,n)=>{n.d(s,{R:()=>a,x:()=>l});var r=n(96540);const t={},c=r.createContext(t);function a(e){const s=r.useContext(c);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),r.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/489.5e628191.js b/assets/js/489.5e628191.js new file mode 100644 index 0000000000..41349e0b70 --- /dev/null +++ b/assets/js/489.5e628191.js @@ -0,0 +1,2 @@ +/*! For license information please see 489.5e628191.js.LICENSE.txt */ +(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[489],{90489:(t,e,n)=>{"use strict";t.exports=n(810)},2542:(t,e,n)=>{"use strict";var i=n(46573),s={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},suggestions:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:"0"},defaultClasses:{root:"algolia-autocomplete",prefix:"aa",noPrefix:!1,dropdownMenu:"dropdown-menu",input:"input",hint:"hint",suggestions:"suggestions",suggestion:"suggestion",cursor:"cursor",dataset:"dataset",empty:"empty"},appendTo:{wrapper:{position:"absolute",zIndex:"100",display:"none"},input:{},inputWithNoHint:{},dropdown:{display:"block"}}};i.isMsie()&&i.mixin(s.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),i.isMsie()&&i.isMsie()<=7&&i.mixin(s.input,{marginTop:"-1px"}),t.exports=s},10897:(t,e,n)=>{"use strict";var i="aaDataset",s="aaValue",r="aaDatum",o=n(46573),a=n(61348),u=n(99272),c=n(2542),l=n(84436);function h(t){var e;(t=t||{}).templates=t.templates||{},t.source||o.error("missing source"),t.name&&(e=t.name,!/^[_a-zA-Z0-9-]+$/.test(e))&&o.error("invalid dataset name: "+t.name),this.query=null,this._isEmpty=!0,this.highlight=!!t.highlight,this.name=void 0===t.name||null===t.name?o.getUniqueId():t.name,this.source=t.source,this.displayFn=function(t){return t=t||"value",o.isFunction(t)?t:e;function e(e){return e[t]}}(t.display||t.displayKey),this.debounce=t.debounce,this.cache=!1!==t.cache,this.templates=function(t,e){return{empty:t.empty&&o.templatify(t.empty),header:t.header&&o.templatify(t.header),footer:t.footer&&o.templatify(t.footer),suggestion:t.suggestion||n};function n(t){return"

    "+e(t)+"

    "}}(t.templates,this.displayFn),this.css=o.mixin({},c,t.appendTo?c.appendTo:{}),this.cssClasses=t.cssClasses=o.mixin({},c.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||o.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix);var n=o.className(this.cssClasses.prefix,this.cssClasses.dataset);this.$el=t.$menu&&t.$menu.find(n+"-"+this.name).length>0?a.element(t.$menu.find(n+"-"+this.name)[0]):a.element(u.dataset.replace("%CLASS%",this.name).replace("%PREFIX%",this.cssClasses.prefix).replace("%DATASET%",this.cssClasses.dataset)),this.$menu=t.$menu,this.clearCachedSuggestions()}h.extractDatasetName=function(t){return a.element(t).data(i)},h.extractValue=function(t){return a.element(t).data(s)},h.extractDatum=function(t){var e=a.element(t).data(r);return"string"==typeof e&&(e=JSON.parse(e)),e},o.mixin(h.prototype,l,{_render:function(t,e){if(this.$el){var n,c=this,l=[].slice.call(arguments,2);if(this.$el.empty(),n=e&&e.length,this._isEmpty=!n,!n&&this.templates.empty)this.$el.html(function(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!0}].concat(e),c.templates.empty.apply(this,e)}.apply(this,l)).prepend(c.templates.header?h.apply(this,l):null).append(c.templates.footer?p.apply(this,l):null);else if(n)this.$el.html(function(){var t,n,l=[].slice.call(arguments,0),h=this,p=u.suggestions.replace("%PREFIX%",this.cssClasses.prefix).replace("%SUGGESTIONS%",this.cssClasses.suggestions);return t=a.element(p).css(this.css.suggestions),n=o.map(e,f),t.append.apply(t,n),t;function f(t){var e,n=u.suggestion.replace("%PREFIX%",h.cssClasses.prefix).replace("%SUGGESTION%",h.cssClasses.suggestion);return(e=a.element(n).attr({role:"option",id:["option",Math.floor(1e8*Math.random())].join("-")}).append(c.templates.suggestion.apply(this,[t].concat(l)))).data(i,c.name),e.data(s,c.displayFn(t)||void 0),e.data(r,JSON.stringify(t)),e.children().each((function(){a.element(this).css(h.css.suggestionChild)})),e}}.apply(this,l)).prepend(c.templates.header?h.apply(this,l):null).append(c.templates.footer?p.apply(this,l):null);else if(e&&!Array.isArray(e))throw new TypeError("suggestions must be an array");this.$menu&&this.$menu.addClass(this.cssClasses.prefix+(n?"with":"without")+"-"+this.name).removeClass(this.cssClasses.prefix+(n?"without":"with")+"-"+this.name),this.trigger("rendered",t)}function h(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),c.templates.header.apply(this,e)}function p(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),c.templates.footer.apply(this,e)}},getRoot:function(){return this.$el},update:function(t){function e(e){if(!this.canceled&&t===this.query){var n=[].slice.call(arguments,1);this.cacheSuggestions(t,e,n),this._render.apply(this,[t,e].concat(n))}}if(this.query=t,this.canceled=!1,this.shouldFetchFromCache(t))e.apply(this,[this.cachedSuggestions].concat(this.cachedRenderExtraArgs));else{var n=this,i=function(){n.canceled||n.source(t,e.bind(n))};if(this.debounce){clearTimeout(this.debounceTimeout),this.debounceTimeout=setTimeout((function(){n.debounceTimeout=null,i()}),this.debounce)}else i()}},cacheSuggestions:function(t,e,n){this.cachedQuery=t,this.cachedSuggestions=e,this.cachedRenderExtraArgs=n},shouldFetchFromCache:function(t){return this.cache&&this.cachedQuery===t&&this.cachedSuggestions&&this.cachedSuggestions.length},clearCachedSuggestions:function(){delete this.cachedQuery,delete this.cachedSuggestions,delete this.cachedRenderExtraArgs},cancel:function(){this.canceled=!0},clear:function(){this.$el&&(this.cancel(),this.$el.empty(),this.trigger("rendered",""))},isEmpty:function(){return this._isEmpty},destroy:function(){this.clearCachedSuggestions(),this.$el=null}}),t.exports=h},21540:(t,e,n)=>{"use strict";var i=n(46573),s=n(61348),r=n(84436),o=n(10897),a=n(2542);function u(t){var e,n,r,o=this;(t=t||{}).menu||i.error("menu is required"),i.isArray(t.datasets)||i.isObject(t.datasets)||i.error("1 or more datasets required"),t.datasets||i.error("datasets is required"),this.isOpen=!1,this.isEmpty=!0,this.minLength=t.minLength||0,this.templates={},this.appendTo=t.appendTo||!1,this.css=i.mixin({},a,t.appendTo?a.appendTo:{}),this.cssClasses=t.cssClasses=i.mixin({},a.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||i.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),e=i.bind(this._onSuggestionClick,this),n=i.bind(this._onSuggestionMouseEnter,this),r=i.bind(this._onSuggestionMouseLeave,this);var c=i.className(this.cssClasses.prefix,this.cssClasses.suggestion);this.$menu=s.element(t.menu).on("mouseenter.aa",c,n).on("mouseleave.aa",c,r).on("click.aa",c,e),this.$container=t.appendTo?t.wrapper:this.$menu,t.templates&&t.templates.header&&(this.templates.header=i.templatify(t.templates.header),this.$menu.prepend(this.templates.header())),t.templates&&t.templates.empty&&(this.templates.empty=i.templatify(t.templates.empty),this.$empty=s.element('
    '),this.$menu.append(this.$empty),this.$empty.hide()),this.datasets=i.map(t.datasets,(function(e){return function(t,e,n){return new u.Dataset(i.mixin({$menu:t,cssClasses:n},e))}(o.$menu,e,t.cssClasses)})),i.each(this.datasets,(function(t){var e=t.getRoot();e&&0===e.parent().length&&o.$menu.append(e),t.onSync("rendered",o._onRendered,o)})),t.templates&&t.templates.footer&&(this.templates.footer=i.templatify(t.templates.footer),this.$menu.append(this.templates.footer()));var l=this;s.element(window).resize((function(){l._redraw()}))}i.mixin(u.prototype,r,{_onSuggestionClick:function(t){this.trigger("suggestionClicked",s.element(t.currentTarget))},_onSuggestionMouseEnter:function(t){var e=s.element(t.currentTarget);if(!e.hasClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0))){this._removeCursor();var n=this;setTimeout((function(){n._setCursor(e,!1)}),0)}},_onSuggestionMouseLeave:function(t){if(t.relatedTarget&&s.element(t.relatedTarget).closest("."+i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).length>0)return;this._removeCursor(),this.trigger("cursorRemoved")},_onRendered:function(t,e){if(this.isEmpty=i.every(this.datasets,(function(t){return t.isEmpty()})),this.isEmpty)if(e.length>=this.minLength&&this.trigger("empty"),this.$empty)if(e.length=this.minLength?this._show():this._hide());this.trigger("datasetRendered")},_hide:function(){this.$container.hide()},_show:function(){this.$container.css("display","block"),this._redraw(),this.trigger("shown")},_redraw:function(){this.isOpen&&this.appendTo&&this.trigger("redrawn")},_getSuggestions:function(){return this.$menu.find(i.className(this.cssClasses.prefix,this.cssClasses.suggestion))},_getCursor:function(){return this.$menu.find(i.className(this.cssClasses.prefix,this.cssClasses.cursor)).first()},_setCursor:function(t,e){t.first().addClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).attr("aria-selected","true"),this.trigger("cursorMoved",e)},_removeCursor:function(){this._getCursor().removeClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).removeAttr("aria-selected")},_moveCursor:function(t){var e,n,i,s;this.isOpen&&(n=this._getCursor(),e=this._getSuggestions(),this._removeCursor(),-1!==(i=((i=e.index(n)+t)+1)%(e.length+1)-1)?(i<-1&&(i=e.length-1),this._setCursor(s=e.eq(i),!0),this._ensureVisible(s)):this.trigger("cursorRemoved"))},_ensureVisible:function(t){var e,n,i,s;n=(e=t.position().top)+t.height()+parseInt(t.css("margin-top"),10)+parseInt(t.css("margin-bottom"),10),i=this.$menu.scrollTop(),s=this.$menu.height()+parseInt(this.$menu.css("padding-top"),10)+parseInt(this.$menu.css("padding-bottom"),10),e<0?this.$menu.scrollTop(i+e):s{"use strict";var i=n(46573),s=n(61348);function r(t){t&&t.el||i.error("EventBus initialized without el"),this.$el=s.element(t.el)}i.mixin(r.prototype,{trigger:function(t,e,n,s){var r=i.Event("autocomplete:"+t);return this.$el.trigger(r,[e,n,s]),r}}),t.exports=r},84436:(t,e,n)=>{"use strict";var i=n(90874),s=/\s+/;function r(t,e,n,i){var r;if(!n)return this;for(e=e.split(s),n=i?function(t,e){return t.bind?t.bind(e):function(){t.apply(e,[].slice.call(arguments,0))}}(n,i):n,this._callbacks=this._callbacks||{};r=e.shift();)this._callbacks[r]=this._callbacks[r]||{sync:[],async:[]},this._callbacks[r][t].push(n);return this}function o(t,e,n){return function(){for(var i,s=0,r=t.length;!i&&s{"use strict";t.exports={wrapper:'',dropdown:'',dataset:'
    ',suggestions:'',suggestion:'
    '}},49629:(t,e,n)=>{"use strict";var i;i={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"};var s=n(46573),r=n(61348),o=n(84436);function a(t){var e,n,o,a,u,c=this;(t=t||{}).input||s.error("input is missing"),e=s.bind(this._onBlur,this),n=s.bind(this._onFocus,this),o=s.bind(this._onKeydown,this),a=s.bind(this._onInput,this),this.$hint=r.element(t.hint),this.$input=r.element(t.input).on("blur.aa",e).on("focus.aa",n).on("keydown.aa",o),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=s.noop),s.isMsie()?this.$input.on("keydown.aa keypress.aa cut.aa paste.aa",(function(t){i[t.which||t.keyCode]||s.defer(s.bind(c._onInput,c,t))})):this.$input.on("input.aa",a),this.query=this.$input.val(),this.$overflowHelper=(u=this.$input,r.element('').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:u.css("font-family"),fontSize:u.css("font-size"),fontStyle:u.css("font-style"),fontVariant:u.css("font-variant"),fontWeight:u.css("font-weight"),wordSpacing:u.css("word-spacing"),letterSpacing:u.css("letter-spacing"),textIndent:u.css("text-indent"),textRendering:u.css("text-rendering"),textTransform:u.css("text-transform")}).insertAfter(u))}function u(t){return t.altKey||t.ctrlKey||t.metaKey||t.shiftKey}a.normalizeQuery=function(t){return(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ")},s.mixin(a.prototype,o,{_onBlur:function(){this.resetInputValue(),this.$input.removeAttr("aria-activedescendant"),this.trigger("blurred")},_onFocus:function(){this.trigger("focused")},_onKeydown:function(t){var e=i[t.which||t.keyCode];this._managePreventDefault(e,t),e&&this._shouldTrigger(e,t)&&this.trigger(e+"Keyed",t)},_onInput:function(){this._checkInputValue()},_managePreventDefault:function(t,e){var n,i,s;switch(t){case"tab":i=this.getHint(),s=this.getInputValue(),n=i&&i!==s&&!u(e);break;case"up":case"down":n=!u(e);break;default:n=!1}n&&e.preventDefault()},_shouldTrigger:function(t,e){var n;if("tab"===t)n=!u(e);else n=!0;return n},_checkInputValue:function(){var t,e,n,i,s;t=this.getInputValue(),i=t,s=this.query,n=!(!(e=a.normalizeQuery(i)===a.normalizeQuery(s))||!this.query)&&this.query.length!==t.length,this.query=t,e?n&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(t){this.query=t},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){void 0===t&&(t=this.query),this.$input.val(t),e?this.clearHint():this._checkInputValue()},expand:function(){this.$input.attr("aria-expanded","true")},collapse:function(){this.$input.attr("aria-expanded","false")},setActiveDescendant:function(t){this.$input.attr("aria-activedescendant",t)},removeActiveDescendant:function(){this.$input.removeAttr("aria-activedescendant")},resetInputValue:function(){this.setInputValue(this.query,!0)},getHint:function(){return this.$hint.val()},setHint:function(t){this.$hint.val(t)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var t,e,n;n=(t=this.getInputValue())!==(e=this.getHint())&&0===e.indexOf(t),""!==t&&n&&!this.hasOverflow()||this.clearHint()},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},hasOverflow:function(){var t=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=t},isCursorAtEnd:function(){var t,e,n;return t=this.$input.val().length,e=this.$input[0].selectionStart,s.isNumber(e)?e===t:!document.selection||((n=document.selection.createRange()).moveStart("character",-t),t===n.text.length)},destroy:function(){this.$hint.off(".aa"),this.$input.off(".aa"),this.$hint=this.$input=this.$overflowHelper=null}}),t.exports=a},37360:(t,e,n)=>{"use strict";var i="aaAttrs",s=n(46573),r=n(61348),o=n(52324),a=n(49629),u=n(21540),c=n(99272),l=n(2542);function h(t){var e,n;if((t=t||{}).input||s.error("missing input"),this.isActivated=!1,this.debug=!!t.debug,this.autoselect=!!t.autoselect,this.autoselectOnBlur=!!t.autoselectOnBlur,this.openOnFocus=!!t.openOnFocus,this.minLength=s.isNumber(t.minLength)?t.minLength:1,this.autoWidth=void 0===t.autoWidth||!!t.autoWidth,this.clearOnSelected=!!t.clearOnSelected,this.tabAutocomplete=void 0===t.tabAutocomplete||!!t.tabAutocomplete,t.hint=!!t.hint,t.hint&&t.appendTo)throw new Error("[autocomplete.js] hint and appendTo options can't be used at the same time");this.css=t.css=s.mixin({},l,t.appendTo?l.appendTo:{}),this.cssClasses=t.cssClasses=s.mixin({},l.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix=s.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),this.listboxId=t.listboxId=[this.cssClasses.root,"listbox",s.getUniqueId()].join("-");var a=function(t){var e,n,o,a;e=r.element(t.input),n=r.element(c.wrapper.replace("%ROOT%",t.cssClasses.root)).css(t.css.wrapper),t.appendTo||"block"!==e.css("display")||"table"!==e.parent().css("display")||n.css("display","table-cell");var u=c.dropdown.replace("%PREFIX%",t.cssClasses.prefix).replace("%DROPDOWN_MENU%",t.cssClasses.dropdownMenu);o=r.element(u).css(t.css.dropdown).attr({role:"listbox",id:t.listboxId}),t.templates&&t.templates.dropdownMenu&&o.html(s.templatify(t.templates.dropdownMenu)());a=e.clone().css(t.css.hint).css(function(t){return{backgroundAttachment:t.css("background-attachment"),backgroundClip:t.css("background-clip"),backgroundColor:t.css("background-color"),backgroundImage:t.css("background-image"),backgroundOrigin:t.css("background-origin"),backgroundPosition:t.css("background-position"),backgroundRepeat:t.css("background-repeat"),backgroundSize:t.css("background-size")}}(e)),a.val("").addClass(s.className(t.cssClasses.prefix,t.cssClasses.hint,!0)).removeAttr("id name placeholder required").prop("readonly",!0).attr({"aria-hidden":"true",autocomplete:"off",spellcheck:"false",tabindex:-1}),a.removeData&&a.removeData();e.data(i,{"aria-autocomplete":e.attr("aria-autocomplete"),"aria-expanded":e.attr("aria-expanded"),"aria-owns":e.attr("aria-owns"),autocomplete:e.attr("autocomplete"),dir:e.attr("dir"),role:e.attr("role"),spellcheck:e.attr("spellcheck"),style:e.attr("style"),type:e.attr("type")}),e.addClass(s.className(t.cssClasses.prefix,t.cssClasses.input,!0)).attr({autocomplete:"off",spellcheck:!1,role:"combobox","aria-autocomplete":t.datasets&&t.datasets[0]&&t.datasets[0].displayKey?"both":"list","aria-expanded":"false","aria-label":t.ariaLabel,"aria-owns":t.listboxId}).css(t.hint?t.css.input:t.css.inputWithNoHint);try{e.attr("dir")||e.attr("dir","auto")}catch(l){}return n=t.appendTo?n.appendTo(r.element(t.appendTo).eq(0)).eq(0):e.wrap(n).parent(),n.prepend(t.hint?a:null).append(o),{wrapper:n,input:e,hint:a,menu:o}}(t);this.$node=a.wrapper;var u=this.$input=a.input;e=a.menu,n=a.hint,t.dropdownMenuContainer&&r.element(t.dropdownMenuContainer).css("position","relative").append(e.css("top","0")),u.on("blur.aa",(function(t){var n=document.activeElement;s.isMsie()&&(e[0]===n||e[0].contains(n))&&(t.preventDefault(),t.stopImmediatePropagation(),s.defer((function(){u.focus()})))})),e.on("mousedown.aa",(function(t){t.preventDefault()})),this.eventBus=t.eventBus||new o({el:u}),this.dropdown=new h.Dropdown({appendTo:t.appendTo,wrapper:this.$node,menu:e,datasets:t.datasets,templates:t.templates,cssClasses:t.cssClasses,minLength:this.minLength}).onSync("suggestionClicked",this._onSuggestionClicked,this).onSync("cursorMoved",this._onCursorMoved,this).onSync("cursorRemoved",this._onCursorRemoved,this).onSync("opened",this._onOpened,this).onSync("closed",this._onClosed,this).onSync("shown",this._onShown,this).onSync("empty",this._onEmpty,this).onSync("redrawn",this._onRedrawn,this).onAsync("datasetRendered",this._onDatasetRendered,this),this.input=new h.Input({input:u,hint:n}).onSync("focused",this._onFocused,this).onSync("blurred",this._onBlurred,this).onSync("enterKeyed",this._onEnterKeyed,this).onSync("tabKeyed",this._onTabKeyed,this).onSync("escKeyed",this._onEscKeyed,this).onSync("upKeyed",this._onUpKeyed,this).onSync("downKeyed",this._onDownKeyed,this).onSync("leftKeyed",this._onLeftKeyed,this).onSync("rightKeyed",this._onRightKeyed,this).onSync("queryChanged",this._onQueryChanged,this).onSync("whitespaceChanged",this._onWhitespaceChanged,this),this._bindKeyboardShortcuts(t),this._setLanguageDirection()}s.mixin(h.prototype,{_bindKeyboardShortcuts:function(t){if(t.keyboardShortcuts){var e=this.$input,n=[];s.each(t.keyboardShortcuts,(function(t){"string"==typeof t&&(t=t.toUpperCase().charCodeAt(0)),n.push(t)})),r.element(document).keydown((function(t){var i=t.target||t.srcElement,s=i.tagName;if(!i.isContentEditable&&"INPUT"!==s&&"SELECT"!==s&&"TEXTAREA"!==s){var r=t.which||t.keyCode;-1!==n.indexOf(r)&&(e.focus(),t.stopPropagation(),t.preventDefault())}}))}},_onSuggestionClicked:function(t,e){var n;(n=this.dropdown.getDatumForSuggestion(e))&&this._select(n,{selectionMethod:"click"})},_onCursorMoved:function(t,e){var n=this.dropdown.getDatumForCursor(),i=this.dropdown.getCurrentCursor().attr("id");this.input.setActiveDescendant(i),n&&(e&&this.input.setInputValue(n.value,!0),this.eventBus.trigger("cursorchanged",n.raw,n.datasetName))},_onCursorRemoved:function(){this.input.resetInputValue(),this._updateHint(),this.eventBus.trigger("cursorremoved")},_onDatasetRendered:function(){this._updateHint(),this.eventBus.trigger("updated")},_onOpened:function(){this._updateHint(),this.input.expand(),this.eventBus.trigger("opened")},_onEmpty:function(){this.eventBus.trigger("empty")},_onRedrawn:function(){this.$node.css("top","0px"),this.$node.css("left","0px");var t=this.$input[0].getBoundingClientRect();this.autoWidth&&this.$node.css("width",t.width+"px");var e=this.$node[0].getBoundingClientRect(),n=t.bottom-e.top;this.$node.css("top",n+"px");var i=t.left-e.left;this.$node.css("left",i+"px"),this.eventBus.trigger("redrawn")},_onShown:function(){this.eventBus.trigger("shown"),this.autoselect&&this.dropdown.cursorTopSuggestion()},_onClosed:function(){this.input.clearHint(),this.input.removeActiveDescendant(),this.input.collapse(),this.eventBus.trigger("closed")},_onFocused:function(){if(this.isActivated=!0,this.openOnFocus){var t=this.input.getQuery();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty(),this.dropdown.open()}},_onBlurred:function(){var t,e;t=this.dropdown.getDatumForCursor(),e=this.dropdown.getDatumForTopSuggestion();var n={selectionMethod:"blur"};this.debug||(this.autoselectOnBlur&&t?this._select(t,n):this.autoselectOnBlur&&e?this._select(e,n):(this.isActivated=!1,this.dropdown.empty(),this.dropdown.close()))},_onEnterKeyed:function(t,e){var n,i;n=this.dropdown.getDatumForCursor(),i=this.dropdown.getDatumForTopSuggestion();var s={selectionMethod:"enterKey"};n?(this._select(n,s),e.preventDefault()):this.autoselect&&i&&(this._select(i,s),e.preventDefault())},_onTabKeyed:function(t,e){if(this.tabAutocomplete){var n;(n=this.dropdown.getDatumForCursor())?(this._select(n,{selectionMethod:"tabKey"}),e.preventDefault()):this._autocomplete(!0)}else this.dropdown.close()},_onEscKeyed:function(){this.dropdown.close(),this.input.resetInputValue()},_onUpKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorUp(),this.dropdown.open()},_onDownKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorDown(),this.dropdown.open()},_onLeftKeyed:function(){"rtl"===this.dir&&this._autocomplete()},_onRightKeyed:function(){"ltr"===this.dir&&this._autocomplete()},_onQueryChanged:function(t,e){this.input.clearHintIfInvalid(),e.length>=this.minLength?this.dropdown.update(e):this.dropdown.empty(),this.dropdown.open(),this._setLanguageDirection()},_onWhitespaceChanged:function(){this._updateHint(),this.dropdown.open()},_setLanguageDirection:function(){var t=this.input.getLanguageDirection();this.dir!==t&&(this.dir=t,this.$node.css("direction",t),this.dropdown.setLanguageDirection(t))},_updateHint:function(){var t,e,n,i,r;(t=this.dropdown.getDatumForTopSuggestion())&&this.dropdown.isVisible()&&!this.input.hasOverflow()?(e=this.input.getInputValue(),n=a.normalizeQuery(e),i=s.escapeRegExChars(n),(r=new RegExp("^(?:"+i+")(.+$)","i").exec(t.value))?this.input.setHint(e+r[1]):this.input.clearHint()):this.input.clearHint()},_autocomplete:function(t){var e,n,i,s;e=this.input.getHint(),n=this.input.getQuery(),i=t||this.input.isCursorAtEnd(),e&&n!==e&&i&&((s=this.dropdown.getDatumForTopSuggestion())&&this.input.setInputValue(s.value),this.eventBus.trigger("autocompleted",s.raw,s.datasetName))},_select:function(t,e){void 0!==t.value&&this.input.setQuery(t.value),this.clearOnSelected?this.setVal(""):this.input.setInputValue(t.value,!0),this._setLanguageDirection(),!1===this.eventBus.trigger("selected",t.raw,t.datasetName,e).isDefaultPrevented()&&(this.dropdown.close(),s.defer(s.bind(this.dropdown.empty,this.dropdown)))},open:function(){if(!this.isActivated){var t=this.input.getInputValue();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty()}this.dropdown.open()},close:function(){this.dropdown.close()},setVal:function(t){t=s.toStr(t),this.isActivated?this.input.setInputValue(t):(this.input.setQuery(t),this.input.setInputValue(t,!0)),this._setLanguageDirection()},getVal:function(){return this.input.getQuery()},destroy:function(){this.input.destroy(),this.dropdown.destroy(),function(t,e){var n=t.find(s.className(e.prefix,e.input));s.each(n.data(i),(function(t,e){void 0===t?n.removeAttr(e):n.attr(e,t)})),n.detach().removeClass(s.className(e.prefix,e.input,!0)).insertAfter(t),n.removeData&&n.removeData(i);t.remove()}(this.$node,this.cssClasses),this.$node=null},getWrapper:function(){return this.dropdown.$container[0]}}),h.Dropdown=u,h.Input=a,h.sources=n(36353),t.exports=h},61348:t=>{"use strict";t.exports={element:null}},19715:t=>{"use strict";t.exports=function(t){var e=t.match(/Algolia for JavaScript \((\d+\.)(\d+\.)(\d+)\)/)||t.match(/Algolia for vanilla JavaScript (\d+\.)(\d+\.)(\d+)/);if(e)return[e[1],e[2],e[3]]}},46573:(t,e,n)=>{"use strict";var i,s=n(68937),r=n(61348);function o(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}t.exports={isArray:null,isFunction:null,isObject:null,bind:null,each:null,map:null,mixin:null,isMsie:function(t){if(void 0===t&&(t=navigator.userAgent),/(msie|trident)/i.test(t)){var e=t.match(/(msie |rv:)(\d+(.\d+)?)/i);if(e)return e[2]}return!1},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isNumber:function(t){return"number"==typeof t},toStr:function(t){return null==t?"":t+""},cloneDeep:function(t){var e=this.mixin({},t),n=this;return this.each(e,(function(t,i){t&&(n.isArray(t)?e[i]=[].concat(t):n.isObject(t)&&(e[i]=n.cloneDeep(t)))})),e},error:function(t){throw new Error(t)},every:function(t,e){var n=!0;return t?(this.each(t,(function(i,s){n&&(n=e.call(null,i,s,t)&&n)})),!!n):n},any:function(t,e){var n=!1;return t?(this.each(t,(function(i,s){if(e.call(null,i,s,t))return n=!0,!1})),n):n},getUniqueId:(i=0,function(){return i++}),templatify:function(t){if(this.isFunction(t))return t;var e=r.element(t);return"SCRIPT"===e.prop("tagName")?function(){return e.text()}:function(){return String(t)}},defer:function(t){setTimeout(t,0)},noop:function(){},formatPrefix:function(t,e){return e?"":t+"-"},className:function(t,e,n){return n?t+e:"."+s(t+e,{isIdentifier:!0})},escapeHighlightedString:function(t,e,n){e=e||"";var i=document.createElement("div");i.appendChild(document.createTextNode(e)),n=n||"";var s=document.createElement("div");s.appendChild(document.createTextNode(n));var r=document.createElement("div");return r.appendChild(document.createTextNode(t)),r.innerHTML.replace(RegExp(o(i.innerHTML),"g"),e).replace(RegExp(o(s.innerHTML),"g"),n)}}},16903:(t,e,n)=>{"use strict";var i=n(46573),s=n(92281),r=n(19715);var o,a,u=(o=[],a=window.Promise.resolve(),function(t,e){return function(n,s){(function(t,e){return window.Promise.resolve().then((function(){return o.length&&(a=t.search(o),o=[]),a})).then((function(t){if(t)return t.results[e]}))})(t.as,o.push({indexName:t.indexName,query:n,params:e})-1).then((function(t){t&&s(t.hits,t)})).catch((function(t){i.error(t.message)}))}});t.exports=function(t,e){var n=r(t.as._ua);if(n&&n[0]>=3&&n[1]>20){var i="autocomplete.js "+s;-1===t.as._ua.indexOf(i)&&(t.as._ua+="; "+i)}return u(t,e)}},36353:(t,e,n)=>{"use strict";t.exports={hits:n(16903),popularIn:n(46839)}},46839:(t,e,n)=>{"use strict";var i=n(46573),s=n(92281),r=n(19715);t.exports=function(t,e,n,o){var a=r(t.as._ua);if(a&&a[0]>=3&&a[1]>20&&((e=e||{}).additionalUA="autocomplete.js "+s),!n.source)return i.error("Missing 'source' key");var u=i.isFunction(n.source)?n.source:function(t){return t[n.source]};if(!n.index)return i.error("Missing 'index' key");var c=n.index;return o=o||{},function(a,l){t.search(a,e,(function(t,a){if(t)i.error(t.message);else{if(a.hits.length>0){var h=a.hits[0],p=i.mixin({hitsPerPage:0},n);delete p.source,delete p.index;var f=r(c.as._ua);return f&&f[0]>=3&&f[1]>20&&(e.additionalUA="autocomplete.js "+s),void c.search(u(h),p,(function(t,e){if(t)i.error(t.message);else{var n=[];if(o.includeAll){var s=o.allTitle||"All departments";n.push(i.mixin({facet:{value:s,count:e.nbHits}},i.cloneDeep(h)))}i.each(e.facets,(function(t,e){i.each(t,(function(t,s){n.push(i.mixin({facet:{facet:e,value:s,count:t}},i.cloneDeep(h)))}))}));for(var r=1;r{"use strict";var i=n(59539);n(61348).element=i;var s=n(46573);s.isArray=i.isArray,s.isFunction=i.isFunction,s.isObject=i.isPlainObject,s.bind=i.proxy,s.each=function(t,e){i.each(t,(function(t,n){return e(n,t)}))},s.map=i.map,s.mixin=i.extend,s.Event=i.Event;var r="aaAutocomplete",o=n(37360),a=n(52324);function u(t,e,n,u){n=s.isArray(n)?n:[].slice.call(arguments,2);var c=i(t).each((function(t,s){var c=i(s),l=new a({el:c}),h=u||new o({input:c,eventBus:l,dropdownMenuContainer:e.dropdownMenuContainer,hint:void 0===e.hint||!!e.hint,minLength:e.minLength,autoselect:e.autoselect,autoselectOnBlur:e.autoselectOnBlur,tabAutocomplete:e.tabAutocomplete,openOnFocus:e.openOnFocus,templates:e.templates,debug:e.debug,clearOnSelected:e.clearOnSelected,cssClasses:e.cssClasses,datasets:n,keyboardShortcuts:e.keyboardShortcuts,appendTo:e.appendTo,autoWidth:e.autoWidth,ariaLabel:e.ariaLabel||s.getAttribute("aria-label")});c.data(r,h)}));return c.autocomplete={},s.each(["open","close","getVal","setVal","destroy","getWrapper"],(function(t){c.autocomplete[t]=function(){var e,n=arguments;return c.each((function(s,o){var a=i(o).data(r);e=a[t].apply(a,n)})),e}})),c}u.sources=o.sources,u.escapeHighlightedString=s.escapeHighlightedString;var c="autocomplete"in window,l=window.autocomplete;u.noConflict=function(){return c?window.autocomplete=l:delete window.autocomplete,u},t.exports=u},92281:t=>{t.exports="0.38.1"},59539:t=>{var e;e=window,t.exports=function(t){var e,n,i=function(){var e,n,i,s,r,o,a=[],u=a.concat,c=a.filter,l=a.slice,h=t.document,p={},f={},d={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},g=/^\s*<(\w+|!)[^>]*>/,m=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,y=/^(?:body|html)$/i,w=/([A-Z])/g,b=["val","css","html","text","data","width","height","offset"],C=["after","prepend","before","append"],x=h.createElement("table"),_=h.createElement("tr"),S={tr:h.createElement("tbody"),tbody:x,thead:x,tfoot:x,td:_,th:_,"*":h.createElement("div")},E=/complete|loaded|interactive/,A=/^[\w-]*$/,$={},T=$.toString,O={},D=h.createElement("div"),N={tabindex:"tabIndex",readonly:"readOnly",for:"htmlFor",class:"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},k=Array.isArray||function(t){return t instanceof Array};function I(t){return null==t?String(t):$[T.call(t)]||"object"}function P(t){return"function"==I(t)}function L(t){return null!=t&&t==t.window}function M(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function F(t){return"object"==I(t)}function R(t){return F(t)&&!L(t)&&Object.getPrototypeOf(t)==Object.prototype}function q(t){var e=!!t&&"length"in t&&t.length,n=i.type(t);return"function"!=n&&!L(t)&&("array"==n||0===e||"number"==typeof e&&e>0&&e-1 in t)}function V(t){return c.call(t,(function(t){return null!=t}))}function H(t){return t.length>0?i.fn.concat.apply([],t):t}function B(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function K(t){return t in f?f[t]:f[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function j(t,e){return"number"!=typeof e||d[B(t)]?e:e+"px"}function z(t){var e,n;return p[t]||(e=h.createElement(t),h.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),p[t]=n),p[t]}function U(t){return"children"in t?l.call(t.children):i.map(t.childNodes,(function(t){if(1==t.nodeType)return t}))}function Q(t,e){var n,i=t?t.length:0;for(n=0;n")),n===e&&(n=g.test(t)&&RegExp.$1),n in S||(n="*"),(a=S[n]).innerHTML=""+t,r=i.each(l.call(a.childNodes),(function(){a.removeChild(this)}))),R(s)&&(o=i(r),i.each(s,(function(t,e){b.indexOf(t)>-1?o[t](e):o.attr(t,e)}))),r},O.Z=function(t,e){return new Q(t,e)},O.isZ=function(t){return t instanceof O.Z},O.init=function(t,n){var s;if(!t)return O.Z();if("string"==typeof t)if("<"==(t=t.trim())[0]&&g.test(t))s=O.fragment(t,RegExp.$1,n),t=null;else{if(n!==e)return i(n).find(t);s=O.qsa(h,t)}else{if(P(t))return i(h).ready(t);if(O.isZ(t))return t;if(k(t))s=V(t);else if(F(t))s=[t],t=null;else if(g.test(t))s=O.fragment(t.trim(),RegExp.$1,n),t=null;else{if(n!==e)return i(n).find(t);s=O.qsa(h,t)}}return O.Z(s,t)},(i=function(t,e){return O.init(t,e)}).extend=function(t){var e,n=l.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach((function(n){W(t,n,e)})),t},O.qsa=function(t,e){var n,i="#"==e[0],s=!i&&"."==e[0],r=i||s?e.slice(1):e,o=A.test(r);return t.getElementById&&o&&i?(n=t.getElementById(r))?[n]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:l.call(o&&!i&&t.getElementsByClassName?s?t.getElementsByClassName(r):t.getElementsByTagName(e):t.querySelectorAll(e))},i.contains=h.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},i.type=I,i.isFunction=P,i.isWindow=L,i.isArray=k,i.isPlainObject=R,i.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},i.isNumeric=function(t){var e=Number(t),n=typeof t;return null!=t&&"boolean"!=n&&("string"!=n||t.length)&&!isNaN(e)&&isFinite(e)||!1},i.inArray=function(t,e,n){return a.indexOf.call(e,t,n)},i.camelCase=r,i.trim=function(t){return null==t?"":String.prototype.trim.call(t)},i.uuid=0,i.support={},i.expr={},i.noop=function(){},i.map=function(t,e){var n,i,s,r=[];if(q(t))for(i=0;i=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each((function(){null!=this.parentNode&&this.parentNode.removeChild(this)}))},each:function(t){return a.every.call(this,(function(e,n){return!1!==t.call(e,n,e)})),this},filter:function(t){return P(t)?this.not(this.not(t)):i(c.call(this,(function(e){return O.matches(e,t)})))},add:function(t,e){return i(o(this.concat(i(t,e))))},is:function(t){return this.length>0&&O.matches(this[0],t)},not:function(t){var n=[];if(P(t)&&t.call!==e)this.each((function(e){t.call(this,e)||n.push(this)}));else{var s="string"==typeof t?this.filter(t):q(t)&&P(t.item)?l.call(t):i(t);this.forEach((function(t){s.indexOf(t)<0&&n.push(t)}))}return i(n)},has:function(t){return this.filter((function(){return F(t)?i.contains(this,t):i(this).find(t).size()}))},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!F(t)?t:i(t)},last:function(){var t=this[this.length-1];return t&&!F(t)?t:i(t)},find:function(t){var e=this;return t?"object"==typeof t?i(t).filter((function(){var t=this;return a.some.call(e,(function(e){return i.contains(e,t)}))})):1==this.length?i(O.qsa(this[0],t)):this.map((function(){return O.qsa(this,t)})):i()},closest:function(t,e){var n=[],s="object"==typeof t&&i(t);return this.each((function(i,r){for(;r&&!(s?s.indexOf(r)>=0:O.matches(r,t));)r=r!==e&&!M(r)&&r.parentNode;r&&n.indexOf(r)<0&&n.push(r)})),i(n)},parents:function(t){for(var e=[],n=this;n.length>0;)n=i.map(n,(function(t){if((t=t.parentNode)&&!M(t)&&e.indexOf(t)<0)return e.push(t),t}));return Z(e,t)},parent:function(t){return Z(o(this.pluck("parentNode")),t)},children:function(t){return Z(this.map((function(){return U(this)})),t)},contents:function(){return this.map((function(){return this.contentDocument||l.call(this.childNodes)}))},siblings:function(t){return Z(this.map((function(t,e){return c.call(U(e.parentNode),(function(t){return t!==e}))})),t)},empty:function(){return this.each((function(){this.innerHTML=""}))},pluck:function(t){return i.map(this,(function(e){return e[t]}))},show:function(){return this.each((function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=z(this.nodeName))}))},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=P(t);if(this[0]&&!e)var n=i(t).get(0),s=n.parentNode||this.length>1;return this.each((function(r){i(this).wrapAll(e?t.call(this,r):s?n.cloneNode(!0):n)}))},wrapAll:function(t){if(this[0]){var e;for(i(this[0]).before(t=i(t));(e=t.children()).length;)t=e.first();i(t).append(this)}return this},wrapInner:function(t){var e=P(t);return this.each((function(n){var s=i(this),r=s.contents(),o=e?t.call(this,n):t;r.length?r.wrapAll(o):s.append(o)}))},unwrap:function(){return this.parent().each((function(){i(this).replaceWith(i(this).children())})),this},clone:function(){return this.map((function(){return this.cloneNode(!0)}))},hide:function(){return this.css("display","none")},toggle:function(t){return this.each((function(){var n=i(this);(t===e?"none"==n.css("display"):t)?n.show():n.hide()}))},prev:function(t){return i(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return i(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each((function(e){var n=this.innerHTML;i(this).empty().append(X(this,t,e,n))})):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each((function(e){var n=X(this,t,e,this.textContent);this.textContent=null==n?"":""+n})):0 in this?this.pluck("textContent").join(""):null},attr:function(t,i){var s;return"string"!=typeof t||1 in arguments?this.each((function(e){if(1===this.nodeType)if(F(t))for(n in t)G(this,n,t[n]);else G(this,t,X(this,i,e,this.getAttribute(t)))})):0 in this&&1==this[0].nodeType&&null!=(s=this[0].getAttribute(t))?s:e},removeAttr:function(t){return this.each((function(){1===this.nodeType&&t.split(" ").forEach((function(t){G(this,t)}),this)}))},prop:function(t,e){return t=N[t]||t,1 in arguments?this.each((function(n){this[t]=X(this,e,n,this[t])})):this[0]&&this[0][t]},removeProp:function(t){return t=N[t]||t,this.each((function(){delete this[t]}))},data:function(t,n){var i="data-"+t.replace(w,"-$1").toLowerCase(),s=1 in arguments?this.attr(i,n):this.attr(i);return null!==s?Y(s):e},val:function(t){return 0 in arguments?(null==t&&(t=""),this.each((function(e){this.value=X(this,t,e,this.value)}))):this[0]&&(this[0].multiple?i(this[0]).find("option").filter((function(){return this.selected})).pluck("value"):this[0].value)},offset:function(e){if(e)return this.each((function(t){var n=i(this),s=X(this,e,t,n.offset()),r=n.offsetParent().offset(),o={top:s.top-r.top,left:s.left-r.left};"static"==n.css("position")&&(o.position="relative"),n.css(o)}));if(!this.length)return null;if(h.documentElement!==this[0]&&!i.contains(h.documentElement,this[0]))return{top:0,left:0};var n=this[0].getBoundingClientRect();return{left:n.left+t.pageXOffset,top:n.top+t.pageYOffset,width:Math.round(n.width),height:Math.round(n.height)}},css:function(t,e){if(arguments.length<2){var s=this[0];if("string"==typeof t){if(!s)return;return s.style[r(t)]||getComputedStyle(s,"").getPropertyValue(t)}if(k(t)){if(!s)return;var o={},a=getComputedStyle(s,"");return i.each(t,(function(t,e){o[e]=s.style[r(e)]||a.getPropertyValue(e)})),o}}var u="";if("string"==I(t))e||0===e?u=B(t)+":"+j(t,e):this.each((function(){this.style.removeProperty(B(t))}));else for(n in t)t[n]||0===t[n]?u+=B(n)+":"+j(n,t[n])+";":this.each((function(){this.style.removeProperty(B(n))}));return this.each((function(){this.style.cssText+=";"+u}))},index:function(t){return t?this.indexOf(i(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return!!t&&a.some.call(this,(function(t){return this.test(J(t))}),K(t))},addClass:function(t){return t?this.each((function(e){if("className"in this){s=[];var n=J(this);X(this,t,e,n).split(/\s+/g).forEach((function(t){i(this).hasClass(t)||s.push(t)}),this),s.length&&J(this,n+(n?" ":"")+s.join(" "))}})):this},removeClass:function(t){return this.each((function(n){if("className"in this){if(t===e)return J(this,"");s=J(this),X(this,t,n,s).split(/\s+/g).forEach((function(t){s=s.replace(K(t)," ")})),J(this,s.trim())}}))},toggleClass:function(t,n){return t?this.each((function(s){var r=i(this);X(this,t,s,J(this)).split(/\s+/g).forEach((function(t){(n===e?!r.hasClass(t):n)?r.addClass(t):r.removeClass(t)}))})):this},scrollTop:function(t){if(this.length){var n="scrollTop"in this[0];return t===e?n?this[0].scrollTop:this[0].pageYOffset:this.each(n?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var n="scrollLeft"in this[0];return t===e?n?this[0].scrollLeft:this[0].pageXOffset:this.each(n?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),n=this.offset(),s=y.test(e[0].nodeName)?{top:0,left:0}:e.offset();return n.top-=parseFloat(i(t).css("margin-top"))||0,n.left-=parseFloat(i(t).css("margin-left"))||0,s.top+=parseFloat(i(e[0]).css("border-top-width"))||0,s.left+=parseFloat(i(e[0]).css("border-left-width"))||0,{top:n.top-s.top,left:n.left-s.left}}},offsetParent:function(){return this.map((function(){for(var t=this.offsetParent||h.body;t&&!y.test(t.nodeName)&&"static"==i(t).css("position");)t=t.offsetParent;return t}))}},i.fn.detach=i.fn.remove,["width","height"].forEach((function(t){var n=t.replace(/./,(function(t){return t[0].toUpperCase()}));i.fn[t]=function(s){var r,o=this[0];return s===e?L(o)?o["inner"+n]:M(o)?o.documentElement["scroll"+n]:(r=this.offset())&&r[t]:this.each((function(e){(o=i(this)).css(t,X(this,s,e,o[t]()))}))}})),C.forEach((function(n,s){var r=s%2;i.fn[n]=function(){var n,o,a=i.map(arguments,(function(t){var s=[];return"array"==(n=I(t))?(t.forEach((function(t){return t.nodeType!==e?s.push(t):i.zepto.isZ(t)?s=s.concat(t.get()):void(s=s.concat(O.fragment(t)))})),s):"object"==n||null==t?t:O.fragment(t)})),u=this.length>1;return a.length<1?this:this.each((function(e,n){o=r?n:n.parentNode,n=0==s?n.nextSibling:1==s?n.firstChild:2==s?n:null;var c=i.contains(h.documentElement,o);a.forEach((function(e){if(u)e=e.cloneNode(!0);else if(!o)return i(e).remove();o.insertBefore(e,n),c&&tt(e,(function(e){if(!(null==e.nodeName||"SCRIPT"!==e.nodeName.toUpperCase()||e.type&&"text/javascript"!==e.type||e.src)){var n=e.ownerDocument?e.ownerDocument.defaultView:t;n.eval.call(n,e.innerHTML)}}))}))}))},i.fn[r?n+"To":"insert"+(s?"Before":"After")]=function(t){return i(t)[n](this),this}})),O.Z.prototype=Q.prototype=i.fn,O.uniq=o,O.deserializeValue=Y,i.zepto=O,i}();return function(e){var n,i=1,s=Array.prototype.slice,r=e.isFunction,o=function(t){return"string"==typeof t},a={},u={},c="onfocusin"in t,l={focus:"focusin",blur:"focusout"},h={mouseenter:"mouseover",mouseleave:"mouseout"};function p(t){return t._zid||(t._zid=i++)}function f(t,e,n,i){if((e=d(e)).ns)var s=g(e.ns);return(a[p(t)]||[]).filter((function(t){return t&&(!e.e||t.e==e.e)&&(!e.ns||s.test(t.ns))&&(!n||p(t.fn)===p(n))&&(!i||t.sel==i)}))}function d(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function g(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function m(t,e){return t.del&&!c&&t.e in l||!!e}function v(t){return h[t]||c&&l[t]||t}function y(t,i,s,r,o,u,c){var l=p(t),f=a[l]||(a[l]=[]);i.split(/\s/).forEach((function(i){if("ready"==i)return e(document).ready(s);var a=d(i);a.fn=s,a.sel=o,a.e in h&&(s=function(t){var n=t.relatedTarget;if(!n||n!==this&&!e.contains(this,n))return a.fn.apply(this,arguments)}),a.del=u;var l=u||s;a.proxy=function(e){if(!(e=S(e)).isImmediatePropagationStopped()){try{var i=Object.getOwnPropertyDescriptor(e,"data");i&&!i.writable||(e.data=r)}catch(e){}var s=l.apply(t,e._args==n?[e]:[e].concat(e._args));return!1===s&&(e.preventDefault(),e.stopPropagation()),s}},a.i=f.length,f.push(a),"addEventListener"in t&&t.addEventListener(v(a.e),a.proxy,m(a,c))}))}function w(t,e,n,i,s){var r=p(t);(e||"").split(/\s/).forEach((function(e){f(t,e,n,i).forEach((function(e){delete a[r][e.i],"removeEventListener"in t&&t.removeEventListener(v(e.e),e.proxy,m(e,s))}))}))}u.click=u.mousedown=u.mouseup=u.mousemove="MouseEvents",e.event={add:y,remove:w},e.proxy=function(t,n){var i=2 in arguments&&s.call(arguments,2);if(r(t)){var a=function(){return t.apply(n,i?i.concat(s.call(arguments)):arguments)};return a._zid=p(t),a}if(o(n))return i?(i.unshift(t[n],t),e.proxy.apply(null,i)):e.proxy(t[n],t);throw new TypeError("expected function")},e.fn.bind=function(t,e,n){return this.on(t,e,n)},e.fn.unbind=function(t,e){return this.off(t,e)},e.fn.one=function(t,e,n,i){return this.on(t,e,n,i,1)};var b=function(){return!0},C=function(){return!1},x=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,_={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};function S(t,i){if(i||!t.isDefaultPrevented){i||(i=t),e.each(_,(function(e,n){var s=i[e];t[e]=function(){return this[n]=b,s&&s.apply(i,arguments)},t[n]=C}));try{t.timeStamp||(t.timeStamp=Date.now())}catch(s){}(i.defaultPrevented!==n?i.defaultPrevented:"returnValue"in i?!1===i.returnValue:i.getPreventDefault&&i.getPreventDefault())&&(t.isDefaultPrevented=b)}return t}function E(t){var e,i={originalEvent:t};for(e in t)x.test(e)||t[e]===n||(i[e]=t[e]);return S(i,t)}e.fn.delegate=function(t,e,n){return this.on(e,t,n)},e.fn.undelegate=function(t,e,n){return this.off(e,t,n)},e.fn.live=function(t,n){return e(document.body).delegate(this.selector,t,n),this},e.fn.die=function(t,n){return e(document.body).undelegate(this.selector,t,n),this},e.fn.on=function(t,i,a,u,c){var l,h,p=this;return t&&!o(t)?(e.each(t,(function(t,e){p.on(t,i,a,e,c)})),p):(o(i)||r(u)||!1===u||(u=a,a=i,i=n),u!==n&&!1!==a||(u=a,a=n),!1===u&&(u=C),p.each((function(n,r){c&&(l=function(t){return w(r,t.type,u),u.apply(this,arguments)}),i&&(h=function(t){var n,o=e(t.target).closest(i,r).get(0);if(o&&o!==r)return n=e.extend(E(t),{currentTarget:o,liveFired:r}),(l||u).apply(o,[n].concat(s.call(arguments,1)))}),y(r,t,u,a,i,h||l)})))},e.fn.off=function(t,i,s){var a=this;return t&&!o(t)?(e.each(t,(function(t,e){a.off(t,i,e)})),a):(o(i)||r(s)||!1===s||(s=i,i=n),!1===s&&(s=C),a.each((function(){w(this,t,s,i)})))},e.fn.trigger=function(t,n){return(t=o(t)||e.isPlainObject(t)?e.Event(t):S(t))._args=n,this.each((function(){t.type in l&&"function"==typeof this[t.type]?this[t.type]():"dispatchEvent"in this?this.dispatchEvent(t):e(this).triggerHandler(t,n)}))},e.fn.triggerHandler=function(t,n){var i,s;return this.each((function(r,a){(i=E(o(t)?e.Event(t):t))._args=n,i.target=a,e.each(f(a,t.type||t),(function(t,e){if(s=e.proxy(i),i.isImmediatePropagationStopped())return!1}))})),s},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach((function(t){e.fn[t]=function(e){return 0 in arguments?this.bind(t,e):this.trigger(t)}})),e.Event=function(t,e){o(t)||(t=(e=t).type);var n=document.createEvent(u[t]||"Events"),i=!0;if(e)for(var s in e)"bubbles"==s?i=!!e[s]:n[s]=e[s];return n.initEvent(t,i,!0),S(n)}}(i),n=[],i.fn.remove=function(){return this.each((function(){this.parentNode&&("IMG"===this.tagName&&(n.push(this),this.src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=",e&&clearTimeout(e),e=setTimeout((function(){n=[]}),6e4)),this.parentNode.removeChild(this))}))},function(t){var e={},n=t.fn.data,i=t.camelCase,s=t.expando="Zepto"+ +new Date,r=[];function o(r,o){var u=r[s],c=u&&e[u];if(void 0===o)return c||a(r);if(c){if(o in c)return c[o];var l=i(o);if(l in c)return c[l]}return n.call(t(r),o)}function a(n,r,o){var a=n[s]||(n[s]=++t.uuid),c=e[a]||(e[a]=u(n));return void 0!==r&&(c[i(r)]=o),c}function u(e){var n={};return t.each(e.attributes||r,(function(e,s){0==s.name.indexOf("data-")&&(n[i(s.name.replace("data-",""))]=t.zepto.deserializeValue(s.value))})),n}t.fn.data=function(e,n){return void 0===n?t.isPlainObject(e)?this.each((function(n,i){t.each(e,(function(t,e){a(i,t,e)}))})):0 in this?o(this[0],e):void 0:this.each((function(){a(this,e,n)}))},t.data=function(e,n,i){return t(e).data(n,i)},t.hasData=function(n){var i=n[s],r=i&&e[i];return!!r&&!t.isEmptyObject(r)},t.fn.removeData=function(n){return"string"==typeof n&&(n=n.split(/\s+/)),this.each((function(){var r=this[s],o=r&&e[r];o&&t.each(n||o,(function(t){delete o[n?i(this):t]}))}))},["remove","empty"].forEach((function(e){var n=t.fn[e];t.fn[e]=function(){var t=this.find("*");return"remove"===e&&(t=t.add(this)),t.removeData(),n.call(this)}}))}(i),i}(e)},68937:t=>{"use strict";var e={}.hasOwnProperty,n=/[ -,\.\/:-@\[-\^`\{-~]/,i=/[ -,\.\/:-@\[\]\^`\{-~]/,s=/(^|\\+)?(\\[A-F0-9]{1,6})\x20(?![a-fA-F0-9\x20])/g,r=function t(r,o){"single"!=(o=function(t,n){if(!t)return n;var i={};for(var s in n)i[s]=e.call(t,s)?t[s]:n[s];return i}(o,t.options)).quotes&&"double"!=o.quotes&&(o.quotes="single");for(var a="double"==o.quotes?'"':"'",u=o.isIdentifier,c=r.charAt(0),l="",h=0,p=r.length;h126){if(d>=55296&&d<=56319&&h{"use strict";var i,s,r,o=[n(45741),n(91856),n(41015),n(16486),n(45723),n(26345)],a=-1,u=[],c=!1;function l(){i&&s&&(i=!1,s.length?u=s.concat(u):a=-1,u.length&&h())}function h(){if(!i){c=!1,i=!0;for(var t=u.length,e=setTimeout(l);t;){for(s=u,u=[];s&&++a1)for(var n=1;n{"use strict";e.test=function(){return!n.g.setImmediate&&void 0!==n.g.MessageChannel},e.install=function(t){var e=new n.g.MessageChannel;return e.port1.onmessage=t,function(){e.port2.postMessage(0)}}},41015:(t,e,n)=>{"use strict";var i=n.g.MutationObserver||n.g.WebKitMutationObserver;e.test=function(){return i},e.install=function(t){var e=0,s=new i(t),r=n.g.document.createTextNode("");return s.observe(r,{characterData:!0}),function(){r.data=e=++e%2}}},91856:(t,e,n)=>{"use strict";e.test=function(){return"function"==typeof n.g.queueMicrotask},e.install=function(t){return function(){n.g.queueMicrotask(t)}}},45723:(t,e,n)=>{"use strict";e.test=function(){return"document"in n.g&&"onreadystatechange"in n.g.document.createElement("script")},e.install=function(t){return function(){var e=n.g.document.createElement("script");return e.onreadystatechange=function(){t(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},n.g.document.documentElement.appendChild(e),t}}},26345:(t,e)=>{"use strict";e.test=function(){return!0},e.install=function(t){return function(){setTimeout(t,0)}}}}]); \ No newline at end of file diff --git a/assets/js/489.5e628191.js.LICENSE.txt b/assets/js/489.5e628191.js.LICENSE.txt new file mode 100644 index 0000000000..4f7ccd8a76 --- /dev/null +++ b/assets/js/489.5e628191.js.LICENSE.txt @@ -0,0 +1 @@ +/*! https://mths.be/cssesc v3.0.0 by @mathias */ diff --git a/assets/js/4943.7797e509.js b/assets/js/4943.7797e509.js new file mode 100644 index 0000000000..64f9430a92 --- /dev/null +++ b/assets/js/4943.7797e509.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4943],{74943:(t,e,r)=>{r.d(e,{diagram:()=>z});var i=r(99702),a=r(26312),n=(r(74353),r(16750),r(42838),function(){var t=function(t,e,r,i){for(r=r||{},i=t.length;i--;r[t[i]]=e);return r},e=[1,3],r=[1,6],i=[1,4],a=[1,5],n=[2,5],c=[1,12],s=[5,7,13,19,21,23,24,26,28,31,37,40,47],o=[7,13,19,21,23,24,26,28,31,37,40],l=[7,12,13,19,21,23,24,26,28,31,37,40],h=[7,13,47],m=[1,42],y=[1,41],u=[7,13,29,32,35,38,47],p=[1,55],g=[1,56],b=[1,57],d=[7,13,32,35,42,47],f={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,GG:5,document:6,EOF:7,":":8,DIR:9,options:10,body:11,OPT:12,NL:13,line:14,statement:15,commitStatement:16,mergeStatement:17,cherryPickStatement:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,section:24,branchStatement:25,CHECKOUT:26,ref:27,BRANCH:28,ORDER:29,NUM:30,CHERRY_PICK:31,COMMIT_ID:32,STR:33,PARENT_COMMIT:34,COMMIT_TAG:35,EMPTYSTR:36,MERGE:37,COMMIT_TYPE:38,commitType:39,COMMIT:40,commit_arg:41,COMMIT_MSG:42,NORMAL:43,REVERSE:44,HIGHLIGHT:45,ID:46,";":47,$accept:0,$end:1},terminals_:{2:"error",5:"GG",7:"EOF",8:":",9:"DIR",12:"OPT",13:"NL",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"section",26:"CHECKOUT",28:"BRANCH",29:"ORDER",30:"NUM",31:"CHERRY_PICK",32:"COMMIT_ID",33:"STR",34:"PARENT_COMMIT",35:"COMMIT_TAG",36:"EMPTYSTR",37:"MERGE",38:"COMMIT_TYPE",40:"COMMIT",42:"COMMIT_MSG",43:"NORMAL",44:"REVERSE",45:"HIGHLIGHT",46:"ID",47:";"},productions_:[0,[3,2],[3,3],[3,4],[3,5],[6,0],[6,2],[10,2],[10,1],[11,0],[11,2],[14,2],[14,1],[15,1],[15,1],[15,1],[15,2],[15,2],[15,1],[15,1],[15,1],[15,2],[25,2],[25,4],[18,3],[18,5],[18,5],[18,7],[18,7],[18,5],[18,5],[18,5],[18,7],[18,7],[18,7],[18,7],[17,2],[17,4],[17,4],[17,4],[17,6],[17,6],[17,6],[17,6],[17,6],[17,6],[17,8],[17,8],[17,8],[17,8],[17,8],[17,8],[16,2],[16,3],[16,3],[16,5],[16,5],[16,3],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,3],[16,5],[16,5],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[41,0],[41,1],[39,1],[39,1],[39,1],[27,1],[27,1],[4,1],[4,1],[4,1]],performAction:function(t,e,r,i,a,n,c){var s=n.length-1;switch(a){case 2:return n[s];case 3:return n[s-1];case 4:return i.setDirection(n[s-3]),n[s-1];case 6:i.setOptions(n[s-1]),this.$=n[s];break;case 7:n[s-1]+=n[s],this.$=n[s-1];break;case 9:this.$=[];break;case 10:n[s-1].push(n[s]),this.$=n[s-1];break;case 11:this.$=n[s-1];break;case 16:this.$=n[s].trim(),i.setAccTitle(this.$);break;case 17:case 18:this.$=n[s].trim(),i.setAccDescription(this.$);break;case 19:i.addSection(n[s].substr(8)),this.$=n[s].substr(8);break;case 21:i.checkout(n[s]);break;case 22:i.branch(n[s]);break;case 23:i.branch(n[s-2],n[s]);break;case 24:i.cherryPick(n[s],"",void 0);break;case 25:i.cherryPick(n[s-2],"",void 0,n[s]);break;case 26:i.cherryPick(n[s-2],"",n[s]);break;case 27:i.cherryPick(n[s-4],"",n[s],n[s-2]);break;case 28:i.cherryPick(n[s-4],"",n[s-2],n[s]);break;case 29:i.cherryPick(n[s],"",n[s-2]);break;case 30:i.cherryPick(n[s],"","");break;case 31:i.cherryPick(n[s-2],"","");break;case 32:i.cherryPick(n[s-4],"","",n[s-2]);break;case 33:i.cherryPick(n[s-4],"","",n[s]);break;case 34:i.cherryPick(n[s-2],"",n[s-4],n[s]);break;case 35:i.cherryPick(n[s-2],"","",n[s]);break;case 36:i.merge(n[s],"","","");break;case 37:i.merge(n[s-2],n[s],"","");break;case 38:i.merge(n[s-2],"",n[s],"");break;case 39:i.merge(n[s-2],"","",n[s]);break;case 40:i.merge(n[s-4],n[s],"",n[s-2]);break;case 41:i.merge(n[s-4],"",n[s],n[s-2]);break;case 42:i.merge(n[s-4],"",n[s-2],n[s]);break;case 43:i.merge(n[s-4],n[s-2],n[s],"");break;case 44:i.merge(n[s-4],n[s-2],"",n[s]);break;case 45:i.merge(n[s-4],n[s],n[s-2],"");break;case 46:i.merge(n[s-6],n[s-4],n[s-2],n[s]);break;case 47:i.merge(n[s-6],n[s],n[s-4],n[s-2]);break;case 48:i.merge(n[s-6],n[s-4],n[s],n[s-2]);break;case 49:i.merge(n[s-6],n[s-2],n[s-4],n[s]);break;case 50:i.merge(n[s-6],n[s],n[s-2],n[s-4]);break;case 51:i.merge(n[s-6],n[s-2],n[s],n[s-4]);break;case 52:i.commit(n[s]);break;case 53:i.commit("","",i.commitType.NORMAL,n[s]);break;case 54:i.commit("","",n[s],"");break;case 55:i.commit("","",n[s],n[s-2]);break;case 56:i.commit("","",n[s-2],n[s]);break;case 57:i.commit("",n[s],i.commitType.NORMAL,"");break;case 58:i.commit("",n[s-2],i.commitType.NORMAL,n[s]);break;case 59:i.commit("",n[s],i.commitType.NORMAL,n[s-2]);break;case 60:i.commit("",n[s-2],n[s],"");break;case 61:i.commit("",n[s],n[s-2],"");break;case 62:i.commit("",n[s-4],n[s-2],n[s]);break;case 63:i.commit("",n[s-4],n[s],n[s-2]);break;case 64:i.commit("",n[s-2],n[s-4],n[s]);break;case 65:i.commit("",n[s],n[s-4],n[s-2]);break;case 66:i.commit("",n[s],n[s-2],n[s-4]);break;case 67:i.commit("",n[s-2],n[s],n[s-4]);break;case 68:i.commit(n[s],"",i.commitType.NORMAL,"");break;case 69:i.commit(n[s],"",i.commitType.NORMAL,n[s-2]);break;case 70:i.commit(n[s-2],"",i.commitType.NORMAL,n[s]);break;case 71:i.commit(n[s-2],"",n[s],"");break;case 72:i.commit(n[s],"",n[s-2],"");break;case 73:i.commit(n[s],n[s-2],i.commitType.NORMAL,"");break;case 74:i.commit(n[s-2],n[s],i.commitType.NORMAL,"");break;case 75:i.commit(n[s-4],"",n[s-2],n[s]);break;case 76:i.commit(n[s-4],"",n[s],n[s-2]);break;case 77:i.commit(n[s-2],"",n[s-4],n[s]);break;case 78:i.commit(n[s],"",n[s-4],n[s-2]);break;case 79:i.commit(n[s],"",n[s-2],n[s-4]);break;case 80:i.commit(n[s-2],"",n[s],n[s-4]);break;case 81:i.commit(n[s-4],n[s],n[s-2],"");break;case 82:i.commit(n[s-4],n[s-2],n[s],"");break;case 83:i.commit(n[s-2],n[s],n[s-4],"");break;case 84:i.commit(n[s],n[s-2],n[s-4],"");break;case 85:i.commit(n[s],n[s-4],n[s-2],"");break;case 86:i.commit(n[s-2],n[s-4],n[s],"");break;case 87:i.commit(n[s-4],n[s],i.commitType.NORMAL,n[s-2]);break;case 88:i.commit(n[s-4],n[s-2],i.commitType.NORMAL,n[s]);break;case 89:i.commit(n[s-2],n[s],i.commitType.NORMAL,n[s-4]);break;case 90:i.commit(n[s],n[s-2],i.commitType.NORMAL,n[s-4]);break;case 91:i.commit(n[s],n[s-4],i.commitType.NORMAL,n[s-2]);break;case 92:i.commit(n[s-2],n[s-4],i.commitType.NORMAL,n[s]);break;case 93:i.commit(n[s-6],n[s-4],n[s-2],n[s]);break;case 94:i.commit(n[s-6],n[s-4],n[s],n[s-2]);break;case 95:i.commit(n[s-6],n[s-2],n[s-4],n[s]);break;case 96:i.commit(n[s-6],n[s],n[s-4],n[s-2]);break;case 97:i.commit(n[s-6],n[s-2],n[s],n[s-4]);break;case 98:i.commit(n[s-6],n[s],n[s-2],n[s-4]);break;case 99:i.commit(n[s-4],n[s-6],n[s-2],n[s]);break;case 100:i.commit(n[s-4],n[s-6],n[s],n[s-2]);break;case 101:i.commit(n[s-2],n[s-6],n[s-4],n[s]);break;case 102:i.commit(n[s],n[s-6],n[s-4],n[s-2]);break;case 103:i.commit(n[s-2],n[s-6],n[s],n[s-4]);break;case 104:i.commit(n[s],n[s-6],n[s-2],n[s-4]);break;case 105:i.commit(n[s],n[s-4],n[s-2],n[s-6]);break;case 106:i.commit(n[s-2],n[s-4],n[s],n[s-6]);break;case 107:i.commit(n[s],n[s-2],n[s-4],n[s-6]);break;case 108:i.commit(n[s-2],n[s],n[s-4],n[s-6]);break;case 109:i.commit(n[s-4],n[s-2],n[s],n[s-6]);break;case 110:i.commit(n[s-4],n[s],n[s-2],n[s-6]);break;case 111:i.commit(n[s-2],n[s-4],n[s-6],n[s]);break;case 112:i.commit(n[s],n[s-4],n[s-6],n[s-2]);break;case 113:i.commit(n[s-2],n[s],n[s-6],n[s-4]);break;case 114:i.commit(n[s],n[s-2],n[s-6],n[s-4]);break;case 115:i.commit(n[s-4],n[s-2],n[s-6],n[s]);break;case 116:i.commit(n[s-4],n[s],n[s-6],n[s-2]);break;case 117:this.$="";break;case 118:this.$=n[s];break;case 119:this.$=i.commitType.NORMAL;break;case 120:this.$=i.commitType.REVERSE;break;case 121:this.$=i.commitType.HIGHLIGHT}},table:[{3:1,4:2,5:e,7:r,13:i,47:a},{1:[3]},{3:7,4:2,5:e,7:r,13:i,47:a},{6:8,7:n,8:[1,9],9:[1,10],10:11,13:c},t(s,[2,124]),t(s,[2,125]),t(s,[2,126]),{1:[2,1]},{7:[1,13]},{6:14,7:n,10:11,13:c},{8:[1,15]},t(o,[2,9],{11:16,12:[1,17]}),t(l,[2,8]),{1:[2,2]},{7:[1,18]},{6:19,7:n,10:11,13:c},{7:[2,6],13:[1,22],14:20,15:21,16:23,17:24,18:25,19:[1,26],21:[1,27],23:[1,28],24:[1,29],25:30,26:[1,31],28:[1,35],31:[1,34],37:[1,33],40:[1,32]},t(l,[2,7]),{1:[2,3]},{7:[1,36]},t(o,[2,10]),{4:37,7:r,13:i,47:a},t(o,[2,12]),t(h,[2,13]),t(h,[2,14]),t(h,[2,15]),{20:[1,38]},{22:[1,39]},t(h,[2,18]),t(h,[2,19]),t(h,[2,20]),{27:40,33:m,46:y},t(h,[2,117],{41:43,32:[1,46],33:[1,48],35:[1,44],38:[1,45],42:[1,47]}),{27:49,33:m,46:y},{32:[1,50],35:[1,51]},{27:52,33:m,46:y},{1:[2,4]},t(o,[2,11]),t(h,[2,16]),t(h,[2,17]),t(h,[2,21]),t(u,[2,122]),t(u,[2,123]),t(h,[2,52]),{33:[1,53]},{39:54,43:p,44:g,45:b},{33:[1,58]},{33:[1,59]},t(h,[2,118]),t(h,[2,36],{32:[1,60],35:[1,62],38:[1,61]}),{33:[1,63]},{33:[1,64],36:[1,65]},t(h,[2,22],{29:[1,66]}),t(h,[2,53],{32:[1,68],38:[1,67],42:[1,69]}),t(h,[2,54],{32:[1,71],35:[1,70],42:[1,72]}),t(d,[2,119]),t(d,[2,120]),t(d,[2,121]),t(h,[2,57],{35:[1,73],38:[1,74],42:[1,75]}),t(h,[2,68],{32:[1,78],35:[1,76],38:[1,77]}),{33:[1,79]},{39:80,43:p,44:g,45:b},{33:[1,81]},t(h,[2,24],{34:[1,82],35:[1,83]}),{32:[1,84]},{32:[1,85]},{30:[1,86]},{39:87,43:p,44:g,45:b},{33:[1,88]},{33:[1,89]},{33:[1,90]},{33:[1,91]},{33:[1,92]},{33:[1,93]},{39:94,43:p,44:g,45:b},{33:[1,95]},{33:[1,96]},{39:97,43:p,44:g,45:b},{33:[1,98]},t(h,[2,37],{35:[1,100],38:[1,99]}),t(h,[2,38],{32:[1,102],35:[1,101]}),t(h,[2,39],{32:[1,103],38:[1,104]}),{33:[1,105]},{33:[1,106],36:[1,107]},{33:[1,108]},{33:[1,109]},t(h,[2,23]),t(h,[2,55],{32:[1,110],42:[1,111]}),t(h,[2,59],{38:[1,112],42:[1,113]}),t(h,[2,69],{32:[1,115],38:[1,114]}),t(h,[2,56],{32:[1,116],42:[1,117]}),t(h,[2,61],{35:[1,118],42:[1,119]}),t(h,[2,72],{32:[1,121],35:[1,120]}),t(h,[2,58],{38:[1,122],42:[1,123]}),t(h,[2,60],{35:[1,124],42:[1,125]}),t(h,[2,73],{35:[1,127],38:[1,126]}),t(h,[2,70],{32:[1,129],38:[1,128]}),t(h,[2,71],{32:[1,131],35:[1,130]}),t(h,[2,74],{35:[1,133],38:[1,132]}),{39:134,43:p,44:g,45:b},{33:[1,135]},{33:[1,136]},{33:[1,137]},{33:[1,138]},{39:139,43:p,44:g,45:b},t(h,[2,25],{35:[1,140]}),t(h,[2,26],{34:[1,141]}),t(h,[2,31],{34:[1,142]}),t(h,[2,29],{34:[1,143]}),t(h,[2,30],{34:[1,144]}),{33:[1,145]},{33:[1,146]},{39:147,43:p,44:g,45:b},{33:[1,148]},{39:149,43:p,44:g,45:b},{33:[1,150]},{33:[1,151]},{33:[1,152]},{33:[1,153]},{33:[1,154]},{33:[1,155]},{33:[1,156]},{39:157,43:p,44:g,45:b},{33:[1,158]},{33:[1,159]},{33:[1,160]},{39:161,43:p,44:g,45:b},{33:[1,162]},{39:163,43:p,44:g,45:b},{33:[1,164]},{33:[1,165]},{33:[1,166]},{39:167,43:p,44:g,45:b},{33:[1,168]},t(h,[2,43],{35:[1,169]}),t(h,[2,44],{38:[1,170]}),t(h,[2,42],{32:[1,171]}),t(h,[2,45],{35:[1,172]}),t(h,[2,40],{38:[1,173]}),t(h,[2,41],{32:[1,174]}),{33:[1,175],36:[1,176]},{33:[1,177]},{33:[1,178]},{33:[1,179]},{33:[1,180]},t(h,[2,66],{42:[1,181]}),t(h,[2,79],{32:[1,182]}),t(h,[2,67],{42:[1,183]}),t(h,[2,90],{38:[1,184]}),t(h,[2,80],{32:[1,185]}),t(h,[2,89],{38:[1,186]}),t(h,[2,65],{42:[1,187]}),t(h,[2,78],{32:[1,188]}),t(h,[2,64],{42:[1,189]}),t(h,[2,84],{35:[1,190]}),t(h,[2,77],{32:[1,191]}),t(h,[2,83],{35:[1,192]}),t(h,[2,63],{42:[1,193]}),t(h,[2,91],{38:[1,194]}),t(h,[2,62],{42:[1,195]}),t(h,[2,85],{35:[1,196]}),t(h,[2,86],{35:[1,197]}),t(h,[2,92],{38:[1,198]}),t(h,[2,76],{32:[1,199]}),t(h,[2,87],{38:[1,200]}),t(h,[2,75],{32:[1,201]}),t(h,[2,81],{35:[1,202]}),t(h,[2,82],{35:[1,203]}),t(h,[2,88],{38:[1,204]}),{33:[1,205]},{39:206,43:p,44:g,45:b},{33:[1,207]},{33:[1,208]},{39:209,43:p,44:g,45:b},{33:[1,210]},t(h,[2,27]),t(h,[2,32]),t(h,[2,28]),t(h,[2,33]),t(h,[2,34]),t(h,[2,35]),{33:[1,211]},{33:[1,212]},{33:[1,213]},{39:214,43:p,44:g,45:b},{33:[1,215]},{39:216,43:p,44:g,45:b},{33:[1,217]},{33:[1,218]},{33:[1,219]},{33:[1,220]},{33:[1,221]},{33:[1,222]},{33:[1,223]},{39:224,43:p,44:g,45:b},{33:[1,225]},{33:[1,226]},{33:[1,227]},{39:228,43:p,44:g,45:b},{33:[1,229]},{39:230,43:p,44:g,45:b},{33:[1,231]},{33:[1,232]},{33:[1,233]},{39:234,43:p,44:g,45:b},t(h,[2,46]),t(h,[2,48]),t(h,[2,47]),t(h,[2,49]),t(h,[2,51]),t(h,[2,50]),t(h,[2,107]),t(h,[2,108]),t(h,[2,105]),t(h,[2,106]),t(h,[2,110]),t(h,[2,109]),t(h,[2,114]),t(h,[2,113]),t(h,[2,112]),t(h,[2,111]),t(h,[2,116]),t(h,[2,115]),t(h,[2,104]),t(h,[2,103]),t(h,[2,102]),t(h,[2,101]),t(h,[2,99]),t(h,[2,100]),t(h,[2,98]),t(h,[2,97]),t(h,[2,96]),t(h,[2,95]),t(h,[2,93]),t(h,[2,94])],defaultActions:{7:[2,1],13:[2,2],18:[2,3],36:[2,4]},parseError:function(t,e){if(!e.recoverable){var r=new Error(t);throw r.hash=e,r}this.trace(t)},parse:function(t){var e=this,r=[0],i=[],a=[null],n=[],c=this.table,s="",o=0,l=0,h=n.slice.call(arguments,1),m=Object.create(this.lexer),y={yy:{}};for(var u in this.yy)Object.prototype.hasOwnProperty.call(this.yy,u)&&(y.yy[u]=this.yy[u]);m.setInput(t,y.yy),y.yy.lexer=m,y.yy.parser=this,void 0===m.yylloc&&(m.yylloc={});var p=m.yylloc;n.push(p);var g=m.options&&m.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,d,f,$,k,x,_,T,w,E={};;){if(d=r[r.length-1],this.defaultActions[d]?f=this.defaultActions[d]:(null==b&&(w=void 0,"number"!=typeof(w=i.pop()||m.lex()||1)&&(w instanceof Array&&(w=(i=w).pop()),w=e.symbols_[w]||w),b=w),f=c[d]&&c[d][b]),void 0===f||!f.length||!f[0]){var L="";for(k in T=[],c[d])this.terminals_[k]&&k>2&&T.push("'"+this.terminals_[k]+"'");L=m.showPosition?"Parse error on line "+(o+1)+":\n"+m.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==b?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(L,{text:m.match,token:this.terminals_[b]||b,line:m.yylineno,loc:p,expected:T})}if(f[0]instanceof Array&&f.length>1)throw new Error("Parse Error: multiple actions possible at state: "+d+", token: "+b);switch(f[0]){case 1:r.push(b),a.push(m.yytext),n.push(m.yylloc),r.push(f[1]),b=null,l=m.yyleng,s=m.yytext,o=m.yylineno,p=m.yylloc;break;case 2:if(x=this.productions_[f[1]][1],E.$=a[a.length-x],E._$={first_line:n[n.length-(x||1)].first_line,last_line:n[n.length-1].last_line,first_column:n[n.length-(x||1)].first_column,last_column:n[n.length-1].last_column},g&&(E._$.range=[n[n.length-(x||1)].range[0],n[n.length-1].range[1]]),void 0!==($=this.performAction.apply(E,[s,l,o,y.yy,f[1],a,n].concat(h))))return $;x&&(r=r.slice(0,-1*x*2),a=a.slice(0,-1*x),n=n.slice(0,-1*x)),r.push(this.productions_[f[1]][0]),a.push(E.$),n.push(E._$),_=c[r[r.length-2]][r[r.length-1]],r.push(_);break;case 3:return!0}}return!0}},$={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,r=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),r.length-1&&(this.yylineno-=r.length-1);var a=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:r?(r.length===i.length?this.yylloc.first_column:0)+i[i.length-r.length].length-r[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[a[0],a[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var r,i,a;if(this.options.backtrack_lexer&&(a={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(a.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],r=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var n in a)this[n]=a[n];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,r,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var a=this._currentRules(),n=0;ne[0].length)){if(e=r,i=n,this.options.backtrack_lexer){if(!1!==(t=this.test_match(r,a[n])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,a[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,r,i){switch(r){case 0:return this.begin("acc_title"),19;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),21;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:case 30:case 34:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 13;case 8:case 9:break;case 10:return 5;case 11:return 40;case 12:return 32;case 13:return 38;case 14:return 42;case 15:return 43;case 16:return 44;case 17:return 45;case 18:return 35;case 19:return 28;case 20:return 29;case 21:return 37;case 22:return 31;case 23:return 34;case 24:return 26;case 25:case 26:return 9;case 27:return 8;case 28:return"CARET";case 29:this.begin("options");break;case 31:return 12;case 32:return 36;case 33:this.begin("string");break;case 35:return 33;case 36:return 30;case 37:return 46;case 38:return 7}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit(?=\s|$))/i,/^(?:id:)/i,/^(?:type:)/i,/^(?:msg:)/i,/^(?:NORMAL\b)/i,/^(?:REVERSE\b)/i,/^(?:HIGHLIGHT\b)/i,/^(?:tag:)/i,/^(?:branch(?=\s|$))/i,/^(?:order:)/i,/^(?:merge(?=\s|$))/i,/^(?:cherry-pick(?=\s|$))/i,/^(?:parent:)/i,/^(?:checkout(?=\s|$))/i,/^(?:LR\b)/i,/^(?:TB\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:[ \r\n\t]+end\b)/i,/^(?:[\s\S]+(?=[ \r\n\t]+end))/i,/^(?:["]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[0-9]+(?=\s|$))/i,/^(?:\w([-\./\w]*[-\w])?)/i,/^(?:$)/i,/^(?:\s+)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},options:{rules:[30,31],inclusive:!1},string:{rules:[34,35],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,32,33,36,37,38,39],inclusive:!0}}};function k(){this.yy={}}return f.lexer=$,k.prototype=f,f.Parser=k,new k}());n.parser=n;const c=n;let s=(0,i.c)().gitGraph.mainBranchName,o=(0,i.c)().gitGraph.mainBranchOrder,l={},h=null,m={};m[s]={name:s,order:o};let y={};y[s]=h;let u=s,p="LR",g=0;function b(){return(0,i.y)({length:7})}let d={};const f=function(t){if(t=i.e.sanitizeText(t,(0,i.c)()),void 0===y[t]){let e=new Error('Trying to checkout branch which is not yet created. (Help try using "branch '+t+'")');throw e.hash={text:"checkout "+t,token:"checkout "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"branch '+t+'"']},e}{u=t;const e=y[u];h=l[e]}};function $(t,e,r){const i=t.indexOf(e);-1===i?t.push(r):t.splice(i,1,r)}function k(t){const e=t.reduce(((t,e)=>t.seq>e.seq?t:e),t[0]);let r="";t.forEach((function(t){r+=t===e?"\t*":"\t|"}));const a=[r,e.id,e.seq];for(let i in y)y[i]===e.id&&a.push(i);if(i.l.debug(a.join(" ")),e.parents&&2==e.parents.length){const r=l[e.parents[0]];$(t,e,r),t.push(l[e.parents[1]])}else{if(0==e.parents.length)return;{const r=l[e.parents];$(t,e,r)}}k(t=function(t,e){const r=Object.create(null);return t.reduce(((t,i)=>{const a=e(i);return r[a]||(r[a]=!0,t.push(i)),t}),[])}(t,(t=>t.id)))}const x=function(){const t=Object.keys(l).map((function(t){return l[t]}));return t.forEach((function(t){i.l.debug(t.id)})),t.sort(((t,e)=>t.seq-e.seq)),t},_={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},T={getConfig:()=>(0,i.c)().gitGraph,setDirection:function(t){p=t},setOptions:function(t){i.l.debug("options str",t),t=(t=t&&t.trim())||"{}";try{d=JSON.parse(t)}catch(e){i.l.error("error while parsing gitGraph options",e.message)}},getOptions:function(){return d},commit:function(t,e,r,a){i.l.debug("Entering commit:",t,e,r,a),e=i.e.sanitizeText(e,(0,i.c)()),t=i.e.sanitizeText(t,(0,i.c)()),a=i.e.sanitizeText(a,(0,i.c)());const n={id:e||g+"-"+b(),message:t,seq:g++,type:r||_.NORMAL,tag:a||"",parents:null==h?[]:[h.id],branch:u};h=n,l[n.id]=n,y[u]=n.id,i.l.debug("in pushCommit "+n.id)},branch:function(t,e){if(t=i.e.sanitizeText(t,(0,i.c)()),void 0!==y[t]){let e=new Error('Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout '+t+'")');throw e.hash={text:"branch "+t,token:"branch "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"checkout '+t+'"']},e}y[t]=null!=h?h.id:null,m[t]={name:t,order:e?parseInt(e,10):null},f(t),i.l.debug("in createBranch")},merge:function(t,e,r,a){t=i.e.sanitizeText(t,(0,i.c)()),e=i.e.sanitizeText(e,(0,i.c)());const n=l[y[u]],c=l[y[t]];if(u===t){let e=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},e}if(void 0===n||!n){let e=new Error('Incorrect usage of "merge". Current branch ('+u+")has no commits");throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["commit"]},e}if(void 0===y[t]){let e=new Error('Incorrect usage of "merge". Branch to be merged ('+t+") does not exist");throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch "+t]},e}if(void 0===c||!c){let e=new Error('Incorrect usage of "merge". Branch to be merged ('+t+") has no commits");throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"commit"']},e}if(n===c){let e=new Error('Incorrect usage of "merge". Both branches have same head');throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},e}if(e&&void 0!==l[e]){let i=new Error('Incorrect usage of "merge". Commit with id:'+e+" already exists, use different custom Id");throw i.hash={text:"merge "+t+e+r+a,token:"merge "+t+e+r+a,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["merge "+t+" "+e+"_UNIQUE "+r+" "+a]},i}const s={id:e||g+"-"+b(),message:"merged branch "+t+" into "+u,seq:g++,parents:[null==h?null:h.id,y[t]],branch:u,type:_.MERGE,customType:r,customId:!!e,tag:a||""};h=s,l[s.id]=s,y[u]=s.id,i.l.debug(y),i.l.debug("in mergeBranch")},cherryPick:function(t,e,r,a){if(i.l.debug("Entering cherryPick:",t,e,r),t=i.e.sanitizeText(t,(0,i.c)()),e=i.e.sanitizeText(e,(0,i.c)()),r=i.e.sanitizeText(r,(0,i.c)()),a=i.e.sanitizeText(a,(0,i.c)()),!t||void 0===l[t]){let r=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw r.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},r}let n=l[t],c=n.branch;if(a&&(!Array.isArray(n.parents)||!n.parents.includes(a))){throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.")}if(n.type===_.MERGE&&!a){throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.")}if(!e||void 0===l[e]){if(c===u){let r=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw r.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},r}const s=l[y[u]];if(void 0===s||!s){let r=new Error('Incorrect usage of "cherry-pick". Current branch ('+u+")has no commits");throw r.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},r}const o={id:g+"-"+b(),message:"cherry-picked "+n+" into "+u,seq:g++,parents:[null==h?null:h.id,n.id],branch:u,type:_.CHERRY_PICK,tag:r??`cherry-pick:${n.id}${n.type===_.MERGE?`|parent:${a}`:""}`};h=o,l[o.id]=o,y[u]=o.id,i.l.debug(y),i.l.debug("in cherryPick")}},checkout:f,prettyPrint:function(){i.l.debug(l);k([x()[0]])},clear:function(){l={},h=null;let t=(0,i.c)().gitGraph.mainBranchName,e=(0,i.c)().gitGraph.mainBranchOrder;y={},y[t]=null,m={},m[t]={name:t,order:e},u=t,g=0,(0,i.v)()},getBranchesAsObjArray:function(){return Object.values(m).map(((t,e)=>null!==t.order?t:{...t,order:parseFloat(`0.${e}`,10)})).sort(((t,e)=>t.order-e.order)).map((({name:t})=>({name:t})))},getBranches:function(){return y},getCommits:function(){return l},getCommitsArray:x,getCurrentBranch:function(){return u},getDirection:function(){return p},getHead:function(){return h},setAccTitle:i.s,getAccTitle:i.g,getAccDescription:i.a,setAccDescription:i.b,setDiagramTitle:i.q,getDiagramTitle:i.t,commitType:_};let w={};const E=0,L=1,M=2,v=3,I=4;let A={},R={},O=[],C=0,S="LR";const P=t=>{const e=document.createElementNS("http://www.w3.org/2000/svg","text");let r=[];r="string"==typeof t?t.split(/\\n|\n|/gi):Array.isArray(t)?t:[];for(const i of r){const t=document.createElementNS("http://www.w3.org/2000/svg","tspan");t.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),t.setAttribute("dy","1em"),t.setAttribute("x","0"),t.setAttribute("class","row"),t.textContent=i.trim(),e.appendChild(t)}return e},B=(t,e,r)=>{const a=(0,i.c)().gitGraph,n=t.append("g").attr("class","commit-bullets"),c=t.append("g").attr("class","commit-labels");let s=0;"TB"===S&&(s=30);const o=Object.keys(e).sort(((t,r)=>e[t].seq-e[r].seq)),l=a.parallelCommits,h=10;o.forEach((t=>{const i=e[t];if(l)if(i.parents.length){const t=(t=>{let e="",r=0;return t.forEach((t=>{const i="TB"===S?R[t].y:R[t].x;i>=r&&(e=t,r=i)})),e||void 0})(i.parents);s="TB"===S?R[t].y+40:R[t].x+40}else s=0,"TB"===S&&(s=30);const o=s+h,m="TB"===S?o:A[i.branch].pos,y="TB"===S?A[i.branch].pos:o;if(r){let t,e=void 0!==i.customType&&""!==i.customType?i.customType:i.type;switch(e){case E:t="commit-normal";break;case L:t="commit-reverse";break;case M:t="commit-highlight";break;case v:t="commit-merge";break;case I:t="commit-cherry-pick";break;default:t="commit-normal"}if(e===M){const e=n.append("rect");e.attr("x",y-10),e.attr("y",m-10),e.attr("height",20),e.attr("width",20),e.attr("class",`commit ${i.id} commit-highlight${A[i.branch].index%8} ${t}-outer`),n.append("rect").attr("x",y-6).attr("y",m-6).attr("height",12).attr("width",12).attr("class",`commit ${i.id} commit${A[i.branch].index%8} ${t}-inner`)}else if(e===I)n.append("circle").attr("cx",y).attr("cy",m).attr("r",10).attr("class",`commit ${i.id} ${t}`),n.append("circle").attr("cx",y-3).attr("cy",m+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${i.id} ${t}`),n.append("circle").attr("cx",y+3).attr("cy",m+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${i.id} ${t}`),n.append("line").attr("x1",y+3).attr("y1",m+1).attr("x2",y).attr("y2",m-5).attr("stroke","#fff").attr("class",`commit ${i.id} ${t}`),n.append("line").attr("x1",y-3).attr("y1",m+1).attr("x2",y).attr("y2",m-5).attr("stroke","#fff").attr("class",`commit ${i.id} ${t}`);else{const r=n.append("circle");if(r.attr("cx",y),r.attr("cy",m),r.attr("r",i.type===v?9:10),r.attr("class",`commit ${i.id} commit${A[i.branch].index%8}`),e===v){const e=n.append("circle");e.attr("cx",y),e.attr("cy",m),e.attr("r",6),e.attr("class",`commit ${t} ${i.id} commit${A[i.branch].index%8}`)}if(e===L){n.append("path").attr("d",`M ${y-5},${m-5}L${y+5},${m+5}M${y-5},${m+5}L${y+5},${m-5}`).attr("class",`commit ${t} ${i.id} commit${A[i.branch].index%8}`)}}}if(R[i.id]="TB"===S?{x:y,y:o}:{x:o,y:m},r){const t=4,e=2;if(i.type!==I&&(i.customId&&i.type===v||i.type!==v)&&a.showCommitLabel){const r=c.append("g"),n=r.insert("rect").attr("class","commit-label-bkg"),l=r.append("text").attr("x",s).attr("y",m+25).attr("class","commit-label").text(i.id);let h=l.node().getBBox();if(n.attr("x",o-h.width/2-e).attr("y",m+13.5).attr("width",h.width+2*e).attr("height",h.height+2*e),"TB"===S&&(n.attr("x",y-(h.width+4*t+5)).attr("y",m-12),l.attr("x",y-(h.width+4*t)).attr("y",m+h.height-12)),"TB"!==S&&l.attr("x",o-h.width/2),a.rotateCommitLabel)if("TB"===S)l.attr("transform","rotate(-45, "+y+", "+m+")"),n.attr("transform","rotate(-45, "+y+", "+m+")");else{let t=-7.5-(h.width+10)/25*9.5,e=10+h.width/25*8.5;r.attr("transform","translate("+t+", "+e+") rotate(-45, "+s+", "+m+")")}}if(i.tag){const r=c.insert("polygon"),a=c.append("circle"),n=c.append("text").attr("y",m-16).attr("class","tag-label").text(i.tag);let l=n.node().getBBox();n.attr("x",o-l.width/2);const u=l.height/2,p=m-19.2;r.attr("class","tag-label-bkg").attr("points",`\n ${s-l.width/2-t/2},${p+e}\n ${s-l.width/2-t/2},${p-e}\n ${o-l.width/2-t},${p-u-e}\n ${o+l.width/2+t},${p-u-e}\n ${o+l.width/2+t},${p+u+e}\n ${o-l.width/2-t},${p+u+e}`),a.attr("cx",s-l.width/2+t/2).attr("cy",p).attr("r",1.5).attr("class","tag-hole"),"TB"===S&&(r.attr("class","tag-label-bkg").attr("points",`\n ${y},${s+e}\n ${y},${s-e}\n ${y+h},${s-u-e}\n ${y+h+l.width+t},${s-u-e}\n ${y+h+l.width+t},${s+u+e}\n ${y+h},${s+u+e}`).attr("transform","translate(12,12) rotate(45, "+y+","+s+")"),a.attr("cx",y+t/2).attr("cy",s).attr("transform","translate(12,12) rotate(45, "+y+","+s+")"),n.attr("x",y+5).attr("y",s+3).attr("transform","translate(14,14) rotate(45, "+y+","+s+")"))}}s+=50,s>C&&(C=s)}))},N=(t,e,r,i,a)=>{const n=("TB"===S?r.x{return(i=r).seq>t.seq&&i.seqt.branch===n)(r);var i}))},G=(t,e,r=0)=>{const i=t+Math.abs(t-e)/2;if(r>5)return i;if(O.every((t=>Math.abs(t-i)>=10)))return O.push(i),i;const a=Math.abs(t-e);return G(t,e-a/5,r+1)},H=(t,e)=>{const r=t.append("g").attr("class","commit-arrows");Object.keys(e).forEach((t=>{const i=e[t];i.parents&&i.parents.length>0&&i.parents.forEach((t=>{((t,e,r,i)=>{const a=R[e.id],n=R[r.id],c=N(e,r,a,n,i);let s,o="",l="",h=0,m=0,y=A[r.branch].index;if(r.type===v&&e.id!==r.parents[0]&&(y=A[e.branch].index),c){o="A 10 10, 0, 0, 0,",l="A 10 10, 0, 0, 1,",h=10,m=10;const t=a.yn.x&&(o="A 20 20, 0, 0, 0,",l="A 20 20, 0, 0, 1,",h=20,m=20,s=r.type===v&&e.id!==r.parents[0]?`M ${a.x} ${a.y} L ${a.x} ${n.y-h} ${l} ${a.x-m} ${n.y} L ${n.x} ${n.y}`:`M ${a.x} ${a.y} L ${n.x+h} ${a.y} ${o} ${n.x} ${a.y+m} L ${n.x} ${n.y}`),a.x===n.x&&(s=`M ${a.x} ${a.y} L ${n.x} ${n.y}`)):(a.yn.y&&(s=r.type===v&&e.id!==r.parents[0]?`M ${a.x} ${a.y} L ${n.x-h} ${a.y} ${o} ${n.x} ${a.y-m} L ${n.x} ${n.y}`:`M ${a.x} ${a.y} L ${a.x} ${n.y+h} ${l} ${a.x+m} ${n.y} L ${n.x} ${n.y}`),a.y===n.y&&(s=`M ${a.x} ${a.y} L ${n.x} ${n.y}`));t.append("path").attr("d",s).attr("class","arrow arrow"+y%8)})(r,e[t],i,e)}))}))},z={parser:c,db:T,renderer:{draw:function(t,e,r,n){A={},R={},w={},C=0,O=[],S="LR";const c=(0,i.c)(),s=c.gitGraph;i.l.debug("in gitgraph renderer",t+"\n","id:",e,r),w=n.db.getCommits();const o=n.db.getBranchesAsObjArray();S=n.db.getDirection();const l=(0,a.Ltv)(`[id="${e}"]`);let h=0;o.forEach(((t,e)=>{const r=P(t.name),i=l.append("g"),a=i.insert("g").attr("class","branchLabel"),n=a.insert("g").attr("class","label branch-label");n.node().appendChild(r);let c=r.getBBox();A[t.name]={pos:h,index:e},h+=50+(s.rotateCommitLabel?40:0)+("TB"===S?c.width/2:0),n.remove(),a.remove(),i.remove()})),B(l,w,!1),s.showBranches&&((t,e)=>{const r=(0,i.c)().gitGraph,a=t.append("g");e.forEach(((t,e)=>{const i=e%8,n=A[t.name].pos,c=a.append("line");c.attr("x1",0),c.attr("y1",n),c.attr("x2",C),c.attr("y2",n),c.attr("class","branch branch"+i),"TB"===S&&(c.attr("y1",30),c.attr("x1",n),c.attr("y2",C),c.attr("x2",n)),O.push(n);let s=t.name;const o=P(s),l=a.insert("rect"),h=a.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+i);h.node().appendChild(o);let m=o.getBBox();l.attr("class","branchLabelBkg label"+i).attr("rx",4).attr("ry",4).attr("x",-m.width-4-(!0===r.rotateCommitLabel?30:0)).attr("y",-m.height/2+8).attr("width",m.width+18).attr("height",m.height+4),h.attr("transform","translate("+(-m.width-14-(!0===r.rotateCommitLabel?30:0))+", "+(n-m.height/2-1)+")"),"TB"===S&&(l.attr("x",n-m.width/2-10).attr("y",0),h.attr("transform","translate("+(n-m.width/2-5)+", 0)")),"TB"!==S&&l.attr("transform","translate(-19, "+(n-m.height/2)+")")}))})(l,o),H(l,w),B(l,w,!0),i.u.insertTitle(l,"gitTitleText",s.titleTopMargin,n.db.getDiagramTitle()),(0,i.z)(void 0,l,s.diagramPadding,s.useMaxWidth??c.useMaxWidth)}},styles:t=>`\n .commit-id,\n .commit-msg,\n .branch-label {\n fill: lightgrey;\n color: lightgrey;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n ${[0,1,2,3,4,5,6,7].map((e=>`\n .branch-label${e} { fill: ${t["gitBranchLabel"+e]}; }\n .commit${e} { stroke: ${t["git"+e]}; fill: ${t["git"+e]}; }\n .commit-highlight${e} { stroke: ${t["gitInv"+e]}; fill: ${t["gitInv"+e]}; }\n .label${e} { fill: ${t["git"+e]}; }\n .arrow${e} { stroke: ${t["git"+e]}; }\n `)).join("\n")}\n\n .branch {\n stroke-width: 1;\n stroke: ${t.lineColor};\n stroke-dasharray: 2;\n }\n .commit-label { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelColor};}\n .commit-label-bkg { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelBackground}; opacity: 0.5; }\n .tag-label { font-size: ${t.tagLabelFontSize}; fill: ${t.tagLabelColor};}\n .tag-label-bkg { fill: ${t.tagLabelBackground}; stroke: ${t.tagLabelBorder}; }\n .tag-hole { fill: ${t.textColor}; }\n\n .commit-merge {\n stroke: ${t.primaryColor};\n fill: ${t.primaryColor};\n }\n .commit-reverse {\n stroke: ${t.primaryColor};\n fill: ${t.primaryColor};\n stroke-width: 3;\n }\n .commit-highlight-outer {\n }\n .commit-highlight-inner {\n stroke: ${t.primaryColor};\n fill: ${t.primaryColor};\n }\n\n .arrow { stroke-width: 8; stroke-linecap: round; fill: none}\n .gitTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n }\n`}}}]); \ No newline at end of file diff --git a/assets/js/496ed8d5.0530b3d2.js b/assets/js/496ed8d5.0530b3d2.js new file mode 100644 index 0000000000..6a458031a4 --- /dev/null +++ b/assets/js/496ed8d5.0530b3d2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[464],{12915:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>s,metadata:()=>a,toc:()=>c});var t=i(74848),o=i(28453);const s={sidebar_position:8,description:"eCalc FAQ"},r="FAQ / Troubleshooting",a={id:"about/getting_started/cli/faq",title:"FAQ / Troubleshooting",description:"eCalc FAQ",source:"@site/docs/about/getting_started/cli/faq.md",sourceDirName:"about/getting_started/cli",slug:"/about/getting_started/cli/faq",permalink:"/ecalc/docs/about/getting_started/cli/faq",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/getting_started/cli/faq.md",tags:[],version:"current",sidebarPosition:8,frontMatter:{sidebar_position:8,description:"eCalc FAQ"},sidebar:"about",previous:{title:"CLI reference",permalink:"/ecalc/docs/about/getting_started/cli/cli_reference"},next:{title:"API Reference",permalink:"/ecalc/docs/about/getting_started/api/"}},l={},c=[{value:"Indentation errors",id:"indentation-errors",level:2},{value:"Error messages due to YAML read problems",id:"error-messages-due-to-yaml-read-problems",level:3},{value:"Error messages due to invalid eCalc configuration",id:"error-messages-due-to-invalid-ecalc-configuration",level:3},{value:"Proposed solution",id:"proposed-solution",level:3},{value:"Special characters in Unicode",id:"special-characters-in-unicode",level:2},{value:"Proposed solution",id:"proposed-solution-1",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"faq--troubleshooting",children:"FAQ / Troubleshooting"}),"\n",(0,t.jsx)(n.p,{children:"While running eCalc as a Unix command-line tool, you may come across seemingly incomprehensible error messages.\nThis page tries to explain some common error messages and proposes how to fix them."}),"\n",(0,t.jsx)(n.h2,{id:"indentation-errors",children:"Indentation errors"}),"\n",(0,t.jsx)(n.p,{children:"In YAML, the indentation is very important and specifies the level in the hierarchy for the input.\nIf you have the wrong indentation somewhere, you may get both YAML read errors and/or eCalc setup errors."}),"\n",(0,t.jsx)(n.h3,{id:"error-messages-due-to-yaml-read-problems",children:"Error messages due to YAML read problems"}),"\n",(0,t.jsx)(n.p,{children:"The following error messages are common when you have formatting issues in your YAML file:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-text",children:"mapping values are not allowed here\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-text",children:"while scanning a simple key in \"\", line , column \ncould not find expected ':', line , column \n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-text",children:"while parsing a block mapping in , line , column \nexpected , but found ''\n"})}),"\n",(0,t.jsx)(n.h3,{id:"error-messages-due-to-invalid-ecalc-configuration",children:"Error messages due to invalid eCalc configuration"}),"\n",(0,t.jsx)(n.p,{children:"The configuration expects a sub-hierarchy of data. After reading YAML, this data sub-hierarchy would be of object type\ndictionary (dict) and in some cases contain lists or other objects. If invalid data is input, the error message would\nindicate that the type is wrong because it is not a 'dict'/'list' or other type"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-text",children:"None should be instance of 'dict'\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-text",children:"None should be instance of 'list'\n"})}),"\n",(0,t.jsx)(n.h3,{id:"proposed-solution",children:"Proposed solution"}),"\n",(0,t.jsx)(n.p,{children:"Check your YAML setup file for correct indentation and correct format of values for each eCalc key."}),"\n",(0,t.jsx)(n.h2,{id:"special-characters-in-unicode",children:"Special characters in Unicode"}),"\n",(0,t.jsxs)(n.p,{children:["eCalc uses ",(0,t.jsx)(n.a,{href:"https://pypi.org/project/ruamel.yaml/",children:"ruamel.yaml"})," to read the YAML setup files. Some (text) files have an encoding not supported and will thus result in an error message."]}),"\n",(0,t.jsxs)(n.p,{children:['One example of this is an unrecognized "',(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Byte_order_mark",children:"BOM"}),'" character in "',(0,t.jsx)(n.a,{href:"https://nl.wikipedia.org/wiki/UTF-8",children:"UTF-8 Unicode"}),'".']}),"\n",(0,t.jsx)(n.p,{children:"Error message"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"while scanning a simple key in \"\", line , column 1\ncould not find expected ':', line , column 1\n"})}),"\n",(0,t.jsx)(n.h3,{id:"proposed-solution-1",children:"Proposed solution"}),"\n",(0,t.jsx)(n.p,{children:"Check the encoding of your setupfile (and inputfiles):"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"$ file .yml\n"})}),"\n",(0,t.jsxs)(n.p,{children:['If the output of this is not "ASCII text", convert your file to "US-ASCII" using ',(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/iconv",children:"iconv"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["Example when ",(0,t.jsx)(n.code,{children:".yml"}),' is of type "UTF-8"']}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"$ iconv -f UTF-8 -t US-ASCII//TRANSLIT -o .yml .yml\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Now try to run again using the new file ",(0,t.jsx)(n.code,{children:".yml"}),"."]})]})}function u(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>r,x:()=>a});var t=i(96540);const o={},s=t.createContext(o);function r(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/498bfcff.79dc88fb.js b/assets/js/498bfcff.79dc88fb.js new file mode 100644 index 0000000000..0745d37485 --- /dev/null +++ b/assets/js/498bfcff.79dc88fb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9329],{56297:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var s=t(74848),i=t(28453);const o={title:"Fuel types",sidebar_position:5,description:"Guide on how to use fuel types"},a=void 0,l={id:"about/modelling/setup/fuel_types",title:"Fuel types",description:"Guide on how to use fuel types",source:"@site/docs/about/modelling/setup/fuel_types.md",sourceDirName:"about/modelling/setup",slug:"/about/modelling/setup/fuel_types",permalink:"/ecalc/docs/about/modelling/setup/fuel_types",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/fuel_types.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Fuel types",sidebar_position:5,description:"Guide on how to use fuel types"},sidebar:"about",previous:{title:"Turbine modelling",permalink:"/ecalc/docs/about/modelling/setup/models/turbine_modeling"},next:{title:"Variables",permalink:"/ecalc/docs/about/modelling/setup/variables"}},r={},c=[{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/FUEL_TYPES",children:"FUEL_TYPES"})," keyword is ",(0,s.jsx)(n.strong,{children:"mandatory"})," within the eCalc\u2122 YAML file."]})}),"\n",(0,s.jsxs)(n.p,{children:["This part of the setup specifies the various fuel types and associated emissions\nused in the model. Each fuel type is specified in a list and the defined fuels can later be referred to the\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/installations/",children:"INSTALLATIONS"})," part of the setup by its name."]}),"\n",(0,s.jsxs)(n.p,{children:["The use of fuel can lead to one or more emission types, specified in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/EMISSIONS",children:"EMISSIONS"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["You can optionally specify a ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/CATEGORY",children:"CATEGORY"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"FUEL_TYPES:\n - NAME: \n CATEGORY: \n EMISSIONS: \n - NAME: \n CATEGORY: \n EMISSIONS: \n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsxs)(n.p,{children:["This is a full example where there are 3 fuel type definitions, i.e., there are 3 different\nfuels defined that can be used in your ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/installations/",children:"INSTALLATIONS"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"FUEL_TYPES:\n - NAME: fuel_gas # Name of this fuel, use this when referencing this fuel in the FUEL specification in the INSTALLATIONS part\n EMISSIONS:\n - NAME: CO2 # Name of the emission type\n FACTOR: 2.15 # kg/Sm3\n - NAME: CH4\n FACTOR: 0.00091 # kg/Sm3\n - NAME: flare_gas\n CATEGORY: FUEL_GAS\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.73\n - NAME: CH4\n FACTOR: 0.00024\n - NAME: diesel\n CATEGORY: DIESEL\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.7085 # kg/l - input diesel usage in l/d\n"})})]})}function u(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>l});var s=t(96540);const i={},o=s.createContext(i);function a(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4aa4fc36.e9e47236.js b/assets/js/4aa4fc36.e9e47236.js new file mode 100644 index 0000000000..498829d8f7 --- /dev/null +++ b/assets/js/4aa4fc36.e9e47236.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5451],{67072:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var i=t(74848),o=t(28453);const r={title:"v8 to v8.1",description:"v8 to v8.1 migration",sidebar_position:-1},s="v8 to v8.1",a={id:"about/migration_guides/v8_to_v81",title:"v8 to v8.1",description:"v8 to v8.1 migration",source:"@site/docs/about/migration_guides/v8_to_v81.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/v8_to_v81",permalink:"/ecalc/docs/about/migration_guides/v8_to_v81",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/v8_to_v81.md",tags:[],version:"current",sidebarPosition:-1,frontMatter:{title:"v8 to v8.1",description:"v8 to v8.1 migration",sidebar_position:-1},sidebar:"about",previous:{title:"v8.1 to v8.2",permalink:"/ecalc/docs/about/migration_guides/v8-1_to_v8-2"},next:{title:"v7 to v8",permalink:"/ecalc/docs/about/migration_guides/v7_to_v8"}},l={},d=[{value:"Yaml migration",id:"yaml-migration",level:2},{value:"Migration overview",id:"migration-overview",level:3},{value:"1. Changes to TIME_SERIES",id:"1-changes-to-time_series",level:3},{value:"2. Not possible to have different interpolation types for vectors within one file",id:"2-not-possible-to-have-different-interpolation-types-for-vectors-within-one-file",level:3},{value:"3. Empty data in time series columns no longer allowed",id:"3-empty-data-in-time-series-columns-no-longer-allowed",level:3},{value:"4. New LTP Category: STEAM-TURBINE-GENERATOR",id:"4--new-ltp-category-steam-turbine-generator",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"v8-to-v81",children:"v8 to v8.1"}),"\n",(0,i.jsx)(n.p,{children:"In this migration guide you will find:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#yaml-migration",children:"YAML changes"})}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"yaml-migration",children:"Yaml migration"}),"\n",(0,i.jsx)(n.h3,{id:"migration-overview",children:"Migration overview"}),"\n",(0,i.jsx)(n.p,{children:"This doc guides you through migrating an existing eCalc\u2122 model from version v8 to v8.1."}),"\n",(0,i.jsx)(n.p,{children:"We try to make this as easy as possible, and provide a step-by-step migration guide."}),"\n",(0,i.jsx)(n.h3,{id:"1-changes-to-time_series",children:"1. Changes to TIME_SERIES"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"RATE_INTERPOLATION_TYPE"})," is renamed to ",(0,i.jsx)(n.a,{href:"../references/INTERPOLATION_TYPE",children:(0,i.jsx)(n.code,{children:"INTERPOLATION_TYPE"})})]}),"\n",(0,i.jsxs)(n.li,{children:["New time series type: ",(0,i.jsx)(n.code,{children:"DEFAULT"})," with default ",(0,i.jsx)(n.code,{children:"RIGHT"})," interpolation"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"RESERVOIR"})," type is removed"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Previously, it looked like this:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"TIME_SERIES:\n - NAME:
    _9GC=MNPB^=sVaHod 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 a|J0`%^}gSnSW*tu$l&Sf=d#Wzp$Py3Opy`* literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_sys26_capacity_and_rate.png b/img/docs/asgb/asgb_lpp3_sys26_capacity_and_rate.png new file mode 100644 index 0000000000000000000000000000000000000000..a426c3ddda5c2ffa3101f46e792b71202acfdc74 GIT binary patch literal 11469 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 literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pd200.png b/img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pd200.png new file mode 100644 index 0000000000000000000000000000000000000000..64c6f8296ac8dd3f443b43d2d1d83cacc21d8ee8 GIT binary patch literal 7903 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 W$E;WRIB-R2fV#4_QpGcy$o~TSWmR?n literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pd250.png b/img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pd250.png new file mode 100644 index 0000000000000000000000000000000000000000..332651bad374ab39473ef1b56d1a02d23ee6b322 GIT binary patch literal 6555 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≫TWKK(g7JxaR)U-&FaaoF$u}xWzVG0oE-Q9$ozWHM@$!Iu{*!c2$mg5&40)o<)HU6JzKh z=Q&>Pkv-j^J=Dl3Ad7pC-}#OClXE4f6gOeC5qnF@^V8GrcbP@}G5|edq{t8%8RL!px*31rJZChe zl;i#Q_L%LmvP22P{;)2|5+}z|nN{WFB4+|~h*6?j6RJZCIgYRU_b}|PdRY<#`(9a1 z8{k_z2}g^TQW|PpO_SAvduj6kHLsX}iW&SoFRfmw*;3k+^d25At5KGZ+L#@Q-csY5 zoY{3?{HDuq!#PiXb8{1LS{RYGGTe;SL~W?1m;-^@ALJvNPI8Gc(+Fqp zsGNXK6P(P>B1zdv+FuiV=-b8O53A?AZ%Q;>GE``rODkh8Q`nS}D;ttNYwjyu&tDR@ zDcppquPUm7$iq~WjScLDk8+S4slzG6n;t0w`)-|hF(aKNN!v%)VdBR$yw-n>_7nNt zhXUeN1)S&W^YZeL173!K<5oJBTT*{uPhV>F+6&~E{9&uM9+}`S7lKa#AaI{|zXE(; zPrY>Wv7e!{F~#!jfs`;`IWIsBS|oe|H(VQ2FP-Snk3~45Kd2oU5iSkJ$k@he5*gu~B5@b;lJ!HDa?_o5Y&iGvwJqQI!BxUK$)ZJGId2$d|OaU#C&r7J6q6GT{ zI%RCey}6+;w8GtmZA18qf57ctW4Q@eVP0;2YxTda6c&=+r4zfKMn(LhRa3W@|5&cB zH|pdKPN)7TuEuztG{Dd|&AFH;=;+Yy09dHj^aQJ+DZW;g$@F*+t^(FDtGL*550^CT zVZ7%lxD~~L8W`3ahYB3(1OvS;6bvWP=r)5(@lOm_U_QY-TmF0>2uGoAJ@R$ zAVksN64w;xTq7EBPL__y01%a{HClqSKE@ze{OfgLau2afg^&nh5lyHiLB)f%(5C2` z7A;R40=w0oafQ)1S_5;eCNP*(%6ox5Qd}>wmBKhRA7Q@HG1TmACIleWI zPGx|jXpv+wRf-|Rrdnsx{P1csJrP^=1az{h+3ar^1+jnmAsQE7M9vP?n^0v_fxy`a zAHGf}w&pz_o{jPeSQj-O)!6&e8Ip7av5V z@}ddvZv)SDenD^YemwsU3dm(;kTy#}?q74shvUEg!@036HjJdlwg;UAozJ-5ds#utq@U@*nbu(InxjTm=VbuY@6$0g4qt&CSm0O$L zq9hWZd?Pi9+7T)sd!oXlL*lwg%c>T5GDgAz!(|g}nzm#Ai+HDwf44pVE}E1`OG}*6 zK=>ZQzSO!RDSjjAU0N4?4~_1~(({Tz7lz-6fRYnDEFQa*c84{9kl1nY`}o$eS5_ch zJ0P$$`viJ^0+(~sjr?EXjb4VD-oh;nBz(8f`Pl!;rx5ZzAvgx~$cE6qQ1GM}@E$B! zfHTWysKp}G1p`)i!M}Sinf3C6ce5CDr`(h*p-lhKBN$jUFr4DWt#Fl6B-vB{Y{83@ zrW2aZx^TiUp|Q=!a}SEBXpzbYGCM%;&FF=^2v2;nbTeGOD!jBFVOuo5z>P#baXoQ52H zg7^|H%8gJD_qugDb>HR<4`#`$N+j}4S8Jwf@gHu0iBO&E&VYccBNe!rf$yYDrK?ra zeIQ(E;@mIE_0WU%5+bX87~Ae8mThKcmfEh*x6eE&y5sh{M!OMM7(wJc&bLeYscJ$x zHWKl4wchwXkD!#C%e-S?;JZ6?22a^z1;?c^*cwghXna6kvY)ILRs2ybN%`*Y(*iV%bM&9s(>TkY&j-C8*X2b z;}>HCq7!DW(A`t%{x6z?deH?%Pg*P)OM*Z`{fcZP+|wvxA%9<mt$=ycixMTwj4Hp{$B%{`dsaM*?R!|AW6Y%O#iu|IMzmG zTlMeYGKg1~JAh$oE3+9wGFKGB_v`KBpC@Np8H5P>oKW&t?Nluf8WX7(Y1QdCDfm4v zTG`L)4&_1oSryfc!hlX#f8!M0Z_#7J9SQyUbPC@<-M|g#tX`SpL922zSA;|Q^8I1^ z>Fo;D&k5Z|%{Gx3=_T5bd%Uz?$}T{#5*N)?8m#nkzV zgg>5nt^z;DZ@SFqW^uzoM(zLQ-g-^-8;o9SO+ zy`wDr)E^UZ(3O^bW=4;nl8WKo2)VOE7I+d~ROuW%+9_I2O_e1H9kPR@BbIdQ2$TS; zAQaNA;zb}D{GMUp8cm>xhqP;2wa7dSu9X@-uekDW30fIOY{%$({csNhgoV3MNH4h} z?Z_xY7Fc_F=0@5(kFJUgP|P`fzMm~FkkG6)Q$O^|Vou3(plbF9qR`p7znd<8S2}TN z>e6w%hXu=!=*@bJSeWM72 z`bHk`3e`Cy#UriMOu0);Y^$i$Ns_slPV(S?!RIGx;z^uI3uq9m?qd>k$VZ|NlYa-M z0m*i5ZmzMML~Ew&6v-0$YntAYJ$D(eF<$0nA6p}^_O9>VtePqA*&s{%r(cz&TNirS z9X~DS+d|U|{A#A$+)i5bu|0b`8#qrFNUva%>{nkfvyr+@lbuvb3Ew*|gh>uP6@91`1 z6zsz)s#LD(pp>*Ss*C{~+q0j|-1;Q9@z#)*n)Qag7E@SlolA(4R}|ee=;-Kbl-Fy2 z1UZ%V75_Nj3wKvG0a`9ZszOvFaE9_irTa4b`yYdT`QG{gaqdZK=N{3VANe;w%U=h9 z5_t-I#KI%>`eLZi#z!Pc5|FGE`Jv6TC z_n*|TLaoOkwvI+?tDBo6@MBv#;hE_4ws5mLAFmr5H14#@ zF{!$?J82Dzwt;_(e^dK^hTH_q^?sXeT=+i?CX$Vkw9^@kWv}s8q74SI8k? zO&M7*e5;;yp@R;!)x^B=n}m%OAYsddAiZR6Y$q<}jUE^vM*^gIdj6GS^f*3tLHoa% z0SE9_&U-U``|s@FC~Tbv8}KV9bwykV+}nE99ALr-gUJ;7AMU@`&H??7E@AcL6s#Jz zvl;iZayp1HBy&(orURO2BacUKln?1OAl~VGSSW`+1gJeE_dG~y7!~XqO0DXoJ0d~y zD*_Vrp;A+yDRiGlu5>Vob-M!q!NZbVP`$*nE_-y?FU}4VMnlJ*i{Thu9h6BASp{-n z=<`%>()IQGX4mt>HQVqlnQ!-Hb+d7)x+_b|vz-Eiz{)-io*=sKW67$86%YM5%1>izIZGP ztVRG~=s{2|rqP#Mi!gUmrZQ9wC1Q-;7s68+grVc#&?bFEs)4PGm!ib#@P%NUGQOWh zww_hBuGHM7Dz0QBr>`pDq)i6{owXRGL~?zi;&OE8L6C2E0)IaReuC2!Ep z@;2NLWd>XqiTCoFF6k|;OtGQ%nzMf~4uNp9J5Vw^0Cwf~yHnPB^M3!+UaWC zWRwpW zzNM4b^%c2lX2Gv!MyZmq!Ofk`?V|`Ox*(wy3~I-#D|jWe**L1!}*`<69%PQBVw+ zXJj4XE@uX}W%IvwcY`i2!2rmJfS=0_1gb$leQciwXR5!RpdFuDW9K!E%cwJElhELE zPY0ef&e%%iJ0Lb`^TBzi6&rEE-~$aqoXNQTug{mWwUh;f=06st^gcZ_k}tm{q^qax z&LVpasm^Y4~ zjjOo7Tp1h=iSgL`Mk&DhzOKDLU}Bs!FCgABJp9QrZ4xSO{Qe0S`wb$40bvF5I#2e-#riFTgJuNbLqr2w%`IoVN zpXE7ZGbI)(t7M9x9Ojqbz4#!CNIK?6=~|s3QKt5e2WIxb6NIDJ_qG}1GaNg9;cC<2 zgBltIJ_v_2F};Pw*b;Z|asPf{8$(Y`G`_%k&W?bYf?7u(6n^~o(2FmNJZ&48t$;^d_=M_B#QbnE@KrPZI+jRc2uoz+&I za0=VjTrvWd9UHhh;!<{BD&HaAgt<*aT16URxh8c#e>iK92{8fnI+hW9%*X07WN`DK zK;?RvYs(kIAKH!6FZec+y+prpZIv0y^fRFSy&nlXaMMDZP*PH#E_}}5<*V z#-Z|bOCZVzF6azQaX?${IV|tgfk*w8(Tgv7FYxy*Qm|en_=KNwj5sGJ)Gp>uDUxaJ zE>p{Ivtg}{4j)!Q&}^Cy*Y7lwxO#G~pOe}Y<;YP3yQHS(v^xA#2`@(Cn>F%S&aWH= zV-y6F%@$aR4tC;Ud`v#x(U2Ulj zx6A!w`IKF3t>5cqlYP9d|Mpy4bWo%(p!0EK&-%-(exJmcWZTw9H+q)}z|E`Iyc9O1 zE+~|F(w}kMp{$)fGdT=4UZxx1b{2o);%S6?fzVy)feS+I@(Pd+YCieZ3o%x8$@ySO z=BGs3^Y~pIyYVM1E^L7NIknS`;QNC^Y@Q}aTE>G3ASkm`RZ=#TH*~Yp1O6n6IK(c? zVE!~0OXN?IT=|w74(n~MYd40ie7w8viuP^0TY^J;Z(Btt2q;2M)Wxi=l403}OfYmi zvacn6a(aeT8@NDu-x|xY5kB_;b-7870#{m4odXy_RjC@kn?wUXCD{@$ENx;HHBypAa43x z;3XgHVTc8Pj4K4n{zP*f1}lpaf5f@InEa_K%akBkO@CoQ=W>;;HD&m0eV;-8Zc$EA zpL1hJaq;%f%pzNg2n_sF=Y>!6^aa2z!jsRA(zyVFTkX`)pzS$&%9h>bw}qlsS%)*c z$O6W0&V=sc$T!lk){D~?{hXE&-JJVrrJ?3RSx{N%2OZ*+AEvz6z|6GuSYWNcIp|j5?6LEMBSd%9m(R1)GymfuH zinB+48VQ%1^m>o(<-G0p<9$&BNy2;ueOa4|EnNK8e!pF#vh2g09)d<*6e$P$hD0{= z9R>pIB!PKDp~2wk%eAz~cCXqu=k9hFH820h*hfNsY!{TMvFNC=Yg;~=JjWwN6wvz; z;;CO%ZzCL6f6VjpME5fbNToLkvm8*LfbV1((j zvHV8Og65t)$>a0B4j=N|*?HcMaS`i!xM0uhYs;=}j9iLMz<}h!DfqMD1fZ8yL!xYN-#d2bB$~l5qEj z>I|%0oL~TarX7iu;n?$8Qb<1bz493!Y5Die+;@?2>A?}_SK%IRNlblBD^Cv~XonYg zj#sn%=+zSp=f;rbM9843|k6CfIB} zeAWMUI_Er+K@HDGCD>qbd%MsnAk5G0Cf?U!6rXop$3p`Mr--0RWp2k24Rv6!b+q@7 zbdWlbKM$X(f|O5Hg|j0G$1|@0J!YR>G5HO?Ld5HgUMBPr6Z8IcSXxie>wP&g=UO@DK|vCCMy2B#kpWI@qq-KEXrS~fA37;D5>@2{C63aZJa(>Vv?PV?S>iT} zF^Bhlt?Ci#yb`)anSkoBn!s9y;~p^3IJ>=1a`@f+z$-h8V%;v_QKNbIQTI>vf}5-T z_`}Q7)>X~2y8qNh+R^8}D-YM-8X=zUe(~YY9`RmS(p4%s3Sun_;Y{*Hm(;Z(X|IcQ zS;Fh?9kE~l!T4L|-}bTr)P-jZQS#)w!Lnz9Euu5+wdF7W)9~&Nl>UvkD+$$dFpCc3 zswT~b&$rR(YpdeFo!@%rgEQ)Ly|`Ju)M!Foe*sR#Sdr)p^wtZfR0BWp*_x&j)m^( z+RDWpze|gO`L?k?^?YZYyL6W1BJJi z<}^7!_3m*qMq~0yJ?O%R71|Oi$&u@U(6=+MJ+ZBL7CUdqz zAeEyXk*s21O3|}sBxWlfjM5aKu?p8s6M3DGVcZo}0rQdB@*DR!#NItlh$; zo_^PU(05Llm5=p%+dT{%WU~+kxRVv`4}43HZKOiE`B}e}ly=uVt|wN$PM9AFm1qEw zntm7r6}R|#PIvcM|19n2db(dNKJLK-ddsK|zk&nXLYk!V6T!@uYWD(c52v(NgFvOQ zyAD(jXk2Zh`^r($7|Zu}s*~Z6(q_k8$#X!CqGqH6gPj!+gL=tL5O0F_Ox7P;g3bC| zKzT*!B#AZv$s`&PrM~gMmXQ<8K4GOx7LAbcz264H88y%xW(Lv_q4VlC<~Y}6MhISAHnTUFHM-mEf^r6x9YwZTasg~bhdYpFGmfD)i6&$3T<0xQ) z$WoWHG72`oL2jvF(+C&uU$LXU(Czk&V?T$cdWXPLDm|cP$C`V6#-7k#fL>_Tz2?-O z`ik+fyX^<(UnG2Zy(h2n6GulND%v`2+Fz$g<=@Q(hZ6=~t}V|uyPLOH{oN^io+_g8 zs@ze-X=jDEY;Z_5|IP?mo?$1rvprPtdI}Ikysf!QI>AD$ z3MfVXI>m=G%+>c{O5}NKLPL2j)(cRP?@2qNcXzD0KM0>s{* z2+GXhq1%$O$4nNY`^h*)`%@9pp`#pGC}^P860Z>I(tPvw!@j(IZapwGorFpU_hdcd zC<>jE3e^t9%Eyod0`B1hT<@#JipM9b+MrV4y^DbV3)?v)Em_YDNJ$u*!jaP3eMLkNr`Ui3J%W(u`ZL0da^#6 z+Xa0LYjDhZ<{PI*j>Ymwb#ci`l`NbLK01t+)R^a%YJU?n=Q`2j6M7r&6_8uxh8SddPQQ z*MEi$W2wRYTZbW7U&8#L85uBprzes-KerpV zg*XnWBXK?*Dnv2lu~XJYs2d|iWf0Ri_rRzFx>FXoVxB`PUu_>(7A7A?^m*Rz`TCiE z?QI9vJvXYQ!nH%0%hhl+WXg7vf<&(_?vDPQp%q#~3rM@Hhz`DI1ue~+Jmlap$jF%e zrF1-A_V>_O{)D>h&PTw0M&aX%C_^bCgoC}{@J7ZTBkDcYjG<$ypn-&<;Ao;Sm7|o% zd$iwgngWCW&QOfFXNMl30evbQYJuMBY^ywy+6v|otIl;<*sdPy`kMq>8R|n!iA;F} z?%D*}GU}s3pX3`BWR+055{9?(M`mA>@grgkaPZ$kRtW@?e&(pQTbA_0njS^I6_g`e z5{2QwYDDFHej?f}2fjsmeT_{glCI;Qhu#Mm5>+h*)8x9tN@A}OR+lfhdFAXevdjkj!*0)ehM#kW%VC<5V6c4hZ-3g8yep0_#n^~%2D>j3r_ucpsORJhtL84w#^ zeSTETU4PhFT`JazU*#e%-X#|!2W?Oq{DiS$d@X`0$Z07I%Nnae3q zBc!dK5X9)0smY-!{P|1Zz=ZRB4!+W-NF>P?iGqDk--q^%G5eKNx67fX1((Q@av&!p zWa>kT$Qr(2Y#aB4g_M4VbB19b*4E>cj3(XqoH?c+eb+=aw}X67Q@8w&ONJAqt1uzx zZD8`&Kcy6jl&OWC4;xitR4Lqm;HN2K1qAgAC?ctwXosF3r=w5`ZWbzooM__(uIyy; zz>)UiKnhn~Jb;u4qLGm2;YTVftOl~W)8=Z62ROr?_Yno?!+!`qxU*@ bwr?L+N^ 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 UZ>u4&>BWU7s#=dK9-4>#7xbE$Jpcdz literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_sys26_stage1_at_ps31pd250.png b/img/docs/asgb/asgb_lpp3_sys26_stage1_at_ps31pd250.png new file mode 100644 index 0000000000000000000000000000000000000000..439c83b3ea600fc6859f4bb5a04c20e9789fbcad GIT binary patch literal 40153 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

    ^c{T3c;w@OY3KDVb~zx&dL2;jinH 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 literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_sys27_crossover_and_mode.png b/img/docs/asgb/asgb_lpp3_sys27_crossover_and_mode.png new file mode 100644 index 0000000000000000000000000000000000000000..58be5ebd7a6d798746e2ee3b2fac80cf9d2cc009 GIT binary patch literal 12063 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 JOGUqY|6fwR`3L|2 literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_sys27_rate_and_mode.png b/img/docs/asgb/asgb_lpp3_sys27_rate_and_mode.png new file mode 100644 index 0000000000000000000000000000000000000000..58b5750809575b0530d7692d7c1b5c702ef8c763 GIT binary patch literal 16959 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 LS*k?R#Q(nl-rGvw literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_unisim_stage1_filtered.png b/img/docs/asgb/asgb_lpp3_unisim_stage1_filtered.png new file mode 100644 index 0000000000000000000000000000000000000000..098f755b46e2d5cb0f931e6386a32b481a31c364 GIT binary patch literal 28371 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�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 literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_unisim_stage2_filtered.png b/img/docs/asgb/asgb_lpp3_unisim_stage2_filtered.png new file mode 100644 index 0000000000000000000000000000000000000000..1c4451ec6ff8212084a79b3d3d24c60fee3f0973 GIT binary patch literal 40488 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

    !6pc~wB4dJ(J_ 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ⅈs zDg0#^J|(5Stu3no0K=F;>MTUgE90EOhq&cD!-`L#GI2N=%{~*8vL|}_H1g04r8tzp zcbl*|y6@HBbLn^q-|bcbaml`XTpe4<)|tMJ+Aq>Zd`uSD81Wsj&(&ywy}Iks6#3t7 z9sjS7h5>U>QBiS|5J@c~_WRlaSJ}n|mpwN}`=~YDRt+#4yb{XHbas>WZg{7yoLLJO z+EFZ_UZ|B$PB_%PNiF*(81-QbQ%wB5q-S~ff3=|0b{Ms8hR9h+a1Zrm@ZDNFUzmNh zhD4OA$S|V*As#}t-dkCTP-FuGgT~+uRZ~bX8Vn6L2=iizokjnEUc`UMIvnh-lt}7D z-$BxSih>4DP1VGR>5ad0O_G-Zy_`l>lqab++Kp3W<+7*bT?~7!r&z-0c!Sm<#6^Qg ztYHv)uui#>2^cslp<-}#1rrw0z)r00D3=fM=XH4$M2_(Cvvw8jZ3&_=iReCWG#;vF^uA5^U{yZi(w5!voij5#}No&&A z&scB&MN^)4N|R-zcaU44@r8~7@?WRbN>;63AQ}x11BV?s;!OY!>RLLK zi!}pxep&?%S0L&%N4SFf_fv;}HanqQCZ3&B%5NXm@Ig4G!|SN`_k&qz-u8!;qhrq} z?qa$3Nv&aWcN^=LJiR)2SBE@+sG6Q*SSr6HHw&7_RsZl%Xuj)S#F%((v0k(bFR3pT z3V(O|NTr{ay7}#t5qsNBFkU7BDHMC!KBUJyz=#Ag&#gswrRq@xXiAZaG$)`zLR;Zo zv^@9#gX(vxQAatyL$Wuf?Va9ne!v!!fVjN;pqMtD`~AXPx83z?2eHEVtLh4Q90gwf zU1t-runySVDy2pR#oW2>T#(kxAXvL+L5bZQkQCEfF7pWa^x84<4f@R18%R%@o;Omc z{=m>vQwAf^l7zHULZWE&^7nlLPb`|-y1-QXORH1ehT2D>ByC?Y9gN4;s@pmuU|JK* zbk3G!T6t1pK+ASt8(kQQPz1t^h)AI#;CNK9vW)A>2f%<~ol<=^Nom`9zA@^S&>Q@< zvyVaMIE$ u>$Pq3V&|)9zVj{!I6;8@{VXgj?(u>}e$Pl;Cd?xMKY8glQuPuhA^!$q{~(S4 literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_sys27a_unisim_model.png b/img/docs/asgb/asgb_sys27a_unisim_model.png new file mode 100644 index 0000000000000000000000000000000000000000..f942625e938b079eb2ac6a5e498a39794099cde9 GIT binary patch literal 11965 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 SKPBu3fRenrT#d~8;Qs|v;%Juu literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_sys27a_unisim_model_filtered.png b/img/docs/asgb/asgb_sys27a_unisim_model_filtered.png new file mode 100644 index 0000000000000000000000000000000000000000..92d47f95f5f79e8661815a25aee13d29278c75ba GIT binary patch literal 7718 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 B;4c6G literal 0 HcmV?d00001 diff --git a/img/docs/asgb/ecalc_generic_chart_normalized.png b/img/docs/asgb/ecalc_generic_chart_normalized.png new file mode 100644 index 0000000000000000000000000000000000000000..4ec88ae6ae498faaf5224a7415f8bb720c491ae5 GIT binary patch literal 21903 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 literal 0 HcmV?d00001 diff --git a/img/docs/changed_rate_resampling.png b/img/docs/changed_rate_resampling.png new file mode 100644 index 0000000000000000000000000000000000000000..001279ea62cb0b290286ecc16b38ce1b3dbe6390 GIT binary patch literal 237031 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≷?Gu@&hmiW*naLh2w>J!Zn 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�T+RaHT_$QDCP}4Z_^s?z1jCyA| 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 F{0H{b<4^zq literal 0 HcmV?d00001 diff --git a/img/favicon.svg b/img/favicon.svg new file mode 100644 index 0000000000..f0f7816130 --- /dev/null +++ b/img/favicon.svg @@ -0,0 +1,3 @@ + + + diff --git a/img/logo.svg b/img/logo.svg new file mode 100644 index 0000000000..4dd3cb7b62 --- /dev/null +++ b/img/logo.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/img/undraw_docusaurus_mountain.svg b/img/undraw_docusaurus_mountain.svg new file mode 100644 index 0000000000..af961c49a8 --- /dev/null +++ b/img/undraw_docusaurus_mountain.svg @@ -0,0 +1,171 @@ + + Easy to Use + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/undraw_docusaurus_react.svg b/img/undraw_docusaurus_react.svg new file mode 100644 index 0000000000..94b5cf08f8 --- /dev/null +++ b/img/undraw_docusaurus_react.svg @@ -0,0 +1,170 @@ + + Powered by React + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/undraw_docusaurus_tree.svg b/img/undraw_docusaurus_tree.svg new file mode 100644 index 0000000000..d9161d3392 --- /dev/null +++ b/img/undraw_docusaurus_tree.svg @@ -0,0 +1,40 @@ + + Focus on What Matters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000000..eac7211911 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + +eCalc™ Docs + + + + +

    + + \ No newline at end of file diff --git a/search-index.json b/search-index.json new file mode 100644 index 0000000000..040e92d5a4 --- /dev/null +++ b/search-index.json @@ -0,0 +1 @@ +[{"documents":[{"i":1,"t":"API Reference","u":"/ecalc/docs/about/getting_started/","b":["Docs","Getting Started"]},{"i":8,"t":"API Reference","u":"/ecalc/docs/about/getting_started/api/","b":["Docs","Getting Started"]},{"i":10,"t":"Introduction to eCalc™","u":"/ecalc/docs/about/","b":["Docs"]},{"i":18,"t":"eCalc CLI","u":"/ecalc/docs/about/getting_started/cli/","b":["Docs","Getting Started","CLI"]},{"i":22,"t":"ecalc","u":"/ecalc/docs/about/getting_started/cli/cli_reference","b":["Docs","Getting Started","CLI"]},{"i":34,"t":"FAQ / Troubleshooting","u":"/ecalc/docs/about/getting_started/cli/faq","b":["Docs","Getting Started","CLI"]},{"i":48,"t":"Python Library","u":"/ecalc/docs/about/getting_started/library/","b":["Docs","Getting Started"]},{"i":50,"t":"YAML","u":"/ecalc/docs/about/getting_started/yaml/","b":["Docs","Getting Started"]},{"i":52,"t":"v8 to v8.1","u":"/ecalc/docs/about/migration_guides/v8_to_v81","b":["Docs","Migrating eCalc versions"]},{"i":65,"t":"Migrating eCalc versions","u":"/ecalc/docs/about/migration_guides/","b":["Docs","Migrating eCalc versions"]},{"i":66,"t":"v8.1 to v8.2","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","b":["Docs","Migrating eCalc versions"]},{"i":85,"t":"v7 to v8","u":"/ecalc/docs/about/migration_guides/v7_to_v8","b":["Docs","Migrating eCalc versions"]},{"i":94,"t":"v8.2 to v8.3","u":"/ecalc/docs/about/migration_guides/v8-2_to_v8-3","b":["Docs","Migrating eCalc versions"]},{"i":96,"t":"v8.3 to v8.4","u":"/ecalc/docs/about/migration_guides/v8-3_to_v8-4","b":["Docs","Migrating eCalc versions"]},{"i":98,"t":"v8.5 to v8.6","u":"/ecalc/docs/about/migration_guides/v8-5_to_v8-6","b":["Docs","Migrating eCalc versions"]},{"i":101,"t":"v8.6 to v8.7","u":"/ecalc/docs/about/migration_guides/v8-6_to_v8-7","b":["Docs","Migrating eCalc versions"]},{"i":103,"t":"v8.12 to v8.13","u":"/ecalc/docs/about/migration_guides/v8.12_to_v8.13","b":["Docs","Migrating eCalc versions"]},{"i":108,"t":"v8.13 to v8.14","u":"/ecalc/docs/about/migration_guides/v8.13_to_v8.14","b":["Docs","Migrating eCalc versions"]},{"i":113,"t":"v8.15 to v8.16","u":"/ecalc/docs/about/migration_guides/v8.15_to_v8.16","b":["Docs","Migrating eCalc versions"]},{"i":118,"t":"v8.22 to v8.23","u":"/ecalc/docs/about/migration_guides/v8.22_to_v8.23","b":["Docs","Migrating eCalc versions"]},{"i":125,"t":"v8.7 to v8.8","u":"/ecalc/docs/about/migration_guides/v8.7_to_v8.8","b":["Docs","Migrating eCalc versions"]},{"i":130,"t":"Output Data","u":"/ecalc/docs/about/miscellaneous/","b":["Docs"]},{"i":136,"t":"Modelling","u":"/ecalc/docs/about/modelling/","b":["Docs","Modelling Guide"]},{"i":138,"t":"Course Material","u":"/ecalc/docs/about/modelling/course_material/","b":["Docs","Modelling Guide","Course Material"]},{"i":140,"t":"Examples","u":"/ecalc/docs/about/modelling/examples/","b":["Docs","Modelling Guide","Examples"]},{"i":142,"t":"Simple model example with invalid timesteps","u":"/ecalc/docs/about/modelling/course_material/simple_invalid_timesteps","b":["Docs","Modelling Guide","Course Material"]},{"i":166,"t":"Simple model example","u":"/ecalc/docs/about/modelling/examples/simple","b":["Docs","Modelling Guide","Examples"]},{"i":190,"t":"Advanced model example with invalid timesteps","u":"/ecalc/docs/about/modelling/course_material/advanced_invalid_timesteps","b":["Docs","Modelling Guide","Course Material"]},{"i":216,"t":"Drogon model example","u":"/ecalc/docs/about/modelling/examples/drogon","b":["Docs","Modelling Guide","Examples"]},{"i":239,"t":"Set up an eCalc Model","u":"/ecalc/docs/about/modelling/setup/","b":["Docs","Modelling Guide","Setup an eCalc™ Model"]},{"i":241,"t":"Facility inputs","u":"/ecalc/docs/about/modelling/setup/facility_inputs/","b":["Docs","Modelling Guide","Setup an eCalc™ Model","Facility inputs"]},{"i":247,"t":"Generator modelling","u":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","b":["Docs","Modelling Guide","Setup an eCalc™ Model","Facility inputs"]},{"i":257,"t":"Advanced model example","u":"/ecalc/docs/about/modelling/examples/advanced","b":["Docs","Modelling Guide","Examples"]},{"i":283,"t":"Pump modelling","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/","b":["Docs","Modelling Guide","Setup an eCalc™ Model","Facility inputs","Pump modelling"]},{"i":286,"t":"Pump chart","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","b":["Docs","Modelling Guide","Setup an eCalc™ Model","Facility inputs","Pump modelling"]},{"i":303,"t":"Sampled compressor model","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","b":["Docs","Modelling Guide","Setup an eCalc™ Model","Facility inputs"]},{"i":316,"t":"Tabular models","u":"/ecalc/docs/about/modelling/setup/facility_inputs/tabular","b":["Docs","Modelling Guide","Setup an eCalc™ Model","Facility inputs"]},{"i":322,"t":"File format","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","b":["Docs","Modelling Guide","Setup an eCalc™ Model","File format and syntax"]},{"i":331,"t":"Installations","u":"/ecalc/docs/about/modelling/setup/installations/","b":["Docs","Modelling Guide","Setup an eCalc™ Model","Installations"]},{"i":346,"t":"Fuel types","u":"/ecalc/docs/about/modelling/setup/fuel_types","b":["Docs","Modelling Guide","Setup an eCalc™ Model"]},{"i":352,"t":"Compressor models in calculations","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/","b":["Docs","Modelling Guide","Setup an eCalc™ Model","Installations","Compressor models"]},{"i":354,"t":"COMPRESSOR Energy Usage Model","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor","b":["Docs","Modelling Guide","Setup an eCalc™ Model","Installations","Compressor models"]},{"i":360,"t":"COMPRESSOR_SYSTEM energy usage model","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","b":["Docs","Modelling Guide","Setup an eCalc™ Model","Installations","Compressor models"]},{"i":366,"t":"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES energy usage model","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","b":["Docs","Modelling Guide","Setup an eCalc™ Model","Installations","Compressor models"]},{"i":370,"t":"Pump models in calculations","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","b":["Docs","Modelling Guide","Setup an eCalc™ Model","Installations"]},{"i":388,"t":"DIRECT ENERGY USAGE MODEL","u":"/ecalc/docs/about/modelling/setup/installations/direct_consumers","b":["Docs","Modelling Guide","Setup an eCalc™ Model","Installations"]},{"i":390,"t":"Generator sets in calculations","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","b":["Docs","Modelling Guide","Setup an eCalc™ Model","Installations"]},{"i":409,"t":"Tabular models","u":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","b":["Docs","Modelling Guide","Setup an eCalc™ Model","Installations"]},{"i":417,"t":"Models","u":"/ecalc/docs/about/modelling/setup/models/","b":["Docs","Modelling Guide","Setup an eCalc™ Model","Models"]},{"i":423,"t":"Compressor modelling","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/","b":["Docs","Modelling Guide","Setup an eCalc™ Model","Models","Compressor modelling"]},{"i":425,"t":"Compressor train types","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/","b":["Docs","Modelling Guide","Setup an eCalc™ Model","Models","Compressor modelling","Compressor train types"]},{"i":427,"t":"Compressor chart","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","b":["Docs","Modelling Guide","Setup an eCalc™ Model","Models","Compressor modelling"]},{"i":459,"t":"Simplified variable speed compressor train","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","b":["Docs","Modelling Guide","Setup an eCalc™ Model","Models","Compressor modelling","Compressor train types"]},{"i":476,"t":"Single speed compressor train","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","b":["Docs","Modelling Guide","Setup an eCalc™ Model","Models","Compressor modelling","Compressor train types"]},{"i":480,"t":"Variable speed compressor train","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model","b":["Docs","Modelling Guide","Setup an eCalc™ Model","Models","Compressor modelling","Compressor train types"]},{"i":482,"t":"Variable speed compressor train model with multiple streams and pressures","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","b":["Docs","Modelling Guide","Setup an eCalc™ Model","Models","Compressor modelling","Compressor train types"]},{"i":494,"t":"Fixed speed pressure control","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","b":["Docs","Modelling Guide","Setup an eCalc™ Model","Models","Compressor modelling"]},{"i":503,"t":"Expressions","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","b":["Docs","Modelling Guide","Setup an eCalc™ Model","File format and syntax"]},{"i":512,"t":"Fluid model","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","b":["Docs","Modelling Guide","Setup an eCalc™ Model","Models"]},{"i":526,"t":"Time series","u":"/ecalc/docs/about/modelling/setup/time_series","b":["Docs","Modelling Guide","Setup an eCalc™ Model"]},{"i":536,"t":"Turbine modelling","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","b":["Docs","Modelling Guide","Setup an eCalc™ Model","Models"]},{"i":548,"t":"Variables","u":"/ecalc/docs/about/modelling/setup/variables","b":["Docs","Modelling Guide","Setup an eCalc™ Model"]},{"i":560,"t":"Theory","u":"/ecalc/docs/about/modelling/theory/","b":["Docs","Modelling Guide","Theory"]},{"i":562,"t":"Pump modelling","u":"/ecalc/docs/about/modelling/theory/pump_modelling","b":["Docs","Modelling Guide","Theory"]},{"i":564,"t":"eCalc™ Workflow","u":"/ecalc/docs/about/modelling/workflow/","b":["Docs","Modelling Guide","eCalc™ Workflow"]},{"i":566,"t":"Compressor modelling","u":"/ecalc/docs/about/modelling/theory/compressor_modelling","b":["Docs","Modelling Guide","Theory"]},{"i":568,"t":"Generic Workflow","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","b":["Docs","Modelling Guide","eCalc™ Workflow"]},{"i":583,"t":"Keywords","u":"/ecalc/docs/about/references/","b":["Docs","YAML Keywords"]},{"i":587,"t":"ADJUSTMENT","u":"/ecalc/docs/about/references/ADJUSTMENT","b":["Docs","YAML Keywords"]},{"i":595,"t":"CABLE_LOSS","u":"/ecalc/docs/about/references/CABLE_LOSS","b":["Docs","YAML Keywords"]},{"i":603,"t":"CALCULATE_MAX_RATE","u":"/ecalc/docs/about/references/CALCULATE_MAX_RATE","b":["Docs","YAML Keywords"]},{"i":611,"t":"CATEGORY","u":"/ecalc/docs/about/references/CATEGORY","b":["Docs","YAML Keywords"]},{"i":619,"t":"CHART_TYPE","u":"/ecalc/docs/about/references/CHART_TYPE","b":["Docs","YAML Keywords"]},{"i":626,"t":"ecalc","u":"/ecalc/docs/about/references/cli_reference","b":["Docs","YAML Keywords"]},{"i":638,"t":"COMPOSITION","u":"/ecalc/docs/about/references/COMPOSITION","b":["Docs","YAML Keywords"]},{"i":645,"t":"COMPRESSOR_MODEL","u":"/ecalc/docs/about/references/COMPRESSOR_MODEL","b":["Docs","YAML Keywords"]},{"i":653,"t":"COMPRESSOR_CHART","u":"/ecalc/docs/about/references/COMPRESSOR_CHART","b":["Docs","YAML Keywords"]},{"i":661,"t":"COMPRESSORS","u":"/ecalc/docs/about/references/COMPRESSOR_SYSTEM","b":["Docs","YAML Keywords"]},{"i":671,"t":"COMPRESSOR_TRAIN","u":"/ecalc/docs/about/references/COMPRESSOR_TRAIN","b":["Docs","YAML Keywords"]},{"i":676,"t":"CONDITION","u":"/ecalc/docs/about/references/CONDITION","b":["Docs","YAML Keywords"]},{"i":684,"t":"COMPRESSOR_TRAIN_MODEL","u":"/ecalc/docs/about/references/COMPRESSOR_TRAIN_MODEL","b":["Docs","YAML Keywords"]},{"i":692,"t":"CONDITIONS","u":"/ecalc/docs/about/references/CONDITIONS","b":["Docs","YAML Keywords"]},{"i":698,"t":"CONSTANT","u":"/ecalc/docs/about/references/CONSTANT","b":["Docs","YAML Keywords"]},{"i":706,"t":"CONSUMERS","u":"/ecalc/docs/about/references/CONSUMERS","b":["Docs","YAML Keywords"]},{"i":714,"t":"CONSUMPTION_RATE_TYPE","u":"/ecalc/docs/about/references/CONSUMPTION_RATE_TYPE","b":["Docs","YAML Keywords"]},{"i":722,"t":"CONTROL_MARGIN","u":"/ecalc/docs/about/references/CONTROL_MARGIN","b":["Docs","YAML Keywords"]},{"i":741,"t":"CROSSOVER","u":"/ecalc/docs/about/references/CROSSOVER","b":["Docs","YAML Keywords"]},{"i":747,"t":"CONTROL_MARGIN_UNIT","u":"/ecalc/docs/about/references/CONTROL_MARGIN_UNIT","b":["Docs","YAML Keywords"]},{"i":755,"t":"CURVE","u":"/ecalc/docs/about/references/CURVE","b":["Docs","YAML Keywords"]},{"i":762,"t":"DESIGN_HEAD","u":"/ecalc/docs/about/references/DESIGN_HEAD","b":["Docs","YAML Keywords"]},{"i":769,"t":"CURVES","u":"/ecalc/docs/about/references/CURVES","b":["Docs","YAML Keywords"]},{"i":776,"t":"DESIGN_RATE","u":"/ecalc/docs/about/references/DESIGN_RATE","b":["Docs","YAML Keywords"]},{"i":783,"t":"DIRECT_EMITTERS","u":"/ecalc/docs/about/references/DIRECT_EMITTERS","b":["Docs","YAML Keywords"]},{"i":791,"t":"DISCHARGE_PRESSURE","u":"/ecalc/docs/about/references/DISCHARGE_PRESSURE","b":["Docs","YAML Keywords"]},{"i":799,"t":"EFFICIENCY","u":"/ecalc/docs/about/references/EFFICIENCY","b":["Docs","YAML Keywords"]},{"i":809,"t":"ELECTRICITY2FUEL","u":"/ecalc/docs/about/references/ELECTRICITY2FUEL","b":["Docs","YAML Keywords"]},{"i":820,"t":"EMISSION_NAME","u":"/ecalc/docs/about/references/EMISSION_NAME","b":["Docs","YAML Keywords"]},{"i":828,"t":"DOWNSTREAM_PRESSURE_CONTROL","u":"/ecalc/docs/about/references/DOWNSTREAM_PRESSURE_CONTROL","b":["Docs","YAML Keywords"]},{"i":836,"t":"EMISSION_RATE","u":"/ecalc/docs/about/references/EMISSION_RATE","b":["Docs","YAML Keywords"]},{"i":844,"t":"EMITTER_MODEL","u":"/ecalc/docs/about/references/EMITTER_MODEL","b":["Docs","YAML Keywords"]},{"i":852,"t":"EMISSIONS","u":"/ecalc/docs/about/references/EMISSIONS","b":["Docs","YAML Keywords"]},{"i":873,"t":"EMISSION","u":"/ecalc/docs/about/references/EMISSION","b":["Docs","YAML Keywords"]},{"i":881,"t":"ENERGY_USAGE_MODEL","u":"/ecalc/docs/about/references/ENERGY_USAGE_MODEL","b":["Docs","YAML Keywords"]},{"i":887,"t":"EOS_MODEL","u":"/ecalc/docs/about/references/EOS_MODEL","b":["Docs","YAML Keywords"]},{"i":894,"t":"ENERGYFUNCTION","u":"/ecalc/docs/about/references/ENERGYFUNCTION","b":["Docs","YAML Keywords"]},{"i":902,"t":"END","u":"/ecalc/docs/about/references/END","b":["Docs","YAML Keywords"]},{"i":910,"t":"EXPRESSION","u":"/ecalc/docs/about/references/EXPRESSION","b":["Docs","YAML Keywords"]},{"i":918,"t":"EXTRAPOLATION","u":"/ecalc/docs/about/references/EXTRAPOLATION","b":["Docs","YAML Keywords"]},{"i":928,"t":"FACILITY_INPUTS","u":"/ecalc/docs/about/references/FACILITY_INPUTS","b":["Docs","YAML Keywords"]},{"i":934,"t":"FACTOR","u":"/ecalc/docs/about/references/FACTOR","b":["Docs","YAML Keywords"]},{"i":949,"t":"FILE","u":"/ecalc/docs/about/references/FILE","b":["Docs","YAML Keywords"]},{"i":957,"t":"FLUID_DENSITY","u":"/ecalc/docs/about/references/FLUID_DENSITY","b":["Docs","YAML Keywords"]},{"i":965,"t":"FLUID_MODEL_TYPE","u":"/ecalc/docs/about/references/FLUID_MODEL_TYPE","b":["Docs","YAML Keywords"]},{"i":972,"t":"FLUID_MODEL","u":"/ecalc/docs/about/references/FLUID_MODEL","b":["Docs","YAML Keywords"]},{"i":979,"t":"FUEL","u":"/ecalc/docs/about/references/FUEL","b":["Docs","YAML Keywords"]},{"i":987,"t":"FUEL_TYPES","u":"/ecalc/docs/about/references/FUEL_TYPES","b":["Docs","YAML Keywords"]},{"i":991,"t":"GAS_TYPE","u":"/ecalc/docs/about/references/GAS_TYPE","b":["Docs","YAML Keywords"]},{"i":998,"t":"FUELRATE","u":"/ecalc/docs/about/references/FUELRATE","b":["Docs","YAML Keywords"]},{"i":1006,"t":"FUELCONSUMERS","u":"/ecalc/docs/about/references/FUELCONSUMERS","b":["Docs","YAML Keywords"]},{"i":1014,"t":"HCEXPORT","u":"/ecalc/docs/about/references/HCEXPORT","b":["Docs","YAML Keywords"]},{"i":1027,"t":"GENERATORSETS","u":"/ecalc/docs/about/references/GENERATORSETS","b":["Docs","YAML Keywords"]},{"i":1031,"t":"HEAD_MARGIN","u":"/ecalc/docs/about/references/HEAD_MARGIN","b":["Docs","YAML Keywords"]},{"i":1039,"t":"HEAD","u":"/ecalc/docs/about/references/HEAD","b":["Docs","YAML Keywords"]},{"i":1050,"t":"!include","u":"/ecalc/docs/about/references/include","b":["Docs","YAML Keywords"]},{"i":1061,"t":"INFLUENCE_TIME_VECTOR","u":"/ecalc/docs/about/references/INFLUENCE_TIME_VECTOR","b":["Docs","YAML Keywords"]},{"i":1069,"t":"INLET_TEMPERATURE","u":"/ecalc/docs/about/references/INLET_TEMPERATURE","b":["Docs","YAML Keywords"]},{"i":1077,"t":"INSTALLATIONS","u":"/ecalc/docs/about/references/INSTALLATIONS","b":["Docs","YAML Keywords"]},{"i":1081,"t":"INTERPOLATION_TYPE","u":"/ecalc/docs/about/references/INTERPOLATION_TYPE","b":["Docs","YAML Keywords"]},{"i":1091,"t":"INTERSTAGE_CONTROL_PRESSURE","u":"/ecalc/docs/about/references/INTERSTAGE_CONTROL_PRESSURE","b":["Docs","YAML Keywords"]},{"i":1099,"t":"LOAD","u":"/ecalc/docs/about/references/LOAD","b":["Docs","YAML Keywords"]},{"i":1107,"t":"LOWER_HEATING_VALUE","u":"/ecalc/docs/about/references/LOWER_HEATING_VALUE","b":["Docs","YAML Keywords"]},{"i":1114,"t":"MAXIMUM_DISCHARGE_PRESSURE","u":"/ecalc/docs/about/references/MAXIMUM_DISCHARGE_PRESSURE","b":["Docs","YAML Keywords"]},{"i":1122,"t":"MAX_USAGE_FROM_SHORE","u":"/ecalc/docs/about/references/MAX_USAGE_FROM_SHORE","b":["Docs","YAML Keywords"]},{"i":1130,"t":"MAXIMUM_POWER","u":"/ecalc/docs/about/references/MAXIMUM_POWER","b":["Docs","YAML Keywords"]},{"i":1138,"t":"MODELS","u":"/ecalc/docs/about/references/MODELS","b":["Docs","YAML Keywords"]},{"i":1146,"t":"MAXIMUM_PRESSURE_RATIO_PER_STAGE","u":"/ecalc/docs/about/references/MAXIMUM_PRESSURE_RATIO_PER_STAGE","b":["Docs","YAML Keywords"]},{"i":1156,"t":"NAME","u":"/ecalc/docs/about/references/NAME","b":["Docs","YAML Keywords"]},{"i":1164,"t":"OPERATIONAL_SETTINGS","u":"/ecalc/docs/about/references/OPERATIONAL_SETTINGS","b":["Docs","YAML Keywords"]},{"i":1187,"t":"POLYTROPIC_EFFICIENCY","u":"/ecalc/docs/about/references/POLYTROPIC_EFFICIENCY","b":["Docs","YAML Keywords"]},{"i":1194,"t":"POWER_ADJUSTMENT_CONSTANT","u":"/ecalc/docs/about/references/POWER_ADJUSTMENT_CONSTANT","b":["Docs","YAML Keywords"]},{"i":1202,"t":"POWERLOSSFACTOR","u":"/ecalc/docs/about/references/POWERLOSSFACTOR","b":["Docs","YAML Keywords"]},{"i":1210,"t":"PRESSURE_CONTROL","u":"/ecalc/docs/about/references/PRESSURE_CONTROL","b":["Docs","YAML Keywords"]},{"i":1217,"t":"PRESSURE_DROP_AHEAD_OF_STAGE","u":"/ecalc/docs/about/references/PRESSURE_DROP_AHEAD_OF_STAGE","b":["Docs","YAML Keywords"]},{"i":1225,"t":"RATE","u":"/ecalc/docs/about/references/RATE","b":["Docs","YAML Keywords"]},{"i":1239,"t":"PUMPS","u":"/ecalc/docs/about/references/PUMPS","b":["Docs","YAML Keywords"]},{"i":1249,"t":"RATE_PER_STREAM","u":"/ecalc/docs/about/references/RATE_PER_STREAM","b":["Docs","YAML Keywords"]},{"i":1257,"t":"RATE_FRACTIONS","u":"/ecalc/docs/about/references/RATE_FRACTIONS","b":["Docs","YAML Keywords"]},{"i":1264,"t":"STAGES","u":"/ecalc/docs/about/references/STAGES","b":["Docs","YAML Keywords"]},{"i":1280,"t":"START","u":"/ecalc/docs/about/references/START","b":["Docs","YAML Keywords"]},{"i":1288,"t":"REGULARITY","u":"/ecalc/docs/about/references/REGULARITY","b":["Docs","YAML Keywords"]},{"i":1305,"t":"STREAM","u":"/ecalc/docs/about/references/STREAM","b":["Docs","YAML Keywords"]},{"i":1313,"t":"STREAMS","u":"/ecalc/docs/about/references/STREAMS","b":["Docs","YAML Keywords"]},{"i":1321,"t":"SUCTION_PRESSURE","u":"/ecalc/docs/about/references/SUCTION_PRESSURE","b":["Docs","YAML Keywords"]},{"i":1329,"t":"TIME_SERIES","u":"/ecalc/docs/about/references/TIME_SERIES","b":["Docs","YAML Keywords"]},{"i":1339,"t":"TOTAL_SYSTEM_RATE","u":"/ecalc/docs/about/references/TOTAL_SYSTEM_RATE","b":["Docs","YAML Keywords"]},{"i":1347,"t":"TURBINE_LOADS","u":"/ecalc/docs/about/references/TURBINE_LOADS","b":["Docs","YAML Keywords"]},{"i":1354,"t":"TURBINE_EFFICIENCIES","u":"/ecalc/docs/about/references/TURBINE_EFFICIENCIES","b":["Docs","YAML Keywords"]},{"i":1361,"t":"TYPE","u":"/ecalc/docs/about/references/TYPE","b":["Docs","YAML Keywords"]},{"i":1377,"t":"TURBINE_MODEL","u":"/ecalc/docs/about/references/TURBINE_MODEL","b":["Docs","YAML Keywords"]},{"i":1384,"t":"UNITS","u":"/ecalc/docs/about/references/UNITS","b":["Docs","YAML Keywords"]},{"i":1397,"t":"UNIT","u":"/ecalc/docs/about/references/UNIT","b":["Docs","YAML Keywords"]},{"i":1404,"t":"UPSTREAM_PRESSURE_CONTROL","u":"/ecalc/docs/about/references/UPSTREAM_PRESSURE_CONTROL","b":["Docs","YAML Keywords"]},{"i":1412,"t":"VARIABLES","u":"/ecalc/docs/about/references/VARIABLES","b":["Docs","YAML Keywords"]},{"i":1416,"t":"VENTING_EMITTERS","u":"/ecalc/docs/about/references/VENTING_EMITTERS","b":["Docs","YAML Keywords"]},{"i":1440,"t":"VOLUME","u":"/ecalc/docs/about/references/VOLUME","b":["Docs","YAML Keywords"]},{"i":1448,"t":"eCalc","u":"/ecalc/docs/changelog/latest","b":["Changelog"]},{"i":1455,"t":"---","u":"/ecalc/docs/changelog/separator","b":["Changelog"]},{"i":1456,"t":"eCalc v7.0","u":"/ecalc/docs/changelog/v7-0-release","b":["Changelog"]},{"i":1463,"t":"Changelog","u":"/ecalc/docs/changelog/","b":["Changelog"]},{"i":1711,"t":"eCalc v7.1","u":"/ecalc/docs/changelog/v7-1-release","b":["Changelog"]},{"i":1716,"t":"eCalc v7.3","u":"/ecalc/docs/changelog/v7-3-release","b":["Changelog"]},{"i":1721,"t":"eCalc v7.4","u":"/ecalc/docs/changelog/v7-4-release","b":["Changelog"]},{"i":1726,"t":"eCalc v7.5","u":"/ecalc/docs/changelog/v7-5-release","b":["Changelog"]},{"i":1733,"t":"eCalc v7.2","u":"/ecalc/docs/changelog/v7-2-release","b":["Changelog"]},{"i":1738,"t":"eCalc v7.6","u":"/ecalc/docs/changelog/v7-6-release","b":["Changelog"]},{"i":1741,"t":"eCalc v8.0","u":"/ecalc/docs/changelog/v8.0-release","b":["Changelog"]},{"i":1753,"t":"eCalc v8.1","u":"/ecalc/docs/changelog/v8.1-release","b":["Changelog"]},{"i":1763,"t":"eCalc","u":"/ecalc/docs/changelog/v8.11-release","b":["Changelog"]},{"i":1768,"t":"eCalc","u":"/ecalc/docs/changelog/v8.10-release","b":["Changelog"]},{"i":1773,"t":"eCalc","u":"/ecalc/docs/changelog/v8.12-release","b":["Changelog"]},{"i":1779,"t":"eCalc","u":"/ecalc/docs/changelog/v8.13-release","b":["Changelog"]},{"i":1788,"t":"eCalc","u":"/ecalc/docs/changelog/v8.14-release","b":["Changelog"]},{"i":1791,"t":"eCalc","u":"/ecalc/docs/changelog/v8.15-release","b":["Changelog"]},{"i":1794,"t":"eCalc","u":"/ecalc/docs/changelog/v8.17-release","b":["Changelog"]},{"i":1797,"t":"eCalc","u":"/ecalc/docs/changelog/v8.16-release","b":["Changelog"]},{"i":1806,"t":"eCalc","u":"/ecalc/docs/changelog/v8.18-release","b":["Changelog"]},{"i":1813,"t":"eCalc","u":"/ecalc/docs/changelog/v8.19-release","b":["Changelog"]},{"i":1818,"t":"eCalc v8.2","u":"/ecalc/docs/changelog/v8.2-release","b":["Changelog"]},{"i":1824,"t":"eCalc","u":"/ecalc/docs/changelog/v8.20-release","b":["Changelog"]},{"i":1827,"t":"eCalc v8.3","u":"/ecalc/docs/changelog/v8.3-release","b":["Changelog"]},{"i":1837,"t":"eCalc","u":"/ecalc/docs/changelog/v8.21-release","b":["Changelog"]},{"i":1842,"t":"eCalc","u":"/ecalc/docs/changelog/v8.5-release","b":["Changelog"]},{"i":1849,"t":"eCalc","u":"/ecalc/docs/changelog/v8.6-release","b":["Changelog"]},{"i":1856,"t":"eCalc","u":"/ecalc/docs/changelog/v8.4-release","b":["Changelog"]},{"i":1863,"t":"eCalc","u":"/ecalc/docs/changelog/v8.7-release","b":["Changelog"]},{"i":1870,"t":"eCalc","u":"/ecalc/docs/changelog/v8.8-release","b":["Changelog"]},{"i":1875,"t":"Get started","u":"/ecalc/docs/contribute/documentation-guide/documentation","b":["Contribute","Documentation"]},{"i":1885,"t":"Get Started","u":"/ecalc/docs/contribute/get_started","b":["Contribute"]},{"i":1907,"t":"Conventional Commits","u":"/ecalc/docs/contribute/guides/conventional_commits","b":["Contribute","Guides"]},{"i":1909,"t":"Markdown","u":"/ecalc/docs/contribute/documentation-guide/markdown","b":["Contribute","Documentation"]},{"i":1915,"t":"Git","u":"/ecalc/docs/contribute/guides/git","b":["Contribute","Guides"]}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/1",[0,3.922,1,3.922]],["t/8",[0,3.922,1,3.922]],["t/10",[2,4.379,3,1.528]],["t/18",[3,1.528,4,4.379]],["t/22",[3,2]],["t/34",[5,3.542,6,3.542,7,3.542]],["t/48",[8,4.379,9,4.379]],["t/50",[10,5.732]],["t/52",[11,3.922,12,3.622]],["t/65",[3,1.236,13,3.542,14,3.542]],["t/66",[12,3.622,15,3.622]],["t/85",[11,3.922,16,4.379]],["t/94",[15,3.622,17,3.622]],["t/96",[17,3.622,18,4.379]],["t/98",[19,4.379,20,3.922]],["t/101",[20,3.922,21,3.922]],["t/103",[22,4.379,23,3.922]],["t/108",[23,3.922,24,4.379]],["t/113",[25,4.379,26,4.379]],["t/118",[27,4.379,28,4.379]],["t/125",[21,3.922,29,4.379]],["t/130",[30,4.379,31,4.379]],["t/136",[32,2.375]],["t/138",[33,4.379,34,4.379]],["t/140",[35,4.018]],["t/142",[32,1.062,35,1.796,36,2.296,37,2.296,38,2.296]],["t/166",[32,1.467,35,2.483,36,3.173]],["t/190",[32,1.062,35,1.796,37,2.296,38,2.296,39,2.296]],["t/216",[32,1.467,35,2.483,40,3.542]],["t/239",[3,1.038,32,1.232,41,2.664,42,2.974]],["t/241",[43,4.379,44,4.379]],["t/247",[32,1.814,45,3.622]],["t/257",[32,1.467,35,2.483,39,3.173]],["t/283",[32,1.814,46,3.218]],["t/286",[46,3.218,47,3.922]],["t/303",[32,1.467,48,3.542,49,2.01]],["t/316",[32,1.814,50,3.922]],["t/322",[51,3.922,52,4.379]],["t/331",[53,5.135]],["t/346",[54,3.922,55,3.622]],["t/352",[32,1.467,49,2.01,56,2.93]],["t/354",[32,1.232,49,1.688,57,2.308,58,2.308]],["t/360",[32,1.232,57,2.308,58,2.308,59,2.974]],["t/366",[32,1.232,57,2.308,58,2.308,60,2.974]],["t/370",[32,1.467,46,2.604,56,2.93]],["t/388",[32,1.232,57,2.308,58,2.308,61,2.974]],["t/390",[41,3.173,45,2.93,56,2.93]],["t/409",[32,1.814,50,3.922]],["t/417",[32,2.375]],["t/423",[32,1.814,49,2.485]],["t/425",[49,2.01,55,2.93,62,2.604]],["t/427",[47,3.922,49,2.485]],["t/459",[49,1.455,62,1.884,63,2.563,64,1.884,65,1.884]],["t/476",[49,1.688,62,2.186,65,2.186,66,2.974]],["t/480",[49,1.688,62,2.186,64,2.186,65,2.186]],["t/482",[32,0.751,49,1.028,62,1.332,64,1.332,65,1.332,67,1.812,68,1.499,69,1.623]],["t/494",[65,2.186,69,2.664,70,2.974,71,2.974]],["t/503",[72,5.135]],["t/512",[32,1.814,73,4.379]],["t/526",[74,4.379,75,4.379]],["t/536",[32,1.814,76,4.379]],["t/548",[64,4.213]],["t/560",[77,5.732]],["t/562",[32,1.814,46,3.218]],["t/564",[3,1.528,78,3.922]],["t/566",[32,1.814,49,2.485]],["t/568",[45,3.622,78,3.922]],["t/583",[79,5.732]],["t/587",[80,5.732]],["t/595",[81,5.732]],["t/603",[82,5.732]],["t/611",[83,5.732]],["t/619",[84,5.732]],["t/626",[3,2]],["t/638",[85,5.732]],["t/645",[86,5.732]],["t/653",[87,5.732]],["t/661",[49,3.253]],["t/671",[88,5.732]],["t/676",[89,5.135]],["t/684",[90,5.732]],["t/692",[89,5.135]],["t/698",[91,5.732]],["t/706",[92,5.732]],["t/714",[93,5.732]],["t/722",[94,5.732]],["t/741",[95,5.732]],["t/747",[96,5.732]],["t/755",[97,5.135]],["t/762",[98,5.732]],["t/769",[97,5.135]],["t/776",[99,5.732]],["t/783",[100,5.732]],["t/791",[101,5.732]],["t/799",[102,5.732]],["t/809",[103,5.732]],["t/820",[104,5.732]],["t/828",[105,5.732]],["t/836",[106,5.732]],["t/844",[107,5.732]],["t/852",[108,5.135]],["t/873",[108,5.135]],["t/881",[109,5.732]],["t/887",[110,5.732]],["t/894",[111,5.732]],["t/902",[112,5.732]],["t/910",[72,5.135]],["t/918",[113,5.732]],["t/928",[114,5.732]],["t/934",[115,5.732]],["t/949",[51,5.135]],["t/957",[116,5.732]],["t/965",[117,5.732]],["t/972",[118,5.732]],["t/979",[54,5.135]],["t/987",[119,5.732]],["t/991",[120,5.732]],["t/998",[121,5.732]],["t/1006",[122,5.732]],["t/1014",[123,5.732]],["t/1027",[124,5.732]],["t/1031",[125,5.732]],["t/1039",[126,5.732]],["t/1050",[127,5.732]],["t/1061",[128,5.732]],["t/1069",[129,5.732]],["t/1077",[53,5.135]],["t/1081",[130,5.732]],["t/1091",[131,5.732]],["t/1099",[132,5.732]],["t/1107",[133,5.732]],["t/1114",[134,5.732]],["t/1122",[135,5.732]],["t/1130",[136,5.732]],["t/1138",[32,2.375]],["t/1146",[137,5.732]],["t/1156",[138,5.732]],["t/1164",[139,5.732]],["t/1187",[140,5.732]],["t/1194",[141,5.732]],["t/1202",[142,5.732]],["t/1210",[143,5.732]],["t/1217",[144,5.732]],["t/1225",[145,5.732]],["t/1239",[46,4.213]],["t/1249",[146,5.732]],["t/1257",[147,5.732]],["t/1264",[148,5.732]],["t/1280",[149,4.742]],["t/1288",[150,5.732]],["t/1305",[68,4.742]],["t/1313",[68,4.742]],["t/1321",[151,5.732]],["t/1329",[152,5.732]],["t/1339",[153,5.732]],["t/1347",[154,5.732]],["t/1354",[155,5.732]],["t/1361",[55,4.742]],["t/1377",[156,5.732]],["t/1384",[157,5.135]],["t/1397",[157,5.135]],["t/1404",[158,5.732]],["t/1412",[64,4.213]],["t/1416",[159,5.732]],["t/1440",[160,5.732]],["t/1448",[3,2]],["t/1455",[]],["t/1456",[3,1.528,161,4.379]],["t/1463",[162,5.732]],["t/1711",[3,1.528,163,4.379]],["t/1716",[3,1.528,164,4.379]],["t/1721",[3,1.528,165,4.379]],["t/1726",[3,1.528,166,4.379]],["t/1733",[3,1.528,167,4.379]],["t/1738",[3,1.528,168,4.379]],["t/1741",[3,1.528,169,4.379]],["t/1753",[3,1.528,12,3.622]],["t/1763",[3,2]],["t/1768",[3,2]],["t/1773",[3,2]],["t/1779",[3,2]],["t/1788",[3,2]],["t/1791",[3,2]],["t/1794",[3,2]],["t/1797",[3,2]],["t/1806",[3,2]],["t/1813",[3,2]],["t/1818",[3,1.528,15,3.622]],["t/1824",[3,2]],["t/1827",[3,1.528,17,3.622]],["t/1837",[3,2]],["t/1842",[3,2]],["t/1849",[3,2]],["t/1856",[3,2]],["t/1863",[3,2]],["t/1870",[3,2]],["t/1875",[149,4.742]],["t/1885",[149,4.742]],["t/1907",[170,4.379,171,4.379]],["t/1909",[172,5.732]],["t/1915",[173,5.732]]],"invertedIndex":[["",{"_index":6,"t":{"34":{"position":[[4,1]]}}}],["adjust",{"_index":80,"t":{"587":{"position":[[0,10]]}}}],["advanc",{"_index":39,"t":{"190":{"position":[[0,8]]},"257":{"position":[[0,8]]}}}],["api",{"_index":0,"t":{"1":{"position":[[0,3]]},"8":{"position":[[0,3]]}}}],["cable_loss",{"_index":81,"t":{"595":{"position":[[0,10]]}}}],["calcul",{"_index":56,"t":{"352":{"position":[[21,12]]},"370":{"position":[[15,12]]},"390":{"position":[[18,12]]}}}],["calculate_max_r",{"_index":82,"t":{"603":{"position":[[0,18]]}}}],["categori",{"_index":83,"t":{"611":{"position":[[0,8]]}}}],["changelog",{"_index":162,"t":{"1463":{"position":[[0,9]]}}}],["chart",{"_index":47,"t":{"286":{"position":[[5,5]]},"427":{"position":[[11,5]]}}}],["chart_typ",{"_index":84,"t":{"619":{"position":[[0,10]]}}}],["cli",{"_index":4,"t":{"18":{"position":[[6,3]]}}}],["commit",{"_index":171,"t":{"1907":{"position":[[13,7]]}}}],["composit",{"_index":85,"t":{"638":{"position":[[0,11]]}}}],["compressor",{"_index":49,"t":{"303":{"position":[[8,10]]},"352":{"position":[[0,10]]},"354":{"position":[[0,10]]},"423":{"position":[[0,10]]},"425":{"position":[[0,10]]},"427":{"position":[[0,10]]},"459":{"position":[[26,10]]},"476":{"position":[[13,10]]},"480":{"position":[[15,10]]},"482":{"position":[[15,10]]},"566":{"position":[[0,10]]},"661":{"position":[[0,11]]}}}],["compressor_chart",{"_index":87,"t":{"653":{"position":[[0,16]]}}}],["compressor_model",{"_index":86,"t":{"645":{"position":[[0,16]]}}}],["compressor_system",{"_index":59,"t":{"360":{"position":[[0,17]]}}}],["compressor_train",{"_index":88,"t":{"671":{"position":[[0,16]]}}}],["compressor_train_model",{"_index":90,"t":{"684":{"position":[[0,22]]}}}],["condit",{"_index":89,"t":{"676":{"position":[[0,9]]},"692":{"position":[[0,10]]}}}],["constant",{"_index":91,"t":{"698":{"position":[[0,8]]}}}],["consum",{"_index":92,"t":{"706":{"position":[[0,9]]}}}],["consumption_rate_typ",{"_index":93,"t":{"714":{"position":[[0,21]]}}}],["control",{"_index":71,"t":{"494":{"position":[[21,7]]}}}],["control_margin",{"_index":94,"t":{"722":{"position":[[0,14]]}}}],["control_margin_unit",{"_index":96,"t":{"747":{"position":[[0,19]]}}}],["convent",{"_index":170,"t":{"1907":{"position":[[0,12]]}}}],["cours",{"_index":33,"t":{"138":{"position":[[0,6]]}}}],["crossov",{"_index":95,"t":{"741":{"position":[[0,9]]}}}],["curv",{"_index":97,"t":{"755":{"position":[[0,5]]},"769":{"position":[[0,6]]}}}],["data",{"_index":31,"t":{"130":{"position":[[7,4]]}}}],["design_head",{"_index":98,"t":{"762":{"position":[[0,11]]}}}],["design_r",{"_index":99,"t":{"776":{"position":[[0,11]]}}}],["direct",{"_index":61,"t":{"388":{"position":[[0,6]]}}}],["direct_emitt",{"_index":100,"t":{"783":{"position":[[0,15]]}}}],["discharge_pressur",{"_index":101,"t":{"791":{"position":[[0,18]]}}}],["downstream_pressure_control",{"_index":105,"t":{"828":{"position":[[0,27]]}}}],["drogon",{"_index":40,"t":{"216":{"position":[[0,6]]}}}],["ecalc",{"_index":3,"t":{"10":{"position":[[16,6]]},"18":{"position":[[0,5]]},"22":{"position":[[0,5]]},"65":{"position":[[10,5]]},"239":{"position":[[10,5]]},"564":{"position":[[0,6]]},"626":{"position":[[0,5]]},"1448":{"position":[[0,5]]},"1456":{"position":[[0,5]]},"1711":{"position":[[0,5]]},"1716":{"position":[[0,5]]},"1721":{"position":[[0,5]]},"1726":{"position":[[0,5]]},"1733":{"position":[[0,5]]},"1738":{"position":[[0,5]]},"1741":{"position":[[0,5]]},"1753":{"position":[[0,5]]},"1763":{"position":[[0,5]]},"1768":{"position":[[0,5]]},"1773":{"position":[[0,5]]},"1779":{"position":[[0,5]]},"1788":{"position":[[0,5]]},"1791":{"position":[[0,5]]},"1794":{"position":[[0,5]]},"1797":{"position":[[0,5]]},"1806":{"position":[[0,5]]},"1813":{"position":[[0,5]]},"1818":{"position":[[0,5]]},"1824":{"position":[[0,5]]},"1827":{"position":[[0,5]]},"1837":{"position":[[0,5]]},"1842":{"position":[[0,5]]},"1849":{"position":[[0,5]]},"1856":{"position":[[0,5]]},"1863":{"position":[[0,5]]},"1870":{"position":[[0,5]]}}}],["effici",{"_index":102,"t":{"799":{"position":[[0,10]]}}}],["electricity2fuel",{"_index":103,"t":{"809":{"position":[[0,16]]}}}],["emiss",{"_index":108,"t":{"852":{"position":[[0,9]]},"873":{"position":[[0,8]]}}}],["emission_nam",{"_index":104,"t":{"820":{"position":[[0,13]]}}}],["emission_r",{"_index":106,"t":{"836":{"position":[[0,13]]}}}],["emitter_model",{"_index":107,"t":{"844":{"position":[[0,13]]}}}],["end",{"_index":112,"t":{"902":{"position":[[0,3]]}}}],["energi",{"_index":57,"t":{"354":{"position":[[11,6]]},"360":{"position":[[18,6]]},"366":{"position":[[63,6]]},"388":{"position":[[7,6]]}}}],["energy_usage_model",{"_index":109,"t":{"881":{"position":[[0,18]]}}}],["energyfunct",{"_index":111,"t":{"894":{"position":[[0,14]]}}}],["eos_model",{"_index":110,"t":{"887":{"position":[[0,9]]}}}],["exampl",{"_index":35,"t":{"140":{"position":[[0,8]]},"142":{"position":[[13,7]]},"166":{"position":[[13,7]]},"190":{"position":[[15,7]]},"216":{"position":[[13,7]]},"257":{"position":[[15,7]]}}}],["express",{"_index":72,"t":{"503":{"position":[[0,11]]},"910":{"position":[[0,10]]}}}],["extrapol",{"_index":113,"t":{"918":{"position":[[0,13]]}}}],["facil",{"_index":43,"t":{"241":{"position":[[0,8]]}}}],["facility_input",{"_index":114,"t":{"928":{"position":[[0,15]]}}}],["factor",{"_index":115,"t":{"934":{"position":[[0,6]]}}}],["faq",{"_index":5,"t":{"34":{"position":[[0,3]]}}}],["file",{"_index":51,"t":{"322":{"position":[[0,4]]},"949":{"position":[[0,4]]}}}],["fix",{"_index":70,"t":{"494":{"position":[[0,5]]}}}],["fluid",{"_index":73,"t":{"512":{"position":[[0,5]]}}}],["fluid_dens",{"_index":116,"t":{"957":{"position":[[0,13]]}}}],["fluid_model",{"_index":118,"t":{"972":{"position":[[0,11]]}}}],["fluid_model_typ",{"_index":117,"t":{"965":{"position":[[0,16]]}}}],["format",{"_index":52,"t":{"322":{"position":[[5,6]]}}}],["fuel",{"_index":54,"t":{"346":{"position":[[0,4]]},"979":{"position":[[0,4]]}}}],["fuel_typ",{"_index":119,"t":{"987":{"position":[[0,10]]}}}],["fuelconsum",{"_index":122,"t":{"1006":{"position":[[0,13]]}}}],["fuelrat",{"_index":121,"t":{"998":{"position":[[0,8]]}}}],["gas_typ",{"_index":120,"t":{"991":{"position":[[0,8]]}}}],["gener",{"_index":45,"t":{"247":{"position":[[0,9]]},"390":{"position":[[0,9]]},"568":{"position":[[0,7]]}}}],["generatorset",{"_index":124,"t":{"1027":{"position":[[0,13]]}}}],["git",{"_index":173,"t":{"1915":{"position":[[0,3]]}}}],["hcexport",{"_index":123,"t":{"1014":{"position":[[0,8]]}}}],["head",{"_index":126,"t":{"1039":{"position":[[0,4]]}}}],["head_margin",{"_index":125,"t":{"1031":{"position":[[0,11]]}}}],["includ",{"_index":127,"t":{"1050":{"position":[[0,8]]}}}],["influence_time_vector",{"_index":128,"t":{"1061":{"position":[[0,21]]}}}],["inlet_temperatur",{"_index":129,"t":{"1069":{"position":[[0,17]]}}}],["input",{"_index":44,"t":{"241":{"position":[[9,6]]}}}],["instal",{"_index":53,"t":{"331":{"position":[[0,13]]},"1077":{"position":[[0,13]]}}}],["interpolation_typ",{"_index":130,"t":{"1081":{"position":[[0,18]]}}}],["interstage_control_pressur",{"_index":131,"t":{"1091":{"position":[[0,27]]}}}],["introduct",{"_index":2,"t":{"10":{"position":[[0,12]]}}}],["invalid",{"_index":37,"t":{"142":{"position":[[26,7]]},"190":{"position":[[28,7]]}}}],["keyword",{"_index":79,"t":{"583":{"position":[[0,8]]}}}],["librari",{"_index":9,"t":{"48":{"position":[[7,7]]}}}],["load",{"_index":132,"t":{"1099":{"position":[[0,4]]}}}],["lower_heating_valu",{"_index":133,"t":{"1107":{"position":[[0,19]]}}}],["markdown",{"_index":172,"t":{"1909":{"position":[[0,8]]}}}],["materi",{"_index":34,"t":{"138":{"position":[[7,8]]}}}],["max_usage_from_shor",{"_index":135,"t":{"1122":{"position":[[0,20]]}}}],["maximum_discharge_pressur",{"_index":134,"t":{"1114":{"position":[[0,26]]}}}],["maximum_pow",{"_index":136,"t":{"1130":{"position":[[0,13]]}}}],["maximum_pressure_ratio_per_stag",{"_index":137,"t":{"1146":{"position":[[0,32]]}}}],["migrat",{"_index":13,"t":{"65":{"position":[[0,9]]}}}],["model",{"_index":32,"t":{"136":{"position":[[0,9]]},"142":{"position":[[7,5]]},"166":{"position":[[7,5]]},"190":{"position":[[9,5]]},"216":{"position":[[7,5]]},"239":{"position":[[16,5]]},"247":{"position":[[10,9]]},"257":{"position":[[9,5]]},"283":{"position":[[5,9]]},"303":{"position":[[19,5]]},"316":{"position":[[8,6]]},"352":{"position":[[11,6]]},"354":{"position":[[24,5]]},"360":{"position":[[31,5]]},"366":{"position":[[76,5]]},"370":{"position":[[5,6]]},"388":{"position":[[20,5]]},"409":{"position":[[8,6]]},"417":{"position":[[0,6]]},"423":{"position":[[11,9]]},"482":{"position":[[32,5]]},"512":{"position":[[6,5]]},"536":{"position":[[8,9]]},"562":{"position":[[5,9]]},"566":{"position":[[11,9]]},"1138":{"position":[[0,6]]}}}],["multipl",{"_index":67,"t":{"482":{"position":[[43,8]]}}}],["name",{"_index":138,"t":{"1156":{"position":[[0,4]]}}}],["operational_set",{"_index":139,"t":{"1164":{"position":[[0,20]]}}}],["output",{"_index":30,"t":{"130":{"position":[[0,6]]}}}],["polytropic_effici",{"_index":140,"t":{"1187":{"position":[[0,21]]}}}],["power_adjustment_const",{"_index":141,"t":{"1194":{"position":[[0,25]]}}}],["powerlossfactor",{"_index":142,"t":{"1202":{"position":[[0,15]]}}}],["pressur",{"_index":69,"t":{"482":{"position":[[64,9]]},"494":{"position":[[12,8]]}}}],["pressure_control",{"_index":143,"t":{"1210":{"position":[[0,16]]}}}],["pressure_drop_ahead_of_stag",{"_index":144,"t":{"1217":{"position":[[0,28]]}}}],["pump",{"_index":46,"t":{"283":{"position":[[0,4]]},"286":{"position":[[0,4]]},"370":{"position":[[0,4]]},"562":{"position":[[0,4]]},"1239":{"position":[[0,5]]}}}],["python",{"_index":8,"t":{"48":{"position":[[0,6]]}}}],["rate",{"_index":145,"t":{"1225":{"position":[[0,4]]}}}],["rate_fract",{"_index":147,"t":{"1257":{"position":[[0,14]]}}}],["rate_per_stream",{"_index":146,"t":{"1249":{"position":[[0,15]]}}}],["refer",{"_index":1,"t":{"1":{"position":[[4,9]]},"8":{"position":[[4,9]]}}}],["regular",{"_index":150,"t":{"1288":{"position":[[0,10]]}}}],["sampl",{"_index":48,"t":{"303":{"position":[[0,7]]}}}],["seri",{"_index":75,"t":{"526":{"position":[[5,6]]}}}],["set",{"_index":41,"t":{"239":{"position":[[0,3]]},"390":{"position":[[10,4]]}}}],["simpl",{"_index":36,"t":{"142":{"position":[[0,6]]},"166":{"position":[[0,6]]}}}],["simplifi",{"_index":63,"t":{"459":{"position":[[0,10]]}}}],["singl",{"_index":66,"t":{"476":{"position":[[0,6]]}}}],["speed",{"_index":65,"t":{"459":{"position":[[20,5]]},"476":{"position":[[7,5]]},"480":{"position":[[9,5]]},"482":{"position":[[9,5]]},"494":{"position":[[6,5]]}}}],["stage",{"_index":148,"t":{"1264":{"position":[[0,6]]}}}],["start",{"_index":149,"t":{"1280":{"position":[[0,5]]},"1875":{"position":[[4,7]]},"1885":{"position":[[4,7]]}}}],["stream",{"_index":68,"t":{"482":{"position":[[52,7]]},"1305":{"position":[[0,6]]},"1313":{"position":[[0,7]]}}}],["suction_pressur",{"_index":151,"t":{"1321":{"position":[[0,16]]}}}],["tabular",{"_index":50,"t":{"316":{"position":[[0,7]]},"409":{"position":[[0,7]]}}}],["theori",{"_index":77,"t":{"560":{"position":[[0,6]]}}}],["time",{"_index":74,"t":{"526":{"position":[[0,4]]}}}],["time_seri",{"_index":152,"t":{"1329":{"position":[[0,11]]}}}],["timestep",{"_index":38,"t":{"142":{"position":[[34,9]]},"190":{"position":[[36,9]]}}}],["total_system_r",{"_index":153,"t":{"1339":{"position":[[0,17]]}}}],["train",{"_index":62,"t":{"425":{"position":[[11,5]]},"459":{"position":[[37,5]]},"476":{"position":[[24,5]]},"480":{"position":[[26,5]]},"482":{"position":[[26,5]]}}}],["troubleshoot",{"_index":7,"t":{"34":{"position":[[6,15]]}}}],["turbin",{"_index":76,"t":{"536":{"position":[[0,7]]}}}],["turbine_effici",{"_index":155,"t":{"1354":{"position":[[0,20]]}}}],["turbine_load",{"_index":154,"t":{"1347":{"position":[[0,13]]}}}],["turbine_model",{"_index":156,"t":{"1377":{"position":[[0,13]]}}}],["type",{"_index":55,"t":{"346":{"position":[[5,5]]},"425":{"position":[[17,5]]},"1361":{"position":[[0,4]]}}}],["unit",{"_index":157,"t":{"1384":{"position":[[0,5]]},"1397":{"position":[[0,4]]}}}],["up",{"_index":42,"t":{"239":{"position":[[4,2]]}}}],["upstream_pressure_control",{"_index":158,"t":{"1404":{"position":[[0,25]]}}}],["usag",{"_index":58,"t":{"354":{"position":[[18,5]]},"360":{"position":[[25,5]]},"366":{"position":[[70,5]]},"388":{"position":[[14,5]]}}}],["v7",{"_index":16,"t":{"85":{"position":[[0,2]]}}}],["v7.0",{"_index":161,"t":{"1456":{"position":[[6,4]]}}}],["v7.1",{"_index":163,"t":{"1711":{"position":[[6,4]]}}}],["v7.2",{"_index":167,"t":{"1733":{"position":[[6,4]]}}}],["v7.3",{"_index":164,"t":{"1716":{"position":[[6,4]]}}}],["v7.4",{"_index":165,"t":{"1721":{"position":[[6,4]]}}}],["v7.5",{"_index":166,"t":{"1726":{"position":[[6,4]]}}}],["v7.6",{"_index":168,"t":{"1738":{"position":[[6,4]]}}}],["v8",{"_index":11,"t":{"52":{"position":[[0,2]]},"85":{"position":[[6,2]]}}}],["v8.0",{"_index":169,"t":{"1741":{"position":[[6,4]]}}}],["v8.1",{"_index":12,"t":{"52":{"position":[[6,4]]},"66":{"position":[[0,4]]},"1753":{"position":[[6,4]]}}}],["v8.12",{"_index":22,"t":{"103":{"position":[[0,5]]}}}],["v8.13",{"_index":23,"t":{"103":{"position":[[9,5]]},"108":{"position":[[0,5]]}}}],["v8.14",{"_index":24,"t":{"108":{"position":[[9,5]]}}}],["v8.15",{"_index":25,"t":{"113":{"position":[[0,5]]}}}],["v8.16",{"_index":26,"t":{"113":{"position":[[9,5]]}}}],["v8.2",{"_index":15,"t":{"66":{"position":[[8,4]]},"94":{"position":[[0,4]]},"1818":{"position":[[6,4]]}}}],["v8.22",{"_index":27,"t":{"118":{"position":[[0,5]]}}}],["v8.23",{"_index":28,"t":{"118":{"position":[[9,5]]}}}],["v8.3",{"_index":17,"t":{"94":{"position":[[8,4]]},"96":{"position":[[0,4]]},"1827":{"position":[[6,4]]}}}],["v8.4",{"_index":18,"t":{"96":{"position":[[8,4]]}}}],["v8.5",{"_index":19,"t":{"98":{"position":[[0,4]]}}}],["v8.6",{"_index":20,"t":{"98":{"position":[[8,4]]},"101":{"position":[[0,4]]}}}],["v8.7",{"_index":21,"t":{"101":{"position":[[8,4]]},"125":{"position":[[0,4]]}}}],["v8.8",{"_index":29,"t":{"125":{"position":[[8,4]]}}}],["variabl",{"_index":64,"t":{"459":{"position":[[11,8]]},"480":{"position":[[0,8]]},"482":{"position":[[0,8]]},"548":{"position":[[0,9]]},"1412":{"position":[[0,9]]}}}],["variable_speed_compressor_train_multiple_streams_and_pressur",{"_index":60,"t":{"366":{"position":[[0,62]]}}}],["venting_emitt",{"_index":159,"t":{"1416":{"position":[[0,16]]}}}],["version",{"_index":14,"t":{"65":{"position":[[16,8]]}}}],["volum",{"_index":160,"t":{"1440":{"position":[[0,6]]}}}],["workflow",{"_index":78,"t":{"564":{"position":[[7,8]]},"568":{"position":[[8,8]]}}}],["yaml",{"_index":10,"t":{"50":{"position":[[0,4]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":3,"t":"What method should I choose?","u":"/ecalc/docs/about/getting_started/","h":"#what-method-should-i-choose","p":1},{"i":4,"t":"eCalc CLI","u":"/ecalc/docs/about/getting_started/","h":"#ecalc-cli","p":1},{"i":6,"t":"Python Library","u":"/ecalc/docs/about/getting_started/","h":"#python-library","p":1},{"i":12,"t":"What is eCalc™?","u":"/ecalc/docs/about/","h":"#what-is-ecalc","p":10},{"i":14,"t":"Why should I use eCalc™?","u":"/ecalc/docs/about/","h":"#why-should-i-use-ecalc","p":10},{"i":16,"t":"How to use eCalc™?","u":"/ecalc/docs/about/","h":"#how-to-use-ecalc","p":10},{"i":20,"t":"Example Usage","u":"/ecalc/docs/about/getting_started/cli/","h":"#example-usage","p":18},{"i":24,"t":"ecalc run","u":"/ecalc/docs/about/getting_started/cli/cli_reference","h":"#ecalc-run","p":22},{"i":26,"t":"ecalc selftest","u":"/ecalc/docs/about/getting_started/cli/cli_reference","h":"#ecalc-selftest","p":22},{"i":28,"t":"ecalc show","u":"/ecalc/docs/about/getting_started/cli/cli_reference","h":"#ecalc-show","p":22},{"i":30,"t":"ecalc show results","u":"/ecalc/docs/about/getting_started/cli/cli_reference","h":"#ecalc-show-results","p":22},{"i":32,"t":"ecalc show yaml","u":"/ecalc/docs/about/getting_started/cli/cli_reference","h":"#ecalc-show-yaml","p":22},{"i":36,"t":"Indentation errors","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#indentation-errors","p":34},{"i":38,"t":"Error messages due to YAML read problems","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#error-messages-due-to-yaml-read-problems","p":34},{"i":40,"t":"Error messages due to invalid eCalc configuration","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#error-messages-due-to-invalid-ecalc-configuration","p":34},{"i":42,"t":"Proposed solution","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#proposed-solution","p":34},{"i":44,"t":"Special characters in Unicode","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#special-characters-in-unicode","p":34},{"i":46,"t":"Proposed solution","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#proposed-solution-1","p":34},{"i":54,"t":"Yaml migration","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#yaml-migration","p":52},{"i":55,"t":"Migration overview","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#migration-overview","p":52},{"i":57,"t":"1. Changes to TIME_SERIES","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#1-changes-to-time_series","p":52},{"i":59,"t":"2. Not possible to have different interpolation types for vectors within one file","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#2-not-possible-to-have-different-interpolation-types-for-vectors-within-one-file","p":52},{"i":61,"t":"3. Empty data in time series columns no longer allowed","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#3-empty-data-in-time-series-columns-no-longer-allowed","p":52},{"i":63,"t":"4. New LTP Category: STEAM-TURBINE-GENERATOR","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#4--new-ltp-category-steam-turbine-generator","p":52},{"i":68,"t":"Modelling","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#modelling","p":66},{"i":69,"t":"YAML","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#yaml","p":66},{"i":71,"t":"Result","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#result","p":66},{"i":72,"t":"Operational settings used is now 1-based","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#operational-settings-used-is-now-1-based","p":66},{"i":74,"t":"Resampling of rates changed from forward filling to average rates","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#resampling-of-rates-changed-from-forward-filling-to-average-rates","p":66},{"i":76,"t":"LTP .tsv file","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#ltp-tsv-file","p":66},{"i":78,"t":"STP .tsv file","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#stp-tsv-file","p":66},{"i":80,"t":"Emissions, structure and order","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#emissions-structure-and-order","p":66},{"i":82,"t":"Behaviour","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#behaviour","p":66},{"i":83,"t":"Conditions","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#conditions","p":66},{"i":87,"t":"Yaml migration","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"#yaml-migration","p":85},{"i":88,"t":"Migration overview","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"#migration-overview","p":85},{"i":90,"t":"Main differences","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"#main-differences","p":85},{"i":92,"t":"CLI migration","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"#cli-migration","p":85},{"i":99,"t":"Economics","u":"/ecalc/docs/about/migration_guides/v8-5_to_v8-6","h":"#economics","p":98},{"i":105,"t":"Yaml migration","u":"/ecalc/docs/about/migration_guides/v8.12_to_v8.13","h":"#yaml-migration","p":103},{"i":106,"t":"1. Changes to VENTING_EMITTERS","u":"/ecalc/docs/about/migration_guides/v8.12_to_v8.13","h":"#1-changes-to-venting_emitters","p":103},{"i":110,"t":"Yaml migration","u":"/ecalc/docs/about/migration_guides/v8.13_to_v8.14","h":"#yaml-migration","p":108},{"i":111,"t":"1. New feature for GENERATORSETS","u":"/ecalc/docs/about/migration_guides/v8.13_to_v8.14","h":"#1-new-feature-for-generatorsets","p":108},{"i":115,"t":"Yaml migration","u":"/ecalc/docs/about/migration_guides/v8.15_to_v8.16","h":"#yaml-migration","p":113},{"i":116,"t":"1. Changes in unit-format for venting emitters","u":"/ecalc/docs/about/migration_guides/v8.15_to_v8.16","h":"#1-changes-in-unit-format-for-venting-emitters","p":113},{"i":120,"t":"Yaml migration","u":"/ecalc/docs/about/migration_guides/v8.22_to_v8.23","h":"#yaml-migration","p":118},{"i":121,"t":"Migration overview","u":"/ecalc/docs/about/migration_guides/v8.22_to_v8.23","h":"#migration-overview","p":118},{"i":123,"t":"1. Changes to COMPOSITION","u":"/ecalc/docs/about/migration_guides/v8.22_to_v8.23","h":"#1-changes-to-composition","p":118},{"i":127,"t":"Yaml migration","u":"/ecalc/docs/about/migration_guides/v8.7_to_v8.8","h":"#yaml-migration","p":125},{"i":128,"t":"1. Changes to VENTING_EMITTERS","u":"/ecalc/docs/about/migration_guides/v8.7_to_v8.8","h":"#1-changes-to-venting_emitters","p":125},{"i":132,"t":"Decimals and significant digits in eCalc","u":"/ecalc/docs/about/miscellaneous/","h":"#decimals-and-significant-digits-in-ecalc","p":130},{"i":134,"t":"Quality control","u":"/ecalc/docs/about/miscellaneous/","h":"#quality-control","p":130},{"i":144,"t":"YAML model overview","u":"/ecalc/docs/about/modelling/course_material/simple_invalid_timesteps","h":"#yaml-model-overview","p":142},{"i":146,"t":"TIME_SERIES","u":"/ecalc/docs/about/modelling/course_material/simple_invalid_timesteps","h":"#time_series","p":142},{"i":148,"t":"FACILITY_INPUTS","u":"/ecalc/docs/about/modelling/course_material/simple_invalid_timesteps","h":"#facility_inputs","p":142},{"i":150,"t":"FUEL_TYPES","u":"/ecalc/docs/about/modelling/course_material/simple_invalid_timesteps","h":"#fuel_types","p":142},{"i":152,"t":"VARIABLES","u":"/ecalc/docs/about/modelling/course_material/simple_invalid_timesteps","h":"#variables","p":142},{"i":154,"t":"INSTALLATION","u":"/ecalc/docs/about/modelling/course_material/simple_invalid_timesteps","h":"#installation","p":142},{"i":156,"t":"GENERATORSETS","u":"/ecalc/docs/about/modelling/course_material/simple_invalid_timesteps","h":"#generatorsets","p":142},{"i":158,"t":"FUELCONSUMERS","u":"/ecalc/docs/about/modelling/course_material/simple_invalid_timesteps","h":"#fuelconsumers","p":142},{"i":160,"t":"ENERGY_USAGE_MODEL","u":"/ecalc/docs/about/modelling/course_material/simple_invalid_timesteps","h":"#energy_usage_model","p":142},{"i":162,"t":"Full eCalc YAML model","u":"/ecalc/docs/about/modelling/course_material/simple_invalid_timesteps","h":"#full-ecalc-yaml-model","p":142},{"i":164,"t":"Input files","u":"/ecalc/docs/about/modelling/course_material/simple_invalid_timesteps","h":"#input-files","p":142},{"i":168,"t":"YAML model overview","u":"/ecalc/docs/about/modelling/examples/simple","h":"#yaml-model-overview","p":166},{"i":170,"t":"TIME_SERIES","u":"/ecalc/docs/about/modelling/examples/simple","h":"#time_series","p":166},{"i":172,"t":"FACILITY_INPUTS","u":"/ecalc/docs/about/modelling/examples/simple","h":"#facility_inputs","p":166},{"i":174,"t":"FUEL_TYPES","u":"/ecalc/docs/about/modelling/examples/simple","h":"#fuel_types","p":166},{"i":176,"t":"VARIABLES","u":"/ecalc/docs/about/modelling/examples/simple","h":"#variables","p":166},{"i":178,"t":"INSTALLATION","u":"/ecalc/docs/about/modelling/examples/simple","h":"#installation","p":166},{"i":180,"t":"GENERATORSETS","u":"/ecalc/docs/about/modelling/examples/simple","h":"#generatorsets","p":166},{"i":182,"t":"FUELCONSUMERS","u":"/ecalc/docs/about/modelling/examples/simple","h":"#fuelconsumers","p":166},{"i":184,"t":"ENERGY_USAGE_MODEL","u":"/ecalc/docs/about/modelling/examples/simple","h":"#energy_usage_model","p":166},{"i":186,"t":"Full eCalc YAML model","u":"/ecalc/docs/about/modelling/examples/simple","h":"#full-ecalc-yaml-model","p":166},{"i":188,"t":"Input files","u":"/ecalc/docs/about/modelling/examples/simple","h":"#input-files","p":166},{"i":192,"t":"YAML model overview","u":"/ecalc/docs/about/modelling/course_material/advanced_invalid_timesteps","h":"#yaml-model-overview","p":190},{"i":194,"t":"TIME_SERIES","u":"/ecalc/docs/about/modelling/course_material/advanced_invalid_timesteps","h":"#time_series","p":190},{"i":196,"t":"FACILITY_INPUTS","u":"/ecalc/docs/about/modelling/course_material/advanced_invalid_timesteps","h":"#facility_inputs","p":190},{"i":198,"t":"FUEL_TYPES","u":"/ecalc/docs/about/modelling/course_material/advanced_invalid_timesteps","h":"#fuel_types","p":190},{"i":200,"t":"MODELS","u":"/ecalc/docs/about/modelling/course_material/advanced_invalid_timesteps","h":"#models","p":190},{"i":202,"t":"VARIABLES","u":"/ecalc/docs/about/modelling/course_material/advanced_invalid_timesteps","h":"#variables","p":190},{"i":204,"t":"INSTALLATIONS","u":"/ecalc/docs/about/modelling/course_material/advanced_invalid_timesteps","h":"#installations","p":190},{"i":206,"t":"Installation A","u":"/ecalc/docs/about/modelling/course_material/advanced_invalid_timesteps","h":"#installation-a","p":190},{"i":208,"t":"Installation B","u":"/ecalc/docs/about/modelling/course_material/advanced_invalid_timesteps","h":"#installation-b","p":190},{"i":210,"t":"ENERGY_USAGE_MODEL","u":"/ecalc/docs/about/modelling/course_material/advanced_invalid_timesteps","h":"#energy_usage_model","p":190},{"i":212,"t":"Full eCalc YAML model","u":"/ecalc/docs/about/modelling/course_material/advanced_invalid_timesteps","h":"#full-ecalc-yaml-model","p":190},{"i":214,"t":"Input files","u":"/ecalc/docs/about/modelling/course_material/advanced_invalid_timesteps","h":"#input-files","p":190},{"i":218,"t":"YAML model overview","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#yaml-model-overview","p":216},{"i":220,"t":"TIME_SERIES","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#time_series","p":216},{"i":222,"t":"FACILITY_INPUTS","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#facility_inputs","p":216},{"i":224,"t":"MODELS","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#models","p":216},{"i":226,"t":"FUEL_TYPES","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#fuel_types","p":216},{"i":228,"t":"INSTALLATIONS","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#installations","p":216},{"i":230,"t":"GENERATORSETS","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#generatorsets","p":216},{"i":232,"t":"Full Model","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#full-model","p":216},{"i":234,"t":"Input Data","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#input-data","p":216},{"i":235,"t":"Facility resources","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#facility-resources","p":216},{"i":237,"t":"Timeseries resources","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#timeseries-resources","p":216},{"i":243,"t":"Format","u":"/ecalc/docs/about/modelling/setup/facility_inputs/","h":"#format","p":241},{"i":245,"t":"Supported types","u":"/ecalc/docs/about/modelling/setup/facility_inputs/","h":"#supported-types","p":241},{"i":249,"t":"ELECTRICITY2FUEL","u":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","h":"#electricity2fuel","p":247},{"i":251,"t":"Facility input format","u":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","h":"#facility-input-format","p":247},{"i":253,"t":"Example table","u":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","h":"#table-example","p":247},{"i":255,"t":"Header and unit requirements","u":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","h":"#header-and-unit-requirements","p":247},{"i":259,"t":"YAML model overview","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#yaml-model-overview","p":257},{"i":261,"t":"TIME_SERIES","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#time_series","p":257},{"i":263,"t":"FACILITY_INPUTS","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#facility_inputs","p":257},{"i":265,"t":"FUEL_TYPES","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#fuel_types","p":257},{"i":267,"t":"MODELS","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#models","p":257},{"i":269,"t":"VARIABLES","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#variables","p":257},{"i":271,"t":"INSTALLATIONS","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#installations","p":257},{"i":273,"t":"Installation A","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#installation-a","p":257},{"i":275,"t":"Installation B","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#installation-b","p":257},{"i":277,"t":"ENERGY_USAGE_MODEL","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#energy_usage_model","p":257},{"i":279,"t":"Full eCalc YAML model","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#full-ecalc-yaml-model","p":257},{"i":281,"t":"Input files","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#input-files","p":257},{"i":284,"t":"Attention","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/","h":"","p":283},{"i":288,"t":"PUMP_CHART_SINGLE_SPEED","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#pump_chart_single_speed","p":286},{"i":290,"t":"Header Requirements","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#header-requirements","p":286},{"i":292,"t":"Format","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#format","p":286},{"i":294,"t":"PUMP_CHART_VARIABLE_SPEED","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#pump_chart_variable_speed","p":286},{"i":295,"t":"Description","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#description","p":286},{"i":297,"t":"Header Requirements","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#header-requirements-1","p":286},{"i":299,"t":"Format","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#format-1","p":286},{"i":301,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#examples","p":286},{"i":305,"t":"Format","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#format","p":303},{"i":307,"t":"Header requirements for the sampled compressor csv file","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#header-requirements-for-the-sampled-compressor-csv-file","p":303},{"i":309,"t":"Units","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#units","p":303},{"i":311,"t":"Example tables","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#example-tables","p":303},{"i":312,"t":"1D example","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#1d-example","p":303},{"i":314,"t":"3D example","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#3d-example","p":303},{"i":318,"t":"Header and unit requirements","u":"/ecalc/docs/about/modelling/setup/facility_inputs/tabular","h":"#header-and-unit-requirements","p":316},{"i":320,"t":"Example","u":"/ecalc/docs/about/modelling/setup/facility_inputs/tabular","h":"#example","p":316},{"i":324,"t":"Setup file syntax","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","h":"#setup-file-syntax","p":322},{"i":326,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","h":"#examples","p":322},{"i":327,"t":"YAML format example","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","h":"#yaml-format-example","p":322},{"i":329,"t":"Full examples","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","h":"#full-examples","p":322},{"i":333,"t":"Referring to time series","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#referring-to-time-series","p":331},{"i":335,"t":"Time intervals for variables/expressions and models","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#time-intervals-for-variablesexpressions-and-models","p":331},{"i":337,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#format","p":331},{"i":339,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#example","p":331},{"i":340,"t":"General structure","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#general-structure","p":331},{"i":342,"t":"Referring to time series","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#referring-to-time-series-1","p":331},{"i":344,"t":"Time intervals","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#time-intervals","p":331},{"i":348,"t":"Format","u":"/ecalc/docs/about/modelling/setup/fuel_types","h":"#format","p":346},{"i":350,"t":"Example","u":"/ecalc/docs/about/modelling/setup/fuel_types","h":"#example","p":346},{"i":356,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor","h":"#format","p":354},{"i":358,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor","h":"#example","p":354},{"i":362,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","h":"#format","p":360},{"i":364,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","h":"#example","p":360},{"i":368,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#format","p":366},{"i":372,"t":"PUMP energy usage model","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#pump-energy-usage-model","p":370},{"i":374,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#format","p":370},{"i":376,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#example","p":370},{"i":378,"t":"Units","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#units","p":370},{"i":380,"t":"PUMP_SYSTEM energy usage model","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#pump_system-energy-usage-model","p":370},{"i":382,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#format-1","p":370},{"i":384,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#example-1","p":370},{"i":386,"t":"Units","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#units-1","p":370},{"i":392,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#format","p":390},{"i":394,"t":"Electricity2fuel function","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#electricity2fuel-function","p":390},{"i":395,"t":"Description","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#description","p":390},{"i":397,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#format-1","p":390},{"i":399,"t":"Power from shore","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#power-from-shore","p":390},{"i":400,"t":"Description","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#description-1","p":390},{"i":402,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#example","p":390},{"i":404,"t":"Heaters and boilers","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#heaters-and-boilers","p":390},{"i":405,"t":"Description","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#description-2","p":390},{"i":407,"t":"Example: Boiler as generator set","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#example-boiler-as-generator-set","p":390},{"i":411,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","h":"#format","p":409},{"i":413,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","h":"#example","p":409},{"i":415,"t":"COMPRESSOR_TABULAR input type","u":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","h":"#compressor_tabular-input-type","p":409},{"i":419,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/","h":"#format","p":417},{"i":421,"t":"Supported types","u":"/ecalc/docs/about/modelling/setup/models/","h":"#supported-types","p":417},{"i":429,"t":"User defined single speed compressor chart","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#user-defined-single-speed-compressor-chart","p":427},{"i":431,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#format","p":427},{"i":433,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#example","p":427},{"i":435,"t":"User defined variable speed compressor chart","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#user-defined-variable-speed-compressor-chart","p":427},{"i":437,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#format-2","p":427},{"i":439,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#example-2","p":427},{"i":441,"t":"Generic compressor chart with predefined design point","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#generic-compressor-chart-with-predefined-design-point","p":427},{"i":443,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#format-4","p":427},{"i":445,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#example-4","p":427},{"i":447,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#example-5","p":427},{"i":449,"t":"Generic compressor chart with design point calculated from input data","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#generic-compressor-chart-with-design-point-calculated-from-input-data","p":427},{"i":451,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#format-5","p":427},{"i":453,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#example-6","p":427},{"i":455,"t":"Surge control margin for variable speed compressor chart","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#surge-control-margin-for-variable-speed-compressor-chart","p":427},{"i":457,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#format-6","p":427},{"i":461,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#format","p":459},{"i":463,"t":"Simplified compressor train model with known compressor stages","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#simplified-compressor-train-model-with-known-compressor-stages","p":459},{"i":465,"t":"Simplified compressor train model with unknown number of compressor stages","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#simplified-compressor-train-model-with-unknown-number-of-compressor-stages","p":459},{"i":467,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#examples","p":459},{"i":468,"t":"A (single) compressor with a user-defined variable speed compressor chart and fluid composition","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#a-single-compressor-with-a-user-defined-variable-speed-compressor-chart-and-fluid-composition","p":459},{"i":470,"t":"A (single) turbine driven compressor with a generic compressor chart with design point and predefined composition","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#a-single-turbine-driven-compressor-with-a-generic-compressor-chart-with-design-point-and-predefined-composition","p":459},{"i":472,"t":"A compressor train with two stages where the first stage has unknown spec while the second has a predefined chart","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#a-compressor-train-with-two-stages-where-the-first-stage-has-unknown-spec-while-the-second-has-a-predefined-chart","p":459},{"i":474,"t":"A compressor train where the number of stages are unknown","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#a-compressor-train-where-the-number-of-stages-are-unknown","p":459},{"i":478,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","h":"#format","p":476},{"i":484,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#format","p":482},{"i":486,"t":"Keyword usage","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#keyword-usage","p":482},{"i":488,"t":"INTERSTAGE_PRESSURE_CONTROL","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#interstage_pressure_control","p":482},{"i":490,"t":"Fixed pressure control","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#fixed-pressure-control","p":482},{"i":492,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#example","p":482},{"i":495,"t":"Theory","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","h":"#theory","p":494},{"i":497,"t":"Control modelling in eCalc™","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","h":"#control-modelling-in-ecalc","p":494},{"i":499,"t":"Pressure control methods - choking options","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","h":"#pressure-control-methods---choking-options","p":494},{"i":501,"t":"Pressure control methods - recirculation options","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","h":"#pressure-control-methods---recirculation-options","p":494},{"i":505,"t":"Available operators","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","h":"#available-operators","p":503},{"i":507,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","h":"#examples","p":503},{"i":508,"t":"Combining data from different reservoir inputs","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","h":"#combining-data-from-different-reservoir-inputs","p":503},{"i":510,"t":"Model of additional rate","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","h":"#model-of-additional-rate","p":503},{"i":514,"t":"Fluid model using predefined composition","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#fluid-model-using-predefined-composition","p":512},{"i":516,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#format","p":512},{"i":518,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#examples","p":512},{"i":520,"t":"Fluid model with user-specified composition","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#fluid-model-with-user-specified-composition","p":512},{"i":522,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#format-1","p":512},{"i":524,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#example","p":512},{"i":528,"t":"Supported types","u":"/ecalc/docs/about/modelling/setup/time_series","h":"#supported-types","p":526},{"i":530,"t":"Format","u":"/ecalc/docs/about/modelling/setup/time_series","h":"#format","p":526},{"i":532,"t":"Requirements","u":"/ecalc/docs/about/modelling/setup/time_series","h":"#requirements","p":526},{"i":534,"t":"Example","u":"/ecalc/docs/about/modelling/setup/time_series","h":"#example","p":526},{"i":538,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","h":"#format","p":536},{"i":540,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","h":"#example","p":536},{"i":542,"t":"Combining a compressor train and a turbine into one model","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","h":"#combining-a-compressor-train-and-a-turbine-into-one-model","p":536},{"i":544,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","h":"#format-1","p":536},{"i":546,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","h":"#examples","p":536},{"i":550,"t":"Defining variables","u":"/ecalc/docs/about/modelling/setup/variables","h":"#defining-variables","p":548},{"i":552,"t":"Format","u":"/ecalc/docs/about/modelling/setup/variables","h":"#format","p":548},{"i":554,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/variables","h":"#examples","p":548},{"i":556,"t":"Using variables","u":"/ecalc/docs/about/modelling/setup/variables","h":"#using-variables","p":548},{"i":558,"t":"Example","u":"/ecalc/docs/about/modelling/setup/variables","h":"#example","p":548},{"i":569,"t":"Simplified Process Flow Diagram","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#simplified-process-flow-diagram","p":568},{"i":571,"t":"Workflow","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#workflow","p":568},{"i":572,"t":"Workflow Explanation","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#workflow-explanation","p":568},{"i":573,"t":"Required Subsurface Profiles","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#required-subsurface-profiles","p":568},{"i":575,"t":"Facility Information","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#facility-information","p":568},{"i":577,"t":"Consumer Information","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#consumer-information","p":568},{"i":579,"t":"Validation","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#validation","p":568},{"i":581,"t":"Calibration","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#calibration","p":568},{"i":585,"t":"Top level keywords","u":"/ecalc/docs/about/references/","h":"#top-level-keywords","p":583},{"i":589,"t":"Description","u":"/ecalc/docs/about/references/ADJUSTMENT","h":"#description","p":587},{"i":591,"t":"Format","u":"/ecalc/docs/about/references/ADJUSTMENT","h":"#format","p":587},{"i":593,"t":"Example","u":"/ecalc/docs/about/references/ADJUSTMENT","h":"#example","p":587},{"i":597,"t":"Description","u":"/ecalc/docs/about/references/CABLE_LOSS","h":"#description","p":595},{"i":599,"t":"Format","u":"/ecalc/docs/about/references/CABLE_LOSS","h":"#format","p":595},{"i":601,"t":"Examples","u":"/ecalc/docs/about/references/CABLE_LOSS","h":"#examples","p":595},{"i":605,"t":"Description","u":"/ecalc/docs/about/references/CALCULATE_MAX_RATE","h":"#description","p":603},{"i":607,"t":"Format","u":"/ecalc/docs/about/references/CALCULATE_MAX_RATE","h":"#format","p":603},{"i":609,"t":"Example","u":"/ecalc/docs/about/references/CALCULATE_MAX_RATE","h":"#example","p":603},{"i":613,"t":"Description","u":"/ecalc/docs/about/references/CATEGORY","h":"#description","p":611},{"i":615,"t":"Format","u":"/ecalc/docs/about/references/CATEGORY","h":"#format","p":611},{"i":617,"t":"Example","u":"/ecalc/docs/about/references/CATEGORY","h":"#example","p":611},{"i":620,"t":"Description","u":"/ecalc/docs/about/references/CHART_TYPE","h":"#description","p":619},{"i":622,"t":"Format","u":"/ecalc/docs/about/references/CHART_TYPE","h":"#format","p":619},{"i":624,"t":"Example","u":"/ecalc/docs/about/references/CHART_TYPE","h":"#example","p":619},{"i":628,"t":"ecalc run","u":"/ecalc/docs/about/references/cli_reference","h":"#ecalc-run","p":626},{"i":630,"t":"ecalc selftest","u":"/ecalc/docs/about/references/cli_reference","h":"#ecalc-selftest","p":626},{"i":632,"t":"ecalc show","u":"/ecalc/docs/about/references/cli_reference","h":"#ecalc-show","p":626},{"i":634,"t":"ecalc show results","u":"/ecalc/docs/about/references/cli_reference","h":"#ecalc-show-results","p":626},{"i":636,"t":"ecalc show yaml","u":"/ecalc/docs/about/references/cli_reference","h":"#ecalc-show-yaml","p":626},{"i":639,"t":"Description","u":"/ecalc/docs/about/references/COMPOSITION","h":"#description","p":638},{"i":641,"t":"Format","u":"/ecalc/docs/about/references/COMPOSITION","h":"#format","p":638},{"i":643,"t":"Example","u":"/ecalc/docs/about/references/COMPOSITION","h":"#example","p":638},{"i":647,"t":"Description","u":"/ecalc/docs/about/references/COMPRESSOR_MODEL","h":"#description","p":645},{"i":649,"t":"Format","u":"/ecalc/docs/about/references/COMPRESSOR_MODEL","h":"#format","p":645},{"i":651,"t":"Example","u":"/ecalc/docs/about/references/COMPRESSOR_MODEL","h":"#example","p":645},{"i":655,"t":"Description","u":"/ecalc/docs/about/references/COMPRESSOR_CHART","h":"#description","p":653},{"i":657,"t":"Format","u":"/ecalc/docs/about/references/COMPRESSOR_CHART","h":"#format","p":653},{"i":659,"t":"Example","u":"/ecalc/docs/about/references/COMPRESSOR_CHART","h":"#example","p":653},{"i":663,"t":"Description","u":"/ecalc/docs/about/references/COMPRESSOR_SYSTEM","h":"#description","p":661},{"i":665,"t":"Format","u":"/ecalc/docs/about/references/COMPRESSOR_SYSTEM","h":"#format","p":661},{"i":667,"t":"Example 1","u":"/ecalc/docs/about/references/COMPRESSOR_SYSTEM","h":"#example-1","p":661},{"i":669,"t":"Example 2 (Detailed)","u":"/ecalc/docs/about/references/COMPRESSOR_SYSTEM","h":"#example-2-detailed","p":661},{"i":672,"t":"Description","u":"/ecalc/docs/about/references/COMPRESSOR_TRAIN","h":"#description","p":671},{"i":674,"t":"Format","u":"/ecalc/docs/about/references/COMPRESSOR_TRAIN","h":"#format","p":671},{"i":678,"t":"Description","u":"/ecalc/docs/about/references/CONDITION","h":"#description","p":676},{"i":680,"t":"Format","u":"/ecalc/docs/about/references/CONDITION","h":"#format","p":676},{"i":682,"t":"Example","u":"/ecalc/docs/about/references/CONDITION","h":"#example","p":676},{"i":686,"t":"Description","u":"/ecalc/docs/about/references/COMPRESSOR_TRAIN_MODEL","h":"#description","p":684},{"i":688,"t":"Format","u":"/ecalc/docs/about/references/COMPRESSOR_TRAIN_MODEL","h":"#format","p":684},{"i":690,"t":"Example","u":"/ecalc/docs/about/references/COMPRESSOR_TRAIN_MODEL","h":"#example","p":684},{"i":694,"t":"Description","u":"/ecalc/docs/about/references/CONDITIONS","h":"#description","p":692},{"i":696,"t":"Format","u":"/ecalc/docs/about/references/CONDITIONS","h":"#format","p":692},{"i":700,"t":"Description","u":"/ecalc/docs/about/references/CONSTANT","h":"#description","p":698},{"i":702,"t":"Format","u":"/ecalc/docs/about/references/CONSTANT","h":"#format","p":698},{"i":704,"t":"Example","u":"/ecalc/docs/about/references/CONSTANT","h":"#example","p":698},{"i":708,"t":"Description","u":"/ecalc/docs/about/references/CONSUMERS","h":"#description","p":706},{"i":710,"t":"Format","u":"/ecalc/docs/about/references/CONSUMERS","h":"#format","p":706},{"i":712,"t":"Example","u":"/ecalc/docs/about/references/CONSUMERS","h":"#example","p":706},{"i":716,"t":"Description","u":"/ecalc/docs/about/references/CONSUMPTION_RATE_TYPE","h":"#description","p":714},{"i":718,"t":"Format","u":"/ecalc/docs/about/references/CONSUMPTION_RATE_TYPE","h":"#format","p":714},{"i":720,"t":"Example","u":"/ecalc/docs/about/references/CONSUMPTION_RATE_TYPE","h":"#example","p":714},{"i":724,"t":"Description","u":"/ecalc/docs/about/references/CONTROL_MARGIN","h":"#description","p":722},{"i":726,"t":"Use in Single speed compressor train model","u":"/ecalc/docs/about/references/CONTROL_MARGIN","h":"#use-in-single-speed-compressor-train-model","p":722},{"i":727,"t":"Format","u":"/ecalc/docs/about/references/CONTROL_MARGIN","h":"#format","p":722},{"i":729,"t":"Example","u":"/ecalc/docs/about/references/CONTROL_MARGIN","h":"#example","p":722},{"i":731,"t":"Use in Variable speed compressor train model","u":"/ecalc/docs/about/references/CONTROL_MARGIN","h":"#use-in-variable-speed-compressor-train-model","p":722},{"i":732,"t":"Format","u":"/ecalc/docs/about/references/CONTROL_MARGIN","h":"#format-1","p":722},{"i":734,"t":"Example","u":"/ecalc/docs/about/references/CONTROL_MARGIN","h":"#example-1","p":722},{"i":736,"t":"Use in Variable speed compressor train model with multiple streams and pressures","u":"/ecalc/docs/about/references/CONTROL_MARGIN","h":"#use-in-variable-speed-compressor-train-model-with-multiple-streams-and-pressures","p":722},{"i":737,"t":"Format","u":"/ecalc/docs/about/references/CONTROL_MARGIN","h":"#format-2","p":722},{"i":739,"t":"Example","u":"/ecalc/docs/about/references/CONTROL_MARGIN","h":"#example-2","p":722},{"i":743,"t":"Description","u":"/ecalc/docs/about/references/CROSSOVER","h":"#description","p":741},{"i":745,"t":"Example","u":"/ecalc/docs/about/references/CROSSOVER","h":"#example","p":741},{"i":749,"t":"Description","u":"/ecalc/docs/about/references/CONTROL_MARGIN_UNIT","h":"#description","p":747},{"i":751,"t":"Format","u":"/ecalc/docs/about/references/CONTROL_MARGIN_UNIT","h":"#format","p":747},{"i":753,"t":"Example","u":"/ecalc/docs/about/references/CONTROL_MARGIN_UNIT","h":"#example","p":747},{"i":756,"t":"Description","u":"/ecalc/docs/about/references/CURVE","h":"#description","p":755},{"i":758,"t":"Format","u":"/ecalc/docs/about/references/CURVE","h":"#format","p":755},{"i":760,"t":"Example","u":"/ecalc/docs/about/references/CURVE","h":"#example","p":755},{"i":763,"t":"Description","u":"/ecalc/docs/about/references/DESIGN_HEAD","h":"#description","p":762},{"i":765,"t":"Format","u":"/ecalc/docs/about/references/DESIGN_HEAD","h":"#format","p":762},{"i":767,"t":"Example","u":"/ecalc/docs/about/references/DESIGN_HEAD","h":"#example","p":762},{"i":770,"t":"Description","u":"/ecalc/docs/about/references/CURVES","h":"#description","p":769},{"i":772,"t":"Format","u":"/ecalc/docs/about/references/CURVES","h":"#format","p":769},{"i":774,"t":"Example","u":"/ecalc/docs/about/references/CURVES","h":"#example","p":769},{"i":777,"t":"Description","u":"/ecalc/docs/about/references/DESIGN_RATE","h":"#description","p":776},{"i":779,"t":"Format","u":"/ecalc/docs/about/references/DESIGN_RATE","h":"#format","p":776},{"i":781,"t":"Example","u":"/ecalc/docs/about/references/DESIGN_RATE","h":"#example","p":776},{"i":785,"t":"Description","u":"/ecalc/docs/about/references/DIRECT_EMITTERS","h":"#description","p":783},{"i":787,"t":"Format","u":"/ecalc/docs/about/references/DIRECT_EMITTERS","h":"#format","p":783},{"i":789,"t":"Example","u":"/ecalc/docs/about/references/DIRECT_EMITTERS","h":"#example","p":783},{"i":793,"t":"Description","u":"/ecalc/docs/about/references/DISCHARGE_PRESSURE","h":"#description","p":791},{"i":795,"t":"Format","u":"/ecalc/docs/about/references/DISCHARGE_PRESSURE","h":"#format","p":791},{"i":797,"t":"Example","u":"/ecalc/docs/about/references/DISCHARGE_PRESSURE","h":"#example","p":791},{"i":800,"t":"Description","u":"/ecalc/docs/about/references/EFFICIENCY","h":"#description","p":799},{"i":802,"t":"Format","u":"/ecalc/docs/about/references/EFFICIENCY","h":"#format","p":799},{"i":803,"t":"COMPRESSORS","u":"/ecalc/docs/about/references/EFFICIENCY","h":"#compressors","p":799},{"i":805,"t":"PUMPS","u":"/ecalc/docs/about/references/EFFICIENCY","h":"#pumps","p":799},{"i":807,"t":"Example","u":"/ecalc/docs/about/references/EFFICIENCY","h":"#example","p":799},{"i":811,"t":"Description","u":"/ecalc/docs/about/references/ELECTRICITY2FUEL","h":"#description","p":809},{"i":813,"t":"Format","u":"/ecalc/docs/about/references/ELECTRICITY2FUEL","h":"#format","p":809},{"i":815,"t":"Example","u":"/ecalc/docs/about/references/ELECTRICITY2FUEL","h":"#example","p":809},{"i":816,"t":"Example 1","u":"/ecalc/docs/about/references/ELECTRICITY2FUEL","h":"#example-1","p":809},{"i":818,"t":"Example 2","u":"/ecalc/docs/about/references/ELECTRICITY2FUEL","h":"#example-2","p":809},{"i":822,"t":"Description","u":"/ecalc/docs/about/references/EMISSION_NAME","h":"#description","p":820},{"i":824,"t":"Format","u":"/ecalc/docs/about/references/EMISSION_NAME","h":"#format","p":820},{"i":826,"t":"Example","u":"/ecalc/docs/about/references/EMISSION_NAME","h":"#example","p":820},{"i":830,"t":"Description","u":"/ecalc/docs/about/references/DOWNSTREAM_PRESSURE_CONTROL","h":"#description","p":828},{"i":832,"t":"Format","u":"/ecalc/docs/about/references/DOWNSTREAM_PRESSURE_CONTROL","h":"#format","p":828},{"i":834,"t":"Example","u":"/ecalc/docs/about/references/DOWNSTREAM_PRESSURE_CONTROL","h":"#example","p":828},{"i":838,"t":"Description","u":"/ecalc/docs/about/references/EMISSION_RATE","h":"#description","p":836},{"i":840,"t":"Format","u":"/ecalc/docs/about/references/EMISSION_RATE","h":"#format","p":836},{"i":842,"t":"Example","u":"/ecalc/docs/about/references/EMISSION_RATE","h":"#example","p":836},{"i":846,"t":"Description","u":"/ecalc/docs/about/references/EMITTER_MODEL","h":"#description","p":844},{"i":848,"t":"Format","u":"/ecalc/docs/about/references/EMITTER_MODEL","h":"#format","p":844},{"i":850,"t":"Example","u":"/ecalc/docs/about/references/EMITTER_MODEL","h":"#example","p":844},{"i":854,"t":"Description","u":"/ecalc/docs/about/references/EMISSIONS","h":"#description","p":852},{"i":856,"t":"For fuels","u":"/ecalc/docs/about/references/EMISSIONS","h":"#for-fuels","p":852},{"i":857,"t":"Format","u":"/ecalc/docs/about/references/EMISSIONS","h":"#format","p":852},{"i":859,"t":"Example","u":"/ecalc/docs/about/references/EMISSIONS","h":"#example","p":852},{"i":861,"t":"For venting emitters (type: DIRECT_EMISSION, from eCalc v8.13)","u":"/ecalc/docs/about/references/EMISSIONS","h":"#for-venting-emitters-type-direct_emission-from-ecalc-v813","p":852},{"i":863,"t":"Format","u":"/ecalc/docs/about/references/EMISSIONS","h":"#format-1","p":852},{"i":865,"t":"Example","u":"/ecalc/docs/about/references/EMISSIONS","h":"#example-1","p":852},{"i":867,"t":"For venting emitters (type: OIL_VOLUME, from eCalc v8.13)","u":"/ecalc/docs/about/references/EMISSIONS","h":"#for-venting-emitters-type-oil_volume-from-ecalc-v813","p":852},{"i":869,"t":"Format","u":"/ecalc/docs/about/references/EMISSIONS","h":"#format-2","p":852},{"i":871,"t":"Example","u":"/ecalc/docs/about/references/EMISSIONS","h":"#example-2","p":852},{"i":875,"t":"Description","u":"/ecalc/docs/about/references/EMISSION","h":"#description","p":873},{"i":877,"t":"Format","u":"/ecalc/docs/about/references/EMISSION","h":"#format","p":873},{"i":879,"t":"Example","u":"/ecalc/docs/about/references/EMISSION","h":"#example","p":873},{"i":883,"t":"Description","u":"/ecalc/docs/about/references/ENERGY_USAGE_MODEL","h":"#description","p":881},{"i":885,"t":"Temporal energy usage model","u":"/ecalc/docs/about/references/ENERGY_USAGE_MODEL","h":"#temporal-energy-usage-model","p":881},{"i":888,"t":"Description","u":"/ecalc/docs/about/references/EOS_MODEL","h":"#description","p":887},{"i":890,"t":"Format","u":"/ecalc/docs/about/references/EOS_MODEL","h":"#format","p":887},{"i":892,"t":"Example","u":"/ecalc/docs/about/references/EOS_MODEL","h":"#example","p":887},{"i":896,"t":"Description","u":"/ecalc/docs/about/references/ENERGYFUNCTION","h":"#description","p":894},{"i":898,"t":"Format","u":"/ecalc/docs/about/references/ENERGYFUNCTION","h":"#format","p":894},{"i":900,"t":"Example","u":"/ecalc/docs/about/references/ENERGYFUNCTION","h":"#example","p":894},{"i":904,"t":"Description","u":"/ecalc/docs/about/references/END","h":"#description","p":902},{"i":906,"t":"Format","u":"/ecalc/docs/about/references/END","h":"#format","p":902},{"i":908,"t":"Example","u":"/ecalc/docs/about/references/END","h":"#example","p":902},{"i":912,"t":"Description","u":"/ecalc/docs/about/references/EXPRESSION","h":"#description","p":910},{"i":914,"t":"Format","u":"/ecalc/docs/about/references/EXPRESSION","h":"#format","p":910},{"i":916,"t":"Example","u":"/ecalc/docs/about/references/EXPRESSION","h":"#example","p":910},{"i":920,"t":"Description","u":"/ecalc/docs/about/references/EXTRAPOLATION","h":"#description","p":918},{"i":922,"t":"Format","u":"/ecalc/docs/about/references/EXTRAPOLATION","h":"#format","p":918},{"i":924,"t":"Requirements","u":"/ecalc/docs/about/references/EXTRAPOLATION","h":"#requirements","p":918},{"i":926,"t":"Example","u":"/ecalc/docs/about/references/EXTRAPOLATION","h":"#example","p":918},{"i":930,"t":"Description","u":"/ecalc/docs/about/references/FACILITY_INPUTS","h":"#description","p":928},{"i":932,"t":"Supported types","u":"/ecalc/docs/about/references/FACILITY_INPUTS","h":"#supported-types","p":928},{"i":936,"t":"Description","u":"/ecalc/docs/about/references/FACTOR","h":"#description","p":934},{"i":938,"t":"Use in ADJUSTMENT","u":"/ecalc/docs/about/references/FACTOR","h":"#use-in-adjustment","p":934},{"i":940,"t":"Use in EMISSIONS","u":"/ecalc/docs/about/references/FACTOR","h":"#use-in-emissions","p":934},{"i":942,"t":"Format","u":"/ecalc/docs/about/references/FACTOR","h":"#format","p":934},{"i":944,"t":"Example","u":"/ecalc/docs/about/references/FACTOR","h":"#example","p":934},{"i":945,"t":"Use in ADJUSTMENT","u":"/ecalc/docs/about/references/FACTOR","h":"#use-in-adjustment-1","p":934},{"i":947,"t":"Use in EMISSIONS","u":"/ecalc/docs/about/references/FACTOR","h":"#use-in-emissions-1","p":934},{"i":951,"t":"Description","u":"/ecalc/docs/about/references/FILE","h":"#description","p":949},{"i":953,"t":"Format","u":"/ecalc/docs/about/references/FILE","h":"#format","p":949},{"i":955,"t":"Example","u":"/ecalc/docs/about/references/FILE","h":"#example","p":949},{"i":959,"t":"Description","u":"/ecalc/docs/about/references/FLUID_DENSITY","h":"#description","p":957},{"i":961,"t":"Format","u":"/ecalc/docs/about/references/FLUID_DENSITY","h":"#format","p":957},{"i":963,"t":"Example","u":"/ecalc/docs/about/references/FLUID_DENSITY","h":"#example","p":957},{"i":966,"t":"Description","u":"/ecalc/docs/about/references/FLUID_MODEL_TYPE","h":"#description","p":965},{"i":968,"t":"Format","u":"/ecalc/docs/about/references/FLUID_MODEL_TYPE","h":"#format","p":965},{"i":970,"t":"Example","u":"/ecalc/docs/about/references/FLUID_MODEL_TYPE","h":"#example","p":965},{"i":973,"t":"Description","u":"/ecalc/docs/about/references/FLUID_MODEL","h":"#description","p":972},{"i":975,"t":"Format","u":"/ecalc/docs/about/references/FLUID_MODEL","h":"#format","p":972},{"i":977,"t":"Example","u":"/ecalc/docs/about/references/FLUID_MODEL","h":"#example","p":972},{"i":981,"t":"Description","u":"/ecalc/docs/about/references/FUEL","h":"#description","p":979},{"i":983,"t":"Format","u":"/ecalc/docs/about/references/FUEL","h":"#format","p":979},{"i":985,"t":"Example","u":"/ecalc/docs/about/references/FUEL","h":"#example","p":979},{"i":989,"t":"Description","u":"/ecalc/docs/about/references/FUEL_TYPES","h":"#description","p":987},{"i":992,"t":"Description","u":"/ecalc/docs/about/references/GAS_TYPE","h":"#description","p":991},{"i":994,"t":"Format","u":"/ecalc/docs/about/references/GAS_TYPE","h":"#format","p":991},{"i":996,"t":"Example","u":"/ecalc/docs/about/references/GAS_TYPE","h":"#example","p":991},{"i":1000,"t":"Description","u":"/ecalc/docs/about/references/FUELRATE","h":"#description","p":998},{"i":1002,"t":"Format","u":"/ecalc/docs/about/references/FUELRATE","h":"#format","p":998},{"i":1004,"t":"Example","u":"/ecalc/docs/about/references/FUELRATE","h":"#example","p":998},{"i":1008,"t":"Description","u":"/ecalc/docs/about/references/FUELCONSUMERS","h":"#description","p":1006},{"i":1010,"t":"Format","u":"/ecalc/docs/about/references/FUELCONSUMERS","h":"#format","p":1006},{"i":1012,"t":"Example","u":"/ecalc/docs/about/references/FUELCONSUMERS","h":"#example","p":1006},{"i":1016,"t":"Description","u":"/ecalc/docs/about/references/HCEXPORT","h":"#description","p":1014},{"i":1018,"t":"Format","u":"/ecalc/docs/about/references/HCEXPORT","h":"#format","p":1014},{"i":1020,"t":"Example","u":"/ecalc/docs/about/references/HCEXPORT","h":"#example","p":1014},{"i":1021,"t":"Basic usage","u":"/ecalc/docs/about/references/HCEXPORT","h":"#basic-usage","p":1014},{"i":1023,"t":"With time dependency","u":"/ecalc/docs/about/references/HCEXPORT","h":"#with-time-dependency","p":1014},{"i":1025,"t":"Full example","u":"/ecalc/docs/about/references/HCEXPORT","h":"#full-example","p":1014},{"i":1029,"t":"Description","u":"/ecalc/docs/about/references/GENERATORSETS","h":"#description","p":1027},{"i":1033,"t":"Description","u":"/ecalc/docs/about/references/HEAD_MARGIN","h":"#description","p":1031},{"i":1035,"t":"Format","u":"/ecalc/docs/about/references/HEAD_MARGIN","h":"#format","p":1031},{"i":1037,"t":"Example","u":"/ecalc/docs/about/references/HEAD_MARGIN","h":"#example","p":1031},{"i":1040,"t":"Description","u":"/ecalc/docs/about/references/HEAD","h":"#description","p":1039},{"i":1042,"t":"Format","u":"/ecalc/docs/about/references/HEAD","h":"#format","p":1039},{"i":1043,"t":"COMPRESSORS","u":"/ecalc/docs/about/references/HEAD","h":"#compressors","p":1039},{"i":1045,"t":"PUMPS","u":"/ecalc/docs/about/references/HEAD","h":"#pumps","p":1039},{"i":1047,"t":"Example","u":"/ecalc/docs/about/references/HEAD","h":"#example","p":1039},{"i":1048,"t":"COMPRESSORS","u":"/ecalc/docs/about/references/HEAD","h":"#compressors-1","p":1039},{"i":1051,"t":"Description","u":"/ecalc/docs/about/references/include","h":"#description","p":1050},{"i":1053,"t":"Format","u":"/ecalc/docs/about/references/include","h":"#format","p":1050},{"i":1055,"t":"Example 1 - include map/object into list item","u":"/ecalc/docs/about/references/include","h":"#example-1---include-mapobject-into-list-item","p":1050},{"i":1057,"t":"Example 2 - include map/object into object value","u":"/ecalc/docs/about/references/include","h":"#example-2---include-mapobject-into-object-value","p":1050},{"i":1059,"t":"Example 3 - include list into object value","u":"/ecalc/docs/about/references/include","h":"#example-3---include-list-into-object-value","p":1050},{"i":1063,"t":"Description","u":"/ecalc/docs/about/references/INFLUENCE_TIME_VECTOR","h":"#description","p":1061},{"i":1065,"t":"Format","u":"/ecalc/docs/about/references/INFLUENCE_TIME_VECTOR","h":"#format","p":1061},{"i":1067,"t":"Example","u":"/ecalc/docs/about/references/INFLUENCE_TIME_VECTOR","h":"#example","p":1061},{"i":1071,"t":"Description","u":"/ecalc/docs/about/references/INLET_TEMPERATURE","h":"#description","p":1069},{"i":1073,"t":"Format","u":"/ecalc/docs/about/references/INLET_TEMPERATURE","h":"#format","p":1069},{"i":1075,"t":"Example","u":"/ecalc/docs/about/references/INLET_TEMPERATURE","h":"#example","p":1069},{"i":1079,"t":"Description","u":"/ecalc/docs/about/references/INSTALLATIONS","h":"#description","p":1077},{"i":1083,"t":"Description","u":"/ecalc/docs/about/references/INTERPOLATION_TYPE","h":"#description","p":1081},{"i":1085,"t":"Format","u":"/ecalc/docs/about/references/INTERPOLATION_TYPE","h":"#format","p":1081},{"i":1087,"t":"Requirements","u":"/ecalc/docs/about/references/INTERPOLATION_TYPE","h":"#requirements","p":1081},{"i":1089,"t":"Example","u":"/ecalc/docs/about/references/INTERPOLATION_TYPE","h":"#example","p":1081},{"i":1093,"t":"Description","u":"/ecalc/docs/about/references/INTERSTAGE_CONTROL_PRESSURE","h":"#description","p":1091},{"i":1095,"t":"Use in MODELS","u":"/ecalc/docs/about/references/INTERSTAGE_CONTROL_PRESSURE","h":"#use-in-models","p":1091},{"i":1097,"t":"Use in ENERGY_USAGE_MODEL","u":"/ecalc/docs/about/references/INTERSTAGE_CONTROL_PRESSURE","h":"#use-in-energy_usage_model","p":1091},{"i":1101,"t":"Description","u":"/ecalc/docs/about/references/LOAD","h":"#description","p":1099},{"i":1103,"t":"Format","u":"/ecalc/docs/about/references/LOAD","h":"#format","p":1099},{"i":1105,"t":"Example","u":"/ecalc/docs/about/references/LOAD","h":"#example","p":1099},{"i":1108,"t":"Description","u":"/ecalc/docs/about/references/LOWER_HEATING_VALUE","h":"#description","p":1107},{"i":1110,"t":"Format","u":"/ecalc/docs/about/references/LOWER_HEATING_VALUE","h":"#format","p":1107},{"i":1112,"t":"Example","u":"/ecalc/docs/about/references/LOWER_HEATING_VALUE","h":"#example","p":1107},{"i":1116,"t":"Description","u":"/ecalc/docs/about/references/MAXIMUM_DISCHARGE_PRESSURE","h":"#description","p":1114},{"i":1118,"t":"Functionality","u":"/ecalc/docs/about/references/MAXIMUM_DISCHARGE_PRESSURE","h":"#functionality","p":1114},{"i":1120,"t":"Format","u":"/ecalc/docs/about/references/MAXIMUM_DISCHARGE_PRESSURE","h":"#format","p":1114},{"i":1124,"t":"Description","u":"/ecalc/docs/about/references/MAX_USAGE_FROM_SHORE","h":"#description","p":1122},{"i":1126,"t":"Format","u":"/ecalc/docs/about/references/MAX_USAGE_FROM_SHORE","h":"#format","p":1122},{"i":1128,"t":"Examples","u":"/ecalc/docs/about/references/MAX_USAGE_FROM_SHORE","h":"#examples","p":1122},{"i":1132,"t":"Description","u":"/ecalc/docs/about/references/MAXIMUM_POWER","h":"#description","p":1130},{"i":1134,"t":"Functionality","u":"/ecalc/docs/about/references/MAXIMUM_POWER","h":"#functionality","p":1130},{"i":1136,"t":"Format","u":"/ecalc/docs/about/references/MAXIMUM_POWER","h":"#format","p":1130},{"i":1140,"t":"Description","u":"/ecalc/docs/about/references/MODELS","h":"#description","p":1138},{"i":1142,"t":"Format","u":"/ecalc/docs/about/references/MODELS","h":"#format","p":1138},{"i":1144,"t":"Supported Model types","u":"/ecalc/docs/about/references/MODELS","h":"#supported-model-types","p":1138},{"i":1148,"t":"Description","u":"/ecalc/docs/about/references/MAXIMUM_PRESSURE_RATIO_PER_STAGE","h":"#description","p":1146},{"i":1150,"t":"Functionality","u":"/ecalc/docs/about/references/MAXIMUM_PRESSURE_RATIO_PER_STAGE","h":"#functionality","p":1146},{"i":1152,"t":"Format","u":"/ecalc/docs/about/references/MAXIMUM_PRESSURE_RATIO_PER_STAGE","h":"#format","p":1146},{"i":1154,"t":"Example","u":"/ecalc/docs/about/references/MAXIMUM_PRESSURE_RATIO_PER_STAGE","h":"#example","p":1146},{"i":1158,"t":"Description","u":"/ecalc/docs/about/references/NAME","h":"#description","p":1156},{"i":1160,"t":"Format","u":"/ecalc/docs/about/references/NAME","h":"#format","p":1156},{"i":1162,"t":"Example","u":"/ecalc/docs/about/references/NAME","h":"#example","p":1156},{"i":1166,"t":"Description","u":"/ecalc/docs/about/references/OPERATIONAL_SETTINGS","h":"#description","p":1164},{"i":1168,"t":"RATES","u":"/ecalc/docs/about/references/OPERATIONAL_SETTINGS","h":"#rates","p":1164},{"i":1170,"t":"RATE_FRACTIONS","u":"/ecalc/docs/about/references/OPERATIONAL_SETTINGS","h":"#rate_fractions","p":1164},{"i":1172,"t":"SUCTION_PRESSURES","u":"/ecalc/docs/about/references/OPERATIONAL_SETTINGS","h":"#suction_pressures","p":1164},{"i":1174,"t":"DISCHARGE_PRESSURES","u":"/ecalc/docs/about/references/OPERATIONAL_SETTINGS","h":"#discharge_pressures","p":1164},{"i":1176,"t":"FLUID_DENSITIES","u":"/ecalc/docs/about/references/OPERATIONAL_SETTINGS","h":"#fluid_densities","p":1164},{"i":1178,"t":"CROSSOVER","u":"/ecalc/docs/about/references/OPERATIONAL_SETTINGS","h":"#crossover","p":1164},{"i":1180,"t":"Example 1:","u":"/ecalc/docs/about/references/OPERATIONAL_SETTINGS","h":"#example-1","p":1164},{"i":1182,"t":"Example 2:","u":"/ecalc/docs/about/references/OPERATIONAL_SETTINGS","h":"#example-2","p":1164},{"i":1184,"t":"Format","u":"/ecalc/docs/about/references/OPERATIONAL_SETTINGS","h":"#format","p":1164},{"i":1185,"t":"Example","u":"/ecalc/docs/about/references/OPERATIONAL_SETTINGS","h":"#example","p":1164},{"i":1188,"t":"Description","u":"/ecalc/docs/about/references/POLYTROPIC_EFFICIENCY","h":"#description","p":1187},{"i":1190,"t":"Format","u":"/ecalc/docs/about/references/POLYTROPIC_EFFICIENCY","h":"#format","p":1187},{"i":1192,"t":"Example","u":"/ecalc/docs/about/references/POLYTROPIC_EFFICIENCY","h":"#example","p":1187},{"i":1196,"t":"Description","u":"/ecalc/docs/about/references/POWER_ADJUSTMENT_CONSTANT","h":"#description","p":1194},{"i":1198,"t":"Format","u":"/ecalc/docs/about/references/POWER_ADJUSTMENT_CONSTANT","h":"#format","p":1194},{"i":1200,"t":"Example","u":"/ecalc/docs/about/references/POWER_ADJUSTMENT_CONSTANT","h":"#example","p":1194},{"i":1204,"t":"Description","u":"/ecalc/docs/about/references/POWERLOSSFACTOR","h":"#description","p":1202},{"i":1206,"t":"Format","u":"/ecalc/docs/about/references/POWERLOSSFACTOR","h":"#format","p":1202},{"i":1208,"t":"Example","u":"/ecalc/docs/about/references/POWERLOSSFACTOR","h":"#example","p":1202},{"i":1211,"t":"Description","u":"/ecalc/docs/about/references/PRESSURE_CONTROL","h":"#description","p":1210},{"i":1213,"t":"Format","u":"/ecalc/docs/about/references/PRESSURE_CONTROL","h":"#format","p":1210},{"i":1215,"t":"Example","u":"/ecalc/docs/about/references/PRESSURE_CONTROL","h":"#example","p":1210},{"i":1219,"t":"Description","u":"/ecalc/docs/about/references/PRESSURE_DROP_AHEAD_OF_STAGE","h":"#description","p":1217},{"i":1221,"t":"Format","u":"/ecalc/docs/about/references/PRESSURE_DROP_AHEAD_OF_STAGE","h":"#format","p":1217},{"i":1223,"t":"Example","u":"/ecalc/docs/about/references/PRESSURE_DROP_AHEAD_OF_STAGE","h":"#example","p":1217},{"i":1227,"t":"Description","u":"/ecalc/docs/about/references/RATE","h":"#description","p":1225},{"i":1229,"t":"Format","u":"/ecalc/docs/about/references/RATE","h":"#format","p":1225},{"i":1231,"t":"Example","u":"/ecalc/docs/about/references/RATE","h":"#example","p":1225},{"i":1233,"t":"Use in EMISSIONS for VENTING_EMITTERS (from eCalc v8.8)","u":"/ecalc/docs/about/references/RATE","h":"#use-in-emissions-for-venting_emitters-from-ecalc-v88","p":1225},{"i":1235,"t":"Format","u":"/ecalc/docs/about/references/RATE","h":"#format-1","p":1225},{"i":1237,"t":"Example","u":"/ecalc/docs/about/references/RATE","h":"#example-1","p":1225},{"i":1241,"t":"Description","u":"/ecalc/docs/about/references/PUMPS","h":"#description","p":1239},{"i":1243,"t":"Format","u":"/ecalc/docs/about/references/PUMPS","h":"#format","p":1239},{"i":1245,"t":"Example 1","u":"/ecalc/docs/about/references/PUMPS","h":"#example-1","p":1239},{"i":1247,"t":"Example 2 (Detailed)","u":"/ecalc/docs/about/references/PUMPS","h":"#example-2-detailed","p":1239},{"i":1251,"t":"Description","u":"/ecalc/docs/about/references/RATE_PER_STREAM","h":"#description","p":1249},{"i":1253,"t":"Format","u":"/ecalc/docs/about/references/RATE_PER_STREAM","h":"#format","p":1249},{"i":1255,"t":"Example","u":"/ecalc/docs/about/references/RATE_PER_STREAM","h":"#example","p":1249},{"i":1258,"t":"Description","u":"/ecalc/docs/about/references/RATE_FRACTIONS","h":"#description","p":1257},{"i":1260,"t":"Format","u":"/ecalc/docs/about/references/RATE_FRACTIONS","h":"#format","p":1257},{"i":1262,"t":"Example","u":"/ecalc/docs/about/references/RATE_FRACTIONS","h":"#example","p":1257},{"i":1266,"t":"Description","u":"/ecalc/docs/about/references/STAGES","h":"#description","p":1264},{"i":1268,"t":"General usage","u":"/ecalc/docs/about/references/STAGES","h":"#general-usage","p":1264},{"i":1270,"t":"Use in VARIABLE_SPEED_COMPRESSOR_TRAIN","u":"/ecalc/docs/about/references/STAGES","h":"#use-in-variable_speed_compressor_train","p":1264},{"i":1272,"t":"Format","u":"/ecalc/docs/about/references/STAGES","h":"#format","p":1264},{"i":1274,"t":"Use in VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES","u":"/ecalc/docs/about/references/STAGES","h":"#use-in-variable_speed_compressor_train_multiple_streams_and_pressures","p":1264},{"i":1276,"t":"Format","u":"/ecalc/docs/about/references/STAGES","h":"#format-1","p":1264},{"i":1278,"t":"Example","u":"/ecalc/docs/about/references/STAGES","h":"#example","p":1264},{"i":1282,"t":"Description","u":"/ecalc/docs/about/references/START","h":"#description","p":1280},{"i":1284,"t":"Format","u":"/ecalc/docs/about/references/START","h":"#format","p":1280},{"i":1286,"t":"Example","u":"/ecalc/docs/about/references/START","h":"#example","p":1280},{"i":1290,"t":"Description","u":"/ecalc/docs/about/references/REGULARITY","h":"#description","p":1288},{"i":1292,"t":"Use in a DIRECT ENERGY USAGE MODEL","u":"/ecalc/docs/about/references/REGULARITY","h":"#use-in-a-direct-energy-usage-model","p":1288},{"i":1294,"t":"Reporting","u":"/ecalc/docs/about/references/REGULARITY","h":"#reporting","p":1288},{"i":1296,"t":"Format","u":"/ecalc/docs/about/references/REGULARITY","h":"#format","p":1288},{"i":1298,"t":"Example","u":"/ecalc/docs/about/references/REGULARITY","h":"#example","p":1288},{"i":1299,"t":"Constant regularity","u":"/ecalc/docs/about/references/REGULARITY","h":"#constant-regularity","p":1288},{"i":1301,"t":"Regularity from time series data","u":"/ecalc/docs/about/references/REGULARITY","h":"#regularity-from-time-series-data","p":1288},{"i":1303,"t":"Special: Combining calendar and stream day rates","u":"/ecalc/docs/about/references/REGULARITY","h":"#special-combining-calendar-and-stream-day-rates","p":1288},{"i":1307,"t":"Description","u":"/ecalc/docs/about/references/STREAM","h":"#description","p":1305},{"i":1309,"t":"Format","u":"/ecalc/docs/about/references/STREAM","h":"#format","p":1305},{"i":1311,"t":"Example","u":"/ecalc/docs/about/references/STREAM","h":"#example","p":1305},{"i":1315,"t":"Description","u":"/ecalc/docs/about/references/STREAMS","h":"#description","p":1313},{"i":1317,"t":"Format","u":"/ecalc/docs/about/references/STREAMS","h":"#format","p":1313},{"i":1319,"t":"Example","u":"/ecalc/docs/about/references/STREAMS","h":"#example","p":1313},{"i":1323,"t":"Description","u":"/ecalc/docs/about/references/SUCTION_PRESSURE","h":"#description","p":1321},{"i":1325,"t":"Format","u":"/ecalc/docs/about/references/SUCTION_PRESSURE","h":"#format","p":1321},{"i":1327,"t":"Example","u":"/ecalc/docs/about/references/SUCTION_PRESSURE","h":"#example","p":1321},{"i":1331,"t":"Description","u":"/ecalc/docs/about/references/TIME_SERIES","h":"#description","p":1329},{"i":1333,"t":"Required attributes","u":"/ecalc/docs/about/references/TIME_SERIES","h":"#required-attributes","p":1329},{"i":1335,"t":"Attributes dependent on time series type","u":"/ecalc/docs/about/references/TIME_SERIES","h":"#attributes-dependent-on-time-series-type","p":1329},{"i":1337,"t":"Example","u":"/ecalc/docs/about/references/TIME_SERIES","h":"#example","p":1329},{"i":1341,"t":"Description","u":"/ecalc/docs/about/references/TOTAL_SYSTEM_RATE","h":"#description","p":1339},{"i":1343,"t":"Format","u":"/ecalc/docs/about/references/TOTAL_SYSTEM_RATE","h":"#format","p":1339},{"i":1345,"t":"Example","u":"/ecalc/docs/about/references/TOTAL_SYSTEM_RATE","h":"#example","p":1339},{"i":1348,"t":"Description","u":"/ecalc/docs/about/references/TURBINE_LOADS","h":"#description","p":1347},{"i":1350,"t":"Format","u":"/ecalc/docs/about/references/TURBINE_LOADS","h":"#format","p":1347},{"i":1352,"t":"Example","u":"/ecalc/docs/about/references/TURBINE_LOADS","h":"#example","p":1347},{"i":1355,"t":"Description","u":"/ecalc/docs/about/references/TURBINE_EFFICIENCIES","h":"#description","p":1354},{"i":1357,"t":"Format","u":"/ecalc/docs/about/references/TURBINE_EFFICIENCIES","h":"#format","p":1354},{"i":1359,"t":"Example","u":"/ecalc/docs/about/references/TURBINE_EFFICIENCIES","h":"#example","p":1354},{"i":1363,"t":"Description","u":"/ecalc/docs/about/references/TYPE","h":"#description","p":1361},{"i":1365,"t":"Use in FACILITY_INPUTS","u":"/ecalc/docs/about/references/TYPE","h":"#use-in-facility_inputs","p":1361},{"i":1367,"t":"Use in TIME_SERIES","u":"/ecalc/docs/about/references/TYPE","h":"#use-in-time_series","p":1361},{"i":1369,"t":"Use in ENERGY_USAGE_MODEL","u":"/ecalc/docs/about/references/TYPE","h":"#use-in-energy_usage_model","p":1361},{"i":1371,"t":"Use in MODELS","u":"/ecalc/docs/about/references/TYPE","h":"#use-in-models","p":1361},{"i":1373,"t":"Use in VENTING_EMITTERS from v8.13","u":"/ecalc/docs/about/references/TYPE","h":"#use-in-venting_emitters-from-v813","p":1361},{"i":1375,"t":"Format","u":"/ecalc/docs/about/references/TYPE","h":"#format","p":1361},{"i":1378,"t":"Description","u":"/ecalc/docs/about/references/TURBINE_MODEL","h":"#description","p":1377},{"i":1380,"t":"Format","u":"/ecalc/docs/about/references/TURBINE_MODEL","h":"#format","p":1377},{"i":1382,"t":"Example","u":"/ecalc/docs/about/references/TURBINE_MODEL","h":"#example","p":1377},{"i":1385,"t":"Description","u":"/ecalc/docs/about/references/UNITS","h":"#description","p":1384},{"i":1387,"t":"Format","u":"/ecalc/docs/about/references/UNITS","h":"#format","p":1384},{"i":1388,"t":"Pumps","u":"/ecalc/docs/about/references/UNITS","h":"#pumps","p":1384},{"i":1390,"t":"Compressors","u":"/ecalc/docs/about/references/UNITS","h":"#compressors","p":1384},{"i":1392,"t":"Example","u":"/ecalc/docs/about/references/UNITS","h":"#example","p":1384},{"i":1393,"t":"Pumps","u":"/ecalc/docs/about/references/UNITS","h":"#pumps-1","p":1384},{"i":1395,"t":"Compressors","u":"/ecalc/docs/about/references/UNITS","h":"#compressors-1","p":1384},{"i":1398,"t":"Description","u":"/ecalc/docs/about/references/UNIT","h":"#description","p":1397},{"i":1400,"t":"Format","u":"/ecalc/docs/about/references/UNIT","h":"#format","p":1397},{"i":1402,"t":"Example","u":"/ecalc/docs/about/references/UNIT","h":"#example","p":1397},{"i":1406,"t":"Description","u":"/ecalc/docs/about/references/UPSTREAM_PRESSURE_CONTROL","h":"#description","p":1404},{"i":1408,"t":"Format","u":"/ecalc/docs/about/references/UPSTREAM_PRESSURE_CONTROL","h":"#format","p":1404},{"i":1410,"t":"Example","u":"/ecalc/docs/about/references/UPSTREAM_PRESSURE_CONTROL","h":"#example","p":1404},{"i":1414,"t":"Description","u":"/ecalc/docs/about/references/VARIABLES","h":"#description","p":1412},{"i":1418,"t":"eCalc version 8.7 and before: Description","u":"/ecalc/docs/about/references/VENTING_EMITTERS","h":"#ecalc-version-87-and-before-description","p":1416},{"i":1420,"t":"Format","u":"/ecalc/docs/about/references/VENTING_EMITTERS","h":"#format","p":1416},{"i":1422,"t":"Example","u":"/ecalc/docs/about/references/VENTING_EMITTERS","h":"#example","p":1416},{"i":1424,"t":"eCalc from version 8.8: Description","u":"/ecalc/docs/about/references/VENTING_EMITTERS","h":"#ecalc-from-version-88-description","p":1416},{"i":1426,"t":"Format","u":"/ecalc/docs/about/references/VENTING_EMITTERS","h":"#format-1","p":1416},{"i":1428,"t":"Example","u":"/ecalc/docs/about/references/VENTING_EMITTERS","h":"#example-1","p":1416},{"i":1430,"t":"eCalc from version 8.13: Description","u":"/ecalc/docs/about/references/VENTING_EMITTERS","h":"#ecalc-from-version-813-description","p":1416},{"i":1432,"t":"Format","u":"/ecalc/docs/about/references/VENTING_EMITTERS","h":"#format-2","p":1416},{"i":1434,"t":"Example","u":"/ecalc/docs/about/references/VENTING_EMITTERS","h":"#example-2","p":1416},{"i":1436,"t":"Format","u":"/ecalc/docs/about/references/VENTING_EMITTERS","h":"#format-3","p":1416},{"i":1438,"t":"Example","u":"/ecalc/docs/about/references/VENTING_EMITTERS","h":"#example-3","p":1416},{"i":1442,"t":"Description","u":"/ecalc/docs/about/references/VOLUME","h":"#description","p":1440},{"i":1444,"t":"Format","u":"/ecalc/docs/about/references/VOLUME","h":"#format","p":1440},{"i":1446,"t":"Example","u":"/ecalc/docs/about/references/VOLUME","h":"#example","p":1440},{"i":1449,"t":"New Features","u":"/ecalc/docs/changelog/latest","h":"#new-features","p":1448},{"i":1451,"t":"Fixes","u":"/ecalc/docs/changelog/latest","h":"#fixes","p":1448},{"i":1453,"t":"Breaking changes","u":"/ecalc/docs/changelog/latest","h":"#breaking-changes","p":1448},{"i":1457,"t":"Features","u":"/ecalc/docs/changelog/v7-0-release","h":"#features","p":1456},{"i":1459,"t":"Fixes","u":"/ecalc/docs/changelog/v7-0-release","h":"#fixes","p":1456},{"i":1461,"t":"CLI","u":"/ecalc/docs/changelog/v7-0-release","h":"#cli","p":1456},{"i":1464,"t":"8.23.0 (2024-09-26)","u":"/ecalc/docs/changelog/","h":"#8230-2024-09-26","p":1463},{"i":1465,"t":"⚠ BREAKING CHANGES","u":"/ecalc/docs/changelog/","h":"#-breaking-changes","p":1463},{"i":1467,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features","p":1463},{"i":1469,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation","p":1463},{"i":1471,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores","p":1463},{"i":1473,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring","p":1463},{"i":1475,"t":"8.22.0 (2024-09-19)","u":"/ecalc/docs/changelog/","h":"#8220-2024-09-19","p":1463},{"i":1476,"t":"⚠ BREAKING CHANGES","u":"/ecalc/docs/changelog/","h":"#-breaking-changes-1","p":1463},{"i":1478,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features-1","p":1463},{"i":1480,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes","p":1463},{"i":1482,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-1","p":1463},{"i":1484,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-1","p":1463},{"i":1486,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-1","p":1463},{"i":1488,"t":"Continuous Integration","u":"/ecalc/docs/changelog/","h":"#continuous-integration","p":1463},{"i":1490,"t":"8.21.0 (2024-08-26)","u":"/ecalc/docs/changelog/","h":"#8210-2024-08-26","p":1463},{"i":1491,"t":"⚠ BREAKING CHANGES","u":"/ecalc/docs/changelog/","h":"#-breaking-changes-2","p":1463},{"i":1493,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-1","p":1463},{"i":1495,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-2","p":1463},{"i":1497,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-2","p":1463},{"i":1499,"t":"8.20.0 (2024-08-07)","u":"/ecalc/docs/changelog/","h":"#8200-2024-08-07","p":1463},{"i":1500,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-2","p":1463},{"i":1502,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-3","p":1463},{"i":1504,"t":"8.19.0 (2024-07-31)","u":"/ecalc/docs/changelog/","h":"#8190-2024-07-31","p":1463},{"i":1505,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features-2","p":1463},{"i":1507,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-3","p":1463},{"i":1509,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-4","p":1463},{"i":1511,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-2","p":1463},{"i":1513,"t":"8.18.1 (2024-06-28)","u":"/ecalc/docs/changelog/","h":"#8181-2024-06-28","p":1463},{"i":1514,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features-3","p":1463},{"i":1516,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-3","p":1463},{"i":1518,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-3","p":1463},{"i":1520,"t":"8.18.0 (2024-06-25)","u":"/ecalc/docs/changelog/","h":"#8180-2024-06-25","p":1463},{"i":1521,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features-4","p":1463},{"i":1523,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-4","p":1463},{"i":1525,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-4","p":1463},{"i":1527,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-5","p":1463},{"i":1529,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-4","p":1463},{"i":1531,"t":"8.17.0 (2024-06-04)","u":"/ecalc/docs/changelog/","h":"#8170-2024-06-04","p":1463},{"i":1532,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-6","p":1463},{"i":1534,"t":"8.16.0 (2024-05-31)","u":"/ecalc/docs/changelog/","h":"#8160-2024-05-31","p":1463},{"i":1535,"t":"⚠ BREAKING CHANGES","u":"/ecalc/docs/changelog/","h":"#-breaking-changes-3","p":1463},{"i":1537,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features-5","p":1463},{"i":1539,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-5","p":1463},{"i":1541,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-5","p":1463},{"i":1543,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-7","p":1463},{"i":1545,"t":"Continuous Integration","u":"/ecalc/docs/changelog/","h":"#continuous-integration-1","p":1463},{"i":1547,"t":"8.15.0 (2024-04-19)","u":"/ecalc/docs/changelog/","h":"#8150-2024-04-19","p":1463},{"i":1548,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-6","p":1463},{"i":1550,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-8","p":1463},{"i":1552,"t":"8.14.0 (2024-04-18)","u":"/ecalc/docs/changelog/","h":"#8140-2024-04-18","p":1463},{"i":1553,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features-6","p":1463},{"i":1555,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-9","p":1463},{"i":1557,"t":"8.13.0 (2024-04-15)","u":"/ecalc/docs/changelog/","h":"#8130-2024-04-15","p":1463},{"i":1558,"t":"⚠ BREAKING CHANGES","u":"/ecalc/docs/changelog/","h":"#-breaking-changes-4","p":1463},{"i":1560,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-7","p":1463},{"i":1562,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-6","p":1463},{"i":1564,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-10","p":1463},{"i":1566,"t":"Tests","u":"/ecalc/docs/changelog/","h":"#tests","p":1463},{"i":1568,"t":"8.12.0 (2024-04-04)","u":"/ecalc/docs/changelog/","h":"#8120-2024-04-04","p":1463},{"i":1569,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features-7","p":1463},{"i":1571,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-8","p":1463},{"i":1573,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-7","p":1463},{"i":1575,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-11","p":1463},{"i":1577,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-5","p":1463},{"i":1579,"t":"8.11.0 (2024-03-18)","u":"/ecalc/docs/changelog/","h":"#8110-2024-03-18","p":1463},{"i":1580,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features-8","p":1463},{"i":1582,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-9","p":1463},{"i":1584,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-8","p":1463},{"i":1586,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-12","p":1463},{"i":1588,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-6","p":1463},{"i":1590,"t":"8.10.0 (2024-02-16)","u":"/ecalc/docs/changelog/","h":"#8100-2024-02-16","p":1463},{"i":1591,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-10","p":1463},{"i":1593,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-9","p":1463},{"i":1595,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-13","p":1463},{"i":1597,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-7","p":1463},{"i":1599,"t":"Tests","u":"/ecalc/docs/changelog/","h":"#tests-1","p":1463},{"i":1601,"t":"8.9.0 (2024-01-11)","u":"/ecalc/docs/changelog/","h":"#890-2024-01-11","p":1463},{"i":1602,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-11","p":1463},{"i":1604,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-10","p":1463},{"i":1606,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-14","p":1463},{"i":1608,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-8","p":1463},{"i":1610,"t":"8.8.0 (2023-12-27)","u":"/ecalc/docs/changelog/","h":"#880-2023-12-27","p":1463},{"i":1611,"t":"⚠ BREAKING CHANGES","u":"/ecalc/docs/changelog/","h":"#-breaking-changes-5","p":1463},{"i":1613,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features-9","p":1463},{"i":1615,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-12","p":1463},{"i":1617,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-11","p":1463},{"i":1619,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-15","p":1463},{"i":1621,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-9","p":1463},{"i":1623,"t":"Tests","u":"/ecalc/docs/changelog/","h":"#tests-2","p":1463},{"i":1625,"t":"Continuous Integration","u":"/ecalc/docs/changelog/","h":"#continuous-integration-2","p":1463},{"i":1627,"t":"8.7.0 (2023-12-05)","u":"/ecalc/docs/changelog/","h":"#870-2023-12-05","p":1463},{"i":1628,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-13","p":1463},{"i":1630,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-12","p":1463},{"i":1632,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-16","p":1463},{"i":1634,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-10","p":1463},{"i":1636,"t":"Continuous Integration","u":"/ecalc/docs/changelog/","h":"#continuous-integration-3","p":1463},{"i":1638,"t":"8.7.0","u":"/ecalc/docs/changelog/","h":"#870","p":1463},{"i":1639,"t":"⚠ BREAKING CHANGES","u":"/ecalc/docs/changelog/","h":"#-breaking-changes-6","p":1463},{"i":1641,"t":"8.6.0 (2023-11-21)","u":"/ecalc/docs/changelog/","h":"#860-2023-11-21","p":1463},{"i":1642,"t":"⚠ BREAKING CHANGES","u":"/ecalc/docs/changelog/","h":"#-breaking-changes-7","p":1463},{"i":1644,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features-10","p":1463},{"i":1646,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-14","p":1463},{"i":1648,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-13","p":1463},{"i":1650,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-17","p":1463},{"i":1652,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-11","p":1463},{"i":1654,"t":"8.5.0 (2023-10-30)","u":"/ecalc/docs/changelog/","h":"#850-2023-10-30","p":1463},{"i":1655,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features-11","p":1463},{"i":1657,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-15","p":1463},{"i":1659,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-14","p":1463},{"i":1661,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-18","p":1463},{"i":1663,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-12","p":1463},{"i":1665,"t":"8.4.0 (2023-09-25)","u":"/ecalc/docs/changelog/","h":"#840-2023-09-25","p":1463},{"i":1666,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features-12","p":1463},{"i":1668,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-16","p":1463},{"i":1670,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-15","p":1463},{"i":1672,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-19","p":1463},{"i":1674,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-13","p":1463},{"i":1676,"t":"8.3.0 (2023-08-11)","u":"/ecalc/docs/changelog/","h":"#830-2023-08-11","p":1463},{"i":1677,"t":"⚠ BREAKING CHANGES","u":"/ecalc/docs/changelog/","h":"#-breaking-changes-8","p":1463},{"i":1679,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features-13","p":1463},{"i":1681,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-17","p":1463},{"i":1683,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-16","p":1463},{"i":1685,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-20","p":1463},{"i":1687,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-14","p":1463},{"i":1689,"t":"Tests","u":"/ecalc/docs/changelog/","h":"#tests-3","p":1463},{"i":1691,"t":"Continuous Integration","u":"/ecalc/docs/changelog/","h":"#continuous-integration-4","p":1463},{"i":1693,"t":"8.2.2 (2023-05-28)","u":"/ecalc/docs/changelog/","h":"#822-2023-05-28","p":1463},{"i":1694,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-18","p":1463},{"i":1696,"t":"Continuous Integration","u":"/ecalc/docs/changelog/","h":"#continuous-integration-5","p":1463},{"i":1698,"t":"Tests","u":"/ecalc/docs/changelog/","h":"#tests-4","p":1463},{"i":1700,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-15","p":1463},{"i":1702,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-17","p":1463},{"i":1704,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-21","p":1463},{"i":1706,"t":"8.2.1 (2023-05-09)","u":"/ecalc/docs/changelog/","h":"#821-2023-05-09","p":1463},{"i":1707,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-22","p":1463},{"i":1709,"t":"Continuous Integration","u":"/ecalc/docs/changelog/","h":"#continuous-integration-6","p":1463},{"i":1712,"t":"Features","u":"/ecalc/docs/changelog/v7-1-release","h":"#features","p":1711},{"i":1714,"t":"CLI","u":"/ecalc/docs/changelog/v7-1-release","h":"#cli","p":1711},{"i":1717,"t":"Features","u":"/ecalc/docs/changelog/v7-3-release","h":"#features","p":1716},{"i":1719,"t":"Fixes","u":"/ecalc/docs/changelog/v7-3-release","h":"#fixes","p":1716},{"i":1722,"t":"Features","u":"/ecalc/docs/changelog/v7-4-release","h":"#features","p":1721},{"i":1724,"t":"Fixes","u":"/ecalc/docs/changelog/v7-4-release","h":"#fixes","p":1721},{"i":1727,"t":"Features","u":"/ecalc/docs/changelog/v7-5-release","h":"#features","p":1726},{"i":1729,"t":"Fixes","u":"/ecalc/docs/changelog/v7-5-release","h":"#fixes","p":1726},{"i":1731,"t":"CLI","u":"/ecalc/docs/changelog/v7-5-release","h":"#cli","p":1726},{"i":1734,"t":"Features","u":"/ecalc/docs/changelog/v7-2-release","h":"#features","p":1733},{"i":1736,"t":"Fixes","u":"/ecalc/docs/changelog/v7-2-release","h":"#fixes","p":1733},{"i":1739,"t":"Breaking changes","u":"/ecalc/docs/changelog/v7-6-release","h":"#breaking-changes","p":1738},{"i":1743,"t":"New features","u":"/ecalc/docs/changelog/v8.0-release","h":"#new-features","p":1741},{"i":1745,"t":"Experimental features","u":"/ecalc/docs/changelog/v8.0-release","h":"#experimental-features","p":1741},{"i":1747,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.0-release","h":"#breaking-changes","p":1741},{"i":1749,"t":"YAML","u":"/ecalc/docs/changelog/v8.0-release","h":"#yaml","p":1741},{"i":1751,"t":"CLI","u":"/ecalc/docs/changelog/v8.0-release","h":"#cli","p":1741},{"i":1755,"t":"New features","u":"/ecalc/docs/changelog/v8.1-release","h":"#new-features","p":1753},{"i":1757,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.1-release","h":"#breaking-changes","p":1753},{"i":1759,"t":"Input: YAML / Resource files","u":"/ecalc/docs/changelog/v8.1-release","h":"#input-yaml--resource-files","p":1753},{"i":1761,"t":"Output: LTP","u":"/ecalc/docs/changelog/v8.1-release","h":"#output-ltp","p":1753},{"i":1764,"t":"New Features","u":"/ecalc/docs/changelog/v8.11-release","h":"#new-features","p":1763},{"i":1765,"t":"Fixes","u":"/ecalc/docs/changelog/v8.11-release","h":"#fixes","p":1763},{"i":1766,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.11-release","h":"#breaking-changes","p":1763},{"i":1769,"t":"New Features","u":"/ecalc/docs/changelog/v8.10-release","h":"#new-features","p":1768},{"i":1770,"t":"Fixes","u":"/ecalc/docs/changelog/v8.10-release","h":"#fixes","p":1768},{"i":1772,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.10-release","h":"#breaking-changes","p":1768},{"i":1774,"t":"New Features","u":"/ecalc/docs/changelog/v8.12-release","h":"#new-features","p":1773},{"i":1776,"t":"Fixes","u":"/ecalc/docs/changelog/v8.12-release","h":"#fixes","p":1773},{"i":1778,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.12-release","h":"#breaking-changes","p":1773},{"i":1780,"t":"New Features","u":"/ecalc/docs/changelog/v8.13-release","h":"#new-features","p":1779},{"i":1782,"t":"Fixes","u":"/ecalc/docs/changelog/v8.13-release","h":"#fixes","p":1779},{"i":1784,"t":"Documentation","u":"/ecalc/docs/changelog/v8.13-release","h":"#documentation","p":1779},{"i":1786,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.13-release","h":"#breaking-changes","p":1779},{"i":1789,"t":"New Features","u":"/ecalc/docs/changelog/v8.14-release","h":"#new-features","p":1788},{"i":1792,"t":"Fixes","u":"/ecalc/docs/changelog/v8.15-release","h":"#fixes","p":1791},{"i":1795,"t":"Bug Fixes","u":"/ecalc/docs/changelog/v8.17-release","h":"#bug-fixes","p":1794},{"i":1798,"t":"Breaking Changes","u":"/ecalc/docs/changelog/v8.16-release","h":"#breaking-changes","p":1797},{"i":1800,"t":"New Features","u":"/ecalc/docs/changelog/v8.16-release","h":"#new-features","p":1797},{"i":1802,"t":"Bug Fixes","u":"/ecalc/docs/changelog/v8.16-release","h":"#bug-fixes","p":1797},{"i":1804,"t":"Documentation","u":"/ecalc/docs/changelog/v8.16-release","h":"#documentation","p":1797},{"i":1807,"t":"Features","u":"/ecalc/docs/changelog/v8.18-release","h":"#features","p":1806},{"i":1809,"t":"Bug Fixes","u":"/ecalc/docs/changelog/v8.18-release","h":"#bug-fixes","p":1806},{"i":1811,"t":"Documentation","u":"/ecalc/docs/changelog/v8.18-release","h":"#documentation","p":1806},{"i":1814,"t":"Features","u":"/ecalc/docs/changelog/v8.19-release","h":"#features","p":1813},{"i":1816,"t":"Bug Fixes","u":"/ecalc/docs/changelog/v8.19-release","h":"#bug-fixes","p":1813},{"i":1820,"t":"New features","u":"/ecalc/docs/changelog/v8.2-release","h":"#new-features","p":1818},{"i":1822,"t":"Fixes","u":"/ecalc/docs/changelog/v8.2-release","h":"#fixes","p":1818},{"i":1825,"t":"Bug Fixes","u":"/ecalc/docs/changelog/v8.20-release","h":"#bug-fixes","p":1824},{"i":1829,"t":"New Features","u":"/ecalc/docs/changelog/v8.3-release","h":"#new-features","p":1827},{"i":1831,"t":"Fixes","u":"/ecalc/docs/changelog/v8.3-release","h":"#fixes","p":1827},{"i":1833,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.3-release","h":"#breaking-changes","p":1827},{"i":1835,"t":"Input: YAML / Resource files","u":"/ecalc/docs/changelog/v8.3-release","h":"#input-yaml--resource-files","p":1827},{"i":1838,"t":"Breaking Changes","u":"/ecalc/docs/changelog/v8.21-release","h":"#breaking-changes","p":1837},{"i":1840,"t":"Features","u":"/ecalc/docs/changelog/v8.21-release","h":"#features","p":1837},{"i":1843,"t":"New Features","u":"/ecalc/docs/changelog/v8.5-release","h":"#new-features","p":1842},{"i":1845,"t":"Fixes","u":"/ecalc/docs/changelog/v8.5-release","h":"#fixes","p":1842},{"i":1847,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.5-release","h":"#breaking-changes","p":1842},{"i":1850,"t":"New Features","u":"/ecalc/docs/changelog/v8.6-release","h":"#new-features","p":1849},{"i":1852,"t":"Fixes","u":"/ecalc/docs/changelog/v8.6-release","h":"#fixes","p":1849},{"i":1854,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.6-release","h":"#breaking-changes","p":1849},{"i":1857,"t":"New Features","u":"/ecalc/docs/changelog/v8.4-release","h":"#new-features","p":1856},{"i":1859,"t":"Fixes","u":"/ecalc/docs/changelog/v8.4-release","h":"#fixes","p":1856},{"i":1861,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.4-release","h":"#breaking-changes","p":1856},{"i":1864,"t":"New Features","u":"/ecalc/docs/changelog/v8.7-release","h":"#new-features","p":1863},{"i":1866,"t":"Fixes","u":"/ecalc/docs/changelog/v8.7-release","h":"#fixes","p":1863},{"i":1868,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.7-release","h":"#breaking-changes","p":1863},{"i":1871,"t":"New Features","u":"/ecalc/docs/changelog/v8.8-release","h":"#new-features","p":1870},{"i":1873,"t":"Fixes","u":"/ecalc/docs/changelog/v8.8-release","h":"#fixes","p":1870},{"i":1874,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.8-release","h":"#breaking-changes","p":1870},{"i":1877,"t":"Prerequisites","u":"/ecalc/docs/contribute/documentation-guide/documentation","h":"#prerequisites","p":1875},{"i":1879,"t":"Contributing","u":"/ecalc/docs/contribute/documentation-guide/documentation","h":"#contributing","p":1875},{"i":1881,"t":"How it works","u":"/ecalc/docs/contribute/documentation-guide/documentation","h":"#how-it-works","p":1875},{"i":1883,"t":"Special features","u":"/ecalc/docs/contribute/documentation-guide/documentation","h":"#special-features","p":1875},{"i":1887,"t":"Prerequisites","u":"/ecalc/docs/contribute/get_started","h":"#prerequisites","p":1885},{"i":1889,"t":"How to contribute","u":"/ecalc/docs/contribute/get_started","h":"#how-to-contribute","p":1885},{"i":1891,"t":"Initiate change","u":"/ecalc/docs/contribute/get_started","h":"#initiate-change","p":1885},{"i":1893,"t":"Make a Pull Request","u":"/ecalc/docs/contribute/get_started","h":"#make-a-pull-request","p":1885},{"i":1895,"t":"Get code review","u":"/ecalc/docs/contribute/get_started","h":"#get-code-review","p":1885},{"i":1897,"t":"Guidelines","u":"/ecalc/docs/contribute/get_started","h":"#guidelines","p":1885},{"i":1899,"t":"Pull Requests","u":"/ecalc/docs/contribute/get_started","h":"#pull-requests","p":1885},{"i":1901,"t":"Git commit format","u":"/ecalc/docs/contribute/get_started","h":"#git-commit-format","p":1885},{"i":1903,"t":"Readability","u":"/ecalc/docs/contribute/get_started","h":"#readability","p":1885},{"i":1905,"t":"Code style","u":"/ecalc/docs/contribute/get_started","h":"#code-style","p":1885},{"i":1911,"t":"Standard Markdown","u":"/ecalc/docs/contribute/documentation-guide/markdown","h":"#standard-markdown","p":1909},{"i":1913,"t":"Markdown summary","u":"/ecalc/docs/contribute/documentation-guide/markdown","h":"","p":1909},{"i":1917,"t":"Setting up Git","u":"/ecalc/docs/contribute/guides/git","h":"#setting-up-git","p":1915},{"i":1919,"t":"Using Git","u":"/ecalc/docs/contribute/guides/git","h":"#using-git","p":1915},{"i":1921,"t":"Cloning a git repository","u":"/ecalc/docs/contribute/guides/git","h":"#cloning-a-git-repository","p":1915},{"i":1923,"t":"Tell Git who you are","u":"/ecalc/docs/contribute/guides/git","h":"#tell-git-who-you-are","p":1915},{"i":1925,"t":"Create your own branch","u":"/ecalc/docs/contribute/guides/git","h":"#create-your-own-branch","p":1915},{"i":1927,"t":"Switch between existing branches","u":"/ecalc/docs/contribute/guides/git","h":"#switch-between-existing-branches","p":1915},{"i":1929,"t":"Fetch changes from GitHub","u":"/ecalc/docs/contribute/guides/git","h":"#fetch-changes-from-github","p":1915},{"i":1931,"t":"Send your changes to GitHub","u":"/ecalc/docs/contribute/guides/git","h":"#send-your-changes-to-github","p":1915},{"i":1933,"t":"Check status of changes","u":"/ecalc/docs/contribute/guides/git","h":"#check-status-of-changes","p":1915},{"i":1935,"t":"Add files","u":"/ecalc/docs/contribute/guides/git","h":"#add-files","p":1915},{"i":1937,"t":"Commit changes","u":"/ecalc/docs/contribute/guides/git","h":"#commit-changes","p":1915},{"i":1939,"t":"Send changes to GitHub","u":"/ecalc/docs/contribute/guides/git","h":"#send-changes-to-github","p":1915},{"i":1941,"t":"Workflow examples","u":"/ecalc/docs/contribute/guides/git","h":"#workflow-examples","p":1915},{"i":1942,"t":"Pull Requests","u":"/ecalc/docs/contribute/guides/git","h":"#pull-requests","p":1915},{"i":1944,"t":"Fork the repository","u":"/ecalc/docs/contribute/guides/git","h":"#fork-the-repository","p":1915}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/3",[0,5.209,1,6.015]],["t/4",[2,3.248,3,4.62]],["t/6",[4,6.015,5,6.015]],["t/12",[2,4.158]],["t/14",[2,3.248,6,3.357]],["t/16",[2,3.248,6,3.357]],["t/20",[7,1.73,8,4.365]],["t/24",[2,3.248,9,5.529]],["t/26",[2,3.248,10,5.529]],["t/28",[2,3.248,11,4.62]],["t/30",[2,2.664,11,3.79,12,4.273]],["t/32",[2,2.664,11,3.79,13,2.754]],["t/36",[14,6.015,15,5.209]],["t/38",[13,1.79,15,2.777,16,2.948,17,2.948,18,3.207,19,3.207]],["t/40",[2,1.731,15,2.777,16,2.948,17,2.948,20,3.207,21,3.207]],["t/42",[22,5.529,23,5.529]],["t/44",[24,4.273,25,4.935,26,4.935]],["t/46",[22,5.529,23,5.529]],["t/54",[13,3.357,27,4.077]],["t/55",[27,4.077,28,4.365]],["t/57",[29,3.28,30,2.422,31,3.679]],["t/59",[32,1.824,33,2.375,34,2.057,35,2.375,36,1.644,37,2.375,38,2.375,39,2.183,40,1.579]],["t/61",[41,2.39,42,2.6,43,2.066,44,1.887,45,2.066,46,2.6,47,2.6,48,2.6]],["t/63",[49,2.872,50,1.731,51,2.487,52,2.872,53,2.872,54,2.487,55,2.141]],["t/68",[56,3.954]],["t/69",[13,4.298]],["t/71",[12,6.669]],["t/72",[6,1.79,29,2.131,57,2.948,58,2.777,59,3.207,60,3.207]],["t/74",[30,1.41,61,2.872,62,3.933,63,2.872,64,2.872,65,2.872]],["t/76",[40,3.28,51,4.273,66,4.536]],["t/78",[40,3.28,66,4.536,67,4.935]],["t/80",[68,4.077,69,4.536,70,4.935]],["t/82",[71,7.701]],["t/83",[72,7.701]],["t/87",[13,3.357,27,4.077]],["t/88",[27,4.077,28,4.365]],["t/90",[34,5.209,73,6.015]],["t/92",[3,4.62,27,4.077]],["t/99",[74,7.701]],["t/105",[13,3.357,27,4.077]],["t/106",[29,3.28,30,2.422,75,4.077]],["t/110",[13,3.357,27,4.077]],["t/111",[29,2.78,50,2.521,76,1.971,77,3.457]],["t/115",[13,3.357,27,4.077]],["t/116",[29,2.131,30,1.574,78,2.463,79,0.945,80,2.777,81,2.777]],["t/120",[13,3.357,27,4.077]],["t/121",[27,4.077,28,4.365]],["t/123",[29,3.28,30,2.422,82,3.921]],["t/127",[13,3.357,27,4.077]],["t/128",[29,3.28,30,2.422,75,4.077]],["t/132",[2,2.259,83,4.184,84,4.184,85,4.184]],["t/134",[86,6.015,87,4.62]],["t/144",[13,2.754,28,3.581,56,2.534]],["t/146",[31,5.74]],["t/148",[88,5.914]],["t/150",[89,6.118]],["t/152",[90,5.22]],["t/154",[91,5.452]],["t/156",[77,6.362]],["t/158",[92,7.078]],["t/160",[93,5.914]],["t/162",[2,2.259,13,2.335,56,2.148,94,3.118]],["t/164",[40,3.998,95,4.077]],["t/168",[13,2.754,28,3.581,56,2.534]],["t/170",[31,5.74]],["t/172",[88,5.914]],["t/174",[89,6.118]],["t/176",[90,5.22]],["t/178",[91,5.452]],["t/180",[77,6.362]],["t/182",[92,7.078]],["t/184",[93,5.914]],["t/186",[2,2.259,13,2.335,56,2.148,94,3.118]],["t/188",[40,3.998,95,4.077]],["t/192",[13,2.754,28,3.581,56,2.534]],["t/194",[31,5.74]],["t/196",[88,5.914]],["t/198",[89,6.118]],["t/200",[56,3.954]],["t/202",[90,5.22]],["t/204",[91,5.452]],["t/206",[91,5.452]],["t/208",[91,4.259,96,5.529]],["t/210",[93,5.914]],["t/212",[2,2.259,13,2.335,56,2.148,94,3.118]],["t/214",[40,3.998,95,4.077]],["t/218",[13,2.754,28,3.581,56,2.534]],["t/220",[31,5.74]],["t/222",[88,5.914]],["t/224",[56,3.954]],["t/226",[89,6.118]],["t/228",[91,5.452]],["t/230",[77,6.362]],["t/232",[56,3.089,94,4.484]],["t/234",[43,4.779,95,4.077]],["t/235",[97,5.209,98,4.97]],["t/237",[98,4.97,99,6.015]],["t/243",[79,2.27]],["t/245",[36,4.164,100,4.779]],["t/249",[101,7.078]],["t/251",[79,1.455,95,3.345,97,4.273]],["t/253",[7,1.73,102,5.529]],["t/255",[78,3.79,103,3.921,104,3.416]],["t/259",[13,2.754,28,3.581,56,2.534]],["t/261",[31,5.74]],["t/263",[88,5.914]],["t/265",[89,6.118]],["t/267",[56,3.954]],["t/269",[90,5.22]],["t/271",[91,5.452]],["t/273",[91,5.452]],["t/275",[91,4.259,96,5.529]],["t/277",[93,5.914]],["t/279",[2,2.259,13,2.335,56,2.148,94,3.118]],["t/281",[40,3.998,95,4.077]],["t/284",[105,7.701]],["t/288",[106,7.701]],["t/290",[103,4.779,104,4.164]],["t/292",[79,2.27]],["t/294",[107,7.701]],["t/295",[108,2.555]],["t/297",[103,4.779,104,4.164]],["t/299",[79,2.27]],["t/301",[7,2.215]],["t/305",[79,2.27]],["t/307",[40,2.131,103,2.548,104,2.22,109,3.207,110,1.856,111,3.207]],["t/309",[78,5.914]],["t/311",[7,1.73,102,5.529]],["t/312",[7,1.73,112,6.015]],["t/314",[7,1.73,113,6.015]],["t/318",[78,3.79,103,3.921,104,3.416]],["t/320",[7,2.215]],["t/324",[40,3.28,114,4.935,115,4.935]],["t/326",[7,2.215]],["t/327",[7,1.419,13,2.754,79,1.455]],["t/329",[7,1.73,94,4.484]],["t/333",[44,3.581,45,3.921,116,4.536]],["t/335",[44,3.036,56,2.148,117,3.845,118,4.184]],["t/337",[79,2.27]],["t/339",[7,2.215]],["t/340",[55,4.484,69,5.529]],["t/342",[44,3.581,45,3.921,116,4.536]],["t/344",[44,4.365,117,5.529]],["t/348",[79,2.27]],["t/350",[7,2.215]],["t/356",[79,2.27]],["t/358",[7,2.215]],["t/362",[79,2.27]],["t/364",[7,2.215]],["t/368",[79,2.27]],["t/372",[8,3.036,56,2.148,119,3.324,120,3.457]],["t/374",[79,2.27]],["t/376",[7,2.215]],["t/378",[78,5.914]],["t/380",[8,3.036,56,2.148,120,3.457,121,4.184]],["t/382",[79,2.27]],["t/384",[7,2.215]],["t/386",[78,5.914]],["t/392",[79,2.27]],["t/394",[101,5.529,122,4.97]],["t/395",[108,2.555]],["t/397",[79,2.27]],["t/399",[123,6.015,124,6.015]],["t/400",[108,2.555]],["t/402",[7,2.215]],["t/404",[125,6.015,126,5.529]],["t/405",[108,2.555]],["t/407",[7,1.203,55,3.118,58,3.623,126,3.845]],["t/411",[79,2.27]],["t/413",[7,2.215]],["t/415",[36,3.416,95,3.345,127,4.935]],["t/419",[79,2.27]],["t/421",[36,4.164,100,4.779]],["t/429",[110,1.856,128,2.65,129,2.65,130,2.65,131,2.391,132,2.327]],["t/431",[79,2.27]],["t/433",[7,2.215]],["t/435",[90,2.174,110,1.856,128,2.65,129,2.65,131,2.391,132,2.327]],["t/437",[79,2.27]],["t/439",[7,2.215]],["t/441",[55,2.391,110,1.856,132,2.327,133,2.65,134,2.777,135,2.777]],["t/443",[79,2.27]],["t/445",[7,2.215]],["t/447",[7,2.215]],["t/449",[43,2.066,55,1.938,95,1.762,110,1.505,132,1.887,134,2.252,135,2.252,136,2.6]],["t/451",[79,2.27]],["t/453",[7,2.215]],["t/455",[87,2.206,90,1.947,110,1.662,131,2.141,132,2.084,137,2.872,138,2.872]],["t/457",[79,2.27]],["t/461",[79,2.27]],["t/463",[56,1.475,110,2.756,139,2.487,140,2.084,141,2.872,142,2.373]],["t/465",[56,1.335,110,2.536,139,2.252,140,1.887,142,2.148,143,2.252,144,2.39]],["t/467",[7,2.215]],["t/468",[82,1.737,90,1.482,110,2.187,128,1.806,129,1.806,130,1.806,131,1.63,132,1.586,145,1.893]],["t/470",[54,1.754,55,1.51,82,1.609,110,2.047,130,1.673,132,1.47,133,1.673,134,1.754,135,1.754,146,2.025]],["t/472",[110,1.172,132,1.47,133,1.673,140,1.47,142,2.921,143,1.754,147,2.025,148,2.025,149,2.025,150,2.025]],["t/474",[110,2.102,140,2.635,142,3,143,3.144,144,3.337]],["t/478",[79,2.27]],["t/484",[79,2.27]],["t/486",[8,4.365,151,5.529]],["t/488",[152,7.701]],["t/490",[87,3.79,153,2.306,154,4.077]],["t/492",[7,2.215]],["t/495",[155,7.701]],["t/497",[2,2.664,56,2.534,87,3.79]],["t/499",[0,3.144,87,2.789,154,3,156,3.631,157,3.337]],["t/501",[0,3.144,87,2.789,154,3,157,3.337,158,3.631]],["t/505",[57,5.529,159,6.015]],["t/507",[7,2.215]],["t/508",[34,3.144,43,2.885,95,2.461,160,3.144,161,3.631]],["t/510",[56,2.534,62,4.077,162,4.935]],["t/514",[6,2.027,56,1.864,82,2.885,133,3,145,3.144]],["t/516",[79,2.27]],["t/518",[7,2.215]],["t/520",[56,1.864,82,2.885,128,3,145,3.144,163,3.631]],["t/522",[79,2.27]],["t/524",[7,2.215]],["t/528",[36,4.164,100,4.779]],["t/530",[79,2.27]],["t/532",[104,5.33]],["t/534",[7,2.215]],["t/538",[79,2.27]],["t/540",[7,2.215]],["t/542",[39,2.948,54,2.777,56,1.647,110,1.856,140,2.327,160,2.777]],["t/544",[79,2.27]],["t/546",[7,2.215]],["t/550",[90,4.077,129,4.97]],["t/552",[79,2.27]],["t/554",[7,2.215]],["t/556",[6,3.357,90,4.077]],["t/558",[7,2.215]],["t/569",[139,3.623,164,4.184,165,4.184,166,4.184]],["t/571",[167,6.669]],["t/572",[167,5.209,168,6.015]],["t/573",[104,3.416,169,4.935,170,4.935]],["t/575",[97,5.209,171,5.529]],["t/577",[171,5.529,172,6.015]],["t/579",[173,7.701]],["t/581",[174,7.701]],["t/585",[151,4.536,175,4.935,176,4.935]],["t/589",[108,2.555]],["t/591",[79,2.27]],["t/593",[7,2.215]],["t/597",[108,2.555]],["t/599",[79,2.27]],["t/601",[7,2.215]],["t/605",[108,2.555]],["t/607",[79,2.27]],["t/609",[7,2.215]],["t/613",[108,2.555]],["t/615",[79,2.27]],["t/617",[7,2.215]],["t/620",[108,2.555]],["t/622",[79,2.27]],["t/624",[7,2.215]],["t/628",[2,3.248,9,5.529]],["t/630",[2,3.248,10,5.529]],["t/632",[2,3.248,11,4.62]],["t/634",[2,2.664,11,3.79,12,4.273]],["t/636",[2,2.664,11,3.79,13,2.754]],["t/639",[108,2.555]],["t/641",[79,2.27]],["t/643",[7,2.215]],["t/647",[108,2.555]],["t/649",[79,2.27]],["t/651",[7,2.215]],["t/655",[108,2.555]],["t/657",[79,2.27]],["t/659",[7,2.215]],["t/663",[108,2.555]],["t/665",[79,2.27]],["t/667",[7,1.73,29,3.998]],["t/669",[7,1.419,32,3.79,177,4.536]],["t/672",[108,2.555]],["t/674",[79,2.27]],["t/678",[108,2.555]],["t/680",[79,2.27]],["t/682",[7,2.215]],["t/686",[108,2.555]],["t/688",[79,2.27]],["t/690",[7,2.215]],["t/694",[108,2.555]],["t/696",[79,2.27]],["t/700",[108,2.555]],["t/702",[79,2.27]],["t/704",[7,2.215]],["t/708",[108,2.555]],["t/710",[79,2.27]],["t/712",[7,2.215]],["t/716",[108,2.555]],["t/718",[79,2.27]],["t/720",[7,2.215]],["t/724",[108,2.555]],["t/726",[6,1.79,56,1.647,110,1.856,130,2.65,131,2.391,140,2.327]],["t/727",[79,2.27]],["t/729",[7,2.215]],["t/731",[6,1.79,56,1.647,90,2.174,110,1.856,131,2.391,140,2.327]],["t/732",[79,2.27]],["t/734",[7,2.215]],["t/736",[6,1.326,56,1.22,90,1.61,110,1.375,131,1.771,140,1.724,154,1.963,178,2.375,179,2.183]],["t/737",[79,2.27]],["t/739",[7,2.215]],["t/743",[108,2.555]],["t/745",[7,2.215]],["t/749",[108,2.555]],["t/751",[79,2.27]],["t/753",[7,2.215]],["t/756",[108,2.555]],["t/758",[79,2.27]],["t/760",[7,2.215]],["t/763",[108,2.555]],["t/765",[79,2.27]],["t/767",[7,2.215]],["t/770",[108,2.555]],["t/772",[79,2.27]],["t/774",[7,2.215]],["t/777",[108,2.555]],["t/779",[79,2.27]],["t/781",[7,2.215]],["t/785",[108,2.555]],["t/787",[79,2.27]],["t/789",[7,2.215]],["t/793",[108,2.555]],["t/795",[79,2.27]],["t/797",[7,2.215]],["t/800",[108,2.555]],["t/802",[79,2.27]],["t/803",[110,4.457]],["t/805",[119,6.118]],["t/807",[7,2.215]],["t/811",[108,2.555]],["t/813",[79,2.27]],["t/815",[7,2.215]],["t/816",[7,1.73,29,3.998]],["t/818",[7,1.73,32,4.62]],["t/822",[108,2.555]],["t/824",[79,2.27]],["t/826",[7,2.215]],["t/830",[108,2.555]],["t/832",[79,2.27]],["t/834",[7,2.215]],["t/838",[108,2.555]],["t/840",[79,2.27]],["t/842",[7,2.215]],["t/846",[108,2.555]],["t/848",[79,2.27]],["t/850",[7,2.215]],["t/854",[108,2.555]],["t/856",[180,7.701]],["t/857",[79,2.27]],["t/859",[7,2.215]],["t/861",[2,1.731,36,2.22,80,2.777,81,2.777,181,3.207,182,2.777]],["t/863",[79,2.27]],["t/865",[7,2.215]],["t/867",[2,1.731,36,2.22,80,2.777,81,2.777,182,2.777,183,3.207]],["t/869",[79,2.27]],["t/871",[7,2.215]],["t/875",[108,2.555]],["t/877",[79,2.27]],["t/879",[7,2.215]],["t/883",[108,2.555]],["t/885",[8,3.036,56,2.148,120,3.457,184,4.184]],["t/888",[108,2.555]],["t/890",[79,2.27]],["t/892",[7,2.215]],["t/896",[108,2.555]],["t/898",[79,2.27]],["t/900",[7,2.215]],["t/904",[108,2.555]],["t/906",[79,2.27]],["t/908",[7,2.215]],["t/912",[108,2.555]],["t/914",[79,2.27]],["t/916",[7,2.215]],["t/920",[108,2.555]],["t/922",[79,2.27]],["t/924",[104,5.33]],["t/926",[7,2.215]],["t/930",[108,2.555]],["t/932",[36,4.164,100,4.779]],["t/936",[108,2.555]],["t/938",[6,3.357,185,5.529]],["t/940",[6,3.357,68,4.97]],["t/942",[79,2.27]],["t/944",[7,2.215]],["t/945",[6,3.357,185,5.529]],["t/947",[6,3.357,68,4.97]],["t/951",[108,2.555]],["t/953",[79,2.27]],["t/955",[7,2.215]],["t/959",[108,2.555]],["t/961",[79,2.27]],["t/963",[7,2.215]],["t/966",[108,2.555]],["t/968",[79,2.27]],["t/970",[7,2.215]],["t/973",[108,2.555]],["t/975",[79,2.27]],["t/977",[7,2.215]],["t/981",[108,2.555]],["t/983",[79,2.27]],["t/985",[7,2.215]],["t/989",[108,2.555]],["t/992",[108,2.555]],["t/994",[79,2.27]],["t/996",[7,2.215]],["t/1000",[108,2.555]],["t/1002",[79,2.27]],["t/1004",[7,2.215]],["t/1008",[108,2.555]],["t/1010",[79,2.27]],["t/1012",[7,2.215]],["t/1016",[108,2.555]],["t/1018",[79,2.27]],["t/1020",[7,2.215]],["t/1021",[8,4.365,186,6.015]],["t/1023",[44,4.365,187,5.529]],["t/1025",[7,1.73,94,4.484]],["t/1029",[108,2.555]],["t/1033",[108,2.555]],["t/1035",[79,2.27]],["t/1037",[7,2.215]],["t/1040",[108,2.555]],["t/1042",[79,2.27]],["t/1043",[110,4.457]],["t/1045",[119,6.118]],["t/1047",[7,2.215]],["t/1048",[110,4.457]],["t/1051",[108,2.555]],["t/1053",[79,2.27]],["t/1055",[7,0.922,29,2.131,188,2.777,189,2.948,190,2.948,191,3.207]],["t/1057",[7,0.922,32,2.463,188,2.777,189,2.948,192,2.948,193,2.948]],["t/1059",[7,0.922,41,2.948,188,2.777,190,2.948,192,2.948,193,2.948]],["t/1063",[108,2.555]],["t/1065",[79,2.27]],["t/1067",[7,2.215]],["t/1071",[108,2.555]],["t/1073",[79,2.27]],["t/1075",[7,2.215]],["t/1079",[108,2.555]],["t/1083",[108,2.555]],["t/1085",[79,2.27]],["t/1087",[104,5.33]],["t/1089",[7,2.215]],["t/1093",[108,2.555]],["t/1095",[6,3.357,56,3.089]],["t/1097",[6,3.357,93,4.62]],["t/1101",[108,2.555]],["t/1103",[79,2.27]],["t/1105",[7,2.215]],["t/1108",[108,2.555]],["t/1110",[79,2.27]],["t/1112",[7,2.215]],["t/1116",[108,2.555]],["t/1118",[122,6.362]],["t/1120",[79,2.27]],["t/1124",[108,2.555]],["t/1126",[79,2.27]],["t/1128",[7,2.215]],["t/1132",[108,2.555]],["t/1134",[122,6.362]],["t/1136",[79,2.27]],["t/1140",[108,2.555]],["t/1142",[79,2.27]],["t/1144",[36,3.416,56,2.534,100,3.921]],["t/1148",[108,2.555]],["t/1150",[122,6.362]],["t/1152",[79,2.27]],["t/1154",[7,2.215]],["t/1158",[108,2.555]],["t/1160",[79,2.27]],["t/1162",[7,2.215]],["t/1166",[108,2.555]],["t/1168",[62,6.362]],["t/1170",[194,7.701]],["t/1172",[195,7.701]],["t/1174",[196,7.701]],["t/1176",[197,7.701]],["t/1178",[198,7.701]],["t/1180",[7,1.73,29,3.998]],["t/1182",[7,1.73,32,4.62]],["t/1184",[79,2.27]],["t/1185",[7,2.215]],["t/1188",[108,2.555]],["t/1190",[79,2.27]],["t/1192",[7,2.215]],["t/1196",[108,2.555]],["t/1198",[79,2.27]],["t/1200",[7,2.215]],["t/1204",[108,2.555]],["t/1206",[79,2.27]],["t/1208",[7,2.215]],["t/1211",[108,2.555]],["t/1213",[79,2.27]],["t/1215",[7,2.215]],["t/1219",[108,2.555]],["t/1221",[79,2.27]],["t/1223",[7,2.215]],["t/1227",[108,2.555]],["t/1229",[79,2.27]],["t/1231",[7,2.215]],["t/1233",[2,1.96,6,2.027,68,3,75,3,199,3.631]],["t/1235",[79,2.27]],["t/1237",[7,2.215]],["t/1241",[108,2.555]],["t/1243",[79,2.27]],["t/1245",[7,1.73,29,3.998]],["t/1247",[7,1.419,32,3.79,177,4.536]],["t/1251",[108,2.555]],["t/1253",[79,2.27]],["t/1255",[7,2.215]],["t/1258",[108,2.555]],["t/1260",[79,2.27]],["t/1262",[7,2.215]],["t/1266",[108,2.555]],["t/1268",[8,4.365,55,4.484]],["t/1270",[6,3.357,200,6.015]],["t/1272",[79,2.27]],["t/1274",[6,3.357,201,6.015]],["t/1276",[79,2.27]],["t/1278",[7,2.215]],["t/1282",[108,2.555]],["t/1284",[79,2.27]],["t/1286",[7,2.215]],["t/1290",[108,2.555]],["t/1292",[6,2.027,8,2.635,56,1.864,120,3,202,3.631]],["t/1294",[203,7.701]],["t/1296",[79,2.27]],["t/1298",[7,2.215]],["t/1299",[204,6.015,205,5.529]],["t/1301",[43,3.324,44,3.036,45,3.324,205,3.845]],["t/1303",[24,2.777,62,2.65,160,2.777,179,2.948,206,3.207,207,3.207]],["t/1307",[108,2.555]],["t/1309",[79,2.27]],["t/1311",[7,2.215]],["t/1315",[108,2.555]],["t/1317",[79,2.27]],["t/1319",[7,2.215]],["t/1323",[108,2.555]],["t/1325",[79,2.27]],["t/1327",[7,2.215]],["t/1331",[108,2.555]],["t/1333",[104,4.164,208,5.529]],["t/1335",[36,2.513,44,2.635,45,2.885,187,3.337,208,3.337]],["t/1337",[7,2.215]],["t/1341",[108,2.555]],["t/1343",[79,2.27]],["t/1345",[7,2.215]],["t/1348",[108,2.555]],["t/1350",[79,2.27]],["t/1352",[7,2.215]],["t/1355",[108,2.555]],["t/1357",[79,2.27]],["t/1359",[7,2.215]],["t/1363",[108,2.555]],["t/1365",[6,3.357,88,4.62]],["t/1367",[6,3.357,31,4.484]],["t/1369",[6,3.357,93,4.62]],["t/1371",[6,3.357,56,3.089]],["t/1373",[6,2.754,75,4.077,182,4.273]],["t/1375",[79,2.27]],["t/1378",[108,2.555]],["t/1380",[79,2.27]],["t/1382",[7,2.215]],["t/1385",[108,2.555]],["t/1387",[79,2.27]],["t/1388",[119,6.118]],["t/1390",[110,4.457]],["t/1392",[7,2.215]],["t/1393",[119,6.118]],["t/1395",[110,4.457]],["t/1398",[108,2.555]],["t/1400",[79,2.27]],["t/1402",[7,2.215]],["t/1406",[108,2.555]],["t/1408",[79,2.27]],["t/1410",[7,2.215]],["t/1414",[108,2.555]],["t/1418",[2,1.96,108,1.205,209,3.144,210,3.631,211,3.631]],["t/1420",[79,2.27]],["t/1422",[7,2.215]],["t/1424",[2,2.259,108,1.388,209,3.623,212,4.184]],["t/1426",[79,2.27]],["t/1428",[7,2.215]],["t/1430",[2,2.259,108,1.388,209,3.623,213,4.184]],["t/1432",[79,2.27]],["t/1434",[7,2.215]],["t/1436",[79,2.27]],["t/1438",[7,2.215]],["t/1442",[108,2.555]],["t/1444",[79,2.27]],["t/1446",[7,2.215]],["t/1449",[50,3.625,76,2.833]],["t/1451",[153,3.599]],["t/1453",[30,2.952,214,3.319]],["t/1457",[76,3.627]],["t/1459",[153,3.599]],["t/1461",[3,5.914]],["t/1464",[215,4.184,216,2.597,217,3.457,218,3.845]],["t/1465",[30,2.422,214,2.723,219,3.345]],["t/1467",[76,3.627]],["t/1469",[220,4.457]],["t/1471",[221,3.397,222,3.397]],["t/1473",[223,3.625,224,3.734]],["t/1475",[216,2.597,217,3.457,225,4.184,226,3.845]],["t/1476",[30,2.422,214,2.723,219,3.345]],["t/1478",[76,3.627]],["t/1480",[153,2.811,227,3.357]],["t/1482",[220,4.457]],["t/1484",[221,3.397,222,3.397]],["t/1486",[223,3.625,224,3.734]],["t/1488",[228,4.484,229,4.484]],["t/1490",[216,2.597,218,3.845,230,4.184,231,3.623]],["t/1491",[30,2.422,214,2.723,219,3.345]],["t/1493",[153,2.811,227,3.357]],["t/1495",[220,4.457]],["t/1497",[221,3.397,222,3.397]],["t/1499",[216,2.597,231,3.623,232,4.184,233,3.845]],["t/1500",[153,2.811,227,3.357]],["t/1502",[221,3.397,222,3.397]],["t/1504",[216,2.597,233,3.845,234,4.184,235,3.845]],["t/1505",[76,3.627]],["t/1507",[153,2.811,227,3.357]],["t/1509",[221,3.397,222,3.397]],["t/1511",[223,3.625,224,3.734]],["t/1513",[216,2.597,236,4.184,237,3.623,238,3.845]],["t/1514",[76,3.627]],["t/1516",[220,4.457]],["t/1518",[223,3.625,224,3.734]],["t/1520",[216,2.597,237,3.623,239,4.184,240,3.845]],["t/1521",[76,3.627]],["t/1523",[153,2.811,227,3.357]],["t/1525",[220,4.457]],["t/1527",[221,3.397,222,3.397]],["t/1529",[223,3.625,224,3.734]],["t/1531",[216,2.597,237,3.623,241,4.184,242,3.324]],["t/1532",[221,3.397,222,3.397]],["t/1534",[216,2.597,235,3.845,243,4.184,244,3.457]],["t/1535",[30,2.422,214,2.723,219,3.345]],["t/1537",[76,3.627]],["t/1539",[153,2.811,227,3.357]],["t/1541",[220,4.457]],["t/1543",[221,3.397,222,3.397]],["t/1545",[228,4.484,229,4.484]],["t/1547",[216,2.597,226,3.845,242,3.324,245,4.184]],["t/1548",[153,2.811,227,3.357]],["t/1550",[221,3.397,222,3.397]],["t/1552",[216,2.597,242,3.324,246,4.184,247,3.845]],["t/1553",[76,3.627]],["t/1555",[221,3.397,222,3.397]],["t/1557",[216,2.597,242,3.324,248,4.184,249,4.184]],["t/1558",[30,2.422,214,2.723,219,3.345]],["t/1560",[153,2.811,227,3.357]],["t/1562",[220,4.457]],["t/1564",[221,3.397,222,3.397]],["t/1566",[250,6.118]],["t/1568",[216,2.597,242,5.11,251,4.184]],["t/1569",[76,3.627]],["t/1571",[153,2.811,227,3.357]],["t/1573",[220,4.457]],["t/1575",[221,3.397,222,3.397]],["t/1577",[223,3.625,224,3.734]],["t/1579",[216,2.597,247,3.845,252,4.184,253,4.184]],["t/1580",[76,3.627]],["t/1582",[153,2.811,227,3.357]],["t/1584",[220,4.457]],["t/1586",[221,3.397,222,3.397]],["t/1588",[223,3.625,224,3.734]],["t/1590",[216,2.597,254,4.184,255,4.184,256,4.184]],["t/1591",[153,2.811,227,3.357]],["t/1593",[220,4.457]],["t/1595",[221,3.397,222,3.397]],["t/1597",[223,3.625,224,3.734]],["t/1599",[250,6.118]],["t/1601",[216,2.597,257,4.184,258,4.184,259,3.623]],["t/1602",[153,2.811,227,3.357]],["t/1604",[220,4.457]],["t/1606",[221,3.397,222,3.397]],["t/1608",[223,3.625,224,3.734]],["t/1610",[260,4.184,261,3.036,262,3.845,263,4.184]],["t/1611",[30,2.422,214,2.723,219,3.345]],["t/1613",[76,3.627]],["t/1615",[153,2.811,227,3.357]],["t/1617",[220,4.457]],["t/1619",[221,3.397,222,3.397]],["t/1621",[223,3.625,224,3.734]],["t/1623",[250,6.118]],["t/1625",[228,4.484,229,4.484]],["t/1627",[244,3.457,261,3.036,262,3.845,264,3.845]],["t/1628",[153,2.811,227,3.357]],["t/1630",[220,4.457]],["t/1632",[221,3.397,222,3.397]],["t/1634",[223,3.625,224,3.734]],["t/1636",[228,4.484,229,4.484]],["t/1638",[264,7.078]],["t/1639",[30,2.422,214,2.723,219,3.345]],["t/1641",[259,3.623,261,3.036,265,4.184,266,4.184]],["t/1642",[30,2.422,214,2.723,219,3.345]],["t/1644",[76,3.627]],["t/1646",[153,2.811,227,3.357]],["t/1648",[220,4.457]],["t/1650",[221,3.397,222,3.397]],["t/1652",[223,3.625,224,3.734]],["t/1654",[261,3.036,267,4.184,268,4.184,269,4.184]],["t/1655",[76,3.627]],["t/1657",[153,2.811,227,3.357]],["t/1659",[220,4.457]],["t/1661",[221,3.397,222,3.397]],["t/1663",[223,3.625,224,3.734]],["t/1665",[217,3.457,240,3.845,261,3.036,270,4.184]],["t/1666",[76,3.627]],["t/1668",[153,2.811,227,3.357]],["t/1670",[220,4.457]],["t/1672",[221,3.397,222,3.397]],["t/1674",[223,3.625,224,3.734]],["t/1676",[231,3.623,259,3.623,261,3.036,271,4.184]],["t/1677",[30,2.422,214,2.723,219,3.345]],["t/1679",[76,3.627]],["t/1681",[153,2.811,227,3.357]],["t/1683",[220,4.457]],["t/1685",[221,3.397,222,3.397]],["t/1687",[223,3.625,224,3.734]],["t/1689",[250,6.118]],["t/1691",[228,4.484,229,4.484]],["t/1693",[238,3.845,244,3.457,261,3.036,272,4.184]],["t/1694",[153,2.811,227,3.357]],["t/1696",[228,4.484,229,4.484]],["t/1698",[250,6.118]],["t/1700",[223,3.625,224,3.734]],["t/1702",[220,4.457]],["t/1704",[221,3.397,222,3.397]],["t/1706",[217,3.457,244,3.457,261,3.036,273,4.184]],["t/1707",[221,3.397,222,3.397]],["t/1709",[228,4.484,229,4.484]],["t/1712",[76,3.627]],["t/1714",[3,5.914]],["t/1717",[76,3.627]],["t/1719",[153,3.599]],["t/1722",[76,3.627]],["t/1724",[153,3.599]],["t/1727",[76,3.627]],["t/1729",[153,3.599]],["t/1731",[3,5.914]],["t/1734",[76,3.627]],["t/1736",[153,3.599]],["t/1739",[30,2.952,214,3.319]],["t/1743",[50,3.625,76,2.833]],["t/1745",[76,2.833,274,6.015]],["t/1747",[30,2.952,214,3.319]],["t/1749",[13,4.298]],["t/1751",[3,5.914]],["t/1755",[50,3.625,76,2.833]],["t/1757",[30,2.952,214,3.319]],["t/1759",[13,2.027,40,2.413,95,2.461,98,3,219,2.461]],["t/1761",[51,5.209,275,6.015]],["t/1764",[50,3.625,76,2.833]],["t/1765",[153,3.599]],["t/1766",[30,2.952,214,3.319]],["t/1769",[50,3.625,76,2.833]],["t/1770",[153,3.599]],["t/1772",[30,2.952,214,3.319]],["t/1774",[50,3.625,76,2.833]],["t/1776",[153,3.599]],["t/1778",[30,2.952,214,3.319]],["t/1780",[50,3.625,76,2.833]],["t/1782",[153,3.599]],["t/1784",[220,4.457]],["t/1786",[30,2.952,214,3.319]],["t/1789",[50,3.625,76,2.833]],["t/1792",[153,3.599]],["t/1795",[153,2.811,227,3.357]],["t/1798",[30,2.952,214,3.319]],["t/1800",[50,3.625,76,2.833]],["t/1802",[153,2.811,227,3.357]],["t/1804",[220,4.457]],["t/1807",[76,3.627]],["t/1809",[153,2.811,227,3.357]],["t/1811",[220,4.457]],["t/1814",[76,3.627]],["t/1816",[153,2.811,227,3.357]],["t/1820",[50,3.625,76,2.833]],["t/1822",[153,3.599]],["t/1825",[153,2.811,227,3.357]],["t/1829",[50,3.625,76,2.833]],["t/1831",[153,3.599]],["t/1833",[30,2.952,214,3.319]],["t/1835",[13,2.027,40,2.413,95,2.461,98,3,219,2.461]],["t/1838",[30,2.952,214,3.319]],["t/1840",[76,3.627]],["t/1843",[50,3.625,76,2.833]],["t/1845",[153,3.599]],["t/1847",[30,2.952,214,3.319]],["t/1850",[50,3.625,76,2.833]],["t/1852",[153,3.599]],["t/1854",[30,2.952,214,3.319]],["t/1857",[50,3.625,76,2.833]],["t/1859",[153,3.599]],["t/1861",[30,2.952,214,3.319]],["t/1864",[50,3.625,76,2.833]],["t/1866",[153,3.599]],["t/1868",[30,2.952,214,3.319]],["t/1871",[50,3.625,76,2.833]],["t/1873",[153,3.599]],["t/1874",[30,2.952,214,3.319]],["t/1877",[276,7.078]],["t/1879",[277,7.078]],["t/1881",[278,7.701]],["t/1883",[24,5.209,76,2.833]],["t/1887",[276,7.078]],["t/1889",[277,7.078]],["t/1891",[30,2.952,279,6.015]],["t/1893",[280,4.935,281,4.273,282,4.273]],["t/1895",[223,3.625,283,6.015]],["t/1897",[284,7.701]],["t/1899",[281,5.209,282,5.209]],["t/1901",[79,1.455,285,3.921,286,4.536]],["t/1903",[287,7.701]],["t/1905",[223,3.625,288,6.015]],["t/1911",[289,6.015,290,5.529]],["t/1913",[290,5.529,291,6.015]],["t/1917",[58,4.273,285,3.921,292,4.935]],["t/1919",[6,3.357,285,4.779]],["t/1921",[285,3.921,293,4.935,294,4.536]],["t/1923",[285,4.779,295,6.015]],["t/1925",[296,6.015,297,5.529]],["t/1927",[297,3.845,298,4.184,299,4.184,300,4.184]],["t/1929",[30,2.422,301,4.935,302,4.273]],["t/1931",[30,2.422,302,4.273,303,4.536]],["t/1933",[30,2.422,304,4.935,305,4.935]],["t/1935",[40,3.998,306,6.015]],["t/1937",[30,2.952,286,5.529]],["t/1939",[30,2.422,302,4.273,303,4.536]],["t/1941",[7,1.73,167,5.209]],["t/1942",[281,5.209,282,5.209]],["t/1944",[294,5.529,307,6.015]]],"invertedIndex":[["",{"_index":219,"t":{"1465":{"position":[[0,1]]},"1476":{"position":[[0,1]]},"1491":{"position":[[0,1]]},"1535":{"position":[[0,1]]},"1558":{"position":[[0,1]]},"1611":{"position":[[0,1]]},"1639":{"position":[[0,1]]},"1642":{"position":[[0,1]]},"1677":{"position":[[0,1]]},"1759":{"position":[[12,1]]},"1835":{"position":[[12,1]]}}}],["01",{"_index":258,"t":{"1601":{"position":[[12,2]]}}}],["02",{"_index":255,"t":{"1590":{"position":[[13,2]]}}}],["03",{"_index":253,"t":{"1579":{"position":[[13,2]]}}}],["04",{"_index":242,"t":{"1531":{"position":[[16,3]]},"1547":{"position":[[13,2]]},"1552":{"position":[[13,2]]},"1557":{"position":[[13,2]]},"1568":{"position":[[13,2],[16,3]]}}}],["05",{"_index":244,"t":{"1534":{"position":[[13,2]]},"1627":{"position":[[15,3]]},"1693":{"position":[[12,2]]},"1706":{"position":[[12,2]]}}}],["06",{"_index":237,"t":{"1513":{"position":[[13,2]]},"1520":{"position":[[13,2]]},"1531":{"position":[[13,2]]}}}],["07",{"_index":233,"t":{"1499":{"position":[[16,3]]},"1504":{"position":[[13,2]]}}}],["08",{"_index":231,"t":{"1490":{"position":[[13,2]]},"1499":{"position":[[13,2]]},"1676":{"position":[[12,2]]}}}],["09",{"_index":217,"t":{"1464":{"position":[[13,2]]},"1475":{"position":[[13,2]]},"1665":{"position":[[12,2]]},"1706":{"position":[[15,3]]}}}],["1",{"_index":29,"t":{"57":{"position":[[0,2]]},"72":{"position":[[33,1]]},"106":{"position":[[0,2]]},"111":{"position":[[0,2]]},"116":{"position":[[0,2]]},"123":{"position":[[0,2]]},"128":{"position":[[0,2]]},"667":{"position":[[8,1]]},"816":{"position":[[8,1]]},"1055":{"position":[[8,1]]},"1180":{"position":[[8,2]]},"1245":{"position":[[8,1]]}}}],["10",{"_index":268,"t":{"1654":{"position":[[12,2]]}}}],["11",{"_index":259,"t":{"1601":{"position":[[15,3]]},"1641":{"position":[[12,2]]},"1676":{"position":[[15,3]]}}}],["12",{"_index":262,"t":{"1610":{"position":[[12,2]]},"1627":{"position":[[12,2]]}}}],["15",{"_index":249,"t":{"1557":{"position":[[16,3]]}}}],["16",{"_index":256,"t":{"1590":{"position":[[16,3]]}}}],["18",{"_index":247,"t":{"1552":{"position":[[16,3]]},"1579":{"position":[[16,3]]}}}],["19",{"_index":226,"t":{"1475":{"position":[[16,3]]},"1547":{"position":[[16,3]]}}}],["1d",{"_index":112,"t":{"312":{"position":[[0,2]]}}}],["2",{"_index":32,"t":{"59":{"position":[[0,2]]},"669":{"position":[[8,1]]},"818":{"position":[[8,1]]},"1057":{"position":[[8,1]]},"1182":{"position":[[8,2]]},"1247":{"position":[[8,1]]}}}],["2023",{"_index":261,"t":{"1610":{"position":[[6,5]]},"1627":{"position":[[6,5]]},"1641":{"position":[[6,5]]},"1654":{"position":[[6,5]]},"1665":{"position":[[6,5]]},"1676":{"position":[[6,5]]},"1693":{"position":[[6,5]]},"1706":{"position":[[6,5]]}}}],["2024",{"_index":216,"t":{"1464":{"position":[[7,5]]},"1475":{"position":[[7,5]]},"1490":{"position":[[7,5]]},"1499":{"position":[[7,5]]},"1504":{"position":[[7,5]]},"1513":{"position":[[7,5]]},"1520":{"position":[[7,5]]},"1531":{"position":[[7,5]]},"1534":{"position":[[7,5]]},"1547":{"position":[[7,5]]},"1552":{"position":[[7,5]]},"1557":{"position":[[7,5]]},"1568":{"position":[[7,5]]},"1579":{"position":[[7,5]]},"1590":{"position":[[7,5]]},"1601":{"position":[[6,5]]}}}],["21",{"_index":266,"t":{"1641":{"position":[[15,3]]}}}],["25",{"_index":240,"t":{"1520":{"position":[[16,3]]},"1665":{"position":[[15,3]]}}}],["26",{"_index":218,"t":{"1464":{"position":[[16,3]]},"1490":{"position":[[16,3]]}}}],["27",{"_index":263,"t":{"1610":{"position":[[15,3]]}}}],["28",{"_index":238,"t":{"1513":{"position":[[16,3]]},"1693":{"position":[[15,3]]}}}],["3",{"_index":41,"t":{"61":{"position":[[0,2]]},"1059":{"position":[[8,1]]}}}],["30",{"_index":269,"t":{"1654":{"position":[[15,3]]}}}],["31",{"_index":235,"t":{"1504":{"position":[[16,3]]},"1534":{"position":[[16,3]]}}}],["3d",{"_index":113,"t":{"314":{"position":[[0,2]]}}}],["4",{"_index":49,"t":{"63":{"position":[[0,2]]}}}],["8.10.0",{"_index":254,"t":{"1590":{"position":[[0,6]]}}}],["8.11.0",{"_index":252,"t":{"1579":{"position":[[0,6]]}}}],["8.12.0",{"_index":251,"t":{"1568":{"position":[[0,6]]}}}],["8.13",{"_index":213,"t":{"1430":{"position":[[19,5]]}}}],["8.13.0",{"_index":248,"t":{"1557":{"position":[[0,6]]}}}],["8.14.0",{"_index":246,"t":{"1552":{"position":[[0,6]]}}}],["8.15.0",{"_index":245,"t":{"1547":{"position":[[0,6]]}}}],["8.16.0",{"_index":243,"t":{"1534":{"position":[[0,6]]}}}],["8.17.0",{"_index":241,"t":{"1531":{"position":[[0,6]]}}}],["8.18.0",{"_index":239,"t":{"1520":{"position":[[0,6]]}}}],["8.18.1",{"_index":236,"t":{"1513":{"position":[[0,6]]}}}],["8.19.0",{"_index":234,"t":{"1504":{"position":[[0,6]]}}}],["8.2.1",{"_index":273,"t":{"1706":{"position":[[0,5]]}}}],["8.2.2",{"_index":272,"t":{"1693":{"position":[[0,5]]}}}],["8.20.0",{"_index":232,"t":{"1499":{"position":[[0,6]]}}}],["8.21.0",{"_index":230,"t":{"1490":{"position":[[0,6]]}}}],["8.22.0",{"_index":225,"t":{"1475":{"position":[[0,6]]}}}],["8.23.0",{"_index":215,"t":{"1464":{"position":[[0,6]]}}}],["8.3.0",{"_index":271,"t":{"1676":{"position":[[0,5]]}}}],["8.4.0",{"_index":270,"t":{"1665":{"position":[[0,5]]}}}],["8.5.0",{"_index":267,"t":{"1654":{"position":[[0,5]]}}}],["8.6.0",{"_index":265,"t":{"1641":{"position":[[0,5]]}}}],["8.7",{"_index":210,"t":{"1418":{"position":[[14,3]]}}}],["8.7.0",{"_index":264,"t":{"1627":{"position":[[0,5]]},"1638":{"position":[[0,5]]}}}],["8.8",{"_index":212,"t":{"1424":{"position":[[19,4]]}}}],["8.8.0",{"_index":260,"t":{"1610":{"position":[[0,5]]}}}],["8.9.0",{"_index":257,"t":{"1601":{"position":[[0,5]]}}}],["add",{"_index":306,"t":{"1935":{"position":[[0,3]]}}}],["addit",{"_index":162,"t":{"510":{"position":[[9,10]]}}}],["adjust",{"_index":185,"t":{"938":{"position":[[7,10]]},"945":{"position":[[7,10]]}}}],["allow",{"_index":48,"t":{"61":{"position":[[47,7]]}}}],["attent",{"_index":105,"t":{"284":{"position":[[0,9]]}}}],["attribut",{"_index":208,"t":{"1333":{"position":[[9,10]]},"1335":{"position":[[0,10]]}}}],["avail",{"_index":159,"t":{"505":{"position":[[0,9]]}}}],["averag",{"_index":65,"t":{"74":{"position":[[52,7]]}}}],["b",{"_index":96,"t":{"208":{"position":[[13,1]]},"275":{"position":[[13,1]]}}}],["base",{"_index":60,"t":{"72":{"position":[[35,5]]}}}],["basic",{"_index":186,"t":{"1021":{"position":[[0,5]]}}}],["befor",{"_index":211,"t":{"1418":{"position":[[22,7]]}}}],["behaviour",{"_index":71,"t":{"82":{"position":[[0,9]]}}}],["between",{"_index":299,"t":{"1927":{"position":[[7,7]]}}}],["boiler",{"_index":126,"t":{"404":{"position":[[12,7]]},"407":{"position":[[9,6]]}}}],["branch",{"_index":297,"t":{"1925":{"position":[[16,6]]},"1927":{"position":[[24,8]]}}}],["break",{"_index":214,"t":{"1453":{"position":[[0,8]]},"1465":{"position":[[2,8]]},"1476":{"position":[[2,8]]},"1491":{"position":[[2,8]]},"1535":{"position":[[2,8]]},"1558":{"position":[[2,8]]},"1611":{"position":[[2,8]]},"1639":{"position":[[2,8]]},"1642":{"position":[[2,8]]},"1677":{"position":[[2,8]]},"1739":{"position":[[0,8]]},"1747":{"position":[[0,8]]},"1757":{"position":[[0,8]]},"1766":{"position":[[0,8]]},"1772":{"position":[[0,8]]},"1778":{"position":[[0,8]]},"1786":{"position":[[0,8]]},"1798":{"position":[[0,8]]},"1833":{"position":[[0,8]]},"1838":{"position":[[0,8]]},"1847":{"position":[[0,8]]},"1854":{"position":[[0,8]]},"1861":{"position":[[0,8]]},"1868":{"position":[[0,8]]},"1874":{"position":[[0,8]]}}}],["bug",{"_index":227,"t":{"1480":{"position":[[0,3]]},"1493":{"position":[[0,3]]},"1500":{"position":[[0,3]]},"1507":{"position":[[0,3]]},"1523":{"position":[[0,3]]},"1539":{"position":[[0,3]]},"1548":{"position":[[0,3]]},"1560":{"position":[[0,3]]},"1571":{"position":[[0,3]]},"1582":{"position":[[0,3]]},"1591":{"position":[[0,3]]},"1602":{"position":[[0,3]]},"1615":{"position":[[0,3]]},"1628":{"position":[[0,3]]},"1646":{"position":[[0,3]]},"1657":{"position":[[0,3]]},"1668":{"position":[[0,3]]},"1681":{"position":[[0,3]]},"1694":{"position":[[0,3]]},"1795":{"position":[[0,3]]},"1802":{"position":[[0,3]]},"1809":{"position":[[0,3]]},"1816":{"position":[[0,3]]},"1825":{"position":[[0,3]]}}}],["calcul",{"_index":136,"t":{"449":{"position":[[43,10]]}}}],["calendar",{"_index":206,"t":{"1303":{"position":[[19,8]]}}}],["calibr",{"_index":174,"t":{"581":{"position":[[0,11]]}}}],["categori",{"_index":52,"t":{"63":{"position":[[12,9]]}}}],["chang",{"_index":30,"t":{"57":{"position":[[3,7]]},"74":{"position":[[20,7]]},"106":{"position":[[3,7]]},"116":{"position":[[3,7]]},"123":{"position":[[3,7]]},"128":{"position":[[3,7]]},"1453":{"position":[[9,7]]},"1465":{"position":[[11,7]]},"1476":{"position":[[11,7]]},"1491":{"position":[[11,7]]},"1535":{"position":[[11,7]]},"1558":{"position":[[11,7]]},"1611":{"position":[[11,7]]},"1639":{"position":[[11,7]]},"1642":{"position":[[11,7]]},"1677":{"position":[[11,7]]},"1739":{"position":[[9,7]]},"1747":{"position":[[9,7]]},"1757":{"position":[[9,7]]},"1766":{"position":[[9,7]]},"1772":{"position":[[9,7]]},"1778":{"position":[[9,7]]},"1786":{"position":[[9,7]]},"1798":{"position":[[9,7]]},"1833":{"position":[[9,7]]},"1838":{"position":[[9,7]]},"1847":{"position":[[9,7]]},"1854":{"position":[[9,7]]},"1861":{"position":[[9,7]]},"1868":{"position":[[9,7]]},"1874":{"position":[[9,7]]},"1891":{"position":[[9,6]]},"1929":{"position":[[6,7]]},"1931":{"position":[[10,7]]},"1933":{"position":[[16,7]]},"1937":{"position":[[7,7]]},"1939":{"position":[[5,7]]}}}],["charact",{"_index":25,"t":{"44":{"position":[[8,10]]}}}],["chart",{"_index":132,"t":{"429":{"position":[[37,5]]},"435":{"position":[[39,5]]},"441":{"position":[[19,5]]},"449":{"position":[[19,5]]},"455":{"position":[[51,5]]},"468":{"position":[[68,5]]},"470":{"position":[[63,5]]},"472":{"position":[[108,5]]}}}],["check",{"_index":304,"t":{"1933":{"position":[[0,5]]}}}],["choke",{"_index":156,"t":{"499":{"position":[[27,7]]}}}],["choos",{"_index":1,"t":{"3":{"position":[[21,7]]}}}],["chore",{"_index":222,"t":{"1471":{"position":[[14,6]]},"1484":{"position":[[14,6]]},"1497":{"position":[[14,6]]},"1502":{"position":[[14,6]]},"1509":{"position":[[14,6]]},"1527":{"position":[[14,6]]},"1532":{"position":[[14,6]]},"1543":{"position":[[14,6]]},"1550":{"position":[[14,6]]},"1555":{"position":[[14,6]]},"1564":{"position":[[14,6]]},"1575":{"position":[[14,6]]},"1586":{"position":[[14,6]]},"1595":{"position":[[14,6]]},"1606":{"position":[[14,6]]},"1619":{"position":[[14,6]]},"1632":{"position":[[14,6]]},"1650":{"position":[[14,6]]},"1661":{"position":[[14,6]]},"1672":{"position":[[14,6]]},"1685":{"position":[[14,6]]},"1704":{"position":[[14,6]]},"1707":{"position":[[14,6]]}}}],["cli",{"_index":3,"t":{"4":{"position":[[6,3]]},"92":{"position":[[0,3]]},"1461":{"position":[[0,3]]},"1714":{"position":[[0,3]]},"1731":{"position":[[0,3]]},"1751":{"position":[[0,3]]}}}],["clone",{"_index":293,"t":{"1921":{"position":[[0,7]]}}}],["code",{"_index":223,"t":{"1473":{"position":[[0,4]]},"1486":{"position":[[0,4]]},"1511":{"position":[[0,4]]},"1518":{"position":[[0,4]]},"1529":{"position":[[0,4]]},"1577":{"position":[[0,4]]},"1588":{"position":[[0,4]]},"1597":{"position":[[0,4]]},"1608":{"position":[[0,4]]},"1621":{"position":[[0,4]]},"1634":{"position":[[0,4]]},"1652":{"position":[[0,4]]},"1663":{"position":[[0,4]]},"1674":{"position":[[0,4]]},"1687":{"position":[[0,4]]},"1700":{"position":[[0,4]]},"1895":{"position":[[4,4]]},"1905":{"position":[[0,4]]}}}],["column",{"_index":46,"t":{"61":{"position":[[29,7]]}}}],["combin",{"_index":160,"t":{"508":{"position":[[0,9]]},"542":{"position":[[0,9]]},"1303":{"position":[[9,9]]}}}],["commit",{"_index":286,"t":{"1901":{"position":[[4,6]]},"1937":{"position":[[0,6]]}}}],["composit",{"_index":82,"t":{"123":{"position":[[14,11]]},"468":{"position":[[84,11]]},"470":{"position":[[102,11]]},"514":{"position":[[29,11]]},"520":{"position":[[32,11]]}}}],["compressor",{"_index":110,"t":{"307":{"position":[[36,10]]},"429":{"position":[[26,10]]},"435":{"position":[[28,10]]},"441":{"position":[[8,10]]},"449":{"position":[[8,10]]},"455":{"position":[[40,10]]},"463":{"position":[[11,10],[45,10]]},"465":{"position":[[11,10],[57,10]]},"468":{"position":[[11,10],[57,10]]},"470":{"position":[[26,10],[52,10]]},"472":{"position":[[2,10]]},"474":{"position":[[2,10]]},"542":{"position":[[12,10]]},"726":{"position":[[20,10]]},"731":{"position":[[22,10]]},"736":{"position":[[22,10]]},"803":{"position":[[0,11]]},"1043":{"position":[[0,11]]},"1048":{"position":[[0,11]]},"1390":{"position":[[0,11]]},"1395":{"position":[[0,11]]}}}],["compressor_tabular",{"_index":127,"t":{"415":{"position":[[0,18]]}}}],["condit",{"_index":72,"t":{"83":{"position":[[0,10]]}}}],["configur",{"_index":21,"t":{"40":{"position":[[36,13]]}}}],["constant",{"_index":204,"t":{"1299":{"position":[[0,8]]}}}],["consum",{"_index":172,"t":{"577":{"position":[[0,8]]}}}],["continu",{"_index":228,"t":{"1488":{"position":[[0,10]]},"1545":{"position":[[0,10]]},"1625":{"position":[[0,10]]},"1636":{"position":[[0,10]]},"1691":{"position":[[0,10]]},"1696":{"position":[[0,10]]},"1709":{"position":[[0,10]]}}}],["contribut",{"_index":277,"t":{"1879":{"position":[[0,12]]},"1889":{"position":[[7,10]]}}}],["control",{"_index":87,"t":{"134":{"position":[[8,7]]},"455":{"position":[[6,7]]},"490":{"position":[[15,7]]},"497":{"position":[[0,7]]},"499":{"position":[[9,7]]},"501":{"position":[[9,7]]}}}],["creat",{"_index":296,"t":{"1925":{"position":[[0,6]]}}}],["crossov",{"_index":198,"t":{"1178":{"position":[[0,9]]}}}],["csv",{"_index":111,"t":{"307":{"position":[[47,3]]}}}],["data",{"_index":43,"t":{"61":{"position":[[9,4]]},"234":{"position":[[6,4]]},"449":{"position":[[65,4]]},"508":{"position":[[10,4]]},"1301":{"position":[[28,4]]}}}],["day",{"_index":207,"t":{"1303":{"position":[[39,3]]}}}],["decim",{"_index":83,"t":{"132":{"position":[[0,8]]}}}],["defin",{"_index":129,"t":{"429":{"position":[[5,7]]},"435":{"position":[[5,7]]},"468":{"position":[[34,7]]},"550":{"position":[[0,8]]}}}],["depend",{"_index":187,"t":{"1023":{"position":[[10,10]]},"1335":{"position":[[11,9]]}}}],["descript",{"_index":108,"t":{"295":{"position":[[0,11]]},"395":{"position":[[0,11]]},"400":{"position":[[0,11]]},"405":{"position":[[0,11]]},"589":{"position":[[0,11]]},"597":{"position":[[0,11]]},"605":{"position":[[0,11]]},"613":{"position":[[0,11]]},"620":{"position":[[0,11]]},"639":{"position":[[0,11]]},"647":{"position":[[0,11]]},"655":{"position":[[0,11]]},"663":{"position":[[0,11]]},"672":{"position":[[0,11]]},"678":{"position":[[0,11]]},"686":{"position":[[0,11]]},"694":{"position":[[0,11]]},"700":{"position":[[0,11]]},"708":{"position":[[0,11]]},"716":{"position":[[0,11]]},"724":{"position":[[0,11]]},"743":{"position":[[0,11]]},"749":{"position":[[0,11]]},"756":{"position":[[0,11]]},"763":{"position":[[0,11]]},"770":{"position":[[0,11]]},"777":{"position":[[0,11]]},"785":{"position":[[0,11]]},"793":{"position":[[0,11]]},"800":{"position":[[0,11]]},"811":{"position":[[0,11]]},"822":{"position":[[0,11]]},"830":{"position":[[0,11]]},"838":{"position":[[0,11]]},"846":{"position":[[0,11]]},"854":{"position":[[0,11]]},"875":{"position":[[0,11]]},"883":{"position":[[0,11]]},"888":{"position":[[0,11]]},"896":{"position":[[0,11]]},"904":{"position":[[0,11]]},"912":{"position":[[0,11]]},"920":{"position":[[0,11]]},"930":{"position":[[0,11]]},"936":{"position":[[0,11]]},"951":{"position":[[0,11]]},"959":{"position":[[0,11]]},"966":{"position":[[0,11]]},"973":{"position":[[0,11]]},"981":{"position":[[0,11]]},"989":{"position":[[0,11]]},"992":{"position":[[0,11]]},"1000":{"position":[[0,11]]},"1008":{"position":[[0,11]]},"1016":{"position":[[0,11]]},"1029":{"position":[[0,11]]},"1033":{"position":[[0,11]]},"1040":{"position":[[0,11]]},"1051":{"position":[[0,11]]},"1063":{"position":[[0,11]]},"1071":{"position":[[0,11]]},"1079":{"position":[[0,11]]},"1083":{"position":[[0,11]]},"1093":{"position":[[0,11]]},"1101":{"position":[[0,11]]},"1108":{"position":[[0,11]]},"1116":{"position":[[0,11]]},"1124":{"position":[[0,11]]},"1132":{"position":[[0,11]]},"1140":{"position":[[0,11]]},"1148":{"position":[[0,11]]},"1158":{"position":[[0,11]]},"1166":{"position":[[0,11]]},"1188":{"position":[[0,11]]},"1196":{"position":[[0,11]]},"1204":{"position":[[0,11]]},"1211":{"position":[[0,11]]},"1219":{"position":[[0,11]]},"1227":{"position":[[0,11]]},"1241":{"position":[[0,11]]},"1251":{"position":[[0,11]]},"1258":{"position":[[0,11]]},"1266":{"position":[[0,11]]},"1282":{"position":[[0,11]]},"1290":{"position":[[0,11]]},"1307":{"position":[[0,11]]},"1315":{"position":[[0,11]]},"1323":{"position":[[0,11]]},"1331":{"position":[[0,11]]},"1341":{"position":[[0,11]]},"1348":{"position":[[0,11]]},"1355":{"position":[[0,11]]},"1363":{"position":[[0,11]]},"1378":{"position":[[0,11]]},"1385":{"position":[[0,11]]},"1398":{"position":[[0,11]]},"1406":{"position":[[0,11]]},"1414":{"position":[[0,11]]},"1418":{"position":[[30,11]]},"1424":{"position":[[24,11]]},"1430":{"position":[[25,11]]},"1442":{"position":[[0,11]]}}}],["design",{"_index":134,"t":{"441":{"position":[[41,6]]},"449":{"position":[[30,6]]},"470":{"position":[[74,6]]}}}],["detail",{"_index":177,"t":{"669":{"position":[[10,10]]},"1247":{"position":[[10,10]]}}}],["diagram",{"_index":166,"t":{"569":{"position":[[24,7]]}}}],["differ",{"_index":34,"t":{"59":{"position":[[24,9]]},"90":{"position":[[5,11]]},"508":{"position":[[20,9]]}}}],["digit",{"_index":85,"t":{"132":{"position":[[25,6]]}}}],["direct",{"_index":202,"t":{"1292":{"position":[[9,6]]}}}],["direct_emiss",{"_index":181,"t":{"861":{"position":[[28,16]]}}}],["discharge_pressur",{"_index":196,"t":{"1174":{"position":[[0,19]]}}}],["document",{"_index":220,"t":{"1469":{"position":[[0,13]]},"1482":{"position":[[0,13]]},"1495":{"position":[[0,13]]},"1516":{"position":[[0,13]]},"1525":{"position":[[0,13]]},"1541":{"position":[[0,13]]},"1562":{"position":[[0,13]]},"1573":{"position":[[0,13]]},"1584":{"position":[[0,13]]},"1593":{"position":[[0,13]]},"1604":{"position":[[0,13]]},"1617":{"position":[[0,13]]},"1630":{"position":[[0,13]]},"1648":{"position":[[0,13]]},"1659":{"position":[[0,13]]},"1670":{"position":[[0,13]]},"1683":{"position":[[0,13]]},"1702":{"position":[[0,13]]},"1784":{"position":[[0,13]]},"1804":{"position":[[0,13]]},"1811":{"position":[[0,13]]}}}],["driven",{"_index":146,"t":{"470":{"position":[[19,6]]}}}],["due",{"_index":17,"t":{"38":{"position":[[15,3]]},"40":{"position":[[15,3]]}}}],["ecalc",{"_index":2,"t":{"4":{"position":[[0,5]]},"12":{"position":[[8,7]]},"14":{"position":[[17,7]]},"16":{"position":[[11,7]]},"24":{"position":[[0,5]]},"26":{"position":[[0,5]]},"28":{"position":[[0,5]]},"30":{"position":[[0,5]]},"32":{"position":[[0,5]]},"40":{"position":[[30,5]]},"132":{"position":[[35,5]]},"162":{"position":[[5,5]]},"186":{"position":[[5,5]]},"212":{"position":[[5,5]]},"279":{"position":[[5,5]]},"497":{"position":[[21,6]]},"628":{"position":[[0,5]]},"630":{"position":[[0,5]]},"632":{"position":[[0,5]]},"634":{"position":[[0,5]]},"636":{"position":[[0,5]]},"861":{"position":[[50,5]]},"867":{"position":[[45,5]]},"1233":{"position":[[44,5]]},"1418":{"position":[[0,5]]},"1424":{"position":[[0,5]]},"1430":{"position":[[0,5]]}}}],["econom",{"_index":74,"t":{"99":{"position":[[0,9]]}}}],["electricity2fuel",{"_index":101,"t":{"249":{"position":[[0,16]]},"394":{"position":[[0,16]]}}}],["emiss",{"_index":68,"t":{"80":{"position":[[0,10]]},"940":{"position":[[7,9]]},"947":{"position":[[7,9]]},"1233":{"position":[[7,9]]}}}],["emitt",{"_index":81,"t":{"116":{"position":[[38,8]]},"861":{"position":[[12,8]]},"867":{"position":[[12,8]]}}}],["empti",{"_index":42,"t":{"61":{"position":[[3,5]]}}}],["energi",{"_index":120,"t":{"372":{"position":[[5,6]]},"380":{"position":[[12,6]]},"885":{"position":[[9,6]]},"1292":{"position":[[16,6]]}}}],["energy_usage_model",{"_index":93,"t":{"160":{"position":[[0,18]]},"184":{"position":[[0,18]]},"210":{"position":[[0,18]]},"277":{"position":[[0,18]]},"1097":{"position":[[7,18]]},"1369":{"position":[[7,18]]}}}],["error",{"_index":15,"t":{"36":{"position":[[12,6]]},"38":{"position":[[0,5]]},"40":{"position":[[0,5]]}}}],["exampl",{"_index":7,"t":{"20":{"position":[[0,7]]},"253":{"position":[[0,7]]},"301":{"position":[[0,8]]},"311":{"position":[[0,7]]},"312":{"position":[[3,7]]},"314":{"position":[[3,7]]},"320":{"position":[[0,7]]},"326":{"position":[[0,8]]},"327":{"position":[[12,7]]},"329":{"position":[[5,8]]},"339":{"position":[[0,7]]},"350":{"position":[[0,7]]},"358":{"position":[[0,7]]},"364":{"position":[[0,7]]},"376":{"position":[[0,7]]},"384":{"position":[[0,7]]},"402":{"position":[[0,7]]},"407":{"position":[[0,8]]},"413":{"position":[[0,7]]},"433":{"position":[[0,7]]},"439":{"position":[[0,7]]},"445":{"position":[[0,7]]},"447":{"position":[[0,7]]},"453":{"position":[[0,7]]},"467":{"position":[[0,8]]},"492":{"position":[[0,7]]},"507":{"position":[[0,8]]},"518":{"position":[[0,8]]},"524":{"position":[[0,7]]},"534":{"position":[[0,7]]},"540":{"position":[[0,7]]},"546":{"position":[[0,8]]},"554":{"position":[[0,8]]},"558":{"position":[[0,7]]},"593":{"position":[[0,7]]},"601":{"position":[[0,8]]},"609":{"position":[[0,7]]},"617":{"position":[[0,7]]},"624":{"position":[[0,7]]},"643":{"position":[[0,7]]},"651":{"position":[[0,7]]},"659":{"position":[[0,7]]},"667":{"position":[[0,7]]},"669":{"position":[[0,7]]},"682":{"position":[[0,7]]},"690":{"position":[[0,7]]},"704":{"position":[[0,7]]},"712":{"position":[[0,7]]},"720":{"position":[[0,7]]},"729":{"position":[[0,7]]},"734":{"position":[[0,7]]},"739":{"position":[[0,7]]},"745":{"position":[[0,7]]},"753":{"position":[[0,7]]},"760":{"position":[[0,7]]},"767":{"position":[[0,7]]},"774":{"position":[[0,7]]},"781":{"position":[[0,7]]},"789":{"position":[[0,7]]},"797":{"position":[[0,7]]},"807":{"position":[[0,7]]},"815":{"position":[[0,7]]},"816":{"position":[[0,7]]},"818":{"position":[[0,7]]},"826":{"position":[[0,7]]},"834":{"position":[[0,7]]},"842":{"position":[[0,7]]},"850":{"position":[[0,7]]},"859":{"position":[[0,7]]},"865":{"position":[[0,7]]},"871":{"position":[[0,7]]},"879":{"position":[[0,7]]},"892":{"position":[[0,7]]},"900":{"position":[[0,7]]},"908":{"position":[[0,7]]},"916":{"position":[[0,7]]},"926":{"position":[[0,7]]},"944":{"position":[[0,7]]},"955":{"position":[[0,7]]},"963":{"position":[[0,7]]},"970":{"position":[[0,7]]},"977":{"position":[[0,7]]},"985":{"position":[[0,7]]},"996":{"position":[[0,7]]},"1004":{"position":[[0,7]]},"1012":{"position":[[0,7]]},"1020":{"position":[[0,7]]},"1025":{"position":[[5,7]]},"1037":{"position":[[0,7]]},"1047":{"position":[[0,7]]},"1055":{"position":[[0,7]]},"1057":{"position":[[0,7]]},"1059":{"position":[[0,7]]},"1067":{"position":[[0,7]]},"1075":{"position":[[0,7]]},"1089":{"position":[[0,7]]},"1105":{"position":[[0,7]]},"1112":{"position":[[0,7]]},"1128":{"position":[[0,8]]},"1154":{"position":[[0,7]]},"1162":{"position":[[0,7]]},"1180":{"position":[[0,7]]},"1182":{"position":[[0,7]]},"1185":{"position":[[0,7]]},"1192":{"position":[[0,7]]},"1200":{"position":[[0,7]]},"1208":{"position":[[0,7]]},"1215":{"position":[[0,7]]},"1223":{"position":[[0,7]]},"1231":{"position":[[0,7]]},"1237":{"position":[[0,7]]},"1245":{"position":[[0,7]]},"1247":{"position":[[0,7]]},"1255":{"position":[[0,7]]},"1262":{"position":[[0,7]]},"1278":{"position":[[0,7]]},"1286":{"position":[[0,7]]},"1298":{"position":[[0,7]]},"1311":{"position":[[0,7]]},"1319":{"position":[[0,7]]},"1327":{"position":[[0,7]]},"1337":{"position":[[0,7]]},"1345":{"position":[[0,7]]},"1352":{"position":[[0,7]]},"1359":{"position":[[0,7]]},"1382":{"position":[[0,7]]},"1392":{"position":[[0,7]]},"1402":{"position":[[0,7]]},"1410":{"position":[[0,7]]},"1422":{"position":[[0,7]]},"1428":{"position":[[0,7]]},"1434":{"position":[[0,7]]},"1438":{"position":[[0,7]]},"1446":{"position":[[0,7]]},"1941":{"position":[[9,8]]}}}],["exist",{"_index":300,"t":{"1927":{"position":[[15,8]]}}}],["experiment",{"_index":274,"t":{"1745":{"position":[[0,12]]}}}],["explan",{"_index":168,"t":{"572":{"position":[[9,11]]}}}],["facil",{"_index":97,"t":{"235":{"position":[[0,8]]},"251":{"position":[[0,8]]},"575":{"position":[[0,8]]}}}],["facility_input",{"_index":88,"t":{"148":{"position":[[0,15]]},"172":{"position":[[0,15]]},"196":{"position":[[0,15]]},"222":{"position":[[0,15]]},"263":{"position":[[0,15]]},"1365":{"position":[[7,15]]}}}],["featur",{"_index":76,"t":{"111":{"position":[[7,7]]},"1449":{"position":[[4,8]]},"1457":{"position":[[0,8]]},"1467":{"position":[[0,8]]},"1478":{"position":[[0,8]]},"1505":{"position":[[0,8]]},"1514":{"position":[[0,8]]},"1521":{"position":[[0,8]]},"1537":{"position":[[0,8]]},"1553":{"position":[[0,8]]},"1569":{"position":[[0,8]]},"1580":{"position":[[0,8]]},"1613":{"position":[[0,8]]},"1644":{"position":[[0,8]]},"1655":{"position":[[0,8]]},"1666":{"position":[[0,8]]},"1679":{"position":[[0,8]]},"1712":{"position":[[0,8]]},"1717":{"position":[[0,8]]},"1722":{"position":[[0,8]]},"1727":{"position":[[0,8]]},"1734":{"position":[[0,8]]},"1743":{"position":[[4,8]]},"1745":{"position":[[13,8]]},"1755":{"position":[[4,8]]},"1764":{"position":[[4,8]]},"1769":{"position":[[4,8]]},"1774":{"position":[[4,8]]},"1780":{"position":[[4,8]]},"1789":{"position":[[4,8]]},"1800":{"position":[[4,8]]},"1807":{"position":[[0,8]]},"1814":{"position":[[0,8]]},"1820":{"position":[[4,8]]},"1829":{"position":[[4,8]]},"1840":{"position":[[0,8]]},"1843":{"position":[[4,8]]},"1850":{"position":[[4,8]]},"1857":{"position":[[4,8]]},"1864":{"position":[[4,8]]},"1871":{"position":[[4,8]]},"1883":{"position":[[8,8]]}}}],["fetch",{"_index":301,"t":{"1929":{"position":[[0,5]]}}}],["file",{"_index":40,"t":{"59":{"position":[[77,4]]},"76":{"position":[[9,4]]},"78":{"position":[[9,4]]},"164":{"position":[[6,5]]},"188":{"position":[[6,5]]},"214":{"position":[[6,5]]},"281":{"position":[[6,5]]},"307":{"position":[[51,4]]},"324":{"position":[[6,4]]},"1759":{"position":[[23,5]]},"1835":{"position":[[23,5]]},"1935":{"position":[[4,5]]}}}],["fill",{"_index":64,"t":{"74":{"position":[[41,7]]}}}],["first",{"_index":148,"t":{"472":{"position":[[45,5]]}}}],["fix",{"_index":153,"t":{"490":{"position":[[0,5]]},"1451":{"position":[[0,5]]},"1459":{"position":[[0,5]]},"1480":{"position":[[4,5]]},"1493":{"position":[[4,5]]},"1500":{"position":[[4,5]]},"1507":{"position":[[4,5]]},"1523":{"position":[[4,5]]},"1539":{"position":[[4,5]]},"1548":{"position":[[4,5]]},"1560":{"position":[[4,5]]},"1571":{"position":[[4,5]]},"1582":{"position":[[4,5]]},"1591":{"position":[[4,5]]},"1602":{"position":[[4,5]]},"1615":{"position":[[4,5]]},"1628":{"position":[[4,5]]},"1646":{"position":[[4,5]]},"1657":{"position":[[4,5]]},"1668":{"position":[[4,5]]},"1681":{"position":[[4,5]]},"1694":{"position":[[4,5]]},"1719":{"position":[[0,5]]},"1724":{"position":[[0,5]]},"1729":{"position":[[0,5]]},"1736":{"position":[[0,5]]},"1765":{"position":[[0,5]]},"1770":{"position":[[0,5]]},"1776":{"position":[[0,5]]},"1782":{"position":[[0,5]]},"1792":{"position":[[0,5]]},"1795":{"position":[[4,5]]},"1802":{"position":[[4,5]]},"1809":{"position":[[4,5]]},"1816":{"position":[[4,5]]},"1822":{"position":[[0,5]]},"1825":{"position":[[4,5]]},"1831":{"position":[[0,5]]},"1845":{"position":[[0,5]]},"1852":{"position":[[0,5]]},"1859":{"position":[[0,5]]},"1866":{"position":[[0,5]]},"1873":{"position":[[0,5]]}}}],["flow",{"_index":165,"t":{"569":{"position":[[19,4]]}}}],["fluid",{"_index":145,"t":{"468":{"position":[[78,5]]},"514":{"position":[[0,5]]},"520":{"position":[[0,5]]}}}],["fluid_dens",{"_index":197,"t":{"1176":{"position":[[0,15]]}}}],["fork",{"_index":307,"t":{"1944":{"position":[[0,4]]}}}],["format",{"_index":79,"t":{"116":{"position":[[19,6]]},"243":{"position":[[0,6]]},"251":{"position":[[15,6]]},"292":{"position":[[0,6]]},"299":{"position":[[0,6]]},"305":{"position":[[0,6]]},"327":{"position":[[5,6]]},"337":{"position":[[0,6]]},"348":{"position":[[0,6]]},"356":{"position":[[0,6]]},"362":{"position":[[0,6]]},"368":{"position":[[0,6]]},"374":{"position":[[0,6]]},"382":{"position":[[0,6]]},"392":{"position":[[0,6]]},"397":{"position":[[0,6]]},"411":{"position":[[0,6]]},"419":{"position":[[0,6]]},"431":{"position":[[0,6]]},"437":{"position":[[0,6]]},"443":{"position":[[0,6]]},"451":{"position":[[0,6]]},"457":{"position":[[0,6]]},"461":{"position":[[0,6]]},"478":{"position":[[0,6]]},"484":{"position":[[0,6]]},"516":{"position":[[0,6]]},"522":{"position":[[0,6]]},"530":{"position":[[0,6]]},"538":{"position":[[0,6]]},"544":{"position":[[0,6]]},"552":{"position":[[0,6]]},"591":{"position":[[0,6]]},"599":{"position":[[0,6]]},"607":{"position":[[0,6]]},"615":{"position":[[0,6]]},"622":{"position":[[0,6]]},"641":{"position":[[0,6]]},"649":{"position":[[0,6]]},"657":{"position":[[0,6]]},"665":{"position":[[0,6]]},"674":{"position":[[0,6]]},"680":{"position":[[0,6]]},"688":{"position":[[0,6]]},"696":{"position":[[0,6]]},"702":{"position":[[0,6]]},"710":{"position":[[0,6]]},"718":{"position":[[0,6]]},"727":{"position":[[0,6]]},"732":{"position":[[0,6]]},"737":{"position":[[0,6]]},"751":{"position":[[0,6]]},"758":{"position":[[0,6]]},"765":{"position":[[0,6]]},"772":{"position":[[0,6]]},"779":{"position":[[0,6]]},"787":{"position":[[0,6]]},"795":{"position":[[0,6]]},"802":{"position":[[0,6]]},"813":{"position":[[0,6]]},"824":{"position":[[0,6]]},"832":{"position":[[0,6]]},"840":{"position":[[0,6]]},"848":{"position":[[0,6]]},"857":{"position":[[0,6]]},"863":{"position":[[0,6]]},"869":{"position":[[0,6]]},"877":{"position":[[0,6]]},"890":{"position":[[0,6]]},"898":{"position":[[0,6]]},"906":{"position":[[0,6]]},"914":{"position":[[0,6]]},"922":{"position":[[0,6]]},"942":{"position":[[0,6]]},"953":{"position":[[0,6]]},"961":{"position":[[0,6]]},"968":{"position":[[0,6]]},"975":{"position":[[0,6]]},"983":{"position":[[0,6]]},"994":{"position":[[0,6]]},"1002":{"position":[[0,6]]},"1010":{"position":[[0,6]]},"1018":{"position":[[0,6]]},"1035":{"position":[[0,6]]},"1042":{"position":[[0,6]]},"1053":{"position":[[0,6]]},"1065":{"position":[[0,6]]},"1073":{"position":[[0,6]]},"1085":{"position":[[0,6]]},"1103":{"position":[[0,6]]},"1110":{"position":[[0,6]]},"1120":{"position":[[0,6]]},"1126":{"position":[[0,6]]},"1136":{"position":[[0,6]]},"1142":{"position":[[0,6]]},"1152":{"position":[[0,6]]},"1160":{"position":[[0,6]]},"1184":{"position":[[0,6]]},"1190":{"position":[[0,6]]},"1198":{"position":[[0,6]]},"1206":{"position":[[0,6]]},"1213":{"position":[[0,6]]},"1221":{"position":[[0,6]]},"1229":{"position":[[0,6]]},"1235":{"position":[[0,6]]},"1243":{"position":[[0,6]]},"1253":{"position":[[0,6]]},"1260":{"position":[[0,6]]},"1272":{"position":[[0,6]]},"1276":{"position":[[0,6]]},"1284":{"position":[[0,6]]},"1296":{"position":[[0,6]]},"1309":{"position":[[0,6]]},"1317":{"position":[[0,6]]},"1325":{"position":[[0,6]]},"1343":{"position":[[0,6]]},"1350":{"position":[[0,6]]},"1357":{"position":[[0,6]]},"1375":{"position":[[0,6]]},"1380":{"position":[[0,6]]},"1387":{"position":[[0,6]]},"1400":{"position":[[0,6]]},"1408":{"position":[[0,6]]},"1420":{"position":[[0,6]]},"1426":{"position":[[0,6]]},"1432":{"position":[[0,6]]},"1436":{"position":[[0,6]]},"1444":{"position":[[0,6]]},"1901":{"position":[[11,6]]}}}],["forward",{"_index":63,"t":{"74":{"position":[[33,7]]}}}],["fuel",{"_index":180,"t":{"856":{"position":[[4,5]]}}}],["fuel_typ",{"_index":89,"t":{"150":{"position":[[0,10]]},"174":{"position":[[0,10]]},"198":{"position":[[0,10]]},"226":{"position":[[0,10]]},"265":{"position":[[0,10]]}}}],["fuelconsum",{"_index":92,"t":{"158":{"position":[[0,13]]},"182":{"position":[[0,13]]}}}],["full",{"_index":94,"t":{"162":{"position":[[0,4]]},"186":{"position":[[0,4]]},"212":{"position":[[0,4]]},"232":{"position":[[0,4]]},"279":{"position":[[0,4]]},"329":{"position":[[0,4]]},"1025":{"position":[[0,4]]}}}],["function",{"_index":122,"t":{"394":{"position":[[17,8]]},"1118":{"position":[[0,13]]},"1134":{"position":[[0,13]]},"1150":{"position":[[0,13]]}}}],["gener",{"_index":55,"t":{"63":{"position":[[36,9]]},"340":{"position":[[0,7]]},"407":{"position":[[19,9]]},"441":{"position":[[0,7]]},"449":{"position":[[0,7]]},"470":{"position":[[44,7]]},"1268":{"position":[[0,7]]}}}],["generatorset",{"_index":77,"t":{"111":{"position":[[19,13]]},"156":{"position":[[0,13]]},"180":{"position":[[0,13]]},"230":{"position":[[0,13]]}}}],["git",{"_index":285,"t":{"1901":{"position":[[0,3]]},"1917":{"position":[[11,3]]},"1919":{"position":[[6,3]]},"1921":{"position":[[10,3]]},"1923":{"position":[[5,3]]}}}],["github",{"_index":302,"t":{"1929":{"position":[[19,6]]},"1931":{"position":[[21,6]]},"1939":{"position":[[16,6]]}}}],["guidelin",{"_index":284,"t":{"1897":{"position":[[0,10]]}}}],["header",{"_index":103,"t":{"255":{"position":[[0,6]]},"290":{"position":[[0,6]]},"297":{"position":[[0,6]]},"307":{"position":[[0,6]]},"318":{"position":[[0,6]]}}}],["heater",{"_index":125,"t":{"404":{"position":[[0,7]]}}}],["includ",{"_index":188,"t":{"1055":{"position":[[12,7]]},"1057":{"position":[[12,7]]},"1059":{"position":[[12,7]]}}}],["indent",{"_index":14,"t":{"36":{"position":[[0,11]]}}}],["inform",{"_index":171,"t":{"575":{"position":[[9,11]]},"577":{"position":[[9,11]]}}}],["initi",{"_index":279,"t":{"1891":{"position":[[0,8]]}}}],["input",{"_index":95,"t":{"164":{"position":[[0,5]]},"188":{"position":[[0,5]]},"214":{"position":[[0,5]]},"234":{"position":[[0,5]]},"251":{"position":[[9,5]]},"281":{"position":[[0,5]]},"415":{"position":[[19,5]]},"449":{"position":[[59,5]]},"508":{"position":[[40,6]]},"1759":{"position":[[0,6]]},"1835":{"position":[[0,6]]}}}],["instal",{"_index":91,"t":{"154":{"position":[[0,12]]},"178":{"position":[[0,12]]},"204":{"position":[[0,13]]},"206":{"position":[[0,12]]},"208":{"position":[[0,12]]},"228":{"position":[[0,13]]},"271":{"position":[[0,13]]},"273":{"position":[[0,12]]},"275":{"position":[[0,12]]}}}],["integr",{"_index":229,"t":{"1488":{"position":[[11,11]]},"1545":{"position":[[11,11]]},"1625":{"position":[[11,11]]},"1636":{"position":[[11,11]]},"1691":{"position":[[11,11]]},"1696":{"position":[[11,11]]},"1709":{"position":[[11,11]]}}}],["interpol",{"_index":35,"t":{"59":{"position":[[34,13]]}}}],["interstage_pressure_control",{"_index":152,"t":{"488":{"position":[[0,27]]}}}],["interv",{"_index":117,"t":{"335":{"position":[[5,9]]},"344":{"position":[[5,9]]}}}],["invalid",{"_index":20,"t":{"40":{"position":[[22,7]]}}}],["item",{"_index":191,"t":{"1055":{"position":[[41,4]]}}}],["keyword",{"_index":151,"t":{"486":{"position":[[0,7]]},"585":{"position":[[10,8]]}}}],["known",{"_index":141,"t":{"463":{"position":[[39,5]]}}}],["level",{"_index":176,"t":{"585":{"position":[[4,5]]}}}],["librari",{"_index":5,"t":{"6":{"position":[[7,7]]}}}],["list",{"_index":190,"t":{"1055":{"position":[[36,4]]},"1059":{"position":[[20,4]]}}}],["longer",{"_index":47,"t":{"61":{"position":[[40,6]]}}}],["ltp",{"_index":51,"t":{"63":{"position":[[8,3]]},"76":{"position":[[0,3]]},"1761":{"position":[[8,3]]}}}],["main",{"_index":73,"t":{"90":{"position":[[0,4]]}}}],["make",{"_index":280,"t":{"1893":{"position":[[0,4]]}}}],["map/object",{"_index":189,"t":{"1055":{"position":[[20,10]]},"1057":{"position":[[20,10]]}}}],["margin",{"_index":138,"t":{"455":{"position":[[14,6]]}}}],["markdown",{"_index":290,"t":{"1911":{"position":[[9,8]]},"1913":{"position":[[0,8]]}}}],["messag",{"_index":16,"t":{"38":{"position":[[6,8]]},"40":{"position":[[6,8]]}}}],["method",{"_index":0,"t":{"3":{"position":[[5,6]]},"499":{"position":[[17,7]]},"501":{"position":[[17,7]]}}}],["migrat",{"_index":27,"t":{"54":{"position":[[5,9]]},"55":{"position":[[0,9]]},"87":{"position":[[5,9]]},"88":{"position":[[0,9]]},"92":{"position":[[4,9]]},"105":{"position":[[5,9]]},"110":{"position":[[5,9]]},"115":{"position":[[5,9]]},"120":{"position":[[5,9]]},"121":{"position":[[0,9]]},"127":{"position":[[5,9]]}}}],["miscellan",{"_index":221,"t":{"1471":{"position":[[0,13]]},"1484":{"position":[[0,13]]},"1497":{"position":[[0,13]]},"1502":{"position":[[0,13]]},"1509":{"position":[[0,13]]},"1527":{"position":[[0,13]]},"1532":{"position":[[0,13]]},"1543":{"position":[[0,13]]},"1550":{"position":[[0,13]]},"1555":{"position":[[0,13]]},"1564":{"position":[[0,13]]},"1575":{"position":[[0,13]]},"1586":{"position":[[0,13]]},"1595":{"position":[[0,13]]},"1606":{"position":[[0,13]]},"1619":{"position":[[0,13]]},"1632":{"position":[[0,13]]},"1650":{"position":[[0,13]]},"1661":{"position":[[0,13]]},"1672":{"position":[[0,13]]},"1685":{"position":[[0,13]]},"1704":{"position":[[0,13]]},"1707":{"position":[[0,13]]}}}],["model",{"_index":56,"t":{"68":{"position":[[0,9]]},"144":{"position":[[5,5]]},"162":{"position":[[16,5]]},"168":{"position":[[5,5]]},"186":{"position":[[16,5]]},"192":{"position":[[5,5]]},"200":{"position":[[0,6]]},"212":{"position":[[16,5]]},"218":{"position":[[5,5]]},"224":{"position":[[0,6]]},"232":{"position":[[5,5]]},"259":{"position":[[5,5]]},"267":{"position":[[0,6]]},"279":{"position":[[16,5]]},"335":{"position":[[45,6]]},"372":{"position":[[18,5]]},"380":{"position":[[25,5]]},"463":{"position":[[28,5]]},"465":{"position":[[28,5]]},"497":{"position":[[8,9]]},"510":{"position":[[0,5]]},"514":{"position":[[6,5]]},"520":{"position":[[6,5]]},"542":{"position":[[52,5]]},"726":{"position":[[37,5]]},"731":{"position":[[39,5]]},"736":{"position":[[39,5]]},"885":{"position":[[22,5]]},"1095":{"position":[[7,6]]},"1144":{"position":[[10,5]]},"1292":{"position":[[29,5]]},"1371":{"position":[[7,6]]}}}],["multipl",{"_index":178,"t":{"736":{"position":[[50,8]]}}}],["new",{"_index":50,"t":{"63":{"position":[[4,3]]},"111":{"position":[[3,3]]},"1449":{"position":[[0,3]]},"1743":{"position":[[0,3]]},"1755":{"position":[[0,3]]},"1764":{"position":[[0,3]]},"1769":{"position":[[0,3]]},"1774":{"position":[[0,3]]},"1780":{"position":[[0,3]]},"1789":{"position":[[0,3]]},"1800":{"position":[[0,3]]},"1820":{"position":[[0,3]]},"1829":{"position":[[0,3]]},"1843":{"position":[[0,3]]},"1850":{"position":[[0,3]]},"1857":{"position":[[0,3]]},"1864":{"position":[[0,3]]},"1871":{"position":[[0,3]]}}}],["now",{"_index":59,"t":{"72":{"position":[[29,3]]}}}],["number",{"_index":144,"t":{"465":{"position":[[47,6]]},"474":{"position":[[29,6]]}}}],["object",{"_index":192,"t":{"1057":{"position":[[36,6]]},"1059":{"position":[[30,6]]}}}],["oil_volum",{"_index":183,"t":{"867":{"position":[[28,11]]}}}],["on",{"_index":39,"t":{"59":{"position":[[73,3]]},"542":{"position":[[48,3]]}}}],["oper",{"_index":57,"t":{"72":{"position":[[0,11]]},"505":{"position":[[10,9]]}}}],["option",{"_index":157,"t":{"499":{"position":[[35,7]]},"501":{"position":[[41,7]]}}}],["order",{"_index":70,"t":{"80":{"position":[[25,5]]}}}],["output",{"_index":275,"t":{"1761":{"position":[[0,7]]}}}],["overview",{"_index":28,"t":{"55":{"position":[[10,8]]},"88":{"position":[[10,8]]},"121":{"position":[[10,8]]},"144":{"position":[[11,8]]},"168":{"position":[[11,8]]},"192":{"position":[[11,8]]},"218":{"position":[[11,8]]},"259":{"position":[[11,8]]}}}],["point",{"_index":135,"t":{"441":{"position":[[48,5]]},"449":{"position":[[37,5]]},"470":{"position":[[81,5]]}}}],["possibl",{"_index":33,"t":{"59":{"position":[[7,8]]}}}],["power",{"_index":123,"t":{"399":{"position":[[0,5]]}}}],["predefin",{"_index":133,"t":{"441":{"position":[[30,10]]},"470":{"position":[[91,10]]},"472":{"position":[[97,10]]},"514":{"position":[[18,10]]}}}],["prerequisit",{"_index":276,"t":{"1877":{"position":[[0,13]]},"1887":{"position":[[0,13]]}}}],["pressur",{"_index":154,"t":{"490":{"position":[[6,8]]},"499":{"position":[[0,8]]},"501":{"position":[[0,8]]},"736":{"position":[[71,9]]}}}],["problem",{"_index":19,"t":{"38":{"position":[[32,8]]}}}],["process",{"_index":164,"t":{"569":{"position":[[11,7]]}}}],["profil",{"_index":170,"t":{"573":{"position":[[20,8]]}}}],["propos",{"_index":22,"t":{"42":{"position":[[0,8]]},"46":{"position":[[0,8]]}}}],["pull",{"_index":281,"t":{"1893":{"position":[[7,4]]},"1899":{"position":[[0,4]]},"1942":{"position":[[0,4]]}}}],["pump",{"_index":119,"t":{"372":{"position":[[0,4]]},"805":{"position":[[0,5]]},"1045":{"position":[[0,5]]},"1388":{"position":[[0,5]]},"1393":{"position":[[0,5]]}}}],["pump_chart_single_spe",{"_index":106,"t":{"288":{"position":[[0,23]]}}}],["pump_chart_variable_spe",{"_index":107,"t":{"294":{"position":[[0,25]]}}}],["pump_system",{"_index":121,"t":{"380":{"position":[[0,11]]}}}],["python",{"_index":4,"t":{"6":{"position":[[0,6]]}}}],["qualiti",{"_index":86,"t":{"134":{"position":[[0,7]]}}}],["rate",{"_index":62,"t":{"74":{"position":[[14,5],[60,5]]},"510":{"position":[[20,4]]},"1168":{"position":[[0,5]]},"1303":{"position":[[43,5]]}}}],["rate_fract",{"_index":194,"t":{"1170":{"position":[[0,14]]}}}],["read",{"_index":18,"t":{"38":{"position":[[27,4]]}}}],["readabl",{"_index":287,"t":{"1903":{"position":[[0,11]]}}}],["recircul",{"_index":158,"t":{"501":{"position":[[27,13]]}}}],["refactor",{"_index":224,"t":{"1473":{"position":[[5,11]]},"1486":{"position":[[5,11]]},"1511":{"position":[[5,11]]},"1518":{"position":[[5,11]]},"1529":{"position":[[5,11]]},"1577":{"position":[[5,11]]},"1588":{"position":[[5,11]]},"1597":{"position":[[5,11]]},"1608":{"position":[[5,11]]},"1621":{"position":[[5,11]]},"1634":{"position":[[5,11]]},"1652":{"position":[[5,11]]},"1663":{"position":[[5,11]]},"1674":{"position":[[5,11]]},"1687":{"position":[[5,11]]},"1700":{"position":[[5,11]]}}}],["refer",{"_index":116,"t":{"333":{"position":[[0,9]]},"342":{"position":[[0,9]]}}}],["regular",{"_index":205,"t":{"1299":{"position":[[9,10]]},"1301":{"position":[[0,10]]}}}],["report",{"_index":203,"t":{"1294":{"position":[[0,9]]}}}],["repositori",{"_index":294,"t":{"1921":{"position":[[14,10]]},"1944":{"position":[[9,10]]}}}],["request",{"_index":282,"t":{"1893":{"position":[[12,7]]},"1899":{"position":[[5,8]]},"1942":{"position":[[5,8]]}}}],["requir",{"_index":104,"t":{"255":{"position":[[16,12]]},"290":{"position":[[7,12]]},"297":{"position":[[7,12]]},"307":{"position":[[7,12]]},"318":{"position":[[16,12]]},"532":{"position":[[0,12]]},"573":{"position":[[0,8]]},"924":{"position":[[0,12]]},"1087":{"position":[[0,12]]},"1333":{"position":[[0,8]]}}}],["resampl",{"_index":61,"t":{"74":{"position":[[0,10]]}}}],["reservoir",{"_index":161,"t":{"508":{"position":[[30,9]]}}}],["resourc",{"_index":98,"t":{"235":{"position":[[9,9]]},"237":{"position":[[11,9]]},"1759":{"position":[[14,8]]},"1835":{"position":[[14,8]]}}}],["result",{"_index":12,"t":{"30":{"position":[[11,7]]},"71":{"position":[[0,6]]},"634":{"position":[[11,7]]}}}],["review",{"_index":283,"t":{"1895":{"position":[[9,6]]}}}],["run",{"_index":9,"t":{"24":{"position":[[6,3]]},"628":{"position":[[6,3]]}}}],["sampl",{"_index":109,"t":{"307":{"position":[[28,7]]}}}],["second",{"_index":150,"t":{"472":{"position":[[84,6]]}}}],["selftest",{"_index":10,"t":{"26":{"position":[[6,8]]},"630":{"position":[[6,8]]}}}],["send",{"_index":303,"t":{"1931":{"position":[[0,4]]},"1939":{"position":[[0,4]]}}}],["seri",{"_index":45,"t":{"61":{"position":[[22,6]]},"333":{"position":[[18,6]]},"342":{"position":[[18,6]]},"1301":{"position":[[21,6]]},"1335":{"position":[[29,6]]}}}],["set",{"_index":58,"t":{"72":{"position":[[12,8]]},"407":{"position":[[29,3]]},"1917":{"position":[[0,7]]}}}],["setup",{"_index":114,"t":{"324":{"position":[[0,5]]}}}],["shore",{"_index":124,"t":{"399":{"position":[[11,5]]}}}],["show",{"_index":11,"t":{"28":{"position":[[6,4]]},"30":{"position":[[6,4]]},"32":{"position":[[6,4]]},"632":{"position":[[6,4]]},"634":{"position":[[6,4]]},"636":{"position":[[6,4]]}}}],["signific",{"_index":84,"t":{"132":{"position":[[13,11]]}}}],["simplifi",{"_index":139,"t":{"463":{"position":[[0,10]]},"465":{"position":[[0,10]]},"569":{"position":[[0,10]]}}}],["singl",{"_index":130,"t":{"429":{"position":[[13,6]]},"468":{"position":[[2,8]]},"470":{"position":[[2,8]]},"726":{"position":[[7,6]]}}}],["solut",{"_index":23,"t":{"42":{"position":[[9,8]]},"46":{"position":[[9,8]]}}}],["spec",{"_index":149,"t":{"472":{"position":[[69,4]]}}}],["special",{"_index":24,"t":{"44":{"position":[[0,7]]},"1303":{"position":[[0,8]]},"1883":{"position":[[0,7]]}}}],["specifi",{"_index":163,"t":{"520":{"position":[[22,9]]}}}],["speed",{"_index":131,"t":{"429":{"position":[[20,5]]},"435":{"position":[[22,5]]},"455":{"position":[[34,5]]},"468":{"position":[[51,5]]},"726":{"position":[[14,5]]},"731":{"position":[[16,5]]},"736":{"position":[[16,5]]}}}],["stage",{"_index":142,"t":{"463":{"position":[[56,6]]},"465":{"position":[[68,6]]},"472":{"position":[[28,6],[51,5]]},"474":{"position":[[39,6]]}}}],["standard",{"_index":289,"t":{"1911":{"position":[[0,8]]}}}],["statu",{"_index":305,"t":{"1933":{"position":[[6,6]]}}}],["steam",{"_index":53,"t":{"63":{"position":[[22,5]]}}}],["stp",{"_index":67,"t":{"78":{"position":[[0,3]]}}}],["stream",{"_index":179,"t":{"736":{"position":[[59,7]]},"1303":{"position":[[32,6]]}}}],["structur",{"_index":69,"t":{"80":{"position":[[11,9]]},"340":{"position":[[8,9]]}}}],["style",{"_index":288,"t":{"1905":{"position":[[5,5]]}}}],["subsurfac",{"_index":169,"t":{"573":{"position":[[9,10]]}}}],["suction_pressur",{"_index":195,"t":{"1172":{"position":[[0,17]]}}}],["summari",{"_index":291,"t":{"1913":{"position":[[9,7]]}}}],["support",{"_index":100,"t":{"245":{"position":[[0,9]]},"421":{"position":[[0,9]]},"528":{"position":[[0,9]]},"932":{"position":[[0,9]]},"1144":{"position":[[0,9]]}}}],["surg",{"_index":137,"t":{"455":{"position":[[0,5]]}}}],["switch",{"_index":298,"t":{"1927":{"position":[[0,6]]}}}],["syntax",{"_index":115,"t":{"324":{"position":[[11,6]]}}}],["tabl",{"_index":102,"t":{"253":{"position":[[8,5]]},"311":{"position":[[8,6]]}}}],["tell",{"_index":295,"t":{"1923":{"position":[[0,4]]}}}],["tempor",{"_index":184,"t":{"885":{"position":[[0,8]]}}}],["test",{"_index":250,"t":{"1566":{"position":[[0,5]]},"1599":{"position":[[0,5]]},"1623":{"position":[[0,5]]},"1689":{"position":[[0,5]]},"1698":{"position":[[0,5]]}}}],["theori",{"_index":155,"t":{"495":{"position":[[0,6]]}}}],["time",{"_index":44,"t":{"61":{"position":[[17,4]]},"333":{"position":[[13,4]]},"335":{"position":[[0,4]]},"342":{"position":[[13,4]]},"344":{"position":[[0,4]]},"1023":{"position":[[5,4]]},"1301":{"position":[[16,4]]},"1335":{"position":[[24,4]]}}}],["time_seri",{"_index":31,"t":{"57":{"position":[[14,11]]},"146":{"position":[[0,11]]},"170":{"position":[[0,11]]},"194":{"position":[[0,11]]},"220":{"position":[[0,11]]},"261":{"position":[[0,11]]},"1367":{"position":[[7,11]]}}}],["timeseri",{"_index":99,"t":{"237":{"position":[[0,10]]}}}],["top",{"_index":175,"t":{"585":{"position":[[0,3]]}}}],["train",{"_index":140,"t":{"463":{"position":[[22,5]]},"465":{"position":[[22,5]]},"472":{"position":[[13,5]]},"474":{"position":[[13,5]]},"542":{"position":[[23,5]]},"726":{"position":[[31,5]]},"731":{"position":[[33,5]]},"736":{"position":[[33,5]]}}}],["tsv",{"_index":66,"t":{"76":{"position":[[4,4]]},"78":{"position":[[4,4]]}}}],["turbin",{"_index":54,"t":{"63":{"position":[[28,7]]},"470":{"position":[[11,7]]},"542":{"position":[[35,7]]}}}],["two",{"_index":147,"t":{"472":{"position":[[24,3]]}}}],["type",{"_index":36,"t":{"59":{"position":[[48,5]]},"245":{"position":[[10,5]]},"415":{"position":[[25,4]]},"421":{"position":[[10,5]]},"528":{"position":[[10,5]]},"861":{"position":[[21,6]]},"867":{"position":[[21,6]]},"932":{"position":[[10,5]]},"1144":{"position":[[16,5]]},"1335":{"position":[[36,4]]}}}],["unicod",{"_index":26,"t":{"44":{"position":[[22,7]]}}}],["unit",{"_index":78,"t":{"116":{"position":[[14,4]]},"255":{"position":[[11,4]]},"309":{"position":[[0,5]]},"318":{"position":[[11,4]]},"378":{"position":[[0,5]]},"386":{"position":[[0,5]]}}}],["unknown",{"_index":143,"t":{"465":{"position":[[39,7]]},"472":{"position":[[61,7]]},"474":{"position":[[50,7]]}}}],["up",{"_index":292,"t":{"1917":{"position":[[8,2]]}}}],["us",{"_index":6,"t":{"14":{"position":[[13,3]]},"16":{"position":[[7,3]]},"72":{"position":[[21,4]]},"514":{"position":[[12,5]]},"556":{"position":[[0,5]]},"726":{"position":[[0,3]]},"731":{"position":[[0,3]]},"736":{"position":[[0,3]]},"938":{"position":[[0,3]]},"940":{"position":[[0,3]]},"945":{"position":[[0,3]]},"947":{"position":[[0,3]]},"1095":{"position":[[0,3]]},"1097":{"position":[[0,3]]},"1233":{"position":[[0,3]]},"1270":{"position":[[0,3]]},"1274":{"position":[[0,3]]},"1292":{"position":[[0,3]]},"1365":{"position":[[0,3]]},"1367":{"position":[[0,3]]},"1369":{"position":[[0,3]]},"1371":{"position":[[0,3]]},"1373":{"position":[[0,3]]},"1919":{"position":[[0,5]]}}}],["usag",{"_index":8,"t":{"20":{"position":[[8,5]]},"372":{"position":[[12,5]]},"380":{"position":[[19,5]]},"486":{"position":[[8,5]]},"885":{"position":[[16,5]]},"1021":{"position":[[6,5]]},"1268":{"position":[[8,5]]},"1292":{"position":[[23,5]]}}}],["user",{"_index":128,"t":{"429":{"position":[[0,4]]},"435":{"position":[[0,4]]},"468":{"position":[[29,4]]},"520":{"position":[[17,4]]}}}],["v8.13",{"_index":182,"t":{"861":{"position":[[56,6]]},"867":{"position":[[51,6]]},"1373":{"position":[[29,5]]}}}],["v8.8",{"_index":199,"t":{"1233":{"position":[[50,5]]}}}],["valid",{"_index":173,"t":{"579":{"position":[[0,10]]}}}],["valu",{"_index":193,"t":{"1057":{"position":[[43,5]]},"1059":{"position":[[37,5]]}}}],["variabl",{"_index":90,"t":{"152":{"position":[[0,9]]},"176":{"position":[[0,9]]},"202":{"position":[[0,9]]},"269":{"position":[[0,9]]},"435":{"position":[[13,8]]},"455":{"position":[[25,8]]},"468":{"position":[[42,8]]},"550":{"position":[[9,9]]},"556":{"position":[[6,9]]},"731":{"position":[[7,8]]},"736":{"position":[[7,8]]}}}],["variable_speed_compressor_train",{"_index":200,"t":{"1270":{"position":[[7,31]]}}}],["variable_speed_compressor_train_multiple_streams_and_pressur",{"_index":201,"t":{"1274":{"position":[[7,62]]}}}],["variables/express",{"_index":118,"t":{"335":{"position":[[19,21]]}}}],["vector",{"_index":37,"t":{"59":{"position":[[58,7]]}}}],["vent",{"_index":80,"t":{"116":{"position":[[30,7]]},"861":{"position":[[4,7]]},"867":{"position":[[4,7]]}}}],["venting_emitt",{"_index":75,"t":{"106":{"position":[[14,16]]},"128":{"position":[[14,16]]},"1233":{"position":[[21,16]]},"1373":{"position":[[7,16]]}}}],["version",{"_index":209,"t":{"1418":{"position":[[6,7]]},"1424":{"position":[[11,7]]},"1430":{"position":[[11,7]]}}}],["within",{"_index":38,"t":{"59":{"position":[[66,6]]}}}],["work",{"_index":278,"t":{"1881":{"position":[[7,5]]}}}],["workflow",{"_index":167,"t":{"571":{"position":[[0,8]]},"572":{"position":[[0,8]]},"1941":{"position":[[0,8]]}}}],["yaml",{"_index":13,"t":{"32":{"position":[[11,4]]},"38":{"position":[[22,4]]},"54":{"position":[[0,4]]},"69":{"position":[[0,4]]},"87":{"position":[[0,4]]},"105":{"position":[[0,4]]},"110":{"position":[[0,4]]},"115":{"position":[[0,4]]},"120":{"position":[[0,4]]},"127":{"position":[[0,4]]},"144":{"position":[[0,4]]},"162":{"position":[[11,4]]},"168":{"position":[[0,4]]},"186":{"position":[[11,4]]},"192":{"position":[[0,4]]},"212":{"position":[[11,4]]},"218":{"position":[[0,4]]},"259":{"position":[[0,4]]},"279":{"position":[[11,4]]},"327":{"position":[[0,4]]},"636":{"position":[[11,4]]},"1749":{"position":[[0,4]]},"1759":{"position":[[7,4]]},"1835":{"position":[[7,4]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":1,"t":"Getting started with eCalc","s":"API Reference","u":"/ecalc/docs/about/getting_started/","p":1},{"i":8,"t":"Generated API reference for the libecalc library can be found here.","s":"API Reference","u":"/ecalc/docs/about/getting_started/api/","p":8},{"i":10,"t":"Introduction to eCalc documentation","s":"Introduction to eCalc™","u":"/ecalc/docs/about/","p":10},{"i":18,"t":"Getting started with eCalc CLI","s":"eCalc CLI","u":"/ecalc/docs/about/getting_started/cli/","p":18},{"i":22,"t":"eCalc FAQ","s":"ecalc","u":"/ecalc/docs/about/getting_started/cli/cli_reference","p":22},{"i":34,"t":"eCalc FAQ","s":"FAQ / Troubleshooting","u":"/ecalc/docs/about/getting_started/cli/faq","p":34},{"i":48,"t":"Getting started with eCalc Python Library","s":"Python Library","u":"/ecalc/docs/about/getting_started/library/","p":48},{"i":50,"t":"Getting started with YAML","s":"YAML","u":"/ecalc/docs/about/getting_started/yaml/","p":50},{"i":52,"t":"v8 to v8.1 migration","s":"v8 to v8.1","u":"/ecalc/docs/about/migration_guides/v8_to_v81","p":52},{"i":65,"t":"Getting started with eCalc","s":"Migrating eCalc versions","u":"/ecalc/docs/about/migration_guides/","p":65},{"i":66,"t":"v8.1 to v8.2 migration","s":"v8.1 to v8.2","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","p":66},{"i":85,"t":"v7 to v8 migration","s":"v7 to v8","u":"/ecalc/docs/about/migration_guides/v7_to_v8","p":85},{"i":94,"t":"v8.2 to v8.3 migration","s":"v8.2 to v8.3","u":"/ecalc/docs/about/migration_guides/v8-2_to_v8-3","p":94},{"i":96,"t":"v8.3 to v8.4 migration","s":"v8.3 to v8.4","u":"/ecalc/docs/about/migration_guides/v8-3_to_v8-4","p":96},{"i":98,"t":"v8.5 to v8.6 migration","s":"v8.5 to v8.6","u":"/ecalc/docs/about/migration_guides/v8-5_to_v8-6","p":98},{"i":101,"t":"v8.6 to v8.7 migration","s":"v8.6 to v8.7","u":"/ecalc/docs/about/migration_guides/v8-6_to_v8-7","p":101},{"i":103,"t":"v8.12 to v8.13 migration","s":"v8.12 to v8.13","u":"/ecalc/docs/about/migration_guides/v8.12_to_v8.13","p":103},{"i":108,"t":"v8.13 to v8.14 migration","s":"v8.13 to v8.14","u":"/ecalc/docs/about/migration_guides/v8.13_to_v8.14","p":108},{"i":113,"t":"v8.15 to v8.16 migration","s":"v8.15 to v8.16","u":"/ecalc/docs/about/migration_guides/v8.15_to_v8.16","p":113},{"i":118,"t":"v8.22 to v8.23 migration","s":"v8.22 to v8.23","u":"/ecalc/docs/about/migration_guides/v8.22_to_v8.23","p":118},{"i":125,"t":"v8.7 to v8.8 migration","s":"v8.7 to v8.8","u":"/ecalc/docs/about/migration_guides/v8.7_to_v8.8","p":125},{"i":130,"t":"Output data","s":"Output Data","u":"/ecalc/docs/about/miscellaneous/","p":130},{"i":136,"t":"eCalc modelling","s":"Modelling","u":"/ecalc/docs/about/modelling/","p":136},{"i":138,"t":"Examples of eCalc usage","s":"Course Material","u":"/ecalc/docs/about/modelling/course_material/","p":138},{"i":140,"t":"Examples of eCalc usage","s":"Examples","u":"/ecalc/docs/about/modelling/examples/","p":140},{"i":142,"t":"The following is an example with one installation called Installation A that exports oil (OILPROD) and gas (GASPROD).","s":"Simple model example with invalid timesteps","u":"/ecalc/docs/about/modelling/course_material/simple_invalid_timesteps","p":142},{"i":166,"t":"The following is an example with one installation called Installation A that exports oil (OILPROD) and gas (GASPROD).","s":"Simple model example","u":"/ecalc/docs/about/modelling/examples/simple","p":166},{"i":190,"t":"This is a model very similar to Simple example. The main difference is the use of more advanced","s":"Advanced model example with invalid timesteps","u":"/ecalc/docs/about/modelling/course_material/advanced_invalid_timesteps","p":190},{"i":216,"t":"The Drogon example is based on a synthetic data set.","s":"Drogon model example","u":"/ecalc/docs/about/modelling/examples/drogon","p":216},{"i":239,"t":"Guide on how to setup an eCalc™ model","s":"Set up an eCalc Model","u":"/ecalc/docs/about/modelling/setup/","p":239},{"i":241,"t":"Guide on how to use facility inputs","s":"Facility inputs","u":"/ecalc/docs/about/modelling/setup/facility_inputs/","p":241},{"i":247,"t":"Generator modelling","s":"Generator modelling","u":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","p":247},{"i":257,"t":"This is a model very similar to Simple example. The main difference is the use of more advanced","s":"Advanced model example","u":"/ecalc/docs/about/modelling/examples/advanced","p":257},{"i":283,"t":"Pump modelling","s":"Pump modelling","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/","p":283},{"i":286,"t":"Energy usage for pumps is not based on pre-sampled data between rates,","s":"Pump chart","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","p":286},{"i":303,"t":"Sampled compressor model","s":"Sampled compressor model","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","p":303},{"i":316,"t":"Tabular models","s":"Tabular models","u":"/ecalc/docs/about/modelling/setup/facility_inputs/tabular","p":316},{"i":322,"t":"YAML file format and syntax guide","s":"File format","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","p":322},{"i":331,"t":"Guide on how to use installations","s":"Installations","u":"/ecalc/docs/about/modelling/setup/installations/","p":331},{"i":346,"t":"Guide on how to use fuel types","s":"Fuel types","u":"/ecalc/docs/about/modelling/setup/fuel_types","p":346},{"i":352,"t":"Using compressor models in calculations","s":"Compressor models in calculations","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/","p":352},{"i":354,"t":"COMPRESSOR Energy Usage Model","s":"COMPRESSOR Energy Usage Model","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor","p":354},{"i":360,"t":"COMPRESSOR_SYSTEM Energy Usage Model","s":"COMPRESSOR_SYSTEM energy usage model","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","p":360},{"i":366,"t":"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES Energy Usage Model","s":"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES energy usage model","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","p":366},{"i":370,"t":"Using pumps in calculations","s":"Pump models in calculations","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","p":370},{"i":388,"t":"This energy model usage type allows for defining energy usage directly with an expression. It needs to be either","s":"DIRECT ENERGY USAGE MODEL","u":"/ecalc/docs/about/modelling/setup/installations/direct_consumers","p":388},{"i":390,"t":"Using generator sets in calculations","s":"Generator sets in calculations","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","p":390},{"i":409,"t":"Using tabular models in calculations","s":"Tabular models","u":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","p":409},{"i":417,"t":"Guide on how to use models in eCalc™","s":"Models","u":"/ecalc/docs/about/modelling/setup/models/","p":417},{"i":423,"t":"Compressor modelling","s":"Compressor modelling","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/","p":423},{"i":425,"t":"This section outlines the various compressor train types that are available in eCalc™.","s":"Compressor train types","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/","p":425},{"i":427,"t":"Introduction to compressor chart","s":"Compressor chart","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","p":427},{"i":459,"t":"The simplified variable speed compressor train model is a model of a compressor train where the inter stage pressures","s":"Simplified variable speed compressor train","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","p":459},{"i":476,"t":"The single speed compressor train model is modelling one or more single speed compressors mounted on a common shaft.","s":"Single speed compressor train","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","p":476},{"i":480,"t":"In this model all compressors in the train have the same speed, and the model is build on a forward model of","s":"Variable speed compressor train","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model","p":480},{"i":482,"t":"This compressor type is a more advanced model which covers compressor trains which may have multiple ingoing and/or outgoing streams and/or extra pressure controls. The figure below is an example of what this compression train could look like.","s":"Variable speed compressor train model with multiple streams and pressures","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","p":482},{"i":494,"t":"Introduction to fixed speed pressure control","s":"Fixed speed pressure control","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","p":494},{"i":503,"t":"eCalc EXPRESSIONS","s":"Expressions","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","p":503},{"i":512,"t":"Selecting a fluid model in eCalc","s":"Fluid model","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","p":512},{"i":526,"t":"Time series guide and description","s":"Time series","u":"/ecalc/docs/about/modelling/setup/time_series","p":526},{"i":536,"t":"Turbine modelling","s":"Turbine modelling","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","p":536},{"i":548,"t":"Variables guide and description","s":"Variables","u":"/ecalc/docs/about/modelling/setup/variables","p":548},{"i":560,"t":"Core theory about eCalc™","s":"Theory","u":"/ecalc/docs/about/modelling/theory/","p":560},{"i":562,"t":"Pump modelling theory","s":"Pump modelling","u":"/ecalc/docs/about/modelling/theory/pump_modelling","p":562},{"i":564,"t":"eCalc modelling","s":"eCalc™ Workflow","u":"/ecalc/docs/about/modelling/workflow/","p":564},{"i":566,"t":"Compressor modelling theory","s":"Compressor modelling","u":"/ecalc/docs/about/modelling/theory/compressor_modelling","p":566},{"i":568,"t":"Generic workflow","s":"Generic Workflow","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","p":568},{"i":583,"t":"eCalc KEYWORDS","s":"Keywords","u":"/ecalc/docs/about/references/","p":583},{"i":587,"t":"eCalc Model","s":"ADJUSTMENT","u":"/ecalc/docs/about/references/ADJUSTMENT","p":587},{"i":595,"t":"INSTALLATIONS /","s":"CABLE_LOSS","u":"/ecalc/docs/about/references/CABLE_LOSS","p":595},{"i":603,"t":"MODELS /","s":"CALCULATE_MAX_RATE","u":"/ecalc/docs/about/references/CALCULATE_MAX_RATE","p":603},{"i":611,"t":"eCalc Model","s":"CATEGORY","u":"/ecalc/docs/about/references/CATEGORY","p":611},{"i":619,"t":"Description","s":"CHART_TYPE","u":"/ecalc/docs/about/references/CHART_TYPE","p":619},{"i":626,"t":"Args:","s":"ecalc","u":"/ecalc/docs/about/references/cli_reference","p":626},{"i":638,"t":"Description","s":"COMPOSITION","u":"/ecalc/docs/about/references/COMPOSITION","p":638},{"i":645,"t":"ENERGYUSAGEMODEL / COMPRESSORMODEL","s":"COMPRESSOR_MODEL","u":"/ecalc/docs/about/references/COMPRESSOR_MODEL","p":645},{"i":653,"t":"MODELS /","s":"COMPRESSOR_CHART","u":"/ecalc/docs/about/references/COMPRESSOR_CHART","p":653},{"i":661,"t":"INSTALLATIONS /","s":"COMPRESSORS","u":"/ecalc/docs/about/references/COMPRESSOR_SYSTEM","p":661},{"i":671,"t":"Description","s":"COMPRESSOR_TRAIN","u":"/ecalc/docs/about/references/COMPRESSOR_TRAIN","p":671},{"i":676,"t":"INSTALLATIONS /","s":"CONDITION","u":"/ecalc/docs/about/references/CONDITION","p":676},{"i":684,"t":"INSTALLATIONS /","s":"COMPRESSOR_TRAIN_MODEL","u":"/ecalc/docs/about/references/COMPRESSOR_TRAIN_MODEL","p":684},{"i":692,"t":"INSTALLATIONS /","s":"CONDITIONS","u":"/ecalc/docs/about/references/CONDITIONS","p":692},{"i":698,"t":"FACILITYINPUTS /","s":"CONSTANT","u":"/ecalc/docs/about/references/CONSTANT","p":698},{"i":706,"t":"INSTALLATIONS /","s":"CONSUMERS","u":"/ecalc/docs/about/references/CONSUMERS","p":706},{"i":714,"t":"INSTALLATIONS /","s":"CONSUMPTION_RATE_TYPE","u":"/ecalc/docs/about/references/CONSUMPTION_RATE_TYPE","p":714},{"i":722,"t":"MODELS /","s":"CONTROL_MARGIN","u":"/ecalc/docs/about/references/CONTROL_MARGIN","p":722},{"i":741,"t":"INSTALLATIONS /","s":"CROSSOVER","u":"/ecalc/docs/about/references/CROSSOVER","p":741},{"i":747,"t":"MODELS /","s":"CONTROL_MARGIN_UNIT","u":"/ecalc/docs/about/references/CONTROL_MARGIN_UNIT","p":747},{"i":755,"t":"Description","s":"CURVE","u":"/ecalc/docs/about/references/CURVE","p":755},{"i":762,"t":"Description","s":"DESIGN_HEAD","u":"/ecalc/docs/about/references/DESIGN_HEAD","p":762},{"i":769,"t":"Description","s":"CURVES","u":"/ecalc/docs/about/references/CURVES","p":769},{"i":776,"t":"Description","s":"DESIGN_RATE","u":"/ecalc/docs/about/references/DESIGN_RATE","p":776},{"i":783,"t":"Deprecated from eCalc v8.7 (changed name to VENTING_EMITTERS).","s":"DIRECT_EMITTERS","u":"/ecalc/docs/about/references/DIRECT_EMITTERS","p":783},{"i":791,"t":"INSTALLATIONS /","s":"DISCHARGE_PRESSURE","u":"/ecalc/docs/about/references/DISCHARGE_PRESSURE","p":791},{"i":799,"t":"Description","s":"EFFICIENCY","u":"/ecalc/docs/about/references/EFFICIENCY","p":799},{"i":809,"t":"INSTALLATIONS /","s":"ELECTRICITY2FUEL","u":"/ecalc/docs/about/references/ELECTRICITY2FUEL","p":809},{"i":820,"t":"Deprecated from eCalc v8.8 (is included in EMISSION).","s":"EMISSION_NAME","u":"/ecalc/docs/about/references/EMISSION_NAME","p":820},{"i":828,"t":"MODELS /","s":"DOWNSTREAM_PRESSURE_CONTROL","u":"/ecalc/docs/about/references/DOWNSTREAM_PRESSURE_CONTROL","p":828},{"i":836,"t":"Deprecated from eCalc v8.8 (is included in EMISSION).","s":"EMISSION_RATE","u":"/ecalc/docs/about/references/EMISSION_RATE","p":836},{"i":844,"t":"Deprecated from eCalc v8.8 (replaced by EMISSION).","s":"EMITTER_MODEL","u":"/ecalc/docs/about/references/EMITTER_MODEL","p":844},{"i":852,"t":"FUELTYPES /","s":"EMISSIONS","u":"/ecalc/docs/about/references/EMISSIONS","p":852},{"i":873,"t":"New keyword from eCalc v8.8!","s":"EMISSION","u":"/ecalc/docs/about/references/EMISSION","p":873},{"i":881,"t":"INSTALLATIONS /","s":"ENERGY_USAGE_MODEL","u":"/ecalc/docs/about/references/ENERGY_USAGE_MODEL","p":881},{"i":887,"t":"Description","s":"EOS_MODEL","u":"/ecalc/docs/about/references/EOS_MODEL","p":887},{"i":894,"t":"INSTALLATIONS /","s":"ENERGYFUNCTION","u":"/ecalc/docs/about/references/ENERGYFUNCTION","p":894},{"i":902,"t":"END","s":"END","u":"/ecalc/docs/about/references/END","p":902},{"i":910,"t":"VARIABLES /","s":"EXPRESSION","u":"/ecalc/docs/about/references/EXPRESSION","p":910},{"i":918,"t":"TIMESERIES /","s":"EXTRAPOLATION","u":"/ecalc/docs/about/references/EXTRAPOLATION","p":918},{"i":928,"t":"FACILITYINPUTS","s":"FACILITY_INPUTS","u":"/ecalc/docs/about/references/FACILITY_INPUTS","p":928},{"i":934,"t":"[...] /","s":"FACTOR","u":"/ecalc/docs/about/references/FACTOR","p":934},{"i":949,"t":"... /","s":"FILE","u":"/ecalc/docs/about/references/FILE","p":949},{"i":957,"t":"INSTALLATIONS /","s":"FLUID_DENSITY","u":"/ecalc/docs/about/references/FLUID_DENSITY","p":957},{"i":965,"t":"Description","s":"FLUID_MODEL_TYPE","u":"/ecalc/docs/about/references/FLUID_MODEL_TYPE","p":965},{"i":972,"t":"Description","s":"FLUID_MODEL","u":"/ecalc/docs/about/references/FLUID_MODEL","p":972},{"i":979,"t":"... /","s":"FUEL","u":"/ecalc/docs/about/references/FUEL","p":979},{"i":987,"t":"FUELTYPES","s":"FUEL_TYPES","u":"/ecalc/docs/about/references/FUEL_TYPES","p":987},{"i":991,"t":"Description","s":"GAS_TYPE","u":"/ecalc/docs/about/references/GAS_TYPE","p":991},{"i":998,"t":"INSTALLATIONS","s":"FUELRATE","u":"/ecalc/docs/about/references/FUELRATE","p":998},{"i":1006,"t":"INSTALLATIONS /","s":"FUELCONSUMERS","u":"/ecalc/docs/about/references/FUELCONSUMERS","p":1006},{"i":1014,"t":"INSTALLATIONS /","s":"HCEXPORT","u":"/ecalc/docs/about/references/HCEXPORT","p":1014},{"i":1027,"t":"INSTALLATIONS /","s":"GENERATORSETS","u":"/ecalc/docs/about/references/GENERATORSETS","p":1027},{"i":1031,"t":"FACILITYINPUTS /","s":"HEAD_MARGIN","u":"/ecalc/docs/about/references/HEAD_MARGIN","p":1031},{"i":1039,"t":"Description","s":"HEAD","u":"/ecalc/docs/about/references/HEAD","p":1039},{"i":1050,"t":"Description","s":"!include","u":"/ecalc/docs/about/references/include","p":1050},{"i":1061,"t":"TIMESERIES /","s":"INFLUENCE_TIME_VECTOR","u":"/ecalc/docs/about/references/INFLUENCE_TIME_VECTOR","p":1061},{"i":1069,"t":"MODELS / ...] / [STAGES / INLETTEMPERATURE","s":"INLET_TEMPERATURE","u":"/ecalc/docs/about/references/INLET_TEMPERATURE","p":1069},{"i":1077,"t":"INSTALLATIONS","s":"INSTALLATIONS","u":"/ecalc/docs/about/references/INSTALLATIONS","p":1077},{"i":1081,"t":"TIMESERIES /","s":"INTERPOLATION_TYPE","u":"/ecalc/docs/about/references/INTERPOLATION_TYPE","p":1081},{"i":1091,"t":"INSTALLATIONS /","s":"INTERSTAGE_CONTROL_PRESSURE","u":"/ecalc/docs/about/references/INTERSTAGE_CONTROL_PRESSURE","p":1091},{"i":1099,"t":"INSTALLATIONS /","s":"LOAD","u":"/ecalc/docs/about/references/LOAD","p":1099},{"i":1107,"t":"Description","s":"LOWER_HEATING_VALUE","u":"/ecalc/docs/about/references/LOWER_HEATING_VALUE","p":1107},{"i":1114,"t":"MODELS /","s":"MAXIMUM_DISCHARGE_PRESSURE","u":"/ecalc/docs/about/references/MAXIMUM_DISCHARGE_PRESSURE","p":1114},{"i":1122,"t":"INSTALLATIONS /","s":"MAX_USAGE_FROM_SHORE","u":"/ecalc/docs/about/references/MAX_USAGE_FROM_SHORE","p":1122},{"i":1130,"t":"MODELS /","s":"MAXIMUM_POWER","u":"/ecalc/docs/about/references/MAXIMUM_POWER","p":1130},{"i":1138,"t":"MODELS","s":"MODELS","u":"/ecalc/docs/about/references/MODELS","p":1138},{"i":1146,"t":"MODELS /","s":"MAXIMUM_PRESSURE_RATIO_PER_STAGE","u":"/ecalc/docs/about/references/MAXIMUM_PRESSURE_RATIO_PER_STAGE","p":1146},{"i":1156,"t":"[...] /","s":"NAME","u":"/ecalc/docs/about/references/NAME","p":1156},{"i":1164,"t":"INSTALLATIONS /","s":"OPERATIONAL_SETTINGS","u":"/ecalc/docs/about/references/OPERATIONAL_SETTINGS","p":1164},{"i":1187,"t":"Description","s":"POLYTROPIC_EFFICIENCY","u":"/ecalc/docs/about/references/POLYTROPIC_EFFICIENCY","p":1187},{"i":1194,"t":"MODELS /","s":"POWER_ADJUSTMENT_CONSTANT","u":"/ecalc/docs/about/references/POWER_ADJUSTMENT_CONSTANT","p":1194},{"i":1202,"t":"INSTALLATIONS /","s":"POWERLOSSFACTOR","u":"/ecalc/docs/about/references/POWERLOSSFACTOR","p":1202},{"i":1210,"t":"Description","s":"PRESSURE_CONTROL","u":"/ecalc/docs/about/references/PRESSURE_CONTROL","p":1210},{"i":1217,"t":"MODELS /","s":"PRESSURE_DROP_AHEAD_OF_STAGE","u":"/ecalc/docs/about/references/PRESSURE_DROP_AHEAD_OF_STAGE","p":1217},{"i":1225,"t":"INSTALLATIONS /","s":"RATE","u":"/ecalc/docs/about/references/RATE","p":1225},{"i":1239,"t":"INSTALLATIONS / [...] /","s":"PUMPS","u":"/ecalc/docs/about/references/PUMPS","p":1239},{"i":1249,"t":"INSTALLATIONS /","s":"RATE_PER_STREAM","u":"/ecalc/docs/about/references/RATE_PER_STREAM","p":1249},{"i":1257,"t":"Description","s":"RATE_FRACTIONS","u":"/ecalc/docs/about/references/RATE_FRACTIONS","p":1257},{"i":1264,"t":"MODELS /","s":"STAGES","u":"/ecalc/docs/about/references/STAGES","p":1264},{"i":1280,"t":"START","s":"START","u":"/ecalc/docs/about/references/START","p":1280},{"i":1288,"t":"INSTALLATIONS /","s":"REGULARITY","u":"/ecalc/docs/about/references/REGULARITY","p":1288},{"i":1305,"t":"MODELS /","s":"STREAM","u":"/ecalc/docs/about/references/STREAM","p":1305},{"i":1313,"t":"MODELS /","s":"STREAMS","u":"/ecalc/docs/about/references/STREAMS","p":1313},{"i":1321,"t":"INSTALLATIONS /","s":"SUCTION_PRESSURE","u":"/ecalc/docs/about/references/SUCTION_PRESSURE","p":1321},{"i":1329,"t":"TIMESERIES /","s":"TIME_SERIES","u":"/ecalc/docs/about/references/TIME_SERIES","p":1329},{"i":1339,"t":"INSTALLATIONS / [...] /","s":"TOTAL_SYSTEM_RATE","u":"/ecalc/docs/about/references/TOTAL_SYSTEM_RATE","p":1339},{"i":1347,"t":"Description","s":"TURBINE_LOADS","u":"/ecalc/docs/about/references/TURBINE_LOADS","p":1347},{"i":1354,"t":"Description","s":"TURBINE_EFFICIENCIES","u":"/ecalc/docs/about/references/TURBINE_EFFICIENCIES","p":1354},{"i":1361,"t":"[...] /","s":"TYPE","u":"/ecalc/docs/about/references/TYPE","p":1361},{"i":1377,"t":"Description","s":"TURBINE_MODEL","u":"/ecalc/docs/about/references/TURBINE_MODEL","p":1377},{"i":1384,"t":"Description","s":"UNITS","u":"/ecalc/docs/about/references/UNITS","p":1384},{"i":1397,"t":"Description","s":"UNIT","u":"/ecalc/docs/about/references/UNIT","p":1397},{"i":1404,"t":"MODELS /","s":"UPSTREAM_PRESSURE_CONTROL","u":"/ecalc/docs/about/references/UPSTREAM_PRESSURE_CONTROL","p":1404},{"i":1412,"t":"VARIABLES","s":"VARIABLES","u":"/ecalc/docs/about/references/VARIABLES","p":1412},{"i":1416,"t":"New definition of VENTING_EMITTERS from eCalc v8.13!","s":"VENTING_EMITTERS","u":"/ecalc/docs/about/references/VENTING_EMITTERS","p":1416},{"i":1440,"t":"New keyword from eCalc v8.13!","s":"VOLUME","u":"/ecalc/docs/about/references/VOLUME","p":1440},{"i":1448,"t":"New Features","s":"eCalc","u":"/ecalc/docs/changelog/latest","p":1448},{"i":1456,"t":"Features","s":"eCalc v7.0","u":"/ecalc/docs/changelog/v7-0-release","p":1456},{"i":1463,"t":"8.23.0 (2024-09-26)","s":"Changelog","u":"/ecalc/docs/changelog/","p":1463},{"i":1711,"t":"Features","s":"eCalc v7.1","u":"/ecalc/docs/changelog/v7-1-release","p":1711},{"i":1716,"t":"Features","s":"eCalc v7.3","u":"/ecalc/docs/changelog/v7-3-release","p":1716},{"i":1721,"t":"Features","s":"eCalc v7.4","u":"/ecalc/docs/changelog/v7-4-release","p":1721},{"i":1726,"t":"Features","s":"eCalc v7.5","u":"/ecalc/docs/changelog/v7-5-release","p":1726},{"i":1733,"t":"Features","s":"eCalc v7.2","u":"/ecalc/docs/changelog/v7-2-release","p":1733},{"i":1738,"t":"Breaking changes","s":"eCalc v7.6","u":"/ecalc/docs/changelog/v7-6-release","p":1738},{"i":1741,"t":"eCalc™ v8 is finally here! This new release brings a lot of nice new features and better usability. Here are some","s":"eCalc v8.0","u":"/ecalc/docs/changelog/v8.0-release","p":1741},{"i":1753,"t":"eCalc™ v8.1 is a smaller upgrade from v8.0. Here are some of the highlights:","s":"eCalc v8.1","u":"/ecalc/docs/changelog/v8.1-release","p":1753},{"i":1763,"t":"New Features","s":"eCalc","u":"/ecalc/docs/changelog/v8.11-release","p":1763},{"i":1768,"t":"New Features","s":"eCalc","u":"/ecalc/docs/changelog/v8.10-release","p":1768},{"i":1773,"t":"New Features","s":"eCalc","u":"/ecalc/docs/changelog/v8.12-release","p":1773},{"i":1779,"t":"New Features","s":"eCalc","u":"/ecalc/docs/changelog/v8.13-release","p":1779},{"i":1788,"t":"New Features","s":"eCalc","u":"/ecalc/docs/changelog/v8.14-release","p":1788},{"i":1791,"t":"Fixes","s":"eCalc","u":"/ecalc/docs/changelog/v8.15-release","p":1791},{"i":1794,"t":"Bug Fixes","s":"eCalc","u":"/ecalc/docs/changelog/v8.17-release","p":1794},{"i":1797,"t":"Breaking Changes","s":"eCalc","u":"/ecalc/docs/changelog/v8.16-release","p":1797},{"i":1806,"t":"Features","s":"eCalc","u":"/ecalc/docs/changelog/v8.18-release","p":1806},{"i":1813,"t":"Features","s":"eCalc","u":"/ecalc/docs/changelog/v8.19-release","p":1813},{"i":1818,"t":"eCalc™ v8.2 is a smaller upgrade from v8.1. Here are some of the highlights. See","s":"eCalc v8.2","u":"/ecalc/docs/changelog/v8.2-release","p":1818},{"i":1824,"t":"Bug Fixes","s":"eCalc","u":"/ecalc/docs/changelog/v8.20-release","p":1824},{"i":1827,"t":"eCalc™ v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See","s":"eCalc v8.3","u":"/ecalc/docs/changelog/v8.3-release","p":1827},{"i":1837,"t":"Breaking Changes","s":"eCalc","u":"/ecalc/docs/changelog/v8.21-release","p":1837},{"i":1842,"t":"New Features","s":"eCalc","u":"/ecalc/docs/changelog/v8.5-release","p":1842},{"i":1849,"t":"New Features","s":"eCalc","u":"/ecalc/docs/changelog/v8.6-release","p":1849},{"i":1856,"t":"New Features","s":"eCalc","u":"/ecalc/docs/changelog/v8.4-release","p":1856},{"i":1863,"t":"New Features","s":"eCalc","u":"/ecalc/docs/changelog/v8.7-release","p":1863},{"i":1870,"t":"New Features","s":"eCalc","u":"/ecalc/docs/changelog/v8.8-release","p":1870},{"i":1875,"t":"This site was generated from the contents of your documentation folder using Docusaurus.","s":"Get started","u":"/ecalc/docs/contribute/documentation-guide/documentation","p":1875},{"i":1885,"t":"Welcome! We are glad that you want to contribute to our project! 💖","s":"Get Started","u":"/ecalc/docs/contribute/get_started","p":1885},{"i":1907,"t":"Git commits are required to follow conventional commits.","s":"Conventional Commits","u":"/ecalc/docs/contribute/guides/conventional_commits","p":1907},{"i":1909,"t":"Docusaurus uses standard Markdown syntax plus Docusaurus Extended Markdown functionality.","s":"Markdown","u":"/ecalc/docs/contribute/documentation-guide/markdown","p":1909},{"i":1915,"t":"Git is the version control system (VCS) that is responsible for tracking all changes done to the code base.","s":"Git","u":"/ecalc/docs/contribute/guides/git","p":1915}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/1",[0,3.661,1,3.491,2,1.885]],["t/8",[3,2.39,4,3.253,5,3.253,6,3.253,7,2.913,8,3.253,9,2.39]],["t/10",[2,1.885,10,4.121,11,4.463]],["t/18",[0,3.231,1,3.081,2,1.664,12,4.398]],["t/22",[2,2.174,13,5.147]],["t/34",[2,2.174,13,5.147]],["t/48",[0,2.892,1,2.758,2,1.489,7,3.525,14,3.936]],["t/50",[0,3.661,1,3.491,15,4.463]],["t/52",[16,4.121,17,3.865,18,2.826]],["t/65",[0,3.661,1,3.491,2,1.885]],["t/66",[17,3.865,18,2.826,19,3.865]],["t/85",[16,4.121,18,2.826,20,4.982]],["t/94",[18,2.826,19,3.865,21,4.121]],["t/96",[18,2.826,21,4.121,22,4.982]],["t/98",[18,2.826,23,4.982,24,4.463]],["t/101",[18,2.826,24,4.463,25,4.121]],["t/103",[18,2.826,26,4.982,27,3.865]],["t/108",[18,2.826,27,3.865,28,4.982]],["t/113",[18,2.826,29,4.982,30,4.982]],["t/118",[18,2.826,31,4.982,32,4.982]],["t/125",[18,2.826,25,4.121,33,3.661]],["t/130",[34,5.747,35,4.752]],["t/136",[2,2.174,36,1.796]],["t/138",[2,1.885,37,3.218,38,3.345]],["t/140",[2,1.885,37,3.218,38,3.345]],["t/142",[37,1.559,39,1.997,40,1.997,41,1.468,42,2.163,43,2.163,44,2.163,45,2.163,46,2.163,47,2.163]],["t/166",[37,1.559,39,1.997,40,1.997,41,1.468,42,2.163,43,2.163,44,2.163,45,2.163,46,2.163,47,2.163]],["t/190",[36,0.806,37,1.667,48,2.311,49,2.311,50,2.311,51,2.311,52,2.311,53,1.463,54,2.002,55,2.134]],["t/216",[35,2.946,37,2.3,56,3.562,57,2.946,58,3.562,59,3.19]],["t/239",[2,1.664,36,1.374,60,2.84,61,4.398]],["t/241",[53,2.494,60,2.84,62,4.398,63,4.398]],["t/247",[3,4.222,36,1.796]],["t/257",[36,0.806,37,1.667,48,2.311,49,2.311,50,2.311,51,2.311,52,2.311,53,1.463,54,2.002,55,2.134]],["t/283",[36,1.796,64,4.458]],["t/286",[35,2.292,38,1.861,57,2.292,64,2.15,65,2.036,66,2.772,67,2.482,68,2.772,69,2.772]],["t/303",[36,1.557,67,4.463,70,2.91]],["t/316",[36,1.796,71,5.147]],["t/322",[15,3.525,60,2.542,72,3.936,73,3.936,74,3.525]],["t/331",[41,1.854,53,2.826,60,3.218]],["t/346",[53,2.494,60,2.84,75,4.398,76,3.411]],["t/352",[36,1.374,53,2.494,70,2.569,77,3.411]],["t/354",[36,1.374,38,2.953,65,3.231,70,2.569]],["t/360",[36,1.374,38,2.953,65,3.231,78,4.398]],["t/366",[36,1.374,38,2.953,65,3.231,79,4.398]],["t/370",[53,2.826,64,3.865,77,3.865]],["t/388",[36,0.754,38,2.649,65,2.898,76,1.873,80,2.414,81,2.414,82,2.414,83,2.163,84,2.414]],["t/390",[3,3.231,53,2.494,59,3.939,77,3.411]],["t/409",[36,1.374,53,2.494,71,3.939,77,3.411]],["t/417",[2,1.664,36,1.374,53,2.494,60,2.84]],["t/423",[36,1.796,70,3.357]],["t/425",[2,1.132,70,1.748,76,2.322,85,2.993,86,2.993,87,2.993,88,2.199,89,2.993]],["t/427",[10,4.121,70,2.91,90,4.982]],["t/459",[36,1.171,70,2.189,88,2.753,91,2.268,92,1.759,93,1.759,94,2.268,95,2.032,96,1.876]],["t/476",[36,1.065,40,1.673,54,1.569,70,1.99,88,1.487,93,2.643,97,3.407,98,2.023,99,2.023,100,2.023]],["t/480",[36,1.716,70,1.619,88,2.036,93,2.15,101,2.772,102,2.772,103,2.772]],["t/482",[36,0.426,37,0.879,54,1.056,55,1.126,70,1.412,76,1.056,88,1.776,96,1.126,104,1.362,105,1.362,106,1.362,107,2.418,108,1.362,109,1.362,110,1.362,111,1.126,112,1.362,113,1.362,114,1.362,115,1.362]],["t/494",[10,3.255,93,3.053,96,3.255,111,3.255,116,3.053]],["t/503",[2,2.174,83,5.147]],["t/512",[2,1.664,36,1.374,117,4.398,118,4.398]],["t/526",[60,2.84,119,4.398,120,4.398,121,1.854]],["t/536",[36,1.796,122,5.747]],["t/548",[60,3.218,92,3.865,121,2.1]],["t/560",[2,1.885,123,4.982,124,4.121]],["t/562",[36,1.557,64,3.865,124,4.121]],["t/564",[2,2.174,36,1.796]],["t/566",[36,1.557,70,2.91,124,4.121]],["t/568",[3,4.222,125,5.747]],["t/583",[2,2.174,126,4.752]],["t/587",[2,2.174,36,1.796]],["t/595",[41,2.138,127,1.468]],["t/603",[36,1.796,127,1.468]],["t/611",[2,2.174,36,1.796]],["t/619",[121,2.861]],["t/626",[128,6.787]],["t/638",[121,2.861]],["t/645",[127,1.273,129,4.982,130,4.982]],["t/653",[36,1.796,127,1.468]],["t/661",[41,2.138,127,1.468]],["t/671",[121,2.861]],["t/676",[41,2.138,127,1.468]],["t/684",[41,2.138,127,1.468]],["t/692",[41,2.138,127,1.468]],["t/698",[127,1.468,131,4.752]],["t/706",[41,2.138,127,1.468]],["t/714",[41,2.138,127,1.468]],["t/722",[36,1.796,127,1.468]],["t/741",[41,2.138,127,1.468]],["t/747",[36,1.796,127,1.468]],["t/755",[121,2.861]],["t/762",[121,2.861]],["t/769",[121,2.861]],["t/776",[121,2.861]],["t/783",[2,1.348,25,2.946,132,2.763,133,2.617,134,3.562,135,3.19]],["t/791",[41,2.138,127,1.468]],["t/799",[121,2.861]],["t/809",[41,2.138,127,1.468]],["t/820",[2,1.489,33,2.892,132,3.053,136,3.525,137,3.255]],["t/828",[36,1.796,127,1.468]],["t/836",[2,1.489,33,2.892,132,3.053,136,3.525,137,3.255]],["t/844",[2,1.489,33,2.892,132,3.053,137,3.255,138,3.936]],["t/852",[127,1.468,139,5.147]],["t/873",[2,1.664,33,3.231,126,3.637,140,2.301]],["t/881",[41,2.138,127,1.468]],["t/887",[121,2.861]],["t/894",[41,2.138,127,1.468]],["t/902",[141,6.787]],["t/910",[92,4.458,127,1.468]],["t/918",[127,1.468,142,4.458]],["t/928",[131,5.613]],["t/934",[127,1.915]],["t/949",[127,1.915]],["t/957",[41,2.138,127,1.468]],["t/965",[121,2.861]],["t/972",[121,2.861]],["t/979",[127,1.915]],["t/987",[139,6.079]],["t/991",[121,2.861]],["t/998",[41,2.525]],["t/1006",[41,2.138,127,1.468]],["t/1014",[41,2.138,127,1.468]],["t/1027",[41,2.138,127,1.468]],["t/1031",[127,1.468,131,4.752]],["t/1039",[121,2.861]],["t/1050",[121,2.861]],["t/1061",[127,1.468,142,4.458]],["t/1069",[36,1.016,95,2.913,127,1.745,143,3.253]],["t/1077",[41,2.525]],["t/1081",[127,1.468,142,4.458]],["t/1091",[41,2.138,127,1.468]],["t/1099",[41,2.138,127,1.468]],["t/1107",[121,2.861]],["t/1114",[36,1.796,127,1.468]],["t/1122",[41,2.138,127,1.468]],["t/1130",[36,1.796,127,1.468]],["t/1138",[36,2.121]],["t/1146",[36,1.796,127,1.468]],["t/1156",[127,1.915]],["t/1164",[41,2.138,127,1.468]],["t/1187",[121,2.861]],["t/1194",[36,1.796,127,1.468]],["t/1202",[41,2.138,127,1.468]],["t/1210",[121,2.861]],["t/1217",[36,1.796,127,1.468]],["t/1225",[41,2.138,127,1.468]],["t/1239",[41,1.636,127,1.856]],["t/1249",[41,2.138,127,1.468]],["t/1257",[121,2.861]],["t/1264",[36,1.796,127,1.468]],["t/1280",[1,4.755]],["t/1288",[41,2.138,127,1.468]],["t/1305",[36,1.796,127,1.468]],["t/1313",[36,1.796,127,1.468]],["t/1321",[41,2.138,127,1.468]],["t/1329",[127,1.468,142,4.458]],["t/1339",[41,1.636,127,1.856]],["t/1347",[121,2.861]],["t/1354",[121,2.861]],["t/1361",[127,1.915]],["t/1377",[121,2.861]],["t/1384",[121,2.861]],["t/1397",[121,2.861]],["t/1404",[36,1.796,127,1.468]],["t/1412",[92,5.265]],["t/1416",[2,1.489,27,3.053,135,3.525,140,2.059,144,3.936]],["t/1440",[2,1.664,27,3.411,126,3.637,140,2.301]],["t/1448",[140,3.006,145,2.678]],["t/1456",[145,3.164]],["t/1463",[146,4.398,147,4.398,148,4.398,149,4.398]],["t/1711",[145,3.164]],["t/1716",[145,3.164]],["t/1721",[145,3.164]],["t/1726",[145,3.164]],["t/1733",[145,3.164]],["t/1738",[133,4.222,150,4.752]],["t/1741",[2,0.766,9,2.503,16,1.673,140,1.782,145,0.943,151,2.023,152,2.023,153,2.023,154,2.023,155,2.023,156,2.023,157,2.023]],["t/1753",[2,1.231,9,2.39,17,2.523,158,2.69,159,2.69,160,3.253,161,2.69]],["t/1763",[140,3.006,145,2.678]],["t/1768",[140,3.006,145,2.678]],["t/1773",[140,3.006,145,2.678]],["t/1779",[140,3.006,145,2.678]],["t/1788",[140,3.006,145,2.678]],["t/1791",[116,5.265]],["t/1794",[116,4.458,162,5.147]],["t/1797",[133,4.222,150,4.752]],["t/1806",[145,3.164]],["t/1813",[145,3.164]],["t/1818",[2,1.132,9,2.199,17,2.322,19,2.322,158,2.475,159,2.475,161,2.475,163,2.681]],["t/1824",[116,4.458,162,5.147]],["t/1827",[2,1.132,9,2.199,19,2.322,21,2.475,158,2.475,159,2.475,161,2.475,163,2.681]],["t/1837",[133,4.222,150,4.752]],["t/1842",[140,3.006,145,2.678]],["t/1849",[140,3.006,145,2.678]],["t/1856",[140,3.006,145,2.678]],["t/1863",[140,3.006,145,2.678]],["t/1870",[140,3.006,145,2.678]],["t/1875",[3,2.39,11,2.913,53,1.845,164,3.253,165,3.253,166,3.253,167,2.913]],["t/1885",[127,0.91,168,3.562,169,3.562,170,3.562,171,3.562,172,3.562]],["t/1907",[39,2.946,173,3.19,174,5.354,175,3.562,176,3.562]],["t/1909",[53,1.463,74,2.311,167,3.73,177,2.581,178,4.164,179,2.581,180,2.581,181,2.581]],["t/1915",[57,1.997,111,1.997,133,1.774,173,2.163,182,2.414,183,2.414,184,2.414,185,2.414,186,2.414,187,2.414,188,2.414]]],"invertedIndex":[["",{"_index":127,"t":{"595":{"position":[[14,1]]},"603":{"position":[[7,1]]},"645":{"position":[[17,1]]},"653":{"position":[[7,1]]},"661":{"position":[[14,1]]},"676":{"position":[[14,1]]},"684":{"position":[[14,1]]},"692":{"position":[[14,1]]},"698":{"position":[[15,1]]},"706":{"position":[[14,1]]},"714":{"position":[[14,1]]},"722":{"position":[[7,1]]},"741":{"position":[[14,1]]},"747":{"position":[[7,1]]},"791":{"position":[[14,1]]},"809":{"position":[[14,1]]},"828":{"position":[[7,1]]},"852":{"position":[[10,1]]},"881":{"position":[[14,1]]},"894":{"position":[[14,1]]},"910":{"position":[[10,1]]},"918":{"position":[[11,1]]},"934":{"position":[[0,5],[6,1]]},"949":{"position":[[0,3],[4,1]]},"957":{"position":[[14,1]]},"979":{"position":[[0,3],[4,1]]},"1006":{"position":[[14,1]]},"1014":{"position":[[14,1]]},"1027":{"position":[[14,1]]},"1031":{"position":[[15,1]]},"1061":{"position":[[11,1]]},"1069":{"position":[[7,1],[9,4],[14,1],[24,1]]},"1081":{"position":[[11,1]]},"1091":{"position":[[14,1]]},"1099":{"position":[[14,1]]},"1114":{"position":[[7,1]]},"1122":{"position":[[14,1]]},"1130":{"position":[[7,1]]},"1146":{"position":[[7,1]]},"1156":{"position":[[0,5],[6,1]]},"1164":{"position":[[14,1]]},"1194":{"position":[[7,1]]},"1202":{"position":[[14,1]]},"1217":{"position":[[7,1]]},"1225":{"position":[[14,1]]},"1239":{"position":[[14,1],[16,5],[22,1]]},"1249":{"position":[[14,1]]},"1264":{"position":[[7,1]]},"1288":{"position":[[14,1]]},"1305":{"position":[[7,1]]},"1313":{"position":[[7,1]]},"1321":{"position":[[14,1]]},"1329":{"position":[[11,1]]},"1339":{"position":[[14,1],[16,5],[22,1]]},"1361":{"position":[[0,5],[6,1]]},"1404":{"position":[[7,1]]},"1885":{"position":[[65,2]]}}}],["09",{"_index":148,"t":{"1463":{"position":[[13,2]]}}}],["2024",{"_index":147,"t":{"1463":{"position":[[7,5]]}}}],["26",{"_index":149,"t":{"1463":{"position":[[16,3]]}}}],["8.23.0",{"_index":146,"t":{"1463":{"position":[[0,6]]}}}],["advanc",{"_index":55,"t":{"190":{"position":[[87,8]]},"257":{"position":[[87,8]]},"482":{"position":[[31,8]]}}}],["allow",{"_index":80,"t":{"388":{"position":[[29,6]]}}}],["and/or",{"_index":107,"t":{"482":{"position":[[109,6],[133,6]]}}}],["api",{"_index":4,"t":{"8":{"position":[[10,3]]}}}],["arg",{"_index":128,"t":{"626":{"position":[[0,5]]}}}],["avail",{"_index":89,"t":{"425":{"position":[[66,9]]}}}],["base",{"_index":57,"t":{"216":{"position":[[22,5]]},"286":{"position":[[30,5]]},"1915":{"position":[[102,5]]}}}],["below",{"_index":113,"t":{"482":{"position":[[176,5]]}}}],["better",{"_index":156,"t":{"1741":{"position":[[82,6]]}}}],["between",{"_index":68,"t":{"286":{"position":[[56,7]]}}}],["break",{"_index":150,"t":{"1738":{"position":[[0,8]]},"1797":{"position":[[0,8]]},"1837":{"position":[[0,8]]}}}],["bring",{"_index":153,"t":{"1741":{"position":[[44,6]]}}}],["bug",{"_index":162,"t":{"1794":{"position":[[0,3]]},"1824":{"position":[[0,3]]}}}],["build",{"_index":102,"t":{"480":{"position":[[81,5]]}}}],["calcul",{"_index":77,"t":{"352":{"position":[[27,12]]},"370":{"position":[[15,12]]},"390":{"position":[[24,12]]},"409":{"position":[[24,12]]}}}],["call",{"_index":42,"t":{"142":{"position":[[50,6]]},"166":{"position":[[50,6]]}}}],["chang",{"_index":133,"t":{"783":{"position":[[27,8]]},"1738":{"position":[[9,7]]},"1797":{"position":[[9,7]]},"1837":{"position":[[9,7]]},"1915":{"position":[[77,7]]}}}],["chart",{"_index":90,"t":{"427":{"position":[[27,5]]}}}],["cli",{"_index":12,"t":{"18":{"position":[[27,3]]}}}],["code",{"_index":188,"t":{"1915":{"position":[[97,4]]}}}],["commit",{"_index":174,"t":{"1907":{"position":[[4,7],[48,8]]}}}],["common",{"_index":99,"t":{"476":{"position":[[103,6]]}}}],["compress",{"_index":114,"t":{"482":{"position":[[209,11]]}}}],["compressor",{"_index":70,"t":{"303":{"position":[[8,10]]},"352":{"position":[[6,10]]},"354":{"position":[[0,10]]},"423":{"position":[[0,10]]},"425":{"position":[[34,10]]},"427":{"position":[[16,10]]},"459":{"position":[[30,10],[69,10]]},"476":{"position":[[17,10],[78,11]]},"480":{"position":[[18,11]]},"482":{"position":[[5,10],[59,10]]},"566":{"position":[[0,10]]}}}],["compressor_system",{"_index":78,"t":{"360":{"position":[[0,17]]}}}],["compressormodel",{"_index":130,"t":{"645":{"position":[[19,15]]}}}],["content",{"_index":165,"t":{"1875":{"position":[[33,8]]}}}],["contribut",{"_index":171,"t":{"1885":{"position":[[38,10]]}}}],["control",{"_index":111,"t":{"482":{"position":[[155,9]]},"494":{"position":[[37,7]]},"1915":{"position":[[19,7]]}}}],["convent",{"_index":176,"t":{"1907":{"position":[[35,12]]}}}],["core",{"_index":123,"t":{"560":{"position":[[0,4]]}}}],["cover",{"_index":104,"t":{"482":{"position":[[52,6]]}}}],["data",{"_index":35,"t":{"130":{"position":[[7,4]]},"216":{"position":[[43,4]]},"286":{"position":[[51,4]]}}}],["defin",{"_index":81,"t":{"388":{"position":[[40,8]]}}}],["definit",{"_index":144,"t":{"1416":{"position":[[4,10]]}}}],["deprec",{"_index":132,"t":{"783":{"position":[[0,10]]},"820":{"position":[[0,10]]},"836":{"position":[[0,10]]},"844":{"position":[[0,10]]}}}],["descript",{"_index":121,"t":{"526":{"position":[[22,11]]},"548":{"position":[[20,11]]},"619":{"position":[[0,11]]},"638":{"position":[[0,11]]},"671":{"position":[[0,11]]},"755":{"position":[[0,11]]},"762":{"position":[[0,11]]},"769":{"position":[[0,11]]},"776":{"position":[[0,11]]},"799":{"position":[[0,11]]},"887":{"position":[[0,11]]},"965":{"position":[[0,11]]},"972":{"position":[[0,11]]},"991":{"position":[[0,11]]},"1039":{"position":[[0,11]]},"1050":{"position":[[0,11]]},"1107":{"position":[[0,11]]},"1187":{"position":[[0,11]]},"1210":{"position":[[0,11]]},"1257":{"position":[[0,11]]},"1347":{"position":[[0,11]]},"1354":{"position":[[0,11]]},"1377":{"position":[[0,11]]},"1384":{"position":[[0,11]]},"1397":{"position":[[0,11]]}}}],["differ",{"_index":52,"t":{"190":{"position":[[57,10]]},"257":{"position":[[57,10]]}}}],["directli",{"_index":82,"t":{"388":{"position":[[62,8]]}}}],["document",{"_index":11,"t":{"10":{"position":[[22,13]]},"1875":{"position":[[50,13]]}}}],["docusauru",{"_index":167,"t":{"1875":{"position":[[77,11]]},"1909":{"position":[[0,10],[46,10]]}}}],["done",{"_index":187,"t":{"1915":{"position":[[85,4]]}}}],["drogon",{"_index":56,"t":{"216":{"position":[[4,6]]}}}],["ecalc",{"_index":2,"t":{"1":{"position":[[21,5]]},"10":{"position":[[16,5]]},"18":{"position":[[21,5]]},"22":{"position":[[0,5]]},"34":{"position":[[0,5]]},"48":{"position":[[21,5]]},"65":{"position":[[21,5]]},"136":{"position":[[0,5]]},"138":{"position":[[12,5]]},"140":{"position":[[12,5]]},"239":{"position":[[25,6]]},"417":{"position":[[30,6]]},"425":{"position":[[79,7]]},"503":{"position":[[0,5]]},"512":{"position":[[27,5]]},"560":{"position":[[18,6]]},"564":{"position":[[0,5]]},"583":{"position":[[0,5]]},"587":{"position":[[0,5]]},"611":{"position":[[0,5]]},"783":{"position":[[16,5]]},"820":{"position":[[16,5]]},"836":{"position":[[16,5]]},"844":{"position":[[16,5]]},"873":{"position":[[17,5]]},"1416":{"position":[[40,5]]},"1440":{"position":[[17,5]]},"1741":{"position":[[0,6]]},"1753":{"position":[[0,6]]},"1818":{"position":[[0,6]]},"1827":{"position":[[0,6]]}}}],["emiss",{"_index":137,"t":{"820":{"position":[[43,10]]},"836":{"position":[[43,10]]},"844":{"position":[[40,10]]}}}],["end",{"_index":141,"t":{"902":{"position":[[0,3]]}}}],["energi",{"_index":65,"t":{"286":{"position":[[0,6]]},"354":{"position":[[11,6]]},"360":{"position":[[18,6]]},"366":{"position":[[63,6]]},"388":{"position":[[5,6],[49,6]]}}}],["energyusagemodel",{"_index":129,"t":{"645":{"position":[[0,16]]}}}],["exampl",{"_index":37,"t":{"138":{"position":[[0,8]]},"140":{"position":[[0,8]]},"142":{"position":[[20,7]]},"166":{"position":[[20,7]]},"190":{"position":[[39,8]]},"216":{"position":[[11,7]]},"257":{"position":[[39,8]]},"482":{"position":[[188,7]]}}}],["export",{"_index":43,"t":{"142":{"position":[[77,7]]},"166":{"position":[[77,7]]}}}],["express",{"_index":83,"t":{"388":{"position":[[79,11]]},"503":{"position":[[6,11]]}}}],["extend",{"_index":180,"t":{"1909":{"position":[[57,8]]}}}],["extra",{"_index":110,"t":{"482":{"position":[[140,5]]}}}],["facil",{"_index":62,"t":{"241":{"position":[[20,8]]}}}],["facilityinput",{"_index":131,"t":{"698":{"position":[[0,14]]},"928":{"position":[[0,14]]},"1031":{"position":[[0,14]]}}}],["faq",{"_index":13,"t":{"22":{"position":[[6,3]]},"34":{"position":[[6,3]]}}}],["featur",{"_index":145,"t":{"1448":{"position":[[4,8]]},"1456":{"position":[[0,8]]},"1711":{"position":[[0,8]]},"1716":{"position":[[0,8]]},"1721":{"position":[[0,8]]},"1726":{"position":[[0,8]]},"1733":{"position":[[0,8]]},"1741":{"position":[[69,8]]},"1763":{"position":[[4,8]]},"1768":{"position":[[4,8]]},"1773":{"position":[[4,8]]},"1779":{"position":[[4,8]]},"1788":{"position":[[4,8]]},"1806":{"position":[[0,8]]},"1813":{"position":[[0,8]]},"1842":{"position":[[4,8]]},"1849":{"position":[[4,8]]},"1856":{"position":[[4,8]]},"1863":{"position":[[4,8]]},"1870":{"position":[[4,8]]}}}],["figur",{"_index":112,"t":{"482":{"position":[[169,6]]}}}],["file",{"_index":72,"t":{"322":{"position":[[5,4]]}}}],["final",{"_index":151,"t":{"1741":{"position":[[13,7]]}}}],["fix",{"_index":116,"t":{"494":{"position":[[16,5]]},"1791":{"position":[[0,5]]},"1794":{"position":[[4,5]]},"1824":{"position":[[4,5]]}}}],["fluid",{"_index":118,"t":{"512":{"position":[[12,5]]}}}],["folder",{"_index":166,"t":{"1875":{"position":[[64,6]]}}}],["follow",{"_index":39,"t":{"142":{"position":[[4,9]]},"166":{"position":[[4,9]]},"1907":{"position":[[28,6]]}}}],["format",{"_index":73,"t":{"322":{"position":[[10,6]]}}}],["forward",{"_index":103,"t":{"480":{"position":[[92,7]]}}}],["found",{"_index":8,"t":{"8":{"position":[[56,5]]}}}],["fuel",{"_index":75,"t":{"346":{"position":[[20,4]]}}}],["fueltyp",{"_index":139,"t":{"852":{"position":[[0,9]]},"987":{"position":[[0,9]]}}}],["function",{"_index":181,"t":{"1909":{"position":[[75,14]]}}}],["ga",{"_index":46,"t":{"142":{"position":[[103,3]]},"166":{"position":[[103,3]]}}}],["gasprod",{"_index":47,"t":{"142":{"position":[[107,10]]},"166":{"position":[[107,10]]}}}],["gener",{"_index":3,"t":{"8":{"position":[[0,9]]},"247":{"position":[[0,9]]},"390":{"position":[[6,9]]},"568":{"position":[[0,7]]},"1875":{"position":[[14,9]]}}}],["get",{"_index":0,"t":{"1":{"position":[[0,7]]},"18":{"position":[[0,7]]},"48":{"position":[[0,7]]},"50":{"position":[[0,7]]},"65":{"position":[[0,7]]}}}],["git",{"_index":173,"t":{"1907":{"position":[[0,3]]},"1915":{"position":[[0,3]]}}}],["glad",{"_index":169,"t":{"1885":{"position":[[16,4]]}}}],["guid",{"_index":60,"t":{"239":{"position":[[0,5]]},"241":{"position":[[0,5]]},"322":{"position":[[28,5]]},"331":{"position":[[0,5]]},"346":{"position":[[0,5]]},"417":{"position":[[0,5]]},"526":{"position":[[12,5]]},"548":{"position":[[10,5]]}}}],["here",{"_index":9,"t":{"8":{"position":[[62,5]]},"1741":{"position":[[21,5],[100,4]]},"1753":{"position":[[44,4]]},"1818":{"position":[[44,4]]},"1827":{"position":[[44,4]]}}}],["highlight",{"_index":161,"t":{"1753":{"position":[[65,11]]},"1818":{"position":[[65,11]]},"1827":{"position":[[65,11]]}}}],["includ",{"_index":136,"t":{"820":{"position":[[31,8]]},"836":{"position":[[31,8]]}}}],["ingo",{"_index":106,"t":{"482":{"position":[[101,7]]}}}],["inlettemperatur",{"_index":143,"t":{"1069":{"position":[[26,16]]}}}],["input",{"_index":63,"t":{"241":{"position":[[29,6]]}}}],["instal",{"_index":41,"t":{"142":{"position":[[37,12],[57,12]]},"166":{"position":[[37,12],[57,12]]},"331":{"position":[[20,13]]},"595":{"position":[[0,13]]},"661":{"position":[[0,13]]},"676":{"position":[[0,13]]},"684":{"position":[[0,13]]},"692":{"position":[[0,13]]},"706":{"position":[[0,13]]},"714":{"position":[[0,13]]},"741":{"position":[[0,13]]},"791":{"position":[[0,13]]},"809":{"position":[[0,13]]},"881":{"position":[[0,13]]},"894":{"position":[[0,13]]},"957":{"position":[[0,13]]},"998":{"position":[[0,13]]},"1006":{"position":[[0,13]]},"1014":{"position":[[0,13]]},"1027":{"position":[[0,13]]},"1077":{"position":[[0,13]]},"1091":{"position":[[0,13]]},"1099":{"position":[[0,13]]},"1122":{"position":[[0,13]]},"1164":{"position":[[0,13]]},"1202":{"position":[[0,13]]},"1225":{"position":[[0,13]]},"1239":{"position":[[0,13]]},"1249":{"position":[[0,13]]},"1288":{"position":[[0,13]]},"1321":{"position":[[0,13]]},"1339":{"position":[[0,13]]}}}],["inter",{"_index":94,"t":{"459":{"position":[[96,5]]}}}],["introduct",{"_index":10,"t":{"10":{"position":[[0,12]]},"427":{"position":[[0,12]]},"494":{"position":[[0,12]]}}}],["keyword",{"_index":126,"t":{"583":{"position":[[6,8]]},"873":{"position":[[4,7]]},"1440":{"position":[[4,7]]}}}],["libecalc",{"_index":6,"t":{"8":{"position":[[32,8]]}}}],["librari",{"_index":7,"t":{"8":{"position":[[41,7]]},"48":{"position":[[34,7]]}}}],["look",{"_index":115,"t":{"482":{"position":[[233,4]]}}}],["lot",{"_index":154,"t":{"1741":{"position":[[53,3]]}}}],["main",{"_index":51,"t":{"190":{"position":[[52,4]]},"257":{"position":[[52,4]]}}}],["markdown",{"_index":178,"t":{"1909":{"position":[[25,8],[66,8]]}}}],["migrat",{"_index":18,"t":{"52":{"position":[[11,9]]},"66":{"position":[[13,9]]},"85":{"position":[[9,9]]},"94":{"position":[[13,9]]},"96":{"position":[[13,9]]},"98":{"position":[[13,9]]},"101":{"position":[[13,9]]},"103":{"position":[[15,9]]},"108":{"position":[[15,9]]},"113":{"position":[[15,9]]},"118":{"position":[[15,9]]},"125":{"position":[[13,9]]}}}],["model",{"_index":36,"t":{"136":{"position":[[6,9]]},"190":{"position":[[10,5]]},"239":{"position":[[32,5]]},"247":{"position":[[10,9]]},"257":{"position":[[10,5]]},"283":{"position":[[5,9]]},"303":{"position":[[19,5]]},"316":{"position":[[8,6]]},"352":{"position":[[17,6]]},"354":{"position":[[24,5]]},"360":{"position":[[31,5]]},"366":{"position":[[76,5]]},"388":{"position":[[12,5]]},"409":{"position":[[14,6]]},"417":{"position":[[20,6]]},"423":{"position":[[11,9]]},"459":{"position":[[47,5],[58,5]]},"476":{"position":[[34,5],[43,9]]},"480":{"position":[[8,5],[72,5],[100,5]]},"482":{"position":[[40,5]]},"512":{"position":[[18,5]]},"536":{"position":[[8,9]]},"562":{"position":[[5,9]]},"564":{"position":[[6,9]]},"566":{"position":[[11,9]]},"587":{"position":[[6,5]]},"603":{"position":[[0,6]]},"611":{"position":[[6,5]]},"653":{"position":[[0,6]]},"722":{"position":[[0,6]]},"747":{"position":[[0,6]]},"828":{"position":[[0,6]]},"1069":{"position":[[0,6]]},"1114":{"position":[[0,6]]},"1130":{"position":[[0,6]]},"1138":{"position":[[0,6]]},"1146":{"position":[[0,6]]},"1194":{"position":[[0,6]]},"1217":{"position":[[0,6]]},"1264":{"position":[[0,6]]},"1305":{"position":[[0,6]]},"1313":{"position":[[0,6]]},"1404":{"position":[[0,6]]}}}],["more",{"_index":54,"t":{"190":{"position":[[82,4]]},"257":{"position":[[82,4]]},"476":{"position":[[60,4]]},"482":{"position":[[26,4]]}}}],["mount",{"_index":98,"t":{"476":{"position":[[90,7]]}}}],["multipl",{"_index":105,"t":{"482":{"position":[[92,8]]}}}],["name",{"_index":134,"t":{"783":{"position":[[36,4]]}}}],["need",{"_index":84,"t":{"388":{"position":[[94,5]]}}}],["new",{"_index":140,"t":{"873":{"position":[[0,3]]},"1416":{"position":[[0,3]]},"1440":{"position":[[0,3]]},"1448":{"position":[[0,3]]},"1741":{"position":[[32,3],[65,3]]},"1763":{"position":[[0,3]]},"1768":{"position":[[0,3]]},"1773":{"position":[[0,3]]},"1779":{"position":[[0,3]]},"1788":{"position":[[0,3]]},"1842":{"position":[[0,3]]},"1849":{"position":[[0,3]]},"1856":{"position":[[0,3]]},"1863":{"position":[[0,3]]},"1870":{"position":[[0,3]]}}}],["nice",{"_index":155,"t":{"1741":{"position":[[60,4]]}}}],["oil",{"_index":44,"t":{"142":{"position":[[85,3]]},"166":{"position":[[85,3]]}}}],["oilprod",{"_index":45,"t":{"142":{"position":[[89,9]]},"166":{"position":[[89,9]]}}}],["on",{"_index":40,"t":{"142":{"position":[[33,3]]},"166":{"position":[[33,3]]},"476":{"position":[[53,3]]}}}],["outgo",{"_index":108,"t":{"482":{"position":[[116,8]]}}}],["outlin",{"_index":86,"t":{"425":{"position":[[13,8]]}}}],["output",{"_index":34,"t":{"130":{"position":[[0,6]]}}}],["plu",{"_index":179,"t":{"1909":{"position":[[41,4]]}}}],["pre",{"_index":66,"t":{"286":{"position":[[39,3]]}}}],["pressur",{"_index":96,"t":{"459":{"position":[[108,9]]},"482":{"position":[[146,8]]},"494":{"position":[[28,8]]}}}],["project",{"_index":172,"t":{"1885":{"position":[[56,8]]}}}],["pump",{"_index":64,"t":{"283":{"position":[[0,4]]},"286":{"position":[[17,5]]},"370":{"position":[[6,5]]},"562":{"position":[[0,4]]}}}],["python",{"_index":14,"t":{"48":{"position":[[27,6]]}}}],["rate",{"_index":69,"t":{"286":{"position":[[64,6]]}}}],["refer",{"_index":5,"t":{"8":{"position":[[14,9]]}}}],["releas",{"_index":152,"t":{"1741":{"position":[[36,7]]}}}],["replac",{"_index":138,"t":{"844":{"position":[[27,9]]}}}],["requir",{"_index":175,"t":{"1907":{"position":[[16,8]]}}}],["respons",{"_index":185,"t":{"1915":{"position":[[48,11]]}}}],["same",{"_index":101,"t":{"480":{"position":[[52,4]]}}}],["sampl",{"_index":67,"t":{"286":{"position":[[43,7]]},"303":{"position":[[0,7]]}}}],["section",{"_index":85,"t":{"425":{"position":[[5,7]]}}}],["see",{"_index":163,"t":{"1818":{"position":[[77,3]]},"1827":{"position":[[77,3]]}}}],["select",{"_index":117,"t":{"512":{"position":[[0,9]]}}}],["seri",{"_index":120,"t":{"526":{"position":[[5,6]]}}}],["set",{"_index":59,"t":{"216":{"position":[[48,4]]},"390":{"position":[[16,4]]}}}],["setup",{"_index":61,"t":{"239":{"position":[[16,5]]}}}],["shaft",{"_index":100,"t":{"476":{"position":[[110,6]]}}}],["similar",{"_index":49,"t":{"190":{"position":[[21,7]]},"257":{"position":[[21,7]]}}}],["simpl",{"_index":50,"t":{"190":{"position":[[32,6]]},"257":{"position":[[32,6]]}}}],["simplifi",{"_index":91,"t":{"459":{"position":[[4,10]]}}}],["singl",{"_index":97,"t":{"476":{"position":[[4,6],[65,6]]}}}],["site",{"_index":164,"t":{"1875":{"position":[[5,4]]}}}],["smaller",{"_index":158,"t":{"1753":{"position":[[17,7]]},"1818":{"position":[[17,7]]},"1827":{"position":[[17,7]]}}}],["speed",{"_index":93,"t":{"459":{"position":[[24,5]]},"476":{"position":[[11,5],[72,5]]},"480":{"position":[[57,6]]},"494":{"position":[[22,5]]}}}],["stage",{"_index":95,"t":{"459":{"position":[[102,5]]},"1069":{"position":[[16,7]]}}}],["standard",{"_index":177,"t":{"1909":{"position":[[16,8]]}}}],["start",{"_index":1,"t":{"1":{"position":[[8,7]]},"18":{"position":[[8,7]]},"48":{"position":[[8,7]]},"50":{"position":[[8,7]]},"65":{"position":[[8,7]]},"1280":{"position":[[0,5]]}}}],["stream",{"_index":109,"t":{"482":{"position":[[125,7]]}}}],["syntax",{"_index":74,"t":{"322":{"position":[[21,6]]},"1909":{"position":[[34,6]]}}}],["synthet",{"_index":58,"t":{"216":{"position":[[33,9]]}}}],["system",{"_index":183,"t":{"1915":{"position":[[27,6]]}}}],["tabular",{"_index":71,"t":{"316":{"position":[[0,7]]},"409":{"position":[[6,7]]}}}],["theori",{"_index":124,"t":{"560":{"position":[[5,6]]},"562":{"position":[[15,6]]},"566":{"position":[[21,6]]}}}],["time",{"_index":119,"t":{"526":{"position":[[0,4]]}}}],["timeseri",{"_index":142,"t":{"918":{"position":[[0,10]]},"1061":{"position":[[0,10]]},"1081":{"position":[[0,10]]},"1329":{"position":[[0,10]]}}}],["track",{"_index":186,"t":{"1915":{"position":[[64,8]]}}}],["train",{"_index":88,"t":{"425":{"position":[[45,5]]},"459":{"position":[[41,5],[80,5]]},"476":{"position":[[28,5]]},"480":{"position":[[37,5]]},"482":{"position":[[70,6],[221,5]]}}}],["turbin",{"_index":122,"t":{"536":{"position":[[0,7]]}}}],["type",{"_index":76,"t":{"346":{"position":[[25,5]]},"388":{"position":[[24,4]]},"425":{"position":[[51,5]]},"482":{"position":[[16,4]]}}}],["upgrad",{"_index":159,"t":{"1753":{"position":[[25,7]]},"1818":{"position":[[25,7]]},"1827":{"position":[[25,7]]}}}],["us",{"_index":53,"t":{"190":{"position":[[75,3]]},"241":{"position":[[16,3]]},"257":{"position":[[75,3]]},"331":{"position":[[16,3]]},"346":{"position":[[16,3]]},"352":{"position":[[0,5]]},"370":{"position":[[0,5]]},"390":{"position":[[0,5]]},"409":{"position":[[0,5]]},"417":{"position":[[16,3]]},"1875":{"position":[[71,5]]},"1909":{"position":[[11,4]]}}}],["usabl",{"_index":157,"t":{"1741":{"position":[[89,10]]}}}],["usag",{"_index":38,"t":{"138":{"position":[[18,5]]},"140":{"position":[[18,5]]},"286":{"position":[[7,5]]},"354":{"position":[[18,5]]},"360":{"position":[[25,5]]},"366":{"position":[[70,5]]},"388":{"position":[[18,5],[56,5]]}}}],["v7",{"_index":20,"t":{"85":{"position":[[0,2]]}}}],["v8",{"_index":16,"t":{"52":{"position":[[0,2]]},"85":{"position":[[6,2]]},"1741":{"position":[[7,2]]}}}],["v8.0",{"_index":160,"t":{"1753":{"position":[[38,5]]}}}],["v8.1",{"_index":17,"t":{"52":{"position":[[6,4]]},"66":{"position":[[0,4]]},"1753":{"position":[[7,4]]},"1818":{"position":[[38,5]]}}}],["v8.12",{"_index":26,"t":{"103":{"position":[[0,5]]}}}],["v8.13",{"_index":27,"t":{"103":{"position":[[9,5]]},"108":{"position":[[0,5]]},"1416":{"position":[[46,6]]},"1440":{"position":[[23,6]]}}}],["v8.14",{"_index":28,"t":{"108":{"position":[[9,5]]}}}],["v8.15",{"_index":29,"t":{"113":{"position":[[0,5]]}}}],["v8.16",{"_index":30,"t":{"113":{"position":[[9,5]]}}}],["v8.2",{"_index":19,"t":{"66":{"position":[[8,4]]},"94":{"position":[[0,4]]},"1818":{"position":[[7,4]]},"1827":{"position":[[38,5]]}}}],["v8.22",{"_index":31,"t":{"118":{"position":[[0,5]]}}}],["v8.23",{"_index":32,"t":{"118":{"position":[[9,5]]}}}],["v8.3",{"_index":21,"t":{"94":{"position":[[8,4]]},"96":{"position":[[0,4]]},"1827":{"position":[[7,4]]}}}],["v8.4",{"_index":22,"t":{"96":{"position":[[8,4]]}}}],["v8.5",{"_index":23,"t":{"98":{"position":[[0,4]]}}}],["v8.6",{"_index":24,"t":{"98":{"position":[[8,4]]},"101":{"position":[[0,4]]}}}],["v8.7",{"_index":25,"t":{"101":{"position":[[8,4]]},"125":{"position":[[0,4]]},"783":{"position":[[22,4]]}}}],["v8.8",{"_index":33,"t":{"125":{"position":[[8,4]]},"820":{"position":[[22,4]]},"836":{"position":[[22,4]]},"844":{"position":[[22,4]]},"873":{"position":[[23,5]]}}}],["variabl",{"_index":92,"t":{"459":{"position":[[15,8]]},"548":{"position":[[0,9]]},"910":{"position":[[0,9]]},"1412":{"position":[[0,9]]}}}],["variable_speed_compressor_train_multiple_streams_and_pressur",{"_index":79,"t":{"366":{"position":[[0,62]]}}}],["variou",{"_index":87,"t":{"425":{"position":[[26,7]]}}}],["vc",{"_index":184,"t":{"1915":{"position":[[34,5]]}}}],["venting_emitt",{"_index":135,"t":{"783":{"position":[[44,18]]},"1416":{"position":[[18,16]]}}}],["veri",{"_index":48,"t":{"190":{"position":[[16,4]]},"257":{"position":[[16,4]]}}}],["version",{"_index":182,"t":{"1915":{"position":[[11,7]]}}}],["want",{"_index":170,"t":{"1885":{"position":[[30,4]]}}}],["welcom",{"_index":168,"t":{"1885":{"position":[[0,8]]}}}],["workflow",{"_index":125,"t":{"568":{"position":[[8,8]]}}}],["yaml",{"_index":15,"t":{"50":{"position":[[21,4]]},"322":{"position":[[0,4]]}}}]],"pipeline":["stemmer"]}},{"documents":[],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[],"invertedIndex":[],"pipeline":["stemmer"]}},{"documents":[{"i":2,"t":"info Currently the only officially supported method is the eCalc CLI using eCalc YAML models. There are three options to run eCalc models: eCalc CLI eCalc Python Library","s":"API Reference","u":"/ecalc/docs/about/getting_started/","h":"","p":1},{"i":5,"t":"Choose the eCalc CLI option if you: Don't know much about programming Have simple requirements Can define the eCalc models statically","s":"eCalc CLI","u":"/ecalc/docs/about/getting_started/","h":"#ecalc-cli","p":1},{"i":7,"t":"Choose the Python Library option if you: Are a developer or advanced user, and want to build eCalc models and get results programmatically Use Python, and you need to use (parts of) eCalc as a dependency Need access to \"inner core functionality\" of eCalc note Python Library is not yet officially available and not recommended to use due to upcoming breaking changes very soon","s":"Python Library","u":"/ecalc/docs/about/getting_started/","h":"#python-library","p":1},{"i":9,"t":"Generated API reference for the libecalc library can be found here.","s":"API Reference","u":"/ecalc/docs/about/getting_started/api/","h":"","p":8},{"i":11,"t":"The eCalc™ technology is being developed by Equinor within the Technology, Digital and Innovation (TDI) business area.","s":"Introduction to eCalc™","u":"/ecalc/docs/about/","h":"","p":10},{"i":13,"t":"eCalc™ is a software tool for calculation of energy demand and greenhouse gas emissions from oil and gas production and processing. It enables the cross-disciplinary collaboration required to achieve high-quality and transparent energy and GHG emission prognosis and decision support. eCalc™ performs energy and emission calculations by integrating data, knowledge and future plans from different disciplines. This could be production and injection profiles from the reservoir engineer, characteristics of energy consuming equipment units such as gas turbines, compressors and pumps from the facility engineer, and emission factors for different fuels from the sustainability engineer. The main idea is using physical or data-driven models to relate production rates and pressures to the required processing energy and resulting emissions. Integrated bookkeeping for all emission sources is offered. eCalc™ uses a bottom-up approach to give high-quality installation and portfolio level forecasts at the same time as detailed insights about the energy drivers and processing capacities for the individual installation.","s":"What is eCalc™?","u":"/ecalc/docs/about/","h":"#what-is-ecalc","p":10},{"i":15,"t":"By using eCalc™ you will be able to forecast your energy consumption and emissions with consistency and transparency. You will also be enabled to study the effect on energy demand and emissions of your investment opportunities as well as studying emission reduction measures.","s":"Why should I use eCalc™?","u":"/ecalc/docs/about/","h":"#why-should-i-use-ecalc","p":10},{"i":17,"t":"To use eCalc™ you need to create a model setup of your asset. This is described in the Modelling section. Once the model is ready, you can run the eCalc™ calculator. Different user interfaces for the calculator are offered. These are described in detail in the Getting started section.","s":"How to use eCalc™?","u":"/ecalc/docs/about/","h":"#how-to-use-ecalc","p":10},{"i":19,"t":"info It is currently recommended to use the CLI instead of the Python library directly due to upcoming breaking changes in the Python library The current recommended way to use eCalc is through the CLI (Command Line Interpreter). This is a part of the eCalc Python library, and should be accessible from the command line as ecalc. See all commands and options in the CLI reference","s":"eCalc CLI","u":"/ecalc/docs/about/getting_started/cli/","h":"","p":18},{"i":21,"t":"Use show command to inspect results​ First run ecalc (here shown with default output folder) $ ecalc run /somelocation/myfield.yaml --output-folder output Enter the output folder $ cd output Show results for a single component $ ecalc show results --name waterinj --output-format json or as csv $ ecalc show results --name waterinj --output-format csv or write the full csv result to a file (this will give the same output as ecalc run with the csv option) $ ecalc show results --output-format csv --file results.csv Output Monthly CSV data​ $ ecalc run -f MONTH /somelocation/myfield.yml Specify different output folder​ $ ecalc run -o /somedirectory/foo/bar/ /somelocation/myfield.yml Specify a different naming prefix to outputs​ $ ecalc run -n myfield_myproject /somelocation/myfield.yml Show stack trace for debugging​ $ ecalc run --log DEBUG /somelocation/myfield.yml","s":"Example Usage","u":"/ecalc/docs/about/getting_started/cli/","h":"#example-usage","p":18},{"i":23,"t":"Args: log_level: Log level of the CLI logger, defaults to INFO log_folder: Path to location of log files version: Option to show libecalc version. Returns: Usage: $ ecalc [OPTIONS] COMMAND [ARGS]... Options: --log [CRITICAL|FATAL|ERROR|WARNING|INFO|DEBUG|NOTSET]: Set the loglevel. [default: INFO] --log-folder PATH: Store log files in a folder --version: Show current eCalc™ version. --install-completion: Install completion for the current shell. --show-completion: Show completion for the current shell, to copy it or customize the installation. --help: Show this message and exit. Commands: run selftest: Test that eCalc has been successfully... show: Command to show information in the model...","s":"ecalc","u":"/ecalc/docs/about/getting_started/cli/cli_reference","h":"","p":22},{"i":25,"t":"Usage: $ ecalc run [OPTIONS] MODEL_FILE Arguments: MODEL_FILE: The Model YAML-file specifying time series inputs, facility inputs and the relationship between energy consumers. [required] Options: -f, --output-frequency, --outputfrequency [NONE|YEAR|MONTH|DAY]: Frequency of output. Options are DAY, MONTH, YEAR. If not specified, it will give time steps equal to the union of all input given with INFLUENCE_TIME_VECTOR set to True. Down-sampling the result may lead to loss of data, and rates such as MW may not add up to cumulative values [default: NONE] -c, --csv: Toggle output of csv data. [default: True] --json: Toggle output of json output. -o, --output-folder, --outputfolder PATH: Outputfolder. Defaults to output/ relative to the yml setup file -n, --name-prefix, --nameprefix TEXT: Name prefix for output data. Defaults to name of setup file. --ltp-export: In addition to standard output, a specific Long Term Prognosis (LTP) file will be provided for simple export of LTP relevant data (Tabular Separated Values). --stp-export: In addition to standard output, a specific Short Term Prognosis (STP) file will be provided for simple export of STP relevant data (Tabular Separated Values). --flow-diagram: Output the input model formatted to be displayed in a custom flow diagram format in JSON --detailed-output, --detailedoutput: Output detailed output. When False you will get basic results such as energy usage, power, time vector. --date-format-option [0|1|2]: Date format option. 0: \"YYYY-MM-DD HH:MM:SS\" (Accepted variant of ISO8601), 1: \"YYYYMMDD HH:MM:SS\" (ISO8601), 2: \"DD.MM.YYYY HH:MM:SS\". Default 0 (ISO 8601) [default: 0] --help: Show this message and exit.","s":"ecalc run","u":"/ecalc/docs/about/getting_started/cli/cli_reference","h":"#ecalc-run","p":22},{"i":27,"t":"Test that eCalc has been successfully installed Usage: $ ecalc selftest [OPTIONS] Options: --help: Show this message and exit.","s":"ecalc selftest","u":"/ecalc/docs/about/getting_started/cli/cli_reference","h":"#ecalc-selftest","p":22},{"i":29,"t":"Command to show information in the model or results. Usage: $ ecalc show [OPTIONS] COMMAND [ARGS]... Options: --help: Show this message and exit. Commands: results: Show results. yaml: Show yaml model.","s":"ecalc show","u":"/ecalc/docs/about/getting_started/cli/cli_reference","h":"#ecalc-show","p":22},{"i":31,"t":"Show results. You need to run eCalc™ before this will be available. Usage: $ ecalc show results [OPTIONS] Options: -n, --name TEXT: Filter the results to only show the component with this name --output-format [csv|json]: Show the data in this format. [default: json] --file PATH: Write the data to a file with the specified name. --output-folder PATH: Output folder. Defaults to current working directory --detailed-output: Output detailed output. When False you will get basic energy usage and emissions results --date-format-option [0|1|2]: Date format option. 0: \"YYYY-MM-DD HH:MM:SS\" (Accepted variant of ISO8601), 1: \"YYYYMMDD HH:MM:SS\" (ISO8601), 2: \"DD.MM.YYYY HH:MM:SS\". Default 0 (ISO 8601) [default: 0] -f, --output-frequency [NONE|YEAR|MONTH|DAY]: Frequency of output. Options are DAY, MONTH, YEAR. If not specified, it will give time steps equal to the union of all input given with INFLUENCE_TIME_VECTOR set to True. Down-sampling the result may lead to loss of data, and rates such as MW may not add up to cumulative values [default: NONE] --help: Show this message and exit.","s":"ecalc show results","u":"/ecalc/docs/about/getting_started/cli/cli_reference","h":"#ecalc-show-results","p":22},{"i":33,"t":"Show yaml model. This will show the yaml after processing !include. Usage: $ ecalc show yaml [OPTIONS] MODEL_FILE Arguments: MODEL_FILE: YAML file specifying time series inputs, facility inputs and the relationship between energy consumers. [required] Options: --file PATH: Write the data to a file with the specified name. --help: Show this message and exit.","s":"ecalc show yaml","u":"/ecalc/docs/about/getting_started/cli/cli_reference","h":"#ecalc-show-yaml","p":22},{"i":35,"t":"While running eCalc as a Unix command-line tool, you may come across seemingly incomprehensible error messages. This page tries to explain some common error messages and proposes how to fix them.","s":"FAQ / Troubleshooting","u":"/ecalc/docs/about/getting_started/cli/faq","h":"","p":34},{"i":37,"t":"In YAML, the indentation is very important and specifies the level in the hierarchy for the input. If you have the wrong indentation somewhere, you may get both YAML read errors and/or eCalc setup errors.","s":"Indentation errors","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#indentation-errors","p":34},{"i":39,"t":"The following error messages are common when you have formatting issues in your YAML file: mapping values are not allowed here while scanning a simple key in \"\", line , column could not find expected ':', line , column while parsing a block mapping in , line , column expected , but found ''","s":"Error messages due to YAML read problems","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#error-messages-due-to-yaml-read-problems","p":34},{"i":41,"t":"The configuration expects a sub-hierarchy of data. After reading YAML, this data sub-hierarchy would be of object type dictionary (dict) and in some cases contain lists or other objects. If invalid data is input, the error message would indicate that the type is wrong because it is not a 'dict'/'list' or other type None should be instance of 'dict' None should be instance of 'list'","s":"Error messages due to invalid eCalc configuration","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#error-messages-due-to-invalid-ecalc-configuration","p":34},{"i":43,"t":"Check your YAML setup file for correct indentation and correct format of values for each eCalc key.","s":"Proposed solution","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#proposed-solution","p":34},{"i":45,"t":"eCalc uses ruamel.yaml to read the YAML setup files. Some (text) files have an encoding not supported and will thus result in an error message. One example of this is an unrecognized \"BOM\" character in \"UTF-8 Unicode\". Error message while scanning a simple key in \"\", line , column 1 could not find expected ':', line , column 1","s":"Special characters in Unicode","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#special-characters-in-unicode","p":34},{"i":47,"t":"Check the encoding of your setupfile (and inputfiles): $ file .yml If the output of this is not \"ASCII text\", convert your file to \"US-ASCII\" using iconv. Example when .yml is of type \"UTF-8\" $ iconv -f UTF-8 -t US-ASCII//TRANSLIT -o .yml .yml Now try to run again using the new file .yml.","s":"Proposed solution","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#proposed-solution-1","p":34},{"i":49,"t":"warning It is currently not recommended to use the Python library due to upcoming breaking changes. If you choose to use the Python library programmatically when creating eCalc models, there is a greater flexibility in dynamically changing the eCalc models. See all commands and options in the API reference","s":"Python Library","u":"/ecalc/docs/about/getting_started/library/","h":"","p":48},{"i":51,"t":"We have chosen the way to model eCalc models is in the YAML format. For a simple introduction to YAML, please see here The eCalc YAML model can either be run directly with the eCalc CLI or loaded using the Python library For getting started setting up your first eCalc YAML model, please see Setup an eCalc Model, look at some example YAMLs here and refer to the vocabulary that we use here.","s":"YAML","u":"/ecalc/docs/about/getting_started/yaml/","h":"","p":50},{"i":53,"t":"In this migration guide you will find: YAML changes","s":"v8 to v8.1","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"","p":52},{"i":56,"t":"This doc guides you through migrating an existing eCalc™ model from version v8 to v8.1. We try to make this as easy as possible, and provide a step-by-step migration guide.","s":"Migration overview","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#migration-overview","p":52},{"i":58,"t":"RATE_INTERPOLATION_TYPE is renamed to INTERPOLATION_TYPE New time series type: DEFAULT with default RIGHT interpolation RESERVOIR type is removed Previously, it looked like this: TIME_SERIES: - NAME: Link text note You may want to escape special html characters using \\, and replace the great than symbol with <, otherwise Docusaurus will confuse it with html code.","s":"Markdown summary","u":"/ecalc/docs/contribute/documentation-guide/markdown","h":"","p":1909},{"i":1916,"t":"Git is the version control system (VCS) that is responsible for tracking all changes done to the code base. Git is a distributed version control system that tracks changes in any set of computer files, and allows for collaborative development of source code and documentation. We use Git as a service through GitHub. See GitHub Docs for more information about GitHub and how to get started. info If you do not want to work with files locally, GitHub lets you complete many Git-related actions directly in the browser, including: Creating a repository Forking a repository Managing files","s":"Git","u":"/ecalc/docs/contribute/guides/git","h":"","p":1915},{"i":1918,"t":"Go to git-scm.com to download the appropriate git client unless it is already installed on your system. To verify that git is installed, you can run: git --version See GitHub Docs - Set up Git for detailed instructions.","s":"Setting up Git","u":"/ecalc/docs/contribute/guides/git","h":"#setting-up-git","p":1915},{"i":1920,"t":"Git is a powerful tool that can be used in many ways. We recommend the following resources: Introduction to git - GitHub - About git How to get out of git trouble Oh shit, Git!?! Below we will describe the most commonly used commands and scenarios when working with git. info In the following sections we use the syntax <some text> where you should fill in your own values, such as: <change type>: conventional commits change types such as feat, fix, docs, test, chore, refactor, etc. <issue number>: the GitHub Issue Number that you are solving. This may be omitted if you are fixing something tiny. <description>: a short summary of the code changes, e.g., fix: array parsing issue when multiple spaces were contained in string.","s":"Using Git","u":"/ecalc/docs/contribute/guides/git","h":"#using-git","p":1915},{"i":1922,"t":"Navigate to the location where you want to store the code, and clone the repository: git clone git@github.com:equinor/ecalc.git This will create a local copy of a project that already exists remotely. The copy will be stored in a sub-folder, with the same name as the repository, ecalc/.","s":"Cloning a git repository","u":"/ecalc/docs/contribute/guides/git","h":"#cloning-a-git-repository","p":1915},{"i":1924,"t":"git config --global user.name \"My name\" git config --global user.email example@email.com This is what will show in the git log when you make changes.","s":"Tell Git who you are","u":"/ecalc/docs/contribute/guides/git","h":"#tell-git-who-you-are","p":1915},{"i":1926,"t":"In order to create a new local branch and switch to it: git checkout -b /- for new versions of git you may also use the more intuitive. git switch -c /-","s":"Create your own branch","u":"/ecalc/docs/contribute/guides/git","h":"#create-your-own-branch","p":1915},{"i":1928,"t":"git checkout ","s":"Switch between existing branches","u":"/ecalc/docs/contribute/guides/git","h":"#switch-between-existing-branches","p":1915},{"i":1930,"t":"git pull This will update the local branch you are currently in, with changes done in GitHub. git push --set-upstream origin /-","s":"Fetch changes from GitHub","u":"/ecalc/docs/contribute/guides/git","h":"#fetch-changes-from-github","p":1915},{"i":1932,"t":"git push This will update the remove repository on GitHub. If it is the first time for a new branch you will also have to tell git that you are creating a new remote branch by using the command:","s":"Send your changes to GitHub","u":"/ecalc/docs/contribute/guides/git","h":"#send-your-changes-to-github","p":1915},{"i":1934,"t":"List the files you have changed and those you still need to add or commit: git status","s":"Check status of changes","u":"/ecalc/docs/contribute/guides/git","h":"#check-status-of-changes","p":1915},{"i":1936,"t":"Add new or changed files git add or adding everything in and below your working directory git add .","s":"Add files","u":"/ecalc/docs/contribute/guides/git","h":"#add-files","p":1915},{"i":1938,"t":"Commit any files you've added with git add, and also commit any files you've changed since then: git commit -m \": : /- Add the changed files git add Commit your changes using the conventional commits formatting for the commit messages. git commit -m \": \" If your changes are in conflict with changes done by other, then you need to rebase and solve the change conflicts. This also ensures your code is running on the latest available code. git fetch git rebase origin/main Push changes to GitHub git push --set-upstream origin /- You can now Create a Pull Request","s":"Pull Requests","u":"/ecalc/docs/contribute/guides/git","h":"#pull-requests","p":1915},{"i":1945,"t":"For external developers, you will contribute to the project through forking. Here's a quick guide: Create your own fork of the repository Clone the project to your machine git clone git@github.com:equinor/ecalc.git To keep track of the original repository add another remote named upstream git remote add upstream git@github.com:equinor/template-fastapi-react.git Create a branch locally with a succinct but descriptive name and prefixed with change type. git checkout -b /- Make the changes in the created branch. Add and run tests for your changes if needed (we only take pull requests with passing tests). Add the changed files git add Commit your changes using the conventional commits formatting for the commit messages. git commit -m \": \" Before you send the pull request, be sure to rebase onto the upstream source. This ensures your code is running on the latest available code. git fetch upstream git rebase upstream/main Push to your fork. git push origin feature/my-new-feature Submit a [Pull Request from a fork](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests creating-a-pull-request-from-a-fork). Please provide us with some explanation of why you made the changes you made. For new features make sure to explain a standard use case to us. That's it... thank you for your contribution! After your pull request is merged, you can safely delete your branch.","s":"Fork the repository","u":"/ecalc/docs/contribute/guides/git","h":"#fork-the-repository","p":1915}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/2",[0,5.422,1,4.253,2,7.456,3,3.182,4,4.294,5,3.61,6,6.172,7,1.637,8,2.976,9,1.471,10,5.527,11,2.991,12,3.387,13,5.325,14,5.909]],["t/5",[5,3.196,6,5.307,9,1.265,11,3.267,15,6.824,16,6.454,17,6.454,18,6.626,19,8.848,20,5.11,21,2.759,22,2.397,23,7.679]],["t/7",[2,6.128,5,3.019,7,2.076,9,0.952,11,2.458,13,6.751,14,6.597,15,5.135,24,4.376,25,4.376,26,3.675,27,4.542,28,4.986,29,2.422,30,6.128,31,3.899,32,3.715,33,3.26,34,5.517,35,6.658,36,4.986,37,2.965,38,3.16,39,3.431,40,4.048,41,4.456,42,5.517,43,4.376,44,2.343,45,5.309,46,6.128]],["t/9",[14,7.108,47,3.671,48,8.458,49,3.208,50,7.77,51,6.1,52,4.05]],["t/11",[5,2.671,24,5.972,53,11.052,54,5.38,55,7.53,56,4.816,57,8.363,58,9.088,59,9.088,60,9.088,61,5.972]],["t/13",[3,1.572,5,2.251,7,1.26,9,0.572,21,1.944,29,1.456,62,4.003,63,3.087,64,2.576,65,3.445,66,3.087,67,4.003,68,3.093,69,3.461,70,2.164,71,3.813,72,4.274,73,2.998,74,3.087,75,4.003,76,3.474,77,3.317,78,4.548,79,5.739,80,3.684,81,4.003,82,3.474,83,4.003,84,2.679,85,6.236,86,2.164,87,4.003,88,2.434,89,3.684,90,2.705,91,4.003,92,2.186,93,2.92,94,2.37,95,6.347,96,3.474,97,1.285,98,2.434,99,1.285,100,2.186,101,1.684,102,0.827,103,1.442,104,1.845,105,1.872,106,1.274,107,4.003,108,2.37,109,3.684,110,4.003,111,2.233,112,2.401,113,0.875,114,1.285,115,4.003,116,2.37,117,3.474,118,4.003,119,2.063,120,4.003,121,2.027,122,1.921,123,4.003,124,2.505,125,3.684,126,1.993,127,1.371,128,1.684,129,4.003,130,4.003,131,2.285,132,2.586]],["t/15",[5,2.381,7,1.637,65,3.572,66,6.249,69,3.943,73,6.068,80,7.456,125,7.456,133,4.138,134,4.996,135,10.291,136,6.46,137,8.102,138,8.102,139,6.068,140,8.102,141,8.102]],["t/17",[5,2.913,7,1.544,9,1.572,12,3.195,26,4.218,31,3.294,64,4.095,90,3.315,117,6.632,128,3.214,142,4.361,143,3.975,144,6.093,145,5.794,146,5.203,147,6.632,148,7.642,149,7.033,150,5.441,151,4.264]],["t/19",[0,4.5,1,4.781,5,3.035,6,6.193,7,1.84,11,2.483,13,6.786,14,7.531,32,3.752,34,5.572,40,5.537,41,4.5,42,5.572,43,4.419,44,2.367,49,2.214,152,3.673,153,3.599,154,3.883,155,3.635,156,6.563,157,5.537,158,5.362,159,2.627]],["t/21",[5,3.282,7,0.786,11,1.435,12,4.286,29,3.567,52,1.616,86,1.349,90,2.644,121,1.968,126,1.935,156,2.471,160,5.197,161,3.887,162,1.743,163,2.768,164,1.479,165,5.532,166,5.806,167,2.012,168,3.887,169,2.835,170,3.374,171,1.578,172,2.245,173,1.182,174,6.095,175,3.44,176,2.193,177,4.309,178,2.601,179,2.433,180,1.681,181,3.887,182,3.374,183,2.998,184,3.099,185,8.511,186,1.784,187,3.221,188,3.887,189,2.998,190,2.511,191,3.887,192,3.887,193,3.887,194,5.289,195,2.707]],["t/23",[0,4.9,1,4.577,5,2.563,6,2.966,9,0.707,11,3.219,12,2.067,50,3.943,122,2.686,124,3.095,156,5.542,160,5.91,164,2.786,166,4.995,167,0.912,180,2.02,195,7.166,196,5.838,197,4.551,198,4.291,199,4.551,200,4.335,201,4.097,202,5.211,203,3.195,204,1.862,205,4.945,206,1.431,207,4.551,208,3.703,209,7.433,210,6.738,211,3.943,212,3.444,213,3.049,214,2.312,215,3.25,216,3.943,217,2.701,218,4.097,219,2.856]],["t/25",[5,0.763,8,0.954,9,0.627,11,2.76,12,1.086,20,2.533,21,0.81,29,1.595,65,1.522,82,3.806,86,2.595,97,0.833,100,2.395,104,1.197,113,0.567,119,1.338,121,1.315,127,1.949,128,1.845,143,2.281,160,1.376,164,3.086,165,5.122,166,1.771,167,0.479,173,0.895,175,3.062,176,3.212,177,1.927,180,2.062,183,2.003,184,2.07,186,1.284,187,2.152,189,3.382,190,1.678,200,1.537,204,1.652,206,0.752,212,1.808,213,1.601,214,1.214,215,1.706,220,3.497,221,1.771,222,1.205,223,1.951,224,1.738,225,1.232,226,2.833,227,2.39,228,2.152,229,1.557,230,1.601,231,1.465,232,1.39,233,2.003,234,1.105,235,1.678,236,2.503,237,1.678,238,1.499,239,1.65,240,1.771,241,1.079,242,1.02,243,2.07,244,1.858,245,1.376,246,2.253,247,4.036,248,4.036,249,1.894,250,2.253,251,2.39,252,1.894,253,3.078,254,2.921,255,2.371,256,2.596,257,2.705,258,2.07,259,3.284,260,2.667,261,2.745,262,2.564,263,2.281,264,4.717,265,2.07,266,2.503,267,3.199,268,2.152,269,2.39,270,1.601,271,2.152,272,0.885,273,1.678,274,2.147,275,2.152,276,2.312,277,1.894,278,1.894,279,1.894,280,4.539,281,1.771,282,2.152,283,3.634,284,1.205,285,2.07,286,1.214,287,2.152,288,2.152,289,2.152]],["t/27",[5,3.196,11,4.014,122,2.726,160,4.69,167,1.631,204,3.333,213,5.457,214,4.137,215,5.815,216,7.055,217,4.833,218,7.332]],["t/29",[5,2.272,8,3.668,9,1.427,11,3.686,29,4.024,156,7.031,160,6.416,167,1.425,196,6.163,204,2.911,213,4.767,214,3.614,215,5.08,219,4.464]],["t/31",[1,1.888,5,1.684,11,3.286,12,1.504,29,3.238,31,1.55,39,1.853,65,1.248,69,1.254,86,2.48,100,1.964,113,0.786,119,1.853,121,1.821,127,1.231,128,2.41,160,4.717,164,3.387,165,4.94,166,3.91,167,0.663,172,2.077,173,1.124,175,3.729,176,2.029,178,2.407,180,1.581,183,2.774,184,2.867,186,1.678,190,2.323,200,3.393,204,2.159,206,1.041,213,2.218,214,1.682,215,2.363,223,1.049,226,3.702,228,2.98,229,2.157,230,2.218,231,2.029,232,1.925,233,2.774,234,1.531,235,2.323,236,2.052,237,2.323,238,2.077,239,2.286,240,2.453,241,1.495,242,1.413,243,2.867,244,1.174,245,1.906,252,2.623,270,2.218,271,2.98,274,2.806,275,2.98,276,2.901,277,2.623,278,2.623,279,2.623,280,5.696,281,2.453,282,2.98,283,4.749,284,1.669,285,2.867,286,1.682,287,2.98,288,2.98,289,2.98,290,1.72,291,2.561,292,3.31,293,2.129,294,2.98]],["t/33",[5,1.919,8,4.016,9,0.933,11,3.295,21,2.036,65,2.266,72,3.643,86,2.266,97,2.095,104,3.009,127,2.236,160,5.794,167,1.204,173,1.027,178,4.369,180,2.805,186,2.613,200,3.865,204,2.459,213,4.026,214,3.053,215,4.291,220,7.116,221,4.454,222,3.031,223,2.603,224,4.369,225,3.099,295,2.967]],["t/35",[5,2.44,12,3.471,63,6.403,156,5.277,157,5.048,214,4.887,296,8.302,297,6.217,298,8.302,299,8.302,300,4.685,301,6.879,302,5.782,303,6.619,304,4.98,305,8.302,306,3.08]],["t/37",[5,2.44,8,3.839,45,6.619,124,5.196,143,4.318,186,2.431,223,2.422,300,4.685,307,8.332,308,4.794,309,7.205,310,5.277,311,8.302,312,4.443,313,5.782,314,6.619]],["t/39",[8,2.375,20,3.734,51,4.047,52,2.687,151,3.608,157,6.152,167,1.192,175,2.959,180,1.784,190,6.537,214,3.024,244,2.11,300,2.899,304,3.878,315,3.002,316,3.988,317,7.38,318,3.116,319,5.951,320,4.25,321,5.951,322,5.168,323,4.802,324,3.78,325,6.049,326,5.358,327,9.312,328,5.951,329,4.411]],["t/41",[8,2.573,86,3.659,214,3.276,223,2.043,245,4.961,300,3.14,309,8.123,310,4.453,313,4.878,325,4.779,330,5.246,331,6.518,332,7.01,333,1.604,334,7.005,335,8.614,336,3.35,337,5.109,338,3.985,339,4.525,340,5.246,341,7.005,342,9.36]],["t/43",[5,2.671,8,3.338,143,4.726,175,4.159,180,2.507,244,2.966,307,7.245,320,5.972,343,6.081,344,6.235,345,3.55]],["t/45",[3,2.59,5,1.938,7,1.332,8,2.422,20,3.807,29,2.399,143,3.429,157,5.463,167,1.215,180,2.478,190,5.804,214,4.201,252,4.809,284,4.171,300,4.028,313,4.591,319,6.068,320,4.333,321,6.068,322,4.589,324,3.854,325,4.498,346,6.593,347,6.068,348,3.807,349,2.434,350,2.496,351,6.593,352,6.593,353,4.937,354,6.068,355,5.722,356,6.593]],["t/47",[7,1.828,12,2.784,165,3.184,167,1.668,180,2.834,183,5.135,187,5.517,252,4.856,302,4.637,328,6.128,333,1.013,343,4.456,347,6.128,350,2.521,354,8.324,355,7.85,357,6.658,358,9.045,359,9.045,360,4.986,361,9.045,362,6.128,363,6.658,364,9.045,365,6.658,366,6.658,367,2.835,368,5.778,369,2.985]],["t/49",[1,3.88,5,2.85,7,1.96,9,1.386,11,2.728,13,6.373,14,7.073,15,5.699,30,6.801,40,4.493,41,4.945,42,6.123,43,4.857,44,3.413,48,6.413,49,2.432,142,4.217,156,4.697,159,2.887,370,4.697,371,6.801,372,6.413,373,6.413]],["t/51",[5,3.319,6,3.77,7,1.757,8,4.148,9,1.614,12,2.628,13,4.13,14,4.584,20,3.629,49,2.069,52,4.143,119,3.239,143,3.269,150,4.475,151,3.507,153,3.364,154,3.629,159,3.397,162,2.817,175,2.876,206,1.819,350,2.379,374,5.208,375,5.784,376,5.818,377,2.856,378,3.821,379,6.285]],["t/53",[8,3.687,44,3.532,324,5.867,380,5.6,381,5.22]],["t/56",[5,2.44,9,1.187,155,4.488,202,4.488,231,5.896,260,5.048,302,5.782,380,5.831,381,5.435,382,4.632,383,5.664,384,6.879,385,6.403,386,3.697,387,6.619,388,4.001]],["t/58",[7,1.035,8,1.149,11,1.155,17,4.741,44,1.101,49,2.473,64,1.292,78,2.281,86,2.256,94,5.268,127,3.047,155,1.691,159,2,164,2.859,167,0.944,173,1.542,180,2.072,200,3.031,206,0.905,213,1.929,222,4.131,230,1.929,235,3.308,239,1.988,284,1.452,286,2.394,297,2.343,300,1.402,308,3.754,310,1.988,314,2.494,333,1.627,344,1.765,349,1.89,367,2.18,369,2.914,378,1.902,380,1.745,386,2.28,388,1.508,389,4.712,390,2.056,391,3.493,392,5.232,393,4.937,394,1.442,395,2.993,396,3.539,397,3.128,398,5.989,399,3.254,400,4.082,401,1.431,402,3.426,403,3.128,404,3.128,405,2.494,406,3.128,407,2.021,408,2.227,409,3.949,410,1.876,411,2.592,412,2.343,413,2.592,414,2.592,415,2.178,416,2.281,417,3.128,418,3.128,419,1.902,420,3.128,421,3.128,422,2.715,423,3.128]],["t/60",[4,4.152,5,2.302,7,1.096,26,4.324,31,2.338,44,1.909,90,3.398,113,2.508,114,1.74,127,1.857,180,1.496,206,2.915,222,2.518,223,1.582,234,2.309,263,2.821,273,6.901,302,3.777,308,3.132,333,1.399,367,3.335,393,6.619,395,3.17,416,3.956,424,9.196,425,4.183,426,3.862,427,3.447,428,4.062,429,4.324,430,4.991,431,4.062,432,3.17,433,5.423,434,4.494,435,2.574,436,3.06]],["t/62",[5,2.148,17,5.331,26,4.034,86,3.342,127,3.297,160,3.874,222,3.393,231,4.124,239,4.646,276,2.968,300,4.316,322,3.734,336,3.496,345,2.856,367,4.099,393,4.804,415,5.09,437,4.892,438,5.205,439,6.343,440,7.022,441,4.804,442,5.331,443,6.727,444,7.31]],["t/64",[7,0.9,9,0.637,21,1.389,47,4.281,54,2.637,65,2.35,71,2.217,97,1.429,101,4.529,154,2.572,155,2.408,159,1.74,167,0.821,173,1.065,206,1.959,241,1.851,253,3.659,254,1.944,260,4.116,263,2.316,272,1.518,308,2.572,322,2.275,333,0.678,350,1.686,369,3.671,377,4.708,407,2.877,411,2.255,445,4.472,446,9.345,447,4.454,448,3.435,449,4.303,450,7.054,451,3.248,452,2.458,453,3.69,454,2.163,455,2.318,456,4.099,457,2.408,458,4.099,459,4.454,460,1.435,461,1.957,462,4.454,463,3.248,464,3.551,465,3.69]],["t/67",[9,1.435,29,3.651,44,4.127,431,7.516]],["t/70",[97,3.083,253,5.193,369,4.306,454,4.667,455,3.289,466,4.782,467,7.194,468,7.007]],["t/73",[7,1.461,26,3.991,49,2.38,90,3.137,97,2.32,152,3.949,162,3.241,206,3.298,245,3.833,276,3.882,284,3.357,324,4.227,340,5.415,367,3.079,386,3.22,469,3.117,470,5.083,471,4.459,472,4.596,473,2.92,474,5.577,475,4.459,476,7.231,477,5.765,478,4.671]],["t/75",[5,1.699,7,0.735,8,1.335,9,0.826,29,2.103,31,1.567,39,1.873,44,2.034,51,3.618,56,3.064,64,2.388,84,3.868,86,1.262,113,2.184,127,3.064,134,2.242,160,1.927,162,1.63,165,4.279,177,1.597,180,1.985,182,3.155,206,1.052,223,1.06,225,1.725,226,4.648,233,2.804,235,2.348,236,2.075,243,4.608,273,4.648,274,4.892,345,2.258,367,2.461,386,2.574,388,1.752,395,3.379,411,1.841,426,2.588,437,2.433,466,1.81,479,5.011,480,2.532,481,4.155,482,3.635,483,3.155,484,3.943,485,4.06,486,2.804,487,3.635,488,2.588,489,4.458,490,3.943,491,3.635,492,1.688,493,5.389,494,3.635,495,2.028,496,4.329,497,3.155,498,2.48,499,2.898,500,2.804,501,2.898,502,2.051,503,2.532,504,3.155,505,2.588,506,3.635,507,3.635,508,1.908,509,2.651]],["t/77",[47,2.324,68,3.466,97,3.168,101,4.151,102,1.274,106,1.963,111,3.442,122,1.901,165,2.951,167,1.137,180,2.368,242,2.423,253,5.336,261,3.861,291,4.393,306,2.289,312,3.302,322,5.45,367,2.627,369,2.766,394,2.844,432,3.607,449,3.922,452,4.738,455,2.939,466,4.273,467,4.62,468,4.5,510,3.071,511,4.62,512,4.5,513,2.491,514,5.112]],["t/79",[69,3.854,122,3.405,306,4.1,312,4.864,445,6.036,510,4.523,511,6.805,515,5.38]],["t/81",[29,3.382,44,2.44,69,4.074,134,4.275,167,2.217,173,1.462,175,3.173,176,3.911,180,2.564,317,5.057,338,4.464,367,3.957,395,4.053,448,5.347,452,3.827,510,5.22,516,6.933,517,5.347]],["t/84",[5,1.734,9,0.843,12,2.466,26,4.591,29,2.146,54,3.492,64,2.437,65,2.048,97,3.358,134,5.13,206,1.708,234,2.511,236,3.367,300,2.644,340,4.418,367,2.511,395,3.448,415,4.108,452,3.256,477,6.632,478,5.374,518,6.089,519,4.659,520,7.655,521,3.948,522,4.703,523,5.119,524,4.418,525,5.899,526,5.429,527,4.108,528,5.429,529,5.429,530,5.899,531,5.429,532,5.429,533,5.119]],["t/86",[6,5.846,8,3.58,44,4.056,324,5.697,380,5.438,381,5.069]],["t/89",[5,2.44,9,1.187,155,4.488,202,4.488,231,5.896,260,5.048,302,5.782,380,5.831,381,5.435,382,4.632,383,5.664,384,6.879,386,3.697,387,6.619,388,4.001,534,8.302]],["t/91",[3,0.424,5,0.317,6,0.648,7,1.777,9,0.669,21,0.625,22,0.951,29,0.73,31,0.465,44,0.706,47,1.058,54,0.639,68,0.81,69,1.224,97,2.051,99,1.934,101,0.454,102,0.725,103,1.265,106,1.789,113,0.767,119,1.034,122,1.732,126,0.537,128,0.843,134,1.237,152,1.918,158,0.861,159,1.372,164,0.411,167,2.04,172,2.99,173,1.813,177,0.881,179,0.676,180,0.553,186,0.587,206,1.196,212,1.956,219,0.623,223,1.024,253,3.636,257,1.237,261,1.255,263,1.043,272,1.409,274,0.529,276,0.814,284,0.501,286,0.505,295,1.878,310,0.686,315,0.501,316,0.666,318,0.967,323,1.667,333,0.856,336,1.343,345,0.422,350,0.409,353,1.502,367,1.759,372,0.937,377,1.276,382,0.602,386,1.251,388,1.992,394,0.498,395,0.631,401,1.285,412,0.808,432,3.287,440,2.048,445,3.841,452,0.596,455,3.118,457,1.084,460,1.132,461,1.816,470,0.512,480,1.397,498,0.736,513,1.668,526,0.993,535,2.239,536,1.145,537,1.304,538,1.846,539,2.35,540,1.74,541,2.585,542,1.145,543,0.993,544,0.572,545,0.501,546,2.91,547,1.585,548,2.436,549,1.342,550,2.006,551,1.342,552,0.861,553,1.846,554,2.006,555,2.006,556,1.08,557,1.08,558,1.08,559,1.08,560,1.08,561,1.08,562,0.993,563,0.722,564,0.556,565,0.865,566,2.478,567,1.342,568,0.894,569,0.787,570,0.676,571,1.981,572,0.752,573,0.993,574,0.656,575,0.686,576,0.666,577,1.08,578,0.993,579,0.656,580,1.08,581,0.833,582,0.993,583,0.722,584,0.424,585,1.08,586,0.639,587,1.734,588,1.357,589,1.336,590,0.952,591,1.08,592,0.787,593,1.08,594,0.779,595,0.982,596,0.787,597,0.775,598,0.974,599,1.08,600,0.676,601,0.666,602,1.662,603,1.846,604,1.599,605,1.219,606,0.967,607,1.662,608,2.006,609,2.006,610,0.833,611,0.722,612,1.534,613,1.397,614,0.998,615,1.368,616,0.752,617,2.437,618,1.08,619,2.135,620,3.512,621,1.08,622,1.08,623,1.08,624,1.08,625,0.736,626,0.808,627,0.752,628,0.993,629,0.722,630,0.993,631,0.567]],["t/93",[3,1.262,5,2.963,6,3.59,7,1.542,8,1.589,9,0.856,11,1.597,12,4.06,17,1.322,20,1.855,21,0.565,25,1.191,26,2.388,29,1.574,31,2.58,41,1.213,44,2.106,47,0.683,49,0.597,54,1.073,64,0.749,108,1.073,116,1.073,124,3.275,128,1.819,152,1.755,153,1.719,154,1.047,156,2.75,159,2.044,160,0.961,162,1.44,163,1.291,164,1.991,165,1.536,166,2.192,167,1.407,173,0.285,176,2.441,179,2.011,180,1.826,186,1.753,194,2.788,195,6.897,196,1.445,200,1.902,202,0.98,206,0.93,208,1.358,213,1.118,214,0.848,221,5.733,234,0.772,242,0.712,244,0.592,253,4.126,254,3.128,255,1.737,259,1.358,284,0.841,286,0.848,290,1.536,295,0.824,297,2.406,300,0.813,322,0.926,336,0.867,344,2.952,367,3.05,369,0.813,370,2.042,378,1.102,382,2.414,383,1.237,384,1.502,386,2.33,388,1.548,394,0.835,395,1.878,399,3.326,410,1.087,412,1.358,413,3.584,422,1.573,432,3.499,438,1.291,448,1.398,454,1.561,461,0.797,498,1.237,513,1.297,521,1.213,522,1.445,533,1.573,581,1.398,601,1.118,611,1.213,616,1.262,626,1.358,631,1.686,632,3.981,633,2.662,634,2.843,635,3.013,636,1.813,637,2.649,638,1.237,639,1.813,640,1.813,641,1.573,642,1.573,643,1.445,644,1.102,645,1.398,646,1.656,647,1.813,648,1.813,649,1.191,650,1.502,651,1.502,652,1.813,653,1.813,654,1.001,655,1.573,656,1.813,657,1.813]],["t/95",[9,1.201,31,3.624,44,2.958,56,4.455,97,3.38,127,2.878,281,5.735,333,1.603,336,4.02,349,3.103,432,4.914,460,2.709,466,4.184,579,5.111,658,7.295,659,5.524]],["t/97",[121,3.742,142,4.217,167,1.362,173,1.162,177,4.261,180,2.675,214,3.456,223,2.155,295,4.407,300,3.313,322,5.529,350,2.798,367,3.146,394,3.406,437,4.945,574,4.493,588,2.856,634,4.857,660,6.069,661,6.801,662,6.413,663,6.801,664,5.146]],["t/100",[5,3.002,7,1.618,9,1.144,69,2.791,86,2.779,88,4.868,100,4.372,106,2.548,128,3.367,202,4.328,223,2.335,300,3.589,426,5.7,445,4.372,665,6.383,666,5.089,667,6.633,668,6.947,669,6.633,670,5.839,671,6.383]],["t/102",[8,3.58,44,3.43,173,1.533,180,2.688,223,2.843,549,6.522,564,5.023]],["t/104",[8,3.687,44,3.532,324,5.867,380,5.6,381,5.22]],["t/107",[7,1.05,8,1.908,22,1.671,64,0.948,69,4.153,70,2.808,99,2.988,105,2.429,113,2.451,164,3.266,173,1.781,175,1.05,186,1.806,244,2.478,284,2.864,286,3.25,315,1.833,333,1.724,345,1.542,350,0.869,367,1.681,369,2.329,378,1.396,395,1.342,401,1.807,402,3.476,455,2.783,466,1.143,495,4.535,510,1.143,515,1.359,545,2.411,564,4.423,565,0.707,597,0.887,611,1.536,613,1.598,614,1.143,615,1.566,616,1.598,666,1.459,672,5.081,673,3.985,674,1.833,675,1.992,676,1.77,677,4.142,678,3.789,679,5.855,680,4.384,681,1.719]],["t/109",[8,3.687,44,3.532,324,5.867,380,5.6,381,5.22]],["t/112",[7,1.03,8,1.872,11,3.61,47,1.919,49,2.464,64,2.105,97,1.635,104,2.348,106,2.824,112,3.056,145,4.375,165,2.437,167,0.939,173,1.177,206,1.475,223,2.183,230,3.142,240,3.476,241,2.117,244,2.443,255,2.754,272,2.551,315,2.365,318,2.455,325,3.476,330,3.815,349,1.881,369,3.355,411,2.58,445,2.783,452,2.812,455,2.563,544,2.7,547,3.378,565,1.569,566,3.056,567,3.409,575,3.238,597,1.969,682,6.202,683,4.062,684,2.21,685,5.773,686,3.929,687,4.221,688,5.773,689,4.689,690,4.689,691,4.221,692,3.056,693,2.418,694,2.924]],["t/114",[8,3.687,44,3.532,324,5.867,380,5.6,381,5.22]],["t/117",[7,1.416,8,3.438,32,3.908,99,3.383,113,2.046,145,4.095,175,4.824,180,1.932,244,3.055,286,4.377,333,1.424,369,4.725,378,4.259,395,4.095,411,3.547,545,3.252,567,4.688,614,3.487,679,5.402,680,5.405,695,5.246,696,4.878]],["t/119",[8,3.687,44,3.532,324,5.867,380,5.6,381,5.22]],["t/122",[5,2.44,9,1.187,155,4.488,202,4.488,231,5.896,260,5.048,302,5.782,380,5.831,381,5.435,382,4.632,383,5.664,386,3.697,387,6.619,388,4.001,697,8.302,698,8.302]],["t/124",[7,1.123,9,1.333,21,1.733,49,1.829,152,3.036,173,1.254,318,2.679,333,0.846,432,3.249,510,2.767,597,4.831,699,6.606,700,3.392,701,5.26,702,4.147,703,3.005,704,3.068,705,3.87,706,9.36,707,3.792,708,3.792,709,3.792,710,3.792,711,3.87,712,3.87,713,3.87,714,3.87,715,3.87]],["t/126",[8,3.687,44,3.532,324,5.867,380,5.6,381,5.22]],["t/129",[3,1.672,8,2.402,11,1.571,69,4.062,99,3.094,113,2.39,164,2.488,173,1.801,175,1.948,186,1.246,244,2.598,295,1.934,315,1.976,333,1.467,350,1.611,367,1.812,369,4.005,378,2.588,395,2.488,401,1.948,402,4.376,455,3.301,515,2.52,545,3.035,564,5.245,565,2.014,611,2.848,613,2.964,614,2.119,615,2.904,666,2.705,679,5.043,680,3.776,681,3.188,716,1.883,717,4.224,718,2.797,719,2.848,720,3.104,721,3.283]],["t/131",[9,1.232,47,3.247,128,3.626,165,4.123,176,4.864,177,3.789,180,2.952,219,4.979,345,3.368,470,4.092,722,7.482,723,6.913,724,4.443,725,6.457]],["t/133",[1,2.323,5,1.3,26,2.442,32,2.469,52,1.839,56,2.345,57,9.028,88,2.69,165,4.942,186,1.295,223,2.379,234,2.868,276,2.735,306,1.641,313,3.081,318,2.132,367,1.884,401,2.025,436,2.496,442,4.913,450,3.412,470,2.1,471,2.728,513,3.681,605,2.69,606,4.728,655,7.911,726,4.424,727,8.39,728,4.424,729,7.911,730,4.072,731,3.15,732,3.666,733,3.84,734,3.081,735,4.424,736,4.072,737,3.84,738,4.072,739,4.424,740,7.077,741,4.424,742,4.424,743,4.424,744,3.84,745,3.412,746,3.018,747,6.735,748,8.155,749,6.735,750,3.081,751,6.735]],["t/135",[5,1.714,9,1.036,26,2.028,37,1.636,52,1.527,54,2.176,56,1.948,79,3.382,97,3.072,102,1.204,103,1.324,121,1.861,122,2.541,124,6.71,128,1.546,132,2.374,144,2.93,163,4.151,165,2.788,172,3.367,176,3.289,177,1.615,180,1.608,219,2.122,234,2.482,237,2.374,267,2.68,276,1.492,284,1.706,329,2.507,339,6.185,345,1.436,349,1.357,350,1.391,401,4.592,411,1.861,415,2.559,438,2.617,442,4.252,470,2.767,471,3.595,513,1.484,537,1.16,606,1.771,627,2.559,674,1.706,722,3.189,724,3.005,725,5.427,752,1.604,753,2.752,754,7.738,755,2.559,756,3.675,757,3.382,758,3.649,759,2.68,760,3.675,761,4.648,762,3.189,763,2.559,764,3.675,765,2.617,766,3.675,767,3.189,768,2.014,769,2.007,770,3.045,771,2.93]],["t/137",[5,2.574,7,1.007,8,2.705,44,3.404,114,1.599,143,3.829,145,2.912,146,2.615,164,1.896,167,2.16,173,1.158,178,3.334,180,2.668,195,5.127,202,3.98,223,1.453,242,1.957,261,3.118,274,4.288,285,5.87,295,3.346,333,0.758,396,2.347,497,4.323,582,4.585,584,1.957,716,2.203,745,3.842,772,3.469,773,3.731,774,5.513,775,3.972,776,5.513,777,4.982,778,4.982,779,4.982,780,7.362,781,4.323,782,2.522,783,2.347,784,4.982,785,4.982,786,4.323,787,3.842,788,4.982]],["t/139",[9,1.693,13,5.261,14,5.839,20,4.623,25,5.261,39,4.126,52,3.327,324,4.68,339,6.598,350,3.866,478,6.598,684,3.473,789,7.368,790,8.006,791,7.368,792,6.174]],["t/141",[9,1.232,13,5.666,14,6.288,20,4.979,25,5.666,39,4.443,52,3.583,324,5.04,350,4.606,684,3.74,791,7.934,792,6.649,793,6.874]],["t/143",[29,1.268,33,3.919,37,1.552,47,2.105,68,3.776,70,1.884,71,3.482,84,2.332,92,4.785,97,3.38,98,2.119,102,1.154,103,2.521,106,3.127,113,2.302,114,1.793,122,2.466,133,3.573,172,2.012,206,1.618,241,1.448,254,2.44,272,2.728,290,1.666,315,2.594,333,0.53,338,1.484,349,1.286,350,1.319,377,2.54,411,1.764,435,1.654,461,2.456,492,3.248,510,1.735,544,1.847,612,1.903,644,2.119,702,4.864,782,1.764,783,1.641,794,2.61,795,2.481,796,2.29,797,2.61,798,3.024,799,2.215,800,1.923,801,2.765,802,2.687,803,2.778,804,2.332,805,1.764,806,3.267,807,2.09,808,2.332,809,2.542,810,2.427,811,5.143,812,2.215,813,2.934,814,2.181,815,2.481]],["t/145",[8,3.215,9,1.251,104,2.924,106,2.019,108,5.181,122,3.086,127,2.172,134,3.912,143,3.3,172,3.664,180,1.75,222,2.945,223,2.922,345,2.478,367,2.701,378,3.857,396,4.122,565,1.954,584,3.437,637,3.212,646,3.27,718,4.169,799,4.033,801,3.162,816,4.47,817,5.257,818,6.847]],["t/147",[51,4.478,86,2.483,94,4.235,121,3.622,127,2.45,128,3.009,159,2.795,164,2.722,173,1.493,177,3.144,180,2.618,222,3.321,263,3.721,322,3.654,333,1.089,336,3.421,396,4.471,637,3.622,724,3.687,801,2.996,819,5.218,820,6.923,821,4.881,822,5.928,823,4.881,824,5.928,825,4.702]],["t/149",[7,1.622,9,1.286,22,1.789,38,2.046,52,1.792,65,1.496,72,2.405,86,2.292,98,2.621,99,1.383,101,1.813,102,1.364,103,2.892,111,2.405,113,0.942,128,1.813,159,2.58,171,1.751,173,1.525,175,1.973,177,1.894,180,2.675,186,1.262,223,2.341,237,2.785,238,4.634,262,2.52,323,2.046,333,1.476,457,3.57,513,1.741,527,3.002,537,2.084,547,1.946,565,1.328,584,3.152,586,2.552,587,2.128,588,1.666,589,1.64,590,2.046,637,2.183,684,1.87,693,2.046,724,3.403,771,3.437,826,3.572,827,2.52,828,1.576,829,3.144,830,3.437,831,2.74,832,3.325,833,2.885,834,4.197,835,3.325,836,3.325,837,3.325,838,3.325,839,2.833,840,2.885]],["t/151",[9,1.023,68,3.833,69,3.31,105,4.438,106,3.39,167,1.319,173,1.493,349,2.641,350,2.708,510,5.648,637,3.622,692,4.291,816,4.848,841,5.296,842,7.865,843,5.928,844,5.704,845,6.475,846,5.517]],["t/153",[7,1.143,9,1.01,12,1.48,24,2.326,40,2.152,49,1.165,52,1.471,68,2.285,70,3.059,71,1.762,90,1.536,113,1.545,152,1.933,167,2.211,173,0.89,177,1.555,180,0.976,186,2.07,244,3.544,315,1.643,318,1.706,322,1.808,350,2.142,386,1.576,388,1.706,396,1.667,474,2.73,485,1.997,519,1.576,527,2.465,536,2.02,551,2.369,571,3.988,637,1.792,646,1.824,772,2.465,800,1.954,801,2.787,805,1.792,812,2.25,814,2.215,815,2.52,825,2.326,847,2.822,848,1.997,849,2.465,850,2.933,851,2.582,852,2.369,853,3.719,854,3.441,855,2.822,856,2.73,857,2.73,858,2.465,859,6.872,860,4.364,861,4.029,862,2.73,863,2.415,864,2.73,865,2.73,866,2.465,867,2.73,868,2.933,869,2.73,870,2.933,871,2.52,872,3.258,873,3.597,874,3.258,875,2.822,876,2.822,877,2.73]],["t/155",[49,2.031,97,3.168,106,3.57,122,3.455,164,3.266,173,1.552,186,2.89,254,3.748,331,4.297,461,2.711,544,3.27,547,3.874,548,3.209,646,4.424,684,2.676,801,2.709,813,3.239,816,3.151,818,5.018,823,4.209,841,3.442,878,4.758,879,6.111,880,4.789,881,4.209]],["t/157",[22,1.256,37,2.065,47,3.963,68,2.818,71,3.474,92,5.469,97,2.24,101,1.951,102,1.733,103,3.791,106,1.476,143,2.412,150,3.302,173,1.655,206,2.899,272,2.379,348,2.678,349,1.712,377,3.814,435,3.983,455,3.429,457,3.773,460,3.009,512,3.383,547,2.093,584,1.822,644,4.244,693,2.201,702,4.856,724,2.39,804,3.104,808,4.671,818,5.458,882,3.048]],["t/159",[68,4.092,97,2.539,102,2.31,106,2.518,173,1.594,254,4.425,455,3.471,460,3.266,461,3.477,548,4.115,612,6.108,637,4.006,818,5.925]],["t/161",[5,1.662,7,1.378,9,0.975,12,1.245,21,0.519,22,1.532,31,2.707,33,1.978,37,1.799,44,0.586,47,0.627,65,1.707,68,2.754,71,2.814,90,1.292,92,4.208,94,0.986,97,0.534,100,0.909,102,1.409,103,2.627,106,0.948,111,0.929,113,2.009,114,1.296,116,0.986,128,0.7,133,0.85,153,1.594,167,1.548,173,1.073,186,1.655,204,0.627,206,0.482,223,0.486,224,1.114,225,1.917,236,0.95,238,0.961,241,1.238,244,0.543,254,0.727,272,0.567,274,0.815,290,0.796,315,0.773,333,0.956,348,0.961,367,0.709,377,2.569,407,1.075,411,0.843,435,1.917,452,0.919,455,2.151,460,2.198,461,1.309,475,1.027,485,0.939,490,1.136,492,1.382,518,0.919,519,0.741,521,1.114,522,1.327,606,2.37,612,2.207,619,1.012,637,3.18,644,3.437,646,2.534,694,0.65,700,0.606,702,4.007,753,1.247,782,1.508,783,1.403,796,1.094,801,2.432,802,2.297,804,1.993,805,0.843,807,2.423,808,3.29,813,2.968,815,1.185,818,0.973,827,1.741,829,1.214,832,1.284,835,1.284,837,1.284,839,1.094,853,1.094,857,1.284,859,1.993,860,3.792,861,3.501,862,2.297,863,1.136,864,1.284,865,1.284,866,1.159,867,2.297,869,1.284,871,1.185,873,1.058,877,1.284,883,1.284,884,2.806,885,1.379,886,2.028,887,1.864,888,2.028,889,1.327,890,4.234,891,0.95,892,1.379,893,1.379,894,0.919,895,1.379,896,2.23,897,2.467,898,1.379,899,1.379,900,3.586,901,1.445,902,4.525,903,2.741,904,1.445,905,1.185,906,1.284,907,1.379,908,1.445,909,1.247,910,1.214]],["t/163",[5,1.693,7,1.164,31,2.483,47,1.363,68,2.637,69,0.724,70,1.122,71,1.033,92,1.976,97,0.666,99,0.666,101,0.873,102,1.481,103,2.354,105,0.971,106,1.152,111,1.158,113,1.568,122,1.115,164,0.79,167,2.037,173,1.654,180,1.979,206,0.601,241,0.863,244,2.669,254,0.906,262,1.213,323,0.985,333,1.447,377,2.186,396,0.978,435,1.717,455,2.642,457,1.956,460,2.312,461,1.59,510,1.033,519,0.924,547,0.937,548,1.08,571,2.714,584,0.815,586,1.229,587,1.025,588,0.802,589,0.79,590,0.985,606,2.776,612,1.976,619,1.262,637,1.051,644,1.262,693,1.717,694,0.811,702,1.882,801,1.142,802,1.601,804,1.389,805,1.832,807,2.885,808,1.389,812,1.319,814,1.299,816,1.06,820,1.514,825,1.364,827,1.213,831,1.319,832,2.791,833,1.389,834,2.3,835,2.791,836,1.601,837,2.791,838,1.601,839,2.378,840,1.389,841,2.019,842,1.72,845,1.416,846,1.601,851,1.514,852,1.389,853,2.378,854,2.2,855,1.655,856,1.601,857,1.601,858,1.446,859,5.473,860,2.791,861,2.577,862,1.601,863,1.416,864,1.601,865,1.601,866,1.446,867,1.601,868,1.72,869,1.601,870,1.72,871,1.478,877,1.601,880,1.158,881,1.416,884,3.287,885,1.72,886,2.415,887,2.265,888,2.415,892,1.72,893,1.72,894,1.146,895,1.72,896,2.71,907,1.72,910,1.514]],["t/165",[167,0.484,274,1.286,276,1.798,570,1.644,571,6.686,572,1.829,795,1.87,796,1.726,814,2.772,820,1.916,831,1.67,833,1.758,836,2.026,838,2.026,840,1.758,890,1.967,900,1.916,911,4.076,912,4.076,913,4.983,914,2.418,915,2.418,916,2.418,917,2.418,918,2.418,919,2.418,920,2.418,921,2.418,922,2.418,923,2.418,924,2.418,925,2.418,926,2.418,927,2.418,928,2.418,929,2.418,930,2.418,931,2.418,932,2.418,933,2.418,934,2.418,935,2.418,936,1.829,937,2.418,938,2.177,939,2.177,940,2.418,941,2.418,942,2.418,943,2.418,944,2.418,945,2.418,946,2.418,947,2.418,948,2.418,949,2.418,950,2.418,951,2.418,952,2.418,953,2.418,954,2.418,955,2.418,956,2.418,957,2.418,958,2.418,959,2.418,960,2.177,961,5.048,962,4.076,963,8.566,964,2.177,965,4.076,966,3.843,967,2.418,968,5.284,969,2.418,970,2.418,971,2.177,972,2.418,973,2.627,974,6.203,975,2.418,976,2.28,977,2.418,978,4.758,979,2.177,980,2.418,981,2.418,982,6.111,983,2.418,984,3.67,985,4.076,986,2.418,987,3.843,988,2.418,989,5.284,990,4.076,991,2.418,992,2.095,993,2.095,994,5.284,995,7.991,996,2.418,997,2.418,998,2.418,999,2.418,1000,2.418,1001,2.177,1002,2.418,1003,2.418,1004,2.418,1005,2.177,1006,2.418,1007,2.418,1008,1.829,1009,2.418,1010,2.418,1011,2.095,1012,2.177,1013,2.418,1014,2.177,1015,2.095,1016,2.418]],["t/167",[29,1.268,33,3.919,37,1.552,47,2.105,68,3.776,70,1.884,71,3.482,84,2.332,92,4.785,97,3.38,98,2.119,102,1.154,103,2.521,106,3.127,113,2.302,114,1.793,122,2.466,133,3.573,172,2.012,206,1.618,241,1.448,254,2.44,272,2.728,290,1.666,315,2.594,333,0.53,338,1.484,349,1.286,350,1.319,377,2.54,411,1.764,435,1.654,461,2.456,492,3.248,510,1.735,544,1.847,612,1.903,644,2.119,702,4.864,782,1.764,783,1.641,794,2.61,795,2.481,796,2.29,797,2.61,798,3.024,799,2.215,800,1.923,801,2.765,802,2.687,803,2.778,804,2.332,805,1.764,806,3.267,807,2.09,808,2.332,809,2.542,810,2.427,811,5.143,812,2.215,813,2.934,814,2.181,815,2.481]],["t/169",[8,3.215,9,1.251,104,2.924,106,2.019,108,5.181,122,3.086,127,2.172,134,3.912,143,3.3,172,3.664,180,1.75,222,2.945,223,2.922,345,2.478,367,2.701,378,3.857,396,4.122,565,1.954,584,3.437,637,3.212,646,3.27,718,4.169,799,4.033,801,3.162,816,4.47,817,5.257,818,6.847]],["t/171",[51,4.478,86,2.483,94,4.235,121,3.622,127,2.45,128,3.009,159,2.795,164,2.722,173,1.493,177,3.144,180,2.618,222,3.321,263,3.721,322,3.654,333,1.089,336,3.421,396,4.471,637,3.622,724,3.687,801,2.996,819,5.218,820,6.923,821,4.881,822,5.928,823,4.881,824,5.928,825,4.702]],["t/173",[7,1.622,9,1.286,22,1.789,38,2.046,52,1.792,65,1.496,72,2.405,86,2.292,98,2.621,99,1.383,101,1.813,102,1.364,103,2.892,111,2.405,113,0.942,128,1.813,159,2.58,171,1.751,173,1.525,175,1.973,177,1.894,180,2.675,186,1.262,223,2.341,237,2.785,238,4.634,262,2.52,323,2.046,333,1.476,457,3.57,513,1.741,527,3.002,537,2.084,547,1.946,565,1.328,584,3.152,586,2.552,587,2.128,588,1.666,589,1.64,590,2.046,637,2.183,684,1.87,693,2.046,724,3.403,771,3.437,826,3.572,827,2.52,828,1.576,829,3.144,830,3.437,831,2.74,832,3.325,833,2.885,834,4.197,835,3.325,836,3.325,837,3.325,838,3.325,839,2.833,840,2.885]],["t/175",[9,1.023,68,3.833,69,3.31,105,4.438,106,3.39,167,1.319,173,1.493,349,2.641,350,2.708,510,5.648,637,3.622,692,4.291,816,4.848,841,5.296,842,7.865,843,5.928,844,5.704,845,6.475,846,5.517]],["t/177",[7,1.143,9,1.01,12,1.48,24,2.326,40,2.152,49,1.165,52,1.471,68,2.285,70,3.059,71,1.762,90,1.536,113,1.545,152,1.933,167,2.211,173,0.89,177,1.555,180,0.976,186,2.07,244,3.544,315,1.643,318,1.706,322,1.808,350,2.142,386,1.576,388,1.706,396,1.667,474,2.73,485,1.997,519,1.576,527,2.465,536,2.02,551,2.369,571,3.988,637,1.792,646,1.824,772,2.465,800,1.954,801,2.787,805,1.792,812,2.25,814,2.215,815,2.52,825,2.326,847,2.822,848,1.997,849,2.465,850,2.933,851,2.582,852,2.369,853,3.719,854,3.441,855,2.822,856,2.73,857,2.73,858,2.465,859,6.872,860,4.364,861,4.029,862,2.73,863,2.415,864,2.73,865,2.73,866,2.465,867,2.73,868,2.933,869,2.73,870,2.933,871,2.52,872,3.258,873,3.597,874,3.258,875,2.822,876,2.822,877,2.73]],["t/179",[49,2.031,97,3.168,106,3.57,122,3.455,164,3.266,173,1.552,186,2.89,254,3.748,331,4.297,461,2.711,544,3.27,547,3.874,548,3.209,646,4.424,684,2.676,801,2.709,813,3.239,816,3.151,818,5.018,823,4.209,841,3.442,878,4.758,879,6.111,880,4.789,881,4.209]],["t/181",[22,1.256,37,2.065,47,3.963,68,2.818,71,3.474,92,5.469,97,2.24,101,1.951,102,1.733,103,3.791,106,1.476,143,2.412,150,3.302,173,1.655,206,2.899,272,2.379,348,2.678,349,1.712,377,3.814,435,3.983,455,3.429,457,3.773,460,3.009,512,3.383,547,2.093,584,1.822,644,4.244,693,2.201,702,4.856,724,2.39,804,3.104,808,4.671,818,5.458,882,3.048]],["t/183",[68,4.092,97,2.539,102,2.31,106,2.518,173,1.594,254,4.425,455,3.471,460,3.266,461,3.477,548,4.115,612,6.108,637,4.006,818,5.925]],["t/185",[5,1.662,7,1.378,9,0.975,12,1.245,21,0.519,22,1.532,31,2.707,33,1.978,37,1.799,44,0.586,47,0.627,65,1.707,68,2.754,71,2.814,90,1.292,92,4.208,94,0.986,97,0.534,100,0.909,102,1.409,103,2.627,106,0.948,111,0.929,113,2.009,114,1.296,116,0.986,128,0.7,133,0.85,153,1.594,167,1.548,173,1.073,186,1.655,204,0.627,206,0.482,223,0.486,224,1.114,225,1.917,236,0.95,238,0.961,241,1.238,244,0.543,254,0.727,272,0.567,274,0.815,290,0.796,315,0.773,333,0.956,348,0.961,367,0.709,377,2.569,407,1.075,411,0.843,435,1.917,452,0.919,455,2.151,460,2.198,461,1.309,475,1.027,485,0.939,490,1.136,492,1.382,518,0.919,519,0.741,521,1.114,522,1.327,606,2.37,612,2.207,619,1.012,637,3.18,644,3.437,646,2.534,694,0.65,700,0.606,702,4.007,753,1.247,782,1.508,783,1.403,796,1.094,801,2.432,802,2.297,804,1.993,805,0.843,807,2.423,808,3.29,813,2.968,815,1.185,818,0.973,827,1.741,829,1.214,832,1.284,835,1.284,837,1.284,839,1.094,853,1.094,857,1.284,859,1.993,860,3.792,861,3.501,862,2.297,863,1.136,864,1.284,865,1.284,866,1.159,867,2.297,869,1.284,871,1.185,873,1.058,877,1.284,883,1.284,884,2.806,885,1.379,886,2.028,887,1.864,888,2.028,889,1.327,890,4.234,891,0.95,892,1.379,893,1.379,894,0.919,895,1.379,896,2.23,897,2.467,898,1.379,899,1.379,900,3.586,901,1.445,902,4.525,903,2.741,904,1.445,905,1.185,906,1.284,907,1.379,908,1.445,909,1.247,910,1.214]],["t/187",[5,1.693,7,1.164,31,2.483,47,1.363,68,2.637,69,0.724,70,1.122,71,1.033,92,1.976,97,0.666,99,0.666,101,0.873,102,1.481,103,2.354,105,0.971,106,1.152,111,1.158,113,1.568,122,1.115,164,0.79,167,2.037,173,1.654,180,1.979,206,0.601,241,0.863,244,2.669,254,0.906,262,1.213,323,0.985,333,1.447,377,2.186,396,0.978,435,1.717,455,2.642,457,1.956,460,2.312,461,1.59,510,1.033,519,0.924,547,0.937,548,1.08,571,2.714,584,0.815,586,1.229,587,1.025,588,0.802,589,0.79,590,0.985,606,2.776,612,1.976,619,1.262,637,1.051,644,1.262,693,1.717,694,0.811,702,1.882,801,1.142,802,1.601,804,1.389,805,1.832,807,2.885,808,1.389,812,1.319,814,1.299,816,1.06,820,1.514,825,1.364,827,1.213,831,1.319,832,2.791,833,1.389,834,2.3,835,2.791,836,1.601,837,2.791,838,1.601,839,2.378,840,1.389,841,2.019,842,1.72,845,1.416,846,1.601,851,1.514,852,1.389,853,2.378,854,2.2,855,1.655,856,1.601,857,1.601,858,1.446,859,5.473,860,2.791,861,2.577,862,1.601,863,1.416,864,1.601,865,1.601,866,1.446,867,1.601,868,1.72,869,1.601,870,1.72,871,1.478,877,1.601,880,1.158,881,1.416,884,3.287,885,1.72,886,2.415,887,2.265,888,2.415,892,1.72,893,1.72,894,1.146,895,1.72,896,2.71,907,1.72,910,1.514]],["t/189",[167,0.484,274,1.286,276,1.798,570,1.644,571,6.686,572,1.829,795,1.87,796,1.726,814,2.772,820,1.916,831,1.67,833,1.758,836,2.026,838,2.026,840,1.758,861,3.153,890,1.967,900,1.916,911,4.076,912,4.076,913,4.983,914,2.418,915,2.418,916,2.418,917,2.418,918,2.418,919,2.418,920,2.418,921,2.418,922,2.418,923,2.418,924,2.418,925,2.418,926,2.418,927,2.418,928,2.418,929,2.418,930,2.418,931,2.418,932,2.418,933,2.418,934,2.418,935,2.418,936,1.829,937,2.418,938,2.177,939,2.177,940,2.418,941,2.418,942,2.418,943,2.418,944,2.418,945,2.418,946,2.418,947,2.418,948,2.418,949,2.418,950,2.418,951,2.418,952,2.418,953,2.418,954,2.418,955,2.418,956,2.418,957,2.418,958,2.418,959,2.418,960,2.177,961,5.048,962,4.076,963,8.566,964,2.177,965,4.076,967,2.418,968,5.284,969,2.418,970,2.418,971,2.177,972,2.418,974,6.203,975,2.418,976,2.28,977,2.418,978,4.758,979,2.177,980,2.418,981,2.418,982,6.111,983,2.418,984,3.67,985,4.076,986,2.418,987,3.843,988,2.418,989,5.284,990,4.076,991,2.418,992,2.095,993,2.095,994,5.284,995,7.991,996,2.418,997,2.418,998,2.418,999,2.418,1000,2.418,1001,2.177,1002,2.418,1003,2.418,1004,2.418,1005,2.177,1006,2.418,1007,2.418,1008,1.829,1009,2.418,1010,2.418,1011,2.095,1012,2.177,1013,2.418,1014,2.177,1015,2.095,1016,2.418,1017,2.627]],["t/191",[7,0.591,9,0.692,20,1.689,25,1.922,29,1.064,33,3.913,37,2.157,45,2.331,47,2.716,65,1.015,68,3.227,70,1.581,71,4.287,84,1.957,90,1.268,92,3.386,97,3.358,98,1.778,102,1,103,2.234,106,3.036,108,1.731,113,1.882,114,1.554,122,2.653,133,4.082,204,1.101,206,2.087,241,1.215,254,2.707,255,1.581,272,2.724,312,1.565,315,1.357,333,0.445,338,1.245,349,1.079,350,1.834,377,3.277,411,1.48,435,3.422,461,2.725,463,2.133,469,1.26,510,1.455,513,1.181,515,1.731,519,1.302,544,2.567,612,3.938,644,1.778,702,4.48,782,1.48,783,1.377,794,2.19,795,2.082,796,1.922,797,2.19,799,1.859,800,1.614,801,2.719,804,1.957,805,1.48,806,2.831,807,1.754,808,1.957,809,2.133,810,2.036,815,3.449,1018,1.803,1019,5.475,1020,1.859,1021,2.691,1022,2.133]],["t/193",[8,3.153,9,1.525,104,2.844,106,1.963,108,5.081,122,3.041,127,2.113,134,3.805,143,3.209,172,3.563,180,1.702,222,2.864,223,2.879,257,3.805,345,2.41,367,2.627,378,3.751,396,4.043,565,1.901,584,3.371,637,3.124,646,3.18,718,4.055,799,3.922,801,3.116,816,4.384,817,5.112,818,6.788]],["t/195",[51,4.478,86,2.483,94,4.235,121,3.622,127,2.45,128,3.009,159,2.795,164,2.722,173,1.493,177,3.144,180,2.618,222,3.321,263,3.721,322,3.654,333,1.089,336,3.421,396,4.471,637,3.622,724,3.687,801,2.996,819,5.218,820,5.218,821,4.881,822,5.928,823,4.881,824,5.928,825,4.702,1023,5.517]],["t/197",[7,1.565,9,1.302,22,2.098,38,2.533,52,2.218,65,1.853,72,2.978,86,1.853,98,3.245,99,1.713,102,1.102,103,2.79,113,1.166,128,2.245,159,2.085,171,2.167,173,1.433,177,2.345,180,2.514,186,1.563,223,1.557,238,3.082,323,2.533,333,1.387,457,4.186,513,2.155,537,2.444,547,2.409,565,1.644,584,3.579,586,3.16,587,2.635,588,2.063,589,2.031,590,2.533,637,2.702,684,2.315,693,2.533,724,2.751,826,4.422,827,3.12,828,1.951,830,4.255,831,3.393,833,3.572,834,3.393,839,3.508,840,3.572,1024,4.255]],["t/199",[7,1.224,22,1.641,52,2.518,68,3.422,69,3.408,105,4.95,106,2.697,122,2.611,173,1.816,350,2.294,455,2.902,466,3.016,510,4.866,515,5.787,637,3.068,816,4.329,841,4.729,1019,3.851,1025,6.182,1026,4.83,1027,5.02,1028,7.722,1029,6.536,1030,5.02]],["t/201",[9,1.303,21,1.028,22,0.893,25,2.167,52,1.37,65,1.144,68,1.331,86,1.144,99,1.715,101,2.834,102,1.392,113,1.168,128,2.248,146,1.731,159,2.088,167,1.242,173,1.339,180,0.909,186,0.965,204,1.242,241,1.37,276,2.17,323,2.536,333,1.296,350,1.248,435,2.536,508,1.731,537,2.127,587,2.638,588,2.066,589,2.033,594,3.31,595,2.617,597,2.066,598,1.601,600,2.063,637,1.669,654,1.82,684,1.43,700,1.944,703,1.782,704,1.82,724,1.699,768,1.139,812,2.095,891,1.881,1031,2.13,1032,3.512,1033,1.182,1034,4.798,1035,2.033,1036,1.927,1037,1.927,1038,2.167,1039,2.167,1040,2.542,1041,3.249,1042,3.576,1043,2.404,1044,4.261,1045,1.86,1046,2.033,1047,2.095,1048,2.095,1049,2.13,1050,2.095,1051,2.004,1052,2.296,1053,2.296,1054,2.296,1055,2.296,1056,2.296,1057,2.296,1058,2.296,1059,2.296,1060,2.296,1061,2.296,1062,2.063,1063,2.296,1064,2.296,1065,2.296,1066,2.296,1067,2.296,1068,2.296,1069,2.296,1070,2.296,1071,2.296,1072,2.296,1073,2.167,1074,1.801,1075,1.614,1076,1.627,1077,3.198,1078,4.353]],["t/203",[7,1.158,9,1.165,12,1.504,24,2.363,40,2.187,44,1.266,49,1.184,68,1.452,90,1.56,92,1.964,100,3.13,113,1.252,127,1.231,152,1.964,163,4.08,167,1.748,173,0.901,177,1.58,178,2.407,180,0.992,186,1.678,230,2.218,241,1.495,242,1.413,244,3.636,276,2.901,315,1.669,318,1.733,322,1.837,386,1.601,396,1.694,474,2.774,519,1.601,527,2.504,536,2.052,551,3.835,570,3.587,571,5.35,572,4.975,612,1.964,637,1.821,731,2.561,772,2.504,800,1.985,801,2.809,803,2.867,812,2.286,814,2.251,825,2.363,847,2.867,848,3.233,849,2.504,850,2.98,851,2.623,852,2.407,853,4.695,854,2.187,858,2.504,859,2.407,863,2.453,866,2.504,876,2.867,1008,2.504,1020,2.286,1022,2.623,1079,2.774,1080,2.774,1081,5.92,1082,4.42,1083,2.774,1084,4.42,1085,4.749,1086,2.561,1087,4.749,1088,3.121,1089,2.867,1090,2.363]],["t/205",[7,1.425,29,1.711,38,2.232,49,1.548,86,1.632,90,2.04,97,2.716,106,3.491,122,3.475,128,1.978,159,1.837,164,2.684,173,1.479,186,2.478,254,3.079,306,3.14,331,3.275,445,2.569,455,3.449,461,2.067,466,2.341,544,2.493,547,3.82,548,3.668,646,3.635,684,2.04,801,2.226,813,2.469,816,2.402,818,5.497,823,3.208,841,2.624,878,3.627,879,5.022,880,4.722,881,5.773,1019,2.989,1025,3.43,1091,3.627]],["t/207",[22,1.125,37,1.848,47,3.59,68,2.59,71,3.902,92,4.281,97,2.515,101,1.746,102,1.619,103,3.63,106,2.495,122,1.976,143,2.159,150,2.956,171,1.686,173,1.706,206,2.552,254,1.812,272,2.186,306,2.908,348,2.397,349,1.533,377,3.562,435,1.97,455,3.597,457,3.467,460,3.071,461,1.824,469,2.765,547,1.874,548,2.159,584,1.631,612,4.281,644,2.524,693,1.97,702,4.077,724,2.139,804,2.778,808,2.778,818,5.572,841,2.316,880,2.316,881,2.832,882,2.728]],["t/209",[22,1.265,37,2.08,47,3.783,68,2.833,71,4.195,97,2.704,101,1.964,102,1.74,106,2.682,122,2.161,143,2.429,150,3.325,173,1.659,206,2.712,254,3.063,272,2.392,306,3.127,348,2.697,349,1.724,377,3.83,435,2.217,455,3.439,457,3.793,460,2.716,461,2.052,547,2.108,548,2.429,584,1.834,612,4.603,693,2.217,724,2.407,818,4.927,880,2.606,881,3.186,882,3.069,1019,6.956,1025,3.406]],["t/211",[7,0.982,9,0.855,12,1.414,18,1.005,22,1.478,29,0.892,31,1.057,33,1.657,37,1.506,44,0.863,65,1.174,68,2.203,71,2.977,90,1.468,92,2.98,97,0.787,102,1.734,103,2.605,106,1.077,113,1.58,114,0.787,126,1.684,128,1.423,133,1.252,159,0.958,162,1.517,167,0.624,171,0.995,173,1.321,186,0.393,203,0.867,206,0.71,223,0.392,225,0.637,232,0.718,236,0.766,241,1.019,244,0.8,254,1.824,255,0.726,274,1.2,276,3.072,284,0.623,286,0.628,290,1.172,306,1.55,333,0.981,367,0.572,377,3.285,401,0.614,407,1.584,435,1.163,455,2.207,460,2.21,461,1.835,466,2.079,469,2.578,485,1.383,490,0.916,492,1.138,518,0.741,519,1.86,537,1.318,570,1.534,572,1.707,584,0.527,601,3.974,612,2.98,619,1.49,637,0.68,646,1.744,654,0.741,700,0.488,702,2.172,724,1.263,731,1.745,753,1.005,782,0.68,783,0.632,796,0.882,801,2.034,807,4.113,818,0.785,829,1.788,839,3.586,853,1.611,858,0.935,859,0.898,863,1.672,873,1.558,878,1.035,882,1.611,884,1.399,886,3.235,888,3.235,889,1.07,891,0.766,894,1.353,897,1.112,900,0.979,905,2.974,906,1.891,909,1.005,910,1.788,1008,0.935,1018,0.828,1019,3.468,1022,2.467,1024,1.07,1033,1.498,1073,1.611,1079,1.035,1080,1.035,1082,1.035,1083,1.035,1084,1.891,1092,1.112,1093,1.891,1094,1.005,1095,1.235,1096,3.974,1097,2.031,1098,1.611,1099,3.586,1100,1.829,1101,1.112,1102,1.299,1103,1.112,1104,1.399,1105,1.399,1106,2.029,1107,1.891,1108,1.931,1109,1.07,1110,0.979,1111,0.979,1112,1.112,1113,1.112,1114,2.031,1115,1.112,1116,2.031,1117,0.84,1118,1.954,1119,1.07,1120,3.33,1121,2.256,1122,1.112,1123,1.112,1124,0.956,1125,1.235]],["t/213",[9,0.181,47,1.505,68,1.614,69,0.812,71,1.989,92,0.693,97,0.747,99,1.035,101,1.681,102,1.084,103,1.892,105,1.869,106,1.272,113,1.02,122,0.994,164,0.483,167,1.224,171,0.515,173,1.697,180,1.287,206,0.674,241,0.527,244,2.288,254,1.017,276,3.324,284,0.589,286,0.593,306,1.948,323,1.531,333,1.345,377,2.386,396,0.598,455,2.803,457,1.744,460,2.007,461,1.756,469,1.004,510,1.159,515,1.378,519,1.437,537,1.261,547,1.051,548,1.211,570,1.457,571,2.962,572,1.621,584,0.498,586,0.751,587,1.593,588,1.247,589,1.228,590,0.602,594,1.813,595,1.14,597,0.9,598,0.616,600,0.794,601,3.841,612,2.183,619,1.416,637,0.642,693,1.531,700,0.462,702,0.66,703,0.686,704,0.7,768,0.438,801,0.401,807,3.983,812,1.48,814,0.794,816,0.648,825,0.834,831,0.807,833,0.849,834,0.807,839,3.451,840,0.849,841,1.299,851,0.926,852,0.849,853,2.12,854,0.772,858,0.884,859,0.849,863,0.866,866,0.884,880,1.299,881,1.588,884,1.329,886,3.126,888,3.126,894,1.285,910,1.698,1008,1.621,1019,2.965,1022,1.698,1023,0.979,1024,1.856,1025,1.698,1027,1.051,1028,2.915,1029,1.796,1030,1.051,1032,0.834,1034,2.297,1035,0.783,1036,0.742,1037,0.742,1038,0.834,1039,0.834,1040,0.979,1041,1.416,1042,1.558,1043,0.926,1044,1.856,1045,0.716,1046,0.783,1047,0.807,1048,0.807,1049,0.82,1050,0.807,1051,0.772,1052,0.884,1053,0.884,1054,0.884,1055,0.884,1056,0.884,1057,0.884,1058,0.884,1059,0.884,1060,0.884,1061,0.884,1062,0.794,1063,0.884,1064,0.884,1065,0.884,1066,0.884,1067,0.884,1068,0.884,1069,0.884,1070,0.884,1071,0.884,1072,0.884,1073,2.12,1074,0.693,1075,0.621,1076,0.626,1077,1.531,1078,2.084,1079,0.979,1080,0.979,1081,1.051,1082,0.979,1083,0.979,1084,0.979,1085,1.929,1086,0.904,1087,1.051,1092,1.051,1096,3.238,1097,1.051,1098,0.834,1099,2.627,1100,0.686,1101,1.051,1102,1.234,1103,1.051,1104,1.329,1105,1.329,1106,1.935,1107,1.796,1108,0.724,1110,0.926,1111,0.926,1112,1.051,1113,1.051,1114,1.929,1115,1.051,1116,1.929,1117,0.794,1118,1.856,1119,1.012,1120,3.187,1122,1.051,1123,1.051,1125,1.168]],["t/215",[106,1.158,113,1.056,167,1.066,241,0.868,272,0.712,274,1.023,276,3.493,323,1.727,588,1.406,589,1.384,795,1.487,796,1.373,805,1.842,812,5.468,828,1.33,831,1.328,833,1.398,840,1.398,854,3.517,861,3.442,887,2.277,890,1.564,900,1.523,936,1.454,939,1.731,960,1.731,961,1.564,964,1.731,966,4.195,971,1.731,978,1.731,979,4.793,982,1.564,984,1.731,993,4.612,1001,1.731,1005,1.731,1008,3.366,1011,3.854,1012,4.793,1014,5.965,1015,3.854,1023,1.611,1029,1.611,1037,1.221,1040,1.611,1043,1.523,1086,1.487,1106,2.182,1126,3.348,1127,1.922,1128,3.348,1129,3.348,1130,1.922,1131,3.366,1132,4.567,1133,3.348,1134,3.366,1135,1.665,1136,3.348,1137,2.534,1138,1.922,1139,1.922,1140,6.626,1141,1.922,1142,1.611,1143,1.922,1144,1.922,1145,1.922,1146,1.922,1147,2.482,1148,3.157,1149,3.348,1150,1.922,1151,1.665,1152,3.854,1153,1.731,1154,1.922,1155,1.813,1156,1.922,1157,1.922,1158,1.922,1159,1.922,1160,1.922,1161,1.731,1162,1.922,1163,3.348,1164,1.922,1165,1.922,1166,3.348,1167,1.922,1168,1.922,1169,1.922,1170,3.348,1171,1.922,1172,7.917,1173,5.323,1174,1.922,1175,1.922,1176,1.922,1177,1.922,1178,4.449,1179,1.922,1180,5.323,1181,1.922,1182,4.449,1183,1.922,1184,5.323,1185,3.157,1186,1.922,1187,3.348,1188,1.922,1189,3.348,1190,3.348,1191,5.019,1192,7.549,1193,1.922,1194,3.348,1195,1.922,1196,1.922,1197,1.922,1198,1.922,1199,1.922,1200,3.348,1201,1.922,1202,1.922,1203,1.922,1204,1.922,1205,1.922,1206,1.922,1207,1.922,1208,1.922,1209,1.922,1210,1.922,1211,1.922,1212,1.922,1213,3.348,1214,1.922,1215,1.922]],["t/217",[29,1.748,33,3.509,37,2.139,47,2.699,68,3.461,71,2.391,84,3.215,86,1.667,92,3.914,97,3.643,98,2.921,102,0.992,103,2.582,106,2.281,113,1.566,122,1.48,133,3.66,206,2.481,241,3.562,272,3.465,286,3.351,315,2.23,333,0.731,338,2.045,350,1.819,377,4.318,411,2.432,435,3.401,492,3.979,512,3.504,544,2.546,607,3.98,644,2.921,702,3.727,769,2.624,793,3.83,798,4.169,799,3.053,800,2.651,801,2.705,808,3.215,1033,1.723,1216,4.804,1217,4.169]],["t/219",[8,3.487,9,1.523,104,3.297,106,2.277,122,2.924,127,2.45,134,4.412,172,4.131,180,1.973,222,3.321,223,3.309,315,4.406,333,1.089,378,4.35,396,3.37,584,2.81,816,3.654,818,6.902,1218,7.154,1219,6.584]],["t/221",[94,5.308,164,3.412,173,1.41,180,3.024,333,1.365,336,4.288,396,4.224,787,6.915,794,6.715,801,2.83,1220,9.513]],["t/223",[47,3.612,56,3.099,68,2.361,99,1.877,102,1.707,103,3.455,104,2.695,106,1.861,113,1.278,133,2.987,146,4.34,171,2.375,172,3.377,173,1.3,180,2.28,186,2.42,206,2.393,272,1.993,323,2.775,333,1.459,336,2.797,348,3.377,471,3.606,537,2.609,584,2.297,586,4.894,587,2.887,588,2.26,589,2.225,590,2.775,693,2.775,827,3.418,828,2.138,831,3.717,1221,3.508,1222,3.913,1223,5.075,1224,5.075,1225,5.075]],["t/225",[7,1.83,9,1.208,22,0.88,31,1.401,47,3.184,52,1.35,86,1.128,99,1.043,102,1.746,113,0.71,114,1.695,128,1.366,146,1.706,152,1.774,159,1.269,173,1.049,186,1.546,223,1.54,244,1.723,333,1.015,336,2.526,337,2.37,350,2.526,428,2.433,492,1.508,510,1.617,513,1.312,537,3.013,576,2.004,588,1.256,589,2.01,594,2.052,595,1.591,597,1.256,606,1.566,629,2.174,646,1.674,692,1.949,700,1.921,701,2.979,702,1.69,703,1.756,704,1.793,707,2.216,708,2.216,709,2.216,710,2.216,711,2.263,712,2.263,713,2.263,714,2.263,715,2.263,723,2.099,768,1.825,769,3.644,770,2.692,1033,1.165,1036,1.899,1073,2.135,1074,2.884,1075,1.591,1076,1.604,1077,1.542,1093,2.506,1098,2.135,1222,2.174,1226,2.99,1227,2.99,1228,2.99,1229,3.76,1230,2.313,1231,2.506,1232,2.099,1233,2.59,1234,1.854,1235,2.433,1236,4.86,1237,2.59,1238,3.852,1239,5.528,1240,3.249,1241,2.37,1242,4.86,1243,2.99,1244,2.99,1245,2.99,1246,2.99,1247,2.99,1248,2.99,1249,2.99,1250,2.99,1251,2.99,1252,2.99,1253,4.21,1254,2.216,1255,2.99]],["t/227",[68,4.592,69,2.86,105,4.849,106,3.619,173,1.631,455,2.808,510,4.082,816,4.189,841,4.576,845,5.595,846,6.325,1256,9.544,1257,7.547]],["t/229",[7,1.345,9,0.952,22,2.45,52,2.767,68,2.688,69,2.322,70,3.599,104,4.169,106,2.119,122,2.786,146,3.495,167,1.668,173,1.047,186,1.949,223,1.942,244,2.173,254,3.949,306,2.47,336,3.184,395,3.892,452,3.675,455,2.28,724,3.431,795,4.741,796,4.376,841,3.715,854,4.048,879,6.44,880,3.715,1258,4.301,1259,6.128,1260,5.517,1261,4.637]],["t/231",[7,1.683,9,0.655,10,1.33,22,1.7,31,1.477,41,1.304,47,2.809,52,1.904,54,2.028,56,1.033,68,1.383,86,0.677,90,0.846,92,1.065,97,1.47,101,0.82,102,1.794,103,3.774,104,0.898,106,0.62,111,1.088,113,1.372,114,1.47,126,0.97,128,0.82,146,1.023,152,1.065,159,0.762,162,0.874,171,0.792,173,1.31,186,1.341,206,1.326,223,0.999,224,1.304,225,0.925,232,1.043,244,0.636,254,0.851,255,1.054,262,1.14,272,0.664,276,0.792,284,1.59,286,1.602,333,0.955,336,1.638,345,1.338,348,1.126,349,1.264,350,0.738,377,3.786,395,1.14,435,2.979,455,2.714,460,2.022,461,2.013,466,0.97,469,2.705,470,2.174,471,1.202,481,1.126,492,0.905,508,1.023,512,2.498,513,0.787,537,1.981,544,1.815,547,0.88,584,0.766,588,0.753,589,0.742,607,1.615,659,2.251,684,1.486,693,0.925,700,0.709,724,1.005,761,1.554,769,1.871,782,2.32,783,2.158,801,0.615,806,2.678,807,2.748,828,0.713,886,2.3,888,2.3,891,1.112,894,1.076,992,3.653,1018,1.202,1026,3.653,1033,1.976,1073,1.281,1096,2.825,1099,2.251,1100,1.054,1102,1.033,1104,1.955,1105,1.955,1108,1.112,1124,1.388,1217,1.692,1222,1.304,1223,1.692,1224,2.972,1233,2.731,1261,1.358,1262,1.949,1263,1.949,1264,1.692,1265,1.794,1266,2.642,1267,1.949,1268,1.794,1269,1.615,1270,1.22,1271,3.152,1272,1.615,1273,1.794,1274,1.794,1275,1.794,1276,1.46,1277,1.794,1278,1.615,1279,1.692,1280,3.152,1281,2.972,1282,1.794,1283,1.794,1284,1.692]],["t/233",[9,0.352,47,0.928,68,2.211,69,0.859,97,0.791,99,1.346,101,1.036,102,1.335,103,1.511,105,1.152,106,1.743,113,0.538,122,0.759,164,0.937,167,0.773,173,1.756,180,1.511,254,1.076,276,1,284,1.947,286,1.961,306,0.914,323,1.169,333,1.501,377,3.585,396,1.16,435,2.599,455,3.036,460,2.336,461,2.407,510,1.226,512,1.797,537,1.324,547,1.112,584,0.968,586,1.458,587,1.216,588,0.952,589,1.596,590,1.169,594,1.63,595,1.206,597,0.952,607,2.041,637,1.247,693,1.991,700,0.896,701,2.366,702,1.281,703,1.332,704,1.36,707,1.681,708,1.681,709,1.681,710,1.681,711,1.716,712,1.716,713,1.716,714,1.716,715,1.716,787,1.9,807,2.516,816,1.258,831,1.566,841,2.34,845,1.681,846,1.9,854,1.498,880,1.374,886,2.749,888,2.749,894,1.36,992,3.344,1033,0.883,1036,1.44,1073,2.756,1074,1.345,1075,1.206,1076,1.216,1077,1.169,1096,3.377,1098,1.619,1099,2.756,1100,1.332,1102,1.306,1104,2.394,1105,2.394,1108,1.406,1220,2.138,1223,3.64,1224,4.753,1225,2.138,1229,1.754,1236,2.267,1238,1.797,1239,2.041,1242,3.86,1243,2.267,1244,2.267,1245,2.267,1246,2.267,1247,2.267,1248,2.267,1249,2.267,1250,2.267,1251,2.267,1252,2.267,1253,3.344,1254,1.681,1255,2.267,1256,2.267,1257,2.267,1259,2.267,1260,2.041,1261,2.921,1265,2.267,1271,2.267,1273,2.267,1274,2.267,1275,2.267,1276,1.845,1280,2.267,1281,2.138,1282,2.267,1283,2.267,1284,2.138]],["t/236",[106,2.301,167,1.333,241,3.005,272,2.465,831,4.596,913,6.275,961,5.415,1225,6.275,1285,7.231,1286,7.231,1287,7.231,1288,7.231,1289,7.231,1290,7.231,1291,7.231,1292,7.231,1293,7.231,1294,7.231,1295,7.231,1296,7.231,1297,7.231,1298,7.231,1299,7.231,1300,7.231,1301,7.231,1302,7.231,1303,7.231,1304,7.231,1305,7.231,1306,7.231,1307,7.231]],["t/238",[1220,7.295,1308,8.406,1309,8.406,1310,8.406,1311,8.406,1312,8.406,1313,8.406,1314,8.406,1315,8.406,1316,8.406,1317,8.406,1318,8.406,1319,8.406,1320,8.406,1321,8.406,1322,8.406,1323,8.406,1324,8.406]],["t/240",[5,1.894,7,1.302,8,2.368,9,1.444,11,1.542,12,1.746,33,2.045,37,1.86,47,1.573,49,1.375,52,1.736,54,2.473,56,2.214,68,1.687,71,2.079,93,3.047,97,2.068,98,2.54,101,1.757,102,1.974,104,1.925,106,2.504,112,2.505,119,3.322,122,1.985,127,1.43,142,2.384,143,2.173,145,2.442,146,4.131,153,2.236,165,1.998,180,2.171,186,1.887,206,1.866,223,3.254,257,2.576,263,2.173,272,2.197,295,1.898,308,2.412,333,0.636,345,1.632,350,1.581,386,1.86,396,1.968,415,2.909,537,2.034,583,2.795,584,1.641,646,2.153,694,1.632,755,2.909,801,2.792,816,2.134,1325,4.177,1326,4.97,1327,3.128,1328,2.745,1329,4.177,1330,4.177,1331,2.909]],["t/242",[3,2.449,5,1.833,7,1.894,8,1.471,9,0.891,18,2.998,20,2.312,22,1.084,32,3.479,33,1.96,38,1.9,47,1.508,52,1.664,56,2.122,64,1.654,65,2.164,84,5.126,86,2.659,94,2.37,97,1.285,98,3.791,102,1.288,103,2.76,104,3.53,122,1.233,133,2.045,139,2.998,143,3.243,145,4.478,173,0.63,177,1.759,180,2.859,186,1.826,206,1.159,223,2.522,224,2.679,225,1.9,238,2.312,262,2.34,263,2.082,333,0.609,338,1.704,345,1.564,386,1.782,455,1.371,470,1.9,537,1.968,565,1.921,583,2.679,584,1.572,638,2.731,674,1.858,799,2.544,801,1.968,819,2.92,821,2.731,827,2.34,1328,2.631,1332,4.44,1333,3.474,1334,3.684,1335,3.684,1336,4.003,1337,3.474,1338,3.104,1339,3.087,1340,4.003,1341,2.998,1342,3.087]],["t/244",[9,1.144,21,2.496,49,2.635,97,2.569,103,2.884,104,3.69,173,1.606,180,2.208,219,4.623,223,2.979,333,1.554,345,3.128,350,3.031,411,4.053,584,3.144,724,4.126,725,5.995,1219,7.368,1343,8.006]],["t/246",[3,2.751,7,1.416,9,1.001,22,2.536,86,2.431,104,3.229,143,3.643,175,3.206,177,3.078,180,3.234,200,4.147,223,3.075,249,5.109,262,4.095,263,3.643,333,1.712,565,2.158,586,4.147,592,5.109,693,3.325,819,5.109,834,4.453,1344,4.988,1345,5.585]],["t/248",[5,2.93,9,0.898,32,3.507,38,2.983,47,4.253,49,2.069,65,2.181,66,4.847,88,3.821,98,3.821,101,2.643,106,2.767,117,5.454,122,1.936,171,2.552,206,1.819,259,6.511,263,3.269,272,2.964,295,2.856,304,3.77,349,2.32,426,4.475,457,3.398,469,2.709,490,4.288,513,2.538,544,4.608,644,5.286,810,6.055,1346,6.285,1347,4.475,1348,5.784]],["t/250",[7,1.387,31,2.958,47,3.929,106,3.32,127,2.35,133,3.505,151,3.829,163,4.886,186,2.703,206,1.986,224,4.592,225,3.257,295,3.119,350,2.598,369,3.076,377,3.119,411,3.474,471,4.232,544,5.529,565,2.114,584,2.695,684,2.977,693,3.257,1339,8.045,1349,4.681,1350,4.681,1351,6.315]],["t/252",[47,3.47,173,1.752,177,4.048,180,3.305,200,5.453,333,1.402,584,3.618,693,4.372]],["t/254",[106,2.518,241,3.288,272,2.697,378,4.81,598,3.843,813,4.153,1098,5.199,1339,6.102,1352,7.912,1353,7.912,1354,10.136,1355,7.912,1356,7.912,1357,7.912,1358,7.912,1359,7.912,1360,7.912,1361,7.912,1362,7.912,1363,7.912,1364,7.912,1365,7.912]],["t/256",[99,3.039,106,3.014,241,3.936,272,3.229,583,6.338,660,5.928,813,4.972,1366,6.988]],["t/258",[7,0.591,9,0.692,20,1.689,25,1.922,29,1.064,33,3.913,37,2.157,45,2.331,47,2.716,65,1.015,68,3.227,70,1.581,71,4.287,84,1.957,90,1.268,92,3.386,97,3.358,98,1.778,102,1,103,2.234,106,3.036,108,1.731,113,1.882,114,1.554,122,2.653,133,4.082,204,1.101,206,2.087,241,1.215,254,2.707,255,1.581,272,2.724,312,1.565,315,1.357,333,0.445,338,1.245,349,1.079,350,1.834,377,3.277,411,1.48,435,3.422,461,2.725,463,2.133,469,1.26,510,1.455,513,1.181,515,1.731,519,1.302,544,2.567,612,3.938,644,1.778,702,4.48,782,1.48,783,1.377,794,2.19,795,2.082,796,1.922,797,2.19,799,1.859,800,1.614,801,2.719,804,1.957,805,1.48,806,2.831,807,1.754,808,1.957,809,2.133,810,2.036,815,3.449,1018,1.803,1019,5.475,1020,1.859,1021,2.691,1022,2.133]],["t/260",[8,3.153,9,1.525,104,2.844,106,1.963,108,5.081,122,3.041,127,2.113,134,3.805,143,3.209,172,3.563,180,1.702,222,2.864,223,2.879,257,3.805,345,2.41,367,2.627,378,3.751,396,4.043,565,1.901,584,3.371,637,3.124,646,3.18,718,4.055,799,3.922,801,3.116,816,4.384,817,5.112,818,6.788]],["t/262",[51,4.478,86,2.483,94,4.235,121,3.622,127,2.45,128,3.009,159,2.795,164,2.722,173,1.493,177,3.144,180,2.618,222,3.321,263,3.721,322,3.654,333,1.089,336,3.421,396,4.471,637,3.622,724,3.687,801,2.996,819,5.218,820,5.218,821,4.881,822,5.928,823,4.881,824,5.928,825,4.702,1023,5.517]],["t/264",[7,1.565,9,1.302,22,2.098,38,2.533,52,2.218,65,1.853,72,2.978,86,1.853,98,3.245,99,1.713,102,1.102,103,2.79,113,1.166,128,2.245,159,2.085,171,2.167,173,1.433,177,2.345,180,2.514,186,1.563,223,1.557,238,3.082,323,2.533,333,1.387,457,4.186,513,2.155,537,2.444,547,2.409,565,1.644,584,3.579,586,3.16,587,2.635,588,2.063,589,2.031,590,2.533,637,2.702,684,2.315,693,2.533,724,2.751,826,4.422,827,3.12,828,1.951,830,4.255,831,3.393,833,3.572,834,3.393,839,3.508,840,3.572,1024,4.255]],["t/266",[7,1.224,22,1.641,52,2.518,68,3.422,69,3.408,105,4.95,106,2.697,122,2.611,173,1.816,350,2.294,455,2.902,466,3.016,510,4.866,515,5.787,637,3.068,816,4.329,841,4.729,1019,3.851,1025,6.182,1026,4.83,1027,5.02,1028,7.722,1029,6.536,1030,5.02]],["t/268",[9,1.236,21,0.92,22,0.799,25,1.938,52,1.226,65,1.024,68,1.191,86,1.024,99,1.566,101,3.049,102,1.288,113,1.066,128,2.052,146,1.549,159,1.906,167,1.15,173,1.44,180,0.814,186,0.864,204,1.111,241,1.226,276,1.981,323,2.315,333,1.393,350,1.117,435,2.315,508,1.549,537,1.969,587,2.408,588,1.886,589,1.856,594,3.558,595,2.389,597,1.886,598,1.433,600,1.846,637,1.493,654,1.628,684,1.28,700,1.775,703,1.595,704,1.628,724,1.52,768,1.686,812,1.875,891,1.683,1031,1.906,1032,3.206,1033,1.058,1034,4.442,1035,1.819,1036,1.724,1037,1.724,1038,1.938,1039,1.938,1040,2.275,1041,2.966,1042,4.851,1043,2.151,1044,4.974,1045,1.664,1046,1.819,1047,1.875,1048,1.875,1049,1.906,1050,1.875,1051,1.793,1052,2.054,1053,2.054,1054,2.054,1055,2.054,1056,2.054,1057,2.054,1058,2.054,1059,2.054,1060,2.054,1061,2.054,1062,1.846,1063,2.054,1064,2.054,1065,2.054,1066,2.054,1067,2.054,1068,2.054,1069,2.054,1070,2.054,1071,2.054,1072,2.054,1073,1.938,1074,1.611,1075,2.389,1076,2.408,1077,3.811,1078,5.187,1102,1.563,1367,4.49,1368,1.875,1369,2.56,1370,2.1,1371,2.1]],["t/270",[7,1.015,9,1.059,12,1.278,24,2.009,40,1.859,44,1.076,49,1.006,68,1.234,90,1.326,92,1.67,100,2.744,113,1.098,127,1.047,152,1.67,163,3.577,167,1.998,173,0.79,177,1.343,178,2.046,180,0.843,186,1.471,230,1.885,241,1.27,242,1.201,244,3.832,276,2.598,315,1.419,318,1.473,322,1.561,386,1.361,396,1.44,474,2.358,519,1.361,527,2.129,536,1.745,551,3.362,570,3.145,571,4.965,572,4.455,612,1.67,637,1.548,731,2.177,772,2.129,800,1.687,801,2.584,803,2.437,812,1.943,814,1.913,825,2.009,847,2.437,848,2.835,849,2.129,850,2.533,851,2.23,852,2.046,853,4.204,854,1.859,858,2.129,859,2.046,863,2.085,866,2.129,876,2.437,881,3.428,910,3.665,1008,2.129,1020,1.943,1022,2.23,1079,2.358,1080,2.358,1081,5.301,1082,3.875,1083,2.358,1084,3.875,1085,4.163,1086,2.177,1087,4.163,1088,2.653,1089,2.437,1090,2.009,1115,2.533,1372,2.813,1373,4.163,1374,2.813,1375,2.813,1376,2.653,1377,5.1,1378,2.653,1379,4.163,1380,2.813,1381,2.813,1382,2.813]],["t/272",[7,1.525,22,1.059,29,1.422,38,1.856,49,1.287,71,1.946,86,1.357,90,1.696,97,2.421,104,1.802,106,3.27,112,2.345,113,0.855,122,3.276,128,1.644,159,1.527,164,2.33,170,3.393,173,1.343,186,2.5,225,1.856,229,3.672,254,2.673,306,2.799,331,2.723,360,2.928,445,2.135,455,3.174,461,1.718,466,1.946,473,1.579,502,4.817,544,2.072,547,3.405,548,3.184,589,1.488,646,3.889,684,2.656,801,2.695,813,2.053,816,1.997,818,4.991,823,2.667,841,2.182,878,3.015,879,4.359,880,4.21,881,2.667,1019,2.485,1025,2.852,1091,3.015,1377,4.881,1379,3.24,1383,3.015,1384,3.393,1385,3.598,1386,2.617,1387,3.393,1388,3.393]],["t/274",[22,1.118,37,1.837,47,3.58,68,2.578,71,3.887,92,3.487,97,2.506,101,1.735,102,1.612,103,3.621,106,2.485,122,1.967,143,2.146,150,2.938,171,1.675,173,1.703,206,2.544,254,2.787,272,2.176,306,2.897,348,2.383,349,1.523,377,3.548,435,1.958,455,3.589,457,3.451,460,3.063,461,1.813,469,2.752,502,2.328,547,1.862,548,2.146,584,1.621,612,4.264,644,2.509,693,1.958,702,4.061,724,2.126,804,2.761,818,5.556,841,2.302,880,2.302,882,2.711,1377,3.289,1387,3.58]],["t/276",[22,1.215,37,1.996,47,3.716,68,3.32,71,4.092,97,2.638,101,1.886,102,1.698,106,2.921,111,2.501,122,2.096,143,2.332,150,3.192,173,1.633,206,2.657,254,2.97,272,2.319,306,3.05,348,2.589,349,1.655,377,3.736,435,2.128,455,3.379,457,3.678,460,2.649,461,1.97,502,2.529,547,2.023,548,2.332,584,1.761,612,4.49,693,2.128,724,2.311,818,4.806,841,2.501,880,2.501,882,2.946,1019,6.86,1025,3.27,1379,3.715,1388,3.891]],["t/278",[7,0.896,9,0.715,12,1.271,18,0.887,22,1.355,29,0.795,31,0.942,33,1.489,37,1.354,44,0.769,65,1.056,68,2.225,71,2.743,90,1.319,92,2.733,97,0.701,102,1.637,103,2.43,106,1.204,111,0.661,113,1.393,114,0.701,126,1.514,128,1.279,133,1.116,159,0.853,162,1.363,164,1.44,167,1.1,171,0.887,173,1.381,186,0.347,203,0.765,206,0.632,223,0.345,225,0.562,232,0.634,236,0.676,241,0.908,244,0.713,254,1.652,255,0.64,274,1.07,276,3.488,284,1.014,286,0.554,290,1.045,306,1.644,333,0.908,367,0.504,377,3.065,401,0.542,407,1.411,435,0.562,455,2.043,460,2.054,461,1.662,466,1.883,469,2.376,485,1.233,490,0.808,492,1.014,518,0.654,519,1.354,537,1.194,570,1.367,572,1.521,584,0.465,601,3.679,612,2.733,619,1.328,637,0.6,646,1.567,654,0.654,680,2.185,700,0.431,702,1.968,724,1.126,731,1.555,753,0.887,782,0.6,783,0.558,796,0.778,801,1.883,807,4.43,818,0.692,829,1.593,839,3.288,841,0.661,853,1.436,858,0.825,859,0.792,873,1.389,878,0.913,882,1.436,884,0.676,886,3.554,888,3.554,889,0.944,891,0.676,894,1.206,897,0.981,900,0.864,905,2.694,906,1.685,909,0.887,1008,0.825,1018,0.73,1019,3.18,1022,2.218,1033,1.357,1073,1.436,1079,0.913,1080,0.913,1082,0.913,1083,0.913,1084,1.685,1092,0.981,1093,1.685,1094,0.887,1095,1.09,1096,4.555,1097,1.81,1098,1.436,1099,3.92,1100,2.045,1101,0.981,1102,2.652,1103,0.981,1104,1.736,1105,1.736,1106,3.001,1107,1.685,1108,1.736,1109,0.944,1110,0.864,1111,0.864,1112,0.981,1113,0.981,1114,1.81,1116,1.81,1117,0.741,1118,3.016,1119,1.742,1120,4.756,1121,2.011,1122,0.981,1123,0.981,1124,0.843,1369,3.283,1376,1.028,1377,0.944,1378,1.028,1389,2.581,1390,1.09,1391,1.09,1392,1.09,1393,1.09,1394,1.09,1395,1.09,1396,1.09]],["t/280",[9,0.141,25,0.647,47,1.227,55,0.816,68,1.554,69,0.642,71,1.621,92,0.538,97,0.591,99,0.832,101,1.619,102,0.904,103,1.578,105,1.523,106,1.225,111,0.549,113,0.841,122,0.798,164,1.464,167,1.741,171,0.4,173,1.653,180,1.062,206,0.533,241,0.409,244,2.58,254,0.804,276,3.437,284,0.855,286,0.46,306,1.625,323,1.23,333,1.261,377,1.99,396,0.464,455,2.474,457,1.401,460,1.705,461,1.431,469,0.794,502,1.462,510,0.916,515,1.09,519,0.82,537,1.028,547,0.831,548,0.957,570,1.152,571,2.471,572,1.282,584,0.387,586,0.583,587,1.28,588,1.002,589,0.986,590,0.467,594,1.888,595,0.901,597,0.712,598,0.478,600,0.616,601,3.263,612,1.779,619,1.119,637,0.499,680,1.881,693,1.23,700,0.358,702,0.512,703,0.532,704,0.543,768,0.636,789,0.906,801,0.581,807,4.008,812,1.17,814,0.616,816,0.503,825,0.647,831,0.626,833,0.659,834,0.626,839,2.878,840,0.659,841,1.446,851,0.718,852,0.659,853,1.703,854,0.599,858,0.686,859,0.659,863,0.672,866,0.686,880,1.027,881,1.256,884,0.562,886,3.201,888,3.201,894,1.016,910,1.343,987,0.855,1008,1.282,1019,2.446,1022,1.343,1023,0.759,1024,0.785,1025,1.343,1027,0.816,1028,2.375,1029,1.42,1030,0.816,1032,0.647,1034,1.846,1035,0.607,1036,0.576,1037,0.576,1038,0.647,1039,0.647,1040,0.759,1041,1.119,1042,2.179,1043,0.718,1044,2.067,1045,0.556,1046,0.607,1047,0.626,1048,0.626,1049,0.636,1050,0.626,1051,0.599,1052,0.686,1053,0.686,1054,0.686,1055,0.686,1056,0.686,1057,0.686,1058,0.686,1059,0.686,1060,0.686,1061,0.686,1062,0.616,1063,0.686,1064,0.686,1065,0.686,1066,0.686,1067,0.686,1068,0.686,1069,0.686,1070,0.686,1071,0.686,1072,0.686,1073,1.703,1074,0.538,1075,0.901,1076,0.909,1077,1.827,1078,2.486,1079,0.759,1080,0.759,1081,0.816,1082,0.759,1083,0.759,1084,0.759,1085,1.525,1086,0.701,1087,0.816,1092,0.816,1096,3.729,1097,0.816,1098,0.647,1099,2.878,1100,0.995,1101,0.816,1102,2.574,1103,0.816,1104,1.479,1105,1.479,1106,2.627,1107,1.42,1108,0.562,1110,0.718,1111,0.718,1112,0.816,1113,0.816,1114,1.525,1115,0.816,1116,1.525,1117,0.616,1118,2.596,1119,1.468,1120,4.218,1122,0.816,1123,0.816,1367,1.694,1368,0.626,1369,3.34,1370,0.701,1371,0.701,1372,0.906,1373,2.148,1374,1.694,1375,0.906,1376,0.855,1377,3.068,1378,0.855,1379,2.148,1380,0.906,1381,0.906,1382,0.906,1387,0.855,1388,0.855,1389,2.222,1390,0.906,1391,0.906,1392,0.906,1393,0.906,1394,0.906,1395,0.906,1396,0.906,1397,0.985,1398,0.985,1399,0.591,1400,0.985,1401,0.906,1402,0.985,1403,0.985,1404,0.985]],["t/282",[106,1.158,113,1.056,167,1.066,241,0.868,272,0.712,274,1.023,276,3.493,323,1.727,588,1.406,589,1.384,795,1.487,796,1.373,805,1.842,812,5.468,828,1.33,831,1.328,833,1.398,840,1.398,854,3.517,861,3.442,887,2.277,890,1.564,900,1.523,936,1.454,939,1.731,960,1.731,961,1.564,964,1.731,966,4.195,971,1.731,978,1.731,979,4.793,982,1.564,984,1.731,993,4.612,1001,1.731,1005,1.731,1008,3.366,1011,3.854,1012,4.793,1014,5.965,1015,3.854,1023,1.611,1029,1.611,1037,1.221,1040,1.611,1043,1.523,1086,1.487,1106,2.182,1126,3.348,1127,1.922,1128,3.348,1129,3.348,1130,1.922,1131,3.366,1132,4.567,1133,3.348,1134,3.366,1135,1.665,1136,3.348,1137,2.534,1138,1.922,1139,1.922,1140,6.626,1141,1.922,1142,1.611,1143,1.922,1144,1.922,1145,1.922,1146,1.922,1147,2.482,1148,3.157,1149,3.348,1150,1.922,1151,1.665,1152,3.854,1153,1.731,1154,1.922,1155,1.813,1156,1.922,1157,1.922,1158,1.922,1159,1.922,1160,1.922,1161,1.731,1162,1.922,1163,3.348,1164,1.922,1165,1.922,1166,3.348,1167,1.922,1168,1.922,1169,1.922,1170,3.348,1171,1.922,1172,7.917,1173,5.323,1174,1.922,1175,1.922,1176,1.922,1177,1.922,1178,4.449,1179,1.922,1180,5.323,1181,1.922,1182,4.449,1183,1.922,1184,5.323,1185,3.157,1186,1.922,1187,3.348,1188,1.922,1189,3.348,1190,3.348,1191,5.019,1192,7.549,1193,1.922,1194,3.348,1195,1.922,1196,1.922,1197,1.922,1198,1.922,1199,1.922,1200,3.348,1201,1.922,1202,1.922,1203,1.922,1204,1.922,1205,1.922,1206,1.922,1207,1.922,1208,1.922,1209,1.922,1210,1.922,1211,1.922,1212,1.922,1213,3.348,1214,1.922,1215,1.922]],["t/285",[5,2.589,9,1.259,29,2.33,33,3.136,36,4.796,44,2.254,51,4.008,52,2.662,103,4.233,122,1.973,131,3.655,171,2.601,204,2.412,312,3.428,333,0.975,348,3.699,436,3.613,439,5.558,469,2.761,490,4.369,542,3.655,700,3.204,702,3.331,801,2.022,828,3.22,1350,4.369,1405,5.307,1406,6.405,1407,8.106,1408,6.405,1409,6.405,1410,6.405,1411,5.307]],["t/287",[3,1.229,5,0.919,7,0.632,9,0.447,12,2.141,22,2.035,61,2.056,65,1.777,86,2.607,90,2.221,103,4.001,113,1.945,114,2.411,119,2.639,126,1.557,131,3.709,155,1.691,157,1.902,171,2.639,204,1.928,225,2.43,238,1.806,244,1.671,266,2.922,272,1.066,333,0.476,345,1.222,411,2.592,435,1.485,466,1.557,470,1.485,481,2.957,508,2.688,518,1.726,537,2.371,539,2.093,542,1.785,565,0.964,588,3.789,598,2.487,627,2.178,646,1.612,671,2.494,744,4.443,750,2.178,758,3.205,772,2.178,801,1.616,803,2.494,828,3.709,1124,2.227,1230,2.227,1341,2.343,1342,3.949,1412,3.128,1413,5.97,1414,3.949,1415,2.343,1416,4.712,1417,2.178,1418,2.412,1419,1.958,1420,2.412,1421,3.128,1422,1.852,1423,1.519,1424,1.958,1425,2.494,1426,2.227,1427,3.128,1428,4.443,1429,2.639,1430,2.879,1431,2.879,1432,2.879,1433,2.715,1434,1.902,1435,2.494,1436,1.806]],["t/289",[11,3.065,21,2.589,86,2.882,99,2.664,103,3.765,113,1.814,139,6.217,171,3.371,206,2.403,234,3.535,537,2.62,588,3.209,589,3.977,686,6.403,828,3.035,873,5.277,1147,5.664]],["t/291",[7,1.671,9,1.182,11,2.159,12,2.445,21,1.823,38,2.775,52,2.43,86,2.03,103,3.455,113,1.278,154,3.377,171,3.357,180,1.613,204,2.203,206,2.393,223,1.706,232,4.425,244,1.908,295,2.658,310,3.717,318,2.818,322,2.987,343,3.913,517,6.376,536,4.718,537,1.846,542,3.337,574,3.556,588,2.26,589,3.146,801,1.846,828,4.382,1147,3.989,1258,3.778,1331,4.072,1437,4.072]],["t/293",[1,4.012,3,3.893,99,3.735,103,2.753,113,2.166,173,1.202,180,2.108,323,3.627,333,1.163,584,3.001,586,4.524,587,3.772,588,3.831,589,3.772,590,3.627,597,2.954,1234,4.361,1438,6.632,1439,6.632]],["t/296",[11,2.991,21,2.526,86,2.812,99,2.6,103,3.708,113,1.771,139,6.068,206,2.345,234,3.449,537,2.557,588,3.132,589,3.916,686,6.249,801,2.557,828,3.762,873,5.15,1147,5.527,1440,8.102]],["t/298",[11,3.598,21,3.039,99,3.127,113,2.13,588,3.767,589,3.709,828,3.563]],["t/300",[1,4.012,3,3.893,99,3.735,103,2.753,113,2.166,173,1.202,180,2.108,323,3.627,333,1.163,584,3.001,587,3.772,588,3.831,589,3.772,590,3.627,592,5.574,597,2.954,1234,4.361,1438,6.632,1439,6.632]],["t/302",[99,3.247,113,2.211,173,1.591,180,2.791,323,4.802,333,1.54,584,2.54,586,5.249,587,4.995,588,3.911,589,3.85,590,4.802,592,4.716,805,3.274,1341,4.843,1441,6.466,1442,8.866,1443,6.466,1444,6.466,1445,6.466]],["t/304",[5,0.867,7,0.596,9,1.148,12,1.233,21,0.92,22,2.343,40,1.793,61,5.277,63,2.275,64,1.219,65,2.787,86,1.024,101,2.624,102,1.891,106,1.553,111,3.481,113,1.755,114,2.938,119,3.215,121,2.47,153,1.579,157,1.793,177,2.144,180,0.814,186,0.864,204,3.448,206,1.412,223,1.423,229,1.769,234,1.256,237,1.906,238,2.817,241,2.593,256,1.746,260,1.793,266,1.683,272,1.663,322,1.507,336,1.411,345,1.152,388,1.422,393,1.938,399,4.608,435,2.315,438,2.1,449,5.104,470,2.315,508,3.275,542,1.683,544,1.563,588,1.14,605,2.966,646,1.52,666,1.875,692,1.769,718,1.938,758,1.846,768,1.019,782,2.47,783,2.298,801,0.931,813,1.549,882,1.938,1033,2.599,1327,2.209,1339,2.275,1370,2.1,1413,1.875,1416,4.49,1417,2.054,1418,2.275,1419,1.846,1420,2.275,1422,1.746,1423,1.433,1424,1.846,1435,2.352,1446,2.275,1447,2.715,1448,4.879,1449,2.715,1450,2.444,1451,2.715,1452,2.715,1453,1.938,1454,2.95,1455,2.352,1456,2.715,1457,2.95,1458,2.715,1459,2.95,1460,2.95,1461,2.95]],["t/306",[9,1.529,22,2.336,102,1.78,108,5.104,173,1.683,175,3.945,180,2.378,238,4.979,333,1.312,565,2.656,584,3.386,684,3.74,834,5.48,1462,8.622]],["t/308",[5,1.607,7,1.105,9,1.126,64,2.259,101,3.314,102,2.088,106,3.552,111,5.641,113,1.195,153,2.926,177,2.403,180,1.508,186,1.601,204,2.059,234,2.328,260,5.617,272,3.922,312,2.926,314,4.359,315,2.538,318,2.635,336,3.768,349,2.018,388,2.635,445,2.986,452,3.018,513,2.208,544,2.898,574,3.324,718,3.593,886,2.745,888,2.745,1258,5.09,1327,4.095,1413,3.475,1453,5.178,1463,5.468]],["t/310",[99,2.916,106,2.892,113,1.986,241,3.777,272,3.098,806,6.461,813,5.802,886,4.562,888,4.562,1464,7.53]],["t/313",[113,1.986,272,3.098,276,4.488,805,5.596,1106,5.451,1151,7.245,1152,7.245,1465,9.088,1466,7.245,1467,9.088]],["t/315",[113,0.954,272,1.489,805,3.376,886,2.192,888,2.192,1049,4.308,1468,10.149,1469,4.019,1470,4.019,1471,4.019,1472,4.019,1473,8.333,1474,4.019,1475,4.019,1476,4.019,1477,4.019,1478,6.137,1479,4.019,1480,4.019,1481,4.019,1482,4.019,1483,8.922,1484,4.019,1485,4.019,1486,7.445,1487,7.445,1488,10.149,1489,4.019,1490,4.019,1491,4.019,1492,4.019,1493,4.019,1494,4.019,1495,4.019,1496,4.019,1497,6.137,1498,4.019,1499,4.019,1500,4.019,1501,4.019,1502,4.019,1503,4.019,1504,9.462,1505,5.526,1506,4.019,1507,4.019,1508,4.019,1509,4.019,1510,5.787,1511,4.019,1512,4.019,1513,4.019,1514,4.019,1515,4.019,1516,4.019]],["t/317",[7,1.27,22,2.355,37,3.871,61,4.13,65,3.018,71,3.128,94,3.721,97,2.79,98,3.821,106,2,113,1.374,133,3.21,186,1.84,234,2.676,244,2.051,255,3.398,262,3.674,272,2.142,322,5.092,349,3.21,393,5.714,399,3.995,442,6.341,565,1.936,758,3.934,801,2.744,823,4.288,1221,3.77,1456,5.784,1458,5.784,1517,6.285,1518,5.784,1519,5.454,1520,5.784,1521,6.285]],["t/319",[22,2.143,37,3.523,97,3.253,99,2.539,101,3.327,106,3.226,111,5.655,241,3.288,258,6.308,272,3.455,374,6.555,475,4.879,660,6.344,774,5.925,801,3.199,813,4.153,1522,7.281]],["t/321",[37,1.806,38,1.925,65,1.407,97,1.301,102,0.837,106,1.692,113,1.688,122,1.94,167,1.605,173,1.483,180,1.954,223,0.691,232,1.267,241,0.984,262,4.14,272,0.807,276,1.647,284,1.099,333,0.959,455,1.388,460,1.307,584,2.782,601,2.501,684,2.732,694,2.461,801,1.988,805,2.053,806,2.37,813,2.129,827,2.37,884,2.314,886,2.036,888,2.036,896,3.037,908,2.055,961,1.773,993,1.888,1011,1.888,1015,1.888,1049,2.62,1147,1.615,1152,1.888,1185,2.055,1217,3.519,1468,8.014,1469,2.179,1470,2.179,1471,2.179,1472,2.179,1473,5.797,1474,2.179,1475,2.179,1476,2.179,1477,2.179,1478,3.732,1479,2.179,1480,2.179,1481,2.179,1482,2.179,1483,6.702,1484,2.179,1485,2.179,1486,4.894,1487,4.894,1488,8.014,1489,2.179,1490,2.179,1491,2.179,1492,2.179,1493,2.179,1494,2.179,1495,2.179,1496,2.179,1497,3.732,1498,2.179,1499,2.179,1500,2.179,1501,2.179,1502,2.179,1503,2.179,1504,7.108,1505,3.36,1506,2.179,1507,2.179,1508,2.179,1509,2.179,1510,3.519,1511,2.179,1512,2.179,1513,2.179,1514,2.179,1515,2.179,1516,2.179,1520,2.179,1523,3.732,1524,4.055,1525,4.055,1526,2.368,1527,2.368,1528,2.368,1529,2.368,1530,5.219,1531,4.055,1532,2.368,1533,1.962,1534,2.368,1535,4.055,1536,2.368,1537,1.962,1538,2.179]],["t/323",[7,1.477,8,2.685,11,2.699,21,2.279,31,3.151,40,4.444,45,5.828,124,6.738,134,4.508,143,3.802,175,3.345,180,2.016,186,2.14,286,3.418,307,8.584,308,4.221,312,3.912,315,3.393,345,2.856,565,2.252,610,5.637,692,4.384,775,5.828,1350,4.987,1539,6.727,1540,7.31]],["t/325",[3,0.886,5,1.507,7,1.8,8,0.829,9,1.364,10,1.54,11,0.833,21,1.213,22,2.307,26,1.246,33,1.905,47,2.297,49,0.743,51,1.412,52,0.938,54,1.336,65,1.78,69,1.357,72,3.403,86,1.35,93,1.646,94,3.036,96,3.377,97,2.208,99,0.724,101,1.636,104,2.364,106,2.565,108,1.336,111,2.171,116,1.336,119,1.163,122,2.482,124,3.21,126,1.123,127,1.332,151,1.259,153,1.208,157,2.366,160,1.196,162,1.744,167,1.268,177,1.71,180,1.898,186,1.139,204,0.85,206,1.991,222,1.048,223,2.007,225,1.071,250,1.958,254,0.985,257,2.399,295,1.026,333,0.928,337,2.838,338,1.656,340,1.69,345,2.383,348,1.303,349,2.252,377,1.026,396,1.833,411,1.143,425,1.741,436,2.894,469,3.242,475,1.392,503,1.572,511,1.69,529,2.077,544,2.718,547,1.756,548,1.174,565,1.58,574,1.372,584,2.014,631,1.185,660,1.412,670,1.646,684,1.688,694,0.882,767,3.377,774,3.841,797,1.69,799,2.473,801,1.619,816,1.987,845,1.54,873,1.434,879,1.607,1026,1.799,1232,1.458,1235,1.69,1328,1.483,1332,1.607,1350,1.54,1541,2.077,1542,2.257,1543,3.377,1544,1.646,1545,1.646,1546,1.799,1547,3.891,1548,3.891,1549,2.257,1550,2.257,1551,2.257,1552,1.958,1553,2.077,1554,2.257,1555,2.077,1556,2.257]],["t/328",[9,1.034,97,2.32,104,3.333,105,3.381,106,2.301,122,2.228,173,1.952,180,2.637,223,2.109,244,2.36,333,1.63,396,3.406,455,3.273,460,2.33,547,3.264,693,3.432,694,2.825,801,2.282,816,3.693,880,4.035,1557,6.655]],["t/330",[52,3.936,154,5.469,343,6.338,350,3.586,419,5.759,569,6.908,1558,8.717,1559,9.471,1560,7.848]],["t/332",[5,1.704,7,1.171,8,2.13,9,0.829,11,2.14,38,2.752,47,3.595,56,3.073,61,3.81,65,2.852,71,2.886,90,2.515,97,3.063,99,2.637,100,3.166,106,1.845,122,3.606,145,3.389,180,1.599,206,1.678,253,3.134,455,1.985,469,2.499,511,4.342,565,2.531,583,3.88,684,2.515,755,4.037,845,3.955,873,5.223,1091,4.471,1221,3.477,1232,3.745,1546,4.622,1560,4.804,1561,5.031,1562,5.031,1563,7.13,1564,5.797]],["t/334",[7,1.332,22,2.434,28,4.937,44,2.32,49,2.957,116,3.903,119,4.63,122,2.031,127,3.076,159,2.576,173,1.037,175,3.017,177,2.897,180,1.819,206,1.908,212,4.591,222,4.171,223,1.923,320,4.333,330,4.937,349,2.434,350,2.496,396,4.232,436,3.72,485,3.72,513,2.662,694,2.576,801,3.226,849,4.591,1557,6.068,1565,4.809,1566,6.593]],["t/336",[3,1.563,7,0.804,9,1.336,20,2.298,22,1.682,26,2.196,31,1.715,33,3.039,38,1.889,41,2.663,47,1.499,65,1.381,86,1.381,90,1.726,97,1.992,106,2.428,113,1.357,114,1.277,122,1.226,127,3.849,128,1.674,133,2.033,146,2.089,159,1.555,162,4.19,164,1.514,169,4.527,175,1.821,204,1.499,225,1.889,234,1.694,244,1.299,272,1.356,274,4.221,276,3.5,277,2.902,278,2.902,279,2.902,290,4.47,315,1.847,350,1.506,377,1.808,386,1.772,425,3.069,436,2.245,438,2.833,488,5.433,493,4.648,513,1.607,569,2.902,674,1.847,693,1.889,765,2.833,873,2.529,880,2.22,889,3.173,1020,2.529,1328,2.615,1567,3.979,1568,3.662,1569,3.979,1570,3.662,1571,3.979,1572,3.979,1573,3.297,1574,3.979,1575,4.85,1576,3.662]],["t/338",[47,2.589,69,2.396,97,2.206,106,3.323,122,3.865,167,0.838,173,1.453,206,1.99,254,3.001,257,7.399,284,5.183,286,5.221,455,3.164,461,3.02,502,5.214,547,3.102,548,3.575,564,3.542,879,4.894,880,3.835]],["t/341",[52,4.343,86,3.627,122,3.523,173,1.644,284,3.854,286,3.882,306,3.08,455,3.578,511,6.217,1124,7.441,1577,8.302,1578,8.302]],["t/343",[5,2.081,7,1.43,22,2.553,26,3.907,52,2.942,90,4.089,94,4.191,116,4.191,127,2.424,128,2.977,159,2.765,167,1.305,231,3.994,315,3.286,320,4.652,350,2.68,396,3.335,428,5.301,472,4.499,694,4.14,759,5.163,787,5.459,801,2.234,825,4.652,852,4.737,1579,7.079,1580,7.079,1581,6.143,1582,5.04]],["t/345",[7,1.51,126,3.719,127,3.345,155,4.039,167,1.378,350,4.12,565,2.302,571,6.511,694,3.816,852,5,871,5.32,880,6.072,1020,4.749,1260,6.191,1349,5.097,1583,7.472,1584,6.484,1585,6.877,1586,7.472]],["t/347",[5,1.882,7,1.78,8,2.353,9,0.915,11,2.364,22,1.735,32,4.915,38,3.04,49,2.108,56,3.395,69,3.51,106,3.451,122,1.973,143,4.581,173,1.007,180,1.767,186,3.175,239,4.071,333,1.532,338,2.727,345,2.502,349,2.364,455,2.193,513,2.586,565,1.973,583,4.286,638,4.369,676,4.939,816,3.271,1328,4.209]],["t/349",[69,4.262,86,3.744,173,1.696,455,3.693,816,4.461,1587,8.734,1588,8.734,1589,8.734,1590,8.734]],["t/351",[7,1.504,22,1.37,32,2.821,69,3.397,90,2.194,105,4.856,106,3.305,122,2.293,167,1.915,173,1.881,179,3.165,204,1.905,223,1.475,257,3.118,333,1.133,350,1.914,402,3.384,455,2.549,510,4.397,515,4.407,542,2.886,601,4.59,816,2.583,821,3.449,841,4.153,1028,5.429,1591,5.057,1592,5.057,1593,5.057,1594,5.057,1595,5.057,1596,7.319,1597,5.057,1598,5.057,1599,5.057]],["t/353",[9,1.26,10,2.832,11,2.368,47,2.416,52,2.666,56,2.2,64,1.715,68,3.848,72,2.316,90,2.783,92,2.267,97,2.058,99,1.332,101,3.708,102,2.299,106,1.321,111,3.579,122,1.976,132,2.682,146,4.629,167,1.182,173,1.387,254,1.812,306,1.54,333,1.193,350,1.572,455,3.019,457,2.244,460,2.526,466,2.066,469,1.79,544,3.4,547,2.895,548,3.336,684,3.4,693,1.97,723,2.682,771,3.31,786,3.603,841,2.316,849,2.891,1093,3.202,1100,3.467,1222,2.778,1277,3.821,1327,5.87,1552,3.603,1553,3.821,1600,3.31,1601,4.151,1602,3.821,1603,3.603,1604,3.202]],["t/355",[3,2.446,9,1.608,21,1.941,22,2.34,52,2.588,65,2.161,102,2.212,113,1.888,114,3.183,162,2.791,171,2.528,186,2.904,204,2.345,262,3.64,318,3.001,460,2.007,563,4.167,565,1.918,584,2.446,634,4.092,684,2.701,768,2.985,782,3.153,783,2.933,884,3.554,886,3.126,888,3.126,1033,2.233,1349,4.248,1422,3.686,1423,3.025,1605,4.663]],["t/357",[9,1.034,37,3.22,49,3.147,65,2.51,102,2.212,104,3.333,113,2.089,114,3.068,173,1.503,223,2.109,333,1.63,460,2.33,519,4.257,694,4.451,782,3.661,783,3.406,884,4.127,886,3.63,888,3.63]],["t/359",[102,1.902,113,2.013,333,1.402,460,2.968,884,5.257,886,4.624,888,4.624,1261,6.415,1538,8.478,1606,9.212,1607,9.212]],["t/361",[7,1.332,9,1.641,22,1.786,52,2.74,90,2.86,102,2.372,186,2.631,225,3.129,238,3.807,315,3.061,318,3.178,320,4.333,460,2.125,483,5.722,537,2.081,565,2.768,654,3.639,674,3.061,684,3.898,769,3.601,801,2.836,828,3.285,1033,3.665,1100,4.857]],["t/363",[9,1.034,22,1.959,49,3.147,86,2.51,102,2.353,104,3.333,113,1.58,173,1.792,206,2.093,223,2.109,333,1.455,449,4.596,460,2.33,469,3.117,470,3.432,519,4.257,694,3.735,1100,3.909,1102,3.833,1104,4.127,1105,4.127]],["t/365",[102,1.298,113,1.9,167,1.838,173,1.568,276,2.552,286,4.065,333,0.956,460,2.025,886,4.364,887,5.442,888,4.364,1100,3.398,1102,5.283,1104,3.587,1105,3.587,1261,4.377,1533,7.204,1537,8.26,1608,5.011,1609,6.932,1610,5.011,1611,5.011,1612,5.011,1613,5.208,1614,8.913,1615,8.002]],["t/367",[9,1.663,65,2.992,102,2.21,114,2.767,204,3.247,318,4.155,333,1.312,473,3.481,674,4.002,801,2.721,828,3.152,1033,3.837]],["t/369",[9,1.449,11,1.761,21,1.487,22,2.565,49,2.346,102,1.472,114,3.412,167,0.879,173,1.121,190,3.081,241,1.982,284,2.214,286,2.23,333,1.085,454,2.317,460,1.537,473,4.092,475,2.941,492,2.214,519,3.174,606,3.435,674,2.214,694,4.305,752,3.726,782,2.415,783,2.247,801,1.505,821,4.863,828,1.744,886,2.394,888,2.394,1033,1.71,1332,3.396,1338,2.374,1616,2.335,1617,7.846,1618,5.906,1619,4.929,1620,6.077,1621,2.722]],["t/371",[22,2.64,49,3.208,103,3.511,146,5.116,460,3.141,537,3.076,584,3.828]],["t/373",[22,2.222,49,2.699,103,4.098,113,1.792,114,2.632,146,4.305,171,3.33,223,2.392,234,3.491,255,4.433,295,3.727,330,6.142,537,2.588,584,3.221,700,2.983,782,4.152,783,3.863,891,4.68]],["t/375",[37,3.291,49,2.432,65,2.565,103,3.494,104,3.406,113,2.119,114,3.112,223,2.155,333,1.476,460,2.381,519,4.318,694,4.662,700,2.688,782,3.742,783,3.481,884,4.217,886,3.71,888,3.71,891,4.217,894,4.079]],["t/377",[103,3.231,113,1.96,333,1.365,460,2.889,601,5.529,807,5.378,854,5.452,884,5.117,886,4.501,888,4.501,894,4.949,1276,6.715,1622,8.966]],["t/379",[99,2.956,113,2.013,164,3.505,813,4.836,886,4.624,888,4.624,894,5.084,896,8.345,1272,7.633,1464,7.633]],["t/381",[9,1.232,74,6.649,103,3.106,113,1.884,225,5.078,304,5.171,435,4.092,469,3.716,470,4.092,579,5.242,659,5.666,1328,5.666,1623,8.622,1624,7.934,1625,8.622]],["t/383",[9,0.775,22,2.122,49,1.785,86,1.882,102,1.12,103,2.823,104,2.5,113,1.185,127,1.857,131,3.095,165,2.594,173,1.232,206,3.092,223,1.582,231,3.06,276,2.202,333,0.825,336,2.594,339,3.504,340,4.062,360,4.062,370,3.447,374,4.494,436,3.06,449,3.447,457,2.932,460,1.748,469,2.338,470,4.78,519,3.488,537,1.712,634,3.564,694,3.592,700,1.973,758,3.394,891,3.095,894,2.993,1104,3.095,1105,4.471,1108,3.095,1331,3.777,1626,5.423,1627,4.991,1628,4.706,1629,4.494,1630,4.494,1631,4.706,1632,5.423]],["t/385",[103,2.605,173,1.503,276,2.936,284,3.357,333,1.1,460,2.33,537,3.017,601,5.895,807,5.734,886,4.799,888,4.799,894,3.991,1096,5.895,1099,6.282,1104,4.127,1105,4.127,1108,4.127,1110,5.274,1111,5.274,1276,5.415,1633,7.921,1634,7.231]],["t/387",[99,2.956,113,2.013,164,3.505,813,4.836,886,4.624,888,4.624,894,5.084,896,8.345,1272,7.633,1464,7.633]],["t/389",[9,1.024,11,1.773,12,2.008,15,5.526,22,1.301,29,1.748,31,2.071,65,3.298,97,2.75,105,2.246,106,2.281,113,1.873,133,2.454,153,2.571,175,2.198,186,1.406,204,3.579,229,4.298,232,2.571,234,2.045,240,3.277,272,1.637,318,2.315,333,1.547,350,1.819,377,4.318,415,3.345,460,2.762,461,4.685,473,1.94,502,2.71,519,3.191,544,2.546,606,2.315,619,5.211,694,2.799,805,2.432,1151,3.83,1386,3.215,1389,4.889,1635,3.98,1636,7.166,1637,4.804,1638,3.345]],["t/391",[7,1.053,10,3.556,11,2.81,21,2.373,22,2.062,47,4.136,95,4.32,97,1.673,101,2.193,106,3.494,122,3.046,164,1.984,186,2.632,206,3.044,209,4.021,225,2.474,257,3.215,272,1.777,330,3.904,331,3.63,333,0.793,338,2.219,345,2.974,349,1.925,402,5.094,455,2.606,524,3.904,547,4.058,548,2.711,565,2.345,566,3.127,684,2.262,693,2.474,1350,3.556,1639,4.798,1640,7.005,1641,4.524,1642,3.904]],["t/393",[11,3.065,49,3.44,97,2.664,104,3.826,106,3.64,167,1.531,173,1.644,223,2.422,330,6.217,455,3.578,544,4.4,547,4.717,693,3.94]],["t/396",[9,0.971,22,1.84,37,3.025,47,3.909,90,4.502,106,2.918,112,5.499,113,1.485,127,3.139,145,3.971,155,3.672,206,2.654,272,3.538,295,3.087,377,3.087,470,3.224,488,4.837,492,3.153,589,2.585,633,5.629,693,4.351,845,4.634,1266,5.239,1279,5.895,1339,5.239,1414,5.239]],["t/398",[274,5.644,693,5.47,1643,8.969,1644,8.969,1645,8.969]],["t/401",[1,4.203,5,2.353,9,1.144,22,2.169,38,3.8,88,4.868,90,3.473,106,2.548,204,3.015,272,3.481,455,2.741,472,5.089,566,6.126,693,3.8,1344,5.7,1575,5.089,1646,6.947,1647,6.383,1648,5.995,1649,7.368]],["t/403",[7,1.425,47,1.771,97,2.263,101,1.978,106,2.245,127,1.61,167,1.56,173,1.331,179,2.943,180,1.946,186,2.065,204,1.771,223,1.372,241,1.954,272,3.434,274,2.303,276,3.436,312,2.517,333,0.716,386,2.094,455,3.22,497,4.081,547,3.183,566,5.64,570,4.414,571,6.365,572,4.912,584,3.324,684,3.06,693,5.206,813,2.469,887,2.943,1575,2.989,1650,8.463,1651,4.703,1652,7.053,1653,4.703,1654,3.75]],["t/406",[5,2.567,9,1.248,38,4.145,88,5.31,90,3.789,455,2.99,467,8.078,468,7.867,547,3.942,1344,6.218,1647,6.963,1648,6.54,1649,8.037]],["t/408",[7,1.446,65,2.483,97,3.046,106,2.277,167,1.319,173,1.493,180,1.973,186,2.779,225,3.395,333,1.089,455,3.25,468,6.923,547,3.229,584,4.184,684,4.118,693,5.056,1266,5.517,1655,5.704,1656,9.492,1657,7.154,1658,7.154]],["t/410",[9,1.023,15,5.517,26,5.239,65,2.483,86,3.295,163,5.094,165,4.539,204,2.695,223,2.769,234,3.046,273,4.622,333,1.089,339,4.622,348,4.131,393,4.702,399,6.033,485,4.036,508,3.756,610,5.517,758,4.478,801,2.996,1270,4.478,1349,4.881,1518,6.584,1522,6.584,1659,5.094]],["t/412",[22,2.169,37,3.565,49,2.635,65,2.779,104,3.69,173,1.606,223,2.335,262,4.68,333,1.554,460,2.58,519,4.547,694,4.393,801,3.55,827,4.68,884,4.569]],["t/414",[68,3.311,70,4.433,113,1.792,173,1.789,333,1.248,460,2.643,694,4.443,801,2.588,827,4.794,884,4.68,1241,5.981,1261,5.711,1660,8.201,1661,8.201,1662,8.201,1663,8.201]],["t/416",[9,0.89,22,1.687,37,2.773,65,2.998,97,1.998,102,2.212,113,1.888,114,2.772,119,3.209,128,2.619,133,3.181,154,3.596,157,3.786,159,2.433,171,2.528,175,2.85,206,1.802,234,2.651,238,3.596,315,2.891,333,0.948,345,2.433,460,2.007,469,2.684,508,3.269,694,3.875,782,3.153,783,2.933,801,1.965,813,3.269,827,3.64,884,3.554,886,3.126,888,3.126,1033,3.098,1664,6.227,1665,6.227]],["t/418",[5,2.148,7,1.477,9,1.635,11,2.699,12,3.056,22,1.98,32,5.372,38,3.469,101,4.049,102,1.988,122,2.252,143,5.007,173,1.15,180,2.016,223,2.808,565,2.252,638,4.987,700,2.659,799,4.646,821,4.987,1328,4.804,1666,7.31]],["t/420",[9,1.712,49,3.032,173,1.752,333,1.823,565,2.838,1667,7.344]],["t/422",[3,3.221,9,1.172,101,3.449,102,1.694,128,4.362,145,6.062,333,1.248,513,4.187,537,2.588,594,3.187,700,3.773,1074,4.479,1368,5.213,1370,5.839,1616,4.016,1668,5.595]],["t/424",[3,0.849,4,1.146,5,1.97,7,1.003,9,1.562,11,0.798,12,1.568,21,2.089,22,1.016,32,1.207,36,1.619,38,1.026,47,0.814,51,1.353,52,0.899,61,1.421,63,1.668,64,0.893,65,0.751,68,0.873,86,0.751,90,1.627,92,1.181,101,0.91,102,2.385,111,1.207,113,0.82,114,3.099,126,1.867,143,1.125,146,2.606,152,1.181,153,1.157,154,1.249,159,0.845,171,2.406,177,0.95,180,0.597,186,1.962,204,0.814,206,1.085,223,1.094,225,1.78,232,1.157,238,2.867,254,0.944,255,2.027,304,2.249,306,0.802,336,1.034,345,1.939,349,1.833,350,0.819,388,1.042,408,1.54,419,2.28,439,1.877,449,1.375,466,1.076,470,1.78,473,2.005,481,1.249,485,2.116,508,1.135,513,1.514,537,1.87,544,1.146,584,0.849,597,0.836,646,1.114,654,1.194,664,1.506,674,2.305,700,2.155,724,1.114,746,1.475,752,1.637,768,3.02,769,1.181,783,1.766,801,1.87,809,1.577,828,3.05,1033,3.626,1093,1.668,1234,2.14,1258,1.397,1327,1.619,1405,1.792,1411,1.792,1422,1.28,1423,1.05,1446,1.668,1447,1.99,1453,3.263,1519,1.877,1552,1.877,1565,1.577,1624,1.99,1669,2.163,1670,1.99,1671,1.877,1672,2.163,1673,2.163,1674,2.67,1675,2.163,1676,1.619,1677,1.619,1678,1.99,1679,1.877]],["t/426",[5,2.081,9,1.615,39,3.648,102,2.43,114,2.272,146,3.716,171,2.874,315,3.286,333,1.077,473,2.858,654,3.907,674,3.286,801,3.345,828,4.13,1033,4.219,1328,4.652,1680,5.865]],["t/428",[1,3.495,3,2.615,5,1.957,7,1.345,9,0.952,47,3.407,86,2.311,102,2.38,119,4.662,131,3.8,154,3.845,171,2.704,186,1.949,206,2.618,223,1.942,345,2.601,428,4.986,508,3.495,537,3.752,801,2.102,828,3.307,1031,4.301,1045,5.103,1335,6.128,1338,3.314]],["t/430",[7,1.812,102,1.852,171,4.451,318,4.321,333,1.365,349,3.31,537,2.83,565,2.762,598,5.325,828,4.007]],["t/432",[1,2.992,3,3.188,9,0.815,49,1.876,99,3.306,113,2.252,173,1.277,244,3.085,323,2.705,333,0.867,338,4.025,537,3.252,587,2.813,588,3.982,589,3.921,590,2.705,594,2.215,595,2.791,596,4.157,597,2.203,598,5.29,606,2.747,828,2.967,1041,3.465,1234,5.88,1453,3.745,1681,3.969]],["t/434",[9,0.829,99,1.86,102,1.697,113,1.796,171,3.336,173,0.912,175,2.653,177,3.611,180,2.864,223,1.691,323,2.752,333,0.882,350,2.195,388,2.794,537,2.593,587,2.862,588,3.176,589,3.127,594,2.253,595,2.839,596,4.228,597,2.241,598,4.636,772,4.037,828,3.489,1037,3.389,1131,4.037,1132,4.037,1134,4.037,1137,4.037,1682,5.335,1683,4.228,1684,4.228,1685,4.228,1686,4.228,1687,4.228,1688,4.228,1689,4.228,1690,4.228,1691,5.797]],["t/436",[7,1.56,9,0.579,22,2.091,37,2.803,38,1.923,56,2.147,63,3.124,64,1.674,65,1.406,72,2.26,86,1.406,90,2.73,102,1.797,113,0.885,126,2.017,128,1.704,131,2.312,142,2.312,157,5.73,158,3.23,159,1.583,223,1.836,266,3.592,286,1.894,295,1.841,318,1.953,333,0.617,344,2.286,345,1.583,392,2.821,466,2.017,471,2.498,483,3.516,508,3.304,513,2.541,537,2.975,565,1.248,598,3.749,604,5.018,605,3.827,627,2.821,729,3.516,744,3.516,750,2.821,752,3.8,755,2.821,801,2.436,828,3.806,891,2.312,1109,3.23,1268,3.728,1269,3.357,1383,3.124,1413,4.001,1417,2.821,1419,2.536,1436,2.34,1605,3.034,1692,3.034,1693,3.728,1694,2.575,1695,2.955,1696,3.516,1697,4.051,1698,4.051,1699,4.051,1700,3.23]],["t/438",[1,2.338,3,2.659,9,0.637,31,1.92,49,1.466,99,2.935,113,2.264,167,0.821,173,1.065,244,3.381,323,2.114,333,0.678,338,4.411,466,2.217,537,3.502,587,2.199,588,4.004,589,3.942,590,2.114,594,1.731,595,2.181,597,1.721,598,5.722,600,2.787,606,3.262,828,3.344,1041,2.708,1234,5.912,1413,2.831,1453,4.449,1681,3.102,1701,3.435]],["t/440",[9,0.601,99,1.349,102,1.337,113,1.94,167,0.775,173,0.661,175,1.924,177,2.846,180,2.448,223,1.226,323,1.995,333,0.64,350,1.591,388,2.026,537,2.044,587,2.075,588,3.431,589,3.377,594,1.633,595,2.058,597,1.625,598,3.837,600,2.631,772,2.927,801,2.044,828,3.504,982,3.148,1037,3.786,1042,2.813,1131,6.181,1132,2.927,1134,5.501,1135,3.351,1137,5.501,1142,4.994,1683,3.066,1684,3.066,1685,3.066,1686,3.066,1687,3.066,1688,3.066,1689,3.066,1690,3.066,1702,3.868,1703,3.868,1704,3.868,1705,3.868,1706,3.868,1707,3.868,1708,3.868,1709,3.868,1710,3.868,1711,3.868,1712,3.868,1713,3.868,1714,3.648,1715,3.648,1716,3.648,1717,3.648,1718,3.648,1719,3.648,1720,3.648,1721,3.648,1722,3.648,1723,3.648,1724,3.648,1725,4.203]],["t/442",[1,1.522,3,1.139,4,2.549,7,0.972,22,0.785,38,1.376,39,1.494,41,1.94,47,3.23,49,0.954,52,1.205,56,2.549,64,1.987,72,1.617,78,2.114,86,2.489,88,3.747,90,2.673,99,1.978,100,1.583,102,2.203,113,1.985,114,0.93,136,2.311,142,1.654,162,1.299,206,1.392,223,1.797,232,2.574,234,1.234,256,1.716,266,1.654,306,1.075,323,1.376,325,1.978,388,1.397,496,2.171,503,2.019,504,4.173,508,4.175,519,1.291,521,1.94,537,3.366,575,1.843,588,2.382,589,1.83,598,3.484,605,1.763,646,1.494,664,3.349,718,1.905,722,2.516,737,2.516,755,2.019,761,2.311,773,3.601,829,2.114,891,1.654,1031,5.541,1036,1.695,1038,1.905,1039,1.905,1232,1.873,1233,2.311,1234,2.744,1266,2.236,1349,1.978,1413,1.843,1417,2.019,1418,2.236,1419,1.814,1420,2.236,1423,2.336,1605,2.171,1635,2.402,1659,2.064,1694,3.057,1726,2.899,1727,2.516,1728,2.668,1729,2.516,1730,2.236,1731,2.668,1732,2.402,1733,4.426,1734,2.899,1735,2.516,1736,4.426,1737,2.668,1738,2.516,1739,4.426,1740,2.899,1741,2.668,1742,1.583,1743,2.668,1744,2.899]],["t/444",[1,3.362,3,3.46,9,0.915,49,2.108,99,3.48,102,1.323,113,2.2,173,1.385,306,2.376,323,3.04,333,0.975,537,2.022,587,3.162,588,3.891,589,3.831,590,3.04,594,2.489,595,3.136,597,2.476,606,3.087,1031,5.69,1035,3.95,1036,3.744,1038,4.209,1039,4.209,1041,3.894,1234,6.188,1681,4.46]],["t/446",[3,2.871,4,3.874,9,1.376,38,3.469,99,2.346,102,1.51,113,1.597,173,1.15,308,4.221,333,1.112,587,3.608,588,2.825,589,2.781,594,2.84,595,3.579,597,2.825,654,4.034,801,2.307,814,4.575,828,2.672,887,4.575,1033,2.621,1034,5.205,1035,4.508,1036,4.273,1037,4.273,1038,4.804,1039,4.804,1041,4.444]],["t/448",[9,1.248,173,1.373,333,1.329,594,3.394,768,3.017,1034,6.218,1074,4.77,1075,4.276,1076,4.311,1077,4.145,1078,5.642,1745,8.734,1746,8.734,1747,5.958,1748,5.739]],["t/450",[1,1.502,3,1.124,4,1.517,7,1.234,9,0.68,12,1.989,22,0.775,29,1.041,37,1.274,41,1.915,44,1.007,47,2.975,56,2.522,65,0.993,78,2.087,86,3.514,88,1.74,99,0.918,100,1.563,102,1.953,113,1.726,119,2.452,121,1.449,127,0.98,131,1.633,136,3.793,152,2.599,155,1.547,171,1.932,179,1.791,186,0.838,204,1.078,206,2.286,223,1.781,232,1.532,244,0.934,266,1.633,291,2.038,306,1.062,308,1.653,336,1.369,348,1.653,349,1.756,386,1.274,410,1.717,419,1.74,435,2.258,436,1.615,442,2.087,466,1.425,504,2.484,505,2.038,508,5.455,513,1.155,521,1.915,537,2.851,588,1.839,589,1.811,598,2.311,645,2.207,664,1.993,734,1.993,758,1.791,759,3.47,1031,4.596,1033,1.706,1036,1.673,1045,1.615,1100,1.547,1222,1.915,1234,1.633,1254,1.952,1278,2.371,1338,1.425,1349,3.246,1413,1.819,1424,1.791,1602,2.634,1605,2.143,1635,2.371,1659,3.388,1694,3.024,1727,2.484,1730,2.207,1732,5.895,1733,2.634,1735,5.299,1736,2.634,1738,2.484,1749,2.862,1750,2.862,1751,2.862,1752,2.371,1753,2.862,1754,2.862,1755,2.207,1756,2.862,1757,2.484,1758,2.862,1759,2.862]],["t/452",[9,1.144,49,2.635,99,3.277,102,1.653,173,1.606,306,2.97,333,1.218,537,2.527,589,4.279,590,3.8,594,3.111,595,3.92,597,3.094,606,3.858,1036,4.68,1234,5.828,1254,5.461]],["t/454",[9,1.299,99,2.916,173,1.429,333,1.383,589,3.458,594,3.531,595,4.45,597,3.513,1036,5.312,1037,5.312,1253,7.245,1254,6.199]],["t/456",[1,2.385,7,1.389,9,0.982,22,1.231,51,2.844,64,2.84,90,2.982,102,2.05,113,1.502,114,1.458,119,2.342,121,2.301,126,2.262,132,2.936,206,1.315,223,1.325,225,2.157,234,1.935,242,1.785,244,1.483,266,5.274,345,1.775,369,2.037,388,2.19,393,2.986,426,3.235,473,1.835,475,2.802,485,2.564,537,2.169,542,2.593,576,4.238,588,1.756,589,1.729,590,3.262,597,2.657,598,3.339,674,3.19,752,4.035,768,2.375,801,2.616,828,3.817,1033,2.465,1413,5.874,1419,5.188,1429,2.342,1436,5.337,1760,3.943]],["t/458",[9,1.704,22,2.467,49,2.997,102,1.389,162,3.015,164,3.465,173,1.432,244,2.195,333,1.023,537,2.123,584,2.641,590,4.322,594,2.613,597,2.599,700,2.446,768,3.568,1075,3.293,1076,3.32,1077,3.192,1368,4.275,1423,3.267,1575,4.275,1742,3.673,1761,3.981,1762,4.089,1763,4.089]],["t/460",[3,1.942,9,1.471,12,2.067,22,1.984,26,2.729,47,1.862,64,3.025,86,1.716,102,2.457,114,2.35,126,2.461,127,1.693,159,1.932,186,1.448,202,2.673,219,2.856,223,1.442,232,2.647,255,2.673,293,2.927,297,3.703,304,2.966,312,2.647,345,2.86,348,2.856,349,2.703,435,4.138,466,2.461,513,1.997,537,2.752,539,3.309,597,1.911,654,2.729,700,1.799,763,3.444,768,3.33,801,1.561,828,2.677,1033,2.626,1258,3.195,1453,3.25,1630,4.097,1677,3.703,1700,3.943,1764,4.945,1765,4.945,1766,4.551]],["t/462",[7,1.203,9,1.582,11,3.574,21,1.856,22,1.612,29,2.165,49,1.959,102,1.999,113,1.301,164,2.265,167,1.097,173,1.316,206,1.723,236,3.396,241,3.478,256,3.523,257,3.67,270,3.67,272,2.029,333,0.906,454,2.891,492,3.885,576,3.67,700,2.165,734,4.144,813,3.124,1033,3.472,1074,3.25,1075,2.914,1076,2.938,1338,2.962,1429,3.067,1621,3.396,1767,4.06,1768,4.237,1769,3.783,1770,4.745,1771,4.59]],["t/464",[9,1.64,11,2.718,21,1.553,22,2.372,49,2.882,102,2.131,162,2.233,167,0.918,173,1.158,241,3.06,272,1.698,333,0.758,345,2.876,454,2.42,492,3.417,537,2.764,584,2.892,594,2.861,700,1.812,763,3.469,768,3.965,1018,3.072,1033,2.64,1074,2.721,1075,2.439,1076,2.459,1077,3.494,1338,2.48,1423,4.254,1429,2.567,1621,2.843,1701,3.842,1742,4.783,1761,4.358,1767,3.398]],["t/466",[7,1.272,9,1.488,11,1.496,12,2.631,22,1.098,39,2.088,47,2.371,49,2.072,86,2.185,88,2.463,100,2.213,102,2.06,114,3.024,127,2.155,173,0.99,186,1.186,206,1.173,217,2.213,223,1.836,234,1.725,241,1.684,333,0.617,349,2.324,350,1.534,435,2.987,454,1.968,492,1.881,537,2.436,584,1.591,594,1.574,606,3.72,625,2.764,627,2.821,646,2.088,692,4.63,700,1.474,763,2.821,768,3.447,1074,2.213,1075,1.984,1076,2,1077,1.923,1238,2.955,1241,6.874,1270,2.536,1338,3.133,1407,3.728,1423,1.968,1429,4.485,1621,2.312,1732,3.357,1742,2.213,1772,3.23,1773,3.357,1774,4.051,1775,4.051,1776,4.051,1777,4.051,1778,4.051,1779,4.051]],["t/469",[9,0.608,99,1.366,113,1.74,173,1.252,323,2.02,333,1.212,510,2.119,587,2.101,588,3.078,589,3.03,594,2.541,595,2.084,597,1.645,598,2.068,600,2.664,700,1.548,701,3.689,703,2.301,704,2.349,707,2.904,708,2.904,709,2.904,710,2.904,711,2.964,712,2.964,713,2.964,714,2.964,715,2.964,768,1.471,828,2.39,982,3.188,1037,2.488,1042,4.376,1046,2.625,1074,2.325,1075,2.084,1076,2.101,1077,2.02,1078,2.75,1131,5.545,1132,2.964,1134,5.545,1135,3.394,1137,4.554,1142,3.283,1683,3.104,1684,3.104,1685,3.104,1686,3.104,1687,3.104,1688,3.104,1689,3.104,1690,3.104,1714,3.694,1715,3.694,1716,3.694,1717,3.694,1718,3.694,1719,3.694,1720,3.694,1721,3.694,1722,3.694,1723,3.694,1724,3.694,1780,5.213,1781,3.694,1782,3.694,1783,3.694,1784,3.694,1785,3.694,1786,3.694,1787,3.694,1788,3.694,1789,3.694,1790,3.694,1791,3.694]],["t/471",[9,0.637,99,1.429,101,1.873,113,0.973,167,1.51,173,1.547,225,2.114,241,1.851,276,3.325,284,2.067,333,1.497,587,2.199,588,1.721,589,1.695,594,2.63,595,2.181,597,2.616,700,1.62,703,2.408,704,2.458,768,1.539,814,2.787,887,2.787,1032,2.927,1034,4.82,1035,2.747,1036,2.604,1037,2.604,1038,2.927,1039,2.927,1041,2.708,1044,5.397,1045,2.513,1046,2.747,1047,2.831,1048,2.831,1049,2.877,1050,2.831,1051,2.708,1052,3.102,1053,3.102,1054,3.102,1055,3.102,1056,3.102,1057,3.102,1058,3.102,1059,3.102,1060,3.102,1061,3.102,1062,2.787,1063,3.102,1064,3.102,1065,3.102,1066,3.102,1067,3.102,1068,3.102,1069,3.102,1070,3.102,1071,3.102,1072,3.102,1074,2.432,1075,2.181,1076,2.199,1077,2.114,1078,2.877,1102,2.361,1370,3.171,1371,3.171,1791,5.874,1792,5.069,1793,4.454]],["t/473",[9,0.645,99,1.448,113,1.804,173,1.448,323,2.142,333,1.402,587,2.228,588,3.191,589,3.141,594,3.579,595,3.348,597,1.745,598,2.192,600,2.825,700,1.642,703,2.44,704,2.491,768,1.559,828,2.5,982,3.38,1037,2.638,1042,4.576,1045,2.546,1046,2.783,1047,2.869,1073,2.966,1074,2.465,1075,2.21,1076,2.228,1077,3.245,1078,4.418,1131,5.749,1132,3.143,1134,5.749,1135,3.599,1137,4.762,1142,3.481,1253,5.452,1254,3.079,1683,3.292,1684,3.292,1685,3.292,1686,3.292,1687,3.292,1688,3.292,1689,3.292,1690,3.292,1714,3.917,1715,3.917,1716,3.917,1717,3.917,1718,3.917,1719,3.917,1720,3.917,1721,3.917,1722,3.917,1723,3.917,1724,3.917,1794,6.293,1795,3.599]],["t/475",[9,0.991,99,2.225,173,1.649,333,1.596,589,2.638,594,3.612,595,3.395,597,2.68,700,2.522,703,3.748,704,3.827,1036,4.053,1037,4.053,1045,3.911,1046,4.275,1047,4.407,1073,4.556,1074,3.786,1075,3.395,1076,3.423,1077,3.29,1078,4.479,1238,5.057,1239,5.745,1253,7.411,1254,4.73,1794,8.555,1795,5.527]],["t/477",[3,1.621,4,2.187,5,1.213,9,1.436,11,1.523,12,1.725,22,2.381,26,2.277,31,2.752,54,2.443,64,1.705,65,1.432,102,2.345,108,2.443,113,1.395,114,3.05,126,2.054,171,4.256,175,1.888,204,1.554,234,2.718,304,3.829,306,1.531,315,2.963,349,1.523,471,3.937,513,1.666,537,2.015,565,1.967,684,1.79,752,1.801,768,1.426,782,3.232,783,3.007,828,4.151,1020,4.058,1033,2.8,1075,2.02,1234,2.355,1453,5.776,1582,2.938,1621,2.355,1671,3.58,1747,2.815,1767,2.815,1768,2.938,1796,4.126,1797,4.126,1798,3.09]],["t/479",[4,2.002,7,1.204,9,1.502,11,2.724,21,1.178,22,1.614,29,1.374,49,2.429,102,1.73,113,0.826,114,2.926,162,1.694,164,2.268,167,1.36,173,0.937,206,1.094,236,2.156,241,2.477,256,2.237,270,2.33,272,1.288,290,2.85,333,0.575,345,1.476,454,1.835,492,2.766,537,1.881,576,2.33,584,2.341,594,2.316,700,1.374,734,2.631,752,2.602,768,3.632,769,3.255,783,1.78,806,4.314,813,1.983,1018,2.33,1033,2.646,1075,1.85,1076,1.865,1077,2.828,1338,1.881,1423,2.895,1429,3.071,1621,2.156,1668,2.577,1701,2.914,1742,3.255,1747,2.577,1748,2.483,1761,3.528,1767,2.577,1768,2.69,1769,2.402,1770,3.012,1771,2.914,1798,2.829,1799,3.916,1800,2.756,1801,2.365,1802,2.829,1803,3.916,1804,3.916]],["t/481",[3,0.742,4,1.001,7,1.089,9,1.435,11,1.65,21,0.589,22,1.666,26,1.043,28,1.415,29,1.212,49,1.471,102,1.992,108,1.118,113,0.977,114,2.503,126,0.94,131,3.076,157,2.026,160,1.001,162,0.847,164,2.583,167,0.824,173,0.524,175,1.525,186,0.553,206,0.964,232,1.011,236,1.078,241,1.385,244,1.087,255,1.021,256,1.118,266,2.551,270,1.165,272,0.644,290,1.593,306,1.236,315,0.877,324,1.104,333,0.288,345,0.738,411,3.114,419,3.277,428,1.415,454,0.918,470,0.897,481,1.924,489,1.457,492,1.547,503,1.316,508,4.094,537,1.701,565,0.582,576,2.756,584,1.309,588,2.083,590,2.558,594,1.295,597,1.288,598,2.987,645,1.457,646,1.717,671,1.506,684,0.82,700,1.626,734,1.316,752,2.963,758,1.182,768,2.959,769,1.82,776,1.415,783,2.539,801,1.411,806,1.948,813,0.992,828,3.602,1018,1.165,1033,2.205,1075,0.925,1076,0.933,1077,1.581,1098,2.19,1278,1.565,1338,0.94,1347,2.372,1350,1.289,1368,1.201,1413,4.314,1417,2.32,1419,3.373,1422,1.118,1423,1.618,1429,2.778,1434,2.026,1436,1.924,1544,1.378,1621,1.078,1648,1.415,1674,1.345,1676,2.495,1701,1.457,1742,1.82,1747,1.289,1748,1.242,1761,1.972,1762,2.026,1763,2.026,1767,1.289,1768,1.345,1769,1.201,1770,1.506,1771,1.457,1772,1.506,1799,1.242,1800,1.378,1801,1.182,1802,1.415,1803,2.19,1804,2.19,1805,1.889,1806,1.639,1807,1.889,1808,1.889,1809,1.889]],["t/483",[9,1.131,25,5.199,102,2.093,114,2.539,314,8.081,333,1.204,350,2.995,378,4.81,411,4.006,473,3.194,503,5.51,513,3.194,674,3.673,683,6.308,752,3.454,769,4.321,1033,3.635,1659,5.633,1810,5.199,1811,5.111]],["t/485",[9,1.575,11,2.458,21,0.803,22,2.45,31,1.111,49,2.977,102,1.375,108,1.525,114,2.388,126,1.283,164,3.274,167,1.667,173,1.422,175,1.179,190,1.665,241,1.071,244,1.848,272,0.878,284,1.196,286,1.205,290,2.707,333,1.133,349,0.951,402,1.724,473,4.608,492,1.196,537,1.787,565,0.794,590,3.834,594,2.2,597,2.188,634,1.693,684,1.118,700,2.422,705,1.794,752,1.902,768,3.255,769,3.092,806,3.309,1033,0.924,1075,2.134,1077,2.687,1090,1.693,1098,3.72,1422,1.525,1423,3.234,1429,1.328,1616,1.262,1619,1.488,1742,3.092,1761,3.351,1762,3.442,1763,3.442,1767,1.758,1803,3.72,1804,3.72,1810,3.72,1811,4.301,1812,1.879,1813,2.236,1814,1.758,1815,1.724]],["t/487",[3,1.376,7,1.419,9,0.802,11,1.293,21,1.092,22,2.38,31,1.51,49,1.153,52,1.456,68,1.414,99,1.124,102,1.658,113,1.534,114,1.124,126,1.744,127,1.199,159,1.368,162,2.515,167,0.646,171,1.422,186,1.643,190,2.263,222,1.626,237,2.263,244,1.831,255,1.894,286,1.638,306,1.3,333,0.533,338,2.389,345,3.136,349,1.293,367,1.491,405,2.793,408,2.494,419,2.13,435,1.662,451,2.555,453,2.902,473,4.371,537,1.771,542,1.999,597,1.354,700,2.554,701,1.976,705,2.439,752,3.065,765,2.494,768,3.821,769,1.913,801,1.106,828,1.28,1033,2.012,1230,2.494,1231,2.701,1258,2.263,1419,4.394,1422,2.074,1423,1.701,1436,4.054,1619,2.023,1742,3.065,1761,2.074,1762,2.13,1763,2.13,1803,2.302,1810,4.614,1811,5.186,1812,2.555,1816,3.224,1817,3.995,1818,2.793,1819,3.04,1820,2.902,1821,3.04]],["t/489",[4,1.536,7,0.586,11,1.07,12,1.212,21,0.904,22,2.155,31,2.073,32,4.001,38,1.376,51,3.01,52,1.205,66,2.236,68,1.17,90,1.258,92,1.583,102,0.599,113,1.051,114,3.166,126,1.443,127,1.647,128,1.219,146,3.765,155,1.567,159,1.879,162,3.215,167,0.534,186,2.1,190,1.873,204,1.092,206,1.392,225,1.376,231,2.713,234,2.624,254,2.1,286,1.355,290,1.386,306,1.075,312,1.551,345,1.879,348,2.777,349,2.275,350,1.821,408,2.064,419,1.763,466,1.443,471,1.788,473,3.211,485,1.635,488,2.064,513,1.17,542,1.654,605,1.763,629,3.218,659,1.905,664,2.019,746,1.978,752,2.691,755,3.349,761,3.834,763,2.019,768,2.478,769,4.344,782,2.435,783,2.265,823,1.978,828,3.476,1018,3.8,1033,3.537,1221,1.739,1426,2.064,1519,2.516,1619,3.559,1620,4.388,1674,2.064,1677,3.601,1679,2.516,1695,2.114,1811,1.873,1820,2.402,1822,2.402,1823,6.59,1824,2.899,1825,1.94,1826,2.899,1827,4.809,1828,2.516]],["t/491",[7,1.192,9,0.843,32,3.291,33,2.889,39,3.04,114,3.855,128,2.481,159,2.305,171,2.395,179,3.692,232,3.157,306,2.189,331,7.287,367,2.511,513,2.382,625,4.024,752,4.817,782,2.987,783,2.779,828,3.522,1033,3.956,1422,3.492,1423,2.866,1620,5.923,1748,3.877,1799,3.877,1800,4.303,1801,3.692,1802,4.418,1829,5.899,1830,5.899]],["t/493",[9,0.822,173,1.627,333,1.574,473,3.835,594,4.019,768,3.282,905,4.093,1075,3.999,1077,4.909,1078,3.713,1102,3.046,1106,3.448,1466,4.583,1616,2.815,1619,3.319,1780,4.583,1801,5.111,1810,5.367,1811,3.713,1814,3.921,1815,3.846,1831,6.511,1832,6.767,1833,4.988,1834,6.767,1835,4.305,1836,4.988,1837,4.988,1838,4.988,1839,4.988,1840,4.988,1841,4.988,1842,4.988]],["t/496",[4,4.246,5,0.863,7,0.982,10,2.003,31,1.266,33,1.438,44,2.189,84,1.965,90,1.274,102,2.164,108,1.739,113,1.886,114,2.571,151,1.639,154,1.696,155,1.588,162,1.316,167,0.896,171,1.193,234,1.25,266,2.774,293,2.878,315,1.363,336,2.325,345,1.147,348,1.696,388,1.415,411,2.461,442,2.142,451,3.545,470,4.097,486,2.265,503,2.045,508,4.797,574,1.786,576,5.894,588,3.336,598,3.891,605,3.782,724,2.505,725,2.199,745,2.265,752,3.99,753,2.199,828,2.274,891,1.676,1033,1.053,1232,1.897,1233,2.341,1235,2.199,1338,1.462,1347,2.091,1417,3.385,1418,2.265,1419,1.838,1422,2.878,1423,3.021,1424,3.042,1426,4.428,1453,1.93,1741,2.703,1760,2.549,1823,4.028,1825,4.162,1843,4.218,1844,2.703,1845,2.937,1846,4.861,1847,5.397,1848,2.341,1849,2.937,1850,2.703,1851,2.549,1852,2.703,1853,2.937,1854,2.937,1855,4.861,1856,4.218,1857,4.861,1858,2.433]],["t/498",[4,3.131,5,1.098,9,0.844,10,4.03,11,1.379,21,2.596,29,1.359,41,2.5,52,1.553,68,2.958,78,5.343,92,2.041,102,1.873,113,0.817,114,3.613,121,3.709,132,2.414,145,2.184,146,3.101,154,2.158,171,1.517,234,1.591,254,3.635,255,2.02,263,1.943,290,1.787,308,2.158,344,2.108,345,1.46,349,2.181,426,2.66,470,2.804,485,2.108,513,1.509,578,3.438,625,2.549,684,1.621,724,3.044,746,2.549,752,1.631,768,2.531,769,3.226,782,1.892,783,3.922,828,3.315,883,2.881,1033,2.986,1264,3.242,1269,3.096,1331,2.602,1368,2.375,1411,3.096,1413,2.375,1417,4.114,1423,1.815,1424,2.338,1426,2.66,1616,1.829,1630,3.096,1648,2.798,1668,2.549,1674,2.66,1694,2.375,1823,4.895,1825,2.5,1847,3.242,1859,3.736,1860,3.736,1861,5.436]],["t/500",[1,2.029,4,2.049,5,1.136,11,1.427,21,1.892,22,1.047,29,2.207,52,1.606,64,1.597,65,1.342,68,1.561,100,2.111,102,1.752,113,1.854,114,3.882,121,3.072,204,1.456,223,2.474,234,2.583,266,3.462,306,1.434,426,2.752,451,4.425,466,4.223,471,2.384,485,2.181,532,5.584,576,3.741,588,1.494,700,1.406,746,2.637,752,1.687,769,2.111,782,4.667,783,4.608,828,2.738,1020,2.457,1033,2.686,1226,3.557,1420,2.981,1423,2.947,1424,5.769,1426,2.752,1435,3.082,1453,2.54,1694,2.457,1748,2.54,1799,2.54,1823,3.203,1825,2.586,1848,3.082,1850,3.557,1862,3.865,1863,3.865,1864,4.837,1865,3.865,1866,3.354,1867,3.557]],["t/502",[1,1.045,4,1.055,5,1.025,7,0.402,9,0.498,10,2.379,11,1.287,18,1.49,21,0.62,29,0.724,38,0.944,39,3.887,44,0.7,52,0.827,90,1.513,102,2.071,113,1.838,114,2.57,121,1.766,126,2.783,127,0.681,131,3.629,132,1.285,155,3.438,157,2.831,162,1.563,165,0.952,167,0.858,169,1.451,171,1.416,225,0.944,231,1.123,234,0.847,237,1.285,239,2.959,255,1.076,266,4.304,286,0.93,304,1.193,345,2.184,348,2.014,349,1.719,350,1.32,378,1.21,388,0.959,395,1.163,407,1.285,411,1.007,451,5.105,471,2.151,485,1.123,492,1.619,495,3.905,498,1.357,503,2.429,513,0.803,535,1.586,575,3.554,576,4.317,579,2.12,588,2.706,597,0.769,605,2.12,625,1.357,629,1.332,643,1.586,646,1.025,674,0.924,684,0.863,692,1.193,723,1.285,724,1.797,725,2.612,746,1.357,755,1.386,768,3.232,769,1.087,783,2.996,828,0.727,1018,2.151,1033,1.669,1147,1.357,1148,1.727,1161,1.649,1241,3.395,1338,0.99,1349,2.379,1417,4.428,1418,1.535,1419,1.245,1420,1.535,1429,1.797,1455,1.586,1582,1.417,1648,2.612,1694,5.09,1732,1.649,1739,5.146,1743,4.284,1800,2.544,1801,2.183,1802,2.612,1847,3.026,1852,1.831,1856,1.727,1858,1.649,1868,1.586,1869,1.586,1870,1.535,1871,1.99,1872,1.99,1873,1.99,1874,4.655,1875,1.99,1876,1.99,1877,1.99,1878,1.99,1879,1.99,1880,1.99,1881,1.99,1882,5.592,1883,3.487,1884,1.99,1885,1.831]],["t/504",[3,1.971,15,3.871,22,2.383,26,2.77,31,2.163,37,3.296,51,3.141,64,2.073,65,2.569,86,2.569,94,2.971,97,1.611,102,1.529,113,1.618,114,2.822,134,4.565,142,2.864,153,2.686,155,2.713,159,1.961,177,2.205,180,1.384,219,2.898,223,1.464,232,2.686,333,0.764,350,1.9,369,3.318,370,3.19,386,2.235,391,3.424,392,3.495,393,3.298,410,3.01,454,3.596,466,2.498,469,3.191,498,3.424,513,2.026,519,3.296,536,2.864,635,3.495,694,1.961,801,3.268,1091,3.871,1545,3.66,1695,3.66,1886,5.019,1887,5.019,1888,4.355,1889,4.355,1890,5.019,1891,5.019,1892,5.019]],["t/506",[3,1.398,94,2.107,167,2.457,173,0.56,177,1.564,232,4.335,255,1.924,272,1.213,273,2.299,276,1.445,284,3.76,286,4.414,295,1.617,315,1.652,350,1.347,371,5.23,453,2.948,470,4.202,514,2.948,518,1.964,660,2.227,674,1.652,694,1.39,800,1.964,805,1.802,1089,4.531,1152,7.526,1614,6.712,1695,2.595,1893,3.558,1894,3.558,1895,3.558,1896,3.558,1897,11.108,1898,3.275,1899,3.275,1900,8.101,1901,5.683]],["t/509",[68,3.051,86,2.623,92,5.976,102,1.56,113,2.391,155,4.085,167,1.393,177,3.32,180,2.084,186,2.212,244,2.466,255,4.085,320,4.966,801,2.385,873,4.803,909,5.659,1533,6.261,1581,6.557,1902,5.827,1903,6.261,1904,6.557,1905,7.556,1906,7.556]],["t/511",[37,2.559,68,2.321,94,3.403,102,1.187,113,2.26,114,1.844,155,3.107,167,2.37,244,1.876,255,4.415,259,6.116,276,2.334,416,4.192,454,2.792,644,3.495,731,4.093,801,1.814,853,5.367,1099,3.777,1191,7.087,1903,4.763,1907,5.748,1908,5.748,1909,5.748,1910,5.748,1911,8.167,1912,5.748,1913,5.748,1914,5.748,1915,5.748,1916,8.167,1917,5.748]],["t/513",[5,1.616,7,1.111,9,1.131,26,1.884,29,1.242,31,1.472,32,1.905,39,2.833,44,1.934,56,1.809,64,2.271,65,1.185,68,2.786,70,1.845,72,1.905,100,3.002,102,0.705,112,2.048,114,1.095,134,2.105,153,1.827,155,3.73,164,2.092,172,3.985,186,1.609,204,1.286,206,0.988,219,1.971,255,1.845,345,2.147,369,1.53,373,2.963,408,2.431,435,1.62,495,1.905,513,1.378,542,1.948,565,1.693,576,2.105,597,2.125,700,2,701,3.893,702,1.776,703,1.845,704,3.034,705,4.805,706,4.116,707,2.329,708,2.329,709,2.329,710,2.329,727,3.142,752,2.4,769,3.002,770,2.829,891,1.948,1045,1.926,1046,4.878,1227,3.142,1228,3.142,1229,3.914,1230,2.431,1231,4.239,1232,2.205,1605,2.557,1727,2.963,1728,3.142,1742,1.865,1795,2.722,1819,2.963,1843,2.963,1858,2.829,1918,4.77,1919,5.497,1920,3.414,1921,3.414,1922,3.414,1923,5.497,1924,3.414,1925,3.414,1926,3.414,1927,2.722,1928,2.829,1929,4.77,1930,5.497,1931,5.497,1932,5.497,1933,5.059,1934,3.414,1935,3.414,1936,2.633,1937,2.963,1938,2.963]],["t/515",[22,2.024,39,3.851,68,3.017,164,2.843,186,2.188,333,1.137,703,4.039,706,5.596,1032,6.419,1045,4.216,1047,6.209,1795,5.957,1939,6.877,1940,6.484,1941,7.472,1942,11.976,1943,7.472,1944,7.472,1945,6.484,1946,7.472,1947,6.877,1948,7.472]],["t/517",[9,1.653,49,2.802,173,1.819,333,1.295,700,3.862,701,4.803,703,4.602,704,4.698,705,5.928,1045,5.989,1047,5.411]],["t/519",[9,1.468,164,3.442,173,1.616,333,1.563,350,3.424,700,4.009,703,5.553,704,4.992,705,4.637,1032,5.944,1045,6.218,1046,5.578,1047,6.53,1229,4.741,1940,5.778,1949,8.512]],["t/521",[5,1.765,11,2.217,21,1.872,22,1.627,32,3.35,39,3.095,172,5.618,186,2.466,206,2.816,249,4.379,276,2.438,308,4.864,345,3.29,349,2.217,486,4.631,510,2.989,597,3.76,643,4.787,701,5.95,702,3.123,703,3.246,706,6.307,707,4.096,708,6.636,709,4.096,710,4.096,711,4.181,712,4.181,713,4.181,714,4.181,715,4.181,1098,3.946,1124,4.275,1755,4.631,1902,4.631]],["t/523",[9,1.404,21,1.906,49,2.012,173,1.341,333,0.93,510,3.043,597,4.871,700,3.103,701,4.812,702,3.18,703,3.305,704,3.374,705,4.257,706,9.438,707,4.171,708,4.171,709,4.171,710,4.171,711,4.257,712,4.257,713,4.257,714,4.257,715,4.257]],["t/525",[9,1.329,49,2.282,173,1.462,333,1.055,510,3.451,700,3.382,701,5.244,702,3.606,703,3.748,704,3.827,707,4.73,708,4.73,709,4.73,710,4.73,711,4.828,712,4.828,713,4.828,714,4.828,715,4.828,936,4.828,1046,4.275,1781,6.016,1782,6.016,1783,6.016,1784,6.016,1785,6.016,1786,6.016,1787,6.016,1788,6.016,1789,6.016,1790,6.016]],["t/527",[5,1.318,8,1.647,9,1.175,22,1.843,32,2.501,33,2.195,38,2.128,49,1.476,56,2.376,61,4.471,65,1.556,86,2.361,93,3.27,94,6.389,97,1.439,116,4.028,122,2.096,127,3.143,143,3.538,173,1.07,177,1.97,180,2.722,186,1.992,200,4.028,206,1.298,222,2.081,223,1.984,249,3.27,261,2.806,297,3.358,333,0.682,336,2.144,349,2.512,350,1.697,396,2.112,407,2.896,448,3.458,469,1.933,565,1.381,583,3,598,2.178,638,3.059,684,1.945,801,3.114,873,5.226,1020,2.85,1345,3.575,1350,3.059,1565,3.27,1695,5.997,1904,3.891,1950,4.126,1951,4.126,1952,4.126]],["t/529",[3,3.951,7,1.58,127,2.677,164,2.976,175,3.578,177,4.421,180,2.157,186,2.289,222,3.63,223,2.281,333,1.693,369,3.505,385,6.031,388,3.769,392,5.445,393,5.139,400,6.234,427,4.97,583,5.233,774,5.856]],["t/531",[32,3.442,33,3.021,49,2.825,86,2.141,99,1.98,122,1.901,127,2.113,128,2.595,143,3.209,157,3.751,159,2.41,164,2.348,173,1.552,175,2.823,180,2.368,206,1.786,222,2.864,223,1.8,235,5.545,244,2.013,325,4.209,333,1.502,345,3.353,391,5.856,396,4.043,398,6.843,399,5.456,400,4.919,565,1.901,631,3.239,638,4.209,684,2.676,1868,4.919,1953,6.17,1954,6.17]],["t/533",[49,2.991,97,2.916,116,6.543,206,2.631,223,2.651,235,5.871,236,5.186,295,4.13,345,3.55,349,3.355,801,2.868]],["t/535",[102,1.462,114,2.272,164,3.587,167,1.305,173,1.666,180,2.923,235,4.573,236,4.04,270,4.365,333,1.613,391,4.829,392,4.93,396,3.335,399,4.499,427,4.499,436,3.994,612,3.866,782,3.584,783,3.335,787,5.459,801,2.234,1581,6.143,1955,6.515,1956,7.079,1957,7.079,1958,6.515]],["t/537",[1,2.452,7,0.944,9,0.667,21,1.456,26,2.578,31,2.013,86,1.621,89,4.298,99,2.252,101,2.951,106,2.682,151,2.606,167,1.554,186,1.367,204,2.643,206,1.352,223,2.047,225,2.217,232,3.755,234,2.987,241,2.916,244,3.674,276,3.805,284,2.168,312,2.5,333,0.711,338,1.988,348,2.697,377,4.973,393,3.069,431,3.497,475,2.88,518,3.873,589,3.822,605,4.266,606,2.251,649,3.069,1050,2.968,1414,5.411,1959,5.594,1960,4.67,1961,4.67,1962,4.67,1963,4.67,1964,4.298,1965,4.053,1966,3.497]],["t/539",[9,1.329,11,2.559,101,3.909,173,1.462,225,3.29,241,2.881,244,3.422,272,2.363,276,3.774,284,3.218,333,1.055,338,3.957,454,3.368,475,4.275,492,3.218,589,2.638,597,2.68,605,4.215,1048,4.407,1050,4.407,1051,4.215,1062,4.339,1147,4.73,1338,3.451,1621,3.957,1959,5.527,1967,5.745,1968,5.745]],["t/541",[9,0.971,101,2.857,167,1.69,173,1.068,241,2.823,276,3.723,333,1.034,805,3.439,1048,4.318,1049,4.388,1050,4.318,1051,4.13,1052,4.73,1053,4.73,1054,4.73,1055,4.73,1056,4.73,1057,4.73,1058,4.73,1059,4.73,1060,4.73,1061,4.73,1062,4.251,1063,4.73,1064,4.73,1065,4.73,1066,4.73,1067,4.73,1068,4.73,1069,4.73,1070,4.73,1071,4.73,1072,4.73,1621,3.877,1792,5.087]],["t/543",[9,1.678,21,2.438,31,3.371,64,4.156,101,4.678,102,2.297,106,2.489,111,4.363,204,2.945,223,2.281,272,2.666,810,5.445,1033,3.988,1453,5.139]],["t/545",[9,1.682,11,2.613,22,2.553,49,3.488,101,4.457,102,1.462,173,1.482,241,2.942,333,1.613,454,3.439,492,3.286,834,4.499,1033,2.538,1102,3.752,1338,3.524,1370,5.04,1371,5.04,1621,4.04,1969,9.426,1970,7.079]],["t/547",[9,1.531,101,3.041,102,1.493,104,3.333,173,1.503,223,2.109,333,1.63,805,4.84,810,5.036,1073,4.752,1102,5.067,1370,6.806,1371,6.806,1621,5.456,1792,7.159,1971,7.231,1972,7.231,1973,7.231,1974,7.231,1975,7.231]],["t/549",[5,2.864,9,1.393,11,3.598,12,4.074,38,4.625,565,3.002,801,3.076]],["t/551",[8,3.384,22,3.019,127,3.816,146,4.836,180,2.541,574,5.601,801,2.908,1221,6.684]],["t/553",[127,2.952,173,1.683,244,3.492,277,6.288,278,6.288,279,6.288,280,6.874,694,4.18,801,3.84,1221,5.171]],["t/555",[127,2.741,167,1.883,244,3.67,286,4.775,570,5.011,571,6.683,801,3.223,1221,4.802,1976,8.863,1977,9.76,1978,8.006]],["t/557",[7,2.252,8,3.384,22,2.496,56,4.882,180,2.541,521,6.164,694,3.599,801,3.517,1235,6.899]],["t/559",[7,1.768,22,1.719,102,1.31,113,1.387,122,2.696,146,3.331,167,2.089,173,1.376,244,3.524,286,4.092,306,2.354,455,2.996,801,3.576,884,3.621,1090,4.169,1604,4.893,1976,5.506,1977,5.506,1979,6.344,1980,6.344,1981,6.344,1982,6.344,1983,6.344,1984,6.344,1985,6.344,1986,6.344,1987,6.344,1988,5.839]],["t/561",[5,2.823,7,1.941,36,7.194,102,1.984,103,3.461,145,5.616,146,5.043,1411,7.96]],["t/563",[5,2.106,7,0.971,22,1.301,52,1.996,56,2.546,64,3.926,66,3.705,102,0.992,103,4.181,112,2.881,114,2.3,139,3.597,167,1.752,171,1.951,224,3.215,225,2.28,234,2.045,266,2.741,272,1.637,399,3.053,470,4.068,475,2.962,492,2.23,498,3.277,505,3.42,537,1.516,588,2.77,589,1.828,700,2.607,723,3.103,782,2.432,783,2.263,799,3.053,828,1.756,891,2.741,1026,3.83,1088,4.169,1258,3.103,1279,6.219,1424,3.006,1694,3.053,1928,7.102,1989,4.804,1990,4.804,1991,4.804,1992,4.804,1993,4.804,1994,4.804,1995,4.804,1996,4.804,1997,4.804,1998,4.804,1999,4.804,2000,4.804,2001,4.804]],["t/565",[4,4.882,5,2.707,9,1.317,21,2.872,119,4.748,127,3.154,146,4.836,162,4.129,206,2.667,1680,7.633,2002,7.104]],["t/567",[5,1.11,7,1.491,9,1.303,11,0.566,12,1.155,18,1.147,21,0.862,22,0.415,23,1.329,29,0.557,31,1.992,39,0.79,44,1.329,64,2.876,65,0.532,68,2.405,72,3.884,84,1.025,90,1.199,96,1.329,100,0.837,102,2.065,112,0.919,113,0.604,114,2.925,126,1.376,131,0.874,143,0.797,145,1.616,152,2.062,153,0.82,155,1.494,159,2.086,160,0.812,167,0.984,171,1.122,186,0.809,204,0.577,219,1.596,224,1.025,225,0.727,232,1.479,234,1.968,244,0.5,254,0.669,257,0.945,272,0.942,284,1.283,304,1.658,306,0.568,312,1.479,315,0.711,336,2.21,345,1.08,349,1.971,350,0.58,369,0.687,372,1.329,373,3.276,394,0.706,408,1.968,411,0.776,416,1.117,431,1.147,442,1.117,454,0.744,466,0.763,469,0.66,470,0.727,473,2.156,481,0.885,489,1.181,492,0.711,495,1.542,496,1.147,503,1.067,513,1.116,518,0.846,519,0.682,524,1.147,537,0.484,574,0.931,576,0.945,588,1.786,589,1.437,597,0.592,625,1.045,646,0.79,654,0.846,674,0.711,700,2.683,701,1.559,705,1.067,724,0.79,752,2.018,759,1.117,763,1.925,768,0.955,769,2.062,773,1.147,782,0.776,783,1.779,801,1.192,809,1.117,828,2.832,1033,2.645,1230,1.091,1231,2.131,1232,0.99,1234,4.42,1235,1.147,1241,1.117,1258,0.99,1418,1.181,1419,0.959,1420,1.181,1422,2.235,1423,2.245,1424,0.959,1453,1.816,1630,1.269,1647,2.203,1671,1.329,1674,1.091,1676,2.827,1677,1.147,1678,1.41,1692,1.147,1694,0.974,1700,1.221,1742,2.062,1766,1.41,1772,1.221,1806,2.398,1812,1.117,1822,1.269,1843,1.329,1918,2.398,1929,1.329,1936,1.181,1939,1.41,1959,2.203,2003,1.329,2004,1.532,2005,1.532,2006,2.764,2007,1.532,2008,1.532,2009,1.532,2010,1.532,2011,2.764,2012,3.776,2013,1.269,2014,1.532,2015,1.532,2016,1.532,2017,1.532,2018,1.532,2019,1.532,2020,1.532,2021,1.532,2022,1.532,2023,1.532,2024,1.532,2025,1.532,2026,2.764,2027,1.532,2028,1.532,2029,1.532,2030,1.532,2031,1.532,2032,1.532,2033,1.532,2034,1.532,2035,2.764,2036,1.329,2037,1.269,2038,1.41,2039,1.532]],["t/570",[5,2.148,7,1.477,9,1.045,47,2.753,68,2.951,70,3.952,72,4.078,99,2.346,104,3.369,231,4.124,255,3.952,266,4.172,267,7.022,295,3.322,345,3.761,411,4.875,464,5.828,654,4.034,723,4.722,771,5.828,1635,6.057,1680,6.057,1818,5.828,1870,5.637,2002,7.425,2040,6.343]],["t/574",[7,1.72,49,2.802,86,2.955,93,6.209,97,2.732,104,3.923,113,1.86,127,2.915,222,3.951,223,2.483,229,5.106,261,5.328,502,4.803,813,4.469,1384,7.387,1386,5.696,1541,7.834]],["t/576",[4,1.828,5,1.629,9,1.454,22,0.934,33,2.714,37,1.536,52,1.433,54,2.042,56,2.937,65,2.762,68,2.238,69,1.203,70,3.756,71,1.717,72,1.924,97,2.23,100,1.884,102,1.145,103,1.997,104,3.667,106,1.764,108,2.042,112,4.167,113,1.518,114,1.778,119,1.777,127,1.181,133,3.549,186,1.01,219,1.992,234,1.468,254,1.506,255,2.996,259,2.583,263,2.882,272,1.889,295,1.567,304,2.069,333,0.525,348,1.992,350,2.098,377,4.623,435,2.63,442,2.515,455,1.181,461,1.516,477,2.75,492,4.321,568,2.858,654,3.059,701,1.946,750,2.402,776,2.583,794,2.583,1091,2.66,1232,2.228,1258,2.228,1284,2.993,1331,2.402,1339,2.66,1423,1.675,1425,2.75,1546,2.75,1561,4.809,1562,2.993,1677,2.583,1695,2.515,1700,2.75,1773,2.858,1966,2.583,2041,2.858,2042,2.858,2043,2.993,2044,3.449,2045,3.449,2046,6.948,2047,3.449,2048,3.449,2049,2.858,2050,3.449,2051,3.449]],["t/578",[4,2.392,5,2.01,7,2.104,9,0.977,12,1.887,37,2.01,39,3.524,40,2.744,47,4.451,52,1.876,66,3.481,68,1.822,97,1.448,101,1.898,102,2.151,104,2.08,106,1.436,112,2.707,206,1.307,224,3.02,262,2.638,272,2.331,349,3.048,383,3.079,429,3.599,454,2.192,470,2.142,471,4.217,492,2.095,508,2.369,513,1.822,537,2.158,542,2.576,579,2.744,589,2.602,598,4.807,635,4.762,773,3.38,823,3.079,1031,2.916,1090,2.966,1232,2.916,1234,2.576,1543,3.917,1692,3.38,1700,5.452,2052,4.514,2053,3.74,2054,4.514,2055,4.514,2056,4.514,2057,4.514]],["t/580",[5,1.841,9,1.099,12,1.684,17,2.937,21,2.397,26,2.223,40,2.449,47,1.517,52,1.674,54,2.384,78,2.937,84,2.695,86,1.398,95,5.191,97,3.016,102,1.294,103,2.257,113,0.88,121,2.039,162,1.805,186,1.179,206,1.813,223,1.827,244,2.045,257,3.863,260,2.449,272,1.373,290,2.996,304,3.758,316,3.863,339,4.047,343,4.192,350,1.525,386,1.793,401,3.97,407,2.602,415,2.804,438,2.867,457,2.177,470,3.649,471,3.863,508,4.554,520,3.706,527,2.804,537,2.966,568,3.337,575,2.56,588,2.422,625,2.747,627,4.363,643,3.211,746,2.747,755,2.804,758,2.52,776,3.016,1222,2.695,1338,3.118,1429,2.075,1648,3.016,1696,3.495,1735,3.495,1866,3.495,2058,4.027,2059,3.495,2060,3.706,2061,4.027,2062,3.495,2063,4.027]],["t/582",[5,2.4,7,1.65,9,1.167,29,2.091,40,3.495,44,2.874,49,1.892,86,1.995,97,2.621,102,1.687,103,2.071,104,3.764,106,1.829,108,3.403,124,3.597,132,3.713,259,4.305,272,1.959,345,2.245,377,2.612,435,2.728,436,4.607,449,5.191,470,2.728,471,3.545,486,4.433,505,5.815,598,2.792,629,5.465,755,4.003,776,6.116,1233,4.583,1328,5.367,1338,4.065,1342,4.433,1638,4.003,1655,4.583,2002,4.433,2059,4.988,2064,5.748,2065,4.988]],["t/584",[5,2.935,7,1.562,8,3.668,9,1.427,22,2.094,39,3.984,121,3.914,124,4.838,139,5.789,180,2.132,265,6.163,301,6.405,565,3.407,800,4.266,1543,6.708,1560,8.274,2066,7.73,2067,7.73,2068,7.73]],["t/586",[5,2.46,7,1.203,9,0.851,21,1.856,54,3.523,64,3.458,65,2.066,69,2.075,86,2.066,97,1.91,104,2.743,106,1.894,116,3.523,122,2.578,127,2.038,151,4.67,180,2.309,222,2.763,223,2.441,274,4.098,329,5.71,337,4.341,338,3.563,345,2.325,396,2.803,402,3.983,436,3.358,469,2.565,475,3.67,479,5.829,565,1.833,584,2.337,799,3.783,800,3.285,816,3.04,1366,5.97,1546,4.745,2069,5.951,2070,5.951]],["t/588",[5,2.671,9,1.299,21,2.833,105,4.249,167,2.037,492,4.218,584,4.341,1338,4.523,2071,4.963,2072,4.963]],["t/590",[1,2.802,3,2.096,7,1.079,9,1.302,65,3.163,98,4.708,102,1.882,103,2.79,104,3.569,105,2.496,121,2.702,162,2.393,167,0.984,171,2.167,173,0.839,204,3.765,217,2.915,223,2.259,238,3.082,370,3.393,410,3.201,429,4.255,438,3.8,454,3.761,469,3.338,492,2.478,500,4.116,521,3.572,522,4.255,547,2.409,567,3.572,584,2.096,629,3.572,635,3.717,801,1.685,827,3.12,828,2.831,1328,3.508,1338,4.536,1428,4.632,1568,4.912,1928,4.422,1966,3.997,2073,3.717,2074,4.632,2075,5.337]],["t/592",[244,3.761,284,4.524,286,4.557,1338,6.109]],["t/594",[29,2.496,65,3.204,105,3.209,106,2.184,127,2.35,133,4.715,154,3.963,167,1.702,173,1.079,180,1.893,223,2.002,272,2.339,286,4.317,290,3.282,306,2.546,315,3.185,333,1.044,492,4.285,542,3.916,590,3.257,1338,4.595,2076,5.955,2077,5.955,2078,5.955,2079,9.232,2080,5.955,2081,6.862,2082,6.862,2083,5.955]],["t/596",[122,3.187,167,1.907,547,4.669]],["t/598",[7,1.742,64,3.562,145,5.04,240,5.882,261,5.396,272,3.966,455,2.952,547,3.891,566,6.418,575,5.48,597,3.332,686,6.649,687,7.144]],["t/600",[244,3.376,685,7.979,694,4.042]],["t/602",[22,2.336,127,2.952,180,2.378,222,4.002,240,7.3,272,2.939,566,5.171,685,8.252,805,4.365,936,6.004,2084,8.622,2085,8.622,2086,6.874,2087,8.622]],["t/604",[9,1.479,167,1.907,1768,7.366]],["t/606",[3,2.297,7,1.182,9,1.371,11,2.159,12,2.445,29,2.127,31,2.521,64,3.415,102,1.707,113,1.807,114,1.877,127,2.002,164,2.225,165,2.797,206,1.693,223,1.706,226,3.778,236,3.337,242,2.297,244,1.908,256,4.894,270,3.606,274,2.863,333,0.89,336,2.797,370,3.717,435,2.775,445,3.194,472,3.717,481,3.377,485,3.299,565,2.547,782,2.961,783,2.755,1033,2.964,1074,3.194,1368,3.717,1429,4.261,1616,2.863,1667,4.662,1668,3.989,1768,5.886,1771,4.51]],["t/608",[7,1.171,9,1.627,11,2.14,22,2.226,29,2.109,49,2.704,102,1.697,113,1.267,162,2.599,164,2.206,167,1.759,173,1.292,206,1.678,236,3.309,256,3.432,270,3.575,333,0.882,345,2.265,537,1.83,576,3.575,584,2.277,594,2.253,700,2.109,734,4.037,768,3.587,813,3.043,1033,2.946,1074,3.166,1075,2.839,1076,2.862,1077,2.752,1423,2.816,1701,4.471,1742,3.166,1761,3.432,1768,4.128,1769,3.685,1770,4.622,1771,4.471]],["t/610",[9,1.248,173,1.373,236,4.984,333,1.329,594,3.394,768,3.017,1042,5.844,1074,4.77,1075,4.276,1076,4.311,1077,4.145,1078,5.642,1768,6.218,1780,6.963,1791,7.579]],["t/612",[5,2.502,9,1.217,21,2.654,97,2.732,122,3.27,167,2.233,245,4.512,455,2.915,548,4.427,816,4.348,1366,5.249,2071,4.649,2072,4.649]],["t/614",[5,0.677,7,0.8,11,1.462,16,1.68,21,0.718,22,0.624,38,1.879,47,2.623,65,0.799,68,2.103,69,1.381,70,2.141,71,3.078,86,1.374,92,1.258,97,2.759,101,2.19,102,1.571,103,1.877,106,1.26,111,1.285,112,1.381,122,2.343,155,1.245,159,0.9,167,0.425,171,0.935,173,0.819,186,0.674,206,0.667,208,1.725,209,1.776,223,1.155,234,0.981,254,1.006,272,1.775,276,1.608,306,2.294,318,2.51,333,0.603,336,1.894,338,1.686,340,5.696,350,0.872,369,4.18,376,1.541,377,4.237,385,1.776,388,1.11,401,1.054,411,2.005,427,1.464,435,1.093,436,1.299,446,4.52,450,3.054,455,3.463,457,4.112,461,3.061,464,1.836,465,1.908,467,1.725,468,1.68,473,0.93,486,1.776,495,2.209,511,2.965,519,1.763,539,1.541,548,2.059,565,1.604,566,1.381,568,1.908,604,1.836,612,2.163,613,2.757,614,1.971,615,2.701,617,1.999,627,1.604,628,2.12,629,1.541,630,2.12,676,3.054,801,0.727,816,2.022,828,1.447,1020,1.464,1032,1.514,1344,2.819,1446,1.776,1596,1.908,1646,1.999,1755,3.054,1927,1.836,2073,1.604,2088,2.303,2089,2.303,2090,5.208,2091,2.303,2092,2.303,2093,2.303,2094,2.12,2095,2.12,2096,6.183,2097,3.644,2098,3.436,2099,2.303,2100,2.303]],["t/616",[455,4.123]],["t/618",[71,4.463,167,1.653,173,1.41,276,3.641,306,3.327,377,4.982,455,3.07,460,2.889,519,3.992,626,6.715,852,6,2101,8.966]],["t/621",[9,1.542,21,2.723,186,2.557,206,2.528,333,1.329,565,2.69,594,3.394,595,5.281,596,6.37,600,5.466,684,3.789,1035,5.386,1254,5.958]],["t/623",[9,1.58,167,1.675,173,1.738,333,1.383,594,3.531,595,4.45,596,6.628,600,5.688,1035,5.604,1254,6.199]],["t/625",[9,1.373,167,1.771,173,1.511,333,1.462,594,3.733,595,4.704,596,7.007,2102,8.841]],["t/627",[0,4.77,1,4.48,5,2.783,6,4.275,9,1.019,11,3.151,12,2.98,50,3.803,122,2.629,124,2.985,156,6.019,160,5.841,164,2.712,166,4.863,167,0.879,180,1.966,195,7.058,196,5.683,197,4.389,198,4.139,199,4.389,200,4.22,201,3.952,202,5.119,203,3.081,204,1.796,206,1.381,207,4.389,208,3.572,209,7.303,210,6.56,211,3.803,212,3.321,213,2.941,214,2.23,215,3.134,216,3.803,217,2.605,218,3.952,219,2.754,2103,4.77]],["t/629",[5,1.268,6,1.528,8,0.936,9,0.802,11,2.73,12,1.804,20,2.492,21,0.794,29,1.57,65,1.498,82,3.745,86,2.566,97,0.817,100,2.357,104,1.174,113,0.557,119,1.313,121,1.29,127,1.922,128,1.815,143,2.244,156,1.619,160,1.35,164,3.056,165,5.093,166,1.738,167,0.47,173,0.883,175,3.024,176,3.167,177,1.896,180,2.04,183,1.965,184,2.031,186,1.263,187,2.111,189,3.328,190,1.646,200,1.508,204,1.625,206,0.737,212,1.774,213,1.571,214,1.191,215,1.674,220,3.441,221,1.738,222,1.183,223,1.927,224,1.705,225,1.209,226,2.788,227,2.344,228,2.111,229,1.528,230,1.571,231,1.437,232,1.363,233,1.965,234,1.085,235,1.646,236,2.463,237,1.646,238,1.471,239,1.619,240,1.738,241,1.059,242,1.001,243,2.031,244,1.832,245,1.35,246,2.211,247,3.971,248,3.971,249,1.858,250,2.211,251,2.344,252,1.858,253,3.035,254,2.885,255,2.333,256,2.555,257,2.661,258,2.031,259,3.232,260,2.624,261,2.701,262,2.523,263,2.244,264,4.652,265,2.031,266,2.463,267,3.147,268,2.111,269,2.344,270,1.571,271,2.111,272,0.868,273,1.646,274,2.113,275,2.111,276,2.28,277,1.858,278,1.858,279,1.858,280,4.476,281,1.738,282,2.111,283,3.576,284,1.183,285,2.031,286,1.191,287,2.111,288,2.111,289,2.111]],["t/631",[5,3.196,11,4.014,122,2.726,160,4.69,167,1.631,204,3.333,213,5.457,214,4.137,215,5.815,216,7.055,217,4.833,218,7.332]],["t/633",[5,2.272,8,3.668,9,1.427,11,3.686,29,4.024,156,7.031,160,6.416,167,1.425,196,6.163,204,2.911,213,4.767,214,3.614,215,5.08,219,4.464]],["t/635",[1,1.888,5,1.684,11,3.286,12,1.504,29,3.238,31,1.55,39,1.853,65,1.248,69,1.254,86,2.48,100,1.964,113,0.786,119,1.853,121,1.821,127,1.231,128,2.41,160,4.717,164,3.387,165,4.94,166,3.91,167,0.663,172,2.077,173,1.124,175,3.729,176,2.029,178,2.407,180,1.581,183,2.774,184,2.867,186,1.678,190,2.323,200,3.393,204,2.159,206,1.041,213,2.218,214,1.682,215,2.363,223,1.049,226,3.702,228,2.98,229,2.157,230,2.218,231,2.029,232,1.925,233,2.774,234,1.531,235,2.323,236,2.052,237,2.323,238,2.077,239,2.286,240,2.453,241,1.495,242,1.413,243,2.867,244,1.174,245,1.906,252,2.623,270,2.218,271,2.98,274,2.806,275,2.98,276,2.901,277,2.623,278,2.623,279,2.623,280,5.696,281,2.453,282,2.98,283,4.749,284,1.669,285,2.867,286,1.682,287,2.98,288,2.98,289,2.98,290,1.72,291,2.561,292,3.31,293,2.129,294,2.98]],["t/637",[5,1.919,8,4.016,9,0.933,11,3.295,21,2.036,65,2.266,72,3.643,86,2.266,97,2.095,104,3.009,127,2.236,160,5.794,167,1.204,173,1.027,178,4.369,180,2.805,186,2.613,200,3.865,204,2.459,213,4.026,214,3.053,215,4.291,220,7.116,221,4.454,222,3.031,223,2.603,224,4.369,225,3.099,295,2.967]],["t/640",[5,1.634,9,1.333,11,2.052,21,2.486,32,3.101,39,2.864,172,5.384,186,2.73,206,2.949,249,4.054,276,2.257,308,4.604,333,0.846,345,3.115,349,2.052,486,4.286,510,2.767,565,1.712,597,3.604,643,4.431,684,2.411,700,2.022,701,5.747,702,2.891,703,3.005,706,5.971,707,3.792,708,6.36,709,3.792,710,3.792,711,3.87,712,3.87,713,3.87,714,3.87,715,3.87,1098,3.653,1124,3.957,1755,4.286,1902,4.286]],["t/642",[9,1.404,21,1.906,49,2.012,173,1.341,333,0.93,510,3.043,597,4.871,700,3.103,701,4.812,702,3.18,703,3.305,704,3.374,705,4.257,706,9.438,707,4.171,708,4.171,709,4.171,710,4.171,711,4.257,712,4.257,713,4.257,714,4.257,715,4.257]],["t/644",[9,1.329,49,2.282,173,1.462,333,1.055,510,3.451,700,3.382,701,5.244,702,3.606,703,3.748,704,3.827,707,4.73,708,4.73,709,4.73,710,4.73,711,4.828,712,4.828,713,4.828,714,4.828,715,4.828,936,4.828,1046,4.275,1781,6.016,1782,6.016,1783,6.016,1784,6.016,1785,6.016,1786,6.016,1787,6.016,1788,6.016,1789,6.016,1790,6.016]],["t/646",[21,2.953,167,1.746,245,5.02,460,3.651,1102,5.02,1366,5.841,2071,5.173,2072,5.173]],["t/648",[7,2.199,9,1.555,38,3.546,65,2.593,102,2.473,126,4.862,204,2.814,304,4.482,388,3.601,469,4.211,565,2.302,649,4.91,1033,2.679,1045,4.216,1221,4.482,1269,6.191,1405,6.191,2104,6.877]],["t/650",[9,1.299,49,2.991,102,2.46,167,1.675,173,1.738,333,1.383,460,2.928,1100,4.913,1102,4.816]],["t/652",[102,1.78,173,1.83,333,1.312,460,2.778,1100,4.661,1102,6.167,1608,6.874,1609,8.531,1610,6.874,1611,6.874,1612,6.874]],["t/654",[9,1.393,167,2.338,594,3.787,768,3.367]],["t/656",[7,1.699,9,1.644,22,2.853,49,2.767,102,2.375,132,5.43,223,2.452,537,2.653,565,2.589,723,5.43,768,2.904,1033,3.014,1544,6.131]],["t/658",[9,1.692,49,2.951,102,1.852,167,2.021,173,1.724,537,2.83,594,3.484,768,3.098,1076,4.426]],["t/660",[9,1.354,167,2.089,173,1.489,594,3.68,768,3.272,1076,5.594,2105,9.471]],["t/662",[21,2.796,122,2.762,167,2.274,245,4.752,460,3.532,1100,4.847,1366,5.529,2071,4.897,2072,4.897]],["t/664",[7,1.618,9,1.46,22,3.047,37,3.565,49,2.635,65,2.779,102,2.446,167,1.476,173,1.259,333,1.218,338,3.408,345,3.128,460,2.58,469,3.451,584,3.144,1100,4.328]],["t/666",[9,1.105,11,2.854,49,2.544,102,2.284,104,3.562,113,1.689,128,3.251,159,3.02,173,1.57,206,2.237,223,2.255,333,1.176,449,4.913,460,2.491,469,3.332,470,3.669,813,4.058,1100,4.179,1102,4.097,1104,4.411,1105,5.698]],["t/668",[102,1.78,173,1.83,333,1.312,460,2.778,1100,4.661,1102,6.167,1608,6.874,1609,8.531,1610,6.874,1611,6.874,1612,6.874]],["t/670",[38,3.011,102,1.807,157,3.857,167,1.17,173,1.575,274,3.107,276,2.576,284,2.945,307,5.058,333,0.966,454,3.082,455,2.172,460,2.044,570,3.971,571,3.579,765,4.517,813,3.331,886,4.393,887,5.477,888,4.393,1096,5.397,1099,5.751,1100,3.43,1102,4.638,1104,3.621,1105,3.621,2106,6.344,2107,6.344,2108,6.344,2109,6.344,2110,6.344,2111,6.344,2112,6.344,2113,8.054]],["t/673",[9,1.593,22,3.019,102,2.301,112,5.525,565,2.838,575,5.855,723,5.951,768,3.183]],["t/675",[9,1.698,22,2.447,49,2.973,102,1.865,114,2.457,162,2.355,167,1.411,173,1.204,290,3.661,333,1.165,345,2.053,537,2.416,584,3.007,594,2.975,700,1.911,768,4.025,769,4.181,806,4.475,1018,3.24,1033,1.884,1075,2.573,1076,2.594,1077,3.633,1423,3.719,1701,4.052,1742,4.181,1761,4.532,1803,5.031,1804,5.031]],["t/677",[21,2.833,122,2.799,167,2.284,245,4.816,460,3.561,519,4.046,2071,4.963,2072,4.963]],["t/679",[3,2.469,7,1.757,9,0.898,21,1.96,27,4.288,33,3.078,37,2.799,65,3.018,71,4.328,97,2.79,127,2.152,133,3.21,145,3.674,186,2.546,204,2.367,222,2.918,270,3.876,276,3.53,306,2.332,350,2.379,377,2.856,398,5.011,415,4.377,455,2.152,492,2.918,508,3.299,518,4.799,519,5.028,565,2.678,694,2.455,745,4.847,762,5.454,2114,6.285]],["t/681",[519,5.362]],["t/683",[20,4.363,70,4.085,71,4.898,159,2.952,163,5.38,167,1.393,173,1.188,276,3.068,306,2.803,350,2.861,377,4.972,411,3.826,455,2.587,460,2.435,517,5.827,519,4.381,626,5.659,694,3.844,731,5.38,2115,6.954,2116,7.556,2117,7.556]],["t/685",[21,2.796,122,2.762,167,2.274,245,4.752,460,3.532,1366,5.529,1617,7.429,2071,4.897,2072,4.897]],["t/687",[7,1.861,9,1.593,22,2.496,49,3.032,102,1.902,333,1.402,460,2.968,584,3.618,1033,3.303,1616,4.511]],["t/689",[9,1.567,49,2.951,102,2.264,104,4.132,223,2.615,333,1.668,460,2.889,1033,3.215,1616,4.39,1617,7.429]],["t/691",[9,1.299,167,1.675,173,1.429,333,1.682,460,2.928,473,3.669,1616,5.412,1617,7.53,2118,11.052]],["t/693",[21,2.833,122,2.799,167,2.284,245,4.816,460,3.561,519,4.046,2071,4.963,2072,4.963]],["t/695",[159,4.105,519,4.678]],["t/697",[519,5.601]],["t/699",[21,2.912,167,2.072,245,4.95,492,4.336,584,3.668,1338,5.593,2071,5.101,2072,5.101]],["t/701",[7,1.969,86,3.383,223,2.843,492,5.35,565,3.002,1338,4.851]],["t/703",[244,3.429,492,4.877]],["t/705",[29,2.688,65,3.366,99,2.371,106,2.352,133,4.953,167,1.362,173,1.162,180,2.038,223,2.155,272,2.519,290,3.534,306,2.742,333,1.125,492,3.43,542,4.217,805,4.91,1338,4.827,2076,6.413,2077,6.413,2078,6.413,2080,6.413,2083,6.413,2119,7.39,2120,7.39,2121,7.39]],["t/707",[21,2.796,97,2.877,122,2.762,167,2.021,173,1.41,455,3.07,460,2.889,547,4.947,1366,5.529,2071,4.897,2072,4.897]],["t/709",[21,2.872,47,3.47,97,2.956,150,6.559,173,1.449,206,2.667,272,3.14,455,3.154,460,2.968,544,4.882,563,6.164]],["t/711",[9,1.335,65,3.242,97,3.606,173,1.767,204,3.518,455,3.847,460,3.01]],["t/713",[9,1.539,65,3.737,86,3.737,97,2.346,102,1.51,167,1.348,173,1.693,204,4.055,377,3.322,427,4.646,435,3.469,455,3.686,460,3.469,2122,7.31,2123,7.31,2124,7.31]],["t/715",[21,2.833,122,2.799,167,2.284,245,4.816,460,3.561,1389,6.199,2071,4.963,2072,4.963]],["t/717",[7,0.795,29,1.431,31,1.695,38,1.867,47,1.481,54,2.328,64,1.625,65,1.365,72,2.194,77,3.259,99,1.262,105,1.839,106,1.957,113,2.495,133,2.009,158,3.136,164,1.497,167,0.725,171,1.597,186,1.801,204,1.481,206,2.192,223,1.794,229,7.054,234,1.674,308,2.271,333,0.599,377,1.787,411,1.991,431,2.945,461,1.728,470,1.867,473,3.458,493,2.945,496,5.672,498,2.683,502,4.273,518,2.171,519,1.751,575,2.5,579,2.391,619,2.391,665,3.136,680,4.374,723,2.541,752,1.717,763,2.739,773,2.945,875,4.903,898,3.259,1338,1.958,1386,5.068,1389,2.683,1429,2.027,1818,3.136,1885,5.66,2125,5.841,2126,3.933,2127,3.933,2128,3.933,2129,3.033,2130,3.933,2131,3.619,2132,3.619,2133,3.619,2134,3.619,2135,3.619]],["t/719",[680,5.796,1389,8.475,2125,7.741]],["t/721",[12,2.343,29,2.918,72,3.127,97,2.574,99,1.798,105,2.621,106,2.981,113,2.365,127,1.919,131,3.198,133,2.862,158,4.468,165,2.68,167,1.033,179,3.507,186,1.641,223,2.339,234,3.415,284,2.601,333,0.853,360,6.006,368,4.863,377,2.547,445,3.061,502,4.525,505,3.99,518,3.093,619,3.407,680,5.409,805,2.838,812,3.562,856,4.322,887,3.507,1099,3.683,1147,3.823,1389,5.472,1425,4.468,2125,7.224,2136,5.604,2137,5.604,2138,5.604]],["t/723",[9,1.393,167,2.338,768,3.367,1762,5.926]],["t/725",[7,0.855,9,1.273,22,1.763,64,1.747,90,1.835,102,2.096,113,0.924,114,1.357,119,2.18,128,1.779,132,2.732,157,4.822,159,1.652,171,3.22,206,1.224,223,1.234,225,2.007,234,2.77,266,4.526,295,1.922,344,2.386,345,2.542,349,1.561,392,2.945,466,2.105,473,1.708,508,2.22,513,1.708,537,3.204,565,1.303,576,2.608,590,2.007,597,1.635,598,3.161,674,1.963,752,3.888,768,1.461,801,3.034,828,4.179,1033,2.844,1109,3.372,1413,5.041,1417,2.945,1419,4.073,1429,2.18,1436,3.758,1692,3.168,1693,3.893,1694,2.688,1762,3.957,1763,2.572]],["t/728",[9,1.694,22,2.434,49,2.957,102,1.362,162,2.955,164,3.419,167,1.656,173,1.413,244,2.152,333,1.003,537,2.081,584,2.59,590,4.264,594,2.562,597,2.548,700,2.399,768,3.531,1075,3.228,1076,3.255,1077,3.129,1423,3.203,1575,4.191,1668,4.498,1742,3.601,1761,3.903,1762,4.009,1763,4.009]],["t/730",[9,1.158,44,2.851,167,1.897,173,1.274,333,1.233,594,3.148,597,3.132,768,2.799,936,5.642,1075,5.039,1076,4,1077,3.845,1102,4.294,1106,4.86,1668,5.527,1762,4.926,1763,4.926,1835,6.068,2139,8.102]],["t/733",[9,1.694,22,2.434,49,2.957,102,1.362,162,2.955,164,3.419,167,1.656,173,1.413,244,2.152,333,1.003,537,2.081,584,2.59,590,4.264,594,2.562,597,2.548,700,2.399,768,3.531,1075,3.228,1076,3.255,1077,3.129,1368,4.191,1423,3.203,1575,4.191,1742,3.601,1761,3.903,1762,4.009,1763,4.009]],["t/735",[9,1.187,167,1.927,173,1.306,333,1.263,594,3.226,597,3.209,768,2.868,936,5.782,1075,5.117,1076,4.098,1077,3.94,1102,4.4,1106,4.98,1368,5.277,1762,5.048,1763,5.048,1835,6.217]],["t/738",[9,1.557,11,2.916,22,2.14,49,3.155,102,0.868,114,2.535,164,2.464,167,1.636,173,1.713,190,2.715,244,1.372,284,1.951,286,1.965,290,2.01,333,1.351,349,1.552,402,2.813,473,4.759,537,1.327,590,3.074,594,1.633,597,1.625,700,2.874,752,2.827,768,2.729,769,2.296,806,2.457,1075,3.171,1077,1.995,1090,2.762,1098,2.762,1423,2.042,1616,2.058,1619,2.427,1742,2.296,1761,2.488,1762,2.556,1763,2.556,1803,2.762,1804,2.762,1810,4.256,1811,5.734,1813,3.648,1814,2.867,1815,2.813]],["t/740",[9,0.763,167,0.984,173,1.572,333,1.521,473,3.679,590,3.675,594,3.885,768,3.149,805,2.702,905,3.8,1075,3.792,1077,4.745,1078,3.448,1102,2.829,1106,3.201,1466,6.174,1616,2.613,1619,3.082,1762,4.708,1763,4.708,1780,4.255,1801,4.846,1810,5.089,1811,3.448,1814,3.641,1815,3.572,1831,6.174,1832,6.416,1833,4.632,1834,6.416,1835,3.997,1836,4.632,1837,4.632,1838,4.632,1839,4.632,1840,4.632,1841,4.632,1842,4.632]],["t/742",[21,2.723,122,2.69,167,2.315,245,4.629,460,2.814,1105,6.155,1117,5.466,1366,5.386,2071,4.77,2072,4.77]],["t/744",[7,0.809,22,1.084,38,1.9,52,1.664,64,1.654,65,1.389,74,7.656,97,3.681,113,2.169,114,3.186,119,2.063,121,2.027,131,2.285,133,2.045,157,3.791,160,2.122,162,2.795,186,1.826,232,2.142,234,1.704,237,2.586,244,1.306,266,4.371,276,1.625,284,1.858,293,2.37,338,1.704,349,1.478,350,1.515,388,3.692,401,2.854,454,1.945,514,3.317,536,2.285,579,6.036,605,2.434,606,1.929,731,4.44,732,3.317,746,2.731,783,2.937,1018,3.846,1090,2.631,1094,4.67,1117,5.412,1422,2.37,1424,2.505,1429,2.063,1674,2.85,1869,3.192,2073,2.788,2140,3.317,2141,3.684,2142,3.684,2143,3.317,2144,5.739,2145,3.684,2146,3.684,2147,3.684,2148,3.684]],["t/746",[102,1.578,167,1.827,173,1.73,276,3.103,333,1.163,460,2.463,601,6.112,1100,4.131,1102,5.831,1104,4.361,1105,4.361,1117,4.783,1261,5.322,1608,6.093,1609,7.902,1610,6.093,1611,6.093,1612,6.093,1613,6.332]],["t/748",[9,1.393,167,2.338,768,3.367,1763,5.926]],["t/750",[1,2.992,9,1.16,22,2.561,90,2.472,99,1.829,102,2.249,113,1.246,114,1.829,119,2.937,128,2.397,159,2.226,206,1.65,225,2.705,234,2.426,266,3.252,388,2.747,473,2.301,513,2.301,537,2.562,565,1.756,590,2.705,597,2.203,674,2.646,752,4.128,768,1.969,801,3.437,828,3.981,1033,2.911,1413,3.623,1419,5.917,1429,2.937,1436,5.46,1763,3.465]],["t/752",[9,1.694,22,2.434,49,2.957,102,1.362,162,2.955,164,3.419,167,1.656,173,1.413,244,2.152,333,1.003,537,2.081,584,2.59,590,4.264,594,2.562,597,2.548,700,2.399,768,3.531,1075,3.228,1076,3.255,1077,3.129,1368,4.191,1423,3.203,1575,4.191,1742,3.601,1761,3.903,1762,4.009,1763,4.009]],["t/754",[9,1.187,167,1.927,173,1.306,333,1.263,594,3.226,597,3.209,768,2.868,936,5.782,1075,5.117,1076,4.098,1077,3.94,1102,4.4,1106,4.98,1368,5.277,1762,5.048,1763,5.048,1835,6.217]],["t/757",[7,2.2,8,3.257,9,0.924,22,2.741,31,2.787,54,3.828,102,1.831,113,1.413,128,2.72,153,4.745,171,3.6,177,3.896,180,3.146,186,2.596,336,3.092,537,2.041,565,2.731,588,2.499,589,2.461,598,4.307,684,2.805,723,4.177,828,3.699]],["t/759",[9,0.858,49,2.772,102,1.24,113,1.841,167,1.553,173,1.658,180,1.656,244,3.175,333,1.282,338,4.142,537,3.505,588,3.255,589,3.205,594,3.273,595,4.124,596,6.143,598,5.743,606,2.894,828,3.079,1234,4.806,1453,3.946,2149,5.526]],["t/761",[9,1.001,113,1.531,167,1.726,173,1.472,180,1.932,333,1.424,588,2.708,589,2.666,594,4.096,595,3.43,596,5.109,598,4.547,828,2.561,1037,4.095,1043,5.109,1131,4.878,1132,4.878,1134,4.878,1137,4.878,1682,6.447,1683,5.109,1684,5.109,1685,5.109,1686,5.109,1687,5.109,1688,5.109,1689,5.109,1690,5.109]],["t/764",[9,1.482,21,2.557,47,3.089,102,1.694,128,3.449,159,3.204,186,2.401,333,1.248,508,4.305,513,3.311,537,2.588,565,2.526,594,3.187,595,4.016,684,3.558,1031,5.298,1035,5.057,1039,5.389,1045,4.627]],["t/766",[1,3.395,3,3.482,9,1.267,99,3.494,102,1.335,113,2.211,167,1.192,173,1.394,306,2.399,323,3.069,333,0.984,587,3.192,588,3.911,589,3.85,590,3.069,594,2.513,595,3.166,597,2.499,606,3.116,1031,5.728,1035,3.988,1036,3.78,1038,4.25,1039,4.25,1041,3.932,1234,5.774,1681,4.503]],["t/768",[9,1.172,99,2.632,113,1.792,173,1.29,333,1.248,587,4.048,588,3.17,589,3.121,594,3.187,595,4.016,597,3.17,814,5.133,887,5.133,1034,5.839,1035,5.057,1036,4.794,1037,4.794,1038,5.389,1039,5.389,1041,4.986]],["t/771",[7,2.139,8,3.113,9,0.866,22,2.868,31,2.612,54,3.587,90,2.628,102,1.75,113,1.324,128,2.548,153,4.536,177,3.724,180,3.074,186,2.481,336,2.897,345,2.367,466,3.016,537,1.912,565,2.611,588,2.342,589,2.305,598,4.748,684,2.628,723,3.914,801,2.675,828,4.073]],["t/773",[9,0.702,49,2.397,102,1.014,113,2.099,167,1.343,173,1.51,180,1.354,244,3.507,333,1.108,338,4.575,537,3.606,588,3.712,589,3.655,594,2.83,595,3.566,598,5.853,600,4.558,606,3.51,828,3.511,1234,5.481,1453,4.786,2149,4.518]],["t/775",[9,0.808,113,1.763,167,1.735,173,1.269,180,1.559,333,1.228,588,3.119,589,3.07,594,3.657,595,3.951,598,3.919,600,5.05,828,2.95,1037,4.717,1042,3.782,1043,4.122,1131,5.619,1132,3.935,1134,3.935,1137,5.619,1142,4.358,1683,4.122,1684,4.122,1685,4.122,1686,4.122,1687,4.122,1688,4.122,1689,4.122,1690,4.122,1702,5.201,1703,5.201,1704,5.201,1705,5.201,1706,5.201,1707,5.201,1708,5.201,1709,5.201,1710,5.201,1711,5.201,1712,5.201,1713,5.201]],["t/778",[9,1.482,21,2.557,47,3.089,102,1.694,128,3.449,159,3.204,186,2.401,333,1.248,508,4.305,513,3.311,537,2.588,565,2.526,594,3.187,595,4.016,684,3.558,1031,5.298,1035,5.057,1038,5.389,1045,4.627]],["t/780",[1,3.395,3,3.482,9,1.267,99,3.494,102,1.335,113,2.211,167,1.192,173,1.394,306,2.399,323,3.069,333,0.984,587,3.192,588,3.911,589,3.85,590,3.069,594,2.513,595,3.166,597,2.499,606,3.116,1031,5.728,1035,3.988,1036,3.78,1038,4.25,1039,4.25,1041,3.932,1234,5.774,1681,4.503]],["t/782",[9,1.172,99,2.632,113,1.792,173,1.29,333,1.248,587,4.048,588,3.17,589,3.121,594,3.187,595,4.016,597,3.17,814,5.133,887,5.133,1034,5.839,1035,5.057,1036,4.794,1037,4.794,1038,5.389,1039,5.389,1041,4.986]],["t/784",[5,3.131,7,1.446,21,2.231,44,2.518,122,2.924,167,1.319,173,1.493,202,5.131,290,3.421,308,4.131,390,4.702,455,2.45,549,7.128,564,4.892,666,4.547,717,4.622,719,4.787,1366,4.412,2071,3.907,2072,3.907,2150,6.584,2151,5.704,2152,5.928,2153,5.358]],["t/786",[21,2.759,65,3.071,69,3.085,97,2.839,122,2.726,173,1.392,455,3.03,461,3.888,549,5.921,563,5.921,565,2.726,717,5.716,719,5.921,1659,6.3]],["t/788",[9,1.299,69,3.169,173,1.873,455,3.784,545,5.13,549,6.081,717,5.871,719,6.081]],["t/790",[9,1.417,86,3.44,167,1.409,173,1.559,455,3.394,515,4.524,545,4.601,549,5.114,613,6.902,614,4.934,615,6.762,717,6.403,719,6.633,2154,7.642,2155,7.642,2156,7.033]],["t/792",[21,2.688,122,2.656,167,2.35,245,4.569,460,3.448,888,4.328,1105,4.92,1366,5.317,2071,4.709,2072,4.709]],["t/794",[7,2.29,22,2.566,114,3.039,333,1.441,460,3.052,694,3.7,783,4.462,1105,5.405]],["t/796",[114,3.27,694,3.98,783,4.8,888,5.115]],["t/798",[167,1.878,806,5.956,807,6.111,888,5.115]],["t/801",[7,1.734,9,0.882,22,2.891,52,2.564,99,1.98,102,1.773,103,3.093,113,1.348,146,5.182,154,3.563,206,2.485,234,3.654,244,3.221,263,3.209,466,3.071,501,4.919,537,1.947,565,1.901,584,2.423,588,2.385,589,4.061,590,2.928,597,2.385,598,2.997,606,2.974,629,4.129,684,4.282,801,1.947,909,4.62,1655,4.919]],["t/804",[9,1.158,99,2.6,102,2.125,167,1.897,173,1.618,206,2.345,244,2.644,333,1.566,537,3.248,589,3.916,590,3.845,594,3.148,595,3.967,597,3.132,598,3.936]],["t/806",[99,3.461,103,3.147,167,1.61,173,1.373,180,2.409,333,1.329,584,3.43,586,5.17,589,4.104,590,4.145,597,3.376,1438,7.579,1439,7.579]],["t/808",[9,1.023,99,2.296,113,2.074,173,1.125,323,3.395,333,1.089,587,3.532,588,3.669,589,3.612,594,2.78,595,3.503,597,2.765,598,3.475,600,4.478,828,2.615,1037,4.182,1042,4.787,1131,4.982,1132,4.982,1134,4.982,1137,4.982,1683,5.218,1684,5.218,1685,5.218,1686,5.218,1687,5.218,1688,5.218,1689,5.218,1690,5.218]],["t/810",[21,2.872,122,2.838,167,2.054,245,4.882,547,5.029,693,4.372,1366,5.681,2071,5.031,2072,5.031]],["t/812",[9,0.89,37,2.773,38,4.1,47,4.035,90,3.748,97,1.998,106,3.157,112,5.181,127,2.958,131,3.554,145,3.64,151,3.474,155,3.366,186,1.823,206,2.501,225,2.955,255,3.366,272,3.381,349,2.299,386,2.773,488,4.434,492,2.891,513,2.514,544,3.3,693,4.1,1266,4.802,1348,5.731,1351,5.731,1414,6.662,1655,4.965,2143,5.16,2157,6.227]],["t/814",[274,5.644,693,5.47,1643,8.969,1644,8.969,1645,8.969]],["t/817",[693,4.987,2158,10.507]],["t/819",[333,1.365,571,6.959,584,3.522,693,5.203,871,6.384,1584,7.781,2159,8.966,2160,8.966,2161,8.966]],["t/821",[5,3.239,7,1.345,21,2.076,69,3.154,152,3.637,167,1.668,173,1.047,202,5.553,234,2.835,245,3.529,290,3.184,295,3.026,308,3.845,549,6.053,564,4.662,565,2.786,666,5.749,718,4.376,719,6.053,1366,4.106,2071,3.637,2072,3.637,2151,5.309,2152,5.517,2153,4.986,2162,4.986,2163,5.517]],["t/823",[173,1.652,2164,9.67]],["t/825",[173,1.652,719,7.031]],["t/827",[204,3.78,515,5.942,564,6.043,719,6.716]],["t/829",[9,1.393,167,2.338,1619,5.628,1815,6.522]],["t/831",[4,4.005,7,1.988,9,1.08,56,4.005,102,1.56,114,3.511,159,2.952,186,2.212,333,1.15,473,3.051,513,3.051,565,3.37,674,3.508,752,3.299,801,2.385,828,2.762,1033,2.71,1426,5.38,1616,3.7,1619,4.363,1620,5.38,1870,5.827]],["t/833",[9,1.505,102,1.736,167,2.289,173,1.656,333,1.279,768,2.904,1616,4.116,1619,4.854,1748,5.524,1799,5.524,1801,5.261,1815,5.625]],["t/835",[9,1.282,167,2.021,173,1.41,333,1.365,768,3.098,1102,4.752,1616,4.39,1619,5.178,1748,5.892,1801,5.612,1814,6.117,1815,6]],["t/837",[5,2.471,21,2.621,69,2.931,122,2.589,167,2.223,245,4.455,295,3.82,666,5.343,717,6.804,720,6.131,1366,5.184,2071,4.591,2072,4.591,2162,6.295]],["t/839",[7,2.309,22,2.603,69,3.35,113,2.099,333,1.462,694,3.753,717,6.206]],["t/841",[69,3.398,113,2.13,127,3.337,222,4.524,694,3.807,720,7.108,721,7.516]],["t/843",[167,1.878,720,7.431,721,7.858,938,8.442]],["t/845",[5,3.226,7,1.332,21,2.056,69,3.133,122,2.031,167,1.884,202,5.525,290,3.153,308,3.807,369,2.955,549,6.013,564,4.63,565,3.149,666,5.711,717,5.804,718,6.717,720,4.809,2071,3.601,2072,3.601,2151,5.257,2152,5.463,2153,4.937,2162,4.937,2163,5.463]],["t/847",[7,1.544,9,1.092,21,2.383,29,2.78,37,3.403,64,3.157,69,3.836,86,3.44,113,1.67,119,3.938,122,2.354,127,2.617,145,4.467,186,2.237,203,4.937,206,2.869,222,3.547,461,3.358,518,4.218,545,3.547,720,5.574,721,5.894]],["t/849",[69,3.5,113,2.193,717,6.484,720,7.32,721,7.741]],["t/851",[167,1.85,611,6.716,717,6.484,720,7.32,721,7.741]],["t/853",[21,2.654,69,4.034,105,3.98,167,2.233,173,1.339,495,4.749,564,5.471,816,5.422,2071,4.649,2072,4.649]],["t/855",[7,1.84,10,4.588,21,2.097,64,2.778,69,4.157,70,3.635,105,4.258,106,2.14,112,4.034,113,1.47,153,3.599,154,3.883,173,1.058,186,3.023,333,1.386,338,2.863,345,2.627,349,2.483,495,3.752,513,2.715,542,3.838,564,4.693,597,2.599,672,4.5,673,4.344,677,5.362,1530,5.572]],["t/858",[69,3.5,105,5.483,173,1.844]],["t/860",[27,5.807,69,3.701,105,3.98,167,1.569,173,1.339,178,5.696,204,3.206,242,3.343,315,3.951,350,3.223,510,5.284,676,6.565,816,4.348,1028,6.209,2165,7.834]],["t/862",[21,2.953,38,4.495,69,3.302,113,2.07,173,1.782,336,4.53,565,2.918,2166,7.304]],["t/864",[69,4.019,113,2.519,167,1.797,173,1.813]],["t/866",[69,2.895,99,3.354,113,2.284,173,1.644,244,3.411,286,3.882,333,1.59,510,4.133,515,4.915,611,5.556,680,6.035,696,7.278]],["t/868",[21,2.953,38,4.495,69,3.302,173,1.782,336,4.53,565,2.918,678,6.908,2166,7.304]],["t/870",[69,3.985,105,4.492,167,1.771,173,1.797,495,5.36,678,7.007]],["t/872",[69,3.302,173,1.782,510,4.715,515,5.607,678,8.264,2167,8.219,2168,8.219]],["t/874",[5,3.147,7,1.461,21,2.255,32,4.035,69,3.333,113,1.58,122,2.228,167,1.333,173,1.137,202,5.168,308,4.176,369,4.285,402,4.839,564,5.519,565,3.299,716,3.198,2071,3.949,2072,3.949,2151,5.765,2153,5.415,2162,5.415,2163,5.992]],["t/876",[7,1.599,21,2.467,29,2.878,37,3.523,64,3.269,69,3.9,86,3.518,113,1.729,119,4.077,122,2.437,127,2.709,173,1.244,186,2.316,203,5.111,206,2.934,222,3.673,461,3.477,518,4.367,563,5.294]],["t/878",[69,4.298,99,3.328,113,2.612,164,3.946,173,1.631,244,2.676,333,1.578,679,6.325,680,4.736]],["t/880",[69,3.257,99,2.997,113,2.041,173,1.469,244,3.048,333,1.421,515,5.529,611,6.25,679,7.203,680,5.393]],["t/882",[21,2.33,97,2.398,102,1.543,103,2.692,113,1.633,122,2.302,167,2.006,333,1.137,377,3.396,460,2.408,519,4.349,548,3.886,619,4.543,801,2.358,884,4.264,886,3.751,888,3.751,894,4.124,1104,4.264,1105,4.264,1366,4.608,1389,5.097,1638,5.203,2071,4.081,2072,4.081]],["t/884",[3,2.08,7,1.07,9,1.424,11,1.955,22,2.086,29,1.926,37,2.358,39,2.729,64,4.115,65,3.955,86,2.672,90,2.297,97,1.699,102,1.094,103,1.908,119,2.729,127,1.813,186,1.55,203,3.421,204,4.291,206,2.229,222,2.458,295,2.406,333,1.734,345,2.069,461,2.327,518,2.923,519,3.428,565,2.372,827,3.095,1100,2.863,1108,3.022,1616,2.593,1638,3.688,2169,5.295,2170,5.295]],["t/886",[9,1.189,31,2.543,40,3.587,44,2.076,56,4.409,65,2.048,97,2.669,113,1.818,127,2.848,173,1.308,258,4.703,333,1.679,336,2.821,349,2.178,388,2.843,460,2.68,466,2.936,570,3.692,571,5.903,579,5.058,658,5.119,659,3.877,694,3.25,716,2.609,801,2.625,827,4.862,884,4.747,976,5.119,1261,5.793,2171,5.429,2172,5.899,2173,5.899]],["t/889",[9,1.482,21,2.557,164,3.121,186,3.036,315,3.807,333,1.248,349,3.028,565,2.526,684,3.558,700,2.983,704,6.277,1046,6.395,1229,5.839,1937,7.117,1938,7.117]],["t/891",[9,1.62,167,1.746,173,1.782,333,1.441,700,3.446,704,5.228,2174,8.717]],["t/893",[9,1.317,173,1.449,333,1.402,700,3.351,703,4.98,704,5.084,1032,6.054,1045,5.197,1046,5.681,1047,5.855,1949,7.633]],["t/895",[21,2.833,122,2.799,167,2.284,245,4.816,460,3.561,884,5.186,2071,4.963,2072,4.963]],["t/897",[7,1.562,9,1.772,22,2.094,37,3.442,49,2.544,65,4.058,102,1.596,103,2.785,104,3.562,204,4.166,223,2.255,315,3.588,563,5.173,827,4.519,1222,5.173]],["t/899",[9,1.542,37,3.889,49,2.875,65,3.744,102,1.804,104,4.025,204,3.289,223,2.547,333,1.781,460,2.814,884,4.984]],["t/901",[47,2.303,68,2.468,97,1.962,101,2.571,102,2.391,106,1.946,111,3.411,122,1.883,167,1.811,173,1.758,180,2.353,200,3.619,306,2.268,333,1.495,455,3.639,457,3.305,460,2.748,547,2.759,548,3.18,584,2.401,693,2.902,786,5.305,834,3.886,841,3.411,884,4.867,1604,4.715,2175,9.823]],["t/903",[21,3.083,245,6.161,329,6.746,2071,5.401,2072,5.401]],["t/905",[5,2.26,27,2.747,40,3.809,44,1.417,64,3.177,65,1.398,69,1.404,86,3.262,127,1.379,151,2.247,153,2.155,165,3.677,186,2.251,206,1.813,219,2.326,226,2.602,229,2.415,230,2.483,254,1.758,260,4.675,273,2.602,274,4.602,284,1.869,293,2.384,295,1.83,329,6.789,344,2.272,386,2.79,388,1.941,401,1.843,407,2.602,409,5.93,410,2.415,431,3.016,436,3.535,463,2.937,471,2.483,478,2.602,479,4.363,493,3.016,508,2.114,565,1.241,571,4.894,634,4.117,691,3.337,752,1.758,849,2.804,905,2.867,906,3.106,963,3.337,992,3.211,1018,2.483,1755,3.106,2176,5.766,2177,6.265,2178,7.689,2179,3.706,2180,3.706,2181,3.337,2182,3.706,2183,4.027,2184,4.027,2185,3.706,2186,4.027,2187,3.706,2188,3.495,2189,3.495]],["t/907",[277,7.431,278,7.431,279,7.431,329,6.951]],["t/909",[77,6.795,86,2.846,223,2.392,230,5.057,234,3.491,315,3.807,329,5.595,570,5.133,571,7.103,634,5.389,670,5.981,1086,5.839,1106,4.919,2190,7.547,2191,7.547]],["t/911",[21,2.995,167,1.771,245,5.092,694,3.753,801,3.607,2071,5.247,2072,5.247]],["t/913",[7,2.059,694,4.621,2192,10.189]],["t/915",[694,4.704]],["t/917",[49,3.494,127,2.915,167,2.233,222,3.951,276,3.456,694,4.147,801,2.687,2193,8.512,2194,8.512,2195,8.512,2196,8.512,2197,8.512]],["t/919",[21,2.953,167,1.746,245,5.02,396,5.338,399,6.02,2071,5.173,2072,5.173,2198,9.471]],["t/921",[3,2.84,22,1.959,37,3.22,113,1.58,116,4.281,127,3.667,164,3.638,206,2.093,223,2.109,231,5.393,232,3.87,236,4.127,244,2.36,270,5.895,276,2.936,333,1.455,396,3.406,401,3.309,415,5.036,427,4.596,488,5.149,565,2.228,634,6.282,734,5.036]],["t/923",[398,8.377,399,6.679]],["t/925",[164,4.312,206,2.742,270,6.988,333,1.441,399,6.02,427,6.02,635,6.596]],["t/927",[159,4.042,396,4.873,2199,8.572]],["t/929",[21,2.912,180,2.576,245,4.95,333,1.421,584,3.668,1338,4.649,1341,6.994,1366,5.76,2071,5.101,2072,5.101]],["t/931",[3,2.469,7,1.757,9,0.898,18,4.707,22,1.703,32,4.851,33,3.078,64,2.597,65,2.181,86,2.181,98,3.821,104,4.594,122,1.936,143,4.522,173,0.988,177,2.762,180,2.75,186,2.546,223,3.137,263,3.269,333,0.956,338,2.676,345,2.455,470,2.983,638,4.288,674,2.918,799,3.995,819,4.584,821,4.288,1328,4.13,1332,6.191,1333,5.454,1334,5.784]],["t/933",[3,3.46,7,1.294,9,0.915,22,2.386,86,2.223,104,4.06,128,2.694,143,3.331,159,2.502,175,2.931,177,2.814,180,3.136,200,3.792,204,2.412,223,3.163,249,4.671,262,3.744,263,3.331,333,1.73,345,2.502,565,1.973,586,3.792,592,4.671,646,3.301,693,3.04,819,4.671,834,4.071,1344,4.56,1345,5.106]],["t/935",[105,4.838,167,2.2]],["t/937",[5,2.148,7,2.176,33,3.579,90,3.171,105,5.35,180,2.016,242,2.871,313,5.09,330,5.474,370,4.646,411,3.701,565,3.525,606,3.523,631,3.837,633,6.057,694,3.761,849,5.09,875,5.828,1328,4.804,2200,7.31,2201,7.31]],["t/939",[86,3.536,105,4.764,223,2.972,1338,5.072]],["t/941",[7,1.765,22,2.366,68,3.526,99,2.803,105,4.084,106,2.779,122,2.69,171,3.546,244,2.85,510,5.369,797,6.54,1028,6.37,1565,6.37,2202,8.734]],["t/943",[105,4.913,244,3.429]],["t/946",[29,2.659,65,3.342,105,3.418,106,2.326,127,2.503,133,4.918,167,1.348,173,1.15,180,2.016,223,2.132,272,2.492,290,3.496,306,2.712,333,1.112,542,4.172,590,3.469,601,4.508,1338,4.792,2076,6.343,2077,6.343,2078,6.343,2080,6.343,2083,6.343,2203,9.628,2204,7.31,2205,7.31]],["t/948",[9,1.172,69,2.86,105,3.835,106,3.3,167,1.512,173,1.631,510,5.162,692,4.919,797,6.142,816,4.189,843,6.795,844,6.538,845,5.595,1028,5.981,2165,9.544,2206,8.201]],["t/950",[167,2.2,180,2.854]],["t/952",[49,3.074,177,4.104,180,3.1,186,2.735,200,6.652,223,2.724,249,6.812,1345,7.446]],["t/954",[180,2.898,2207,10.507]],["t/956",[159,4.042,396,4.873,2199,8.572]],["t/958",[122,3.002,167,2.338,460,3.141,894,5.379]],["t/960",[7,1.914,22,2.566,65,3.287,103,3.413,204,3.567,333,1.441,700,3.446,891,5.405,2208,8.717]],["t/962",[244,3.276,694,3.921,700,3.651,891,5.728,894,5.54]],["t/964",[167,1.878,894,5.624,1272,8.442,2209,8.842]],["t/967",[9,1.567,21,2.796,186,2.625,206,2.595,333,1.365,565,2.762,684,3.89,700,3.262,701,5.059,703,5.926,1045,5.059]],["t/969",[9,1.606,167,1.722,173,1.767,333,1.421,700,3.398,701,5.269,703,5.049,1045,5.269]],["t/971",[9,1.317,173,1.449,333,1.402,700,3.351,703,4.98,704,5.084,1032,6.054,1045,5.197,1046,5.681,1047,5.855,1949,7.633]],["t/974",[9,1.768,22,3.098,102,1.715,112,4.98,128,3.492,145,4.853,146,4.358,565,2.557,700,4.161,723,5.363,724,4.279]],["t/976",[9,1.795,22,2.366,49,2.875,102,1.804,167,1.61,173,1.696,333,1.641,700,3.177,1075,4.276]],["t/978",[9,1.201,167,1.55,173,1.656,333,1.603,700,3.058,703,4.544,704,4.64,1032,5.524,1045,4.743,1046,5.184,1047,5.343,1075,5.632,1668,5.735,2210,8.406]],["t/980",[106,3.292,167,2.2]],["t/982",[7,2.096,22,2.222,90,4.499,106,3.3,122,2.526,127,3.551,153,4.389,206,3.002,333,1.248,488,7.384,547,3.701,548,4.265,565,2.526,1349,5.595]],["t/984",[106,3.668,274,5.644,816,6.268]],["t/986",[22,2.094,106,3.852,127,2.647,333,1.52,350,2.926,466,3.848,492,3.588,571,6.596,841,6.172,1020,4.913,1086,5.504,1258,4.994,1596,8.274,2211,7.73]],["t/988",[816,5.452]],["t/990",[7,1.804,9,0.933,11,2.41,22,1.769,32,4.98,49,2.149,69,3.546,106,3.642,122,2.011,128,2.746,143,4.642,159,2.551,173,1.027,186,3.2,204,2.459,239,4.15,333,1.664,338,2.78,345,2.551,349,2.41,455,2.236,513,3.604,638,4.454,676,5.035,1328,4.291]],["t/993",[9,1.449,21,2.467,39,4.077,68,3.194,164,3.011,186,2.968,333,1.543,565,2.437,684,3.432,700,2.878,703,4.277,1032,6.661,1045,4.464,1047,6.443,1795,6.308,1940,6.866,1945,6.866,1947,7.281]],["t/995",[9,1.62,167,1.746,173,1.782,333,1.441,700,3.446,704,5.228,2174,8.717]],["t/997",[9,1.317,173,1.449,333,1.402,700,3.351,703,4.98,704,5.084,1032,6.054,1045,5.197,1046,5.681,1047,5.855,1949,7.633]],["t/999",[122,3.002,167,2.338,460,3.141,619,5.926]],["t/1001",[7,1.914,22,2.566,106,3.606,133,4.838,153,5.069,460,3.052,461,4.162,694,3.7]],["t/1003",[106,2.779,113,2.357,133,4.461,333,1.641,460,2.814,461,3.838,519,4.803,619,5.31,694,4.214,1389,5.958,2212,8.037]],["t/1005",[106,3.275,113,2.249,127,2.774,167,1.897,333,1.566,460,3.316,461,4.522,492,3.761,619,6.257,1020,5.15,1151,6.46,2212,9.471,2213,8.102]],["t/1007",[122,3.187,167,1.907,548,5.381]],["t/1009",[7,1.657,11,3.028,21,2.557,47,3.089,97,2.632,106,3.619,122,2.526,164,3.121,173,1.29,333,1.248,455,2.808,460,2.643,548,4.265,563,5.488,565,2.526,1640,7.547,1659,5.839,2214,8.201]],["t/1011",[9,1.282,65,3.112,97,2.877,106,3.489,173,1.724,204,3.377,257,5.529,455,3.753,460,2.889,548,4.663]],["t/1013",[9,1.515,65,3.678,68,2.858,86,3.678,102,1.462,106,2.253,111,3.95,167,1.305,173,1.666,204,3.991,427,4.499,455,3.628,460,3.415,548,3.682,612,3.866,841,3.95,2215,7.079,2216,7.079,2217,7.079]],["t/1015",[122,3.187,167,1.907,880,5.772]],["t/1017",[21,1.762,22,1.531,52,2.349,68,3.8,69,1.97,70,5.548,99,1.813,127,2.763,159,2.208,165,2.703,171,2.295,222,3.745,225,2.682,254,4.739,295,2.568,308,3.263,337,4.122,495,3.153,542,4.605,565,1.741,606,2.724,644,3.436,674,2.623,694,3.152,801,2.547,815,5.745,843,4.683,844,4.506,856,7.257,879,6.7,880,3.153,1232,3.651,1902,4.358,2218,5.201,2219,5.651,2220,5.651,2221,5.651,2222,5.651]],["t/1019",[167,2.183,274,5.368,694,4.625,813,6.216,880,6.116]],["t/1022",[167,2.143,852,6.618,854,6.013,880,5.518,2223,9.889]],["t/1024",[68,3.271,71,4.033,119,4.176,151,5.742,167,1.897,254,3.537,350,3.067,571,6.713,638,5.527,854,4.926,871,5.769,880,4.521,1260,6.713,1537,6.713,1584,7.031,1585,7.456]],["t/1026",[9,0.898,47,3.275,52,3.613,86,3.733,97,2.79,106,3.172,122,1.936,160,3.331,167,1.838,173,1.367,206,2.517,309,5.454,350,2.379,547,3.924,548,4.522,553,5.784,562,5.784,841,3.507,854,5.286,880,5.562,1124,7.659,2224,6.285,2225,6.285,2226,6.285,2227,6.285]],["t/1028",[122,3.187,167,1.907,547,4.669]],["t/1030",[10,4.328,11,3.231,21,2.729,47,4.068,95,5.257,97,2.036,122,1.954,128,2.668,159,2.478,186,1.858,204,2.39,206,3.126,261,3.971,272,2.163,331,4.418,338,2.701,345,3.419,349,3.231,455,2.996,513,2.562,547,3.95,548,3.3,565,3.086,566,3.805,684,2.752,685,4.893,688,4.893,693,3.011,1350,4.328,1639,5.839]],["t/1032",[167,1.907,584,4.063,1341,7.748]],["t/1034",[5,1.532,12,2.179,22,1.412,56,2.763,61,3.426,64,3.715,86,3.121,103,2.743,131,2.975,155,2.818,167,0.961,206,1.509,232,2.79,234,2.219,244,3.583,272,2.595,290,2.493,349,1.925,537,2.838,542,2.975,565,1.606,588,4.383,646,3.923,671,4.156,758,3.263,828,1.906,1124,3.712,1331,3.63,1338,2.595,1342,5.871,1428,6.606,1429,5.419,1430,4.798,1431,4.798,1432,7.005,1433,4.524,1436,5.192,1773,4.32]],["t/1036",[186,2.773,322,4.838,588,3.661,1341,7.093,1436,6.543,1452,8.717,1928,7.848,2228,9.471]],["t/1038",[99,2.803,113,1.909,173,1.373,180,2.409,323,4.145,333,1.329,586,5.17,587,4.311,588,3.376,589,3.323,590,4.145,938,7.236,1341,6.54,2229,8.734,2230,8.734]],["t/1041",[7,1.723,9,0.874,22,2.879,52,2.541,99,1.962,102,1.761,103,3.073,113,1.336,146,5.157,154,3.53,206,2.469,234,3.631,244,3.206,263,3.18,323,2.902,466,3.043,501,4.874,537,1.93,565,1.883,584,2.401,588,4.108,589,2.326,598,2.97,606,2.946,629,4.091,684,4.261,801,1.93,909,4.578,1041,3.717,1655,4.874,1681,4.257]],["t/1044",[3,3.343,9,1.217,49,2.802,99,3.407,167,2.133,173,1.669,323,4.04,537,2.687,588,4.103,1041,5.176,1234,4.858,1681,5.928]],["t/1046",[3,3.386,99,3.434,103,3.106,167,1.973,173,1.683,323,4.092,537,2.721,584,3.386,588,4.136,1041,5.242,1234,4.92,1681,6.004]],["t/1049",[9,1.023,99,2.296,113,2.074,173,1.125,323,3.395,333,1.089,587,3.532,588,3.669,589,3.612,594,2.78,595,3.503,597,2.765,598,3.475,600,4.478,828,2.615,1037,4.182,1042,4.787,1131,4.982,1132,4.982,1134,4.982,1137,4.982,1683,5.218,1684,5.218,1685,5.218,1686,5.218,1687,5.218,1688,5.218,1689,5.218,1690,5.218]],["t/1052",[7,2.197,9,1.265,180,2.441,244,3.842,263,4.602,295,4.941,317,6.454,320,5.815,338,3.767,1350,6.036]],["t/1054",[5,2.567,7,1.765,8,3.962,72,4.873,159,3.412,160,4.629,220,6.963,295,4.902,313,6.082,369,3.915,772,6.082,2095,8.037,2231,8.734]],["t/1056",[7,1.527,122,3.031,126,3.761,167,2.137,171,3.068,173,1.823,295,4.471,338,3.217,546,8.153,1332,5.38,1573,6.261,1604,7.588,2232,6.954,2233,9.839,2234,9.055]],["t/1058",[7,1.416,102,1.933,122,2.883,126,3.487,167,1.726,173,1.769,244,3.055,295,4.254,317,5.109,320,4.604,333,1.424,460,3.016,546,7.756,548,4.868,1573,5.804,1604,7.219,2232,6.447,2235,9.36,2236,9.36]],["t/1060",[7,1.51,122,3.009,126,3.719,167,2.128,173,1.815,244,3.188,295,4.439,317,5.45,320,4.91,338,3.181,546,8.094,1573,6.191,1604,7.533,2234,8.989,2237,9.768]],["t/1062",[167,1.907,235,6.683,396,4.873]],["t/1064",[21,2.621,116,4.976,127,3.939,164,3.199,186,2.461,223,2.452,231,4.743,235,5.43,236,6.011,273,6.804,349,3.103,479,5.854,625,5.735,2238,5.854]],["t/1066",[235,6.788,398,8.377]],["t/1068",[159,4.042,396,4.873,2199,8.572]],["t/1070",[9,1.567,21,2.796,167,2.274,245,4.752,768,3.098,1077,4.255,1366,5.529,2071,4.897,2072,4.897]],["t/1072",[7,1.51,9,1.068,22,2.024,52,3.105,102,2.247,127,2.558,132,4.827,145,4.368,171,3.034,222,3.469,223,2.179,234,4.159,244,2.439,281,5.097,367,3.181,565,2.302,723,4.827,768,3.375,1033,2.679,1423,3.63,1544,5.45,1742,5.335,2239,7.472]],["t/1074",[9,1.567,167,2.021,173,1.724,768,3.787,1076,4.426,1077,4.255,1423,4.355,1742,4.897,1761,5.308]],["t/1076",[9,1.335,167,2.072,173,1.469,768,3.227,1076,5.547,1077,4.433,1106,5.602,2240,9.34]],["t/1078",[122,3.288]],["t/1080",[9,0.961,47,2.533,61,4.419,65,2.334,71,3.347,90,2.917,97,2.922,99,2.922,100,3.673,122,3.672,128,2.828,145,3.931,159,2.627,204,2.533,206,1.947,469,2.899,511,5.036,513,2.715,565,2.072,684,2.917,873,5.788,1091,5.186,1221,4.034,1232,4.344,1546,5.362,1560,5.572,1561,5.836,1562,5.836,1563,7.903]],["t/1082",[167,1.722,369,4.187,385,7.203,389,8.595,390,6.138,391,7.665,395,5.46,396,4.4,763,6.504]],["t/1084",[1,4.116,7,0.679,21,1.048,22,1.85,56,1.782,86,3.361,90,3.733,94,1.991,100,1.837,113,2.202,114,1.079,116,3.215,126,1.674,127,3.659,160,1.782,164,2.599,177,1.478,180,1.498,186,0.985,223,1.584,225,3.721,231,5.463,234,3.338,244,1.772,273,2.172,293,1.991,315,1.561,318,2.617,333,1.4,388,1.621,391,3.704,392,4.756,393,6.839,396,1.584,401,2.485,405,2.681,411,1.703,416,3.961,427,3.452,429,4.329,441,3.569,488,4.863,489,2.593,490,3.704,565,1.036,583,2.25,625,2.294,674,1.561,734,3.782,745,2.593,763,3.782,765,2.394,1232,2.172,1333,2.918,1344,2.394,1449,3.095,1868,2.681,1964,4.997,2062,2.918,2241,5.43]],["t/1086",[391,7.168,400,8.377]],["t/1088",[164,3.554,186,3.29,206,3.253,333,1.71,391,7.665,427,5.937]],["t/1090",[159,4.042,396,4.873,2199,8.572]],["t/1092",[122,2.918,167,2.404,460,3.052,1619,5.469]],["t/1094",[4,4.4,7,1.678,9,1.187,22,2.831,114,3.354,146,4.358,263,4.318,333,1.263,460,2.675,466,4.133,565,2.557,752,3.625,1222,5.556,1426,5.911,1616,4.065,1620,5.911,1825,5.556]],["t/1096",[4,3.26,7,0.795,9,1.523,22,2.052,31,3.265,38,1.867,49,2.493,102,1.769,114,2.43,128,1.654,147,3.413,159,1.536,162,1.763,167,1.898,173,0.967,175,1.8,186,2.217,234,1.674,290,1.881,333,0.936,345,1.536,348,2.271,438,2.8,466,1.958,473,3.753,513,1.588,537,1.941,565,2.333,594,2.39,659,2.585,674,1.826,684,1.706,752,2.685,755,2.739,768,2.959,769,3.359,801,1.241,828,1.438,1033,2.716,1077,2.919,1423,2.988,1426,2.8,1616,1.926,1619,3.552,1620,2.8,1742,3.359,1748,4.042,1761,3.641,1799,4.042,1801,3.849,1810,2.585,1814,4.196,1815,4.116,1822,3.259,1825,2.632]],["t/1098",[49,2.012,56,3.24,114,2.737,146,3.209,167,2.135,171,2.482,173,1.545,175,2.798,206,2.469,244,2.783,333,1.495,350,2.314,460,3.165,575,3.886,694,2.388,752,2.669,805,3.095,806,6.213,886,3.069,888,3.069,1107,4.715,1616,4.81,1619,4.925,1620,6.073,2242,5.626,2243,6.114,2244,6.114]],["t/1100",[122,3.002,167,2.338,377,4.429,460,3.141]],["t/1102",[7,1.887,22,2.53,153,4.999,272,3.184,377,5.106,460,3.01,461,4.104,544,4.95,694,3.649]],["t/1104",[105,3.931,113,1.837,133,4.294,240,5.735,272,2.865,333,1.603,377,4.787,460,2.709,461,3.694,519,4.69,606,4.051,694,4.115,1389,5.735,1638,5.854]],["t/1106",[333,1.527,377,4.561,460,3.234,461,4.41,805,5.082]],["t/1109",[21,2.438,39,4.03,65,2.714,68,4.062,106,2.489,171,3.175,186,2.945,223,2.281,244,2.552,256,4.629,565,2.409,684,3.392,845,5.334,1048,4.97,1050,4.97,1371,5.568,1451,7.196,1464,6.479,1918,6.786,2245,7.196,2246,7.82,2247,7.82]],["t/1111",[9,1.299,101,4.648,167,1.675,173,1.738,244,2.966,333,1.383,605,5.525,1048,5.776,1050,5.776,1959,7.245]],["t/1113",[9,0.971,101,2.857,167,1.69,173,1.068,241,2.823,276,3.723,333,1.034,805,3.439,1048,4.318,1049,4.388,1050,4.318,1051,4.13,1052,4.73,1053,4.73,1054,4.73,1055,4.73,1056,4.73,1057,4.73,1058,4.73,1059,4.73,1060,4.73,1061,4.73,1062,4.251,1063,4.73,1064,4.73,1065,4.73,1066,4.73,1067,4.73,1068,4.73,1069,4.73,1070,4.73,1071,4.73,1072,4.73,1621,3.877,1792,5.087]],["t/1115",[9,1.479,167,1.907,1798,7.748]],["t/1117",[78,5.981,102,1.694,114,3.65,122,2.526,206,3.002,388,3.952,536,4.68,642,7.117,761,6.538,783,4.885,1266,6.325,1429,4.227,1798,6.142,1828,7.117,2248,8.201,2249,8.201]],["t/1119",[3,2.258,7,1.161,11,2.122,22,1.557,29,2.091,64,2.375,102,1.187,113,1.256,114,3.747,171,2.334,206,1.664,214,2.688,223,2.382,244,2.665,260,3.495,411,2.91,451,4.192,472,3.653,473,2.321,646,2.962,724,2.962,752,2.51,782,4.135,783,4.872,828,2.101,1258,3.713,1422,3.403,1424,5.111,1429,4.209,1747,3.921,1798,7.114,1799,5.367,1806,4.988,1825,3.846,2140,4.763,2250,5.748,2251,4.433,2252,4.433]],["t/1121",[9,1.635,49,3.169,102,1.51,114,2.346,167,1.348,173,1.514,333,1.112,537,2.307,594,2.84,700,2.659,768,3.327,783,3.443,806,4.273,1075,3.579,1076,3.608,1077,3.469,1423,3.551,1429,3.767,1668,4.987,1742,3.992,1747,4.987,1761,4.327,1798,5.474,1799,4.804]],["t/1123",[122,3.187,167,1.907,547,4.669]],["t/1125",[230,5.529,241,3.726,261,5.612,272,3.056,325,6.117,349,3.31,455,3.07,547,4.047,566,5.378,689,8.252,690,8.252,691,7.429,692,5.378]],["t/1127",[244,3.376,688,7.979,694,4.042]],["t/1129",[136,7.884,241,4.11,688,7.627,805,5.886,2253,9.889]],["t/1131",[9,1.479,167,1.907,1767,7.058]],["t/1133",[7,1.887,11,3.448,102,1.929,121,4.729,241,3.882,272,3.184,492,4.336,1033,3.349,1429,4.813,1767,6.372]],["t/1135",[3,3.668,9,1.335,11,3.448,102,1.929,206,2.704,1033,3.349,1074,5.101,1368,5.937,1616,4.573,1668,6.372]],["t/1137",[7,1.224,9,1.593,11,3.609,21,1.889,22,1.641,29,2.204,49,1.994,102,1.75,113,1.324,164,2.305,167,1.562,173,1.333,206,1.754,236,3.458,241,3.522,256,3.587,270,3.736,272,2.065,333,0.922,454,2.943,492,3.934,576,3.736,700,2.204,734,4.219,813,3.181,1033,3.039,1074,3.309,1075,2.967,1076,2.991,1338,3.016,1429,3.122,1621,3.458,1767,4.133,1768,4.314,1769,3.851,1770,4.83,1771,4.672]],["t/1139",[9,1.526]],["t/1141",[7,1.946,9,1.745,32,5.372,86,2.537,122,2.252,124,4.575,143,5.007,173,1.15,186,2.819,223,2.808,312,3.912,314,5.828,338,3.112,345,2.856,584,2.871,638,4.987,767,6.343,821,4.987,1332,5.205,2254,6.343]],["t/1143",[9,1.712,49,3.032,173,1.752,333,1.823,565,2.838,1667,7.344]],["t/1145",[3,3.43,9,1.248,51,5.466,101,3.673,301,7.236,333,1.329,345,3.412,594,3.394,631,4.585,700,3.177,1074,4.77,1368,5.551,1370,6.218,1616,4.276,1668,5.958]],["t/1147",[9,1.479,167,1.907,1238,7.546]],["t/1149",[7,1.599,12,3.308,72,4.414,100,4.321,102,2.31,114,2.539,127,2.709,206,2.29,234,3.368,606,4.885,625,5.397,646,4.077,768,2.734,1074,4.321,1238,7.393,1241,5.77,1270,4.952,1772,6.308,2049,6.555]],["t/1151",[3,3.72,11,3.497,186,2.773,206,2.742,542,5.405,768,3.915,1074,5.173,2049,7.848]],["t/1153",[7,1.319,9,1.729,11,2.41,22,2.418,49,2.938,102,1.348,114,2.095,167,1.204,173,1.404,241,2.713,333,0.994,454,3.172,492,3.031,537,2.061,584,2.564,594,2.537,692,3.916,700,2.375,768,3.514,1074,3.566,1075,3.197,1076,3.223,1077,3.099,1238,4.762,1241,4.762,1338,3.25,1423,3.172,1429,3.365,1621,3.726,1742,3.566]],["t/1155",[9,1.248,167,1.61,173,1.373,333,1.329,594,3.394,1073,5.739,1074,4.77,1075,4.276,1076,4.311,1077,4.145,1078,5.642,1238,6.37,1239,7.236,2255,8.734,2256,8.734]],["t/1157",[167,2.2,173,1.627]],["t/1159",[159,3.649,173,1.767,350,3.536,411,4.729,455,3.198,540,8.105,602,7.739,775,7.446,2164,8.595]],["t/1161",[173,1.894]],["t/1163",[69,3.822,173,1.724,204,4.129,455,3.753,510,4.463,816,5.599,1596,7.429,2257,8.966]],["t/1165",[122,3.002,167,2.338,460,3.141,1105,5.562]],["t/1167",[7,2.001,22,1.682,39,2.051,74,3.069,90,1.726,97,3.433,103,2.236,113,1.884,114,3.178,153,2.13,154,2.298,155,2.151,169,2.902,186,3.028,206,1.797,225,1.889,232,2.13,304,3.723,333,0.606,338,1.694,345,2.425,349,3.182,449,2.529,460,1.282,466,1.981,469,4.029,470,2.946,565,1.226,579,2.42,606,2.991,692,5.17,694,3.651,700,1.448,782,3.864,783,3.595,813,2.089,875,3.173,886,3.831,888,3.831,891,2.271,894,3.426,1096,2.454,1100,2.151,1108,2.271,1117,2.491,1332,2.833,1692,4.648,2258,3.979,2259,3.979,2260,3.979]],["t/1169",[7,1.72,97,3.407,113,2.32,186,2.492,206,2.464,312,4.556,338,3.624,345,3.325,349,3.919,470,4.04,692,5.106,694,3.325,813,4.469,1096,5.249]],["t/1171",[7,2.08,21,2.526,97,3.302,113,2.249,186,2.372,206,2.345,312,4.336,338,3.449,345,3.165,349,3.799,460,2.611,470,3.845,597,3.132,692,4.86,694,3.165,1096,4.996,1104,4.624]],["t/1173",[7,1.905,97,3.626,114,3.4,126,4.692,186,2.76,206,2.728,312,3.789,338,3.014,345,2.765,349,3.48,469,3.052,470,3.36,692,5.653,694,3.682,782,5.365,886,5.672]],["t/1175",[7,1.905,97,3.626,114,3.4,126,4.692,186,2.76,206,2.728,312,3.789,338,3.014,345,2.765,349,3.48,469,3.052,470,3.36,692,5.653,694,3.682,783,4.992,888,5.672]],["t/1177",[3,2.446,7,2.004,65,2.998,97,3.183,186,1.823,204,3.254,206,2.871,225,2.955,306,2.31,333,0.948,338,2.651,345,2.433,349,3.189,469,2.684,470,4.708,579,3.786,692,3.735,694,2.433,700,3.609,891,5.661,894,5.475,1020,3.958,1108,4.93,1349,4.248,2208,7.95,2261,6.227,2262,6.227]],["t/1179",[7,0.814,22,1.091,38,1.911,52,1.674,64,1.664,65,1.398,74,7.675,97,3.686,113,2.175,114,3.193,119,2.075,121,2.039,131,2.298,133,2.057,157,3.809,160,2.134,162,2.808,186,1.834,232,2.155,234,1.714,237,2.602,244,1.314,266,4.388,276,1.635,284,1.869,293,2.384,338,1.714,350,1.525,388,3.706,401,2.867,454,1.956,514,3.337,536,2.298,579,6.051,605,2.449,606,1.941,731,4.461,732,3.337,746,2.747,783,2.951,1018,3.863,1090,2.646,1094,4.692,1117,5.429,1422,2.384,1424,2.52,1429,2.075,1674,2.867,1869,3.211,2073,2.804,2141,3.706,2142,3.706,2143,5.191,2144,5.766,2145,3.706,2146,3.706,2147,3.706,2148,3.706]],["t/1181",[72,4.414,74,7.817,97,3.785,100,4.321,113,2.215,131,4.515,162,3.546,276,3.213,286,3.699,466,3.938,579,6.163,642,6.866,1018,6.251,1117,4.952,2140,6.555,2263,7.912]],["t/1183",[97,3.518,113,1.96,131,5.117,162,4.019,312,4.799,1018,5.529,1094,6.715,1117,5.612,2143,9.083,2264,8.966,2265,8.966]],["t/1186",[102,0.896,103,1.563,113,1.45,167,2.029,173,1.529,276,3.272,284,2.014,286,3.103,333,1.01,460,2.138,537,2.094,601,5.565,807,3.98,854,4.035,886,4.53,887,4.153,888,4.53,894,3.663,1096,4.092,1099,4.361,1100,2.346,1102,4.271,1104,3.787,1105,3.787,1108,2.476,1110,3.165,1111,3.165,1117,2.716,1261,3.021,1276,3.249,1533,5.498,1537,6.676,1608,3.459,1609,5.291,1610,3.459,1611,3.459,1612,3.459,1613,3.595,1614,7.477,1615,6.107,1633,5.498,2266,6.636,2267,6.107,2268,6.636]],["t/1189",[9,1.482,21,2.557,102,1.694,186,2.401,244,2.676,306,3.043,333,1.248,537,2.588,565,2.526,589,3.121,594,3.187,595,4.016,606,3.952,684,3.558,1035,5.057,1036,4.794,1234,4.68,1278,6.795,2269,8.201]],["t/1191",[9,1.449,99,3.253,102,1.634,167,1.459,173,1.594,306,2.935,333,1.204,589,4.256,590,3.755,594,3.074,595,3.874,597,3.058,606,3.813,1035,4.879,1036,4.625,1234,5.784,1254,5.397]],["t/1193",[9,1.282,99,2.877,167,1.653,173,1.41,333,1.365,589,3.412,594,3.484,595,4.39,597,3.466,1036,5.241,1037,5.241,1254,6.117,2102,8.252]],["t/1195",[9,1.479,167,1.907,1621,5.904]],["t/1197",[9,1.317,11,3.401,167,1.698,241,3.828,272,3.14,276,3.741,454,5.413,492,4.276,544,4.882,1338,4.585]],["t/1199",[9,1.712,167,1.698,173,1.752,241,3.828,244,3.006,333,1.696,1621,5.257]],["t/1201",[9,1.354,167,1.746,173,1.489,241,3.936,333,1.441,805,4.796,1074,5.173,1621,5.405,2270,9.471]],["t/1203",[122,3.002,167,2.338,460,3.141,1638,6.787]],["t/1205",[21,2.016,37,2.879,47,2.436,64,2.672,65,2.244,105,3.024,116,3.828,122,2.731,157,6.619,167,1.192,206,2.567,240,7.427,272,4.113,290,3.092,436,3.648,454,3.141,500,6.838,626,4.843,1090,4.25,1638,4.503,1679,5.611,2271,6.466,2272,5.951,2273,6.466,2274,6.466,2275,6.466,2276,6.466]],["t/1207",[694,4.105,1638,7.317]],["t/1209",[167,1.823,1638,8.095,2272,10.699,2277,9.889]],["t/1212",[4,4.355,7,1.171,9,1.364,12,2.424,39,2.988,51,3.628,102,2.263,114,3.332,164,2.206,171,2.354,293,3.432,306,3.048,315,3.814,333,0.882,345,2.265,473,2.341,674,2.691,724,2.988,752,4.533,800,3.2,801,2.593,828,4.007,1033,3.723,1747,5.605,1748,3.81,1799,3.81,1800,4.228,1801,3.628,1802,4.342,2245,5.335]],["t/1214",[4,4.347,9,1.626,102,1.694,114,2.632,164,3.121,167,1.912,173,1.631,333,1.578,752,3.581,1747,5.595,1748,5.389,1799,5.389,1800,5.981,1801,5.133,1802,6.142]],["t/1216",[9,1.373,167,1.771,173,1.511,333,1.462,1368,6.106,1747,6.554,1800,7.007,2278,9.607]],["t/1218",[9,1.393,167,2.338,768,3.367,1803,6.405]],["t/1220",[7,1.477,9,1.045,11,2.699,22,2.608,52,3.038,102,1.988,114,2.346,127,2.503,132,4.722,151,4.078,171,2.968,222,3.393,223,2.132,234,3.112,244,3.142,281,4.987,290,3.496,367,3.112,451,5.331,565,2.252,575,4.646,768,3.327,769,3.992,1033,2.621,1423,3.551,1544,5.331]],["t/1222",[9,1.542,114,2.803,167,1.988,173,1.696,290,4.177,768,3.727,769,4.77,806,5.105,1076,4.311,1803,5.739,1804,5.739]],["t/1224",[9,1.335,167,2.072,173,1.469,768,3.227,806,5.46,1076,5.547,1803,6.138,2279,9.34]],["t/1226",[113,2.13,122,3.002,167,2.338,460,3.141]],["t/1228",[5,2.325,7,2.464,10,5.397,22,3.03,69,2.759,99,2.539,102,1.634,103,2.851,113,2.215,154,4.569,333,1.204,460,2.549,537,2.497,564,4.077,694,3.091,2162,5.925]],["t/1230",[9,1.248,99,2.803,102,1.804,103,3.147,113,2.558,167,1.988,173,1.696,333,1.641,587,4.311,694,3.412]],["t/1232",[99,2.956,103,3.319,113,2.435,167,2.054,173,1.449,333,1.402,587,4.548,592,6.719,2280,8.478]],["t/1234",[5,2.695,11,2.508,21,2.118,99,3.33,244,3.387,318,4.419,333,1.766,350,2.572,401,3.109,455,2.326,545,4.818,565,2.093,614,5.166,672,6.135,673,4.388,680,3.923,696,4.73,2125,5.239,2281,7.957,2282,6.251,2283,5.416]],["t/1236",[69,4.27,99,3.112,113,2.511,164,3.69,173,1.807,244,2.412,333,1.749,455,3.32,545,3.43,564,3.809,680,4.267,696,5.146]],["t/1238",[69,2.895,99,2.664,113,1.814,173,1.644,244,2.709,333,1.59,455,2.843,515,4.915,564,4.279,611,5.556,613,5.782,614,4.133,615,5.664,672,5.556,680,4.794,681,6.217,696,5.782]],["t/1240",[103,3.511,122,3.002,167,2.338,460,3.141]],["t/1242",[7,1.678,9,1.187,22,2.831,37,3.697,49,2.733,65,3.627,103,4.121,104,3.826,173,1.306,204,3.127,333,1.263,338,3.535,345,3.243,1108,4.738,2284,8.302]],["t/1244",[9,1.282,49,2.951,102,1.852,103,3.95,104,4.132,173,1.724,223,2.615,333,1.365,460,2.889,537,2.83,1108,5.117]],["t/1246",[103,3.274,173,1.738,333,1.383,460,2.928,537,3.488,1108,5.186,1110,6.628,1111,6.628,1633,9.158]],["t/1248",[103,2.476,173,1.642,276,4.731,284,2.109,333,0.692,455,1.556,460,1.464,537,3.133,571,3.878,886,4.982,888,4.982,894,2.508,1096,6.121,1099,4.517,1104,2.593,1105,2.593,1108,2.593,1118,5.48,1119,3.623,1120,7.368,1153,8.224,2209,3.943,2285,4.544,2286,4.544,2287,4.544,2288,4.544,2289,4.544,2290,4.544,2291,4.544,2292,4.544,2293,4.544,2294,4.544,2295,4.544,2296,4.544,2297,4.544,2298,9.134,2299,9.925]],["t/1250",[122,3.002,167,2.338,460,3.141,1618,8.075]],["t/1252",[7,2.252,22,2.496,113,2.013,333,1.402,338,3.922,345,3.599,460,2.968,473,3.719,1616,4.511,2300,9.212]],["t/1254",[113,2.563,694,4.581,1618,8.316]],["t/1256",[1618,8.572,2280,9.521,2301,10.346]],["t/1259",[4,3.154,7,1.691,21,1.856,38,2.825,97,2.686,99,1.91,102,1.229,103,3.488,112,5.02,113,2.419,126,2.962,162,4.34,186,2.835,206,1.723,312,3.185,336,2.846,338,2.534,345,2.325,349,3.09,460,1.918,466,2.962,469,2.565,470,3.972,542,3.396,597,4.278,692,3.57,694,2.325,1096,3.67,1104,3.396,1222,3.983,1455,6.673]],["t/1261",[49,3.06,103,3.778,113,1.515,167,1.714,173,1.762,284,4.315,286,4.346,333,1.055,460,2.234,469,2.989,537,3.536,597,4.331,700,2.522,891,3.957,894,3.827,1096,5.732,1104,3.957,1105,3.957,1108,3.957]],["t/1263",[103,2.524,173,1.472,276,2.844,284,3.252,333,1.066,460,2.257,537,2.954,601,5.772,807,5.614,854,4.259,886,4.699,888,4.699,894,5.166,1096,5.772,1099,6.151,1104,3.998,1105,3.998,1108,3.998,1110,5.109,1111,5.109,1276,5.246,1633,7.756,2209,6.079,2267,6.447]],["t/1265",[9,1.435,167,2.29,768,3.468]],["t/1267",[7,1.836,9,1.58,22,2.994,102,1.877,333,1.383,345,3.55,565,2.799,768,3.14,769,4.963,1033,3.259]],["t/1269",[21,2.833,22,2.994,102,2.282,345,3.55,388,4.38,594,3.531,768,3.819,1077,4.313,1803,5.972]],["t/1271",[7,1.988,22,2.047,102,2.032,114,2.425,349,2.789,388,3.642,473,3.973,513,3.051,565,3.031,700,2.749,768,3.4,801,2.385,828,2.762,1603,8.539,1616,3.7,1619,4.363,1647,6.024,1762,4.594,1763,4.594,2252,5.827,2302,6.954]],["t/1273",[9,1.615,22,1.918,49,2.33,102,1.946,114,2.272,162,3.173,167,1.738,173,1.482,290,3.385,333,1.434,537,2.234,584,2.78,594,2.751,768,3.904,769,3.866,806,4.138,1076,3.495,1077,3.36,1423,3.439,1742,3.866,1761,4.191,1803,4.652,1804,4.652]],["t/1275",[7,1.753,21,1.256,22,2.35,31,1.736,38,1.911,49,1.326,68,1.626,102,1.792,113,1.68,114,1.292,162,2.808,167,0.742,186,1.179,190,2.602,237,2.602,255,2.177,286,1.883,333,0.613,338,2.667,345,3.004,349,2.313,370,2.56,405,3.211,408,2.867,419,2.449,435,1.911,453,3.337,473,4.638,513,1.626,537,1.271,565,1.93,597,1.557,700,2.797,701,2.272,765,2.867,768,3.969,769,2.199,1033,2.246,1076,1.988,1258,2.602,1422,2.384,1603,5.437,1616,3.068,1619,3.618,1647,3.211,1742,3.422,1761,2.384,1810,4.117,1811,4.967,1812,2.937,1816,3.706,1817,4.461,1818,3.211,1819,3.495,1820,3.337,2252,3.106,2302,3.706]],["t/1277",[9,1.451,11,2.928,22,1.763,31,1.823,49,3.164,102,1.344,114,2.858,164,3.389,167,1.462,173,1.023,244,2.124,290,3.112,333,0.99,349,1.561,473,4.697,537,2.054,590,4.226,594,2.529,597,2.515,752,2.841,768,3.321,769,3.554,806,3.804,1077,3.088,1090,2.78,1098,4.276,1423,3.161,1616,2.071,1619,2.443,1742,3.554,1761,3.852,1762,3.957,1763,3.957,1803,4.276,1804,4.276,1810,2.78,1811,4.204,1814,2.885,1815,2.83]],["t/1279",[9,0.952,167,1.228,173,1.047,333,1.013,473,3.652,594,4.282,768,3.549,905,4.741,1077,5.23,1078,4.301,1102,3.529,1106,3.994,1466,5.309,1616,3.26,1619,3.845,1801,5.661,1814,4.542,1815,4.456,1831,5.309,1832,5.517,1834,5.517,1835,4.986,1836,5.778,1837,5.778,1838,5.778,1839,5.778,1840,5.778,1841,5.778,1842,5.778]],["t/1281",[151,5.955]],["t/1283",[5,1.736,7,0.755,17,2.725,22,1.012,27,2.549,40,4.454,49,1.23,64,2.441,65,1.297,69,1.303,86,3.634,127,2.023,128,1.571,151,4.645,153,2,162,2.648,164,1.422,165,3.504,167,0.689,186,2.145,206,1.71,219,2.158,229,2.241,230,2.304,231,2.108,253,2.02,254,1.631,260,3.592,273,2.414,274,3.587,290,1.787,295,1.698,329,2.549,343,2.5,344,3.333,386,3.262,391,2.549,401,1.71,407,2.414,409,4.556,410,3.543,431,2.798,436,2.108,463,2.725,471,4.518,479,4.114,493,2.798,527,2.602,570,5.676,571,4.697,691,3.096,738,3.438,752,2.579,905,4.206,906,4.556,963,3.096,1018,2.304,1425,2.979,1555,3.438,1755,2.881,1821,3.242,2002,2.881,2041,3.096,2171,3.438,2179,3.438,2180,3.438,2181,3.096,2182,3.438,2187,3.438,2188,3.242,2189,3.242,2303,3.438,2304,5.907,2305,3.736,2306,3.736]],["t/1285",[151,5.685,277,7.431,278,7.431,279,7.431]],["t/1287",[77,6.795,86,2.846,151,4.576,162,3.676,223,2.392,230,5.057,234,3.491,315,3.807,570,5.133,571,7.103,670,5.981,1086,5.839,1106,4.919,2190,7.547,2191,7.547]],["t/1289",[122,3.187,167,1.907,502,5.837]],["t/1291",[5,1.616,7,1.394,9,0.786,11,1.26,22,0.925,26,1.884,38,1.62,49,1.124,54,2.021,65,1.185,68,1.378,71,1.699,72,1.905,94,2.021,97,1.764,102,0.705,104,2.533,112,2.048,113,2.577,121,1.728,128,1.436,155,1.845,164,1.299,167,0.629,170,2.963,180,1.516,186,1,204,1.286,223,2.307,229,6.997,230,3.39,234,1.453,237,2.205,254,1.49,284,1.585,312,1.827,325,2.329,350,2.081,396,1.608,402,2.284,411,1.728,460,1.1,470,2.609,473,3.741,493,2.557,499,2.722,500,2.633,502,4.463,503,2.377,518,3.034,519,1.52,574,2.076,575,3.494,576,2.105,589,1.299,694,1.334,725,2.557,746,2.329,1258,2.205,1383,2.633,1384,2.963,1385,3.142,1386,3.678,1576,3.142,1605,4.116,1695,2.49,1729,2.963,1738,2.963,1828,2.963,2041,2.829,2129,2.633,2131,3.142,2132,3.142,2133,3.142,2134,3.142,2135,3.142,2307,5.497,2308,3.142,2309,2.963,2310,3.414]],["t/1293",[7,1.045,9,1.279,38,3.592,65,2.627,102,1.068,103,1.864,113,2.393,128,2.176,159,2.021,164,1.969,167,2.019,186,2.216,204,2.851,223,1.509,229,7.096,333,1.152,460,1.667,461,3.326,473,4.567,518,4.178,565,1.594,680,4.371,724,2.666,757,4.761,827,3.024,1100,2.797,1108,2.952,1386,3.462,1389,6.106,1414,3.99,2125,3.99,2311,5.173]],["t/1295",[12,2.466,29,2.146,38,2.8,41,3.948,72,4.641,90,2.559,99,3.092,100,3.222,106,1.877,113,2.411,127,2.02,176,3.328,180,1.627,229,5.779,230,5.13,272,2.011,432,3.448,438,5.923,445,5.262,473,2.382,493,4.418,495,4.641,496,4.418,500,4.55,502,3.328,517,4.55,542,3.367,579,3.587,759,4.303,1232,3.811,1235,4.418,1386,5.566,2308,7.655,2312,5.119,2313,5.899,2314,5.899]],["t/1297",[122,3.605,171,3.546,173,1.696,186,2.557,455,3.693,502,6.603,606,4.209,694,4.214]],["t/1300",[502,5.928,1373,8.706]],["t/1302",[502,5.928,2315,10.507]],["t/1304",[7,1.282,31,2.735,113,2.56,116,3.756,122,1.954,167,1.613,229,7.026,306,2.354,349,2.342,350,2.402,396,2.989,473,4.045,485,3.579,502,4.937,694,2.478,723,4.099,810,6.094,855,5.058,1237,5.058,1373,7.251,1386,6.704,1818,5.058,2316,6.344,2317,8.751,2318,6.344]],["t/1306",[9,1.299,38,4.313,167,2.196,473,4.462,565,2.799,650,7.53,768,3.14,1222,6.081,1616,4.45]],["t/1308",[7,2.18,9,1.248,22,2.366,49,2.875,333,1.329,395,5.105,473,3.526,565,3.323,684,3.789,768,3.727,1222,5.844,1616,4.276]],["t/1310",[9,1.613,11,3.474,22,2.186,31,2.436,49,3.573,102,1.666,167,1.487,173,1.269,333,1.228,349,2.086,473,5.012,537,2.547,594,3.135,768,3.251,1077,3.829,1090,3.714,1423,3.919,1616,2.767,1742,4.407,1761,4.777,1810,3.714,1811,5.213]],["t/1312",[9,1.265,167,2.005,173,1.392,333,1.347,473,3.573,594,3.438,768,3.057,1077,4.2,1102,4.69,1106,5.307,1616,4.333,1831,7.055,1835,6.626]],["t/1314",[9,1.435,167,2.29,473,4.052]],["t/1316",[7,1.544,9,1.572,102,1.578,126,3.804,186,2.237,333,1.163,338,3.253,345,2.985,408,5.441,419,4.646,473,4.442,565,2.354,700,3.606,705,5.322,1033,2.74,1222,5.114,1230,5.441,1231,5.894,1616,3.742,1810,5.022,1811,4.937]],["t/1318",[9,1.699,22,2.45,49,2.977,167,1.668,173,1.946,190,4.301,284,3.091,286,3.113,333,1.677,473,4.45,700,3.291,1075,4.429,1616,3.26,1810,5.944,1811,4.301]],["t/1320",[9,1.131,167,1.459,173,1.855,333,1.795,473,3.194,1075,4.963,1102,4.193,1616,3.874,1780,6.308,1810,6.661,1811,5.111,1831,6.308,1832,6.555,1833,6.866,1834,6.555]],["t/1322",[122,2.918,167,2.404,460,3.052,886,4.754]],["t/1324",[7,2.332,9,1.068,22,2.024,38,3.546,99,2.398,114,3.492,127,2.558,222,3.469,223,2.179,244,3.188,306,2.772,333,1.137,460,2.408,579,4.543,694,3.816,782,4.946,806,4.368,1020,4.749,1105,4.264,2319,7.472]],["t/1326",[114,3.27,782,5.159,886,5.115,2242,9.377]],["t/1328",[805,5.32,886,5.274]],["t/1330",[167,1.937,396,4.95]],["t/1332",[9,1.263,22,2.017,33,2.476,49,1.664,61,4.892,65,1.755,86,2.584,93,3.688,94,6.648,97,1.623,116,4.407,122,2.293,127,3.336,173,1.171,177,2.222,180,1.395,186,2.179,200,2.993,206,1.464,222,2.347,223,1.475,261,3.165,297,3.787,333,0.77,336,2.418,349,2.748,350,1.914,407,3.267,448,3.9,469,2.18,565,1.558,598,2.456,638,3.449,684,2.194,801,3.278,873,5.615,1020,3.214,1350,3.449,1565,3.688,1695,6.443,1904,4.388,1950,4.653,1951,4.653,1952,4.653]],["t/1334",[49,2.802,127,3.635,164,3.239,173,1.669,180,2.928,200,5.039,222,4.928,223,2.483,333,1.616,427,5.411,563,5.696,800,4.698]],["t/1336",[11,3.41,21,2.457,22,2.135,113,1.722,116,3.237,127,3.939,164,3.847,206,1.583,225,2.595,231,5.704,232,2.926,234,2.328,235,3.532,236,6.116,244,1.784,270,6.234,273,5.09,276,2.22,349,2.018,391,3.73,392,5.487,393,3.593,399,3.475,400,4.359,415,3.808,416,3.988,427,3.475,429,4.359,479,3.808,488,3.893,625,3.73,634,5.178,800,3.018,2238,3.808]],["t/1338",[102,1.462,114,2.272,127,2.424,128,2.977,159,2.765,164,2.694,167,1.305,173,1.482,180,2.6,204,2.666,222,3.286,235,4.573,236,4.04,270,4.365,333,1.434,391,4.829,392,4.93,396,3.335,399,4.499,427,4.499,436,3.994,513,2.858,612,3.866,782,3.584,783,3.335,787,5.459,801,2.234,1955,6.515,1958,6.515,2320,7.079]],["t/1340",[122,3.002,167,2.338,460,3.141,1104,5.562]],["t/1342",[7,1.887,22,2.53,113,2.041,333,1.421,449,5.937,460,3.01,469,4.026,813,4.903,1100,5.049,1108,5.33]],["t/1344",[22,2.831,113,2.284,333,1.59,449,6.643,460,3.368,469,4.505,694,4.083,813,4.358,1100,4.488,1104,5.964,1108,4.738]],["t/1346",[167,1.675,333,1.682,460,3.561,1100,4.913,1104,6.307,1108,5.186,1261,6.328,1276,6.805,1613,7.53]],["t/1349",[21,2.723,186,3.158,232,4.674,241,3.629,244,2.85,475,5.386,501,6.963,565,2.69,684,3.789,1051,5.31,1062,5.466,1371,6.218,1967,7.236,1968,7.236]],["t/1351",[9,1.282,101,4.61,167,1.653,173,1.724,244,2.926,272,3.056,333,1.365,338,3.817,1051,5.452,1967,7.429,1968,7.429]],["t/1353",[9,0.971,101,2.857,167,1.69,173,1.068,241,2.823,276,3.723,333,1.034,805,3.439,1048,4.318,1049,4.388,1050,4.318,1051,4.13,1052,4.73,1053,4.73,1054,4.73,1055,4.73,1056,4.73,1057,4.73,1058,4.73,1059,4.73,1060,4.73,1061,4.73,1062,4.251,1063,4.73,1064,4.73,1065,4.73,1066,4.73,1067,4.73,1068,4.73,1069,4.73,1070,4.73,1071,4.73,1072,4.73,1621,3.877,1792,5.087]],["t/1356",[21,2.796,186,3.209,232,4.799,244,2.926,475,5.529,501,7.149,565,2.762,597,3.466,684,3.89,1051,5.452,1062,5.612,1371,6.384]],["t/1358",[9,1.201,101,4.43,167,1.55,173,1.656,225,3.99,244,2.743,276,4.277,284,3.902,333,1.279,338,3.579,475,5.184,589,3.199,597,3.249,1062,5.261,1147,5.735]],["t/1360",[9,0.971,101,2.857,167,1.69,173,1.068,241,2.823,276,3.723,333,1.034,805,3.439,1048,4.318,1049,4.388,1050,4.318,1051,4.13,1052,4.73,1053,4.73,1054,4.73,1055,4.73,1056,4.73,1057,4.73,1058,4.73,1059,4.73,1060,4.73,1061,4.73,1062,4.251,1063,4.73,1064,4.73,1065,4.73,1066,4.73,1067,4.73,1068,4.73,1069,4.73,1070,4.73,1071,4.73,1072,4.73,1621,3.877,1792,5.087]],["t/1362",[167,2.305,333,1.551]],["t/1364",[7,1.861,29,3.351,33,4.511,44,3.242,318,4.44,333,1.696,633,7.633,635,6.415,2321,8.884]],["t/1366",[262,5.867,586,5.942,592,7.32,693,4.764,834,6.38]],["t/1368",[164,3.998,427,6.679]],["t/1370",[102,2.013,103,3.511,461,4.283,827,5.697,1100,5.268,1108,5.562,1616,4.772]],["t/1372",[101,4.099,700,3.545,1074,5.323,1368,6.195,1370,6.939,1616,4.772,1668,6.649]],["t/1374",[672,7.031,673,6.788]],["t/1376",[333,1.832]],["t/1379",[7,1.493,9,1.386,21,2.304,31,3.186,52,3.071,68,2.984,101,4.552,102,1.526,145,4.32,146,3.88,154,4.267,186,2.839,223,2.155,463,5.39,485,4.169,547,3.335,684,3.206,769,4.036,1033,2.65,1048,4.697,1051,4.493,1062,4.625,1327,5.534,1371,5.262,2322,7.39]],["t/1381",[9,1.329,11,2.559,101,3.909,173,1.462,225,3.29,241,2.881,244,3.422,272,2.363,276,3.774,284,3.218,333,1.055,338,3.957,454,3.368,475,4.275,492,3.218,589,2.638,597,2.68,605,4.215,1048,4.407,1050,4.407,1051,4.215,1062,4.339,1147,4.73,1338,3.451,1621,3.957,1959,5.527,1967,5.745,1968,5.745]],["t/1383",[9,0.971,101,2.857,167,1.69,173,1.068,241,2.823,276,3.723,333,1.034,805,3.439,1048,4.318,1049,4.388,1050,4.318,1051,4.13,1052,4.73,1053,4.73,1054,4.73,1055,4.73,1056,4.73,1057,4.73,1058,4.73,1059,4.73,1060,4.73,1061,4.73,1062,4.251,1063,4.73,1064,4.73,1065,4.73,1066,4.73,1067,4.73,1068,4.73,1069,4.73,1070,4.73,1071,4.73,1072,4.73,1621,3.877,1792,5.087]],["t/1386",[9,1.248,21,2.723,56,4.629,99,2.803,102,2.227,103,3.886,186,3.426,537,2.757,565,2.69,584,3.43,1605,6.54]],["t/1389",[1,3.967,3,3.865,99,3.719,103,3.545,113,2.15,167,1.393,173,1.547,323,3.586,537,2.385,584,2.968,587,3.73,588,3.803,589,3.744,590,3.586,597,2.921,1041,4.594,1234,4.312,1681,5.262]],["t/1391",[1,3.923,3,3.836,9,1.068,49,2.459,99,3.703,113,2.135,167,1.801,173,1.536,323,3.546,537,2.358,587,3.689,588,3.776,589,3.717,590,3.546,597,2.888,1041,4.543,1234,5.574,1681,5.203]],["t/1394",[99,2.877,113,1.96,167,1.653,173,1.41,323,4.255,333,1.365,584,3.522,586,5.308,587,4.426,588,3.466,589,3.412,590,4.255,2323,8.966]],["t/1396",[9,1.248,99,2.803,113,1.909,167,1.61,173,1.373,323,4.145,333,1.329,587,4.311,588,3.376,589,3.323,594,3.394,595,4.276,597,3.376,600,5.466,1042,5.844]],["t/1399",[69,3.302,99,3.039,113,2.476,186,2.773,495,5.284,564,5.84,565,2.918]],["t/1401",[3,3.437,69,4.084,99,3.759,113,2.673,164,3.812,244,2.856,333,1.783,545,4.062,614,4.356,672,4.246,673,4.099,680,5.053,696,4.418,2282,5.839,2283,5.058]],["t/1403",[99,3.039,113,2.07,244,3.091,286,4.429,333,1.724,672,6.338,680,5.469,696,6.596]],["t/1405",[9,1.393,167,2.338,1619,5.628,1814,6.649]],["t/1407",[4,3.96,7,1.974,9,1.068,56,3.96,102,1.543,114,3.492,159,2.919,186,2.188,290,3.573,333,1.137,473,3.017,513,3.017,565,3.352,674,3.469,752,3.262,801,2.358,828,2.732,1033,2.679,1616,3.659,1619,4.315,1620,5.32,1825,5,1870,5.763]],["t/1409",[9,1.505,102,1.736,167,2.289,173,1.656,333,1.279,768,2.904,1616,4.116,1619,4.854,1748,5.524,1799,5.524,1801,5.261,1814,5.735]],["t/1411",[9,1.282,167,2.021,173,1.41,333,1.365,768,3.098,1102,4.752,1616,4.39,1619,5.178,1748,5.892,1801,5.612,1814,6.117,1815,6]],["t/1413",[801,3.369]],["t/1415",[7,2.404,8,2.976,22,2.788,52,3.367,127,2.774,180,2.235,219,4.679,435,3.845,565,2.496,694,3.165,725,6.068,801,3.57,1235,6.068,1677,6.068,1757,7.031]],["t/1417",[5,2.97,7,0.957,21,1.477,22,1.921,69,3.29,99,1.52,113,1.035,122,2.184,167,0.873,173,0.745,186,1.387,202,5.101,290,2.265,308,2.735,333,1.614,367,2.016,369,4.23,388,2.283,402,5.687,435,2.248,455,1.622,495,3.956,545,2.198,549,4.745,564,5.207,565,3.113,583,3.169,614,2.357,672,3.169,673,3.06,716,3.136,717,4.581,718,4.66,719,4.745,770,3.924,1366,2.921,2071,2.587,2072,2.587,2151,3.776,2152,3.924,2153,3.547,2163,3.924,2281,4.11,2324,4.359]],["t/1419",[21,2.759,65,3.071,69,3.085,97,2.839,122,2.726,173,1.392,455,3.03,461,3.888,563,5.921,564,4.56,565,2.726,717,5.716,719,5.921,1659,6.3]],["t/1421",[9,1.299,69,3.169,173,1.873,455,3.784,545,5.13,564,4.683,717,5.871,719,6.081]],["t/1423",[9,1.417,86,3.44,167,1.409,173,1.559,455,3.394,515,4.524,545,4.601,564,3.938,613,6.902,614,4.934,615,6.762,681,5.723,717,6.403,719,6.633,2156,7.033,2325,7.033]],["t/1425",[21,3.129,69,3.5,173,1.578,455,3.437,563,6.716]],["t/1427",[69,3.951,86,3.287,173,1.782,455,3.88,545,4.397,564,4.881]],["t/1429",[69,4.167,86,3.599,167,1.512,173,1.631,455,3.551,564,4.227,613,7.222,614,5.162,615,7.075,681,6.142,2325,7.547]],["t/1431",[7,1.527,21,3.068,33,3.7,69,3.431,113,1.651,153,4.044,173,1.188,186,2.212,333,1.764,455,2.587,495,4.216,545,5.079,565,3.031,614,5.446,672,6.584,673,4.881]],["t/1433",[69,3.885,86,3.197,173,1.752,333,1.402,455,3.816,545,4.276,564,4.748,672,6.164]],["t/1435",[64,2.672,69,3.528,70,3.496,99,2.845,105,3.024,113,1.938,173,1.591,186,1.893,244,2.894,286,3.024,333,1.657,455,2.214,495,4.947,510,3.219,515,3.828,545,3.002,564,3.333,597,2.499,611,4.327,613,4.503,614,4.413,615,4.411,672,4.327,673,4.177,677,5.155,680,5.12,681,4.843,696,6.174]],["t/1437",[69,3.126,70,4.847,105,4.193,173,1.724,333,1.365,455,3.753,495,5.003,545,4.162,564,4.621,673,5.792,2326,8.966]],["t/1439",[69,2.665,99,2.452,113,1.67,173,1.73,244,2.494,333,1.508,455,2.617,495,4.264,510,3.804,515,4.524,564,3.938,613,5.322,614,3.804,615,5.213,673,4.937,678,7.229,680,4.413,681,5.723,805,3.869,2167,6.632,2168,6.632,2283,6.093]],["t/1441",[5,2.864,167,1.797,369,4.369,495,5.438,564,5.023,565,3.002,2281,8.458]],["t/1443",[5,2.534,7,1.742,21,2.688,22,2.336,69,3.731,70,4.661,105,4.031,113,1.884,333,1.312,545,4.002,565,2.656,614,4.291,673,5.57,675,7.482,2324,7.934]],["t/1445",[69,3.815,70,6.266,99,3.157,105,3.533,113,1.651,164,2.875,167,1.393,173,1.547,244,2.466,333,1.497,495,6.105,597,2.921,675,9.495,678,5.511,680,4.363]],["t/1447",[69,2.968,99,2.732,113,1.86,173,1.669,244,2.778,333,1.295,495,4.749,510,4.237,515,5.039,678,7.743,680,4.916,805,4.31,2167,7.387,2168,7.387,2283,6.787]],["t/1450",[7,1.243,9,0.879,11,1.452,22,1.065,29,1.431,39,2.027,98,2.391,102,2.314,105,2.876,114,2.748,132,2.541,162,2.757,169,6.247,225,2.919,241,1.634,263,2.045,272,2.096,290,1.881,367,2.618,388,1.895,395,2.299,436,3.47,445,2.148,471,3.793,473,3.979,492,1.826,524,4.606,605,2.391,634,4.042,700,3.585,701,2.219,746,2.683,768,3.211,891,4.322,1033,3.333,1338,1.958,1342,3.033,1422,3.641,1423,2.988,1424,5.817,1426,4.379,1621,2.244,1659,2.8,1742,2.148,1825,4.116,1848,4.903,1888,3.413,2073,2.739,2327,7.882,2328,3.933,2329,3.933]],["t/1452",[7,1.416,44,2.465,56,3.713,102,2.421,114,3.004,131,3.998,312,3.749,339,4.525,367,3.985,401,3.206,445,5.112,470,3.325,481,5.405,521,4.688,768,3.234,1033,3.78,1422,5.541,1423,4.547,2041,5.804,2330,8.614]],["t/1454",[3,2.723,7,1.401,8,2.547,44,2.44,54,4.104,108,4.104,121,3.51,152,5.077,202,3.748,290,3.316,295,3.151,300,4.701,367,3.957,394,3.195,401,3.173,432,4.053,513,2.799,565,2.863,665,5.527,667,5.745,668,6.016,669,5.745,670,5.057,699,5.745,701,3.911,702,3.606,2331,6.933,2332,6.933,2333,6.933,2334,5.347]],["t/1458",[3,2.581,7,1.328,9,1.518,21,1.336,39,2.208,40,2.604,88,2.604,99,2.109,102,1.651,103,1.543,105,2.003,114,1.375,152,3.589,159,1.673,167,0.79,171,2.668,172,2.474,204,1.613,223,1.249,242,4.007,255,2.316,312,2.293,318,2.064,338,2.797,367,2.797,395,2.504,428,3.208,473,1.73,485,2.417,492,1.988,519,4.543,537,2.074,565,2.024,589,1.63,631,2.249,666,2.723,674,1.988,694,2.567,699,3.549,700,2.908,701,2.417,702,3.417,704,2.364,801,1.352,828,1.566,882,2.815,1033,1.536,1338,2.132,1600,3.415,1616,2.097,1621,2.445,1642,3.208,1692,3.208,1903,3.549,1933,3.942,1937,3.717,1938,3.717,2335,4.284,2336,2.417,2337,2.815,2338,6.571,2339,6.571]],["t/1460",[5,1.919,44,2.298,69,3.112,86,2.266,175,2.988,177,2.869,230,5.504,254,2.851,274,3.197,276,2.651,300,2.927,322,3.335,349,3.295,409,5.035,472,7.511,478,4.218,502,3.684,610,5.035,674,3.031,879,4.649,1530,5.41,1575,5.673,1629,5.41,1817,4.649,1898,6.009,2218,8.214,2340,6.009,2341,6.529,2342,6.529,2343,6.529,2344,6.529]],["t/1462",[3,3.755,6,4.337,7,1.461,24,4.752,88,4.397,121,3.661,194,6.275,195,5.036,214,3.381,219,4.176,242,3.755,266,4.127,267,5.274,274,3.541,300,3.241,306,3.547,316,4.459,338,3.079,367,3.079,370,4.596,519,3.22,565,2.228,649,4.752,693,3.432,1730,5.577,2336,4.08,2345,7.231,2346,6.655]],["t/1466",[3,3.828,7,1.969,432,5.697,699,8.075,700,3.545,701,5.498,702,5.069]],["t/1468",[9,1.393,105,4.557,242,3.828,369,4.369,1338,4.851,2347,9.746,2348,9.746]],["t/1470",[5,2.907,216,7.884,242,3.884,2349,9.889,2350,9.889,2351,9.889]],["t/1472",[13,6.224,350,3.586,394,4.365,716,4.189,2352,9.471,2353,9.471,2354,9.471,2355,9.471,2356,9.471]],["t/1474",[7,1.565,8,1.961,16,3.893,102,1.599,127,1.828,133,2.726,222,2.478,304,5.996,308,3.082,332,3.997,333,0.812,390,3.508,394,4.2,401,2.443,437,3.572,472,3.393,537,2.876,792,4.116,1434,7.113,1936,4.116,2357,7.551,2358,5.337,2359,5.337,2360,5.337,2361,5.337,2362,4.912,2363,5.337,2364,5.337,2365,5.337,2366,5.337,2367,5.337,2368,5.337,2369,5.337,2370,5.337,2371,5.337,2372,5.337,2373,5.337,2374,4.255,2375,5.337,2376,4.422,2377,5.337,2378,5.337,2379,4.422,2380,5.337,2381,5.337,2382,5.337]],["t/1477",[290,4.873,401,4.663,513,4.114,1539,9.377]],["t/1479",[8,3.743,9,1.456,401,4.663,2383,10.189]],["t/1481",[221,6.372,536,5.33,565,2.877,882,6.138,2384,9.34,2385,9.34,2386,6.504,2387,9.34,2388,9.34,2389,9.34]],["t/1483",[8,2.628,124,5.941,146,3.756,284,3.321,286,3.345,369,3.207,380,3.992,381,3.721,452,3.949,565,2.204,631,3.756,716,4.199,1434,4.35,1747,4.881,2336,4.036,2390,6.584,2391,7.154,2392,7.154,2393,7.154,2394,7.154,2395,7.154,2396,7.154,2397,7.154,2398,4.235,2399,7.154,2400,7.154,2401,7.154,2402,6.208,2403,6.584,2404,7.154]],["t/1485",[6,3.448,33,3.999,102,1.187,146,3.017,217,3.139,226,3.713,242,2.258,306,3.03,333,0.875,386,2.559,527,4.003,539,3.846,684,2.493,716,4.832,768,1.986,1049,3.713,1437,4.003,2398,3.403,2402,4.988,2405,5.29,2406,5.748,2407,4.583,2408,5.748,2409,5.748,2410,4.988,2411,5.748,2412,5.29,2413,5.29,2414,5.748,2415,5.748,2416,5.748,2417,5.748,2418,5.748,2419,5.748,2420,5.956,2421,5.748,2422,5.748,2423,5.748,2424,5.748,2425,3.545,2426,4.763,2427,5.748,2428,5.956,2429,5.748,2430,5.748,2431,5.748,2432,5.748]],["t/1487",[7,1.247,8,2.266,9,0.882,29,3.123,36,4.62,64,2.549,102,2.038,114,2.754,203,3.986,242,2.423,290,2.951,394,2.844,437,4.129,473,2.491,536,3.521,616,4.297,654,3.405,768,3.41,1033,3.54,1424,3.861,1434,3.751,1888,5.354,2252,4.758,2357,5.112,2386,4.297,2412,5.678,2433,6.17,2434,6.17,2435,6.17,2436,5.678,2437,6.17,2438,5.354,2439,6.17,2440,6.17,2441,6.17,2442,6.17,2443,6.17,2444,6.17,2445,6.17]],["t/1489",[539,6.818,2425,6.283,2446,9.377,2447,10.189]],["t/1492",[114,2.569,223,2.335,276,3.251,318,5.42,537,2.527,589,3.046,654,5.637,752,3.495,768,2.766,801,2.527,828,2.927,1033,3.662,1436,4.623,1804,5.261,1812,5.839,2448,7.368,2449,7.368,2450,7.368]],["t/1494",[478,6.484,2451,7.741,2452,8.316,2453,10.037,2454,10.037]],["t/1496",[180,2.473,390,5.892,716,4.849,1221,5.378,1237,7.149,2398,5.308,2455,7.781,2456,8.966,2457,8.966,2458,8.966,2459,8.966,2460,8.966]],["t/1498",[12,3.333,33,2.721,64,2.296,90,2.411,114,2.559,126,2.767,155,3.005,175,2.543,180,2.199,223,1.621,276,2.257,306,2.062,318,4.493,386,2.475,410,3.334,537,1.754,589,2.115,654,4.401,716,3.527,718,3.653,752,2.427,768,1.92,801,1.754,828,2.032,848,3.136,849,3.87,1033,2.859,1237,4.431,1436,3.21,1804,3.653,1812,4.054,2448,5.115,2449,5.115,2450,5.115,2461,5.558,2462,5.558,2463,5.558,2464,5.115,2465,5.558,2466,5.558,2467,10.186,2468,5.558,2469,5.558,2470,5.558,2471,5.558,2472,5.558,2473,5.558,2474,5.558]],["t/1501",[102,2.013,114,3.127,313,6.787,469,4.201,481,5.628,2475,9.746,2476,9.746]],["t/1503",[716,4.507,2420,7.431,2477,10.189,2478,10.189]],["t/1506",[105,4.624,457,5.346,567,6.618,1338,4.923,2479,9.889,2480,9.889]],["t/1508",[9,1.282,101,3.771,102,1.852,214,4.193,244,2.926,300,4.019,333,1.365,2129,6.915,2321,7.149,2481,8.966,2482,8.966,2483,8.966,2484,8.966]],["t/1510",[9,1.118,33,3.829,65,2.714,214,3.656,300,3.505,318,3.769,322,3.994,333,1.19,674,3.63,683,6.234,716,4.45,2086,6.234,2336,4.412,2485,7.82,2486,7.82,2487,7.82,2488,7.82,2489,7.82,2490,7.82,2491,7.196,2492,7.82,2493,7.82,2494,7.82]],["t/1512",[29,3.802,47,3.127,86,2.882,144,8.332,262,4.853,308,4.794,394,3.826,1434,6.354,2386,5.782,2436,7.641,2495,8.302,2496,8.302,2497,8.302,2498,8.302,2499,8.302,2500,8.302]],["t/1515",[9,1.435,49,3.304,333,1.527,401,4.593,2501,10.037]],["t/1517",[99,3.127,310,6.195,382,5.438,545,4.524,614,4.851,2502,9.746,2503,9.746]],["t/1519",[242,4.002,333,1.551,2504,10.189,2505,10.189]],["t/1522",[202,5.508,386,4.537,505,7.254,2506,10.189]],["t/1524",[204,3.015,214,3.743,257,4.937,300,4.578,316,4.937,322,4.089,369,3.589,382,4.467,536,4.569,567,5.357,1221,4.802,2086,6.383,2507,6.633,2508,8.006,2509,8.006,2510,8.006,2511,8.006,2512,8.006,2513,8.006,2514,8.006,2515,8.006]],["t/1526",[7,1.161,8,2.112,9,1.358,25,3.777,44,2.023,102,1.187,103,2.071,113,1.256,119,2.962,131,3.28,180,1.586,223,1.677,295,2.612,344,3.243,380,3.207,381,2.989,441,5.367,454,3.967,537,1.814,565,2.516,631,4.287,700,2.091,716,4.575,793,4.583,890,4.305,1051,4.965,1674,4.093,1769,3.653,2390,5.29,2398,3.403,2516,5.748,2517,5.748,2518,4.988,2519,5.748,2520,5.748,2521,5.748,2522,5.748,2523,5.748,2524,5.748,2525,5.748,2526,5.748,2527,5.748,2528,5.748,2529,5.748,2530,5.748]],["t/1528",[6,3.805,33,4.285,99,2.036,127,2.172,173,0.998,175,2.903,214,2.967,217,3.465,222,2.945,254,2.77,272,2.163,300,2.844,339,4.099,353,4.751,386,2.825,401,2.903,410,3.805,484,4.328,566,3.805,695,6.554,716,2.806,801,2.002,1434,3.857,2336,3.579,2398,3.756,2428,4.627,2531,6.344,2532,6.344,2533,6.344,2534,6.344,2535,6.344,2536,6.344,2537,6.344,2538,6.344,2539,6.344,2540,6.344,2541,6.344,2542,6.344,2543,6.344,2544,6.344,2545,6.344,2546,6.344]],["t/1530",[29,2.912,47,3.015,254,3.495,262,5.97,263,4.164,322,4.089,394,5.183,1326,6.174,1434,4.868,2003,6.947,2374,6.383,2407,6.383,2547,8.006,2548,8.006,2549,8.006,2550,8.006,2551,8.006,2552,8.006,2553,8.006]],["t/1533",[3,2.615,90,3.924,142,3.8,177,2.926,180,1.837,214,3.113,223,2.638,242,2.615,300,2.985,306,2.47,382,3.715,386,4.028,441,4.376,631,3.495,660,4.167,716,2.945,1109,7.212,1230,4.741,1237,5.309,2336,3.757,2554,10.273,2555,6.658,2556,6.658,2557,6.658,2558,6.658,2559,6.658,2560,6.658,2561,6.658,2562,6.658,2563,6.658,2564,6.658,2565,6.658,2566,6.658]],["t/1536",[5,2.671,7,1.836,8,3.338,32,5.07,99,2.916,175,4.159,180,2.507,369,4.074,545,4.218,614,4.523,695,6.805,2567,9.088]],["t/1538",[144,7.77,242,3.828,272,3.322,1347,6.939,2568,9.746,2569,9.746,2570,9.746]],["t/1540",[7,1.105,8,2.009,99,1.755,102,1.129,113,1.722,122,2.427,180,1.508,186,1.601,212,3.808,244,1.784,266,3.12,272,2.686,300,3.532,310,3.475,318,2.635,320,3.593,333,0.832,401,2.502,434,4.53,450,4.217,502,3.085,518,3.018,536,3.12,537,1.726,545,3.658,551,3.659,566,4.726,614,3.922,646,2.818,1270,3.422,1582,3.893,1694,3.475,1769,5.872,2251,4.217,2386,3.808,2571,5.468,2572,5.032,2573,5.468,2574,5.468,2575,5.468,2576,5.468,2577,5.468,2578,5.468,2579,5.468,2580,5.468,2581,4.217,2582,5.032,2583,4.53,2584,5.468,2585,5.468,2586,5.468,2587,5.468]],["t/1542",[5,1.675,8,2.094,44,2.857,180,1.572,204,2.147,306,4.04,338,2.426,350,2.158,377,2.59,380,3.18,381,2.964,382,4.529,452,3.146,454,2.768,565,2.501,566,3.418,716,4.182,1646,4.946,1767,3.888,1769,3.623,2398,5.597,2451,7.946,2588,5.699,2589,5.699,2590,5.699,2591,5.699,2592,5.699,2593,5.699,2594,5.699,2595,5.699,2596,5.699,2597,5.699,2598,5.699,2599,5.699,2600,5.699,2601,5.699,2602,5.699,2603,5.699,2604,5.699,2605,5.699,2606,5.699,2607,5.699]],["t/1544",[0,2.632,3,2.416,8,1.445,13,2.585,33,3.012,44,2.164,69,1.371,70,2.126,99,1.974,142,2.244,173,0.618,175,1.8,217,2.148,242,2.975,295,1.787,333,0.599,336,1.881,382,2.194,386,3.372,410,3.689,495,2.194,528,3.619,545,3.516,614,3.77,695,2.945,716,4.845,1229,2.8,1383,3.033,1399,2.359,2166,3.033,2337,4.042,2398,2.328,2420,2.868,2572,5.66,2608,3.619,2609,10.297,2610,3.136,2611,3.933,2612,3.933,2613,3.933,2614,3.933,2615,3.933,2616,3.933,2617,3.933,2618,3.933,2619,3.933,2620,3.413,2621,3.413,2622,3.619,2623,3.933,2624,3.933,2625,3.933,2626,3.619,2627,3.933,2628,3.413,2629,3.933,2630,3.933,2631,3.933,2632,3.933,2633,3.933,2634,3.933,2635,3.933,2636,3.933,2637,3.933,2638,8.565,2639,6.15,2640,3.933,2641,3.933,2642,3.933,2643,3.933,2644,3.933,2645,3.619,2646,3.933,2647,3.933,2648,3.933,2649,3.933]],["t/1546",[206,2.667,306,3.418,382,6.217,474,7.104,2608,8.478,2610,7.344,2650,11.144,2651,9.212,2652,9.212]],["t/1549",[70,5.193,242,3.773,333,1.462,495,5.36,545,4.459,614,4.782,2653,8.337,2654,9.607]],["t/1551",[333,1.527,343,6.716,545,4.659,673,6.484,2655,10.037]],["t/1554",[322,5.127,369,4.499,2086,8.002,2656,10.037,2657,10.037]],["t/1556",[50,7.77,716,4.311,2337,6.405,2420,7.108,2658,9.746,2659,9.746,2660,9.746]],["t/1559",[69,3.398,242,3.828,333,1.483,545,4.524,614,4.851,674,4.524,2661,8.969]],["t/1561",[416,7.007,419,5.841,2042,7.96,2662,7.96,2663,8.337,2664,7.96,2665,9.607,2666,9.607]],["t/1563",[242,3.261,344,4.684,377,3.773,380,4.632,381,4.318,565,2.557,619,5.048,716,3.672,1221,4.98,2337,5.456,2398,6.187,2667,8.302,2668,8.302,2669,8.302,2670,8.302,2671,6.879,2672,8.302,2673,8.302]],["t/1565",[69,2.931,114,2.697,242,3.302,245,4.455,333,1.279,401,3.847,523,7.295,545,3.902,614,4.184,631,4.413,674,3.902,716,3.718,752,3.67,1868,6.702,2661,7.736,2674,8.406,2675,8.406,2676,8.406]],["t/1567",[217,5.401,242,3.884,272,3.371,449,6.286,2677,9.889,2678,9.889]],["t/1570",[102,1.956,171,3.846,242,3.72,537,2.989,752,4.135,828,3.462,1436,5.469,2679,9.471,2680,8.717]],["t/1572",[3,2.84,7,1.461,8,2.656,9,1.034,102,1.974,113,1.58,122,2.228,171,2.936,274,3.541,316,4.459,333,1.1,339,4.671,401,3.309,480,5.036,654,3.991,694,2.825,752,3.157,768,2.498,801,2.282,828,2.643,1033,2.593,1281,6.275,1429,3.727,1436,4.176,2681,7.231,2682,6.655,2683,7.231,2684,7.231,2685,7.231,2686,7.231]],["t/1574",[565,3.092,716,4.439,752,4.382,1436,5.796,2680,9.237]],["t/1576",[217,4.77,716,5.406,1437,6.082,2682,8.037,2687,9.926,2688,6.218,2689,8.734,2690,8.734,2691,8.734,2692,8.078]],["t/1578",[9,1.045,49,2.406,64,3.02,93,5.331,102,2.223,114,2.346,127,2.503,162,3.277,171,2.968,206,2.116,386,3.255,508,3.837,518,4.034,768,2.526,828,2.672,1033,3.452,1435,5.828,1544,5.331,1889,6.343,2252,5.637,2438,6.343,2687,8.861,2693,7.31,2694,7.31,2695,6.727,2696,7.31]],["t/1581",[8,2.941,9,1.144,12,3.347,49,2.635,180,2.817,242,3.144,300,3.589,343,5.357,383,5.461,401,5.147,694,3.128,2697,7.368,2698,8.006,2699,8.006,2700,8.006,2701,8.006,2702,7.368,2703,8.006,2704,8.006]],["t/1583",[102,1.984,242,3.773,401,4.396,752,4.194,768,3.319,1436,5.548,2705,9.607,2706,9.607]],["t/1585",[306,3.119,394,3.874,765,5.985,1434,5.111,2150,7.736,2337,6.922,2398,6.235,2707,7.888,2708,8.406,2709,8.406,2710,8.406,2711,8.406,2712,8.406,2713,8.406,2714,8.406]],["t/1587",[29,2.265,33,3.049,156,3.958,160,3.3,217,3.401,272,2.123,306,2.31,318,3.001,382,3.474,484,4.248,544,3.3,545,2.891,548,3.239,574,3.786,614,3.1,659,4.092,716,3.821,740,5.404,1347,4.434,1437,4.336,1545,4.542,1902,4.802,2053,5.16,2238,4.336,2428,6.301,2446,5.731,2692,4.663,2715,6.227,2716,6.227,2717,9.129,2718,6.227,2719,6.227,2720,6.227,2721,6.227,2722,6.227,2723,6.227,2724,6.227,2725,6.227,2726,6.227,2727,6.227,2728,6.227,2729,6.227]],["t/1589",[29,2.878,64,3.269,84,5.294,234,3.368,332,5.925,367,3.368,394,3.646,472,5.029,694,3.091,740,8.796,1161,6.555,1434,4.81,2374,6.308,2379,6.555,2717,7.281,2730,6.555,2731,7.912,2732,7.912,2733,7.912,2734,7.912,2735,7.912,2736,7.912]],["t/1592",[4,1.782,7,1.38,8,2.509,9,1.23,11,1.241,13,2.21,29,1.223,37,1.497,47,2.573,49,1.107,50,7.72,65,1.167,114,1.743,142,1.919,171,1.365,173,0.529,175,1.539,176,1.897,204,1.267,206,0.973,212,2.342,214,1.572,217,1.837,233,2.593,242,2.133,245,1.782,260,2.045,274,1.647,300,2.434,316,2.074,326,4.499,333,0.512,335,3.095,338,1.432,360,2.518,394,2.503,401,2.485,428,2.518,472,2.137,473,1.358,484,2.294,574,2.045,666,2.137,674,1.561,694,2.668,716,2.402,733,2.918,752,1.468,801,1.061,828,1.985,882,2.21,1033,1.947,1399,2.017,1401,3.095,1629,2.786,2386,3.782,2581,6.047,2583,2.786,2697,3.095,2737,3.095,2738,3.363,2739,3.363,2740,3.363,2741,2.786,2742,3.363,2743,3.363,2744,3.363,2745,3.363,2746,3.363,2747,3.363,2748,5.659,2749,3.363,2750,3.363,2751,5.43,2752,5.43,2753,3.363,2754,5.43,2755,3.363,2756,3.363,2757,3.095,2758,3.363,2759,3.363,2760,3.363,2761,3.363,2762,3.363,2763,3.363,2764,3.363,2765,3.363,2766,3.363,2767,3.363,2768,3.363,2769,3.363,2770,3.363,2771,3.363,2772,3.363,2773,3.363,2774,3.363,2775,3.363,2776,3.363,2777,3.363,2778,3.363,2779,3.363]],["t/1594",[0,3.462,5,2.631,8,1.9,9,1.279,20,2.987,102,1.068,103,1.864,127,1.771,151,2.886,171,2.101,173,0.814,179,3.238,222,2.401,300,2.319,306,2.808,325,3.529,350,1.958,369,2.319,380,2.886,381,2.691,382,2.886,394,3.489,537,1.633,545,2.401,614,2.575,716,4.357,752,2.259,793,4.124,800,2.855,801,2.389,828,2.767,1221,3.103,1347,3.683,1399,3.103,2455,4.489,2780,5.173,2781,5.173,2782,5.173,2783,5.173,2784,5.173,2785,5.173,2786,3.99,2787,4.124,2788,5.173,2789,5.173,2790,5.173,2791,5.173,2792,5.173,2793,5.173,2794,5.173,2795,5.173,2796,5.173,2797,5.173,2798,5.173,2799,5.173,2800,5.173,2801,5.173]],["t/1596",[4,2.072,7,1.237,9,0.559,13,2.57,33,2.998,175,2.802,204,1.473,214,1.828,217,3.344,267,2.852,274,1.915,300,1.753,306,2.799,308,2.258,333,0.932,382,4.763,394,4.272,537,1.234,611,2.617,626,2.928,631,2.053,666,4.796,716,4.545,1106,2.345,1437,2.723,1545,4.465,1654,3.117,2049,3.24,2336,2.206,2376,3.24,2420,4.465,2620,5.313,2621,3.393,2622,3.598,2688,2.784,2692,4.585,2802,3.598,2803,3.91,2804,3.91,2805,3.598,2806,3.91,2807,3.91,2808,3.393,2809,3.91,2810,3.015,2811,3.598,2812,3.91,2813,3.393,2814,3.91,2815,3.91,2816,3.91,2817,3.91,2818,3.91,2819,3.91,2820,3.91,2821,3.91,2822,3.91,2823,3.91,2824,3.91,2825,3.91,2826,3.91,2827,3.91,2828,3.91,2829,3.91,2830,3.91,2831,3.91,2832,3.91,2833,3.91,2834,3.91,2835,3.91,2836,3.91,2837,3.91,2838,3.91,2839,3.91,2840,3.91,2841,3.91,2842,3.91,2843,3.91,2844,3.91,2845,3.91,2846,3.91,2847,3.91,2848,3.91,2849,3.91]],["t/1598",[31,3.669,172,4.916,318,4.103,394,4.893,437,5.696,473,3.437,1641,7.387,2073,5.928,2407,6.787,2850,8.512,2851,8.512,2852,8.512,2853,8.512,2854,8.512,2855,8.512,2856,8.512]],["t/1600",[8,3.58,217,5.323,242,3.828,300,4.369,401,4.46,2857,9.746,2858,9.746]],["t/1603",[12,4.134,16,7.213,792,7.627,1600,7.884,2491,9.101,2859,9.889]],["t/1605",[102,1.694,114,2.632,380,4.576,381,4.265,382,4.576,394,3.78,606,3.952,665,6.538,692,4.919,716,3.627,768,2.834,1241,5.981,1429,4.227,2452,6.795,2860,8.201,2861,8.201,2862,8.201,2863,8.201,2864,8.201,2865,8.201]],["t/1607",[2420,7.431,2428,7.431,2866,10.189,2867,10.189]],["t/1609",[29,3.306,64,3.754,65,3.154,180,2.507,390,5.972,1434,6.72,1600,7.245,2868,9.088,2869,7.53,2870,9.088,2871,9.088]],["t/1612",[29,3.545,253,5.268,254,4.255,295,4.429,461,4.283,545,4.524,2872,8.969]],["t/1614",[113,2.099,242,3.773,333,1.462,545,5.305,614,4.782,2873,9.607,2874,9.607]],["t/1616",[3,2.78,4,3.752,29,2.575,93,5.163,253,5.095,254,3.091,295,3.217,344,5.318,393,4.652,394,3.263,461,3.111,478,4.573,545,4.375,614,3.524,1889,6.143,2398,4.191,2581,5.459,2872,6.515,2875,7.079,2876,7.079,2877,7.079,2878,6.515,2879,7.079,2880,7.079,2881,7.079,2882,7.079,2883,7.079,2884,6.515,2885,7.079,2886,7.079]],["t/1618",[49,2.459,106,2.378,350,2.829,382,5.45,394,4.502,667,6.191,669,6.191,716,4.321,793,5.957,1229,5.32,1455,5.957,2162,5.596,2337,4.91,2626,6.877,2887,7.472,2888,7.472,2889,7.472,2890,7.472,2891,7.472,2892,7.472,2893,7.472,2894,7.472,2895,7.472,2896,7.472,2897,7.472]],["t/1620",[3,2.401,5,1.797,8,2.246,9,0.874,22,1.656,33,4.176,44,2.151,70,3.305,242,2.401,253,3.305,291,4.353,716,4.945,1332,4.353,1399,3.667,2386,4.257,2581,6.578,2688,6.073,2692,4.578,2898,6.114,2899,5.626,2900,6.114,2901,7.849,2902,6.114,2903,6.114,2904,6.114,2905,5.626,2906,6.114,2907,6.114,2908,5.066,2909,5.626,2910,6.114,2911,6.114,2912,6.114,2913,6.114,2914,6.114,2915,6.114,2916,6.114,2917,6.114,2918,6.114,2919,6.114]],["t/1622",[7,1.788,8,3.25,20,5.11,29,3.219,127,3.03,222,4.107,517,6.824,1434,5.38,2379,7.332,2386,6.162,2920,8.848,2921,8.848,2922,8.848,2923,8.848]],["t/1624",[113,2.193,217,5.482,716,4.439,1429,5.173,2901,9.237]],["t/1626",[242,3.884,539,6.618,2425,6.098,2924,9.889,2925,9.889,2926,9.889]],["t/1629",[9,1.555,29,3.553,101,3.143,102,1.543,211,5.957,214,3.494,223,2.179,274,3.659,300,3.349,349,2.758,383,5.097,473,3.017,674,3.469,1631,6.484,1642,5.596,2927,5.203,2928,7.472,2929,7.472,2930,7.472,2931,7.472,2932,7.472,2933,7.472,2934,7.472,2935,6.877,2936,7.472]],["t/1631",[0,6.338,44,3.333,173,1.489,461,4.162,545,4.397,631,4.972,716,4.189,2937,9.471,2938,9.471]],["t/1633",[306,3.78,2451,7.858,2939,10.189,2940,10.189]],["t/1635",[37,3.697,44,3.678,69,2.895,113,1.814,173,1.306,229,4.98,333,1.263,394,3.826,461,3.648,545,3.854,551,5.556,614,4.133,1155,7.205,1386,5.556,2941,8.302,2942,7.205,2943,8.302,2944,8.302]],["t/1637",[1654,8.002,2398,5.942,2945,10.037,2946,10.037,2947,10.037]],["t/1640",[8,3.529,44,3.381,173,1.511,180,2.65,223,2.802,549,6.429,564,4.951,2942,8.337]],["t/1643",[5,2.381,8,2.976,44,2.851,97,2.6,173,1.274,180,2.235,223,2.363,242,3.182,333,1.233,390,5.325,394,3.734,469,3.493,549,5.422,564,4.176,1545,5.909,2942,7.031,2948,7.456,2949,7.456,2950,8.102,2951,8.102,2952,8.102]],["t/1645",[3,3.144,8,3.752,113,1.75,177,3.518,254,3.495,295,3.638,333,1.218,660,5.011,801,2.527,1033,2.871,1399,4.802,2357,6.633,2869,6.633,2953,7.368,2954,8.006,2955,8.006,2956,8.006,2957,8.006,2958,8.006,2959,8.006,2960,8.006]],["t/1647",[9,1.068,127,2.558,134,6.024,151,4.169,165,3.573,226,4.827,244,2.439,273,4.827,274,3.659,310,4.749,386,3.327,472,4.749,478,4.827,479,5.203,480,5.203,481,4.315,654,4.124,1033,2.679,1270,4.677,1676,5.596,1869,5.957,2961,7.472,2962,6.877,2963,7.472,2964,7.472,2965,7.472,2966,7.472]],["t/1649",[716,4.507,2398,6.032,2967,10.189,2968,10.189]],["t/1651",[9,0.692,33,2.369,47,2.713,64,1.999,102,1.488,113,1.057,119,2.493,127,2.947,151,2.699,171,1.965,217,3.935,222,3.344,223,2.101,225,2.296,231,2.73,242,2.83,244,1.579,256,2.864,274,2.369,295,2.199,304,2.902,329,3.301,369,2.169,386,2.154,388,2.332,401,2.214,410,2.902,484,4.915,508,2.54,537,1.527,716,3.187,781,4.199,792,3.731,801,1.527,828,2.634,1033,1.735,1752,4.009,1769,3.075,2336,2.73,2337,4.735,2340,4.453,2398,2.864,2518,4.199,2884,4.453,2962,6.63,2969,4.838,2970,4.838,2971,8.608,2972,4.838,2973,4.838,2974,4.838,2975,4.838,2976,4.838,2977,4.838,2978,4.838,2979,4.838,2980,7.204,2981,4.838,2982,4.838,2983,4.838,2984,4.838]],["t/1653",[5,1.422,7,1.456,8,1.777,11,1.786,29,1.76,47,1.822,64,1.999,97,2.312,134,2.984,172,2.794,173,0.761,175,2.214,180,1.335,242,1.9,263,2.516,304,5.163,333,0.736,390,4.735,394,2.23,401,2.214,437,3.238,469,4.111,473,2.909,478,3.126,517,3.731,519,2.154,660,3.028,758,3.028,1399,4.321,1434,2.942,1545,3.529,1654,3.857,2357,4.009,2379,4.009,2386,5.994,2869,7.132,2948,4.453,2949,4.453,2985,4.838,2986,4.838,2987,4.838,2988,4.838,2989,4.838,2990,4.453,2991,4.838,2992,4.838,2993,4.838,2994,4.838,2995,4.838,2996,4.838,2997,4.838,2998,4.838,2999,4.838,3000,4.453,3001,4.838,3002,4.838,3003,4.838,3004,4.838,3005,4.838,3006,4.838,3007,4.838,3008,4.838,3009,4.838]],["t/1656",[3,3.071,29,2.845,102,1.615,103,2.817,173,1.23,242,3.951,469,4.337,473,4.491,519,3.482,674,3.63,1117,4.894,1399,6.034,3010,7.82,3011,7.82,3012,7.82,3013,7.82,3014,7.82,3015,7.82,3016,7.82]],["t/1658",[5,1.813,7,1.247,8,2.266,9,0.882,16,4.5,21,1.924,29,2.244,49,2.031,86,2.141,113,1.348,152,3.37,173,0.97,180,2.368,253,3.335,310,3.922,382,3.442,401,2.823,467,4.62,468,4.5,469,2.66,473,2.491,535,4.919,674,2.864,716,2.729,880,3.442,1270,3.861,1399,3.701,3017,6.17,3018,6.17,3019,6.17,3020,6.17,3021,6.17,3022,6.17,3023,6.17,3024,6.17,3025,6.17,3026,6.17,3027,6.17,3028,5.354,3029,6.17,3030,6.17,3031,5.678,3032,6.17,3033,6.17,3034,6.17,3035,6.17]],["t/1660",[42,7.236,242,3.43,441,5.739,565,2.69,716,3.863,752,3.813,1419,5.466,1436,5.043,2337,5.739,2398,5.17,2671,7.236,3036,8.734,3037,8.734,3038,8.734,3039,8.734]],["t/1662",[4,1.517,6,1.717,7,0.578,9,0.68,13,1.881,26,1.58,29,1.041,33,2.33,61,1.881,64,1.182,65,0.993,102,1.469,103,1.031,108,1.694,113,0.625,114,2.283,160,1.517,179,2.978,180,0.789,202,2.572,204,1.078,214,1.338,217,3.886,242,3.715,286,1.338,300,1.283,306,1.062,333,0.436,343,1.915,344,2.684,349,1.057,370,1.819,469,2.632,472,3.024,473,1.155,481,3.526,513,1.155,537,0.903,539,1.915,574,1.74,589,1.811,601,1.765,611,3.184,649,1.881,674,1.328,700,1.041,716,3.77,752,1.249,754,2.207,768,1.644,1033,1.026,1117,1.791,1399,1.717,1419,1.791,1434,1.74,1436,1.653,1545,2.087,1575,3.024,1694,3.024,2013,2.371,2362,2.634,2402,2.484,2420,5.76,2425,1.765,2428,2.087,2507,2.371,2620,6.174,2621,2.484,2757,2.634,2802,2.634,2805,2.634,3040,2.862,3041,2.862,3042,6.107,3043,2.862,3044,2.862,3045,2.484,3046,2.862,3047,2.862,3048,2.862,3049,2.634,3050,4.379,3051,2.862,3052,2.862,3053,2.862,3054,2.862,3055,2.862,3056,2.862,3057,2.862,3058,2.862,3059,2.862,3060,2.862,3061,2.862,3062,2.862,3063,2.862,3064,2.862,3065,2.862,3066,2.862,3067,2.862,3068,2.862,3069,2.862,3070,2.862,3071,2.862,3072,2.862,3073,2.371,3074,2.862,3075,2.862,3076,2.862,3077,2.862,3078,2.862,3079,2.862,3080,2.862,3081,2.862,3082,2.862,3083,2.862,3084,2.862,3085,2.862,3086,2.862,3087,2.862,3088,2.862,3089,2.862,3090,2.862,3091,2.862,3092,2.862,3093,2.862,3094,2.862,3095,2.862]],["t/1664",[7,1.07,9,1.1,28,3.966,102,1.094,206,1.533,223,2.246,263,2.754,304,3.176,332,3.966,390,5.06,394,3.548,401,3.523,469,3.911,470,3.654,473,3.663,480,3.688,502,2.988,518,2.923,519,2.358,567,3.544,792,4.084,1033,1.899,1117,3.314,1153,4.388,1399,4.618,1434,5.516,2869,6.379,2990,4.873,3000,4.873,3050,4.873,3096,5.295,3097,5.295,3098,5.295,3099,5.295,3100,5.295,3101,5.295,3102,5.295,3103,5.295,3104,5.295,3105,5.295,3106,5.295,3107,5.295,3108,5.295,3109,5.295,3110,5.295,3111,5.295,3112,5.295,3113,5.295,3114,5.295,3115,5.295,3116,5.295]],["t/1667",[3,3.809,102,2.003,114,3.112,124,4.625,165,3.534,206,2.139,223,2.155,242,4.513,469,3.186,470,3.507,480,5.146,1399,5.816,1422,4.375,1423,3.59,2303,6.801,3117,7.39,3118,7.39,3119,7.39,3120,7.39,3121,7.39,3122,7.39,3123,7.39]],["t/1669",[5,1.649,6,2.101,7,0.708,8,1.287,12,1.464,29,2.041,34,2.902,47,2.114,64,2.318,97,1.124,102,1.45,103,2.022,113,1.92,114,1.124,122,1.079,165,1.675,169,2.555,172,3.24,173,0.551,176,1.976,179,2.192,203,2.263,206,1.014,238,2.023,242,2.204,274,1.715,316,2.16,333,0.854,338,1.491,344,1.976,368,3.04,386,1.56,409,2.701,435,1.662,449,2.226,469,4.666,472,3.567,473,1.414,481,2.023,509,2.555,518,1.933,536,1.999,563,3.755,575,2.226,635,2.439,674,1.626,683,2.793,694,1.368,768,1.21,1033,1.256,1117,2.192,1399,6.329,1575,2.226,1848,2.793,1858,2.902,2113,3.224,2507,2.902,2748,2.902,2927,2.439,3124,3.503,3125,3.503,3126,3.503,3127,3.503,3128,3.04,3129,3.503,3130,3.503,3131,3.503,3132,3.503,3133,3.503,3134,3.503,3135,3.503,3136,3.503,3137,3.503,3138,3.503,3139,3.503,3140,3.503,3141,3.503,3142,3.503,3143,3.503,3144,3.503,3145,3.503,3146,3.503,3147,3.224,3148,3.503,3149,3.503,3150,3.503,3151,3.503,3152,3.04,3153,3.503,3154,3.503,3155,3.503,3156,3.503,3157,3.503,3158,3.503,3159,3.503,3160,3.224,3161,3.503]],["t/1671",[47,3.664,102,1.24,114,1.927,165,2.872,223,1.751,242,4.142,267,7.095,344,3.388,386,3.75,452,3.314,509,6.143,716,3.725,724,3.095,774,4.497,1614,4.975,1638,4.181,1870,4.631,2002,8.879,2398,4.986,2671,4.975,2808,7.309,3162,6.005,3163,6.005,3164,6.005,3165,6.005,3166,6.005,3167,8.422,3168,6.005,3169,6.005,3170,5.526,3171,6.005,3172,6.005]],["t/1673",[5,1.243,6,2.537,9,0.605,29,1.539,64,1.747,73,3.168,102,1.344,113,0.924,114,2.088,127,1.448,160,2.242,166,2.885,173,0.665,177,1.859,179,2.647,180,1.795,217,2.31,222,1.963,242,3.115,256,2.504,290,2.023,300,1.896,306,2.414,333,0.644,344,2.386,360,3.168,382,2.36,390,2.78,394,1.949,401,1.936,437,2.83,441,2.78,454,2.055,466,2.105,473,2.627,519,1.883,660,2.647,674,1.963,694,1.652,716,2.878,768,1.461,891,2.414,1033,1.517,1230,3.012,1423,2.055,1424,2.647,1629,3.505,1694,2.688,1804,2.78,1812,3.085,1817,3.012,2104,3.893,2374,3.372,2398,2.504,2410,3.671,2413,3.893,2420,3.085,2688,3.012,2707,3.168,3128,3.671,3147,5.989,3173,4.23,3174,4.23,3175,4.23,3176,4.23,3177,4.23,3178,4.23,3179,4.23,3180,4.23,3181,4.23,3182,4.23,3183,4.23,3184,4.23,3185,4.23,3186,4.23,3187,4.23,3188,4.23,3189,4.23,3190,4.23,3191,4.23,3192,4.23,3193,4.23,3194,4.23,3195,4.23,3196,4.23,3197,4.23,3198,4.23,3199,4.23]],["t/1675",[7,1.449,8,2.634,9,0.517,29,1.315,37,2.563,44,1.272,47,4.017,97,1.16,102,1.189,104,1.666,106,1.832,122,1.114,127,1.238,171,1.468,189,2.788,206,1.666,214,2.691,222,1.678,223,1.679,300,2.58,304,4.301,310,3.658,333,0.876,394,2.653,461,1.589,469,3.524,470,1.716,519,1.61,543,3.328,545,1.678,565,1.773,598,2.796,801,1.141,828,2.104,1096,2.23,1399,4.301,1434,3.499,1642,2.708,1936,2.788,2336,3.247,2386,2.518,2507,2.996,2748,8.575,3152,3.138,3200,3.616,3201,3.616,3202,3.616,3203,3.616,3204,3.616,3205,3.616,3206,3.616,3207,3.616,3208,3.616,3209,3.616,3210,3.616,3211,3.616,3212,3.616,3213,3.616,3214,3.616,3215,3.616,3216,3.616,3217,3.616,3218,3.616,3219,3.616,3220,3.616,3221,3.616,3222,3.616,3223,3.616,3224,3.616,3225,3.616,3226,3.616,3227,3.616,3228,3.616,3229,3.616,3230,3.616,3231,3.616,3232,3.616,3233,3.616,3234,3.616,3235,3.616,3236,3.616,3237,3.616,3238,3.616]],["t/1678",[9,1.373,44,3.381,65,3.334,127,3.289,318,4.63,333,1.462,579,5.841,3239,8.841]],["t/1680",[103,3.511,165,4.661,176,5.498,180,2.688,588,3.767,3240,9.746,3241,9.746]],["t/1682",[9,0.863,29,2.714,69,1.34,90,2.62,102,1.247,103,1.385,113,1.32,114,2.394,127,1.316,142,2.193,171,1.56,176,4.21,231,2.168,232,2.057,263,1.999,281,2.622,293,2.275,306,1.426,310,3.839,318,1.852,326,5.005,386,2.689,401,4.207,410,2.305,466,1.913,470,2.867,473,1.552,480,2.676,484,4.12,509,2.803,519,2.689,536,2.193,606,1.852,610,2.964,635,2.676,674,1.784,694,1.501,700,1.398,768,1.328,782,1.946,783,2.845,828,1.405,1033,2.676,1089,3.064,1422,2.275,1423,1.867,1483,3.335,1558,3.537,1575,5.375,1762,2.337,1763,2.337,1773,3.184,1798,2.878,1817,2.736,2254,3.335,2741,3.184,2748,5.005,2927,2.676,3242,3.843,3243,3.843,3244,3.843,3245,3.843,3246,3.843,3247,3.843,3248,3.843,3249,3.843,3250,3.843,3251,3.843,3252,3.335,3253,3.843,3254,3.843,3255,3.537,3256,3.843,3257,3.843,3258,3.843,3259,3.843,3260,3.843,3261,3.843,3262,3.843,3263,3.843,3264,3.843,3265,3.843,3266,3.843,3267,3.843,3268,3.843,3269,3.843]],["t/1684",[9,0.808,44,2.839,47,2.129,65,1.961,102,1.167,186,1.655,219,3.263,253,4.362,264,6.686,306,2.994,350,2.139,380,5.25,381,4.196,382,3.153,394,2.605,457,3.055,467,4.232,468,4.122,631,2.967,716,4.801,1221,3.39,1505,4.683,2374,4.506,2398,5.571,3270,5.651,3271,5.651,3272,5.651,3273,5.651,3274,9.41,3275,5.651,3276,5.651,3277,5.651,3278,5.651,3279,5.651,3280,5.651,3281,5.651,3282,5.651,3283,5.651,3284,5.651,3285,5.651,3286,5.651,3287,5.651]],["t/1686",[6,1.681,7,0.945,8,1.029,9,0.401,21,0.874,22,0.759,33,2.946,44,0.986,56,1.485,65,1.623,69,0.977,102,1.45,106,1.488,114,2.706,122,1.44,127,0.959,173,0.946,180,0.773,202,1.515,204,1.055,214,1.31,217,3.285,242,3.825,253,1.515,272,1.594,291,3.329,300,1.256,306,2.605,318,1.351,322,1.431,333,1.188,338,1.193,343,3.129,349,1.034,394,1.291,401,1.282,454,1.361,470,1.33,473,1.131,492,2.17,519,1.248,535,3.727,537,0.884,547,1.265,565,0.863,579,1.704,598,2.271,612,1.53,627,1.951,631,2.454,654,1.547,674,1.301,695,2.099,700,2.188,701,1.581,716,2.068,782,1.419,783,1.32,1033,2.157,1221,1.681,1332,1.995,1338,2.994,1446,2.161,1450,2.322,1530,2.322,1620,4.283,1642,2.099,1817,3.329,1899,2.579,2140,2.322,2181,2.322,2321,2.234,2336,2.638,2398,2.768,2455,2.432,2583,2.322,2645,2.579,2692,2.099,2702,2.579,2741,4.984,2905,2.579,3239,2.579,3255,2.579,3288,2.802,3289,2.802,3290,2.802,3291,2.802,3292,2.432,3293,2.802,3294,2.802,3295,2.802,3296,2.802,3297,2.802,3298,6.016,3299,2.802,3300,4.675,3301,2.802,3302,2.802,3303,2.802,3304,2.802,3305,2.802,3306,2.802,3307,2.802,3308,2.802,3309,2.802,3310,2.802,3311,2.802,3312,2.802,3313,2.579,3314,2.802,3315,2.802,3316,2.802,3317,2.802,3318,2.802,3319,2.802,3320,2.802,3321,2.802,3322,2.802,3323,2.802,3324,2.802,3325,2.802]],["t/1688",[7,1.691,64,3.458,97,1.91,142,3.396,173,0.936,211,4.745,317,4.341,332,4.457,337,4.341,338,3.563,394,2.743,469,2.565,631,3.124,700,2.165,848,3.358,1107,4.59,1270,3.725,1399,3.57,1434,3.618,1929,7.263,2336,3.358,2688,6.893,2908,4.931,3326,5.951,3327,8.37,3328,5.951,3329,5.951,3330,5.951,3331,5.951,3332,5.951,3333,5.951,3334,5.951,3335,5.951,3336,5.951,3337,5.951,3338,5.951,3339,5.951,3340,5.951,3341,5.951,3342,5.951,3343,5.951,3344,5.951,3345,5.951,3346,5.951]],["t/1690",[217,5.401,242,3.884,473,3.993,700,3.598,1817,7.041,3347,9.889]],["t/1692",[3,2.358,28,4.497,47,2.262,48,5.211,49,1.976,116,3.555,142,3.427,164,2.285,202,3.246,206,2.438,306,3.125,316,3.703,344,3.388,376,4.018,382,4.699,394,2.767,539,4.018,551,4.018,569,4.379,716,3.725,1229,4.275,1510,5.211,2002,4.631,2065,5.211,2337,5.535,2425,3.703,2426,4.975,2581,4.631,2813,5.211,3045,5.211,3348,4.379,3349,6.005,3350,6.005,3351,6.005,3352,6.005,3353,6.005,3354,6.005,3355,6.005,3356,6.005,3357,6.005,3358,6.005,3359,6.005,3360,6.005,3361,6.005,3362,6.005]],["t/1695",[37,3.327,69,2.605,97,3.134,111,4.169,165,3.573,203,4.827,306,2.772,318,3.601,333,1.137,452,4.124,469,3.221,544,3.96,733,6.484,794,5.596,1399,4.482,2074,6.484,2688,5.32,2741,6.191,2908,6.191,3252,6.484,3363,7.472,3364,7.472,3365,7.472,3366,7.472,3367,6.877,3368,7.472,3369,7.472]],["t/1697",[7,1.678,73,6.217,217,6.247,394,3.826,1405,8.659,2410,7.205,2688,5.911,2908,6.879,3370,8.302,3371,10.451,3372,8.302,3373,8.302,3374,8.302,3375,8.302,3376,8.302]],["t/1699",[97,3.576,106,2.932,272,3.14,312,4.93,469,3.971,505,6.559,1399,5.525,1414,7.104,2878,8.478,3377,9.212]],["t/1701",[37,4.645,99,2.202,113,1.5,173,1.079,256,4.062,300,3.076,306,2.546,333,1.588,360,5.139,386,3.055,390,4.51,394,4.255,513,3.727,521,4.592,551,4.592,801,2.166,848,3.872,1326,5.292,2251,5.292,2376,5.686,2451,5.292,3378,6.862,3379,6.862,3380,6.862,3381,6.862,3382,6.862,3383,6.862,3384,6.862,3385,6.862,3386,6.862]],["t/1703",[37,4.102,102,1.902,114,2.956,242,3.618,716,4.075,752,4.022,2298,8.478,2452,7.633,3387,9.212,3388,9.212,3389,9.212]],["t/1705",[3,1.24,4,1.673,29,1.877,33,1.546,37,4.381,44,1.816,64,1.304,65,1.096,73,2.365,97,3.511,102,0.652,103,1.138,106,1.005,113,0.69,133,1.613,153,1.69,203,2.04,204,1.189,206,0.914,217,3.573,223,0.921,242,2.57,244,1.03,262,1.846,272,1.076,290,2.467,306,1.171,331,2.199,344,1.781,380,1.762,381,1.642,394,2.378,401,1.445,452,1.743,461,1.387,469,3.257,484,2.154,518,2.848,519,4.381,631,1.658,716,3.342,800,1.743,1049,2.04,1221,3.095,1231,2.435,1345,2.517,1383,2.435,1399,3.095,1434,5.063,1450,2.616,1575,3.279,1667,2.517,1729,4.477,2040,2.74,2073,2.199,2451,3.979,2452,2.616,2688,2.248,2692,2.365,2707,2.365,3390,3.157,3391,10.471,3392,3.157,3393,3.157,3394,3.157,3395,3.157,3396,3.157,3397,5.159,3398,3.157,3399,3.157,3400,3.157,3401,3.157,3402,3.157,3403,3.157,3404,3.157,3405,3.157,3406,3.157,3407,3.157,3408,3.157,3409,3.157,3410,3.157,3411,3.157,3412,3.157,3413,3.157,3414,5.159,3415,3.157,3416,3.157,3417,3.157,3418,3.157,3419,3.157,3420,3.157]],["t/1708",[631,4.903,716,4.131,2337,6.138,2425,5.76,3031,8.595,3421,8.595,3422,9.34,3423,9.34,3424,9.34,3425,9.34]],["t/1710",[73,7.516,1466,8.002,3426,10.037,3427,10.037,3428,10.037]],["t/1713",[3,0.875,5,0.655,7,1.026,8,0.818,9,0.318,12,1.608,17,2.805,21,0.694,43,1.463,44,0.784,47,2.57,49,0.733,64,1.589,65,0.773,68,2.05,86,0.773,101,2.542,102,1.899,106,1.224,111,3.372,113,0.841,114,0.715,122,0.686,127,0.763,133,1.965,159,2.917,164,0.847,167,1.376,171,0.904,173,1.259,177,1.69,180,1.061,186,0.652,198,1.933,204,1.449,206,1.113,215,1.463,219,1.286,231,1.256,238,1.286,239,1.415,241,1.599,242,2.68,244,0.727,253,2.745,263,1.158,272,3.018,276,0.904,286,1.799,310,1.415,317,1.624,318,1.073,322,1.137,333,0.585,336,1.065,350,1.922,369,2.276,370,2.445,377,1.748,411,2.571,425,2.966,432,1.302,445,4.078,448,1.717,450,1.717,452,1.229,454,1.868,455,2.741,456,2.049,457,2.079,458,4.672,460,1.239,461,0.979,464,4.048,465,3.187,513,0.899,537,1.214,547,1.005,566,2.307,654,1.229,660,1.394,682,1.845,686,1.717,687,3.187,693,2.41,694,1.983,752,1.679,801,2.526,821,1.519,828,2.209,834,1.415,887,1.394,1033,1.379,1270,1.394,1419,2.407,1436,2.221,1446,1.717,1570,2.049,1575,2.445,1676,2.881,1769,2.445,1869,1.775,1976,1.933,1977,1.933,1988,3.54,2036,3.338,2251,2.966,2312,1.933,2927,1.551,3429,2.227,3430,2.227,3431,2.227,3432,2.049,3433,2.049,3434,2.049,3435,2.227,3436,2.227,3437,2.227,3438,2.227,3439,2.227]],["t/1715",[3,3.107,7,1.599,31,3.41,36,5.925,165,3.784,175,3.621,176,5.718,208,5.925,221,5.397,242,3.107,260,4.81,312,4.234,369,3.546,412,5.925,432,4.625,848,4.464,1327,5.925,1399,4.745,1659,5.633,2013,6.555,2811,7.281,3440,7.912]],["t/1718",[9,0.933,11,4.035,39,3.365,43,4.291,44,4.028,54,3.865,102,1.348,114,2.864,132,4.218,171,2.651,173,1.027,304,3.916,306,2.422,349,2.41,367,2.78,369,2.927,454,3.172,752,3.897,828,3.263,1033,3.2,1349,4.454,1417,6.215,1748,4.291,1799,4.291,1800,4.762,1801,4.086,1802,4.89,3441,6.529,3442,6.529]],["t/1720",[3,3.569,9,1.299,97,2.916,102,1.877,113,1.986,253,4.913,272,3.098,293,5.38,367,3.869,445,6.036,469,3.917]],["t/1723",[3,1.229,5,1.505,8,1.149,9,1.074,11,2.4,12,2.141,22,0.847,26,1.726,29,2.365,43,4.272,44,2.644,47,1.928,49,2.139,65,1.086,73,2.343,78,2.281,86,1.086,97,1.643,99,1.004,102,1.551,106,0.995,113,0.684,114,1.004,126,1.557,131,2.922,155,1.691,164,1.19,165,2.449,169,2.281,175,1.431,176,2.889,186,1.499,204,1.178,206,1.482,225,1.485,242,3.255,255,1.691,262,1.829,272,2.216,318,2.468,324,1.829,338,1.332,349,1.89,388,1.508,401,1.431,425,2.412,426,2.227,432,1.829,454,3.157,461,1.375,469,2.207,473,4.096,508,1.642,537,1.616,545,1.452,565,0.964,583,2.093,586,1.852,588,1.209,589,1.19,592,2.281,594,1.215,598,1.519,631,1.642,660,1.958,674,1.452,754,3.949,758,1.958,768,2.596,783,1.474,828,1.872,1031,3.308,1033,1.122,1077,1.485,1090,2.056,1258,2.021,1413,3.254,1423,1.519,1424,1.958,1436,1.806,1648,2.343,1742,1.708,1760,2.715,1761,1.852,1799,2.056,1811,3.308,1817,2.227,2037,2.592,2321,2.494,2327,2.879,3443,4.243,3444,3.128,3445,3.128,3446,3.128,3447,5.12,3448,2.879,3449,3.128]],["t/1725",[3,2.976,5,1.522,7,1.531,9,0.453,12,1.326,21,0.989,29,2.388,61,2.085,64,2.712,65,1.101,86,1.101,97,1.662,102,1.564,104,2.387,106,2.089,113,0.693,114,2.106,126,1.579,127,1.773,162,1.422,164,1.207,165,1.517,171,1.288,175,1.452,176,1.79,180,1.429,186,1.516,204,1.195,206,1.499,223,1.511,242,1.246,253,2.8,266,1.81,272,2.237,273,2.049,293,3.066,300,1.422,313,2.209,322,2.645,333,0.483,340,3.879,344,1.79,349,1.171,367,3.813,369,1.422,395,1.854,399,4.172,401,2.37,411,1.606,432,1.854,435,1.506,441,2.085,460,2.115,473,1.281,478,2.049,479,2.209,509,3.778,512,2.314,513,1.281,537,1.635,575,2.016,635,2.209,645,2.447,752,1.385,754,3.994,768,1.096,783,1.494,801,1.001,827,3.028,828,2.399,1033,2.354,1350,2.164,1413,2.016,1424,1.985,1437,3.607,1815,2.123,1856,2.753,2188,2.753,2252,2.447,2254,2.753,2334,2.447,3421,2.919,3443,2.629,3448,2.919,3450,3.172,3451,3.172,3452,3.172,3453,3.172,3454,3.172,3455,3.172,3456,7.576,3457,3.172,3458,3.172,3459,5.179,3460,3.172,3461,3.172]],["t/1728",[3,3.941,8,2.861,9,0.769,12,2.249,102,1.89,131,3.07,149,4.951,152,4.254,171,3.162,177,3.422,180,2.148,226,3.476,242,3.595,244,1.756,245,2.851,254,2.349,338,2.29,339,3.476,367,2.29,394,2.48,401,2.462,437,3.6,478,3.476,484,3.67,489,4.149,490,3.67,537,1.698,547,2.428,634,3.536,754,4.149,774,4.029,801,2.458,828,3.346,1033,2.793,1344,3.831,1747,5.313,1769,3.42,2336,3.035,3462,5.38,3463,7.788,3464,5.38,3465,5.38,3466,4.951,3467,5.38,3468,5.38]],["t/1730",[9,1.299,12,1.838,22,1.191,29,1.599,97,2.606,102,1.384,105,2.055,106,1.399,113,1.775,114,1.411,127,2.295,151,3.739,162,1.97,173,1.054,179,2.751,186,1.287,231,2.48,240,2.999,242,1.726,253,2.376,254,1.919,260,2.673,272,3.334,290,2.102,318,2.118,339,2.84,344,2.48,353,5.019,386,1.957,395,2.569,401,3.067,410,2.636,441,2.889,452,3.699,457,3.623,460,1.416,472,4.26,480,5.656,502,2.48,536,2.508,547,3.025,574,2.673,629,2.941,641,3.814,674,2.04,694,1.717,758,2.751,801,2.564,810,3.061,828,1.607,1033,1.576,1270,4.194,1326,3.39,1575,4.26,2065,3.814,2176,4.045,3469,6.702,3470,4.396,3471,4.396,3472,4.396,3473,3.642,3474,4.045,3475,4.396]],["t/1732",[7,1.359,20,5.259,29,3.313,65,2.334,69,2.345,86,2.334,100,3.673,121,3.405,133,3.435,160,3.564,165,4.355,214,3.145,221,7.044,231,5.138,242,3.577,261,4.209,300,3.015,332,5.036,386,2.994,388,3.241,401,4.725,513,2.715,654,3.712,765,4.788,1331,4.683,1654,7.26,2129,5.186,3476,6.725]],["t/1735",[1,1.173,3,0.878,5,2.942,6,1.34,7,1.224,8,2.225,9,1.069,12,3.352,16,2.813,26,1.233,27,1.524,29,3.788,31,0.963,43,2.535,44,2.132,47,2.575,86,0.776,88,1.359,97,1.238,101,0.94,106,0.711,121,1.953,122,0.688,152,1.22,156,4.346,159,0.873,160,5.418,163,1.591,165,3.577,167,1.117,172,3.949,173,1.574,175,3.878,176,3.858,177,3.005,180,1.671,186,1.49,206,1.979,208,1.673,213,1.378,221,3.472,242,1.515,253,1.208,257,2.379,262,1.306,268,1.851,272,0.762,291,1.591,293,1.323,294,1.851,295,1.753,302,1.556,313,1.556,325,1.524,329,1.524,350,0.846,369,1.002,370,2.452,419,1.359,427,1.42,436,1.261,449,2.452,455,2.341,457,1.208,472,1.42,503,1.556,524,1.673,544,1.184,547,1.008,566,1.34,574,2.345,583,1.495,616,2.686,637,3.067,646,1.152,649,1.468,666,3.235,670,1.63,682,1.851,693,1.831,753,1.673,1326,1.723,1331,1.556,1344,1.591,1582,1.591,1864,1.781,2013,3.196,2060,2.056,2337,1.468,2953,2.056,3433,2.056,3434,2.056,3477,2.234,3478,2.234,3479,2.234,3480,2.234,3481,2.056,3482,2.234,3483,2.234,3484,2.234]],["t/1737",[4,3.695,7,1.766,9,0.795,12,1.449,29,2.024,47,1.306,64,1.432,65,1.932,86,1.932,97,1.786,99,1.112,102,1.927,113,1.216,114,1.786,131,1.978,152,3.039,162,1.554,164,1.319,165,1.658,171,1.408,195,3.875,204,1.306,206,1.611,223,1.011,234,1.476,261,3.483,276,1.408,295,1.575,300,1.554,312,1.855,317,2.528,318,1.671,324,3.253,336,2.661,338,1.476,344,1.956,349,1.28,367,1.476,370,2.203,374,2.872,394,1.598,412,2.596,425,2.674,430,5.122,445,1.893,454,1.684,469,3.005,470,1.645,478,2.24,505,2.468,508,1.82,509,2.528,513,3.222,518,1.913,524,2.596,537,1.094,551,2.32,631,1.82,659,2.278,666,2.203,684,1.504,734,2.414,758,2.17,765,2.468,782,1.755,801,1.094,809,2.528,828,1.267,848,1.956,1031,2.24,1033,1.996,1100,1.874,1627,3.19,1628,4.829,1676,2.596,1752,2.872,1848,2.764,1866,3.008,2036,3.008,2334,2.674,2336,1.956,2337,2.278,2730,5.777,3073,2.872,3485,5.122,3486,3.467,3487,3.19,3488,5.565,3489,3.467,3490,3.467,3491,5.565,3492,3.19,3493,5.565,3494,3.19]],["t/1740",[21,2.912,99,2.997,102,1.929,103,3.365,159,3.649,367,3.976,537,3.547,594,3.629,839,6.138]],["t/1742",[5,2.567,52,4.483,369,4.835,384,7.236,552,6.963,649,5.739,829,6.37,1861,8.037,2309,7.579,2337,5.739,2346,8.037,3495,8.734,3496,8.734]],["t/1744",[7,1.307,9,0.924,44,3.561,69,2.255,99,2.075,102,1.335,103,2.33,165,3.092,173,1.017,176,3.648,177,2.842,253,3.496,272,2.204,322,5.168,367,2.753,377,2.939,390,5.827,394,2.98,432,3.78,445,3.532,451,4.716,454,4.307,455,2.214,606,3.116,612,3.532,615,4.411,617,5.611,654,3.569,660,4.047,729,5.611,2336,3.648,3443,5.358,3485,5.951,3487,5.951,3494,5.951,3497,6.466]],["t/1746",[9,1.413,102,2.042,242,3.884,272,3.371,627,6.887,1429,5.097]],["t/1748",[5,3.275,31,3.971,43,6.054,44,3.242,88,5.601,394,4.246,440,6.719,498,6.284,651,7.633,2336,5.197]],["t/1750",[7,2.045,21,2.016,22,1.752,68,2.611,69,2.255,99,2.075,102,1.335,103,2.33,106,2.058,119,3.333,152,3.532,172,5.12,173,1.794,206,1.872,212,4.503,253,3.496,263,3.363,318,3.116,353,4.843,388,3.116,432,3.78,440,4.716,445,4.842,455,3.465,535,5.155,536,3.69,537,2.041,538,5.951,539,4.327,540,5.611,541,5.951,542,3.69]],["t/1752",[3,2.423,5,2.523,7,1.734,8,2.266,9,0.882,12,2.579,20,3.563,29,2.244,31,2.66,44,2.171,124,3.861,152,3.37,153,3.302,162,2.766,164,2.348,167,1.137,176,3.481,180,2.368,186,1.806,195,5.977,221,5.856,253,5.336,254,4.31,297,4.62,343,4.129,344,3.481,367,3.654,380,3.442,381,3.209,399,3.922,413,5.112,419,3.751,432,3.607,533,5.354,632,5.678,634,4.055,635,4.297]],["t/1754",[5,2.864,52,4.05,385,7.516,552,7.77,750,6.787,2097,8.969,2428,7.108]],["t/1756",[306,3.898,2927,7.317]],["t/1758",[5,3.275,31,3.971,43,6.054,44,3.242,88,5.601,394,4.246,440,6.719,498,6.284,651,7.633,2336,5.197]],["t/1760",[47,2.695,86,2.483,101,3.009,180,1.973,239,4.547,281,4.881,293,4.235,300,4.255,333,1.089,369,4.255,390,4.702,396,3.37,409,5.517,422,6.208,432,4.182,437,6.352,440,6.923,441,4.702,446,6.208,455,2.45,463,5.218,464,5.704,465,5.928,563,4.787,616,4.982,1089,5.704,3498,7.154,3499,7.154]],["t/1762",[44,2.817,173,1.259,253,5.521,254,4.459,322,5.216,343,5.357,369,4.578,380,4.467,381,4.164,413,6.633,419,4.868,452,4.419,455,2.741,616,5.575,629,5.357,1450,6.633,2662,6.633,3500,8.006]],["t/1767",[44,2.63,101,3.143,102,1.543,122,2.302,124,4.677,204,2.814,239,4.749,272,4.187,295,3.396,367,3.181,395,4.368,436,4.216,449,6.209,544,3.96,659,4.91,1347,7.748,1813,6.484,1902,7.533,3501,7.472]],["t/1771",[39,3.27,64,2.621,99,2.808,102,1.807,113,1.387,167,1.17,171,2.576,176,5.652,177,3.846,256,3.756,272,2.983,337,4.627,367,2.701,386,2.825,410,3.805,432,3.709,499,5.058,500,4.893,660,3.971,732,5.257,759,4.627,801,2.002,828,3.199,876,5.058,1033,3.138,1331,4.418,1429,4.51,1435,5.058,1628,5.506,1936,4.893,2162,4.751,2737,5.839,3443,5.257,3502,6.344,3503,6.344]],["t/1775",[3,3.828,102,2.013,171,3.957,752,4.255,768,3.367,828,3.563,1436,5.628]],["t/1777",[102,2.073,113,2.193,654,5.54,1033,3.599,1429,5.173]],["t/1781",[69,3.448,242,3.884,333,1.505,545,4.591,614,4.923,674,4.591]],["t/1783",[416,7.213,419,6.013,2042,8.194,2662,8.194,2663,8.582,2664,8.194]],["t/1785",[114,2.697,245,4.455,344,4.743,377,3.82,380,4.69,381,4.372,401,3.847,523,7.295,565,2.589,619,5.111,631,4.413,716,4.659,752,3.67,1221,5.042,1868,6.702,2398,4.976,2671,6.965]],["t/1787",[7,1.132,21,1.747,22,2.538,64,2.315,69,4.041,70,3.03,105,2.621,113,1.753,128,2.357,159,2.189,173,1.261,186,1.641,242,2.201,333,1.556,350,2.122,369,2.512,380,3.127,381,2.915,388,2.701,495,5.226,499,4.468,545,4.348,565,1.726,597,2.166,614,4.662,616,3.903,672,5.367,673,5.181,674,4.348,676,4.322,677,6.395,678,4.087,684,2.431,1544,4.087]],["t/1790",[47,2.878,165,3.655,204,2.878,206,2.869,242,3.001,272,3.75,322,5.063,369,4.443,388,3.683,445,4.174,455,2.617,542,4.361,566,6.598,685,5.894,686,5.894,687,6.332,688,5.894,1544,5.574,1769,4.857]],["t/1793",[5,1.11,8,1.388,21,1.178,22,1.614,26,2.085,44,1.33,69,2.573,70,3.989,99,2.926,122,1.836,126,1.881,157,2.297,165,1.807,173,0.594,180,1.042,202,2.042,204,2.245,223,2.152,234,1.609,241,1.57,242,1.484,244,1.233,253,2.042,255,2.042,263,1.965,272,1.288,300,2.671,306,2.738,320,2.483,322,1.93,333,1.275,336,1.807,349,1.395,362,3.477,369,1.694,386,1.682,394,1.741,434,3.131,436,2.132,445,3.255,475,2.33,495,4.674,502,2.132,508,1.983,518,2.085,545,4.233,551,2.528,566,4.426,614,4.539,616,2.631,664,2.631,673,4.767,677,4.751,844,3.012,961,2.829,1270,3.73,1582,5.254,1769,3.788,1821,3.279,1927,3.012,2153,2.829,2166,2.914,2251,2.914,2334,2.914,2653,5.172,3292,5.172,3474,3.477,3504,3.778,3505,3.778,3506,3.778,3507,3.778,3508,3.778,3509,3.778,3510,3.477]],["t/1796",[173,1.392,177,3.888,180,2.999,214,5.084,223,2.581,295,4.021,300,4.874,367,3.767,441,5.815,660,5.538,2336,4.992]],["t/1799",[7,1.72,8,3.127,32,4.749,99,3.407,175,3.896,180,2.348,350,4.019,367,3.624,369,3.816,545,3.951,614,4.237,679,6.565,695,6.375,696,5.928,775,6.787]],["t/1801",[7,1.373,31,2.928,39,3.501,41,4.546,69,3.197,88,4.13,90,2.947,124,4.251,126,3.381,144,5.416,173,1.068,202,3.672,263,3.533,272,2.316,333,1.034,336,4.385,349,2.508,386,4.621,536,3.877,544,4.859,545,3.153,567,4.546,604,5.416,605,4.13,614,3.381,659,6.025,1347,6.528,2062,5.895,2166,5.239,3028,5.895]],["t/1803",[5,1.177,7,0.809,8,2.291,29,2.787,39,2.063,99,2.001,102,1.288,113,1.363,122,2.36,131,3.559,165,2.982,180,1.72,186,1.172,204,1.508,206,1.805,212,2.788,223,1.168,226,2.586,230,2.469,241,1.664,244,2.035,253,3.371,266,2.285,272,2.126,300,2.795,306,2.842,310,2.544,318,1.929,320,2.631,322,2.045,333,0.609,367,2.655,370,2.544,394,1.845,401,2.854,419,2.434,434,3.317,436,2.258,445,4.184,450,3.087,475,2.469,502,3.518,508,2.102,509,2.92,518,3.442,521,2.679,536,2.285,537,1.264,545,1.858,547,1.807,551,2.679,564,2.063,566,4.594,574,2.434,614,1.993,646,2.063,650,3.317,662,5.411,759,2.92,768,1.383,883,3.087,1270,3.903,1437,2.788,1575,2.544,1582,2.85,1694,2.544,1769,5.496,1927,3.192,2251,3.087,2386,2.788,2581,3.087,2582,3.684,2583,3.317,3510,3.684,3511,4.003]],["t/1805",[5,2.601,8,3.25,242,3.475,306,3.283,338,3.767,452,4.884,564,4.56,565,2.726,716,3.914,800,4.884,1767,6.036,2398,5.238,2451,6.824,3512,8.848]],["t/1808",[8,2.446,22,1.804,29,2.422,43,4.376,44,2.343,86,2.311,99,2.137,127,3.097,152,4.94,173,1.047,178,6.053,214,3.113,222,4.199,226,4.301,274,3.26,300,2.985,339,4.301,353,4.986,367,2.835,386,2.965,402,4.456,410,3.994,484,6.171,536,3.8,654,3.675,696,4.637,801,2.102,1820,5.517,2283,5.309,2336,3.757,3367,6.128,3513,6.658,3514,6.658,3515,6.658]],["t/1810",[112,5.106,142,4.858,214,3.98,272,2.902,300,4.759,306,3.158,310,5.411,401,3.896,455,3.635,566,5.106,682,7.053,685,6.565,688,6.565,1927,6.787,3516,8.512]],["t/1812",[8,2.964,9,1.551,20,3.263,25,3.714,44,2.839,71,2.813,86,1.961,99,1.813,102,1.167,103,2.036,113,1.763,119,2.912,180,1.559,223,1.648,295,2.568,339,5.213,344,3.188,350,3.055,369,2.533,441,5.303,454,3.919,478,5.213,536,4.605,537,1.784,545,2.623,565,2.486,614,2.813,631,4.94,700,2.056,702,2.939,716,4.993,1051,4.906,1429,2.912,1674,4.024,2518,4.904]],["t/1815",[7,1.213,9,0.858,41,4.018,69,2.937,90,2.605,104,2.767,105,3.938,106,1.911,126,2.989,133,3.067,173,0.944,214,3.938,234,2.556,263,3.123,300,3.775,312,3.214,322,4.969,333,0.914,336,4.028,349,2.217,386,2.674,410,3.601,457,3.246,492,2.787,508,3.152,536,3.427,545,2.787,567,4.018,604,4.787,605,3.651,614,2.989,659,3.946,683,4.787,1338,4.192,1667,4.787,1737,5.526,2086,4.787,2166,4.631,2336,4.752,3517,6.005,3518,6.005]],["t/1817",[7,1.657,9,1.626,65,2.846,101,3.449,102,1.694,121,4.152,214,3.835,300,4.649,318,4.998,333,1.578,367,3.491,460,2.643,480,5.711,674,3.807,2053,6.795]],["t/1819",[5,2.635,44,3.155,52,3.726,128,3.771,159,3.503,261,5.612,380,5.003,381,4.663,385,6.915,552,7.149,750,6.244,2098,7.781,2428,6.54]],["t/1821",[6,3.508,7,1.671,8,2.148,9,0.836,39,3.014,43,3.843,64,2.416,69,2.039,86,2.03,113,1.807,152,4.515,165,4.586,176,3.299,180,1.613,206,1.693,221,3.989,226,3.778,234,2.49,253,3.161,254,4.551,264,7.946,270,3.606,276,2.375,284,2.715,306,2.17,367,2.49,369,2.621,432,3.418,435,3.924,452,3.228,454,2.841,455,2.002,470,2.775,484,3.989,489,4.51,490,3.989,496,4.379,518,3.228,519,2.604,1045,3.299,2074,5.075,3519,5.848]],["t/1823",[7,1.699,9,1.201,21,2.621,114,2.697,203,6.804,306,3.119,367,3.579,509,6.131,645,6.483,752,4.599,828,3.073,1616,4.116,1801,6.592,3520,10.533]],["t/1826",[5,2.353,9,1.144,86,2.779,102,2.109,114,3.277,223,2.335,274,3.92,295,3.638,300,3.589,306,2.97,313,5.575,386,3.565,469,4.402,478,5.172,480,5.575,481,5.898,1437,5.575,3521,8.006]],["t/1828",[5,2.635,44,3.155,52,3.726,128,3.771,159,3.503,261,5.612,380,5.003,381,4.663,552,7.149,750,6.244,2098,7.781,2428,6.54,3170,8.252]],["t/1830",[39,4.227,103,3.736,127,2.808,159,3.204,176,4.627,180,2.262,213,5.057,308,4.736,316,5.057,339,5.298,367,3.491,378,4.986,588,4.008,1342,7.998,2042,6.795,3522,7.547,3523,8.201]],["t/1832",[5,2.325,9,1.131,29,2.878,44,2.784,54,4.684,102,1.634,113,1.729,239,5.029,256,6,306,2.935,310,5.029,325,5.397,473,3.194,519,3.523,700,2.878,716,3.499,891,4.515,1033,2.837,1817,5.633,2334,6.102,2927,7.058]],["t/1834",[5,3.275,31,3.971,43,6.054,44,3.242,88,5.601,394,4.246,440,6.719,498,6.284,651,7.633,2336,5.197]],["t/1836",[9,1.201,31,3.624,44,2.958,56,4.455,97,3.38,127,2.878,281,5.735,333,1.603,336,4.02,349,3.103,432,4.914,460,2.709,466,4.184,579,5.111,658,7.295,659,5.524]],["t/1839",[5,2.386,22,2.199,26,3.146,114,1.829,121,4.787,136,6.472,152,4.433,180,1.572,186,2.377,223,1.662,261,3.567,276,2.314,300,3.639,318,4.557,367,3.456,508,2.992,537,1.799,589,2.169,654,5.687,670,5.92,752,2.488,768,1.969,801,3.252,828,3.766,1033,3.695,1436,3.291,1762,3.465,1803,3.745,1804,3.745,1812,4.157,2153,4.268,3524,4.946]],["t/1841",[29,2.878,44,2.784,64,4.621,90,3.432,102,1.634,114,3.253,121,4.006,126,3.938,386,3.523,410,4.745,454,3.843,513,3.194,737,6.866,768,2.734,848,4.464,849,5.51,1422,4.684,1676,5.925,2464,7.281,3525,7.281]],["t/1844",[1,3.209,29,3.103,51,3.826,61,5.605,98,3.717,102,2.029,113,1.336,114,1.962,139,4.578,154,3.53,176,3.449,180,1.686,195,4.257,219,3.53,242,2.401,268,5.066,302,4.257,324,3.574,333,0.93,370,3.886,388,2.946,454,2.97,470,2.902,473,2.468,508,3.209,513,2.468,524,4.578,537,3.1,674,2.838,700,2.224,754,6.578,801,2.692,828,3.118,1033,2.192,1694,3.886,2115,5.626,3526,6.114,3527,6.114,3528,6.114]],["t/1846",[5,1.432,7,0.985,64,3.571,69,2.526,90,2.114,102,1.785,113,1.889,132,3.148,152,2.662,214,2.279,225,2.313,234,3.084,253,2.634,266,5.462,291,3.47,295,2.215,300,2.185,306,1.808,344,2.749,345,1.904,367,2.075,369,2.185,445,2.662,455,1.669,467,3.65,468,3.554,496,3.65,513,1.968,537,2.286,567,3.261,576,3.005,590,2.313,597,1.884,598,2.367,664,3.394,716,2.156,752,3.162,758,3.05,801,1.538,828,3.739,1344,3.47,1413,6.501,1419,3.05,1429,2.512,1436,4.183,1437,3.394,1582,3.47,2037,4.038,2336,2.749,2653,4.229,3073,4.038,3292,6.286,3529,4.873]],["t/1848",[245,5.657]],["t/1851",[9,0.815,12,2.383,29,2.073,44,2.006,47,3.057,102,1.952,113,1.774,114,1.829,177,2.504,203,3.682,223,2.368,229,4.869,239,3.623,254,2.488,295,2.59,300,2.555,333,0.867,349,2.104,369,4.238,405,4.544,412,4.268,436,3.215,454,2.768,473,2.301,505,4.058,537,1.799,576,3.515,588,2.203,660,3.567,801,1.799,828,2.083,848,3.215,1386,3.814,1752,7.834,2336,3.215,2663,4.946,2695,5.245,3049,5.245,3530,5.699,3531,5.699,3532,5.699,3533,5.699,3534,5.699,3535,5.699,3536,5.699,3537,5.699]],["t/1853",[64,2.437,102,1.218,113,1.289,121,2.987,127,2.02,134,3.638,151,5.376,165,2.821,182,5.119,226,6.225,256,3.492,273,3.811,274,4.718,306,2.189,329,5.675,386,2.627,410,3.538,436,3.328,445,5.262,479,4.108,481,4.803,484,5.675,485,4.693,495,3.291,521,3.948,574,3.587,654,3.256,758,3.692,1033,2.115,1232,3.811,1270,3.692,1429,3.04,1804,3.877,1966,4.418,2185,7.655,2730,4.888,2927,4.108,3538,5.899,3539,5.899]],["t/1855",[5,2.913,7,1.544,9,1.092,69,2.665,86,2.652,88,4.646,100,4.174,106,2.432,128,3.214,202,4.131,223,2.229,300,3.426,367,3.253,426,5.441,432,4.467,445,4.174,665,6.093,666,4.857,667,6.332,668,6.632,669,6.332,670,7.229,671,6.093,1864,6.093]],["t/1858",[29,3.204,64,3.639,86,2.223,90,2.778,102,1.323,113,1.925,114,3.648,165,3.063,186,1.875,214,2.995,223,1.868,229,5.283,242,2.516,300,2.871,312,3.428,333,0.975,336,3.063,367,2.727,388,3.087,473,2.586,477,7.023,481,5.814,752,2.796,1347,4.56,1386,4.286,1422,5.215,1423,4.279,1730,4.939,2336,3.613,3540,6.405]],["t/1860",[17,4.856,31,2.87,102,2.38,113,2.409,114,2.137,169,4.856,203,4.301,238,5.932,306,2.47,394,3.069,407,4.301,452,3.675,472,4.232,473,2.688,575,6.53,674,3.091,700,2.422,763,4.637,768,2.301,801,2.102,828,2.434,1033,2.388,1694,4.232,1936,5.135,2037,5.517,2927,4.637,3525,6.128,3541,6.658]],["t/1862",[121,3.783,142,4.264,167,1.378,173,1.175,177,4.292,180,2.694,214,3.494,223,2.179,295,4.439,300,3.349,322,5.558,350,2.829,394,3.444,437,5,574,4.543,588,2.888,634,4.91,660,6.113,661,6.877,662,6.484,663,6.877,664,5.203]],["t/1865",[0,4.945,5,2.172,44,3.413,69,2.577,106,2.352,113,2.119,173,1.162,202,3.995,229,5.816,312,3.955,333,1.125,383,5.041,401,3.382,461,3.247,545,4.502,565,2.987,614,3.678,631,5.091,695,5.534,716,3.269,800,4.079,1386,6.489]],["t/1867",[9,1.523,29,3.453,101,3.009,102,1.96,162,3.207,214,3.345,223,2.087,274,3.503,300,3.207,306,3.522,349,2.641,383,4.881,441,4.702,445,3.907,473,2.889,537,2.258,674,3.321,810,4.982,1582,5.094,1631,8.237,2336,4.036,2927,6.61,2935,6.584,3160,6.584,3542,7.154]],["t/1869",[5,2.353,7,2.064,8,2.941,44,3.594,88,4.868,165,3.829,173,1.259,180,2.208,202,4.328,223,2.335,234,3.408,545,3.716,549,6.834,564,4.126,565,2.466,575,5.089,666,5.089,1437,5.575,2334,6.174]],["t/1872",[3,2.751,5,2.059,9,1.001,12,2.929,29,2.548,90,3.039,113,2.046,162,3.14,186,2.051,202,5.06,239,4.453,260,4.259,349,3.455,412,5.246,445,3.826,473,2.828,512,5.109,513,2.828,564,3.61,680,4.045,716,3.099,1429,3.61,1769,4.453,1966,5.246,2125,5.402,2688,4.988,2707,5.246,2730,5.804,2899,6.447,2909,6.447,3152,6.079]],["t/1876",[7,1.788,47,3.333,52,3.677,166,6.036,179,5.538,324,5.172,382,4.937,631,5.708,1523,8.143,2810,9.078,3543,8.143]],["t/1878",[0,3.409,5,1.497,7,1.976,12,3.129,27,3.476,34,4.221,40,3.098,44,2.634,52,2.117,100,4.846,119,2.626,122,1.569,206,1.475,257,3.142,258,4.062,286,2.382,315,2.365,386,2.269,388,2.455,441,3.348,463,5.459,569,3.716,627,3.548,631,2.675,641,4.421,806,2.978,848,2.874,899,4.221,1337,4.421,1349,3.476,1545,5.459,1670,4.689,2043,4.421,2238,3.548,2405,4.689,2407,4.062,2786,3.929,2810,3.929,3028,4.421,3524,4.421,3544,3.476,3545,3.815,3546,4.689,3547,3.815,3548,5.095,3549,5.095,3550,5.095,3551,5.095,3552,5.095,3553,4.431,3554,4.689,3555,5.095,3556,5.095,3557,5.095,3558,5.095,3559,5.095,3560,7.485,3561,4.421,3562,4.689]],["t/1880",[7,1.887,128,3.928,324,5.46,376,6.25,513,3.771,631,4.903,3553,7.135,3563,8.105]],["t/1882",[7,1.592,23,4.745,28,4.095,44,1.924,47,2.059,71,2.722,76,4.745,108,3.237,142,3.12,146,2.87,159,2.136,171,2.22,179,3.422,201,4.53,260,3.324,272,1.864,301,7.655,386,3.509,419,3.324,631,4.85,649,5.178,1600,4.359,1731,5.032,1822,4.53,1945,4.745,2073,3.808,2786,7.125,2810,7.125,3432,5.032,3543,8.502,3561,4.745,3564,5.468,3565,5.032,3566,5.468,3567,5.468,3568,5.468,3569,5.468,3570,5.468,3571,5.468,3572,5.468,3573,5.468,3574,5.468,3575,5.468,3576,5.468,3577,5.468,3578,5.468,3579,4.53,3580,5.468]],["t/1884",[7,2.211,52,3.14,206,2.187,267,5.511,324,4.417,327,6.954,338,3.217,376,5.056,452,4.17,477,6.024,588,2.921,649,4.966,848,4.263,1221,4.532,1230,5.38,2073,5.262,2808,6.557,3473,6.261,3562,6.954,3581,7.556,3582,7.556,3583,7.556,3584,7.556,3585,6.954,3586,7.556]],["t/1886",[0,3.719,16,4.054,27,3.792,44,1.956,72,4.448,151,3.101,154,3.21,155,3.005,167,1.47,213,3.427,281,5.439,291,3.957,315,3.701,316,3.427,324,3.249,378,3.379,381,2.891,445,3.036,481,3.21,631,2.918,645,4.286,649,3.653,848,3.136,1415,5.971,1565,4.054,1680,4.605,1757,4.823,1966,4.162,2238,8.051,2927,3.87,3544,5.439,3563,6.919,3587,5.115,3588,5.558,3589,4.162,3590,7.338,3591,5.558,3592,8.58,3593,5.558,3594,4.605,3595,5.558,3596,5.558,3597,4.823]],["t/1888",[151,5.518,159,3.863,381,5.143,631,6.103,2238,6.887]],["t/1890",[20,5.796,231,5.663,485,5.663,601,6.19,2238,6.989]],["t/1892",[44,4.282,49,2.838,162,3.865,303,6.874,316,6.599,376,5.769,574,5.242,581,6.649,750,6.004,1730,6.649,1844,7.934,3598,7.934]],["t/1894",[33,3.967,44,2.851,55,6.713,142,4.624,153,4.336,386,3.608,481,5.943,581,6.249,1415,6.068,1677,6.068,2238,5.642,3544,5.527,3545,6.068,3563,8.93,3589,7.707,3599,8.102,3600,7.456,3601,6.713]],["t/1896",[31,3.221,36,5.596,44,2.63,52,3.105,72,4.169,121,3.783,147,6.484,219,4.315,324,4.368,378,4.543,381,3.886,481,5.641,502,4.216,513,3.017,776,5.596,848,5.511,2038,6.877,3524,6.484,3544,5.097,3589,7.315,3590,6.877,3594,8.094,3602,7.472,3603,7.472]],["t/1898",[7,1.734,24,4.055,44,3.474,99,1.98,108,3.652,128,2.595,159,2.41,162,2.766,175,2.823,179,3.861,217,3.37,263,3.209,265,4.919,293,5.843,295,2.804,315,2.864,316,5.293,345,2.41,376,5.744,381,4.464,435,2.928,581,4.758,649,4.055,848,3.481,1730,4.758,2043,5.354,2425,5.293,2787,4.919,3348,6.26,3553,5.081,3598,5.678,3601,5.112,3604,6.17,3605,6.17,3606,4.758,3607,6.17]],["t/1900",[16,4.542,44,2.191,46,5.731,119,3.209,178,4.167,214,2.912,242,2.446,302,4.336,306,2.31,316,6.607,350,2.357,376,4.167,386,4.417,387,4.965,407,4.023,481,5.728,513,2.514,606,4.163,750,4.336,1229,4.434,1383,7.65,1505,7.158,1642,4.663,1966,4.663,3492,5.731,3589,7.428,3594,7.158,3608,6.227,3609,6.227,3610,7.95,3611,5.731]],["t/1902",[21,2.833,159,3.55,315,4.218,350,3.44,376,6.081,381,4.726,2425,7.345,3553,5.38,3606,8.523]],["t/1904",[7,1.247,37,2.747,111,3.442,173,0.97,175,2.823,178,4.129,293,3.652,303,4.919,316,3.805,332,4.62,452,3.405,513,2.491,539,4.129,579,5.219,629,4.129,631,3.239,701,3.481,759,4.5,772,4.297,773,4.62,801,1.947,848,6.854,1031,3.986,1270,3.861,1641,5.354,2003,7.449,2425,3.805,2426,5.112,2662,5.112,3073,5.112,3612,6.17,3613,6.17,3614,5.678,3615,5.678,3616,7.899,3617,6.17,3618,6.17]],["t/1906",[7,1.047,13,4.313,20,1.832,24,2.085,43,2.085,109,6.04,134,1.956,154,2.991,162,1.422,167,1.21,300,1.422,302,3.607,303,4.129,315,3.047,333,0.788,336,1.517,349,2.797,355,2.753,367,2.205,376,2.123,378,1.929,381,1.65,383,2.164,386,1.413,387,2.529,392,2.209,394,1.462,419,3.149,440,2.314,443,2.919,492,1.473,513,1.281,539,2.123,542,1.81,567,3.466,573,2.919,602,2.629,646,1.635,659,2.085,736,6.04,745,2.447,750,2.209,773,2.376,774,3.879,775,2.529,809,3.778,830,2.529,847,2.529,848,5.331,898,2.629,901,2.753,1106,1.903,1326,2.447,1455,2.529,1772,2.529,1864,2.529,2129,2.447,2181,2.629,2189,2.753,2238,2.209,2309,8.553,2330,2.919,2376,2.629,2425,1.956,2426,2.629,2787,5.233,3313,2.919,3473,4.292,3597,2.753,3610,2.919,3614,2.919,3615,2.919,3616,2.919,3619,3.172,3620,3.172,3621,3.172,3622,3.172,3623,3.172,3624,3.172,3625,5.179,3626,3.172,3627,3.172,3628,3.172,3629,3.172,3630,3.172,3631,3.172,3632,3.172,3633,3.172,3634,6.564,3635,3.172,3636,3.172,3637,3.172,3638,4.767,3639,3.172,3640,3.172,3641,3.172,3642,3.172,3643,3.172,3644,5.179,3645,3.172,3646,3.172,3647,3.172,3648,3.172,3649,3.172,3650,3.172,3651,2.919]],["t/1908",[7,0.931,11,3.085,20,2.66,21,1.436,24,3.027,25,3.027,28,3.45,32,2.57,49,2.286,52,1.914,162,2.065,214,2.154,217,2.516,242,1.809,306,2.576,315,2.138,316,2.841,333,1.057,336,2.203,349,1.7,350,2.629,367,1.961,369,2.065,376,3.082,382,4.663,394,2.123,481,5.374,513,1.86,531,4.239,567,3.082,602,3.817,603,4.239,605,2.801,616,3.208,649,3.027,800,4.613,1433,3.997,1563,3.997,1965,3.997,2407,3.672,2425,5.738,2628,3.997,2664,3.817,2707,5.2,2787,3.672,2813,3.997,3553,2.727,3592,4.239,3594,3.817,3606,6.446,3611,4.239,3652,4.606,3653,4.606,3654,4.606,3655,6.391,3656,4.606,3657,6.944,3658,4.606,3659,4.606,3660,4.606,3661,4.606,3662,4.606,3663,4.606]],["t/1910",[7,1.887,37,4.159,256,5.529,569,6.812,781,8.105,1903,7.739,2786,8.666,2810,8.666]],["t/1912",[52,3.936,167,1.746,256,5.607,569,6.908,1851,9.833,2786,7.304,3579,7.848,3664,9.471]],["t/1914",[7,1.051,27,2.174,38,1.513,151,2.901,167,1.982,238,1.841,252,6.548,284,3.885,286,3.913,307,2.541,315,2.414,333,0.485,338,4.204,353,2.387,452,1.759,588,3.47,601,5.161,611,2.133,626,2.387,644,1.938,650,2.641,655,2.766,718,2.095,730,6.992,762,2.766,848,3.715,1221,1.912,1692,2.387,1867,2.933,2040,4.512,2786,2.458,2787,2.541,2810,2.458,3466,2.933,3473,2.641,3585,8.262,3597,2.766,3665,3.187,3666,6.585,3667,3.187,3668,3.187,3669,3.187,3670,3.187,3671,3.187,3672,3.187,3673,3.187,3674,3.187,3675,3.187,3676,3.187,3677,3.187,3678,3.187,3679,3.187,3680,3.187,3681,3.187,3682,3.187,3683,3.187,3684,3.187,3685,3.187,3686,3.187,3687,3.187,3688,3.187,3689,3.187,3690,3.187,3691,10.97,3692,5.199,3693,5.199,3694,5.199,3695,5.199,3696,3.187,3697,3.187,3698,3.187,3699,3.187,3700,3.187,3701,3.187,3702,3.187,3703,3.187,3704,3.187,3705,3.187,3706,3.187]],["t/1916",[0,3.689,7,1.114,24,3.623,27,3.76,44,2.789,76,4.784,112,3.306,116,3.263,142,3.146,151,3.076,153,2.95,155,2.98,159,2.153,180,2.56,202,4.285,206,1.596,209,4.251,219,3.183,293,3.263,295,2.505,318,2.657,382,3.076,435,2.616,469,3.417,485,3.11,513,2.226,631,2.894,752,3.46,848,4.472,899,4.567,1093,4.251,1337,4.784,1565,4.02,1965,4.784,2610,6.319,3045,4.784,3544,6.923,3545,5.936,3546,5.073,3547,4.128,3553,6.007,3601,4.567,3707,5.512,3708,5.512,3709,5.512]],["t/1918",[12,3.232,119,3.984,122,3.076,128,3.251,159,3.02,202,4.179,206,2.237,382,4.313,408,5.504,469,3.332,883,5.961,1696,6.708,2403,7.114,3544,5.273,3553,7.166,3554,7.114,3565,7.114,3638,7.114,3710,7.73,3711,7.73]],["t/1920",[0,3.285,7,1.754,40,2.985,44,2.563,63,3.786,100,3.977,145,2.87,146,2.577,154,2.835,156,3.12,217,2.681,244,1.602,252,3.58,265,3.914,272,1.673,293,2.906,306,3.221,315,3.38,316,4.491,326,4.067,333,1.108,337,3.58,375,4.518,382,2.739,411,2.485,419,2.985,436,2.769,437,3.285,490,3.349,569,3.58,606,3.51,610,3.786,664,3.418,674,2.279,848,2.769,1264,4.26,1565,3.58,1851,4.26,2073,3.418,2312,4.26,2321,3.914,2425,3.027,2628,4.26,2664,4.067,3252,4.26,3544,4.968,3553,6.362,3606,3.786,3655,4.518,3712,4.909,3713,4.909,3714,4.909,3715,4.909,3716,4.909,3717,4.909,3718,4.909,3719,4.909,3720,4.909,3721,4.909]],["t/1922",[5,2.272,27,5.273,126,3.848,142,4.411,166,5.273,173,1.216,201,6.405,208,7.478,211,7.961,331,5.383,383,5.273,848,4.361,883,5.961,1415,5.789,3545,7.478,3547,5.789,3553,4.576,3561,6.708,3722,8.665,3723,6.708,3724,6.708]],["t/1924",[44,3.073,160,4.629,173,1.373,195,6.082,386,3.889,479,7.511,3553,6.928,3725,10.786,3726,8.734,3727,8.734,3728,8.734]],["t/1926",[7,1.544,142,4.361,202,4.131,246,6.632,333,1.508,369,4.443,452,4.218,513,3.085,606,4.777,800,5.471,1019,4.857,2053,8.213,3348,5.574,3547,5.723,3553,6.513,3729,6.332,3730,9.912,3731,7.642]],["t/1928",[173,1.602,3348,7.431,3553,6.032,3729,8.442]],["t/1930",[1,4.413,44,3.707,206,2.433,414,6.965,485,4.743,606,4.051,716,3.718,800,4.64,1825,5.625,3348,6.131,3544,5.735,3547,6.295,3553,6.235,3589,6.295,3732,6.965,3733,7.295]],["t/1932",[7,1.699,127,2.878,142,4.797,156,5.343,162,3.768,369,4.721,394,3.874,716,3.718,3348,7.682,3544,5.735,3545,6.295,3553,6.235,3724,7.295,3732,6.965,3734,8.406]],["t/1934",[31,4.026,44,3.287,180,2.576,242,3.668,338,3.976,1331,6.504,1864,7.446,2425,5.76,2438,8.105,3553,5.529]],["t/1936",[44,3.073,167,1.61,180,2.409,242,4.596,293,5.17,294,7.236,369,3.915,411,4.422,454,4.242,904,7.579,3481,8.037,3553,6.385]],["t/1938",[32,3.908,44,3.71,72,3.908,180,2.582,209,5.402,242,3.676,323,3.325,333,1.066,395,4.095,454,3.403,768,2.42,800,3.866,882,4.604,1415,5.246,2059,6.079,2094,6.447,2425,6.938,2610,5.585,2692,7.01,3522,6.447,3553,6.661,3735,9.36]],["t/1940",[7,1.788,44,3.826,156,5.624,315,4.107,323,4.2,333,1.347,452,4.884,800,4.884,1094,6.626,1425,7.055,2425,5.457,3544,6.036,3553,5.238]],["t/1943",[5,1.267,7,0.871,12,1.802,24,2.833,31,1.858,39,2.222,44,4.172,55,3.572,142,3.768,153,2.307,173,0.678,175,1.973,180,1.189,189,3.325,200,2.552,206,1.248,214,2.016,242,2.593,323,2.046,333,1.005,367,1.835,381,2.242,414,3.572,481,3.813,485,2.432,581,3.325,606,3.182,664,3.002,800,4.964,848,3.725,1019,2.74,1270,2.698,1415,3.228,1825,2.885,2425,5.547,2707,3.228,3128,5.73,3348,3.144,3544,2.941,3545,3.228,3547,3.228,3553,6.303,3579,3.572,3587,3.967,3589,4.945,3600,3.967,3606,3.325,3722,5.73,3723,3.741,3729,3.572,3732,5.471,3733,5.73,3736,3.967,3737,3.967,3738,3.967,3739,3.967,3740,6.077,3741,3.967,3742,4.311]],["t/1945",[7,1.035,12,2.141,24,2.056,31,1.348,39,1.612,44,3.673,116,1.852,142,4.287,155,1.691,173,0.805,175,1.431,180,0.863,189,2.412,200,1.852,214,1.463,217,2.796,242,3.255,256,1.852,260,1.902,290,1.496,293,1.852,303,2.494,323,1.485,333,0.779,336,1.496,369,2.295,376,2.093,381,1.627,386,2.28,410,3.071,414,4.243,481,5.138,498,2.134,499,2.494,606,1.508,649,3.365,776,3.834,800,3.588,848,2.889,1019,1.988,1090,2.056,1094,2.343,1270,1.958,1415,3.834,1446,2.412,1642,2.343,1825,5.027,1870,2.412,2129,2.412,2238,3.566,2425,4.633,2610,2.494,2707,2.343,3348,4.741,3545,3.834,3547,2.343,3553,5.803,3579,2.592,3589,7.034,3601,6.225,3606,2.412,3651,2.879,3722,4.443,3723,2.715,3724,4.443,3729,2.592,3732,4.243,3733,2.715,3736,2.879,3737,2.879,3738,2.879,3739,2.879,3740,4.712,3741,2.879,3743,3.128,3744,3.128,3745,3.128,3746,3.128,3747,3.128,3748,3.128,3749,3.128,3750,3.128,3751,3.128,3752,3.128,3753,3.128,3754,3.128,3755,3.128]]],"invertedIndex":[["",{"_index":167,"t":{"21":{"position":[[93,1],[179,1],[227,1],[295,1],[457,1],[542,1],[622,1],[733,1],[824,1]]},"23":{"position":[[163,1]]},"25":{"position":[[7,1]]},"27":{"position":[[55,1]]},"29":{"position":[[60,1]]},"31":{"position":[[75,1]]},"33":{"position":[[75,1]]},"39":{"position":[[222,4]]},"45":{"position":[[326,4]]},"47":{"position":[[55,1],[214,1]]},"58":{"position":[[1145,3],[1374,3]]},"64":{"position":[[712,1]]},"77":{"position":[[60,1]]},"81":{"position":[[140,1],[142,1],[158,3],[178,1],[187,1],[203,3]]},"91":{"position":[[669,3],[703,3],[735,3],[756,3],[775,3],[815,3],[840,3],[882,3],[908,3],[933,3],[1142,3],[1178,3],[1212,3],[1235,3],[1256,3],[1298,3],[1325,3],[1369,3],[1397,3],[1424,3],[3040,3],[3197,3],[3201,3],[3472,1],[3474,1],[3486,1],[3488,2],[3867,3],[3903,3],[3937,3],[3972,1],[4037,1],[4170,3],[4190,1],[4255,1],[4388,3],[4406,1],[4469,1],[4602,3],[4643,1],[4722,1],[4790,1],[4926,3],[4930,3]]},"93":{"position":[[218,1],[712,1],[755,1],[838,1],[985,1],[1363,1],[1523,1],[1556,1]]},"97":{"position":[[127,1]]},"112":{"position":[[684,3]]},"137":{"position":[[259,1],[282,1],[315,1],[317,1],[389,1],[416,1],[482,1],[509,1],[621,3]]},"151":{"position":[[233,1]]},"153":{"position":[[364,3],[381,3],[390,1],[500,1],[502,1],[519,3],[538,3],[558,1],[566,3],[586,1],[588,1],[597,3],[617,1],[626,3],[646,1],[755,3],[832,1]]},"161":{"position":[[235,1],[526,3],[1180,1],[1602,1],[1633,1],[2040,1],[2168,1],[2196,1],[2344,1],[2375,1],[2388,1]]},"163":{"position":[[586,1],[675,3],[692,3],[701,1],[811,1],[813,1],[830,3],[849,3],[869,1],[877,3],[897,1],[899,1],[908,3],[928,1],[937,3],[957,1],[1066,3],[1143,1],[1598,1],[2176,1],[2207,1]]},"165":{"position":[[797,2]]},"175":{"position":[[233,1]]},"177":{"position":[[364,3],[381,3],[390,1],[500,1],[502,1],[519,3],[538,3],[558,1],[566,3],[586,1],[588,1],[597,3],[617,1],[626,3],[646,1],[755,3],[832,1]]},"185":{"position":[[235,1],[526,3],[1180,1],[1602,1],[1633,1],[2040,1],[2168,1],[2196,1],[2344,1],[2375,1],[2388,1]]},"187":{"position":[[586,1],[675,3],[692,3],[701,1],[811,1],[813,1],[830,3],[849,3],[869,1],[877,3],[897,1],[899,1],[908,3],[928,1],[937,3],[957,1],[1066,3],[1143,1],[1598,1],[2176,1],[2207,1]]},"189":{"position":[[797,2]]},"201":{"position":[[672,1],[893,1],[997,1]]},"203":{"position":[[364,3],[381,3],[524,1],[564,3],[572,3],[590,1]]},"211":{"position":[[1787,1],[3568,1],[4295,1]]},"213":{"position":[[963,1],[1184,1],[1288,1],[1850,3],[1867,3],[2010,1],[2050,3],[2058,3],[2076,1]]},"215":{"position":[[51,1],[411,1],[533,1],[548,4]]},"229":{"position":[[382,3],[400,3]]},"233":{"position":[[1256,3],[1274,3]]},"236":{"position":[[23,1]]},"268":{"position":[[672,1],[893,1],[997,1]]},"270":{"position":[[364,3],[381,3],[524,1],[564,3],[572,3],[590,1],[815,1],[892,3],[958,3],[1018,3],[1085,3],[1152,3]]},"278":{"position":[[372,1],[1809,1],[3121,3],[3587,1],[3649,1],[3793,1],[4202,1],[4468,1]]},"280":{"position":[[11,1],[19,1],[28,1],[59,1],[66,1],[103,1],[176,1],[1179,1],[1400,1],[1504,1],[2441,3],[2458,3],[2601,1],[2641,3],[2649,3],[2667,1],[2892,1],[2969,3],[3035,3],[3095,3],[3162,3],[3229,3],[3627,1],[4983,3],[5215,1],[5584,1],[5759,1]]},"282":{"position":[[51,1],[411,1],[533,1],[548,4]]},"321":{"position":[[369,4],[534,1],[805,1],[1630,3],[1784,1],[1855,3],[1861,1],[1913,1]]},"325":{"position":[[1480,4],[2271,3],[2328,3],[2364,3],[2441,3]]},"338":{"position":[[899,3]]},"343":{"position":[[201,3]]},"345":{"position":[[216,3]]},"351":{"position":[[175,1],[307,1],[348,1],[385,1],[565,1]]},"353":{"position":[[971,3],[1096,3]]},"365":{"position":[[314,3],[499,3],[522,3]]},"369":{"position":[[356,3]]},"393":{"position":[[186,3]]},"403":{"position":[[70,1],[518,3],[753,3]]},"408":{"position":[[376,3]]},"438":{"position":[[763,3]]},"440":{"position":[[396,1]]},"462":{"position":[[537,1]]},"464":{"position":[[617,3]]},"471":{"position":[[632,1],[736,1],[837,1]]},"479":{"position":[[197,1],[927,3],[1313,1]]},"481":{"position":[[2569,3],[2955,1],[3049,1]]},"485":{"position":[[164,1],[201,1],[273,1],[558,3],[604,1],[1062,3],[1687,3],[2016,3]]},"487":{"position":[[662,4]]},"489":{"position":[[87,4]]},"496":{"position":[[1175,1],[1191,1]]},"502":{"position":[[1529,1],[2530,1],[2603,1]]},"506":{"position":[[95,2],[168,3],[210,3],[214,3],[218,2],[221,3],[225,3],[229,3],[322,3],[337,3],[343,1],[345,1],[367,1],[369,1],[374,3],[401,3],[407,3],[428,3],[434,3],[452,3],[458,1],[460,1],[474,1],[484,3],[490,1],[492,3],[498,1],[518,3],[532,1],[539,3],[551,2],[581,3],[595,2],[603,3],[615,1],[638,3],[652,1],[659,3],[671,2],[704,3],[718,2],[726,3],[738,2],[755,3],[769,2],[775,3],[787,2],[808,1],[810,1],[822,2],[828,3]]},"509":{"position":[[253,3]]},"511":{"position":[[164,1],[353,3],[357,1],[372,1],[376,1],[378,3],[388,3],[392,1],[401,3],[405,1],[414,1],[416,1],[425,1],[427,1],[429,3]]},"535":{"position":[[176,1]]},"537":{"position":[[403,1],[430,1],[473,1]]},"541":{"position":[[79,1],[183,1]]},"555":{"position":[[50,3],[134,3]]},"559":{"position":[[163,3],[263,3],[282,3],[382,3],[444,3]]},"563":{"position":[[286,1],[299,1],[453,1],[488,1]]},"567":{"position":[[1191,1],[1423,1],[1448,1],[1640,1],[2032,1]]},"588":{"position":[[12,1],[30,1]]},"590":{"position":[[525,1]]},"594":{"position":[[362,1],[366,1]]},"596":{"position":[[14,1]]},"604":{"position":[[7,1]]},"608":{"position":[[355,3],[577,1],[579,3]]},"612":{"position":[[12,1],[28,1],[30,5],[36,1]]},"614":{"position":[[953,1]]},"618":{"position":[[120,1]]},"623":{"position":[[147,3]]},"625":{"position":[[102,3]]},"627":{"position":[[163,1]]},"629":{"position":[[41,1]]},"631":{"position":[[55,1]]},"633":{"position":[[60,1]]},"635":{"position":[[75,1]]},"637":{"position":[[75,1]]},"646":{"position":[[19,1]]},"650":{"position":[[136,3]]},"654":{"position":[[7,1],[9,5],[15,1],[24,1]]},"658":{"position":[[29,3],[117,3]]},"660":{"position":[[33,3],[107,3]]},"662":{"position":[[14,1],[16,5],[22,1],[43,1]]},"664":{"position":[[66,1]]},"670":{"position":[[279,1]]},"675":{"position":[[675,3],[720,3]]},"677":{"position":[[14,1],[16,5],[22,1],[43,1]]},"683":{"position":[[217,1]]},"685":{"position":[[14,1],[16,5],[22,1],[43,1]]},"691":{"position":[[124,3]]},"693":{"position":[[14,1],[16,5],[22,1],[43,1]]},"699":{"position":[[16,1],[29,1]]},"705":{"position":[[327,1]]},"707":{"position":[[14,1],[30,1]]},"713":{"position":[[211,3]]},"715":{"position":[[14,1],[16,5],[22,1],[43,1]]},"717":{"position":[[1096,1]]},"721":{"position":[[106,3]]},"723":{"position":[[7,1],[9,5],[15,1],[24,1]]},"728":{"position":[[132,3],[451,4]]},"730":{"position":[[94,3],[230,4]]},"733":{"position":[[134,3],[453,4]]},"735":{"position":[[96,3],[232,4]]},"738":{"position":[[98,4],[330,3],[376,1],[1053,3]]},"740":{"position":[[102,4]]},"742":{"position":[[14,1],[16,5],[22,1],[43,1],[66,1]]},"746":{"position":[[314,3],[354,3]]},"748":{"position":[[7,1],[9,5],[15,1],[24,1]]},"752":{"position":[[134,3],[453,4]]},"754":{"position":[[96,3],[232,4]]},"759":{"position":[[95,3],[422,3]]},"761":{"position":[[105,3],[281,3]]},"766":{"position":[[436,3]]},"773":{"position":[[97,3],[656,3]]},"775":{"position":[[109,3],[345,1],[453,3]]},"780":{"position":[[436,3]]},"784":{"position":[[77,1]]},"790":{"position":[[130,3]]},"792":{"position":[[14,1],[16,5],[22,1],[43,1],[45,5],[51,1]]},"798":{"position":[[24,1]]},"804":{"position":[[106,3],[155,3]]},"806":{"position":[[109,3]]},"810":{"position":[[14,1],[30,1]]},"821":{"position":[[54,5],[60,1]]},"829":{"position":[[7,1],[9,5],[15,1],[45,1]]},"833":{"position":[[109,3],[121,3],[201,1],[218,1],[241,3]]},"835":{"position":[[102,3],[114,3]]},"837":{"position":[[68,1],[70,5],[76,1],[92,1]]},"843":{"position":[[20,1]]},"845":{"position":[[65,1],[67,5],[73,1]]},"851":{"position":[[34,1]]},"853":{"position":[[11,1],[43,1],[75,1],[84,1]]},"860":{"position":[[146,1]]},"864":{"position":[[48,3]]},"870":{"position":[[71,3]]},"874":{"position":[[43,1]]},"882":{"position":[[14,1],[16,5],[22,1]]},"891":{"position":[[44,3]]},"895":{"position":[[14,1],[16,5],[22,1],[43,1]]},"901":{"position":[[95,3],[382,3],[532,3]]},"911":{"position":[[10,1]]},"917":{"position":[[71,3],[107,3],[144,1],[205,3]]},"919":{"position":[[12,1]]},"935":{"position":[[0,5],[6,1]]},"946":{"position":[[324,1]]},"948":{"position":[[143,1]]},"950":{"position":[[0,3],[4,1]]},"958":{"position":[[14,1],[16,5],[22,1],[43,1]]},"964":{"position":[[20,1]]},"969":{"position":[[44,3]]},"976":{"position":[[126,3]]},"978":{"position":[[194,3]]},"980":{"position":[[0,3],[4,1]]},"995":{"position":[[44,3]]},"999":{"position":[[14,1],[16,5],[22,1],[43,1]]},"1005":{"position":[[70,1],[170,1]]},"1007":{"position":[[14,1]]},"1013":{"position":[[212,3]]},"1015":{"position":[[14,1]]},"1019":{"position":[[23,1],[69,1],[102,1]]},"1022":{"position":[[23,3],[41,3]]},"1024":{"position":[[132,3],[151,3]]},"1026":{"position":[[134,3],[160,3],[342,3]]},"1028":{"position":[[14,1]]},"1032":{"position":[[16,1]]},"1034":{"position":[[598,1]]},"1044":{"position":[[47,3],[125,3],[129,4]]},"1046":{"position":[[43,3],[121,3]]},"1056":{"position":[[146,3],[189,3],[260,3],[286,3]]},"1058":{"position":[[235,3],[376,3]]},"1060":{"position":[[167,3],[193,3],[264,3],[290,3]]},"1062":{"position":[[12,1]]},"1070":{"position":[[7,1],[9,5],[15,1],[24,1]]},"1074":{"position":[[29,3],[121,3]]},"1076":{"position":[[33,3],[93,3]]},"1082":{"position":[[12,1]]},"1092":{"position":[[14,1],[16,5],[22,1],[43,1],[45,5],[51,1]]},"1096":{"position":[[371,3],[598,3],[814,1],[831,1],[901,1],[918,1],[941,3]]},"1098":{"position":[[273,3],[366,3],[446,3],[485,3],[578,3],[603,1]]},"1100":{"position":[[14,1],[16,5],[22,1],[43,1]]},"1111":{"position":[[48,3]]},"1113":{"position":[[79,1],[183,1]]},"1115":{"position":[[7,1]]},"1121":{"position":[[350,3]]},"1123":{"position":[[14,1]]},"1131":{"position":[[7,1]]},"1137":{"position":[[507,1],[509,3]]},"1147":{"position":[[7,1]]},"1153":{"position":[[494,3]]},"1155":{"position":[[247,3]]},"1157":{"position":[[0,5],[6,1]]},"1165":{"position":[[14,1],[16,5],[22,1],[43,1]]},"1186":{"position":[[314,3],[499,3],[522,3],[842,3],[862,3],[871,3],[892,3],[913,3]]},"1191":{"position":[[271,3]]},"1193":{"position":[[164,3]]},"1195":{"position":[[7,1]]},"1197":{"position":[[85,1]]},"1199":{"position":[[48,3]]},"1201":{"position":[[83,3]]},"1203":{"position":[[14,1],[16,5],[22,1],[43,1]]},"1205":{"position":[[357,1]]},"1209":{"position":[[54,3]]},"1214":{"position":[[59,3],[155,1]]},"1216":{"position":[[74,3]]},"1218":{"position":[[7,1],[9,5],[15,1],[24,1]]},"1222":{"position":[[29,3],[141,3]]},"1224":{"position":[[33,3],[104,3]]},"1226":{"position":[[14,1],[16,5],[22,1],[43,1]]},"1230":{"position":[[77,3],[109,3]]},"1232":{"position":[[65,3],[97,3]]},"1240":{"position":[[14,1],[16,5],[22,1],[43,1]]},"1250":{"position":[[14,1],[16,5],[22,1],[43,1]]},"1261":{"position":[[266,3],[315,3]]},"1265":{"position":[[7,1],[9,5],[15,1]]},"1273":{"position":[[53,3],[343,4]]},"1275":{"position":[[932,4]]},"1277":{"position":[[98,4],[513,3],[1138,3]]},"1279":{"position":[[102,4]]},"1283":{"position":[[233,1]]},"1289":{"position":[[14,1]]},"1291":{"position":[[519,1]]},"1293":{"position":[[491,1],[524,1],[542,1],[573,1],[598,1],[621,1]]},"1304":{"position":[[424,3],[444,3]]},"1306":{"position":[[7,1],[9,5],[15,1]]},"1310":{"position":[[98,3],[327,3]]},"1312":{"position":[[102,3],[194,3]]},"1314":{"position":[[7,1],[9,5],[15,1]]},"1318":{"position":[[325,3],[371,3]]},"1320":{"position":[[275,3]]},"1322":{"position":[[14,1],[16,5],[22,1],[43,1],[45,5],[51,1]]},"1330":{"position":[[12,1]]},"1338":{"position":[[111,1]]},"1340":{"position":[[14,1],[16,5],[22,1],[43,1]]},"1346":{"position":[[149,3]]},"1351":{"position":[[48,3]]},"1353":{"position":[[79,1],[183,1]]},"1358":{"position":[[48,3]]},"1360":{"position":[[79,1],[183,1]]},"1362":{"position":[[0,5],[6,1],[13,1]]},"1383":{"position":[[79,1],[183,1]]},"1389":{"position":[[43,3]]},"1391":{"position":[[47,3],[249,4]]},"1394":{"position":[[73,3]]},"1396":{"position":[[164,3]]},"1405":{"position":[[7,1],[9,5],[15,1],[45,1]]},"1409":{"position":[[109,3],[121,3],[199,1],[216,1],[239,3]]},"1411":{"position":[[102,3],[114,3]]},"1417":{"position":[[67,1]]},"1423":{"position":[[132,3]]},"1429":{"position":[[103,3]]},"1441":{"position":[[47,1]]},"1445":{"position":[[221,3]]},"1458":{"position":[[946,3]]},"1713":{"position":[[312,1],[630,3],[634,3],[722,3],[1985,3],[2113,3]]},"1735":{"position":[[628,3],[632,3],[720,3],[2101,3]]},"1752":{"position":[[124,1]]},"1771":{"position":[[405,3]]},"1862":{"position":[[123,1]]},"1886":{"position":[[65,2],[653,2]]},"1906":{"position":[[470,1],[1405,2],[1441,2]]},"1912":{"position":[[61,1]]},"1914":{"position":[[97,1],[130,2],[164,3],[199,4],[235,5],[272,6],[464,1],[719,1],[733,1],[747,1],[1224,2]]},"1936":{"position":[[109,1]]}}}],["0",{"_index":276,"t":{"25":{"position":[[1496,2],[1620,1],[1643,2]]},"31":{"position":[[563,2],[687,1],[710,2]]},"62":{"position":[[250,2]]},"73":{"position":[[81,2],[84,1]]},"91":{"position":[[3442,2],[3575,2]]},"133":{"position":[[712,1],[726,3]]},"135":{"position":[[364,2]]},"165":{"position":[[406,2],[409,1]]},"189":{"position":[[406,2],[409,1]]},"201":{"position":[[917,3],[1024,3]]},"203":{"position":[[526,1],[592,2],[644,2]]},"211":{"position":[[1789,2],[2400,2],[2403,2],[2406,2],[2498,2],[2501,2],[2504,2],[2536,2],[2539,2],[2623,2],[4297,1]]},"213":{"position":[[1208,3],[1315,3],[2012,1],[2078,2],[2130,2],[3490,2],[3493,2],[3496,2],[3588,2],[3591,2],[3594,2],[3626,2],[3629,2],[3713,2]]},"215":{"position":[[356,2],[359,1],[427,2],[430,1],[1834,2],[1837,2],[1840,2],[1843,2],[1846,1]]},"231":{"position":[[1607,1]]},"233":{"position":[[1647,1]]},"268":{"position":[[917,3],[1024,3]]},"270":{"position":[[526,1],[592,2],[644,2]]},"278":{"position":[[1811,2],[2414,2],[2417,2],[2420,2],[2512,2],[2515,2],[2518,2],[2550,2],[2553,2],[2637,2],[4470,1],[4909,2],[4912,2],[4915,2],[4992,2],[4995,2],[5080,2]]},"280":{"position":[[1424,3],[1531,3],[2603,1],[2669,2],[2721,2],[4478,2],[4481,2],[4484,2],[4576,2],[4579,2],[4582,2],[4614,2],[4617,2],[4701,2],[6192,2],[6195,2],[6198,2],[6275,2],[6278,2],[6363,2]]},"282":{"position":[[356,2],[359,1],[427,2],[430,1],[1834,2],[1837,2],[1840,2],[1843,2],[1846,1]]},"313":{"position":[[11,1],[13,1]]},"321":{"position":[[89,2],[92,1]]},"336":{"position":[[703,1],[785,1],[888,1],[957,1]]},"365":{"position":[[382,1]]},"383":{"position":[[694,1]]},"385":{"position":[[249,2]]},"403":{"position":[[88,2],[91,1],[97,1]]},"471":{"position":[[656,3],[763,3],[857,1]]},"506":{"position":[[246,1]]},"511":{"position":[[374,1]]},"521":{"position":[[372,1]]},"537":{"position":[[268,1],[769,2],[872,2],[905,2]]},"539":{"position":[[220,1],[245,1]]},"541":{"position":[[103,3],[210,3]]},"614":{"position":[[955,2],[1391,1]]},"618":{"position":[[122,1]]},"629":{"position":[[1530,2],[1654,1],[1677,2]]},"635":{"position":[[563,2],[687,1],[710,2]]},"640":{"position":[[460,1]]},"670":{"position":[[335,2]]},"679":{"position":[[171,1],[216,2]]},"683":{"position":[[219,1]]},"744":{"position":[[1039,1]]},"746":{"position":[[376,2]]},"917":{"position":[[146,2]]},"921":{"position":[[216,1]]},"1113":{"position":[[103,3],[210,3]]},"1179":{"position":[[1032,1]]},"1181":{"position":[[232,2]]},"1186":{"position":[[382,1],[635,2],[978,2]]},"1197":{"position":[[87,2]]},"1248":{"position":[[408,2],[411,2],[414,2],[417,2],[494,2],[497,2],[500,2],[585,2],[588,2],[679,2]]},"1263":{"position":[[247,2]]},"1336":{"position":[[278,1]]},"1353":{"position":[[103,3],[210,3]]},"1358":{"position":[[120,1],[145,1]]},"1360":{"position":[[103,3],[210,3]]},"1381":{"position":[[220,1],[245,1]]},"1383":{"position":[[103,3],[210,3]]},"1460":{"position":[[230,1]]},"1492":{"position":[[155,1]]},"1498":{"position":[[13,1]]},"1713":{"position":[[802,1]]},"1737":{"position":[[1120,2]]},"1821":{"position":[[443,1]]},"1839":{"position":[[475,1]]}}}],["0,0",{"_index":913,"t":{"165":{"position":[[50,3],[310,3],[662,3]]},"189":{"position":[[50,3],[310,3],[662,3]]},"236":{"position":[[39,3]]}}}],["0.0",{"_index":1098,"t":{"211":{"position":[[700,4],[1369,4]]},"213":{"position":[[2989,4]]},"225":{"position":[[1096,3]]},"233":{"position":[[389,3]]},"254":{"position":[[77,3]]},"278":{"position":[[739,4],[1391,4]]},"280":{"position":[[3985,4]]},"481":{"position":[[2000,4],[2413,4]]},"485":{"position":[[906,4],[1408,4],[1860,4]]},"521":{"position":[[447,3]]},"640":{"position":[[535,3]]},"738":{"position":[[774,4]]},"1277":{"position":[[357,4],[859,4]]}}}],["0.00",{"_index":1352,"t":{"254":{"position":[[71,5]]}}}],["0.00024",{"_index":1595,"t":{"351":{"position":[[487,7]]}}}],["0.00091",{"_index":1592,"t":{"351":{"position":[[377,7]]}}}],["0.0063",{"_index":1252,"t":{"225":{"position":[[1350,6]]},"233":{"position":[[643,6]]}}}],["0.01",{"_index":1029,"t":{"199":{"position":[[306,4],[422,4]]},"213":{"position":[[453,4],[569,4]]},"215":{"position":[[361,5]]},"266":{"position":[[306,4],[422,4]]},"280":{"position":[[669,4],[785,4]]},"282":{"position":[[361,5]]}}}],["0.02",{"_index":2168,"t":{"872":{"position":[[74,4]]},"1439":{"position":[[227,4]]},"1447":{"position":[[133,4]]}}}],["0.04",{"_index":2167,"t":{"872":{"position":[[40,4]]},"1439":{"position":[[193,4]]},"1447":{"position":[[99,4]]}}}],["0.05",{"_index":2272,"t":{"1205":{"position":[[224,4]]},"1209":{"position":[[17,4],[58,4]]}}}],["0.071218218251483",{"_index":1251,"t":{"225":{"position":[[1322,17]]},"233":{"position":[[615,17]]}}}],["0.1",{"_index":936,"t":{"165":{"position":[[411,4]]},"189":{"position":[[411,4]]},"215":{"position":[[432,4]]},"282":{"position":[[432,4]]},"525":{"position":[[130,3]]},"602":{"position":[[46,3]]},"644":{"position":[[130,3]]},"730":{"position":[[196,3]]},"735":{"position":[[198,3]]},"754":{"position":[[198,3]]}}}],["0.1,50000",{"_index":930,"t":{"165":{"position":[[314,9]]},"189":{"position":[[314,9]]}}}],["0.10",{"_index":1353,"t":{"254":{"position":[[81,5]]}}}],["0.104982143381498",{"_index":1250,"t":{"225":{"position":[[1293,17]]},"233":{"position":[[586,17]]}}}],["0.138",{"_index":1063,"t":{"201":{"position":[[1028,6]]},"213":{"position":[[1319,6]]},"268":{"position":[[1028,6]]},"280":{"position":[[1535,6]]},"471":{"position":[[767,6]]},"541":{"position":[[214,6]]},"1113":{"position":[[214,6]]},"1353":{"position":[[214,6]]},"1360":{"position":[[214,6]]},"1383":{"position":[[214,6]]}}}],["0.197937",{"_index":1789,"t":{"469":{"position":[[692,8]]},"525":{"position":[[287,8]]},"644":{"position":[[287,8]]}}}],["0.2",{"_index":2299,"t":{"1248":{"position":[[745,5],[751,4],[756,4],[761,4],[766,4]]}}}],["0.210",{"_index":1064,"t":{"201":{"position":[[1035,6]]},"213":{"position":[[1326,6]]},"268":{"position":[[1035,6]]},"280":{"position":[[1542,6]]},"471":{"position":[[774,6]]},"541":{"position":[[221,6]]},"1113":{"position":[[221,6]]},"1353":{"position":[[221,6]]},"1360":{"position":[[221,6]]},"1383":{"position":[[221,6]]}}}],["0.210714",{"_index":1788,"t":{"469":{"position":[[672,8]]},"525":{"position":[[267,8]]},"644":{"position":[[267,8]]}}}],["0.25",{"_index":1120,"t":{"211":{"position":[[2688,6],[2695,5],[2701,5],[2707,5]]},"213":{"position":[[3778,6],[3785,5],[3791,5],[3797,5]]},"278":{"position":[[2702,6],[2709,5],[2715,5],[2721,5],[5146,6],[5153,5],[5159,5],[5165,5]]},"280":{"position":[[4766,6],[4773,5],[4779,5],[4785,5],[6429,6],[6436,5],[6442,5],[6448,5]]},"1248":{"position":[[654,6],[661,5],[667,5],[673,5]]}}}],["0.255",{"_index":1065,"t":{"201":{"position":[[1042,6]]},"213":{"position":[[1333,6]]},"268":{"position":[[1042,6]]},"280":{"position":[[1549,6]]},"471":{"position":[[781,6]]},"541":{"position":[[228,6]]},"1113":{"position":[[228,6]]},"1353":{"position":[[228,6]]},"1360":{"position":[[228,6]]},"1383":{"position":[[228,6]]}}}],["0.2739",{"_index":1475,"t":{"315":{"position":[[114,6]]},"321":{"position":[[911,6]]}}}],["0.286",{"_index":1066,"t":{"201":{"position":[[1049,6]]},"213":{"position":[[1340,6]]},"268":{"position":[[1049,6]]},"280":{"position":[[1556,6]]},"471":{"position":[[788,6]]},"541":{"position":[[235,6]]},"1113":{"position":[[235,6]]},"1353":{"position":[[235,6]]},"1360":{"position":[[235,6]]},"1383":{"position":[[235,6]]}}}],["0.310",{"_index":1067,"t":{"201":{"position":[[1056,6]]},"213":{"position":[[1347,6]]},"268":{"position":[[1056,6]]},"280":{"position":[[1563,6]]},"471":{"position":[[795,6]]},"541":{"position":[[242,6]]},"1113":{"position":[[242,6]]},"1353":{"position":[[242,6]]},"1360":{"position":[[242,6]]},"1383":{"position":[[242,6]]}}}],["0.328",{"_index":1068,"t":{"201":{"position":[[1063,6]]},"213":{"position":[[1354,6]]},"268":{"position":[[1063,6]]},"280":{"position":[[1570,6]]},"471":{"position":[[802,6]]},"541":{"position":[[249,6]]},"1113":{"position":[[249,6]]},"1353":{"position":[[249,6]]},"1360":{"position":[[249,6]]},"1383":{"position":[[249,6]]}}}],["0.33",{"_index":1118,"t":{"211":{"position":[[2604,6],[2611,5]]},"213":{"position":[[3694,6],[3701,5]]},"278":{"position":[[2618,6],[2625,5],[5068,5],[5074,5]]},"280":{"position":[[4682,6],[4689,5],[6351,5],[6357,5]]},"1248":{"position":[[566,6],[573,5]]}}}],["0.34",{"_index":1119,"t":{"211":{"position":[[2617,5]]},"213":{"position":[[3707,5]]},"278":{"position":[[2631,5],[5061,6]]},"280":{"position":[[4695,5],[6344,6]]},"1248":{"position":[[579,5]]}}}],["0.342",{"_index":1069,"t":{"201":{"position":[[1070,6]]},"213":{"position":[[1361,6]]},"268":{"position":[[1070,6]]},"280":{"position":[[1577,6]]},"471":{"position":[[809,6]]},"541":{"position":[[256,6]]},"1113":{"position":[[256,6]]},"1353":{"position":[[256,6]]},"1360":{"position":[[256,6]]},"1383":{"position":[[256,6]]}}}],["0.353",{"_index":1070,"t":{"201":{"position":[[1077,6]]},"213":{"position":[[1368,6]]},"268":{"position":[[1077,6]]},"280":{"position":[[1584,6]]},"471":{"position":[[816,6]]},"541":{"position":[[263,6]]},"1113":{"position":[[263,6]]},"1353":{"position":[[263,6]]},"1360":{"position":[[263,6]]},"1383":{"position":[[263,6]]}}}],["0.360",{"_index":1071,"t":{"201":{"position":[[1084,6]]},"213":{"position":[[1375,6]]},"268":{"position":[[1084,6]]},"280":{"position":[[1591,6]]},"471":{"position":[[823,6]]},"541":{"position":[[270,6]]},"1113":{"position":[[270,6]]},"1353":{"position":[[270,6]]},"1360":{"position":[[270,6]]},"1383":{"position":[[270,6]]}}}],["0.362",{"_index":1072,"t":{"201":{"position":[[1091,6]]},"213":{"position":[[1382,6]]},"268":{"position":[[1091,6]]},"280":{"position":[[1598,6]]},"471":{"position":[[830,6]]},"541":{"position":[[277,6]]},"1113":{"position":[[277,6]]},"1353":{"position":[[277,6]]},"1360":{"position":[[277,6]]},"1383":{"position":[[277,6]]}}}],["0.3664",{"_index":1470,"t":{"315":{"position":[[65,6]]},"321":{"position":[[856,6]]}}}],["0.368",{"_index":1480,"t":{"315":{"position":[[162,5]]},"321":{"position":[[965,5]]}}}],["0.368786",{"_index":1790,"t":{"469":{"position":[[711,8]]},"525":{"position":[[306,8]]},"644":{"position":[[306,8]]}}}],["0.45077",{"_index":1786,"t":{"469":{"position":[[634,7]]},"525":{"position":[[229,7]]},"644":{"position":[[229,7]]}}}],["0.5",{"_index":1099,"t":{"211":{"position":[[817,5],[823,5],[1437,5],[1443,4],[2525,5],[2531,4]]},"213":{"position":[[3057,5],[3063,4],[3615,5],[3621,4]]},"231":{"position":[[1674,3],[1680,3]]},"233":{"position":[[1714,3],[1720,3]]},"278":{"position":[[856,5],[862,5],[1459,5],[1465,4],[2539,5],[2545,4],[4981,5],[4987,4]]},"280":{"position":[[4053,5],[4059,4],[4603,5],[4609,4],[6264,5],[6270,4]]},"385":{"position":[[314,5],[320,4]]},"511":{"position":[[433,3]]},"670":{"position":[[401,5],[407,4]]},"721":{"position":[[399,3]]},"1186":{"position":[[1043,5],[1049,4]]},"1248":{"position":[[483,5],[489,4]]},"1263":{"position":[[312,5],[318,4]]}}}],["0.510676386339746",{"_index":1243,"t":{"225":{"position":[[1110,17]]},"233":{"position":[[403,17]]}}}],["0.691702",{"_index":1787,"t":{"469":{"position":[[652,8]]},"525":{"position":[[247,8]]},"644":{"position":[[247,8]]}}}],["0.70",{"_index":1137,"t":{"215":{"position":[[161,5],[310,5]]},"282":{"position":[[161,5],[310,5]]},"434":{"position":[[278,5]]},"440":{"position":[[283,5],[423,5],[581,5]]},"469":{"position":[[283,5],[441,5]]},"473":{"position":[[381,5],[539,5]]},"761":{"position":[[227,5]]},"775":{"position":[[232,5],[372,5]]},"808":{"position":[[283,5]]},"1049":{"position":[[283,5]]}}}],["0.72",{"_index":1131,"t":{"215":{"position":[[92,5],[185,5],[285,5]]},"282":{"position":[[92,5],[185,5],[285,5]]},"434":{"position":[[259,6]]},"440":{"position":[[264,6],[398,5],[550,6],[575,5]]},"469":{"position":[[264,6],[410,6],[435,5]]},"473":{"position":[[362,6],[508,6],[533,5]]},"761":{"position":[[208,6]]},"775":{"position":[[213,6],[347,5]]},"808":{"position":[[264,6]]},"1049":{"position":[[264,6]]}}}],["0.73",{"_index":1142,"t":{"215":{"position":[[210,5]]},"282":{"position":[[210,5]]},"440":{"position":[[417,5],[557,5]]},"469":{"position":[[417,5]]},"473":{"position":[[515,5]]},"775":{"position":[[366,5]]}}}],["0.74",{"_index":1134,"t":{"215":{"position":[[138,5],[235,5],[260,5]]},"282":{"position":[[138,5],[235,5],[260,5]]},"434":{"position":[[272,5]]},"440":{"position":[[277,5],[563,5],[569,5]]},"469":{"position":[[277,5],[423,5],[429,5]]},"473":{"position":[[375,5],[521,5],[527,5]]},"761":{"position":[[221,5]]},"775":{"position":[[226,5]]},"808":{"position":[[277,5]]},"1049":{"position":[[277,5]]}}}],["0.7401",{"_index":1485,"t":{"315":{"position":[[210,6]]},"321":{"position":[[1019,6]]}}}],["0.74373",{"_index":1781,"t":{"469":{"position":[[549,7]]},"525":{"position":[[144,7]]},"644":{"position":[[144,7]]}}}],["0.748",{"_index":1713,"t":{"440":{"position":[[410,6]]},"775":{"position":[[359,6]]}}}],["0.75",{"_index":1037,"t":{"201":{"position":[[434,4]]},"213":{"position":[[725,4]]},"215":{"position":[[115,5]]},"268":{"position":[[434,4]]},"280":{"position":[[941,4]]},"282":{"position":[[115,5]]},"434":{"position":[[266,5]]},"440":{"position":[[271,5],[404,5]]},"446":{"position":[[143,4]]},"454":{"position":[[129,4]]},"469":{"position":[[271,5]]},"471":{"position":[[143,4]]},"473":{"position":[[369,5]]},"475":{"position":[[129,4]]},"761":{"position":[[215,5]]},"768":{"position":[[143,4]]},"775":{"position":[[220,5],[353,5]]},"782":{"position":[[143,4]]},"808":{"position":[[271,5]]},"1049":{"position":[[271,5]]},"1193":{"position":[[131,4]]}}}],["0.8",{"_index":1236,"t":{"225":{"position":[[578,3],[1478,3]]},"233":{"position":[[771,3]]}}}],["0.849146377471569",{"_index":1248,"t":{"225":{"position":[[1237,17]]},"233":{"position":[[530,17]]}}}],["0.87",{"_index":1374,"t":{"270":{"position":[[817,4]]},"280":{"position":[[54,4],[2894,4]]}}}],["0.95",{"_index":1373,"t":{"270":{"position":[[810,4],[834,4]]},"280":{"position":[[61,4],[2887,4],[2911,4]]},"1300":{"position":[[12,4]]},"1304":{"position":[[379,4],[448,4]]}}}],["0.99",{"_index":2314,"t":{"1295":{"position":[[459,4]]}}}],["0078405",{"_index":3156,"t":{"1669":{"position":[[970,9]]}}}],["0088232",{"_index":3407,"t":{"1705":{"position":[[574,9]]}}}],["00:00:00",{"_index":963,"t":{"165":{"position":[[850,9],[916,9],[982,9],[1048,9],[1114,9],[1180,9],[1246,9],[1312,9],[1378,9],[1444,9],[1510,9],[1576,9]]},"189":{"position":[[850,9],[916,9],[982,9],[1048,9],[1114,9],[1180,9],[1246,9],[1312,9],[1378,9],[1444,9],[1510,9],[1576,9]]},"905":{"position":[[346,11]]},"1283":{"position":[[389,11]]}}}],["00ad854",{"_index":3077,"t":{"1662":{"position":[[935,9]]}}}],["00cd9c5",{"_index":2752,"t":{"1592":{"position":[[399,9],[502,9]]}}}],["01",{"_index":571,"t":{"91":{"position":[[2033,2],[2036,3],[2063,2],[2066,3]]},"153":{"position":[[951,3],[973,2],[976,3]]},"163":{"position":[[1262,3],[1284,2],[1287,3]]},"165":{"position":[[844,2],[847,2],[910,2],[913,2],[976,2],[979,2],[1042,2],[1045,2],[1108,2],[1111,2],[1177,2],[1240,2],[1243,2],[1306,2],[1309,2],[1372,2],[1375,2],[1438,2],[1441,2],[1504,2],[1507,2],[1570,2],[1573,2]]},"177":{"position":[[951,3],[973,2],[976,3]]},"187":{"position":[[1262,3],[1284,2],[1287,3]]},"189":{"position":[[844,2],[847,2],[910,2],[913,2],[976,2],[979,2],[1042,2],[1045,2],[1108,2],[1111,2],[1177,2],[1240,2],[1243,2],[1306,2],[1309,2],[1372,2],[1375,2],[1438,2],[1441,2],[1504,2],[1507,2],[1570,2],[1573,2]]},"203":{"position":[[682,3],[703,2],[706,3],[757,3],[779,2],[782,3]]},"213":{"position":[[2168,3],[2189,2],[2192,3],[2243,3],[2265,2],[2268,3]]},"270":{"position":[[682,3],[703,2],[706,3],[757,3],[779,2],[782,3]]},"280":{"position":[[2759,3],[2780,2],[2783,3],[2834,3],[2856,2],[2859,3]]},"345":{"position":[[169,2],[172,3],[195,2],[198,3]]},"403":{"position":[[385,2],[388,3],[415,2],[418,3],[462,2],[465,3],[489,2],[492,3]]},"555":{"position":[[110,2],[113,3],[145,2],[148,3]]},"670":{"position":[[119,3]]},"819":{"position":[[23,2],[26,3],[79,2],[82,3]]},"886":{"position":[[279,2],[282,3],[417,2],[420,3]]},"905":{"position":[[207,2],[210,3],[685,2],[688,3]]},"909":{"position":[[28,2],[31,2],[41,2],[44,2],[126,2],[129,2]]},"986":{"position":[[146,2],[149,3],[167,2],[170,3]]},"1024":{"position":[[85,2],[88,3],[111,2],[114,3]]},"1248":{"position":[[63,2],[66,3]]},"1283":{"position":[[268,2],[271,3],[702,2],[705,3]]},"1287":{"position":[[28,2],[31,2],[41,2],[44,2],[129,2],[132,2]]}}}],["01.01.2020",{"_index":1171,"t":{"215":{"position":[[802,11]]},"282":{"position":[[802,11]]}}}],["01.01.2020,329327.76,2301.9189,3796.9621",{"_index":1309,"t":{"238":{"position":[[49,40]]}}}],["01.01.2021",{"_index":1174,"t":{"215":{"position":[[851,11]]},"282":{"position":[[851,11]]}}}],["01.01.2021,533620.39,3699.8435,8533.0322",{"_index":1310,"t":{"238":{"position":[[90,40]]}}}],["01.01.2022",{"_index":1175,"t":{"215":{"position":[[900,11]]},"282":{"position":[[900,11]]}}}],["01.01.2022,416004.76,2837.5915,9434.1385",{"_index":1311,"t":{"238":{"position":[[131,40]]}}}],["01.01.2023",{"_index":1176,"t":{"215":{"position":[[949,11]]},"282":{"position":[[949,11]]}}}],["01.01.2023,340118.19,2280.7372,10019.154",{"_index":1312,"t":{"238":{"position":[[172,40]]}}}],["01.01.2024",{"_index":1179,"t":{"215":{"position":[[998,11]]},"282":{"position":[[998,11]]}}}],["01.01.2024,290127.01,1905.7952,10428.387",{"_index":1313,"t":{"238":{"position":[[213,40]]}}}],["01.01.2025",{"_index":1183,"t":{"215":{"position":[[1047,11]]},"282":{"position":[[1047,11]]}}}],["01.01.2025,253292.19,1635.7671,10725.254",{"_index":1314,"t":{"238":{"position":[[254,40]]}}}],["01.01.2026",{"_index":1188,"t":{"215":{"position":[[1096,11]]},"282":{"position":[[1096,11]]}}}],["01.01.2026,223584.53,1426.9726,10954.338",{"_index":1315,"t":{"238":{"position":[[295,40]]}}}],["01.01.2027",{"_index":1193,"t":{"215":{"position":[[1145,11]]},"282":{"position":[[1145,11]]}}}],["01.01.2027,198453.07,1249.781,11153.675",{"_index":1316,"t":{"238":{"position":[[336,39]]}}}],["01.01.2028",{"_index":1195,"t":{"215":{"position":[[1194,11]]},"282":{"position":[[1194,11]]}}}],["01.01.2028,177306.77,1099.8572,11318.01",{"_index":1317,"t":{"238":{"position":[[376,39]]}}}],["01.01.2029",{"_index":1196,"t":{"215":{"position":[[1243,11]]},"282":{"position":[[1243,11]]}}}],["01.01.2029,159723.78,977.37529,11450.614",{"_index":1318,"t":{"238":{"position":[[416,40]]}}}],["01.01.2030",{"_index":1197,"t":{"215":{"position":[[1292,11]]},"282":{"position":[[1292,11]]}}}],["01.01.2030,145056.33,875.30836,11561.335",{"_index":1319,"t":{"238":{"position":[[457,40]]}}}],["01.01.2031",{"_index":1198,"t":{"215":{"position":[[1341,11]]},"282":{"position":[[1341,11]]}}}],["01.01.2031,132577.75,788.45521,11654.645",{"_index":1320,"t":{"238":{"position":[[498,40]]}}}],["01.01.2032",{"_index":1199,"t":{"215":{"position":[[1390,11]]},"282":{"position":[[1390,11]]}}}],["01.01.2032,122166.68,715.64707,11734.129",{"_index":1321,"t":{"238":{"position":[[539,40]]}}}],["01.01.2033",{"_index":1201,"t":{"215":{"position":[[1439,11]]},"282":{"position":[[1439,11]]}}}],["01.01.2033,113070.74,653.71407,11802.565",{"_index":1322,"t":{"238":{"position":[[580,40]]}}}],["01.01.2034",{"_index":1202,"t":{"215":{"position":[[1488,11]]},"282":{"position":[[1488,11]]}}}],["01.01.2034,105114.67,600.04874,11860.717",{"_index":1323,"t":{"238":{"position":[[621,40]]}}}],["01.01.2035",{"_index":1203,"t":{"215":{"position":[[1537,11]]},"282":{"position":[[1537,11]]}}}],["01.01.2035,98147.958,553.56297,11910.283",{"_index":1324,"t":{"238":{"position":[[662,40]]}}}],["01.01.2036",{"_index":1206,"t":{"215":{"position":[[1586,11]]},"282":{"position":[[1586,11]]}}}],["01.01.2037",{"_index":1207,"t":{"215":{"position":[[1634,11]]},"282":{"position":[[1634,11]]}}}],["01.01.2038",{"_index":1209,"t":{"215":{"position":[[1681,11]]},"282":{"position":[[1681,11]]}}}],["01.01.2039",{"_index":1211,"t":{"215":{"position":[[1728,11]]},"282":{"position":[[1728,11]]}}}],["01.01.2040",{"_index":1214,"t":{"215":{"position":[[1775,11]]},"282":{"position":[[1775,11]]}}}],["01.01.2041",{"_index":1215,"t":{"215":{"position":[[1822,11]]},"282":{"position":[[1822,11]]}}}],["016c0bd",{"_index":2725,"t":{"1587":{"position":[[358,9]]}}}],["017560d",{"_index":2578,"t":{"1540":{"position":[[350,9]]}}}],["018b472",{"_index":3103,"t":{"1664":{"position":[[162,9]]}}}],["02f9099",{"_index":2442,"t":{"1487":{"position":[[263,9]]}}}],["030a44b",{"_index":3217,"t":{"1675":{"position":[[379,9]]}}}],["0346929",{"_index":3361,"t":{"1692":{"position":[[339,9]]}}}],["035aad1",{"_index":3092,"t":{"1662":{"position":[[1258,9]]}}}],["03abf64",{"_index":3198,"t":{"1673":{"position":[[750,9]]}}}],["04",{"_index":2107,"t":{"670":{"position":[[116,2]]}}}],["0537ce4",{"_index":2400,"t":{"1483":{"position":[[209,9]]}}}],["0595fbd",{"_index":2790,"t":{"1594":{"position":[[248,9]]}}}],["059dab5",{"_index":3369,"t":{"1695":{"position":[[222,9]]}}}],["06",{"_index":1085,"t":{"203":{"position":[[679,2],[754,2]]},"213":{"position":[[2165,2],[2240,2]]},"270":{"position":[[679,2],[754,2]]},"280":{"position":[[2756,2],[2831,2]]}}}],["064adfa",{"_index":3388,"t":{"1703":{"position":[[41,9]]}}}],["06ef021",{"_index":2463,"t":{"1498":{"position":[[210,9]]}}}],["06f85e8",{"_index":2618,"t":{"1544":{"position":[[183,9]]}}}],["08394a3",{"_index":3379,"t":{"1701":{"position":[[44,9]]}}}],["087867c",{"_index":3059,"t":{"1662":{"position":[[444,9]]}}}],["090edb",{"_index":2457,"t":{"1496":{"position":[[44,9]]}}}],["098cfa9",{"_index":2440,"t":{"1487":{"position":[[215,9]]}}}],["09ef23",{"_index":3394,"t":{"1705":{"position":[[203,10]]}}}],["09f52bd",{"_index":2897,"t":{"1618":{"position":[[224,9]]}}}],["0a0b2f",{"_index":3340,"t":{"1688":{"position":[[356,9]]}}}],["0a75da4",{"_index":2699,"t":{"1581":{"position":[[50,9]]}}}],["0b027ef",{"_index":2917,"t":{"1620":{"position":[[349,9]]}}}],["0ba8f8f",{"_index":3347,"t":{"1690":{"position":[[33,9]]}}}],["0bf6fe6",{"_index":2590,"t":{"1542":{"position":[[96,9]]}}}],["0c45251",{"_index":3042,"t":{"1662":{"position":[[87,9],[261,9],[1443,9]]}}}],["0cfe517",{"_index":2522,"t":{"1526":{"position":[[234,9]]}}}],["0d1ce6f",{"_index":3300,"t":{"1686":{"position":[[440,9],[709,9]]}}}],["0dc526d",{"_index":2600,"t":{"1542":{"position":[[265,9]]}}}],["0e30ab2",{"_index":3342,"t":{"1688":{"position":[[397,9]]}}}],["0e6b248",{"_index":2576,"t":{"1540":{"position":[[266,9]]}}}],["0f1e6f8",{"_index":2706,"t":{"1583":{"position":[[57,9]]}}}],["0f30f49",{"_index":3199,"t":{"1673":{"position":[[782,9]]}}}],["0f3ddca",{"_index":3291,"t":{"1686":{"position":[[86,9]]}}}],["0|1|2",{"_index":275,"t":{"25":{"position":[[1467,8]]},"31":{"position":[[534,8]]},"629":{"position":[[1501,8]]},"635":{"position":[[534,8]]}}}],["1",{"_index":284,"t":{"25":{"position":[[1552,2]]},"31":{"position":[[619,2]]},"45":{"position":[[300,1],[348,1]]},"58":{"position":[[1632,1]]},"73":{"position":[[68,1]]},"91":{"position":[[380,2]]},"93":{"position":[[457,2]]},"107":{"position":[[1083,2],[1114,2],[1681,2],[1728,2]]},"135":{"position":[[279,2]]},"211":{"position":[[2396,3]]},"213":{"position":[[3486,3]]},"231":{"position":[[1603,1],[2478,1]]},"233":{"position":[[1643,1],[2027,1]]},"278":{"position":[[2410,3],[4905,3]]},"280":{"position":[[4474,3],[6188,3]]},"321":{"position":[[94,2]]},"338":{"position":[[45,2],[110,2],[175,2],[221,2],[285,2],[343,2],[413,2],[453,2]]},"341":{"position":[[76,1]]},"369":{"position":[[323,2]]},"385":{"position":[[245,3]]},"471":{"position":[[863,1]]},"485":{"position":[[364,2]]},"506":{"position":[[251,2],[341,1],[772,2],[825,2]]},"537":{"position":[[274,2]]},"539":{"position":[[226,1]]},"567":{"position":[[1653,2],[1729,1]]},"592":{"position":[[24,3]]},"629":{"position":[[1586,2]]},"635":{"position":[[619,2]]},"670":{"position":[[331,3]]},"721":{"position":[[578,1]]},"738":{"position":[[136,2]]},"744":{"position":[[1092,1]]},"905":{"position":[[775,1]]},"1179":{"position":[[1085,1]]},"1186":{"position":[[974,3]]},"1248":{"position":[[404,3]]},"1261":{"position":[[250,2],[299,2]]},"1263":{"position":[[243,3]]},"1291":{"position":[[1324,2]]},"1318":{"position":[[131,2]]},"1358":{"position":[[126,1]]},"1381":{"position":[[226,1]]},"1483":{"position":[[105,1]]},"1821":{"position":[[424,1]]},"1914":{"position":[[95,1],[579,1],[731,1],[846,2],[859,1]]}}}],["1,3",{"_index":953,"t":{"165":{"position":[[666,3]]},"189":{"position":[[666,3]]}}}],["1,4.1",{"_index":914,"t":{"165":{"position":[[54,5]]},"189":{"position":[[54,5]]}}}],["1.0",{"_index":1097,"t":{"211":{"position":[[694,5],[1363,5]]},"213":{"position":[[2983,5]]},"278":{"position":[[733,5],[1385,5]]},"280":{"position":[[3979,5]]}}}],["1.00e+06",{"_index":1468,"t":{"315":{"position":[[47,8],[72,8],[96,8],[121,8],[144,8],[168,8],[192,8],[217,8]]},"321":{"position":[[835,9],[863,9],[890,9],[918,9],[944,9],[971,9],[998,9],[1026,9]]}}}],["1.03",{"_index":2203,"t":{"946":{"position":[[169,4],[326,4]]}}}],["1.05",{"_index":2079,"t":{"594":{"position":[[205,4],[368,4]]}}}],["1.1",{"_index":462,"t":{"64":{"position":[[708,3]]}}}],["1.1.2005",{"_index":811,"t":{"143":{"position":[[952,9],[1001,9]]},"167":{"position":[[952,9],[1001,9]]}}}],["1.10e+07",{"_index":1504,"t":{"315":{"position":[[431,8],[455,8],[479,8],[503,8],[527,8],[551,8]]},"321":{"position":[[1267,9],[1294,9],[1321,9],[1348,9],[1375,9],[1402,9]]}}}],["1.3.3",{"_index":3065,"t":{"1662":{"position":[[599,5]]}}}],["1.3.4",{"_index":3066,"t":{"1662":{"position":[[608,5]]}}}],["1.34903656604691",{"_index":1249,"t":{"225":{"position":[[1265,16]]},"233":{"position":[[558,16]]}}}],["1.399",{"_index":1503,"t":{"315":{"position":[[401,5]]},"321":{"position":[[1234,5]]}}}],["1.95",{"_index":1499,"t":{"315":{"position":[[354,4]]},"321":{"position":[[1181,4]]}}}],["1/0",{"_index":2114,"t":{"679":{"position":[[548,4]]}}}],["10",{"_index":805,"t":{"143":{"position":[[730,2]]},"153":{"position":[[948,2]]},"161":{"position":[[1599,2]]},"163":{"position":[[1259,2],[2173,2]]},"167":{"position":[[730,2]]},"177":{"position":[[948,2]]},"185":{"position":[[1599,2]]},"187":{"position":[[1259,2],[2173,2]]},"191":{"position":[[910,2]]},"215":{"position":[[371,3],[443,3]]},"258":{"position":[[910,2]]},"282":{"position":[[371,3],[443,3]]},"302":{"position":[[526,2]]},"313":{"position":[[22,2],[33,2]]},"315":{"position":[[56,2],[81,2]]},"321":{"position":[[845,3],[873,3]]},"389":{"position":[[751,2]]},"506":{"position":[[371,2]]},"541":{"position":[[311,2]]},"547":{"position":[[212,2],[540,2]]},"602":{"position":[[0,2]]},"705":{"position":[[40,2],[176,2]]},"721":{"position":[[67,2]]},"740":{"position":[[384,2]]},"1098":{"position":[[600,2]]},"1106":{"position":[[39,2]]},"1113":{"position":[[311,2]]},"1129":{"position":[[0,2],[46,2]]},"1201":{"position":[[114,2]]},"1328":{"position":[[18,2]]},"1353":{"position":[[311,2]]},"1360":{"position":[[311,2]]},"1383":{"position":[[311,2]]},"1439":{"position":[[115,2]]},"1447":{"position":[[21,2]]}}}],["10.0",{"_index":938,"t":{"165":{"position":[[422,5]]},"189":{"position":[[422,5]]},"843":{"position":[[15,4]]},"1038":{"position":[[147,4]]}}}],["10.71,83277.09",{"_index":1290,"t":{"236":{"position":[[112,14]]}}}],["10.9074631209139",{"_index":1246,"t":{"225":{"position":[[1184,16]]},"233":{"position":[[477,16]]}}}],["100",{"_index":1147,"t":{"215":{"position":[[367,3],[475,4]]},"282":{"position":[[367,3],[475,4]]},"289":{"position":[[192,6]]},"291":{"position":[[85,5]]},"296":{"position":[[207,6]]},"321":{"position":[[1909,3]]},"502":{"position":[[2609,4]]},"539":{"position":[[247,5]]},"721":{"position":[[580,6]]},"1358":{"position":[[147,5]]},"1381":{"position":[[247,5]]}}}],["100.0",{"_index":944,"t":{"165":{"position":[[460,6]]},"189":{"position":[[460,6]]}}}],["1000",{"_index":854,"t":{"153":{"position":[[385,4],[415,4]]},"163":{"position":[[696,4],[726,4]]},"177":{"position":[[385,4],[415,4]]},"187":{"position":[[696,4],[726,4]]},"203":{"position":[[385,4]]},"213":{"position":[[1871,4]]},"215":{"position":[[814,5],[863,5],[912,5],[1598,5]]},"229":{"position":[[404,4]]},"233":{"position":[[1278,4]]},"270":{"position":[[385,4]]},"280":{"position":[[2462,4]]},"282":{"position":[[814,5],[863,5],[912,5],[1598,5]]},"377":{"position":[[157,4]]},"1022":{"position":[[45,4]]},"1024":{"position":[[155,4]]},"1026":{"position":[[164,4],[371,4]]},"1186":{"position":[[836,5],[1117,4]]},"1263":{"position":[[386,4]]}}}],["1000.0",{"_index":1634,"t":{"385":{"position":[[198,6]]}}}],["10000",{"_index":812,"t":{"143":{"position":[[981,5]]},"153":{"position":[[962,5]]},"163":{"position":[[1273,5]]},"167":{"position":[[981,5]]},"177":{"position":[[962,5]]},"187":{"position":[[1273,5]]},"201":{"position":[[452,5]]},"203":{"position":[[768,5]]},"213":{"position":[[743,5],[2254,5]]},"215":{"position":[[574,5],[595,5],[616,5],[637,5],[658,5],[679,5],[700,5],[721,5],[1792,6]]},"268":{"position":[[452,5]]},"270":{"position":[[768,5]]},"280":{"position":[[959,5],[2845,5]]},"282":{"position":[[574,5],[595,5],[616,5],[637,5],[658,5],[679,5],[700,5],[721,5],[1792,6]]},"721":{"position":[[120,5]]}}}],["100000",{"_index":1151,"t":{"215":{"position":[[457,6]]},"282":{"position":[[457,6]]},"313":{"position":[[15,6]]},"389":{"position":[[814,6]]},"1005":{"position":[[63,6]]}}}],["1000000",{"_index":1152,"t":{"215":{"position":[[480,7],[1513,8],[1562,8]]},"282":{"position":[[480,7],[1513,8],[1562,8]]},"313":{"position":[[25,7]]},"321":{"position":[[104,8]]},"506":{"position":[[543,7],[607,7],[663,7],[730,7],[779,7],[832,7]]}}}],["100000000,4.1",{"_index":915,"t":{"165":{"position":[[60,13]]},"189":{"position":[[60,13]]}}}],["10054",{"_index":1712,"t":{"440":{"position":[[377,6]]},"775":{"position":[[326,6]]}}}],["1010",{"_index":895,"t":{"161":{"position":[[1576,4]]},"163":{"position":[[2150,4]]},"185":{"position":[[1576,4]]},"187":{"position":[[2150,4]]}}}],["1025",{"_index":1271,"t":{"231":{"position":[[1279,4],[1556,4]]},"233":{"position":[[1596,4]]}}}],["1026",{"_index":1114,"t":{"211":{"position":[[2264,4],[3166,4]]},"213":{"position":[[3354,4],[4054,4]]},"278":{"position":[[2286,4],[3193,4]]},"280":{"position":[[4350,4],[5055,4]]}}}],["103",{"_index":3308,"t":{"1686":{"position":[[939,6]]}}}],["1030",{"_index":2209,"t":{"964":{"position":[[15,4]]},"1248":{"position":[[359,4]]},"1263":{"position":[[198,4]]}}}],["104",{"_index":3254,"t":{"1682":{"position":[[564,6]]}}}],["1050",{"_index":2267,"t":{"1186":{"position":[[866,4],[1124,4]]},"1263":{"position":[[393,4]]}}}],["10500",{"_index":1140,"t":{"215":{"position":[[191,5],[216,5],[241,5],[266,5],[291,5],[316,5]]},"282":{"position":[[191,5],[216,5],[241,5],[266,5],[291,5],[316,5]]}}}],["1059",{"_index":2567,"t":{"1536":{"position":[[97,4]]}}}],["106",{"_index":3355,"t":{"1692":{"position":[[208,6]]}}}],["106.2",{"_index":1495,"t":{"315":{"position":[[324,5]]},"321":{"position":[[1147,6]]}}}],["107",{"_index":3261,"t":{"1682":{"position":[[692,6]]}}}],["10767",{"_index":1714,"t":{"440":{"position":[[438,5]]},"469":{"position":[[298,5]]},"473":{"position":[[396,5]]}}}],["109",{"_index":3330,"t":{"1688":{"position":[[123,6]]}}}],["10b5e07",{"_index":3226,"t":{"1675":{"position":[[738,9]]}}}],["10eadjusted​=eoriginal​−10",{"_index":2121,"t":{"705":{"position":[[351,26]]}}}],["11.399",{"_index":1056,"t":{"201":{"position":[[949,7]]},"213":{"position":[[1240,7]]},"268":{"position":[[949,7]]},"280":{"position":[[1456,7]]},"471":{"position":[[688,7]]},"541":{"position":[[135,7]]},"1113":{"position":[[135,7]]},"1353":{"position":[[135,7]]},"1360":{"position":[[135,7]]},"1383":{"position":[[135,7]]}}}],["11.8",{"_index":802,"t":{"143":{"position":[[453,4]]},"161":{"position":[[122,4],[230,4]]},"163":{"position":[[1593,4]]},"167":{"position":[[453,4]]},"185":{"position":[[122,4],[230,4]]},"187":{"position":[[1593,4]]}}}],["11.89",{"_index":1509,"t":{"315":{"position":[[473,5]]},"321":{"position":[[1315,5]]}}}],["11.9,89808.09",{"_index":1291,"t":{"236":{"position":[[127,13]]}}}],["110",{"_index":3332,"t":{"1688":{"position":[[162,6]]}}}],["1100",{"_index":1204,"t":{"215":{"position":[[1549,5]]},"282":{"position":[[1549,5]]}}}],["112",{"_index":3345,"t":{"1688":{"position":[[461,6]]}}}],["11276",{"_index":1711,"t":{"440":{"position":[[370,6]]},"775":{"position":[[319,6]]}}}],["116",{"_index":3271,"t":{"1684":{"position":[[51,6]]}}}],["118",{"_index":3328,"t":{"1688":{"position":[[84,6]]}}}],["119",{"_index":3341,"t":{"1688":{"position":[[390,6]]}}}],["11973",{"_index":1724,"t":{"440":{"position":[[530,7]]},"469":{"position":[[390,7]]},"473":{"position":[[488,7]]}}}],["11cb65b",{"_index":2505,"t":{"1519":{"position":[[24,9]]}}}],["11e5e4",{"_index":2430,"t":{"1485":{"position":[[393,9]]}}}],["12",{"_index":992,"t":{"165":{"position":[[1174,2]]},"189":{"position":[[1174,2]]},"231":{"position":[[1340,2],[1627,2],[1702,2]]},"233":{"position":[[1667,2],[1742,2]]},"905":{"position":[[417,2]]}}}],["12.72",{"_index":1469,"t":{"315":{"position":[[59,5]]},"321":{"position":[[849,6]]}}}],["120",{"_index":1107,"t":{"211":{"position":[[1415,3],[1489,3]]},"213":{"position":[[3035,3],[3109,3]]},"278":{"position":[[1437,3],[1511,3]]},"280":{"position":[[4031,3],[4105,3]]},"1098":{"position":[[666,3]]},"1688":{"position":[[349,6]]}}}],["1200",{"_index":1149,"t":{"215":{"position":[[383,4],[1500,5]]},"282":{"position":[[383,4],[1500,5]]}}}],["12000",{"_index":1005,"t":{"165":{"position":[[1403,6]]},"189":{"position":[[1403,6]]},"215":{"position":[[303,6]]},"282":{"position":[[303,6]]}}}],["1200000",{"_index":1173,"t":{"215":{"position":[[843,7],[892,7],[941,7],[990,7]]},"282":{"position":[[843,7],[892,7],[941,7],[990,7]]}}}],["123",{"_index":3663,"t":{"1908":{"position":[[811,4]]}}}],["12425",{"_index":1710,"t":{"440":{"position":[[363,6]]},"775":{"position":[[312,6]]}}}],["125",{"_index":1884,"t":{"502":{"position":[[2558,4]]}}}],["126000",{"_index":941,"t":{"165":{"position":[[440,6]]},"189":{"position":[[440,6]]}}}],["13",{"_index":1280,"t":{"231":{"position":[[2135,2],[2498,2]]},"233":{"position":[[2047,2]]}}}],["13.673",{"_index":1057,"t":{"201":{"position":[[957,7]]},"213":{"position":[[1248,7]]},"268":{"position":[[957,7]]},"280":{"position":[[1464,7]]},"471":{"position":[[696,7]]},"541":{"position":[[143,7]]},"1113":{"position":[[143,7]]},"1353":{"position":[[143,7]]},"1360":{"position":[[143,7]]},"1383":{"position":[[143,7]]}}}],["130000",{"_index":969,"t":{"165":{"position":[[898,6]]},"189":{"position":[[898,6]]}}}],["1300000",{"_index":1182,"t":{"215":{"position":[[1039,7],[1333,7],[1382,7]]},"282":{"position":[[1039,7],[1333,7],[1382,7]]}}}],["131",{"_index":3239,"t":{"1678":{"position":[[50,6]]},"1686":{"position":[[769,6]]}}}],["13182",{"_index":1709,"t":{"440":{"position":[[356,6]]},"775":{"position":[[305,6]]}}}],["1322d2b",{"_index":2589,"t":{"1542":{"position":[[63,9]]}}}],["133",{"_index":3283,"t":{"1684":{"position":[[372,6]]}}}],["13454",{"_index":1723,"t":{"440":{"position":[[523,6]]},"469":{"position":[[383,6]]},"473":{"position":[[481,6]]}}}],["13500",{"_index":1146,"t":{"215":{"position":[[278,6]]},"282":{"position":[[278,6]]}}}],["1350000",{"_index":1187,"t":{"215":{"position":[[1088,7],[1284,7]]},"282":{"position":[[1088,7],[1284,7]]}}}],["136",{"_index":3297,"t":{"1686":{"position":[[298,6]]}}}],["137750",{"_index":1525,"t":{"321":{"position":[[97,6],[113,6]]}}}],["13845",{"_index":1708,"t":{"440":{"position":[[348,7]]},"775":{"position":[[297,7]]}}}],["13bac91",{"_index":2488,"t":{"1510":{"position":[[109,9]]}}}],["14",{"_index":2298,"t":{"1248":{"position":[[438,2],[521,2],[609,2],[700,2],[789,2]]},"1703":{"position":[[86,5]]}}}],["14.28,102781.8",{"_index":1292,"t":{"236":{"position":[[141,14]]}}}],["14.35",{"_index":1501,"t":{"315":{"position":[[377,5]]},"321":{"position":[[1207,5]]}}}],["14.5.1",{"_index":2492,"t":{"1510":{"position":[[171,6]]}}}],["140",{"_index":3120,"t":{"1667":{"position":[[123,6]]}}}],["14000",{"_index":989,"t":{"165":{"position":[[1139,6],[1469,6],[1601,6]]},"189":{"position":[[1139,6],[1469,6],[1601,6]]}}}],["1400000",{"_index":1192,"t":{"215":{"position":[[1137,7],[1186,7],[1235,7],[1626,7],[1673,7],[1720,7],[1767,7],[1814,7]]},"282":{"position":[[1137,7],[1186,7],[1235,7],[1626,7],[1673,7],[1720,7],[1767,7],[1814,7]]}}}],["140c448",{"_index":3130,"t":{"1669":{"position":[[166,9]]}}}],["141",{"_index":3183,"t":{"1673":{"position":[[490,6]]}}}],["14500",{"_index":1145,"t":{"215":{"position":[[253,6]]},"282":{"position":[[253,6]]}}}],["145579",{"_index":1526,"t":{"321":{"position":[[129,6]]}}}],["145deab",{"_index":2394,"t":{"1483":{"position":[[126,9]]}}}],["146",{"_index":3173,"t":{"1673":{"position":[[66,6]]}}}],["14640",{"_index":1722,"t":{"440":{"position":[[516,6]]},"469":{"position":[[376,6]]},"473":{"position":[[474,6]]}}}],["147",{"_index":3142,"t":{"1669":{"position":[[524,6]]}}}],["14c1793",{"_index":2729,"t":{"1587":{"position":[[408,9]]}}}],["15",{"_index":1466,"t":{"313":{"position":[[44,2]]},"493":{"position":[[732,2]]},"740":{"position":[[491,2],[839,2]]},"1279":{"position":[[564,2]]},"1710":{"position":[[23,5]]}}}],["15.947",{"_index":1058,"t":{"201":{"position":[[965,7]]},"213":{"position":[[1256,7]]},"268":{"position":[[965,7]]},"280":{"position":[[1472,7]]},"471":{"position":[[704,7]]},"541":{"position":[[151,7]]},"1113":{"position":[[151,7]]},"1353":{"position":[[151,7]]},"1360":{"position":[[151,7]]},"1383":{"position":[[151,7]]}}}],["150",{"_index":1614,"t":{"365":{"position":[[443,3],[449,3],[587,3],[593,3]]},"506":{"position":[[534,4],[598,4],[654,4],[721,4]]},"1186":{"position":[[443,3],[449,3],[587,3],[593,3]]},"1671":{"position":[[191,6]]}}}],["1500",{"_index":860,"t":{"153":{"position":[[560,5],[834,4]]},"161":{"position":[[1182,5],[1231,4],[2104,4],[2198,5]]},"163":{"position":[[871,5],[1145,4]]},"177":{"position":[[560,5],[834,4]]},"185":{"position":[[1182,5],[1231,4],[2104,4],[2198,5]]},"187":{"position":[[871,5],[1145,4]]}}}],["15000",{"_index":978,"t":{"165":{"position":[[1007,6],[1205,6],[1337,6]]},"189":{"position":[[1007,6],[1205,6],[1337,6]]},"215":{"position":[[1807,6]]},"282":{"position":[[1807,6]]}}}],["1500000",{"_index":1205,"t":{"215":{"position":[[1578,7]]},"282":{"position":[[1578,7]]}}}],["150a41a",{"_index":2652,"t":{"1546":{"position":[[81,9]]}}}],["152",{"_index":3118,"t":{"1667":{"position":[[65,6]]}}}],["153",{"_index":3190,"t":{"1673":{"position":[[661,6]]}}}],["153335",{"_index":1527,"t":{"321":{"position":[[145,6]]}}}],["153f7c4",{"_index":2893,"t":{"1618":{"position":[[159,9]]}}}],["155",{"_index":2113,"t":{"670":{"position":[[379,3],[453,3]]},"1669":{"position":[[963,6]]}}}],["155.6",{"_index":1500,"t":{"315":{"position":[[371,5]]},"321":{"position":[[1200,6]]}}}],["15500",{"_index":1143,"t":{"215":{"position":[[228,6]]},"282":{"position":[[228,6]]}}}],["15546",{"_index":1721,"t":{"440":{"position":[[509,6]]},"469":{"position":[[369,6]]},"473":{"position":[[467,6]]}}}],["157",{"_index":3204,"t":{"1675":{"position":[[93,6]]}}}],["158b90d",{"_index":2758,"t":{"1592":{"position":[[677,9]]}}}],["159",{"_index":3216,"t":{"1675":{"position":[[372,6]]}}}],["16",{"_index":3398,"t":{"1705":{"position":[[306,5]]}}}],["16.66,115784.9",{"_index":1293,"t":{"236":{"position":[[156,14]]}}}],["16.94",{"_index":1514,"t":{"315":{"position":[[521,5]]},"321":{"position":[[1369,5]]}}}],["160",{"_index":3210,"t":{"1675":{"position":[[235,6]]}}}],["16000",{"_index":984,"t":{"165":{"position":[[1073,6],[1535,6]]},"189":{"position":[[1073,6],[1535,6]]},"215":{"position":[[203,6]]},"282":{"position":[[203,6]]}}}],["160524",{"_index":1398,"t":{"280":{"position":[[21,6]]}}}],["16081",{"_index":1720,"t":{"440":{"position":[[502,6]]},"469":{"position":[[362,6]]},"473":{"position":[[460,6]]}}}],["161",{"_index":3144,"t":{"1669":{"position":[[567,6]]}}}],["161022",{"_index":1528,"t":{"321":{"position":[[161,6]]}}}],["164",{"_index":3146,"t":{"1669":{"position":[[697,6]]}}}],["16447",{"_index":1719,"t":{"440":{"position":[[494,7]]},"469":{"position":[[354,7]]},"473":{"position":[[452,7]]}}}],["165",{"_index":3214,"t":{"1675":{"position":[[326,6]]}}}],["16500",{"_index":1139,"t":{"215":{"position":[[178,6]]},"282":{"position":[[178,6]]}}}],["166",{"_index":3126,"t":{"1669":{"position":[[98,6]]}}}],["167",{"_index":3134,"t":{"1669":{"position":[[270,6]]}}}],["168644",{"_index":1529,"t":{"321":{"position":[[177,6]]}}}],["16b9ccc",{"_index":2991,"t":{"1653":{"position":[[158,9]]}}}],["16d54f1",{"_index":3359,"t":{"1692":{"position":[[305,9]]}}}],["17.1",{"_index":1941,"t":{"515":{"position":[[123,5]]}}}],["17.8,119883.6",{"_index":1294,"t":{"236":{"position":[[171,13]]}}}],["170",{"_index":3132,"t":{"1669":{"position":[[200,6]]}}}],["17000",{"_index":861,"t":{"153":{"position":[[590,6],[619,6]]},"161":{"position":[[2244,5],[2286,5],[2358,5],[2369,5]]},"163":{"position":[[901,6],[930,6]]},"177":{"position":[[590,6],[619,6]]},"185":{"position":[[2244,5],[2286,5],[2358,5],[2369,5]]},"187":{"position":[[901,6],[930,6]]},"189":{"position":[[875,6],[1271,6]]},"215":{"position":[[1666,6],[1713,6],[1760,6]]},"282":{"position":[[1666,6],[1713,6],[1760,6]]}}}],["17000,6",{"_index":956,"t":{"165":{"position":[[684,7]]},"189":{"position":[[684,7]]}}}],["170000",{"_index":975,"t":{"165":{"position":[[964,6]]},"189":{"position":[[964,6]]}}}],["171",{"_index":3234,"t":{"1675":{"position":[[977,6]]}}}],["172",{"_index":3154,"t":{"1669":{"position":[[902,6]]}}}],["17200",{"_index":1017,"t":{"189":{"position":[[941,6]]}}}],["1725d53",{"_index":2496,"t":{"1512":{"position":[[65,9]]}}}],["173",{"_index":3220,"t":{"1675":{"position":[[514,6]]}}}],["174",{"_index":3237,"t":{"1675":{"position":[[1035,6]]}}}],["175",{"_index":3222,"t":{"1675":{"position":[[614,6]]}}}],["17500,9",{"_index":957,"t":{"165":{"position":[[692,7]]},"189":{"position":[[692,7]]}}}],["1756aac",{"_index":2849,"t":{"1596":{"position":[[910,9]]}}}],["176",{"_index":3218,"t":{"1675":{"position":[[417,6]]}}}],["179",{"_index":3212,"t":{"1675":{"position":[[279,6]]}}}],["18",{"_index":2726,"t":{"1587":{"position":[[384,2]]}}}],["18.223",{"_index":1059,"t":{"201":{"position":[[973,7]]},"213":{"position":[[1264,7]]},"268":{"position":[[973,7]]},"280":{"position":[[1480,7]]},"471":{"position":[[712,7]]},"541":{"position":[[159,7]]},"1113":{"position":[[159,7]]},"1353":{"position":[[159,7]]},"1360":{"position":[[159,7]]},"1383":{"position":[[159,7]]}}}],["18.3",{"_index":1943,"t":{"515":{"position":[[142,5]]}}}],["180",{"_index":3206,"t":{"1675":{"position":[[141,6]]}}}],["180.8",{"_index":1513,"t":{"315":{"position":[[515,5]]},"321":{"position":[[1362,6]]}}}],["18000",{"_index":966,"t":{"165":{"position":[[875,6],[1271,6]]},"215":{"position":[[1619,6],[1698,6],[1745,6]]},"282":{"position":[[1619,6],[1698,6],[1745,6]]}}}],["181",{"_index":3197,"t":{"1673":{"position":[[743,6]]}}}],["182",{"_index":3208,"t":{"1675":{"position":[[188,6]]}}}],["18235d5",{"_index":2682,"t":{"1572":{"position":[[105,9]]},"1576":{"position":[[116,9]]}}}],["18500",{"_index":862,"t":{"153":{"position":[[648,6]]},"161":{"position":[[2254,5],[2390,6]]},"163":{"position":[[959,6]]},"177":{"position":[[648,6]]},"185":{"position":[[2254,5],[2390,6]]},"187":{"position":[[959,6]]}}}],["185f624",{"_index":2819,"t":{"1596":{"position":[[317,9]]}}}],["186",{"_index":3188,"t":{"1673":{"position":[[614,6]]}}}],["187",{"_index":3175,"t":{"1673":{"position":[[152,6]]}}}],["188",{"_index":3149,"t":{"1669":{"position":[[806,6]]}}}],["1882",{"_index":1871,"t":{"502":{"position":[[1027,4]]}}}],["189",{"_index":3185,"t":{"1673":{"position":[[527,6]]}}}],["19.04,128788",{"_index":1295,"t":{"236":{"position":[[185,12]]}}}],["19.3",{"_index":1255,"t":{"225":{"position":[[1756,4]]},"233":{"position":[[1049,4]]}}}],["19.4",{"_index":1944,"t":{"515":{"position":[[164,5]]}}}],["190",{"_index":3136,"t":{"1669":{"position":[[378,6]]}}}],["19000",{"_index":973,"t":{"165":{"position":[[941,6]]}}}],["191",{"_index":3177,"t":{"1673":{"position":[[225,6]]}}}],["193",{"_index":3224,"t":{"1675":{"position":[[663,6]]}}}],["194",{"_index":3011,"t":{"1656":{"position":[[79,6]]}}}],["195",{"_index":3140,"t":{"1669":{"position":[[472,6]]}}}],["196",{"_index":3095,"t":{"1662":{"position":[[1436,6]]}}}],["197",{"_index":3129,"t":{"1669":{"position":[[159,6]]}}}],["198",{"_index":3181,"t":{"1673":{"position":[[439,6]]}}}],["199",{"_index":3158,"t":{"1669":{"position":[[1028,6]]}}}],["1994",{"_index":2211,"t":{"986":{"position":[[141,4]]}}}],["1995",{"_index":870,"t":{"153":{"position":[[943,4]]},"163":{"position":[[1254,4]]},"177":{"position":[[943,4]]},"187":{"position":[[1254,4]]}}}],["1
  • list",{"_index":3693,"t":{"1914":{"position":[[779,14],[909,14]]}}}],["1stat",{"_index":3687,"t":{"1914":{"position":[[632,23]]}}}],["1_stage_chart",{"_index":1835,"t":{"493":{"position":[[303,13]]},"730":{"position":[[166,13]]},"735":{"position":[[168,13]]},"740":{"position":[[308,13]]},"754":{"position":[[168,13]]},"1279":{"position":[[135,13]]},"1312":{"position":[[134,13]]}}}],["1_stage_inlet",{"_index":1831,"t":{"493":{"position":[[119,13],[349,13]]},"740":{"position":[[124,13],[354,13]]},"1279":{"position":[[181,13]]},"1312":{"position":[[180,13]]},"1320":{"position":[[119,13]]}}}],["1a1e2a2",{"_index":2372,"t":{"1474":{"position":[[336,9]]}}}],["1ab5105",{"_index":2765,"t":{"1592":{"position":[[910,9]]}}}],["1b2ee32",{"_index":2756,"t":{"1592":{"position":[[633,9]]}}}],["1bde68a",{"_index":3312,"t":{"1686":{"position":[[1079,9]]}}}],["1c390a6",{"_index":2635,"t":{"1544":{"position":[[526,9]]}}}],["1c6550d",{"_index":2593,"t":{"1542":{"position":[[153,9]]}}}],["1c7a4a1",{"_index":2580,"t":{"1540":{"position":[[395,9]]}}}],["1d",{"_index":1520,"t":{"317":{"position":[[442,2]]},"321":{"position":[[0,2]]}}}],["1da1999",{"_index":3389,"t":{"1703":{"position":[[92,9]]}}}],["1df541a",{"_index":2670,"t":{"1563":{"position":[[93,9]]}}}],["1e",{"_index":751,"t":{"133":{"position":[[675,2],[686,2]]}}}],["1e4acc",{"_index":2666,"t":{"1561":{"position":[[79,9]]}}}],["1e6",{"_index":747,"t":{"133":{"position":[[588,3],[609,4]]}}}],["1ee5bfd",{"_index":3414,"t":{"1705":{"position":[[1150,9],[1353,9]]}}}],["1f9e00b",{"_index":2655,"t":{"1551":{"position":[[42,9]]}}}],["1fe9dd0",{"_index":2954,"t":{"1645":{"position":[[22,9]]}}}],["1st",{"_index":905,"t":{"161":{"position":[[2746,3]]},"185":{"position":[[2746,3]]},"211":{"position":[[3202,3],[3223,3],[3709,3],[3730,3]]},"278":{"position":[[3229,3],[3250,3],[3844,3],[3865,3]]},"493":{"position":[[592,4]]},"740":{"position":[[699,4]]},"905":{"position":[[402,3]]},"1279":{"position":[[424,4]]},"1283":{"position":[[449,3],[753,3]]}}}],["1}{n",{"_index":2024,"t":{"567":{"position":[[1721,6]]}}}],["1}κ−1κ∗polytropic_effici",{"_index":2034,"t":{"567":{"position":[[2066,29]]}}}],["2",{"_index":286,"t":{"25":{"position":[[1586,2]]},"31":{"position":[[653,2]]},"58":{"position":[[942,1],[1057,1]]},"91":{"position":[[2130,2]]},"93":{"position":[[783,2]]},"107":{"position":[[1228,2],[1259,2],[1754,2],[1801,2],[2023,1]]},"117":{"position":[[192,1],[254,1]]},"211":{"position":[[2494,3]]},"213":{"position":[[3584,3]]},"217":{"position":[[502,1],[646,1]]},"231":{"position":[[2767,1],[2929,1]]},"233":{"position":[[2153,1],[2315,1]]},"278":{"position":[[2508,3]]},"280":{"position":[[4572,3]]},"323":{"position":[[215,1]]},"338":{"position":[[486,2],[551,2],[616,2],[662,2],[726,2],[784,2],[854,2],[894,2]]},"341":{"position":[[157,1]]},"365":{"position":[[503,1],[526,1]]},"369":{"position":[[351,2]]},"436":{"position":[[930,2]]},"485":{"position":[[472,2]]},"487":{"position":[[659,2]]},"489":{"position":[[84,2]]},"502":{"position":[[2374,1]]},"506":{"position":[[335,1],[405,1],[432,1],[456,1],[488,1],[496,1]]},"555":{"position":[[54,1],[138,1]]},"559":{"position":[[386,1],[448,1]]},"592":{"position":[[48,3]]},"594":{"position":[[195,1],[364,1]]},"629":{"position":[[1620,2]]},"635":{"position":[[653,2]]},"738":{"position":[[244,2]]},"866":{"position":[[97,1]]},"1181":{"position":[[228,3]]},"1186":{"position":[[503,1],[526,1]]},"1261":{"position":[[262,3],[311,3]]},"1275":{"position":[[929,2]]},"1318":{"position":[[239,2]]},"1403":{"position":[[35,1]]},"1435":{"position":[[196,1]]},"1483":{"position":[[94,1]]},"1662":{"position":[[487,1]]},"1713":{"position":[[1989,1],[2117,2]]},"1878":{"position":[[363,2]]},"1914":{"position":[[128,1],[591,1],[745,1],[861,2],[874,1]]}}}],["2.15",{"_index":1591,"t":{"351":{"position":[[343,4]]}}}],["2.156",{"_index":1494,"t":{"315":{"position":[[306,5]]},"321":{"position":[[1127,5]]}}}],["2.19",{"_index":842,"t":{"151":{"position":[[120,4],[228,4]]},"163":{"position":[[581,4]]},"175":{"position":[[120,4],[228,4]]},"187":{"position":[[581,4]]}}}],["2.2",{"_index":2279,"t":{"1224":{"position":[[95,3]]}}}],["2.20",{"_index":1027,"t":{"199":{"position":[[273,4]]},"213":{"position":[[420,4]]},"266":{"position":[[273,4]]},"280":{"position":[[636,4]]}}}],["2.293",{"_index":1472,"t":{"315":{"position":[[90,5]]},"321":{"position":[[884,5]]}}}],["2.352",{"_index":1052,"t":{"201":{"position":[[921,6]]},"213":{"position":[[1212,6]]},"268":{"position":[[921,6]]},"280":{"position":[[1428,6]]},"471":{"position":[[660,6]]},"541":{"position":[[107,6]]},"1113":{"position":[[107,6]]},"1353":{"position":[[107,6]]},"1360":{"position":[[107,6]]},"1383":{"position":[[107,6]]}}}],["2.38,37766.13",{"_index":1285,"t":{"236":{"position":[[43,13]]}}}],["2.415619",{"_index":1782,"t":{"469":{"position":[[562,8]]},"525":{"position":[[157,8]]},"644":{"position":[[157,8]]}}}],["2.416",{"_index":1256,"t":{"227":{"position":[[33,6],[128,5]]},"233":{"position":[[1142,5]]}}}],["2.44965511776504",{"_index":1244,"t":{"225":{"position":[[1133,16]]},"233":{"position":[[426,16]]}}}],["2.5",{"_index":2165,"t":{"860":{"position":[[142,3]]},"948":{"position":[[20,3],[139,3]]}}}],["2.5.16",{"_index":2842,"t":{"1596":{"position":[[789,6]]}}}],["2.5.21",{"_index":2689,"t":{"1576":{"position":[[48,6]]}}}],["2.5.9",{"_index":2909,"t":{"1620":{"position":[[225,5]]},"1872":{"position":[[26,6]]}}}],["2.611471",{"_index":1785,"t":{"469":{"position":[[615,8]]},"525":{"position":[[210,8]]},"644":{"position":[[210,8]]}}}],["2.7085",{"_index":1597,"t":{"351":{"position":[[558,6]]}}}],["2.73",{"_index":1594,"t":{"351":{"position":[[462,4]]}}}],["20",{"_index":1106,"t":{"211":{"position":[[1392,2],[1466,2],[4531,2]]},"213":{"position":[[3012,2],[3086,2],[4824,2]]},"215":{"position":[[379,3],[453,3]]},"278":{"position":[[1414,2],[1488,2],[4936,2],[5016,2],[5101,2],[5189,2]]},"280":{"position":[[4008,2],[4082,2],[6219,2],[6299,2],[6384,2],[6472,2]]},"282":{"position":[[379,3],[453,3]]},"313":{"position":[[55,2]]},"493":{"position":[[336,2]]},"730":{"position":[[145,2]]},"735":{"position":[[147,2]]},"740":{"position":[[341,2]]},"754":{"position":[[147,2]]},"909":{"position":[[71,2]]},"1076":{"position":[[84,2]]},"1279":{"position":[[168,2]]},"1287":{"position":[[72,2]]},"1312":{"position":[[167,2]]},"1596":{"position":[[249,2]]},"1906":{"position":[[508,2]]}}}],["20.0",{"_index":940,"t":{"165":{"position":[[434,5]]},"189":{"position":[[434,5]]}}}],["20.496",{"_index":1060,"t":{"201":{"position":[[981,7]]},"213":{"position":[[1272,7]]},"268":{"position":[[981,7]]},"280":{"position":[[1488,7]]},"471":{"position":[[720,7]]},"541":{"position":[[167,7]]},"1113":{"position":[[167,7]]},"1353":{"position":[[167,7]]},"1360":{"position":[[167,7]]},"1383":{"position":[[167,7]]}}}],["200",{"_index":807,"t":{"143":{"position":[[763,3]]},"161":{"position":[[807,3],[1629,3],[3677,3]]},"163":{"position":[[1855,3],[2203,3],[2791,3]]},"167":{"position":[[763,3]]},"185":{"position":[[807,3],[1629,3],[3677,3]]},"187":{"position":[[1855,3],[2203,3],[2791,3]]},"191":{"position":[[943,3]]},"211":{"position":[[2462,5],[2468,4],[2473,4],[2478,4],[2582,3],[2666,3],[2753,3],[3147,3],[4554,3]]},"213":{"position":[[3552,5],[3558,4],[3563,4],[3568,4],[3672,3],[3756,3],[3843,3],[4035,3],[4847,3]]},"231":{"position":[[1347,3],[1650,3],[1725,3]]},"233":{"position":[[1690,3],[1765,3]]},"258":{"position":[[943,3]]},"278":{"position":[[2476,5],[2482,4],[2487,4],[2492,4],[2596,3],[2680,3],[2767,3],[3174,3],[4959,3],[5039,3],[5124,3],[5212,3]]},"280":{"position":[[4540,5],[4546,4],[4551,4],[4556,4],[4660,3],[4744,3],[4831,3],[5036,3],[6242,3],[6322,3],[6407,3],[6495,3]]},"377":{"position":[[138,3]]},"385":{"position":[[292,3],[365,3]]},"798":{"position":[[20,3]]},"1186":{"position":[[1021,3],[1094,3]]},"1263":{"position":[[290,3],[363,3]]}}}],["2000",{"_index":1086,"t":{"203":{"position":[[717,4]]},"213":{"position":[[2203,4]]},"215":{"position":[[711,5]]},"270":{"position":[[717,4]]},"280":{"position":[[2794,4]]},"282":{"position":[[711,5]]},"909":{"position":[[34,4]]},"986":{"position":[[162,4]]},"1287":{"position":[[34,4]]}}}],["20000",{"_index":1172,"t":{"215":{"position":[[820,6],[869,6],[918,6],[1212,6],[1261,6],[1310,6],[1359,6],[1571,6],[1651,6]]},"282":{"position":[[820,6],[869,6],[918,6],[1212,6],[1261,6],[1310,6],[1359,6],[1571,6],[1651,6]]}}}],["200000",{"_index":1213,"t":{"215":{"position":[[1752,7],[1799,7]]},"282":{"position":[[1752,7],[1799,7]]}}}],["2000000",{"_index":1011,"t":{"165":{"position":[[1526,8]]},"189":{"position":[[1526,8]]},"215":{"position":[[1431,7],[1480,7],[1529,7]]},"282":{"position":[[1431,7],[1480,7],[1529,7]]},"321":{"position":[[120,8]]}}}],["200000000,4.1",{"_index":916,"t":{"165":{"position":[[74,13]]},"189":{"position":[[74,13]]}}}],["2001",{"_index":1584,"t":{"345":{"position":[[164,4]]},"819":{"position":[[18,4]]},"1024":{"position":[[80,4]]}}}],["2005",{"_index":871,"t":{"153":{"position":[[968,4]]},"161":{"position":[[2761,5]]},"163":{"position":[[1279,4]]},"177":{"position":[[968,4]]},"185":{"position":[[2761,5]]},"187":{"position":[[1279,4]]},"345":{"position":[[190,4]]},"819":{"position":[[74,4]]},"1024":{"position":[[106,4]]}}}],["2008",{"_index":1934,"t":{"513":{"position":[[1058,5]]}}}],["2010",{"_index":1978,"t":{"555":{"position":[[105,4]]}}}],["2019",{"_index":2286,"t":{"1248":{"position":[[58,4]]}}}],["202",{"_index":3194,"t":{"1673":{"position":[[711,6]]}}}],["2020",{"_index":570,"t":{"91":{"position":[[2028,4]]},"165":{"position":[[839,4]]},"189":{"position":[[839,4]]},"203":{"position":[[674,4],[749,4]]},"211":{"position":[[3214,4],[3721,4]]},"213":{"position":[[2160,4],[2235,4]]},"270":{"position":[[674,4],[749,4]]},"278":{"position":[[3241,4],[3856,4]]},"280":{"position":[[2751,4],[2826,4]]},"403":{"position":[[380,4],[457,4]]},"555":{"position":[[140,4]]},"670":{"position":[[111,4]]},"886":{"position":[[274,4]]},"909":{"position":[[121,4]]},"1283":{"position":[[263,4],[293,4],[453,5],[697,4],[757,5]]},"1287":{"position":[[124,4]]}}}],["2021",{"_index":970,"t":{"165":{"position":[[905,4]]},"189":{"position":[[905,4]]}}}],["2022",{"_index":976,"t":{"165":{"position":[[971,4]]},"189":{"position":[[971,4]]},"886":{"position":[[412,4]]}}}],["2023",{"_index":981,"t":{"165":{"position":[[1037,4]]},"189":{"position":[[1037,4]]}}}],["2024",{"_index":987,"t":{"165":{"position":[[1103,4],[1169,4]]},"189":{"position":[[1103,4],[1169,4]]},"280":{"position":[[221,5]]}}}],["2026",{"_index":997,"t":{"165":{"position":[[1235,4]]},"189":{"position":[[1235,4]]}}}],["2027",{"_index":1000,"t":{"165":{"position":[[1301,4]]},"189":{"position":[[1301,4]]}}}],["2028",{"_index":1004,"t":{"165":{"position":[[1367,4]]},"189":{"position":[[1367,4]]}}}],["2029",{"_index":1007,"t":{"165":{"position":[[1433,4]]},"189":{"position":[[1433,4]]}}}],["203",{"_index":3038,"t":{"1660":{"position":[[102,6]]}}}],["2030",{"_index":572,"t":{"91":{"position":[[2058,4]]},"165":{"position":[[1499,4]]},"189":{"position":[[1499,4]]},"203":{"position":[[698,4],[774,4],[1224,5]]},"211":{"position":[[3238,5],[3745,5]]},"213":{"position":[[2184,4],[2260,4]]},"270":{"position":[[698,4],[774,4],[1591,5]]},"278":{"position":[[3265,5],[3880,5]]},"280":{"position":[[2775,4],[2851,4]]},"403":{"position":[[410,4],[484,4]]}}}],["2031",{"_index":1013,"t":{"165":{"position":[[1565,4]]},"189":{"position":[[1565,4]]}}}],["204",{"_index":3102,"t":{"1664":{"position":[[155,6]]}}}],["2040",{"_index":2191,"t":{"909":{"position":[[47,5]]},"1287":{"position":[[47,5]]}}}],["205",{"_index":3087,"t":{"1662":{"position":[[1163,6]]}}}],["2050",{"_index":1169,"t":{"215":{"position":[[690,5]]},"282":{"position":[[690,5]]}}}],["2079",{"_index":2178,"t":{"905":{"position":[[250,4],[411,5],[680,4]]}}}],["2080",{"_index":2177,"t":{"905":{"position":[[202,4],[406,4]]}}}],["209",{"_index":3052,"t":{"1662":{"position":[[306,6]]}}}],["21.1",{"_index":1946,"t":{"515":{"position":[[184,5]]}}}],["21.42,141791.2",{"_index":1296,"t":{"236":{"position":[[198,14]]}}}],["21.4201,166554.2",{"_index":1297,"t":{"236":{"position":[[213,16]]}}}],["2100",{"_index":1167,"t":{"215":{"position":[[669,5]]},"282":{"position":[[669,5]]}}}],["21000",{"_index":1178,"t":{"215":{"position":[[967,6],[1326,6],[1522,6]]},"282":{"position":[[967,6],[1326,6],[1522,6]]}}}],["210000",{"_index":980,"t":{"165":{"position":[[1030,6]]},"189":{"position":[[1030,6]]}}}],["210000000,4.1",{"_index":917,"t":{"165":{"position":[[88,13]]},"189":{"position":[[88,13]]}}}],["211",{"_index":3079,"t":{"1662":{"position":[[987,6]]}}}],["212",{"_index":3081,"t":{"1662":{"position":[[1024,6]]}}}],["212b01f",{"_index":2484,"t":{"1508":{"position":[[95,9]]}}}],["213",{"_index":3026,"t":{"1658":{"position":[[173,6]]}}}],["214",{"_index":3022,"t":{"1658":{"position":[[133,6]]}}}],["215",{"_index":3071,"t":{"1662":{"position":[[784,6]]}}}],["2150",{"_index":1165,"t":{"215":{"position":[[648,5]]},"282":{"position":[[648,5]]}}}],["216",{"_index":3032,"t":{"1658":{"position":[[295,6]]}}}],["219",{"_index":3047,"t":{"1662":{"position":[[180,6]]}}}],["21deeb7",{"_index":3053,"t":{"1662":{"position":[[313,9]]}}}],["22.46",{"_index":1487,"t":{"315":{"position":[[235,5],[425,5],[569,5]]},"321":{"position":[[1047,5],[1261,5],[1423,5]]}}}],["22.767",{"_index":1061,"t":{"201":{"position":[[989,7]]},"213":{"position":[[1280,7]]},"268":{"position":[[989,7]]},"280":{"position":[[1496,7]]},"471":{"position":[[728,7]]},"541":{"position":[[175,7]]},"1113":{"position":[[175,7]]},"1353":{"position":[[175,7]]},"1360":{"position":[[175,7]]},"1383":{"position":[[175,7]]}}}],["220",{"_index":3055,"t":{"1662":{"position":[[374,6]]}}}],["2200",{"_index":1162,"t":{"215":{"position":[[627,5]]},"282":{"position":[[627,5]]}}}],["22000",{"_index":1180,"t":{"215":{"position":[[1016,6],[1277,6],[1375,6],[1604,6]]},"282":{"position":[[1016,6],[1277,6],[1375,6],[1604,6]]}}}],["220000.0",{"_index":1357,"t":{"254":{"position":[[115,8]]}}}],["2200000",{"_index":968,"t":{"165":{"position":[[889,8],[955,8],[1021,8]]},"189":{"position":[[889,8],[955,8],[1021,8]]}}}],["220000000,4.4",{"_index":918,"t":{"165":{"position":[[102,13]]},"189":{"position":[[102,13]]}}}],["221",{"_index":3061,"t":{"1662":{"position":[[494,6]]}}}],["22100",{"_index":1200,"t":{"215":{"position":[[1408,6],[1457,6]]},"282":{"position":[[1408,6],[1457,6]]}}}],["222",{"_index":3067,"t":{"1662":{"position":[[614,6]]}}}],["223",{"_index":3058,"t":{"1662":{"position":[[437,6]]}}}],["224",{"_index":3099,"t":{"1664":{"position":[[85,6]]}}}],["2250",{"_index":1159,"t":{"215":{"position":[[606,5]]},"282":{"position":[[606,5]]}}}],["2279ef4",{"_index":3143,"t":{"1669":{"position":[[531,9]]}}}],["229",{"_index":3074,"t":{"1662":{"position":[[846,6]]}}}],["22ef8f7",{"_index":2968,"t":{"1649":{"position":[[24,9]]}}}],["230",{"_index":3076,"t":{"1662":{"position":[[928,6]]}}}],["2300",{"_index":1156,"t":{"215":{"position":[[585,5]]},"282":{"position":[[585,5]]}}}],["23000",{"_index":1184,"t":{"215":{"position":[[1065,6],[1228,6],[1424,6],[1473,6]]},"282":{"position":[[1065,6],[1228,6],[1424,6],[1473,6]]}}}],["2300000",{"_index":985,"t":{"165":{"position":[[1087,8],[1153,8]]},"189":{"position":[[1087,8],[1153,8]]}}}],["230000000,4.8",{"_index":919,"t":{"165":{"position":[[116,13]]},"189":{"position":[[116,13]]}}}],["231.6",{"_index":1486,"t":{"315":{"position":[[229,5],[419,5],[563,5]]},"321":{"position":[[1040,6],[1254,6],[1416,6]]}}}],["232",{"_index":3096,"t":{"1664":{"position":[[37,6]]}}}],["2322",{"_index":1875,"t":{"502":{"position":[[1411,4]]}}}],["232f83b",{"_index":3012,"t":{"1656":{"position":[[86,9]]}}}],["233",{"_index":3069,"t":{"1662":{"position":[[717,6]]}}}],["2350",{"_index":1154,"t":{"215":{"position":[[564,5]]},"282":{"position":[[564,5]]}}}],["236",{"_index":3015,"t":{"1656":{"position":[[175,6]]}}}],["237",{"_index":3034,"t":{"1658":{"position":[[362,6]]}}}],["238",{"_index":3020,"t":{"1658":{"position":[[83,6]]}}}],["239",{"_index":3036,"t":{"1660":{"position":[[42,6]]}}}],["23:59:59",{"_index":2184,"t":{"905":{"position":[[423,10]]}}}],["24",{"_index":3411,"t":{"1705":{"position":[[945,5]]}}}],["24.6",{"_index":1948,"t":{"515":{"position":[[210,5]]}}}],["24000",{"_index":1189,"t":{"215":{"position":[[1114,6],[1179,6]]},"282":{"position":[[1114,6],[1179,6]]}}}],["240000",{"_index":986,"t":{"165":{"position":[[1096,6]]},"189":{"position":[[1096,6]]}}}],["2400000",{"_index":995,"t":{"165":{"position":[[1219,8],[1285,8],[1351,8],[1417,8],[1483,8],[1549,8],[1615,8]]},"189":{"position":[[1219,8],[1285,8],[1351,8],[1417,8],[1483,8],[1549,8],[1615,8]]}}}],["240000000,5.1",{"_index":920,"t":{"165":{"position":[[130,13]]},"189":{"position":[[130,13]]}}}],["241",{"_index":2791,"t":{"1594":{"position":[[320,6]]}}}],["2415534",{"_index":3249,"t":{"1682":{"position":[[390,9]]}}}],["242",{"_index":3013,"t":{"1656":{"position":[[123,6]]}}}],["243",{"_index":3029,"t":{"1658":{"position":[[235,6]]}}}],["244",{"_index":3111,"t":{"1664":{"position":[[431,6]]}}}],["245",{"_index":3114,"t":{"1664":{"position":[[525,6]]}}}],["2455e34",{"_index":3184,"t":{"1673":{"position":[[497,9]]}}}],["246",{"_index":3109,"t":{"1664":{"position":[[367,6]]}}}],["247",{"_index":3085,"t":{"1662":{"position":[[1097,6]]}}}],["248dabb",{"_index":3326,"t":{"1688":{"position":[[19,9]]}}}],["24c27bb",{"_index":3141,"t":{"1669":{"position":[[479,9]]}}}],["25",{"_index":1883,"t":{"502":{"position":[[2527,2],[2600,2]]}}}],["250",{"_index":1153,"t":{"215":{"position":[[559,4]]},"282":{"position":[[559,4]]},"1248":{"position":[[461,3],[544,3],[632,3],[723,3],[812,3]]},"1664":{"position":[[574,6]]}}}],["2500",{"_index":1177,"t":{"215":{"position":[[961,5]]},"282":{"position":[[961,5]]}}}],["25000",{"_index":1191,"t":{"215":{"position":[[1130,6],[1163,6],[1506,6],[1555,6]]},"282":{"position":[[1130,6],[1163,6],[1506,6],[1555,6]]},"511":{"position":[[166,5],[382,5]]}}}],["250000",{"_index":943,"t":{"165":{"position":[[453,6]]},"189":{"position":[[453,6]]}}}],["2500000",{"_index":1009,"t":{"165":{"position":[[1460,8]]},"189":{"position":[[1460,8]]}}}],["250000000,5.4",{"_index":921,"t":{"165":{"position":[[144,13]]},"189":{"position":[[144,13]]}}}],["2507bb9",{"_index":3229,"t":{"1675":{"position":[[842,9]]}}}],["250928c",{"_index":3366,"t":{"1695":{"position":[[115,9]]}}}],["251",{"_index":2977,"t":{"1651":{"position":[[386,6]]}}}],["252",{"_index":2979,"t":{"1651":{"position":[[474,6]]}}}],["253",{"_index":3105,"t":{"1664":{"position":[[205,6]]}}}],["254",{"_index":3018,"t":{"1658":{"position":[[33,6]]}}}],["255",{"_index":3091,"t":{"1662":{"position":[[1251,6]]}}}],["256",{"_index":3107,"t":{"1664":{"position":[[313,6]]}}}],["257",{"_index":3003,"t":{"1653":{"position":[[524,6]]}}}],["258",{"_index":3089,"t":{"1662":{"position":[[1217,6]]}}}],["259",{"_index":3083,"t":{"1662":{"position":[[1061,6]]}}}],["26",{"_index":1473,"t":{"315":{"position":[[105,2],[130,2],[250,2],[274,2]]},"321":{"position":[[900,3],[928,3],[1063,3],[1090,3]]}}}],["26.21",{"_index":1471,"t":{"315":{"position":[[84,5]]},"321":{"position":[[877,6]]}}}],["260",{"_index":2985,"t":{"1653":{"position":[[55,6]]}}}],["26000",{"_index":1186,"t":{"215":{"position":[[1081,6]]},"282":{"position":[[1081,6]]}}}],["2600000",{"_index":1465,"t":{"313":{"position":[[36,7]]}}}],["260000000,5.8",{"_index":922,"t":{"165":{"position":[[158,13]]},"189":{"position":[[158,13]]}}}],["261",{"_index":2965,"t":{"1647":{"position":[[240,6]]}}}],["261749f",{"_index":2861,"t":{"1605":{"position":[[48,9]]}}}],["263",{"_index":2963,"t":{"1647":{"position":[[165,6]]}}}],["264",{"_index":2967,"t":{"1649":{"position":[[17,6]]}}}],["267",{"_index":3005,"t":{"1653":{"position":[[578,6]]}}}],["269",{"_index":2961,"t":{"1647":{"position":[[95,6]]}}}],["26d4aba",{"_index":2520,"t":{"1526":{"position":[[151,9]]}}}],["27",{"_index":3413,"t":{"1705":{"position":[[1144,5]]}}}],["270000000,6.1",{"_index":923,"t":{"165":{"position":[[172,13]]},"189":{"position":[[172,13]]}}}],["271",{"_index":2997,"t":{"1653":{"position":[[349,6]]}}}],["272",{"_index":2959,"t":{"1645":{"position":[[150,6]]}}}],["272f0d7",{"_index":3381,"t":{"1701":{"position":[[93,9]]}}}],["276",{"_index":2975,"t":{"1651":{"position":[[305,6]]}}}],["277",{"_index":2973,"t":{"1651":{"position":[[150,6]]}}}],["279",{"_index":2955,"t":{"1645":{"position":[[75,6]]}}}],["28.56,205563.6",{"_index":1298,"t":{"236":{"position":[[230,14]]}}}],["28000",{"_index":1181,"t":{"215":{"position":[[1032,6]]},"282":{"position":[[1032,6]]}}}],["280000",{"_index":991,"t":{"165":{"position":[[1162,6]]},"189":{"position":[[1162,6]]}}}],["280000.0",{"_index":1359,"t":{"254":{"position":[[131,8]]}}}],["280000000,6.4",{"_index":924,"t":{"165":{"position":[[186,13]]},"189":{"position":[[186,13]]}}}],["282",{"_index":2949,"t":{"1643":{"position":[[26,6]]},"1653":{"position":[[392,6]]}}}],["284",{"_index":2987,"t":{"1653":{"position":[[103,6]]}}}],["285",{"_index":2900,"t":{"1620":{"position":[[42,6]]}}}],["288",{"_index":2981,"t":{"1651":{"position":[[591,6]]}}}],["28885f2",{"_index":2911,"t":{"1620":{"position":[[238,9]]}}}],["289",{"_index":2983,"t":{"1651":{"position":[[649,6]]}}}],["2895ae7",{"_index":3376,"t":{"1697":{"position":[[145,9]]}}}],["28ba930",{"_index":2494,"t":{"1510":{"position":[[185,9]]}}}],["2900",{"_index":1683,"t":{"434":{"position":[[187,6]]},"440":{"position":[[192,6]]},"469":{"position":[[192,6]]},"473":{"position":[[290,6]]},"761":{"position":[[136,6]]},"775":{"position":[[141,6]]},"808":{"position":[[192,6]]},"1049":{"position":[[192,6]]}}}],["290000000,6.8",{"_index":925,"t":{"165":{"position":[[200,13]]},"189":{"position":[[200,13]]}}}],["291",{"_index":2793,"t":{"1594":{"position":[[415,6]]}}}],["293",{"_index":2939,"t":{"1633":{"position":[[9,6]]}}}],["294",{"_index":2946,"t":{"1637":{"position":[[29,6]]}}}],["296",{"_index":2928,"t":{"1629":{"position":[[78,6]]}}}],["2961d2f",{"_index":2784,"t":{"1594":{"position":[[165,9]]}}}],["2981f2c",{"_index":3030,"t":{"1658":{"position":[[242,9]]}}}],["2
  • list",{"_index":3694,"t":{"1914":{"position":[[799,14],[929,14]]}}}],["2stat",{"_index":3688,"t":{"1914":{"position":[[656,23]]}}}],["2_stage_chart",{"_index":1836,"t":{"493":{"position":[[383,13]]},"740":{"position":[[439,13]]},"1279":{"position":[[215,13]]}}}],["2_stage_outlet",{"_index":1834,"t":{"493":{"position":[[245,14],[485,14]]},"740":{"position":[[250,14],[592,14]]},"1279":{"position":[[317,14]]},"1320":{"position":[[245,14]]}}}],["2a1e8b0",{"_index":3302,"t":{"1686":{"position":[[616,9]]}}}],["2af9d13",{"_index":2704,"t":{"1581":{"position":[[172,9]]}}}],["2be1736",{"_index":2742,"t":{"1592":{"position":[[114,9]]}}}],["2bef707",{"_index":3286,"t":{"1684":{"position":[[440,9]]}}}],["2cb09e2",{"_index":2901,"t":{"1620":{"position":[[49,9],[408,9]]},"1624":{"position":[[31,9]]}}}],["2cc9c8f",{"_index":2553,"t":{"1530":{"position":[[204,9]]}}}],["2d",{"_index":3251,"t":{"1682":{"position":[[430,2]]}}}],["2df3bdf",{"_index":3279,"t":{"1684":{"position":[[216,9]]}}}],["2e26ce1",{"_index":2633,"t":{"1544":{"position":[[455,9]]}}}],["2ea517",{"_index":3356,"t":{"1692":{"position":[[215,9]]}}}],["2f95c29",{"_index":3195,"t":{"1673":{"position":[[718,9]]}}}],["2nd",{"_index":1839,"t":{"493":{"position":[[601,3]]},"740":{"position":[[708,3]]},"1279":{"position":[[433,3]]}}}],["3",{"_index":601,"t":{"91":{"position":[[3287,2]]},"93":{"position":[[1648,2]]},"211":{"position":[[2428,3],[2432,2],[2435,2],[2438,2],[2560,1],[2644,1],[2731,1],[3125,1]]},"213":{"position":[[3518,3],[3522,2],[3525,2],[3528,2],[3650,1],[3734,1],[3821,1],[4013,1]]},"278":{"position":[[2442,3],[2446,2],[2449,2],[2452,2],[2574,1],[2658,1],[2745,1],[3152,1]]},"280":{"position":[[4506,3],[4510,2],[4513,2],[4516,2],[4638,1],[4722,1],[4809,1],[5014,1]]},"321":{"position":[[1601,1],[1859,1]]},"351":{"position":[[39,1],[80,1]]},"377":{"position":[[116,1]]},"385":{"position":[[270,1],[343,1]]},"746":{"position":[[369,3],[373,2]]},"946":{"position":[[38,2]]},"1186":{"position":[[628,3],[632,2],[999,1],[1072,1]]},"1263":{"position":[[268,1],[341,1]]},"1662":{"position":[[546,1]]},"1890":{"position":[[24,1]]},"1914":{"position":[[162,1],[603,1],[759,1],[876,2],[889,1]]}}}],["3,3,0",{"_index":2265,"t":{"1183":{"position":[[124,7]]}}}],["3.0.11",{"_index":3057,"t":{"1662":{"position":[[421,6]]}}}],["3.11",{"_index":2631,"t":{"1544":{"position":[[443,4]]}}}],["3.3.2",{"_index":2802,"t":{"1596":{"position":[[30,5]]},"1662":{"position":[[431,5]]}}}],["3.452",{"_index":1516,"t":{"315":{"position":[[545,5]]},"321":{"position":[[1396,5]]}}}],["3.5",{"_index":1239,"t":{"225":{"position":[[821,3],[986,4],[1679,3]]},"233":{"position":[[972,3]]},"475":{"position":[[416,3]]},"1155":{"position":[[181,3]]}}}],["3.678",{"_index":1512,"t":{"315":{"position":[[497,5]]},"321":{"position":[[1342,5]]}}}],["3.8",{"_index":2630,"t":{"1544":{"position":[[436,3]]}}}],["30",{"_index":1078,"t":{"201":{"position":[[1262,2],[1347,2],[1432,2]]},"213":{"position":[[1553,2],[1638,2],[1723,2]]},"268":{"position":[[1262,2],[1347,2],[1432,2],[1622,2],[1707,2]]},"280":{"position":[[1769,2],[1854,2],[1939,2],[2129,2],[2214,2]]},"448":{"position":[[271,2]]},"469":{"position":[[879,2]]},"471":{"position":[[497,2]]},"473":{"position":[[794,2],[872,2]]},"475":{"position":[[493,2]]},"493":{"position":[[416,2]]},"610":{"position":[[167,2]]},"740":{"position":[[472,2]]},"1155":{"position":[[244,2]]},"1279":{"position":[[248,2]]}}}],["300",{"_index":1155,"t":{"215":{"position":[[580,4]]},"282":{"position":[[580,4]]},"1635":{"position":[[42,6]]}}}],["3000",{"_index":1129,"t":{"215":{"position":[[80,5],[1010,5]]},"282":{"position":[[80,5],[1010,5]]}}}],["30000",{"_index":979,"t":{"165":{"position":[[1014,6]]},"189":{"position":[[1014,6]]},"215":{"position":[[836,6],[885,6],[934,6],[983,6]]},"282":{"position":[[836,6],[885,6],[934,6],[983,6]]}}}],["300000.0",{"_index":1361,"t":{"254":{"position":[[146,8]]}}}],["3000000",{"_index":1015,"t":{"165":{"position":[[1592,8]]},"189":{"position":[[1592,8]]},"215":{"position":[[1366,8],[1415,8],[1464,8]]},"282":{"position":[[1366,8],[1415,8],[1464,8]]},"321":{"position":[[136,8]]}}}],["3000000,50000",{"_index":931,"t":{"165":{"position":[[324,13]]},"189":{"position":[[324,13]]}}}],["300000000,7.1",{"_index":926,"t":{"165":{"position":[[214,13]]},"189":{"position":[[214,13]]}}}],["302",{"_index":2910,"t":{"1620":{"position":[[231,6]]}}}],["303",{"_index":2942,"t":{"1635":{"position":[[102,6]]},"1640":{"position":[[72,6]]},"1643":{"position":[[208,6]]}}}],["304",{"_index":2933,"t":{"1629":{"position":[[180,6]]}}}],["305",{"_index":2872,"t":{"1612":{"position":[[45,6]]},"1616":{"position":[[150,6]]}}}],["30553e0",{"_index":3163,"t":{"1671":{"position":[[75,9]]}}}],["307",{"_index":2906,"t":{"1620":{"position":[[169,6]]}}}],["30dfe19",{"_index":2551,"t":{"1530":{"position":[[161,9]]}}}],["31",{"_index":2183,"t":{"905":{"position":[[420,2]]}}}],["31.36",{"_index":1474,"t":{"315":{"position":[[108,5]]},"321":{"position":[[904,6]]}}}],["310",{"_index":2937,"t":{"1631":{"position":[[65,6]]}}}],["310000",{"_index":996,"t":{"165":{"position":[[1228,6]]},"189":{"position":[[1228,6]]}}}],["311",{"_index":2931,"t":{"1629":{"position":[[136,6]]}}}],["312",{"_index":2873,"t":{"1614":{"position":[[42,6]]}}}],["313",{"_index":2806,"t":{"1596":{"position":[[106,6]]}}}],["315",{"_index":2914,"t":{"1620":{"position":[[305,6]]}}}],["317c958",{"_index":2709,"t":{"1585":{"position":[[39,9]]}}}],["318",{"_index":2920,"t":{"1622":{"position":[[35,6]]}}}],["3184a30",{"_index":2660,"t":{"1556":{"position":[[45,9]]}}}],["319",{"_index":2885,"t":{"1616":{"position":[[263,6]]}}}],["320",{"_index":2925,"t":{"1626":{"position":[[26,6]]}}}],["3201",{"_index":1879,"t":{"502":{"position":[[1654,5]]}}}],["321",{"_index":2882,"t":{"1616":{"position":[[195,6]]}}}],["322",{"_index":2888,"t":{"1618":{"position":[[31,6]]}}}],["323",{"_index":2890,"t":{"1618":{"position":[[106,6]]}}}],["324",{"_index":2875,"t":{"1616":{"position":[[39,6]]}}}],["3250,250,2640,59",{"_index":947,"t":{"165":{"position":[[516,16]]},"189":{"position":[[516,16]]}}}],["3250,360,2490,68",{"_index":948,"t":{"165":{"position":[[533,16]]},"189":{"position":[[533,16]]}}}],["3250,500,2342,77",{"_index":949,"t":{"165":{"position":[[550,16]]},"189":{"position":[[550,16]]}}}],["3250,600,2210,80",{"_index":950,"t":{"165":{"position":[[567,16]]},"189":{"position":[[567,16]]}}}],["3250,667,2068,78",{"_index":951,"t":{"165":{"position":[[584,16]]},"189":{"position":[[584,16]]}}}],["3250,735,1870,74",{"_index":952,"t":{"165":{"position":[[601,16]]},"189":{"position":[[601,16]]}}}],["325bfec",{"_index":2537,"t":{"1528":{"position":[[173,9]]}}}],["326",{"_index":2912,"t":{"1620":{"position":[[268,6]]}}}],["327",{"_index":2918,"t":{"1620":{"position":[[375,6]]}}}],["328",{"_index":2922,"t":{"1622":{"position":[[92,6]]}}}],["32885b5",{"_index":3113,"t":{"1664":{"position":[[481,9]]}}}],["329c8e9",{"_index":3309,"t":{"1686":{"position":[[946,9]]}}}],["32f0289",{"_index":2886,"t":{"1616":{"position":[[270,9]]}}}],["33.32,231569.8",{"_index":1299,"t":{"236":{"position":[[245,14]]}}}],["33000",{"_index":974,"t":{"165":{"position":[[948,6],[1080,6],[1410,6],[1608,6]]},"189":{"position":[[948,6],[1080,6],[1410,6],[1608,6]]}}}],["330000.0",{"_index":1363,"t":{"254":{"position":[[161,8]]}}}],["331",{"_index":2903,"t":{"1620":{"position":[[99,6]]}}}],["332",{"_index":2879,"t":{"1616":{"position":[[88,6]]}}}],["333",{"_index":2916,"t":{"1620":{"position":[[342,6]]}}}],["334",{"_index":2892,"t":{"1618":{"position":[[152,6]]}}}],["335",{"_index":2864,"t":{"1605":{"position":[[151,6]]}}}],["337",{"_index":2797,"t":{"1594":{"position":[[519,6]]}}}],["338",{"_index":2860,"t":{"1605":{"position":[[41,6]]}}}],["339",{"_index":2862,"t":{"1605":{"position":[[101,6]]}}}],["34",{"_index":1478,"t":{"315":{"position":[[153,2],[177,2]]},"321":{"position":[[954,3],[981,3]]}}}],["34000",{"_index":967,"t":{"165":{"position":[[882,6]]},"189":{"position":[[882,6]]}}}],["341",{"_index":2843,"t":{"1596":{"position":[[796,6]]}}}],["3428d34",{"_index":2625,"t":{"1544":{"position":[[304,9]]}}}],["343",{"_index":2866,"t":{"1607":{"position":[[13,6]]}}}],["347",{"_index":2855,"t":{"1598":{"position":[[137,6]]}}}],["349",{"_index":2771,"t":{"1592":{"position":[[1084,6]]}}}],["34cebc4",{"_index":2934,"t":{"1629":{"position":[[187,9]]}}}],["35",{"_index":1838,"t":{"493":{"position":[[472,2]]},"740":{"position":[[579,2]]},"1279":{"position":[[304,2]]}}}],["350",{"_index":1158,"t":{"215":{"position":[[601,4]]},"282":{"position":[[601,4]]}}}],["3500",{"_index":1133,"t":{"215":{"position":[[103,5],[1059,5]]},"282":{"position":[[103,5],[1059,5]]}}}],["35000",{"_index":990,"t":{"165":{"position":[[1146,6],[1542,6]]},"189":{"position":[[1146,6],[1542,6]]}}}],["350000",{"_index":999,"t":{"165":{"position":[[1294,6]]},"189":{"position":[[1294,6]]}}}],["350000.0",{"_index":1365,"t":{"254":{"position":[[176,8]]}}}],["3500000",{"_index":965,"t":{"165":{"position":[[866,8],[1394,8]]},"189":{"position":[[866,8],[1394,8]]}}}],["3500000,130000",{"_index":932,"t":{"165":{"position":[[338,14]]},"189":{"position":[[338,14]]}}}],["3503",{"_index":1684,"t":{"434":{"position":[[194,5]]},"440":{"position":[[199,5]]},"469":{"position":[[199,5]]},"473":{"position":[[297,5]]},"761":{"position":[[143,5]]},"775":{"position":[[148,5]]},"808":{"position":[[199,5]]},"1049":{"position":[[199,5]]}}}],["351",{"_index":2803,"t":{"1596":{"position":[[45,6]]}}}],["352",{"_index":2795,"t":{"1594":{"position":[[462,6]]}}}],["357",{"_index":2834,"t":{"1596":{"position":[[637,6]]}}}],["358",{"_index":2738,"t":{"1592":{"position":[[37,6]]}}}],["359",{"_index":2743,"t":{"1592":{"position":[[151,6]]}}}],["35a3640",{"_index":3321,"t":{"1686":{"position":[[1248,9]]}}}],["35c4f68",{"_index":3033,"t":{"1658":{"position":[[302,9]]}}}],["36.93",{"_index":1489,"t":{"315":{"position":[[253,5]]},"321":{"position":[[1067,6]]}}}],["36000",{"_index":994,"t":{"165":{"position":[[1212,6],[1278,6],[1476,6]]},"189":{"position":[[1212,6],[1278,6],[1476,6]]}}}],["36000,13",{"_index":958,"t":{"165":{"position":[[700,8]]},"189":{"position":[[700,8]]}}}],["3600000",{"_index":972,"t":{"165":{"position":[[932,8]]},"189":{"position":[[932,8]]}}}],["361",{"_index":2746,"t":{"1592":{"position":[[235,6]]}}}],["362",{"_index":2838,"t":{"1596":{"position":[[718,6]]}}}],["3622927",{"_index":2755,"t":{"1592":{"position":[[556,9]]}}}],["3632fbd",{"_index":2788,"t":{"1594":{"position":[[208,9]]}}}],["3634a9e",{"_index":3021,"t":{"1658":{"position":[[90,9]]}}}],["364",{"_index":2832,"t":{"1596":{"position":[[599,6]]}}}],["367",{"_index":2815,"t":{"1596":{"position":[[252,6]]}}}],["368",{"_index":2800,"t":{"1594":{"position":[[620,6]]}}}],["369",{"_index":2783,"t":{"1594":{"position":[[158,6]]}}}],["3700000",{"_index":977,"t":{"165":{"position":[[998,8]]},"189":{"position":[[998,8]]}}}],["3708",{"_index":1703,"t":{"440":{"position":[[309,6]]},"775":{"position":[[258,6]]}}}],["371",{"_index":2851,"t":{"1598":{"position":[[29,6]]}}}],["373",{"_index":2840,"t":{"1596":{"position":[[755,6]]}}}],["374",{"_index":2753,"t":{"1592":{"position":[[495,6]]}}}],["377",{"_index":2777,"t":{"1592":{"position":[[1210,6]]}}}],["378",{"_index":2857,"t":{"1600":{"position":[[36,6]]}}}],["38",{"_index":1049,"t":{"201":{"position":[[890,2]]},"213":{"position":[[1181,2]]},"268":{"position":[[890,2]]},"280":{"position":[[1397,2]]},"315":{"position":[[297,2],[321,2]]},"321":{"position":[[1116,3],[1143,3]]},"471":{"position":[[629,2]]},"541":{"position":[[76,2]]},"1113":{"position":[[76,2]]},"1353":{"position":[[76,2]]},"1360":{"position":[[76,2]]},"1383":{"position":[[76,2]]},"1485":{"position":[[287,2]]},"1705":{"position":[[647,5]]}}}],["38.08,257576.1",{"_index":1300,"t":{"236":{"position":[[260,14]]}}}],["380",{"_index":2821,"t":{"1596":{"position":[[405,6]]}}}],["38000",{"_index":1002,"t":{"165":{"position":[[1344,6]]},"189":{"position":[[1344,6]]}}}],["3800000",{"_index":983,"t":{"165":{"position":[[1064,8]]},"189":{"position":[[1064,8]]}}}],["381",{"_index":2829,"t":{"1596":{"position":[[556,6]]}}}],["382",{"_index":2769,"t":{"1592":{"position":[[1029,6]]}}}],["383e7f6",{"_index":2734,"t":{"1589":{"position":[[153,9]]}}}],["384",{"_index":2824,"t":{"1596":{"position":[[454,6]]}}}],["386",{"_index":2789,"t":{"1594":{"position":[[241,6]]}}}],["387",{"_index":2845,"t":{"1596":{"position":[[846,6]]}}}],["388",{"_index":2700,"t":{"1581":{"position":[[111,6]]}}}],["38870a3",{"_index":3270,"t":{"1684":{"position":[[31,9]]}}}],["389db6f",{"_index":3416,"t":{"1705":{"position":[[1180,9]]}}}],["39",{"_index":3365,"t":{"1695":{"position":[[109,5]]}}}],["390",{"_index":2735,"t":{"1589":{"position":[[216,6]]}}}],["390000",{"_index":1003,"t":{"165":{"position":[[1360,6]]},"189":{"position":[[1360,6]]}}}],["3900000",{"_index":988,"t":{"165":{"position":[[1130,8]]},"189":{"position":[[1130,8]]}}}],["391",{"_index":2588,"t":{"1542":{"position":[[56,6]]}}}],["392",{"_index":2715,"t":{"1587":{"position":[[45,6]]}}}],["393",{"_index":2708,"t":{"1585":{"position":[[32,6]]}}}],["394",{"_index":2713,"t":{"1585":{"position":[[125,6]]}}}],["395",{"_index":2710,"t":{"1585":{"position":[[82,6]]}}}],["399",{"_index":2728,"t":{"1587":{"position":[[401,6]]}}}],["39c5c36",{"_index":3324,"t":{"1686":{"position":[[1347,9]]}}}],["39df792",{"_index":3296,"t":{"1686":{"position":[[206,9]]}}}],["3
  • .yml",{"_index":366,"t":{"47":{"position":[[313,6]]}}}],["8b57915",{"_index":2481,"t":{"1508":{"position":[[46,9]]}}}],["8b97673",{"_index":3037,"t":{"1660":{"position":[[49,9]]}}}],["8bd68a1",{"_index":2528,"t":{"1526":{"position":[[413,9]]}}}],["8be87dd",{"_index":3203,"t":{"1675":{"position":[[49,9]]}}}],["8c2c786",{"_index":2929,"t":{"1629":{"position":[[85,9]]}}}],["8cca29a",{"_index":2654,"t":{"1549":{"position":[[47,9]]}}}],["8cf9e1b",{"_index":3010,"t":{"1656":{"position":[[30,9]]}}}],["8d03822",{"_index":2943,"t":{"1635":{"position":[[109,9]]}}}],["8d8e1cc",{"_index":2640,"t":{"1544":{"position":[[630,9]]}}}],["8dbd146",{"_index":2365,"t":{"1474":{"position":[[149,9]]}}}],["8e76c8a",{"_index":3404,"t":{"1705":{"position":[[479,9]]}}}],["8ea5b2f",{"_index":2506,"t":{"1522":{"position":[[24,9]]}}}],["8f0d716",{"_index":3284,"t":{"1684":{"position":[[379,9]]}}}],["8feaf6c",{"_index":2772,"t":{"1592":{"position":[[1091,9]]}}}],["9",{"_index":607,"t":{"91":{"position":[[3445,3],[3578,2]]},"217":{"position":[[358,1]]},"231":{"position":[[2845,1]]},"233":{"position":[[2231,1]]}}}],["9.125",{"_index":1055,"t":{"201":{"position":[[942,6]]},"213":{"position":[[1233,6]]},"268":{"position":[[942,6]]},"280":{"position":[[1449,6]]},"471":{"position":[[681,6]]},"541":{"position":[[128,6]]},"1113":{"position":[[128,6]]},"1353":{"position":[[128,6]]},"1360":{"position":[[128,6]]},"1383":{"position":[[128,6]]}}}],["9.52,76775.52",{"_index":1289,"t":{"236":{"position":[[98,13]]}}}],["9.557",{"_index":1496,"t":{"315":{"position":[[330,5]]},"321":{"position":[[1154,5]]}}}],["9.712",{"_index":1507,"t":{"315":{"position":[[449,5]]},"321":{"position":[[1288,5]]}}}],["90",{"_index":3248,"t":{"1682":{"position":[[384,5]]}}}],["900",{"_index":1208,"t":{"215":{"position":[[1646,4]]},"282":{"position":[[1646,4]]}}}],["9000",{"_index":964,"t":{"165":{"position":[[860,5]]},"189":{"position":[[860,5]]},"215":{"position":[[1304,5]]},"282":{"position":[[1304,5]]}}}],["9000,4",{"_index":955,"t":{"165":{"position":[[677,6]]},"189":{"position":[[677,6]]}}}],["91",{"_index":3295,"t":{"1686":{"position":[[200,5]]}}}],["924526a",{"_index":3207,"t":{"1675":{"position":[[148,9]]}}}],["92cb4fa",{"_index":3363,"t":{"1695":{"position":[[56,9]]}}}],["93",{"_index":1872,"t":{"502":{"position":[[1052,2]]}}}],["9329ae2",{"_index":2947,"t":{"1637":{"position":[[36,9]]}}}],["936b941",{"_index":3386,"t":{"1701":{"position":[[291,9]]}}}],["93de4f4",{"_index":3383,"t":{"1701":{"position":[[199,9]]}}}],["94",{"_index":3303,"t":{"1686":{"position":[[703,5]]}}}],["94.12",{"_index":1484,"t":{"315":{"position":[[204,5]]},"321":{"position":[[1012,6]]}}}],["94.17",{"_index":1502,"t":{"315":{"position":[[395,5]]},"321":{"position":[[1227,6]]}}}],["94.24",{"_index":1481,"t":{"315":{"position":[[180,5]]},"321":{"position":[[985,6]]}}}],["9428979",{"_index":3209,"t":{"1675":{"position":[[195,9]]}}}],["9482421",{"_index":3368,"t":{"1695":{"position":[[166,9]]}}}],["94be7fa",{"_index":3334,"t":{"1688":{"position":[[212,9]]}}}],["94dbce9",{"_index":2392,"t":{"1483":{"position":[[53,9]]}}}],["94e46b8",{"_index":2532,"t":{"1528":{"position":[[49,9]]}}}],["95",{"_index":3301,"t":{"1686":{"position":[[610,5]]}}}],["9502bcc",{"_index":3221,"t":{"1675":{"position":[[521,9]]}}}],["950b0fd",{"_index":2844,"t":{"1596":{"position":[[803,9]]}}}],["952309a",{"_index":2687,"t":{"1576":{"position":[[21,9],[89,9]]},"1578":{"position":[[69,9],[247,9]]}}}],["9629f22",{"_index":3002,"t":{"1653":{"position":[[479,9]]}}}],["963d9ea",{"_index":2891,"t":{"1618":{"position":[[113,9]]}}}],["9684fe5",{"_index":2539,"t":{"1528":{"position":[[230,9]]}}}],["97",{"_index":3311,"t":{"1686":{"position":[[1073,5]]}}}],["97.79",{"_index":1515,"t":{"315":{"position":[[539,5]]},"321":{"position":[[1389,6]]}}}],["971b4b3",{"_index":2460,"t":{"1496":{"position":[[96,9]]}}}],["975d3b1",{"_index":2776,"t":{"1592":{"position":[[1170,9]]}}}],["9765874",{"_index":2767,"t":{"1592":{"position":[[981,9]]}}}],["98198fc",{"_index":2993,"t":{"1653":{"position":[[234,9]]}}}],["9886",{"_index":1702,"t":{"440":{"position":[[298,4]]},"775":{"position":[[247,4]]}}}],["990f3c2",{"_index":2938,"t":{"1631":{"position":[[72,9]]}}}],["9a2f9a9",{"_index":2550,"t":{"1530":{"position":[[118,9]]}}}],["9a54f51",{"_index":3399,"t":{"1705":{"position":[[312,9]]}}}],["9a67f53",{"_index":2414,"t":{"1485":{"position":[[147,9]]}}}],["9b2bf1e",{"_index":2517,"t":{"1526":{"position":[[44,9]]}}}],["9b31d60",{"_index":2454,"t":{"1494":{"position":[[36,9]]}}}],["9b7b308",{"_index":3319,"t":{"1686":{"position":[[1200,9]]}}}],["9b95ee5",{"_index":3119,"t":{"1667":{"position":[[72,9]]}}}],["9c3af00",{"_index":3415,"t":{"1705":{"position":[[1165,9]]}}}],["9cf339b",{"_index":2557,"t":{"1533":{"position":[[87,9]]}}}],["9cfcd47",{"_index":2404,"t":{"1483":{"position":[[261,9]]}}}],["9d66de6",{"_index":3424,"t":{"1708":{"position":[[39,9]]}}}],["9de403c",{"_index":3266,"t":{"1682":{"position":[[907,9]]}}}],["9ef52d3",{"_index":2412,"t":{"1485":{"position":[[128,9]]},"1487":{"position":[[362,9]]}}}],["9f4a4af",{"_index":3289,"t":{"1686":{"position":[[18,9]]}}}],["9f580c1",{"_index":3211,"t":{"1675":{"position":[[242,9]]}}}],["9f73552",{"_index":2691,"t":{"1576":{"position":[[62,9]]}}}],["_",{"_index":609,"t":{"91":{"position":[[3460,4],[3596,4]]}}}],["_type_handl",{"_index":2817,"t":{"1596":{"position":[[278,13]]}}}],["a017352",{"_index":2629,"t":{"1544":{"position":[[398,9]]}}}],["a01a215",{"_index":3331,"t":{"1688":{"position":[[130,9]]}}}],["a135a97",{"_index":2846,"t":{"1596":{"position":[[853,9]]}}}],["a16a695",{"_index":3269,"t":{"1682":{"position":[[1070,9]]}}}],["a18de1",{"_index":3247,"t":{"1682":{"position":[[302,9]]}}}],["a1d2ce6",{"_index":3112,"t":{"1664":{"position":[[438,9]]}}}],["a22ffe8",{"_index":2792,"t":{"1594":{"position":[[327,9]]}}}],["a27c392",{"_index":3145,"t":{"1669":{"position":[[574,9]]}}}],["a2a3e03",{"_index":2474,"t":{"1498":{"position":[[501,9]]}}}],["a2b5c1a",{"_index":3373,"t":{"1697":{"position":[[99,9]]}}}],["a310df2",{"_index":3078,"t":{"1662":{"position":[[956,9]]}}}],["a35c604",{"_index":2841,"t":{"1596":{"position":[[762,9]]}}}],["a3683c1",{"_index":2435,"t":{"1487":{"position":[[100,9]]}}}],["a38bb28",{"_index":2461,"t":{"1498":{"position":[[48,9]]}}}],["a4fff16",{"_index":2958,"t":{"1645":{"position":[[118,9]]}}}],["a50148c",{"_index":2999,"t":{"1653":{"position":[[399,9]]}}}],["a6b198",{"_index":2657,"t":{"1554":{"position":[[23,9]]}}}],["a6c60fa",{"_index":2651,"t":{"1546":{"position":[[22,9]]}}}],["a71abf",{"_index":3172,"t":{"1671":{"position":[[427,9]]}}}],["a79e44",{"_index":2678,"t":{"1567":{"position":[[32,9]]}}}],["a7b22e2",{"_index":3378,"t":{"1701":{"position":[[18,9]]}}}],["a9cca9",{"_index":2807,"t":{"1596":{"position":[[113,9]]}}}],["a_genset",{"_index":3433,"t":{"1713":{"position":[[621,8]]},"1735":{"position":[[619,8]]}}}],["a_single_speed_pump",{"_index":1441,"t":{"302":{"position":[[25,19]]}}}],["a_single_speed_pump_with_head_margin_appli",{"_index":1445,"t":{"302":{"position":[[341,44]]}}}],["a_variable_speed_pump",{"_index":1443,"t":{"302":{"position":[[180,21]]}}}],["aa65163",{"_index":3088,"t":{"1662":{"position":[[1170,9]]}}}],["ab25e05",{"_index":3215,"t":{"1675":{"position":[[333,9]]}}}],["ab2877",{"_index":2585,"t":{"1540":{"position":[[488,9]]}}}],["ab43bd7",{"_index":2616,"t":{"1544":{"position":[[130,9]]}}}],["ab80399",{"_index":2780,"t":{"1594":{"position":[[17,9]]}}}],["abbb704",{"_index":2859,"t":{"1603":{"position":[[37,9]]}}}],["abil",{"_index":3557,"t":{"1878":{"position":[[470,7]]}}}],["abov",{"_index":646,"t":{"93":{"position":[[1348,5],[1589,6]]},"145":{"position":[[475,6]]},"153":{"position":[[1338,6]]},"155":{"position":[[324,6],[374,6]]},"161":{"position":[[1225,5],[2280,5],[2467,5],[2921,6]]},"169":{"position":[[475,6]]},"177":{"position":[[1338,6]]},"179":{"position":[[324,6],[374,6]]},"185":{"position":[[1225,5],[2280,5],[2467,5],[2921,6]]},"193":{"position":[[505,6]]},"205":{"position":[[360,6],[410,6]]},"211":{"position":[[1979,6],[2863,6],[2920,6]]},"225":{"position":[[980,5]]},"240":{"position":[[960,5]]},"260":{"position":[[505,6]]},"272":{"position":[[360,6],[410,6],[654,6]]},"278":{"position":[[2001,6],[2877,6],[2934,6]]},"287":{"position":[[1182,5]]},"304":{"position":[[1118,7]]},"424":{"position":[[1702,6]]},"442":{"position":[[1298,5]]},"466":{"position":[[310,5]]},"481":{"position":[[913,5],[1140,5]]},"502":{"position":[[991,6]]},"567":{"position":[[2502,5]]},"933":{"position":[[432,5]]},"1034":{"position":[[174,5],[410,5]]},"1119":{"position":[[380,5]]},"1149":{"position":[[290,5]]},"1540":{"position":[[119,5]]},"1735":{"position":[[1903,6]]},"1803":{"position":[[156,5]]},"1906":{"position":[[43,6]]}}}],["absolut",{"_index":1345,"t":{"246":{"position":[[223,8]]},"527":{"position":[[962,8]]},"933":{"position":[[223,8]]},"952":{"position":[[32,9]]},"1705":{"position":[[275,8]]}}}],["abstract",{"_index":2385,"t":{"1481":{"position":[[34,8]]}}}],["accept",{"_index":281,"t":{"25":{"position":[[1521,9]]},"31":{"position":[[588,9]]},"95":{"position":[[16,8]]},"629":{"position":[[1555,9]]},"635":{"position":[[588,9]]},"1072":{"position":[[310,8]]},"1220":{"position":[[331,8]]},"1682":{"position":[[238,7]]},"1760":{"position":[[16,6]]},"1836":{"position":[[16,8]]},"1886":{"position":[[81,7],[194,9]]}}}],["access",{"_index":34,"t":{"7":{"position":[[209,6]]},"19":{"position":[[288,10]]},"1669":{"position":[[1053,8]]},"1878":{"position":[[39,6]]}}}],["accompani",{"_index":1635,"t":{"389":{"position":[[113,11]]},"442":{"position":[[1384,11]]},"450":{"position":[[994,11]]},"570":{"position":[[284,11]]}}}],["accord",{"_index":1667,"t":{"420":{"position":[[82,9]]},"606":{"position":[[284,9]]},"1143":{"position":[[82,9]]},"1705":{"position":[[549,9]]},"1815":{"position":[[78,9]]}}}],["account",{"_index":500,"t":{"75":{"position":[[931,7]]},"590":{"position":[[161,7]]},"1205":{"position":[[30,7],[571,9]]},"1291":{"position":[[725,7]]},"1295":{"position":[[227,7]]},"1771":{"position":[[98,7]]}}}],["accur",{"_index":737,"t":{"133":{"position":[[261,8]]},"442":{"position":[[388,8]]},"1841":{"position":[[155,8]]}}}],["accuraci",{"_index":729,"t":{"133":{"position":[[84,10],[424,8],[459,8],[511,8]]},"436":{"position":[[933,8]]},"1744":{"position":[[13,8]]}}}],["achiev",{"_index":77,"t":{"13":{"position":[[192,7]]},"717":{"position":[[784,10]]},"909":{"position":[[95,8]]},"1287":{"position":[[96,8]]}}}],["act",{"_index":2170,"t":{"884":{"position":[[649,3]]}}}],["action",{"_index":3045,"t":{"1662":{"position":[[161,7]]},"1692":{"position":[[137,6]]},"1916":{"position":[[485,7]]}}}],["actions/cach",{"_index":2621,"t":{"1544":{"position":[[234,13]]},"1596":{"position":[[11,13]]},"1662":{"position":[[402,13]]}}}],["actions/checkout",{"_index":3060,"t":{"1662":{"position":[[465,16]]}}}],["actions/setup",{"_index":2805,"t":{"1596":{"position":[[73,13]]},"1662":{"position":[[522,13]]}}}],["activ",{"_index":477,"t":{"73":{"position":[[293,6]]},"84":{"position":[[179,6],[341,8]]},"576":{"position":[[1421,11]]},"1858":{"position":[[96,6],[135,7]]},"1884":{"position":[[55,9]]}}}],["actual",{"_index":575,"t":{"91":{"position":[[2290,8]]},"112":{"position":[[229,6]]},"442":{"position":[[129,6]]},"502":{"position":[[1005,6],[1205,6],[1304,6],[1389,6]]},"580":{"position":[[888,6]]},"598":{"position":[[62,6]]},"673":{"position":[[87,6]]},"717":{"position":[[861,6]]},"1098":{"position":[[132,6]]},"1220":{"position":[[228,6]]},"1291":{"position":[[69,6],[137,6]]},"1669":{"position":[[301,6]]},"1725":{"position":[[86,8]]},"1860":{"position":[[0,6],[61,6],[172,6]]},"1869":{"position":[[200,6]]}}}],["ad",{"_index":454,"t":{"64":{"position":[[444,5]]},"70":{"position":[[37,6]]},"93":{"position":[[574,5],[1617,5]]},"369":{"position":[[618,5]]},"462":{"position":[[255,5]]},"464":{"position":[[722,5]]},"466":{"position":[[1130,5]]},"479":{"position":[[1032,5]]},"481":{"position":[[2674,5]]},"504":{"position":[[188,5],[418,6]]},"511":{"position":[[269,5]]},"539":{"position":[[313,5]]},"545":{"position":[[430,5]]},"567":{"position":[[952,5]]},"578":{"position":[[290,6]]},"590":{"position":[[198,5],[352,5]]},"670":{"position":[[10,6]]},"744":{"position":[[309,5]]},"1137":{"position":[[225,5]]},"1153":{"position":[[474,5]]},"1179":{"position":[[302,5]]},"1197":{"position":[[32,5],[57,5]]},"1205":{"position":[[21,5]]},"1381":{"position":[[313,5]]},"1526":{"position":[[115,6],[377,6]]},"1542":{"position":[[0,5]]},"1673":{"position":[[242,6]]},"1686":{"position":[[558,5]]},"1713":{"position":[[172,5],[943,5]]},"1718":{"position":[[78,6]]},"1723":{"position":[[0,5],[58,5],[451,5]]},"1737":{"position":[[732,5]]},"1744":{"position":[[128,5],[270,5]]},"1812":{"position":[[96,6],[418,6]]},"1821":{"position":[[367,5]]},"1841":{"position":[[164,7]]},"1844":{"position":[[0,5]]},"1851":{"position":[[0,5]]},"1936":{"position":[[47,6]]},"1938":{"position":[[24,5]]}}}],["ad95222",{"_index":2383,"t":{"1479":{"position":[[20,9]]}}}],["add",{"_index":242,"t":{"25":{"position":[[513,3]]},"31":{"position":[[1010,3]]},"77":{"position":[[84,3]]},"93":{"position":[[556,3]]},"137":{"position":[[332,3]]},"203":{"position":[[1127,4]]},"270":{"position":[[1494,4]]},"456":{"position":[[56,3]]},"606":{"position":[[643,3]]},"629":{"position":[[547,3]]},"635":{"position":[[1010,3]]},"860":{"position":[[28,3]]},"937":{"position":[[34,3]]},"1458":{"position":[[0,3],[164,3],[244,3],[340,3],[397,3],[506,3]]},"1462":{"position":[[54,3],[169,3]]},"1468":{"position":[[0,3]]},"1470":{"position":[[0,3]]},"1485":{"position":[[0,3]]},"1487":{"position":[[0,3]]},"1519":{"position":[[0,3]]},"1533":{"position":[[0,3]]},"1538":{"position":[[0,3]]},"1544":{"position":[[0,3],[39,3],[82,3]]},"1549":{"position":[[0,3]]},"1559":{"position":[[0,3]]},"1563":{"position":[[0,3]]},"1565":{"position":[[0,3]]},"1567":{"position":[[0,3]]},"1570":{"position":[[0,3]]},"1581":{"position":[[0,3]]},"1583":{"position":[[0,3]]},"1592":{"position":[[0,3],[54,3]]},"1600":{"position":[[0,3]]},"1614":{"position":[[0,3]]},"1620":{"position":[[0,3]]},"1626":{"position":[[0,3]]},"1643":{"position":[[104,3]]},"1651":{"position":[[0,3],[49,3]]},"1653":{"position":[[0,3]]},"1656":{"position":[[0,3],[40,3]]},"1660":{"position":[[0,3]]},"1662":{"position":[[0,3],[37,3],[97,3],[146,3],[197,3],[235,3],[271,3],[328,3]]},"1667":{"position":[[0,3],[82,3],[140,3],[183,3]]},"1669":{"position":[[0,3],[57,3]]},"1671":{"position":[[0,3],[54,3],[85,3],[150,3]]},"1673":{"position":[[0,3],[83,3],[169,3]]},"1686":{"position":[[0,3],[28,3],[62,3],[96,3],[151,3],[216,3],[315,3],[410,3],[450,3]]},"1690":{"position":[[0,3]]},"1703":{"position":[[0,3]]},"1705":{"position":[[0,3],[38,3],[83,3]]},"1713":{"position":[[0,3],[317,3],[815,3],[1276,3],[1484,3]]},"1715":{"position":[[14,3]]},"1723":{"position":[[133,3],[209,3],[245,3],[298,3],[384,3]]},"1725":{"position":[[435,3]]},"1728":{"position":[[0,3],[87,3],[287,3]]},"1730":{"position":[[0,3]]},"1732":{"position":[[0,3],[192,3]]},"1735":{"position":[[0,3],[738,3]]},"1746":{"position":[[0,3]]},"1781":{"position":[[0,3]]},"1787":{"position":[[0,3]]},"1790":{"position":[[0,3]]},"1793":{"position":[[0,3]]},"1805":{"position":[[0,3]]},"1844":{"position":[[449,3]]},"1858":{"position":[[0,3]]},"1900":{"position":[[269,3]]},"1908":{"position":[[508,3]]},"1934":{"position":[[60,3]]},"1936":{"position":[[0,3],[29,3],[105,3]]},"1938":{"position":[[39,4],[283,3]]},"1943":{"position":[[366,3],[392,3]]},"1945":{"position":[[256,3],[301,3],[555,3],[649,3],[675,3]]}}}],["addit",{"_index":255,"t":{"25":{"position":[[872,8],[1044,8]]},"93":{"position":[[1028,8],[2118,8]]},"112":{"position":[[6,10]]},"191":{"position":[[146,8]]},"211":{"position":[[128,10]]},"231":{"position":[[1929,10]]},"258":{"position":[[146,8]]},"278":{"position":[[129,10]]},"317":{"position":[[0,10]]},"373":{"position":[[122,9]]},"424":{"position":[[1264,9],[2257,10]]},"460":{"position":[[533,9]]},"481":{"position":[[605,9]]},"487":{"position":[[579,9]]},"498":{"position":[[534,10]]},"502":{"position":[[1842,10]]},"506":{"position":[[326,8]]},"509":{"position":[[97,10]]},"511":{"position":[[61,10],[252,8]]},"513":{"position":[[294,8]]},"570":{"position":[[259,9]]},"576":{"position":[[1255,10],[1436,10]]},"629":{"position":[[906,8],[1078,8]]},"812":{"position":[[329,10]]},"1275":{"position":[[849,9]]},"1458":{"position":[[309,10]]},"1723":{"position":[[137,10]]},"1793":{"position":[[970,8]]}}}],["addition",{"_index":1268,"t":{"231":{"position":[[933,12]]},"436":{"position":[[355,13]]}}}],["adiabat",{"_index":2005,"t":{"567":{"position":[[896,11]]}}}],["adjust",{"_index":1338,"t":{"242":{"position":[[965,11],[1001,10]]},"369":{"position":[[607,10]]},"428":{"position":[[296,8]]},"450":{"position":[[1513,10]]},"462":{"position":[[244,10]]},"464":{"position":[[711,10]]},"466":{"position":[[529,8],[1119,10]]},"479":{"position":[[1021,10]]},"481":{"position":[[2663,10]]},"496":{"position":[[888,8]]},"502":{"position":[[2161,6]]},"539":{"position":[[302,10]]},"545":{"position":[[419,10]]},"580":{"position":[[1095,11],[1178,11]]},"582":{"position":[[462,11],[493,11]]},"588":{"position":[[32,10]]},"590":{"position":[[179,11],[245,10],[314,10]]},"592":{"position":[[0,11],[12,11],[36,11]]},"594":{"position":[[173,11],[510,11]]},"699":{"position":[[18,10],[78,10]]},"701":{"position":[[37,10]]},"705":{"position":[[153,11],[460,11]]},"717":{"position":[[697,9]]},"929":{"position":[[60,10]]},"939":{"position":[[0,10]]},"946":{"position":[[149,11],[466,11]]},"1034":{"position":[[345,6]]},"1137":{"position":[[214,10]]},"1153":{"position":[[463,10]]},"1197":{"position":[[21,10]]},"1381":{"position":[[302,10]]},"1450":{"position":[[1055,6]]},"1458":{"position":[[456,6]]},"1468":{"position":[[4,10]]},"1506":{"position":[[10,10]]},"1686":{"position":[[226,10],[328,6],[1457,10]]},"1815":{"position":[[10,10],[95,10]]}}}],["adjust/scal",{"_index":2329,"t":{"1450":{"position":[[1177,12]]}}}],["admonit",{"_index":3562,"t":{"1878":{"position":[[708,11]]},"1884":{"position":[[139,11]]}}}],["advanc",{"_index":25,"t":{"7":{"position":[[60,8]]},"93":{"position":[[2620,8]]},"139":{"position":[[85,8]]},"141":{"position":[[44,8]]},"191":{"position":[[87,8]]},"201":{"position":[[5,8]]},"258":{"position":[[87,8]]},"268":{"position":[[5,8]]},"280":{"position":[[30,8]]},"483":{"position":[[31,8]]},"1526":{"position":[[251,8]]},"1812":{"position":[[278,8]]},"1908":{"position":[[540,8]]}}}],["advanced_compressor_train",{"_index":2118,"t":{"691":{"position":[[16,25],[241,25]]}}}],["ae0347c",{"_index":2591,"t":{"1542":{"position":[[127,9]]}}}],["ae6ade9",{"_index":2978,"t":{"1651":{"position":[[393,9]]}}}],["af32274",{"_index":2982,"t":{"1651":{"position":[[598,9]]}}}],["af68417",{"_index":2761,"t":{"1592":{"position":[[794,9]]}}}],["af6bee9",{"_index":3041,"t":{"1662":{"position":[[27,9]]}}}],["aff50d7",{"_index":2796,"t":{"1594":{"position":[[469,9]]}}}],["affect",{"_index":448,"t":{"64":{"position":[[85,7]]},"81":{"position":[[226,6]]},"93":{"position":[[2407,8]]},"527":{"position":[[507,9]]},"1332":{"position":[[421,9]]},"1713":{"position":[[1212,8]]}}}],["again",{"_index":368,"t":{"47":{"position":[[335,5]]},"721":{"position":[[294,5]]},"1669":{"position":[[846,5]]}}}],["against",{"_index":2065,"t":{"582":{"position":[[132,7]]},"1692":{"position":[[25,7]]},"1730":{"position":[[561,7]]}}}],["aggreg",{"_index":1631,"t":{"383":{"position":[[701,11]]},"1629":{"position":[[110,11]]},"1867":{"position":[[92,11],[169,10]]}}}],["agnost",{"_index":652,"t":{"93":{"position":[[2356,8]]}}}],["ahead",{"_index":1812,"t":{"485":{"position":[[186,5]]},"487":{"position":[[383,5]]},"567":{"position":[[2622,6]]},"1275":{"position":[[653,5]]},"1492":{"position":[[27,5]]},"1498":{"position":[[166,5]]},"1673":{"position":[[18,5]]},"1839":{"position":[[27,5]]}}}],["ain't",{"_index":2066,"t":{"584":{"position":[[54,5]]}}}],["algorithm",{"_index":1752,"t":{"450":{"position":[[645,9]]},"1651":{"position":[[224,9]]},"1737":{"position":[[228,11]]},"1851":{"position":[[448,10],[467,9],[573,9]]}}}],["align",{"_index":695,"t":{"117":{"position":[[38,7]]},"1528":{"position":[[0,5],[289,9]]},"1536":{"position":[[38,7]]},"1544":{"position":[[101,5]]},"1686":{"position":[[1383,7]]},"1799":{"position":[[38,7]]},"1865":{"position":[[46,9]]}}}],["alkan",{"_index":1919,"t":{"513":{"position":[[225,7],[343,7]]}}}],["alloc",{"_index":2142,"t":{"744":{"position":[[251,9]]},"1179":{"position":[[244,9]]}}}],["allow",{"_index":318,"t":{"39":{"position":[[114,7]]},"91":{"position":[[138,7],[3299,7]]},"112":{"position":[[0,5]]},"124":{"position":[[17,7]]},"133":{"position":[[901,5]]},"153":{"position":[[179,8]]},"177":{"position":[[179,8]]},"203":{"position":[[179,8]]},"270":{"position":[[179,8]]},"291":{"position":[[222,5]]},"308":{"position":[[51,8]]},"355":{"position":[[79,7]]},"361":{"position":[[145,7]]},"367":{"position":[[24,6]]},"389":{"position":[[29,6]]},"430":{"position":[[28,6]]},"436":{"position":[[30,6]]},"614":{"position":[[476,7],[1906,7],[2037,7]]},"1084":{"position":[[108,7],[229,8]]},"1234":{"position":[[145,7],[321,7]]},"1364":{"position":[[33,7]]},"1458":{"position":[[519,7]]},"1492":{"position":[[7,5],[78,5],[149,5]]},"1498":{"position":[[7,5],[65,5],[146,5]]},"1510":{"position":[[7,5]]},"1540":{"position":[[75,5]]},"1587":{"position":[[0,5]]},"1598":{"position":[[0,5]]},"1678":{"position":[[22,7]]},"1682":{"position":[[324,5]]},"1686":{"position":[[741,7]]},"1695":{"position":[[0,5]]},"1713":{"position":[[1088,5]]},"1723":{"position":[[972,5],[1666,7]]},"1730":{"position":[[607,7]]},"1737":{"position":[[117,5]]},"1750":{"position":[[138,7]]},"1803":{"position":[[112,5]]},"1817":{"position":[[54,5],[99,7]]},"1839":{"position":[[7,5],[252,5],[469,5]]},"1916":{"position":[[206,6]]}}}],["alon",{"_index":1670,"t":{"424":{"position":[[69,5]]},"1878":{"position":[[146,6]]}}}],["along",{"_index":1760,"t":{"456":{"position":[[513,5]]},"496":{"position":[[1780,6]]},"1723":{"position":[[648,5]]}}}],["alreadi",{"_index":883,"t":{"161":{"position":[[448,7]]},"185":{"position":[[448,7]]},"498":{"position":[[811,7]]},"1803":{"position":[[243,8]]},"1918":{"position":[[70,7]]},"1922":{"position":[[176,7]]}}}],["alt=\"altern",{"_index":3699,"t":{"1914":{"position":[[1037,16]]}}}],["altern",{"_index":1692,"t":{"436":{"position":[[437,9]]},"567":{"position":[[3104,11]]},"578":{"position":[[73,11]]},"725":{"position":[[153,9]]},"1167":{"position":[[517,14],[772,14]]},"1458":{"position":[[784,13]]},"1914":{"position":[[968,11]]}}}],["although",{"_index":3634,"t":{"1906":{"position":[[797,8],[1024,8],[1117,8]]}}}],["alway",{"_index":635,"t":{"93":{"position":[[301,6],[1998,6],[2102,6]]},"504":{"position":[[81,6]]},"578":{"position":[[507,6],[714,6]]},"590":{"position":[[125,6]]},"925":{"position":[[42,6]]},"1364":{"position":[[12,6]]},"1669":{"position":[[943,6]]},"1682":{"position":[[891,6]]},"1725":{"position":[[793,6]]},"1752":{"position":[[207,6]]}}}],["am3/h",{"_index":1882,"t":{"502":{"position":[[2421,5],[2469,5],[2563,7],[2614,6]]}}}],["am3/hr",{"_index":1739,"t":{"442":{"position":[[1626,6],[1673,6]]},"502":{"position":[[1032,7],[1416,6],[1445,6],[1660,7]]}}}],["am3_per_hour",{"_index":587,"t":{"91":{"position":[[2693,12],[2839,12],[2998,12],[3155,12]]},"149":{"position":[[955,12]]},"163":{"position":[[485,12]]},"173":{"position":[[955,12]]},"187":{"position":[[485,12]]},"197":{"position":[[591,12]]},"201":{"position":[[487,12],[651,12]]},"213":{"position":[[297,12],[778,12],[942,12]]},"223":{"position":[[567,12]]},"233":{"position":[[248,12]]},"264":{"position":[[591,12]]},"268":{"position":[[487,12],[651,12]]},"280":{"position":[[513,12],[994,12],[1158,12]]},"293":{"position":[[142,12]]},"300":{"position":[[144,12]]},"302":{"position":[[128,12],[289,12],[469,12]]},"432":{"position":[[135,12]]},"434":{"position":[[118,12]]},"438":{"position":[[137,12]]},"440":{"position":[[122,12]]},"444":{"position":[[293,12]]},"446":{"position":[[195,12]]},"469":{"position":[[122,12]]},"471":{"position":[[195,12]]},"473":{"position":[[220,12]]},"766":{"position":[[278,12]]},"768":{"position":[[195,12]]},"780":{"position":[[278,12]]},"782":{"position":[[195,12]]},"808":{"position":[[122,12]]},"1038":{"position":[[67,12]]},"1049":{"position":[[122,12]]},"1230":{"position":[[94,14]]},"1232":{"position":[[82,14]]},"1389":{"position":[[87,12]]},"1391":{"position":[[91,12]]},"1394":{"position":[[90,12]]},"1396":{"position":[[122,12]]}}}],["ambigu",{"_index":440,"t":{"62":{"position":[[171,9],[317,11]]},"91":{"position":[[44,9],[472,9],[1518,9]]},"1748":{"position":[[65,9]]},"1750":{"position":[[44,9]]},"1758":{"position":[[65,9]]},"1760":{"position":[[103,11],[303,9]]},"1834":{"position":[[65,9]]},"1906":{"position":[[911,10]]}}}],["amend",{"_index":580,"t":{"91":{"position":[[2411,5]]}}}],["amongst",{"_index":1240,"t":{"225":{"position":[[894,7]]}}}],["amount",{"_index":643,"t":{"93":{"position":[[1234,6]]},"502":{"position":[[1832,6]]},"521":{"position":[[565,6]]},"580":{"position":[[996,6]]},"640":{"position":[[653,6]]}}}],["analys",{"_index":3540,"t":{"1858":{"position":[[241,7]]}}}],["analyz",{"_index":530,"t":{"84":{"position":[[480,9]]}}}],["anchor",{"_index":2509,"t":{"1524":{"position":[[52,6]]}}}],["and/or",{"_index":314,"t":{"37":{"position":[[178,6]]},"58":{"position":[[1207,6]]},"308":{"position":[[6,7]]},"483":{"position":[[109,6],[133,6]]},"1141":{"position":[[219,6]]}}}],["annot",{"_index":3665,"t":{"1914":{"position":[[41,10]]}}}],["anoth",{"_index":1090,"t":{"203":{"position":[[1132,7]]},"270":{"position":[[1499,7]]},"485":{"position":[[1335,7]]},"559":{"position":[[314,7]]},"578":{"position":[[297,7]]},"738":{"position":[[701,7]]},"744":{"position":[[73,7]]},"1179":{"position":[[55,7]]},"1205":{"position":[[121,7]]},"1277":{"position":[[786,7]]},"1310":{"position":[[600,7]]},"1723":{"position":[[1336,7]]},"1945":{"position":[[260,7]]}}}],["anti",{"_index":1418,"t":{"287":{"position":[[546,5]]},"304":{"position":[[1438,5]]},"442":{"position":[[513,5]]},"496":{"position":[[499,4]]},"502":{"position":[[1180,4]]},"567":{"position":[[3792,4]]}}}],["anyon",{"_index":2263,"t":{"1181":{"position":[[209,7]]}}}],["anyth",{"_index":2094,"t":{"614":{"position":[[1109,8]]},"1938":{"position":[[233,8]]}}}],["anywher",{"_index":1554,"t":{"325":{"position":[[2228,8]]}}}],["api",{"_index":48,"t":{"9":{"position":[[10,3]]},"49":{"position":[[294,3]]},"1692":{"position":[[73,3]]}}}],["appli",{"_index":1344,"t":{"246":{"position":[[88,7]]},"401":{"position":[[122,8]]},"406":{"position":[[71,8]]},"614":{"position":[[979,8],[1129,5]]},"933":{"position":[[88,7]]},"1084":{"position":[[140,8]]},"1728":{"position":[[334,5]]},"1735":{"position":[[481,5]]},"1846":{"position":[[168,8]]}}}],["applic",{"_index":1600,"t":{"353":{"position":[[339,10]]},"1458":{"position":[[435,10]]},"1603":{"position":[[18,11]]},"1609":{"position":[[26,11]]},"1882":{"position":[[98,11]]}}}],["apply_condit",{"_index":3250,"t":{"1682":{"position":[[405,15]]}}}],["appreci",{"_index":3596,"t":{"1886":{"position":[[609,10]]}}}],["approach",{"_index":120,"t":{"13":{"position":[[924,8]]}}}],["appropri",{"_index":3711,"t":{"1918":{"position":[[34,11]]}}}],["approxim",{"_index":2031,"t":{"567":{"position":[[1977,12]]}}}],["archiv",{"_index":3196,"t":{"1673":{"position":[[735,7]]}}}],["area",{"_index":61,"t":{"11":{"position":[[113,5]]},"287":{"position":[[287,5]]},"304":{"position":[[151,4],[1273,5],[1535,4],[1593,4],[1679,5]]},"317":{"position":[[345,5]]},"332":{"position":[[259,5]]},"424":{"position":[[805,4]]},"527":{"position":[[414,5],[448,4]]},"1034":{"position":[[200,4]]},"1080":{"position":[[186,5]]},"1332":{"position":[[328,5],[362,4]]},"1662":{"position":[[47,4]]},"1725":{"position":[[600,4]]},"1844":{"position":[[12,4],[133,4]]}}}],["aren't",{"_index":3633,"t":{"1906":{"position":[[755,6]]}}}],["arg",{"_index":196,"t":{"23":{"position":[[0,5],[189,9]]},"29":{"position":[[91,9]]},"93":{"position":[[1786,6]]},"627":{"position":[[0,5],[189,9]]},"633":{"position":[[91,9]]}}}],["arg1",{"_index":3482,"t":{"1735":{"position":[[2096,4]]}}}],["argn",{"_index":3483,"t":{"1735":{"position":[[2105,5]]}}}],["argument",{"_index":221,"t":{"25":{"position":[[40,10]]},"33":{"position":[[114,10]]},"93":{"position":[[209,8],[336,8],[829,8],[892,8],[1600,8],[1638,9],[1747,8],[1972,9],[2215,8],[2447,8]]},"629":{"position":[[74,10]]},"637":{"position":[[114,10]]},"1481":{"position":[[78,8]]},"1715":{"position":[[203,9]]},"1732":{"position":[[22,8],[212,8],[239,8]]},"1735":{"position":[[931,9],[1081,8],[2057,8]]},"1752":{"position":[[115,8],[242,8]]},"1821":{"position":[[62,8]]}}}],["aris",{"_index":1698,"t":{"436":{"position":[[974,5]]}}}],["around",{"_index":2390,"t":{"1483":{"position":[[22,6]]},"1526":{"position":[[77,6]]}}}],["array",{"_index":3252,"t":{"1682":{"position":[[439,6]]},"1695":{"position":[[86,5]]},"1920":{"position":[[672,5]]}}}],["ascii",{"_index":359,"t":{"47":{"position":[[107,6],[146,6]]}}}],["ascii//translit",{"_index":363,"t":{"47":{"position":[[237,15]]}}}],["asid",{"_index":1845,"t":{"496":{"position":[[391,6]]}}}],["asset",{"_index":144,"t":{"17":{"position":[[55,6]]},"135":{"position":[[699,5]]},"1512":{"position":[[5,5],[41,5]]},"1538":{"position":[[39,5]]},"1801":{"position":[[45,5]]}}}],["asset/ecalc",{"_index":543,"t":{"91":{"position":[[515,11]]},"1675":{"position":[[68,11]]}}}],["asset_result_dto",{"_index":3131,"t":{"1669":{"position":[[183,16]]}}}],["assettsvprognosi",{"_index":2548,"t":{"1530":{"position":[[61,17]]}}}],["associ",{"_index":676,"t":{"107":{"position":[[353,10]]},"347":{"position":[[130,10]]},"614":{"position":[[2120,10],[2173,10]]},"860":{"position":[[46,10]]},"990":{"position":[[60,10]]},"1787":{"position":[[413,10]]}}}],["assum",{"_index":1258,"t":{"229":{"position":[[229,7]]},"291":{"position":[[71,7]]},"308":{"position":[[478,6],[550,6]]},"424":{"position":[[1807,7]]},"460":{"position":[[122,7]]},"487":{"position":[[327,7]]},"563":{"position":[[17,7]]},"567":{"position":[[3181,6]]},"576":{"position":[[533,7]]},"986":{"position":[[72,7]]},"1119":{"position":[[531,9]]},"1275":{"position":[[597,7]]},"1291":{"position":[[1387,7]]},"1723":{"position":[[1681,8]]}}}],["assumpt",{"_index":1700,"t":{"436":{"position":[[1004,11]]},"460":{"position":[[142,10]]},"567":{"position":[[3304,11]]},"576":{"position":[[77,11]]},"578":{"position":[[806,10],[873,10]]}}}],["asv",{"_index":1417,"t":{"287":{"position":[[542,3]]},"304":{"position":[[1434,3]]},"436":{"position":[[600,5]]},"442":{"position":[[509,3]]},"481":{"position":[[1344,3],[1514,3]]},"496":{"position":[[1531,3],[1835,3]]},"498":{"position":[[91,3],[320,4]]},"502":{"position":[[83,3],[190,4],[521,3],[737,3],[1464,5]]},"725":{"position":[[404,5]]},"1718":{"position":[[95,3],[194,4]]}}}],["asv_balanced_margin",{"_index":3441,"t":{"1718":{"position":[[383,20]]}}}],["asv_with_balanced_pressure_ratio",{"_index":3442,"t":{"1718":{"position":[[442,34]]}}}],["atom",{"_index":1926,"t":{"513":{"position":[[377,5]]}}}],["attach",{"_index":1603,"t":{"353":{"position":[[689,8]]},"1271":{"position":[[237,8],[318,8]]},"1275":{"position":[[127,8],[208,8]]}}}],["attempt",{"_index":1807,"t":{"481":{"position":[[406,7]]}}}],["attent",{"_index":1406,"t":{"285":{"position":[[152,9]]}}}],["attribut",{"_index":563,"t":{"91":{"position":[[1458,9]]},"355":{"position":[[271,10]]},"709":{"position":[[63,10]]},"786":{"position":[[111,10]]},"876":{"position":[[207,10]]},"897":{"position":[[130,10]]},"1009":{"position":[[101,10]]},"1334":{"position":[[0,10]]},"1419":{"position":[[112,10]]},"1425":{"position":[[4,10]]},"1669":{"position":[[447,10],[953,9]]},"1760":{"position":[[280,11]]}}}],["august",{"_index":3539,"t":{"1853":{"position":[[418,6]]}}}],["auto",{"_index":433,"t":{"60":{"position":[[414,4]]}}}],["autom",{"_index":2638,"t":{"1544":{"position":[[612,10],[652,10],[700,10],[745,10]]}}}],["automat",{"_index":428,"t":{"60":{"position":[[296,13]]},"225":{"position":[[847,13]]},"343":{"position":[[360,14]]},"428":{"position":[[282,13]]},"481":{"position":[[722,9]]},"1458":{"position":[[874,13]]},"1592":{"position":[[763,13]]}}}],["avail",{"_index":39,"t":{"7":{"position":[[297,9]]},"31":{"position":[[57,10]]},"75":{"position":[[486,9]]},"139":{"position":[[151,9]]},"141":{"position":[[96,9]]},"426":{"position":[[66,9]]},"442":{"position":[[1608,9]]},"466":{"position":[[656,9]]},"491":{"position":[[4,9]]},"502":{"position":[[370,9],[615,10],[1914,9],[2313,9],[2427,9],[2475,9],[2539,9]]},"513":{"position":[[571,9],[1188,9]]},"515":{"position":[[68,9]]},"521":{"position":[[153,9]]},"567":{"position":[[3721,9]]},"578":{"position":[[641,10],[697,10]]},"584":{"position":[[175,9]]},"635":{"position":[[57,10]]},"640":{"position":[[241,9]]},"884":{"position":[[363,9]]},"993":{"position":[[134,9]]},"1109":{"position":[[204,9]]},"1167":{"position":[[928,9]]},"1212":{"position":[[103,9]]},"1450":{"position":[[1133,9]]},"1458":{"position":[[212,9]]},"1718":{"position":[[217,9]]},"1771":{"position":[[312,9]]},"1801":{"position":[[32,9]]},"1803":{"position":[[256,9]]},"1821":{"position":[[7,9]]},"1830":{"position":[[174,9]]},"1943":{"position":[[723,9]]},"1945":{"position":[[963,9]]}}}],["averag",{"_index":496,"t":{"75":{"position":[[734,7],[908,7]]},"442":{"position":[[40,9]]},"567":{"position":[[2203,7]]},"717":{"position":[[520,9],[664,7],[747,7]]},"1295":{"position":[[431,7]]},"1821":{"position":[[261,7]]},"1846":{"position":[[209,7]]}}}],["avoid",{"_index":536,"t":{"91":{"position":[[38,5],[466,5]]},"153":{"position":[[219,5]]},"177":{"position":[[219,5]]},"203":{"position":[[219,5]]},"270":{"position":[[219,5]]},"291":{"position":[[374,5],[416,5]]},"504":{"position":[[428,5]]},"744":{"position":[[346,5]]},"1117":{"position":[[164,5]]},"1179":{"position":[[339,5]]},"1481":{"position":[[0,5]]},"1487":{"position":[[75,5]]},"1524":{"position":[[0,5]]},"1540":{"position":[[456,5]]},"1669":{"position":[[115,5]]},"1682":{"position":[[0,5]]},"1730":{"position":[[671,5]]},"1750":{"position":[[38,5]]},"1801":{"position":[[232,5]]},"1803":{"position":[[812,5]]},"1808":{"position":[[144,5]]},"1812":{"position":[[173,5],[353,5]]},"1815":{"position":[[206,5]]}}}],["awar",{"_index":735,"t":{"133":{"position":[[225,5]]}}}],["away",{"_index":2145,"t":{"744":{"position":[[409,4]]},"1179":{"position":[[402,4]]}}}],["awesom",{"_index":3656,"t":{"1908":{"position":[[486,7]]}}}],["b",{"_index":1019,"t":{"191":{"position":[[368,2],[1151,1],[1248,1],[1318,1],[1401,1],[1430,1]]},"199":{"position":[[121,1]]},"205":{"position":[[777,1]]},"209":{"position":[[42,2],[302,1],[339,1],[459,1],[556,1],[653,1],[736,1]]},"211":{"position":[[3548,1],[3601,1],[3688,1],[3941,1],[4060,1],[4354,1]]},"213":{"position":[[4201,1],[4321,1],[4418,1],[4524,1],[4647,1]]},"258":{"position":[[368,2],[1151,1],[1248,1],[1318,1],[1401,1],[1430,1]]},"266":{"position":[[121,1]]},"272":{"position":[[1011,1]]},"276":{"position":[[42,2],[302,1],[339,1],[459,1],[556,1],[653,1],[736,1]]},"278":{"position":[[3629,1],[3682,1],[3823,1],[4076,1],[4249,1],[4527,1]]},"280":{"position":[[5256,1],[5376,1],[5473,1],[5633,1],[5810,1]]},"1926":{"position":[[70,1]]},"1943":{"position":[[311,1]]},"1945":{"position":[[470,1]]}}}],["b02d68d",{"_index":3219,"t":{"1675":{"position":[[424,9]]}}}],["b066c74",{"_index":2964,"t":{"1647":{"position":[[172,9]]}}}],["b0e3466",{"_index":2960,"t":{"1645":{"position":[[157,9]]}}}],["b146eb4",{"_index":2561,"t":{"1533":{"position":[[194,9]]}}}],["b17e67c",{"_index":2641,"t":{"1544":{"position":[[670,9]]}}}],["b183db7",{"_index":2867,"t":{"1607":{"position":[[20,9]]}}}],["b1b4acf",{"_index":2913,"t":{"1620":{"position":[[275,9]]}}}],["b1c5b23",{"_index":3168,"t":{"1671":{"position":[[294,9]]}}}],["b1d4e88",{"_index":2397,"t":{"1483":{"position":[[174,9]]}}}],["b257567",{"_index":2976,"t":{"1651":{"position":[[312,9]]}}}],["b373726",{"_index":2839,"t":{"1596":{"position":[[725,9]]}}}],["b3a073b",{"_index":2837,"t":{"1596":{"position":[[688,9]]}}}],["b424176",{"_index":3171,"t":{"1671":{"position":[[387,9]]}}}],["b428c03",{"_index":2723,"t":{"1587":{"position":[[293,9]]}}}],["b44f8c8",{"_index":2870,"t":{"1609":{"position":[[67,9]]}}}],["b477b15",{"_index":3227,"t":{"1675":{"position":[[778,9]]}}}],["b4928ee",{"_index":2356,"t":{"1472":{"position":[[64,9]]}}}],["b580e3d",{"_index":3115,"t":{"1664":{"position":[[532,9]]}}}],["b5d3451",{"_index":2779,"t":{"1592":{"position":[[1246,9]]}}}],["b61a0f",{"_index":3125,"t":{"1669":{"position":[[47,9]]}}}],["b61d56e",{"_index":2373,"t":{"1474":{"position":[[372,9]]}}}],["b6d632e",{"_index":2530,"t":{"1526":{"position":[[463,9]]}}}],["b784f30",{"_index":2411,"t":{"1485":{"position":[[101,9]]}}}],["b78b035",{"_index":3392,"t":{"1705":{"position":[[73,9]]}}}],["b87fd2f",{"_index":2750,"t":{"1592":{"position":[[353,9]]}}}],["b904",{"_index":3405,"t":{"1705":{"position":[[496,4]]}}}],["ba48dcd",{"_index":2944,"t":{"1635":{"position":[[146,9]]}}}],["ba788fd",{"_index":3230,"t":{"1675":{"position":[[889,9]]}}}],["ba9235",{"_index":3147,"t":{"1669":{"position":[[704,9]]},"1673":{"position":[[314,9],[393,9]]}}}],["back",{"_index":1425,"t":{"287":{"position":[[873,4]]},"576":{"position":[[708,4]]},"721":{"position":[[289,4]]},"1283":{"position":[[875,4]]},"1940":{"position":[[25,4]]}}}],["backfil",{"_index":2304,"t":{"1283":{"position":[[829,9],[883,8]]}}}],["backward",{"_index":1449,"t":{"304":{"position":[[732,8]]},"1084":{"position":[[1019,9]]}}}],["bad",{"_index":3313,"t":{"1686":{"position":[[1116,3]]},"1906":{"position":[[1215,3]]}}}],["bad_fuel_ga",{"_index":1025,"t":{"199":{"position":[[56,13],[327,12]]},"205":{"position":[[831,12]]},"209":{"position":[[393,12]]},"213":{"position":[[474,12],[4255,12]]},"266":{"position":[[56,13],[327,12]]},"272":{"position":[[1044,12]]},"276":{"position":[[372,12]]},"280":{"position":[[690,12],[5289,12]]}}}],["badg",{"_index":3408,"t":{"1705":{"position":[[588,6]]}}}],["bar",{"_index":806,"t":{"143":{"position":[[733,3],[767,4]]},"167":{"position":[[733,3],[767,4]]},"191":{"position":[[913,3],[947,4]]},"231":{"position":[[1351,3],[2138,3],[2150,3]]},"258":{"position":[[913,3],[947,4]]},"310":{"position":[[54,3],[77,3]]},"321":{"position":[[816,6],[823,6]]},"479":{"position":[[318,3],[658,5],[919,5]]},"481":{"position":[[2079,5],[2492,5]]},"485":{"position":[[985,5],[1556,5],[2008,5]]},"675":{"position":[[406,5],[667,5]]},"738":{"position":[[922,5]]},"798":{"position":[[26,5]]},"1098":{"position":[[183,4],[605,3],[641,4],[670,4]]},"1121":{"position":[[201,4]]},"1222":{"position":[[135,5]]},"1224":{"position":[[99,4]]},"1273":{"position":[[337,5]]},"1277":{"position":[[436,5],[1007,5]]},"1324":{"position":[[316,4]]},"1878":{"position":[[640,4]]}}}],["bara",{"_index":896,"t":{"161":{"position":[[1604,4],[1635,4]]},"163":{"position":[[2178,4],[2209,4]]},"185":{"position":[[1604,4],[1635,4]]},"187":{"position":[[2178,4],[2209,4]]},"321":{"position":[[1863,6],[1915,6]]},"379":{"position":[[53,4],[77,4]]},"387":{"position":[[53,4],[77,4]]}}}],["barycentr",{"_index":1458,"t":{"304":{"position":[[1192,11]]},"317":{"position":[[286,11]]}}}],["base",{"_index":435,"t":{"60":{"position":[[459,5]]},"143":{"position":[[403,4]]},"157":{"position":[[192,4],[458,4],[489,4]]},"161":{"position":[[78,4],[150,4],[181,4]]},"163":{"position":[[1513,4],[1544,4]]},"167":{"position":[[403,4]]},"181":{"position":[[192,4],[458,4],[489,4]]},"185":{"position":[[78,4],[150,4],[181,4]]},"187":{"position":[[1513,4],[1544,4]]},"191":{"position":[[563,4],[612,4],[1227,4],[1276,4]]},"201":{"position":[[153,5],[193,5]]},"207":{"position":[[192,4]]},"209":{"position":[[190,4]]},"211":{"position":[[78,4],[3526,4]]},"217":{"position":[[22,5],[306,4]]},"231":{"position":[[2525,4],[2677,4],[2718,4],[2796,4],[2880,4]]},"233":{"position":[[2104,4],[2182,4],[2266,4]]},"258":{"position":[[563,4],[612,4],[1227,4],[1276,4]]},"268":{"position":[[153,5],[193,5]]},"274":{"position":[[192,4]]},"276":{"position":[[190,4]]},"278":{"position":[[3607,4]]},"287":{"position":[[30,5]]},"304":{"position":[[960,5],[1218,5]]},"381":{"position":[[135,5]]},"450":{"position":[[428,5],[610,5]]},"460":{"position":[[130,5],[197,5],[729,5]]},"466":{"position":[[203,6],[550,6]]},"487":{"position":[[875,5]]},"513":{"position":[[1161,5]]},"576":{"position":[[119,4],[1005,4]]},"582":{"position":[[529,4]]},"606":{"position":[[152,5]]},"614":{"position":[[558,4]]},"713":{"position":[[155,4]]},"1275":{"position":[[1145,5]]},"1415":{"position":[[135,5]]},"1417":{"position":[[333,5]]},"1669":{"position":[[1023,4]]},"1725":{"position":[[857,5]]},"1821":{"position":[[426,5],[445,6]]},"1898":{"position":[[351,5]]},"1916":{"position":[[102,5]]}}}],["base_production_load_mw",{"_index":1081,"t":{"203":{"position":[[528,24],[924,23],[1103,23]]},"213":{"position":[[2014,24]]},"270":{"position":[[528,24],[1291,23],[1470,23]]},"280":{"position":[[2605,24]]}}}],["base_profile.csv",{"_index":1023,"t":{"195":{"position":[[314,16]]},"213":{"position":[[56,16]]},"215":{"position":[[727,16]]},"262":{"position":[[314,16]]},"280":{"position":[[272,16]]},"282":{"position":[[727,16]]}}}],["baseload",{"_index":1284,"t":{"231":{"position":[[2777,8]]},"233":{"position":[[2163,8]]},"576":{"position":[[513,11]]}}}],["basi",{"_index":3603,"t":{"1896":{"position":[[138,6]]}}}],["basic",{"_index":271,"t":{"25":{"position":[[1390,5]]},"31":{"position":[[472,5]]},"629":{"position":[[1424,5]]},"635":{"position":[[472,5]]}}}],["bcc2f81",{"_index":3062,"t":{"1662":{"position":[[501,9]]}}}],["bce91cb",{"_index":3253,"t":{"1682":{"position":[[457,9]]}}}],["bd9d684",{"_index":2988,"t":{"1653":{"position":[[110,9]]}}}],["be",{"_index":54,"t":{"11":{"position":[[25,5]]},"64":{"position":[[810,5]]},"84":{"position":[[460,5]]},"91":{"position":[[2299,5]]},"93":{"position":[[2130,5]]},"135":{"position":[[649,5]]},"231":{"position":[[711,5],[2604,5]]},"240":{"position":[[129,6]]},"325":{"position":[[974,5]]},"477":{"position":[[117,5]]},"576":{"position":[[382,5]]},"580":{"position":[[188,5]]},"586":{"position":[[193,5]]},"717":{"position":[[479,5]]},"757":{"position":[[271,5]]},"771":{"position":[[338,5]]},"1291":{"position":[[212,5]]},"1454":{"position":[[250,5]]},"1718":{"position":[[114,5]]},"1832":{"position":[[170,5]]}}}],["be148ba",{"_index":2863,"t":{"1605":{"position":[[108,9]]}}}],["be435c3",{"_index":3420,"t":{"1705":{"position":[[1321,9]]}}}],["be9426a",{"_index":3349,"t":{"1692":{"position":[[48,9]]}}}],["beat",{"_index":3635,"t":{"1906":{"position":[[819,5]]}}}],["beauti",{"_index":3627,"t":{"1906":{"position":[[532,9]]}}}],["becom",{"_index":882,"t":{"157":{"position":[[338,8]]},"181":{"position":[[338,8]]},"207":{"position":[[373,8]]},"209":{"position":[[309,8]]},"211":{"position":[[3411,8],[3918,8]]},"274":{"position":[[366,8]]},"276":{"position":[[309,8]]},"278":{"position":[[3438,8],[4053,8]]},"304":{"position":[[1045,6]]},"1458":{"position":[[742,6]]},"1481":{"position":[[22,8]]},"1592":{"position":[[541,8]]},"1938":{"position":[[292,6]]}}}],["befor",{"_index":290,"t":{"31":{"position":[[37,6]]},"93":{"position":[[1434,6],[1623,6]]},"143":{"position":[[945,6]]},"161":{"position":[[2837,6]]},"167":{"position":[[945,6]]},"185":{"position":[[2837,6]]},"211":{"position":[[3314,6],[3821,6]]},"278":{"position":[[3341,6],[3956,6]]},"336":{"position":[[670,6],[729,6],[798,6],[890,6],[959,6]]},"479":{"position":[[629,6],[890,6]]},"481":{"position":[[2050,6],[2463,6]]},"485":{"position":[[956,6],[1527,6],[1979,6]]},"489":{"position":[[299,6]]},"498":{"position":[[1022,6]]},"580":{"position":[[0,6],[1078,6]]},"594":{"position":[[499,6]]},"635":{"position":[[37,6]]},"675":{"position":[[377,6],[638,6]]},"705":{"position":[[449,6]]},"738":{"position":[[893,6]]},"784":{"position":[[322,7]]},"821":{"position":[[370,7]]},"845":{"position":[[394,7]]},"946":{"position":[[455,6]]},"1034":{"position":[[492,6]]},"1096":{"position":[[1090,6]]},"1205":{"position":[[538,7]]},"1220":{"position":[[217,6]]},"1222":{"position":[[106,6]]},"1273":{"position":[[308,6]]},"1277":{"position":[[407,6],[978,6]]},"1283":{"position":[[490,6]]},"1407":{"position":[[195,8]]},"1417":{"position":[[784,7]]},"1450":{"position":[[300,6]]},"1454":{"position":[[92,7]]},"1477":{"position":[[31,7]]},"1487":{"position":[[241,6]]},"1673":{"position":[[51,6]]},"1705":{"position":[[925,6],[981,6]]},"1730":{"position":[[247,6]]},"1945":{"position":[[837,6]]}}}],["beforehand",{"_index":3478,"t":{"1735":{"position":[[195,11]]}}}],["begin",{"_index":1555,"t":{"325":{"position":[[2383,9]]},"1283":{"position":[[35,5]]}}}],["behav",{"_index":1109,"t":{"211":{"position":[[1932,7]]},"278":{"position":[[1954,7]]},"436":{"position":[[423,7]]},"725":{"position":[[139,7]]},"1533":{"position":[[220,6],[272,6]]}}}],["behavior",{"_index":633,"t":{"93":{"position":[[84,9],[2683,9]]},"396":{"position":[[4,8]]},"937":{"position":[[255,8]]},"1364":{"position":[[78,9]]}}}],["behaviour",{"_index":431,"t":{"60":{"position":[[356,9]]},"67":{"position":[[29,9]]},"537":{"position":[[809,9]]},"567":{"position":[[675,9]]},"717":{"position":[[366,10]]},"905":{"position":[[979,10]]},"1283":{"position":[[975,10]]}}}],["behind",{"_index":439,"t":{"62":{"position":[[141,6]]},"285":{"position":[[407,6]]},"424":{"position":[[2551,6]]}}}],["belong",{"_index":2088,"t":{"614":{"position":[[74,6]]}}}],["below",{"_index":411,"t":{"58":{"position":[[928,5],[1072,6]]},"64":{"position":[[610,6]]},"75":{"position":[[1016,5]]},"112":{"position":[[388,6]]},"117":{"position":[[132,6]]},"135":{"position":[[1379,6]]},"143":{"position":[[283,6]]},"161":{"position":[[2098,5]]},"167":{"position":[[283,6]]},"185":{"position":[[2098,5]]},"191":{"position":[[443,6]]},"217":{"position":[[186,6]]},"244":{"position":[[45,6]]},"250":{"position":[[285,6]]},"258":{"position":[[443,6]]},"287":{"position":[[304,5],[576,5]]},"325":{"position":[[1670,5]]},"481":{"position":[[763,5],[1005,5],[1087,5],[1220,5],[1392,5]]},"483":{"position":[[176,5]]},"496":{"position":[[687,6],[849,5]]},"502":{"position":[[777,6]]},"567":{"position":[[3999,5]]},"570":{"position":[[10,5],[194,5]]},"614":{"position":[[325,6],[1043,6]]},"683":{"position":[[26,5]]},"717":{"position":[[766,5]]},"937":{"position":[[339,6]]},"1084":{"position":[[1338,5]]},"1119":{"position":[[507,5]]},"1159":{"position":[[87,6]]},"1291":{"position":[[970,6]]},"1713":{"position":[[216,6],[538,6],[987,6]]},"1725":{"position":[[610,6]]},"1920":{"position":[[179,5]]},"1936":{"position":[[72,5]]}}}],["better",{"_index":2309,"t":{"1291":{"position":[[1014,6]]},"1742":{"position":[[82,6]]},"1906":{"position":[[545,6],[575,6],[607,6],[639,6],[672,6],[702,6],[1098,6],[1141,6]]}}}],["between",{"_index":225,"t":{"25":{"position":[[151,7]]},"33":{"position":[[215,7]]},"75":{"position":[[590,7]]},"161":{"position":[[350,7],[1990,7],[2236,7]]},"185":{"position":[[350,7],[1990,7],[2236,7]]},"211":{"position":[[557,7]]},"231":{"position":[[98,7]]},"242":{"position":[[900,7]]},"250":{"position":[[59,7]]},"272":{"position":[[763,7]]},"278":{"position":[[596,7]]},"287":{"position":[[56,7],[655,7]]},"325":{"position":[[118,7]]},"336":{"position":[[544,7]]},"361":{"position":[[322,7]]},"381":{"position":[[73,7],[122,7]]},"391":{"position":[[630,7]]},"408":{"position":[[24,7]]},"424":{"position":[[386,7],[2306,7]]},"456":{"position":[[278,7]]},"471":{"position":[[849,7]]},"489":{"position":[[837,7]]},"502":{"position":[[1725,7]]},"537":{"position":[[260,7]]},"539":{"position":[[212,7]]},"563":{"position":[[381,7]]},"567":{"position":[[1537,7]]},"629":{"position":[[185,7]]},"637":{"position":[[215,7]]},"725":{"position":[[542,7]]},"750":{"position":[[181,7]]},"812":{"position":[[43,7]]},"1017":{"position":[[550,7]]},"1084":{"position":[[819,7],[937,7],[1145,7],[1305,7]]},"1167":{"position":[[950,7]]},"1177":{"position":[[475,7]]},"1336":{"position":[[126,7]]},"1358":{"position":[[112,7]]},"1381":{"position":[[212,7]]},"1450":{"position":[[367,7],[711,7]]},"1651":{"position":[[344,7]]},"1723":{"position":[[1438,7]]},"1846":{"position":[[536,7]]}}}],["bewar",{"_index":1749,"t":{"450":{"position":[[8,6]]}}}],["bfs_tree",{"_index":2957,"t":{"1645":{"position":[[100,8]]}}}],["big",{"_index":3501,"t":{"1767":{"position":[[179,3]]}}}],["binari",{"_index":1021,"t":{"191":{"position":[[645,6]]},"258":{"position":[[645,6]]}}}],["bit",{"_index":3622,"t":{"1906":{"position":[[207,4]]}}}],["black",{"_index":2473,"t":{"1498":{"position":[[495,5]]}}}],["block",{"_index":327,"t":{"39":{"position":[[264,5],[324,6],[347,7]]},"1884":{"position":[[132,6]]}}}],["blockquote>

    text

    /statement/pumpstexttexttitletitletitletitletitletitlelink",{"_index":3702,"t":{"1914":{"position":[[1121,35]]}}}],["html",{"_index":3666,"t":{"1914":{"position":[[82,4],[1202,4],[1313,4]]}}}],["https://equinor.github.io/ecalc/docs/about/modelling/examples/advanc",{"_index":1402,"t":{"280":{"position":[[105,70]]}}}],["hull",{"_index":1457,"t":{"304":{"position":[[1144,4]]}}}],["hydrocarbon",{"_index":879,"t":{"155":{"position":[[31,11],[239,11]]},"179":{"position":[[31,11],[239,11]]},"205":{"position":[[31,11],[239,11]]},"229":{"position":[[110,11],[178,11]]},"272":{"position":[[31,11],[239,11]]},"325":{"position":[[1460,11]]},"338":{"position":[[234,12],[675,12]]},"1017":{"position":[[31,12],[374,11],[394,11]]},"1460":{"position":[[331,11]]}}}],["hydrocarbon_export_sm3_per_day",{"_index":851,"t":{"153":{"position":[[312,31]]},"163":{"position":[[623,31]]},"177":{"position":[[312,31]]},"187":{"position":[[623,31]]},"203":{"position":[[312,31]]},"213":{"position":[[1798,31]]},"270":{"position":[[312,31]]},"280":{"position":[[2389,31]]}}}],["hyperlink",{"_index":3700,"t":{"1914":{"position":[[1070,10]]}}}],["hyphen",{"_index":541,"t":{"91":{"position":[[344,6],[3465,6],[5026,6]]},"1750":{"position":[[344,6]]}}}],["i.",{"_index":542,"t":{"91":{"position":[[364,5],[5046,5]]},"285":{"position":[[212,5]]},"287":{"position":[[610,5]]},"291":{"position":[[411,4]]},"304":{"position":[[1333,5]]},"351":{"position":[[64,5]]},"456":{"position":[[222,4]]},"487":{"position":[[1236,4]]},"489":{"position":[[1680,4]]},"513":{"position":[[116,4]]},"578":{"position":[[417,4]]},"594":{"position":[[283,4]]},"705":{"position":[[252,4]]},"855":{"position":[[323,4]]},"946":{"position":[[247,4]]},"1017":{"position":[[145,6],[513,5]]},"1034":{"position":[[229,6]]},"1151":{"position":[[118,4]]},"1259":{"position":[[366,4]]},"1295":{"position":[[277,4]]},"1750":{"position":[[364,5]]},"1790":{"position":[[54,4]]},"1906":{"position":[[135,4]]}}}],["i_butan",{"_index":711,"t":{"124":{"position":[[384,9]]},"225":{"position":[[1227,9]]},"233":{"position":[[520,9]]},"469":{"position":[[624,9]]},"521":{"position":[[221,8]]},"523":{"position":[[285,9]]},"525":{"position":[[219,9]]},"640":{"position":[[309,8]]},"642":{"position":[[285,9]]},"644":{"position":[[219,9]]}}}],["i_pentan",{"_index":713,"t":{"124":{"position":[[436,10]]},"225":{"position":[[1282,10]]},"233":{"position":[[575,10]]},"469":{"position":[[661,10]]},"521":{"position":[[239,9]]},"523":{"position":[[337,10]]},"525":{"position":[[256,10]]},"640":{"position":[[327,9]]},"642":{"position":[[337,10]]},"644":{"position":[[256,10]]}}}],["iconv",{"_index":361,"t":{"47":{"position":[[159,6],[216,5]]}}}],["id",{"_index":2407,"t":{"1485":{"position":[[31,3]]},"1530":{"position":[[147,2]]},"1598":{"position":[[116,2]]},"1878":{"position":[[510,3]]},"1908":{"position":[[610,2]]}}}],["idea",{"_index":109,"t":{"13":{"position":[[695,4]]},"1906":{"position":[[1219,5],[1284,5],[1323,4]]}}}],["ident",{"_index":1269,"t":{"231":{"position":[[1102,10]]},"436":{"position":[[903,9]]},"498":{"position":[[427,10]]},"648":{"position":[[270,9]]}}}],["identifi",{"_index":798,"t":{"143":{"position":[[199,11]]},"167":{"position":[[199,11]]},"217":{"position":[[102,11]]}}}],["ie",{"_index":738,"t":{"133":{"position":[[285,3]]},"1283":{"position":[[897,3]]}}}],["ignor",{"_index":670,"t":{"100":{"position":[[158,7]]},"325":{"position":[[2352,8]]},"909":{"position":[[53,8]]},"1287":{"position":[[53,8]]},"1454":{"position":[[256,8]]},"1735":{"position":[[2228,6]]},"1839":{"position":[[232,8],[449,8]]},"1855":{"position":[[125,8],[228,8]]}}}],["illustr",{"_index":771,"t":{"135":{"position":[[1352,11]]},"149":{"position":[[377,13]]},"173":{"position":[[377,13]]},"353":{"position":[[172,11]]},"570":{"position":[[16,11]]}}}],["imag",{"_index":2040,"t":{"570":{"position":[[4,5]]},"1705":{"position":[[284,5]]},"1914":{"position":[[961,6],[1063,6]]}}}],["image](path/to/imag",{"_index":3696,"t":{"1914":{"position":[[989,21]]}}}],["img",{"_index":3697,"t":{"1914":{"position":[[1011,4]]}}}],["impact",{"_index":1756,"t":{"450":{"position":[[1465,8]]}}}],["implement",{"_index":567,"t":{"91":{"position":[[1722,11],[1800,14]]},"112":{"position":[[360,14]]},"117":{"position":[[104,14]]},"590":{"position":[[393,11]]},"1506":{"position":[[0,9]]},"1524":{"position":[[136,9]]},"1664":{"position":[[0,9]]},"1801":{"position":[[145,11]]},"1815":{"position":[[0,9]]},"1846":{"position":[[317,11]]},"1906":{"position":[[1173,14],[1232,14]]},"1908":{"position":[[472,9]]}}}],["impli",{"_index":2092,"t":{"614":{"position":[[908,5]]}}}],["implicit",{"_index":573,"t":{"91":{"position":[[2217,8]]},"1906":{"position":[[587,9]]}}}],["implicitli",{"_index":2180,"t":{"905":{"position":[[328,10]]},"1283":{"position":[[371,10]]}}}],["import",{"_index":308,"t":{"37":{"position":[[33,9]]},"58":{"position":[[660,9],[781,10],[1378,9]]},"60":{"position":[[382,9]]},"64":{"position":[[717,9]]},"240":{"position":[[1068,9]]},"323":{"position":[[161,10]]},"446":{"position":[[267,9]]},"450":{"position":[[1741,9]]},"498":{"position":[[189,9]]},"521":{"position":[[469,9],[593,10]]},"640":{"position":[[557,9],[681,10]]},"717":{"position":[[0,9]]},"784":{"position":[[190,9]]},"821":{"position":[[137,9]]},"845":{"position":[[158,9]]},"874":{"position":[[127,9]]},"1017":{"position":[[525,9]]},"1417":{"position":[[198,9]]},"1474":{"position":[[364,7]]},"1512":{"position":[[89,6]]},"1596":{"position":[[592,6]]},"1830":{"position":[[118,9]]}}}],["improv",{"_index":2336,"t":{"1458":{"position":[[550,7]]},"1462":{"position":[[79,7]]},"1483":{"position":[[0,7]]},"1510":{"position":[[58,7]]},"1528":{"position":[[101,7]]},"1533":{"position":[[127,7]]},"1596":{"position":[[359,7]]},"1651":{"position":[[216,7]]},"1675":{"position":[[434,7],[531,7]]},"1686":{"position":[[998,7],[1089,7]]},"1688":{"position":[[179,7]]},"1728":{"position":[[437,8]]},"1737":{"position":[[901,8]]},"1744":{"position":[[0,8]]},"1748":{"position":[[41,9]]},"1758":{"position":[[41,9]]},"1796":{"position":[[0,7]]},"1808":{"position":[[0,7]]},"1815":{"position":[[309,7],[354,7]]},"1834":{"position":[[41,9]]},"1846":{"position":[[722,8]]},"1851":{"position":[[439,8]]},"1858":{"position":[[383,8]]},"1867":{"position":[[265,7]]}}}],["in",{"_index":1951,"t":{"527":{"position":[[493,3]]},"1332":{"position":[[407,3]]}}}],["includ",{"_index":295,"t":{"33":{"position":[[58,9]]},"91":{"position":[[507,7],[4064,7],[4282,7],[4496,7],[4749,7]]},"93":{"position":[[13,8]]},"97":{"position":[[28,7],[214,7]]},"129":{"position":[[211,9]]},"137":{"position":[[107,8],[203,7]]},"240":{"position":[[554,8]]},"248":{"position":[[162,8]]},"250":{"position":[[201,7]]},"291":{"position":[[205,8]]},"325":{"position":[[719,9]]},"373":{"position":[[209,9]]},"396":{"position":[[130,9]]},"436":{"position":[[526,7]]},"506":{"position":[[59,7]]},"533":{"position":[[71,7]]},"570":{"position":[[117,8]]},"576":{"position":[[974,8]]},"637":{"position":[[58,9]]},"725":{"position":[[330,7]]},"821":{"position":[[31,8]]},"837":{"position":[[31,8]]},"884":{"position":[[194,9]]},"905":{"position":[[258,8]]},"1017":{"position":[[498,8]]},"1052":{"position":[[12,8],[64,8]]},"1054":{"position":[[0,8],[102,8]]},"1056":{"position":[[0,8],[96,8]]},"1058":{"position":[[0,8],[179,8]]},"1060":{"position":[[0,8],[98,8]]},"1283":{"position":[[301,8]]},"1454":{"position":[[13,8]]},"1526":{"position":[[105,9]]},"1544":{"position":[[314,7]]},"1612":{"position":[[0,7]]},"1616":{"position":[[105,7]]},"1645":{"position":[[32,7]]},"1651":{"position":[[506,7]]},"1735":{"position":[[88,7],[121,9]]},"1737":{"position":[[1011,8]]},"1767":{"position":[[246,8]]},"1796":{"position":[[80,8]]},"1812":{"position":[[86,9]]},"1826":{"position":[[181,8]]},"1846":{"position":[[111,8]]},"1851":{"position":[[256,8]]},"1862":{"position":[[24,7],[210,7]]},"1898":{"position":[[289,7]]},"1916":{"position":[[518,10]]}}}],["incom",{"_index":3659,"t":{"1908":{"position":[[656,8]]}}}],["incomprehens",{"_index":299,"t":{"35":{"position":[[79,16]]}}}],["incompress",{"_index":1989,"t":{"563":{"position":[[25,15]]}}}],["inconsist",{"_index":3367,"t":{"1695":{"position":[[141,12]]},"1808":{"position":[[150,12]]}}}],["incorrect",{"_index":2188,"t":{"905":{"position":[[1057,10]]},"1283":{"position":[[1182,10]]},"1725":{"position":[[747,9]]}}}],["incorrectli",{"_index":2037,"t":{"567":{"position":[[3188,12]]},"1723":{"position":[[1696,14]]},"1846":{"position":[[21,11]]},"1860":{"position":[[16,11]]}}}],["increas",{"_index":576,"t":{"91":{"position":[[2316,9]]},"225":{"position":[[885,8]]},"456":{"position":[[196,8],[338,8]]},"462":{"position":[[505,8]]},"479":{"position":[[1281,8]]},"481":{"position":[[1314,10],[1484,10],[2923,8]]},"496":{"position":[[118,8],[1106,8],[1238,8],[1283,10],[1435,9],[1449,10],[1557,8],[1729,10]]},"500":{"position":[[967,9],[1111,9]]},"502":{"position":[[863,10],[1245,10],[1374,10],[2273,9],[2514,9],[2588,8]]},"513":{"position":[[848,9]]},"567":{"position":[[491,10]]},"608":{"position":[[545,8]]},"725":{"position":[[626,8]]},"1137":{"position":[[475,8]]},"1291":{"position":[[1031,8]]},"1846":{"position":[[461,8]]},"1851":{"position":[[493,8]]}}}],["indent",{"_index":307,"t":{"37":{"position":[[13,11],[121,11]]},"43":{"position":[[39,11]]},"323":{"position":[[124,12],[141,11],[200,11]]},"670":{"position":[[43,9]]},"1914":{"position":[[455,8]]}}}],["independ",{"_index":1677,"t":{"424":{"position":[[1881,14]]},"460":{"position":[[246,13]]},"489":{"position":[[472,14],[1634,11]]},"567":{"position":[[3394,13]]},"576":{"position":[[560,11]]},"1415":{"position":[[159,12]]},"1894":{"position":[[207,11]]}}}],["index",{"_index":2148,"t":{"744":{"position":[[1094,5]]},"1179":{"position":[[1087,5]]}}}],["indic",{"_index":340,"t":{"41":{"position":[[237,8]]},"73":{"position":[[120,10]]},"84":{"position":[[146,8]]},"325":{"position":[[2278,8]]},"383":{"position":[[617,9]]},"614":{"position":[[1468,8],[1540,8],[1621,8],[1733,8],[1805,8],[1863,8]]},"1725":{"position":[[153,9],[207,9]]}}}],["individu",{"_index":132,"t":{"13":{"position":[[1094,10]]},"135":{"position":[[1132,10]]},"353":{"position":[[471,10]]},"456":{"position":[[377,12]]},"498":{"position":[[309,10]]},"502":{"position":[[179,10]]},"582":{"position":[[282,10]]},"656":{"position":[[65,10]]},"725":{"position":[[660,10]]},"1072":{"position":[[65,10]]},"1220":{"position":[[65,10]]},"1450":{"position":[[149,10]]},"1718":{"position":[[183,10]]},"1846":{"position":[[400,12]]}}}],["individual_asv_pressur",{"_index":1800,"t":{"479":{"position":[[199,24]]},"481":{"position":[[3051,24]]},"491":{"position":[[68,23]]},"502":{"position":[[391,23],[1934,24]]},"1212":{"position":[[200,23]]},"1214":{"position":[[157,24]]},"1216":{"position":[[96,23]]},"1718":{"position":[[404,23]]}}}],["individual_asv_r",{"_index":1801,"t":{"479":{"position":[[224,19]]},"481":{"position":[[3076,19]]},"491":{"position":[[92,19]]},"493":{"position":[[572,19],[640,19]]},"502":{"position":[[415,19],[2205,20]]},"740":{"position":[[679,19],[747,19]]},"833":{"position":[[220,20]]},"835":{"position":[[218,19]]},"1096":{"position":[[833,20],[920,20]]},"1212":{"position":[[224,19]]},"1214":{"position":[[182,19]]},"1279":{"position":[[404,19],[472,19]]},"1409":{"position":[[218,20]]},"1411":{"position":[[218,19]]},"1718":{"position":[[349,19]]},"1823":{"position":[[130,19],[163,19]]}}}],["infeas",{"_index":1432,"t":{"287":{"position":[[1224,10]]},"1034":{"position":[[218,10],[621,11]]}}}],["infinit",{"_index":3437,"t":{"1713":{"position":[[1619,8]]}}}],["influenc",{"_index":1857,"t":{"496":{"position":[[1306,9],[1607,11]]}}}],["influence_time_vector",{"_index":235,"t":{"25":{"position":[[398,21]]},"31":{"position":[[895,21]]},"58":{"position":[[282,22],[556,22]]},"75":{"position":[[140,21]]},"531":{"position":[[128,22],[357,22]]},"533":{"position":[[31,21]]},"535":{"position":[[271,22]]},"629":{"position":[[432,21]]},"635":{"position":[[895,21]]},"1062":{"position":[[14,21]]},"1064":{"position":[[200,21]]},"1066":{"position":[[0,22]]},"1336":{"position":[[382,21]]},"1338":{"position":[[206,22]]}}}],["info",{"_index":0,"t":{"2":{"position":[[0,4]]},"19":{"position":[[0,4]]},"23":{"position":[[58,4],[292,5]]},"627":{"position":[[58,4],[270,5]]},"1544":{"position":[[327,4]]},"1594":{"position":[[439,4]]},"1631":{"position":[[26,4]]},"1865":{"position":[[129,4]]},"1878":{"position":[[424,4]]},"1886":{"position":[[355,4]]},"1916":{"position":[[391,4]]},"1920":{"position":[[271,4]]}}}],["inform",{"_index":219,"t":{"23":{"position":[[672,11]]},"29":{"position":[[16,11]]},"91":{"position":[[2117,12]]},"131":{"position":[[84,11]]},"135":{"position":[[114,11]]},"244":{"position":[[89,12]]},"460":{"position":[[517,12]]},"504":{"position":[[802,12]]},"513":{"position":[[71,11]]},"567":{"position":[[168,11],[3624,11]]},"576":{"position":[[1266,12]]},"627":{"position":[[685,11]]},"633":{"position":[[16,11]]},"905":{"position":[[607,11]]},"1283":{"position":[[634,11]]},"1415":{"position":[[172,11]]},"1462":{"position":[[156,12]]},"1684":{"position":[[128,11]]},"1713":{"position":[[2143,12]]},"1844":{"position":[[251,11]]},"1896":{"position":[[213,11]]},"1916":{"position":[[342,11]]}}}],["ingo",{"_index":1810,"t":{"483":{"position":[[101,7]]},"485":{"position":[[373,7],[481,7],[853,7]]},"487":{"position":[[132,7],[562,7],[732,7]]},"493":{"position":[[139,7],[202,7]]},"738":{"position":[[145,7],[253,7]]},"740":{"position":[[144,7],[207,7]]},"1096":{"position":[[576,7]]},"1275":{"position":[[832,7],[1002,7]]},"1277":{"position":[[304,7]]},"1310":{"position":[[303,7]]},"1316":{"position":[[247,7]]},"1318":{"position":[[140,7],[248,7]]},"1320":{"position":[[139,7],[202,7]]}}}],["ingoing/outgo",{"_index":3450,"t":{"1725":{"position":[[15,16]]}}}],["inherit",{"_index":1641,"t":{"391":{"position":[[497,7]]},"1598":{"position":[[53,11]]},"1904":{"position":[[229,11]]}}}],["init",{"_index":2757,"t":{"1592":{"position":[[653,4]]},"1662":{"position":[[4,4]]}}}],["initi",{"_index":3421,"t":{"1708":{"position":[[0,7]]},"1725":{"position":[[1097,11]]}}}],["inject",{"_index":92,"t":{"13":{"position":[[439,9]]},"143":{"position":[[465,9],[539,9],[685,9],[782,9],[877,9]]},"157":{"position":[[218,9],[258,9],[287,9],[545,9],[728,9]]},"161":{"position":[[244,9],[366,9],[567,9],[1650,9],[1722,9],[1837,9],[1941,9],[1998,8],[2545,9]]},"163":{"position":[[1615,9],[2232,9]]},"167":{"position":[[465,9],[539,9],[685,9],[782,9],[877,9]]},"181":{"position":[[218,9],[258,9],[287,9],[545,9],[728,9]]},"185":{"position":[[244,9],[366,9],[567,9],[1650,9],[1722,9],[1837,9],[1941,9],[1998,8],[2545,9]]},"187":{"position":[[1615,9],[2232,9]]},"191":{"position":[[865,9],[962,9],[1059,9]]},"203":{"position":[[1165,9]]},"207":{"position":[[218,9],[286,9],[793,9]]},"211":{"position":[[165,9],[1499,9],[1593,9],[1815,9],[2037,9],[2828,9]]},"213":{"position":[[3127,9]]},"217":{"position":[[517,9],[587,9]]},"231":{"position":[[748,9]]},"258":{"position":[[865,9],[962,9],[1059,9]]},"270":{"position":[[1532,9]]},"274":{"position":[[279,9],[786,9]]},"278":{"position":[[166,9],[1521,9],[1615,9],[1837,9],[2059,9],[2842,9]]},"280":{"position":[[4123,9]]},"353":{"position":[[885,9]]},"424":{"position":[[2507,9]]},"489":{"position":[[2045,9]]},"498":{"position":[[1057,10]]},"509":{"position":[[23,9],[58,9],[108,9]]},"614":{"position":[[709,9]]}}}],["injection_compressor",{"_index":1611,"t":{"365":{"position":[[211,20]]},"652":{"position":[[211,20]]},"668":{"position":[[211,20]]},"746":{"position":[[211,20]]},"1186":{"position":[[211,20]]}}}],["injection_compressor_refer",{"_index":1612,"t":{"365":{"position":[[250,30]]},"652":{"position":[[250,30]]},"668":{"position":[[250,30]]},"746":{"position":[[250,30]]},"1186":{"position":[[250,30]]}}}],["inlet",{"_index":1423,"t":{"287":{"position":[[682,5]]},"304":{"position":[[206,5]]},"355":{"position":[[475,5]]},"424":{"position":[[860,5]]},"442":{"position":[[1713,5],[1730,6]]},"458":{"position":[[182,6]]},"464":{"position":[[91,5],[275,6],[455,6]]},"466":{"position":[[1035,6]]},"479":{"position":[[425,6],[685,6]]},"481":{"position":[[1763,6],[2175,6]]},"485":{"position":[[279,5],[681,6],[1087,6],[1712,6]]},"487":{"position":[[1132,5]]},"491":{"position":[[281,5]]},"496":{"position":[[1078,5],[1132,5],[1323,5]]},"498":{"position":[[1125,5]]},"500":{"position":[[910,5],[941,5]]},"567":{"position":[[1890,5],[2181,5],[2889,5],[4045,5]]},"576":{"position":[[723,5]]},"608":{"position":[[194,6]]},"675":{"position":[[173,6],[433,6]]},"728":{"position":[[183,6]]},"733":{"position":[[185,6]]},"738":{"position":[[453,6]]},"752":{"position":[[185,6]]},"1072":{"position":[[160,5]]},"1074":{"position":[[80,6]]},"1096":{"position":[[404,6],[623,6]]},"1121":{"position":[[253,6]]},"1153":{"position":[[379,6]]},"1220":{"position":[[157,5]]},"1273":{"position":[[104,6]]},"1277":{"position":[[132,6],[538,6]]},"1310":{"position":[[131,6],[352,6]]},"1450":{"position":[[379,5],[418,5]]},"1452":{"position":[[57,5],[360,5]]},"1667":{"position":[[15,5]]},"1673":{"position":[[36,5]]},"1682":{"position":[[186,5]]},"1723":{"position":[[1088,6]]},"1858":{"position":[[14,5],[153,5]]}}}],["inlet/outlet",{"_index":1888,"t":{"504":{"position":[[350,12]]},"1450":{"position":[[277,12]]},"1487":{"position":[[4,12]]}}}],["inlet_temperatur",{"_index":1077,"t":{"201":{"position":[[1243,18],[1328,18],[1413,18]]},"213":{"position":[[1534,18],[1619,18],[1704,18]]},"225":{"position":[[1737,18]]},"233":{"position":[[1030,18]]},"268":{"position":[[1243,18],[1328,18],[1413,18],[1603,18],[1688,18]]},"280":{"position":[[1750,18],[1835,18],[1920,18],[2110,18],[2195,18]]},"448":{"position":[[252,18]]},"458":{"position":[[163,18]]},"464":{"position":[[256,18],[436,18]]},"466":{"position":[[1016,18]]},"469":{"position":[[860,18]]},"471":{"position":[[478,18]]},"473":{"position":[[775,18],[853,18]]},"475":{"position":[[474,18]]},"479":{"position":[[406,18],[666,18]]},"481":{"position":[[1744,18],[2156,18]]},"485":{"position":[[662,18],[1068,18],[1693,18]]},"493":{"position":[[317,18],[397,18],[453,18],[713,18]]},"608":{"position":[[175,18]]},"610":{"position":[[148,18]]},"675":{"position":[[154,18],[414,18]]},"728":{"position":[[164,18]]},"730":{"position":[[126,18]]},"733":{"position":[[166,18]]},"735":{"position":[[128,18]]},"738":{"position":[[434,18]]},"740":{"position":[[322,18],[453,18],[560,18],[820,18]]},"752":{"position":[[166,18]]},"754":{"position":[[128,18]]},"1070":{"position":[[26,17]]},"1074":{"position":[[61,18]]},"1076":{"position":[[65,18]]},"1096":{"position":[[385,18],[604,18]]},"1121":{"position":[[234,18]]},"1153":{"position":[[360,18]]},"1155":{"position":[[225,18]]},"1269":{"position":[[29,17]]},"1273":{"position":[[85,18]]},"1277":{"position":[[113,18],[519,18]]},"1279":{"position":[[149,18],[229,18],[285,18],[545,18]]},"1310":{"position":[[112,18],[333,18]]},"1312":{"position":[[148,18]]},"1723":{"position":[[1069,18]]}}}],["inlin",{"_index":3466,"t":{"1728":{"position":[[503,6]]},"1914":{"position":[[513,8]]}}}],["inner",{"_index":35,"t":{"7":{"position":[[219,6]]}}}],["innov",{"_index":58,"t":{"11":{"position":[[87,10]]}}}],["input",{"_index":223,"t":{"25":{"position":[[106,7],[123,6],[381,5],[1227,5]]},"31":{"position":[[878,5]]},"33":{"position":[[170,7],[187,6]]},"37":{"position":[[92,6]]},"41":{"position":[[206,6]]},"60":{"position":[[344,6]]},"75":{"position":[[101,5]]},"91":{"position":[[2639,5],[2783,5],[5117,5],[5198,5]]},"97":{"position":[[198,5]]},"100":{"position":[[67,5]]},"102":{"position":[[65,5]]},"112":{"position":[[17,5],[560,5]]},"133":{"position":[[279,5],[335,5],[505,5]]},"137":{"position":[[284,5]]},"145":{"position":[[61,6],[108,5],[137,5]]},"149":{"position":[[15,5],[478,5],[520,5]]},"161":{"position":[[1791,5]]},"169":{"position":[[61,6],[108,5],[137,5]]},"173":{"position":[[15,5],[478,5],[520,5]]},"185":{"position":[[1791,5]]},"193":{"position":[[61,6],[108,5],[137,5]]},"197":{"position":[[15,5]]},"211":{"position":[[735,5]]},"219":{"position":[[65,5],[80,6],[93,6],[110,5]]},"225":{"position":[[277,5],[355,5]]},"229":{"position":[[73,6]]},"231":{"position":[[1894,5],[1995,8]]},"240":{"position":[[136,5],[163,5],[267,5],[435,5],[579,5],[659,5],[835,6],[980,6],[1078,6]]},"242":{"position":[[106,5],[233,5],[318,6],[389,5]]},"244":{"position":[[14,5],[66,6]]},"246":{"position":[[13,5],[126,5],[197,5]]},"260":{"position":[[61,6],[108,5],[137,5]]},"264":{"position":[[15,5]]},"278":{"position":[[774,5]]},"291":{"position":[[266,5]]},"304":{"position":[[312,8],[1164,5]]},"321":{"position":[[582,5]]},"325":{"position":[[53,6],[211,5],[290,5],[661,5],[779,5]]},"328":{"position":[[42,7]]},"334":{"position":[[295,5]]},"351":{"position":[[574,5]]},"357":{"position":[[169,6]]},"363":{"position":[[221,7]]},"373":{"position":[[111,7]]},"375":{"position":[[120,6]]},"383":{"position":[[152,7]]},"393":{"position":[[158,5]]},"403":{"position":[[25,5]]},"410":{"position":[[186,5],[221,5]]},"412":{"position":[[128,6]]},"418":{"position":[[157,5],[257,5]]},"424":{"position":[[965,5],[1000,8]]},"428":{"position":[[330,5]]},"434":{"position":[[311,5]]},"436":{"position":[[494,5],[764,5]]},"440":{"position":[[614,5]]},"442":{"position":[[969,5],[1060,5],[1792,8]]},"450":{"position":[[414,5],[623,8],[703,5]]},"456":{"position":[[145,6]]},"460":{"position":[[738,5]]},"466":{"position":[[213,5],[560,5]]},"500":{"position":[[181,6],[235,7],[305,6],[357,7]]},"504":{"position":[[123,7]]},"527":{"position":[[111,6],[936,5]]},"529":{"position":[[185,6]]},"531":{"position":[[236,5]]},"533":{"position":[[13,5]]},"537":{"position":[[660,5],[695,5]]},"543":{"position":[[191,5]]},"547":{"position":[[313,5]]},"574":{"position":[[109,8]]},"580":{"position":[[145,5],[1163,5]]},"586":{"position":[[104,5],[427,5]]},"590":{"position":[[110,5],[220,6]]},"594":{"position":[[13,5]]},"606":{"position":[[165,5]]},"614":{"position":[[244,5],[353,5]]},"629":{"position":[[140,7],[157,6],[415,5],[1261,5]]},"635":{"position":[[878,5]]},"637":{"position":[[170,7],[187,6]]},"656":{"position":[[124,5]]},"666":{"position":[[147,7]]},"689":{"position":[[162,6]]},"701":{"position":[[51,5]]},"705":{"position":[[13,5]]},"717":{"position":[[44,5],[148,5]]},"721":{"position":[[179,5],[365,6]]},"725":{"position":[[298,5]]},"897":{"position":[[67,6]]},"899":{"position":[[110,6]]},"909":{"position":[[9,5]]},"921":{"position":[[107,6]]},"931":{"position":[[31,5],[158,5],[243,6],[314,5]]},"933":{"position":[[13,5],[126,5],[197,5],[395,6]]},"939":{"position":[[14,5]]},"946":{"position":[[13,5]]},"952":{"position":[[49,5]]},"1064":{"position":[[37,5]]},"1072":{"position":[[124,5]]},"1084":{"position":[[119,6],[545,5]]},"1109":{"position":[[133,8]]},"1119":{"position":[[199,8],[306,5]]},"1141":{"position":[[61,5],[208,5]]},"1220":{"position":[[124,5]]},"1244":{"position":[[118,7]]},"1287":{"position":[[9,5]]},"1291":{"position":[[251,5],[635,5],[1074,6],[1344,5]]},"1293":{"position":[[254,5]]},"1324":{"position":[[304,8]]},"1332":{"position":[[25,6]]},"1334":{"position":[[119,5]]},"1379":{"position":[[333,8]]},"1458":{"position":[[320,5]]},"1492":{"position":[[171,5]]},"1498":{"position":[[29,5]]},"1526":{"position":[[444,5]]},"1533":{"position":[[171,5],[296,5]]},"1629":{"position":[[231,5]]},"1640":{"position":[[56,5]]},"1643":{"position":[[192,5]]},"1651":{"position":[[292,5],[468,5]]},"1664":{"position":[[79,5],[307,5]]},"1667":{"position":[[86,5]]},"1671":{"position":[[154,5]]},"1675":{"position":[[481,5],[579,5]]},"1705":{"position":[[562,5]]},"1725":{"position":[[909,6],[987,6]]},"1737":{"position":[[848,5]]},"1793":{"position":[[281,5],[801,5],[918,6]]},"1796":{"position":[[45,5]]},"1803":{"position":[[678,5]]},"1812":{"position":[[133,5]]},"1826":{"position":[[215,5]]},"1839":{"position":[[491,5]]},"1851":{"position":[[77,5],[407,5]]},"1855":{"position":[[50,5]]},"1858":{"position":[[58,5]]},"1862":{"position":[[194,5]]},"1867":{"position":[[307,5]]},"1869":{"position":[[56,5]]}}}],["input;.is_valid",{"_index":756,"t":{"135":{"position":[[249,15]]}}}],["name>:.yml",{"_index":364,"t":{"47":{"position":[[256,31],[360,32]]}}}],["next",{"_index":765,"t":{"135":{"position":[[913,4]]},"336":{"position":[[570,4]]},"487":{"position":[[992,4]]},"670":{"position":[[30,4]]},"1084":{"position":[[1169,4]]},"1275":{"position":[[1262,4]]},"1585":{"position":[[54,4]]},"1732":{"position":[[101,4]]},"1737":{"position":[[103,4]]}}}],["nice",{"_index":3495,"t":{"1742":{"position":[[60,4]]}}}],["nitrogen",{"_index":707,"t":{"124":{"position":[[253,9]]},"225":{"position":[[1100,9]]},"233":{"position":[[393,9]]},"469":{"position":[[539,9]]},"513":{"position":[[313,8]]},"521":{"position":[[185,8]]},"523":{"position":[[154,9]]},"525":{"position":[[134,9]]},"640":{"position":[[273,8]]},"642":{"position":[[154,9]]},"644":{"position":[[134,9]]}}}],["nmvoc",{"_index":3292,"t":{"1686":{"position":[[129,5]]},"1793":{"position":[[773,5],[783,5]]},"1846":{"position":[[0,5],[150,6]]}}}],["nnn",{"_index":2011,"t":{"567":{"position":[[1243,3],[1792,3]]}}}],["no_flow",{"_index":3051,"t":{"1662":{"position":[[239,7]]}}}],["no_flow_r",{"_index":3526,"t":{"1844":{"position":[[22,12]]}}}],["node",{"_index":1545,"t":{"325":{"position":[[437,4]]},"504":{"position":[[309,4]]},"1587":{"position":[[376,4]]},"1596":{"position":[[213,4],[244,4]]},"1643":{"position":[[85,5]]},"1653":{"position":[[265,5]]},"1662":{"position":[[536,4]]},"1878":{"position":[[382,5],[489,5]]}}}],["nodejs.org",{"_index":3555,"t":{"1878":{"position":[[402,10]]}}}],["non",{"_index":425,"t":{"60":{"position":[[58,3]]},"325":{"position":[[1811,3]]},"336":{"position":[[839,3]]},"1713":{"position":[[1173,3],[1615,3]]},"1723":{"position":[[1457,3]]},"1737":{"position":[[188,3]]}}}],["none",{"_index":245,"t":{"25":{"position":[[551,5]]},"31":{"position":[[1048,5]]},"41":{"position":[[317,4],[351,4]]},"73":{"position":[[136,4]]},"612":{"position":[[135,4]]},"629":{"position":[[585,5]]},"635":{"position":[[1048,5]]},"646":{"position":[[96,4]]},"662":{"position":[[121,4]]},"677":{"position":[[112,4]]},"685":{"position":[[126,4]]},"693":{"position":[[113,4]]},"699":{"position":[[89,4]]},"715":{"position":[[124,4]]},"742":{"position":[[138,4]]},"792":{"position":[[151,4]]},"810":{"position":[[102,4]]},"821":{"position":[[132,4]]},"837":{"position":[[161,4]]},"895":{"position":[[117,4]]},"903":{"position":[[42,4],[47,4]]},"911":{"position":[[71,4]]},"919":{"position":[[79,4]]},"929":{"position":[[55,4]]},"1070":{"position":[[90,4]]},"1565":{"position":[[107,4]]},"1592":{"position":[[920,4]]},"1728":{"position":[[121,4]]},"1785":{"position":[[37,4]]},"1848":{"position":[[0,4]]}}}],["none|year|month|day",{"_index":228,"t":{"25":{"position":[[239,22]]},"31":{"position":[[736,22]]},"629":{"position":[[273,22]]},"635":{"position":[[736,22]]}}}],["normal",{"_index":1755,"t":{"450":{"position":[[1436,8]]},"521":{"position":[[525,10]]},"614":{"position":[[2111,8],[2164,8]]},"640":{"position":[[613,10]]},"905":{"position":[[563,8]]},"1283":{"position":[[591,8]]}}}],["notat",{"_index":3257,"t":{"1682":{"position":[[598,8]]}}}],["note",{"_index":38,"t":{"7":{"position":[[255,4]]},"149":{"position":[[391,4]]},"173":{"position":[[391,4]]},"197":{"position":[[277,4]]},"205":{"position":[[417,4]]},"242":{"position":[[0,4]]},"248":{"position":[[359,4]]},"264":{"position":[[277,4]]},"272":{"position":[[417,4]]},"291":{"position":[[131,4]]},"321":{"position":[[546,4],[551,4]]},"332":{"position":[[0,4]]},"336":{"position":[[624,4]]},"347":{"position":[[0,4]]},"401":{"position":[[0,4]]},"406":{"position":[[0,4]]},"418":{"position":[[0,4]]},"424":{"position":[[982,5]]},"436":{"position":[[716,4]]},"442":{"position":[[1579,4]]},"446":{"position":[[280,4]]},"489":{"position":[[0,4]]},"502":{"position":[[446,4]]},"527":{"position":[[0,4]]},"549":{"position":[[0,4]]},"614":{"position":[[339,4],[841,4]]},"648":{"position":[[89,4]]},"670":{"position":[[0,4]]},"717":{"position":[[641,4]]},"744":{"position":[[1075,4]]},"812":{"position":[[122,4],[127,4]]},"862":{"position":[[0,4]]},"868":{"position":[[0,4]]},"1096":{"position":[[0,4]]},"1179":{"position":[[1068,4]]},"1259":{"position":[[462,4]]},"1275":{"position":[[282,4]]},"1291":{"position":[[1164,4]]},"1293":{"position":[[13,5],[232,4]]},"1295":{"position":[[115,4]]},"1306":{"position":[[32,4]]},"1324":{"position":[[270,4]]},"1914":{"position":[[1166,4]]}}}],["notebook",{"_index":2401,"t":{"1483":{"position":[[226,9]]}}}],["noth",{"_index":1095,"t":{"211":{"position":[[656,7]]},"278":{"position":[[695,7]]}}}],["now",{"_index":367,"t":{"47":{"position":[[320,3]]},"58":{"position":[[450,4],[801,3]]},"60":{"position":[[369,3],[582,3]]},"62":{"position":[[87,3],[253,3]]},"73":{"position":[[22,3]]},"75":{"position":[[698,3],[1122,3]]},"77":{"position":[[260,3]]},"81":{"position":[[106,3],[312,3]]},"84":{"position":[[11,3]]},"91":{"position":[[1913,3],[2491,3],[3377,3],[3510,3],[3790,3]]},"93":{"position":[[297,3],[436,3],[747,3],[1716,3],[1994,3],[2535,3],[2702,3]]},"97":{"position":[[24,3]]},"107":{"position":[[934,4],[1410,4]]},"129":{"position":[[511,4]]},"133":{"position":[[971,3]]},"145":{"position":[[416,3]]},"161":{"position":[[8,3]]},"169":{"position":[[416,3]]},"185":{"position":[[8,3]]},"193":{"position":[[446,3]]},"211":{"position":[[8,3]]},"260":{"position":[[446,3]]},"278":{"position":[[8,3]]},"487":{"position":[[1196,4]]},"491":{"position":[[176,3]]},"1072":{"position":[[240,4]]},"1220":{"position":[[261,4]]},"1417":{"position":[[588,3]]},"1450":{"position":[[78,3],[1155,3]]},"1452":{"position":[[175,3],[260,3]]},"1454":{"position":[[177,3],[220,3]]},"1458":{"position":[[208,3],[605,3]]},"1462":{"position":[[138,3]]},"1589":{"position":[[47,3]]},"1718":{"position":[[295,4]]},"1720":{"position":[[21,3]]},"1725":{"position":[[82,3],[139,3],[203,3],[553,3],[737,3],[838,3]]},"1728":{"position":[[523,3]]},"1737":{"position":[[960,3]]},"1740":{"position":[[10,3]]},"1744":{"position":[[193,3]]},"1752":{"position":[[203,3],[342,3]]},"1767":{"position":[[73,3]]},"1771":{"position":[[196,3]]},"1796":{"position":[[76,3]]},"1799":{"position":[[124,3]]},"1803":{"position":[[750,3],[1008,3]]},"1808":{"position":[[127,3]]},"1817":{"position":[[184,3]]},"1821":{"position":[[420,3]]},"1823":{"position":[[212,3]]},"1830":{"position":[[158,3]]},"1839":{"position":[[188,3],[405,3]]},"1846":{"position":[[133,3]]},"1855":{"position":[[118,3]]},"1858":{"position":[[225,3]]},"1906":{"position":[[1091,3],[1161,4]]},"1908":{"position":[[785,4]]},"1943":{"position":[[877,3]]}}}],["nox",{"_index":3529,"t":{"1846":{"position":[[120,4]]}}}],["num",{"_index":3193,"t":{"1673":{"position":[[692,3]]}}}],["number",{"_index":606,"t":{"91":{"position":[[3434,7],[3567,7]]},"133":{"position":[[164,8],[568,7],[654,7],[816,7],[923,6]]},"135":{"position":[[780,6]]},"161":{"position":[[760,6],[827,6],[3630,6],[3697,6]]},"163":{"position":[[1808,6],[1875,6],[2744,6],[2811,6]]},"185":{"position":[[760,6],[827,6],[3630,6],[3697,6]]},"187":{"position":[[1808,6],[1875,6],[2744,6],[2811,6]]},"225":{"position":[[753,6]]},"369":{"position":[[642,6],[703,6]]},"389":{"position":[[681,9]]},"432":{"position":[[340,7]]},"438":{"position":[[343,7],[572,7]]},"444":{"position":[[179,8]]},"452":{"position":[[172,8]]},"466":{"position":[[9,6],[150,6],[239,6]]},"537":{"position":[[252,7]]},"744":{"position":[[975,6]]},"759":{"position":[[146,7]]},"766":{"position":[[175,8]]},"773":{"position":[[149,7],[378,7]]},"780":{"position":[[175,8]]},"801":{"position":[[366,7]]},"937":{"position":[[159,7]]},"1017":{"position":[[49,6]]},"1041":{"position":[[346,7]]},"1104":{"position":[[174,9]]},"1149":{"position":[[89,6],[184,6]]},"1167":{"position":[[1292,6],[1327,6]]},"1179":{"position":[[968,6]]},"1189":{"position":[[237,6]]},"1191":{"position":[[188,8]]},"1297":{"position":[[40,6]]},"1605":{"position":[[79,6]]},"1682":{"position":[[607,7]]},"1744":{"position":[[90,6]]},"1900":{"position":[[288,7],[328,6]]},"1920":{"position":[[498,8],[524,6]]},"1926":{"position":[[96,7],[217,7]]},"1930":{"position":[[146,7]]},"1943":{"position":[[334,7],[847,7]]},"1945":{"position":[[493,7]]}}}],["numbers/result",{"_index":726,"t":{"133":{"position":[[7,14]]}}}],["numer",{"_index":2730,"t":{"1589":{"position":[[16,6]]},"1737":{"position":[[207,7],[279,7],[477,7]]},"1853":{"position":[[23,9]]},"1872":{"position":[[56,9]]}}}],["numeric_method",{"_index":3419,"t":{"1705":{"position":[[1305,15]]}}}],["numpi",{"_index":2741,"t":{"1592":{"position":[[98,5]]},"1682":{"position":[[433,5]]},"1686":{"position":[[1173,5],[1214,5],[1234,5]]},"1695":{"position":[[80,5]]}}}],["nvm",{"_index":3556,"t":{"1878":{"position":[[420,3]]}}}],["o",{"_index":187,"t":{"21":{"position":[[635,1]]},"25":{"position":[[650,2]]},"47":{"position":[[254,1]]},"629":{"position":[[684,2]]}}}],["object",{"_index":332,"t":{"41":{"position":[[107,6],[178,8]]},"1474":{"position":[[546,7]]},"1589":{"position":[[138,7]]},"1664":{"position":[[552,6]]},"1688":{"position":[[77,6]]},"1732":{"position":[[275,6]]},"1904":{"position":[[262,6]]}}}],["obsolet",{"_index":3661,"t":{"1908":{"position":[[776,8]]}}}],["obtain",{"_index":1818,"t":{"487":{"position":[[831,9]]},"570":{"position":[[234,6]]},"717":{"position":[[513,6]]},"1275":{"position":[[1101,9]]},"1304":{"position":[[180,6]]}}}],["obviou",{"_index":3644,"t":{"1906":{"position":[[1002,7],[1053,7]]}}}],["oc",{"_index":2239,"t":{"1072":{"position":[[230,3]]}}}],["occur",{"_index":1927,"t":{"513":{"position":[[387,6]]},"614":{"position":[[1000,6]]},"1793":{"position":[[1164,6]]},"1803":{"position":[[97,7]]},"1810":{"position":[[15,6]]}}}],["offer",{"_index":117,"t":{"13":{"position":[[891,8]]},"17":{"position":[[215,8]]},"248":{"position":[[403,5]]}}}],["offici",{"_index":2,"t":{"2":{"position":[[24,10]]},"7":{"position":[[286,10]]}}}],["offset",{"_index":423,"t":{"58":{"position":[[1622,6]]}}}],["offshor",{"_index":464,"t":{"64":{"position":[[793,8]]},"570":{"position":[[76,8]]},"614":{"position":[[1412,8]]},"1713":{"position":[[27,8],[68,8],[254,8]]},"1760":{"position":[[209,8]]}}}],["oh",{"_index":3713,"t":{"1920":{"position":[[163,2]]}}}],["oil",{"_index":70,"t":{"13":{"position":[[93,3]]},"107":{"position":[[337,3],[593,3],[1536,4]]},"143":{"position":[[85,3]]},"153":{"position":[[427,3],[1111,3]]},"163":{"position":[[738,3]]},"167":{"position":[[85,3]]},"177":{"position":[[427,3],[1111,3]]},"187":{"position":[[738,3]]},"191":{"position":[[208,3]]},"229":{"position":[[264,3]]},"258":{"position":[[208,3]]},"414":{"position":[[150,3]]},"513":{"position":[[438,5]]},"570":{"position":[[85,3]]},"576":{"position":[[1015,3],[1058,3],[1151,3]]},"614":{"position":[[1549,3],[1630,3]]},"683":{"position":[[76,3]]},"855":{"position":[[364,3]]},"1017":{"position":[[59,3],[325,3],[349,3],[420,3]]},"1435":{"position":[[276,3]]},"1437":{"position":[[87,4]]},"1443":{"position":[[32,3]]},"1445":{"position":[[21,4],[45,4],[74,4],[209,3]]},"1544":{"position":[[814,3]]},"1549":{"position":[[38,3]]},"1620":{"position":[[81,3]]},"1787":{"position":[[402,3]]},"1793":{"position":[[130,3],[213,3],[363,3]]}}}],["oil/ga",{"_index":1517,"t":{"317":{"position":[[153,8]]}}}],["oil_prod",{"_index":795,"t":{"143":{"position":[[89,10]]},"165":{"position":[[736,9]]},"167":{"position":[[89,10]]},"189":{"position":[[736,9]]},"191":{"position":[[212,10]]},"215":{"position":[[750,9]]},"229":{"position":[[268,10]]},"258":{"position":[[212,10]]},"282":{"position":[[750,9]]}}}],["oil_rate_per_timestep",{"_index":620,"t":{"91":{"position":[[4148,21],[4366,21],[4580,21],[4904,21]]}}}],["oil_volum",{"_index":673,"t":{"107":{"position":[[88,10],[274,10],[1424,11],[1504,10]]},"855":{"position":[[282,11]]},"1234":{"position":[[285,10]]},"1374":{"position":[[16,10]]},"1401":{"position":[[224,11]]},"1417":{"position":[[429,11]]},"1431":{"position":[[109,11]]},"1435":{"position":[[256,11]]},"1437":{"position":[[68,10]]},"1439":{"position":[[83,10]]},"1443":{"position":[[99,10]]},"1551":{"position":[[31,10]]},"1787":{"position":[[168,11],[315,11]]},"1793":{"position":[[46,11],[188,11],[260,11]]}}}],["old",{"_index":412,"t":{"58":{"position":[[980,3]]},"91":{"position":[[2529,3]]},"93":{"position":[[2679,3]]},"1715":{"position":[[138,3]]},"1737":{"position":[[554,3]]},"1851":{"position":[[548,3]]},"1872":{"position":[[98,3]]}}}],["old_setup_file_name_utf",{"_index":365,"t":{"47":{"position":[[288,24]]}}}],["omit",{"_index":3719,"t":{"1920":{"position":[[565,7]]}}}],["on",{"_index":349,"t":{"45":{"position":[[144,3]]},"58":{"position":[[846,3],[853,3]]},"95":{"position":[[77,3]]},"112":{"position":[[322,3]]},"135":{"position":[[830,3]]},"143":{"position":[[33,3]]},"151":{"position":[[30,3]]},"157":{"position":[[9,3]]},"167":{"position":[[33,3]]},"175":{"position":[[30,3]]},"181":{"position":[[9,3]]},"191":{"position":[[312,3]]},"207":{"position":[[9,3]]},"209":{"position":[[9,3]]},"231":{"position":[[9,3],[1010,3]]},"248":{"position":[[213,3]]},"258":{"position":[[312,3]]},"274":{"position":[[9,3]]},"276":{"position":[[9,3]]},"308":{"position":[[33,3]]},"317":{"position":[[351,3],[449,3]]},"325":{"position":[[1068,3],[1367,3],[1896,3],[1958,3]]},"334":{"position":[[29,3]]},"347":{"position":[[332,3]]},"391":{"position":[[172,3]]},"424":{"position":[[267,3],[559,3],[2422,3]]},"430":{"position":[[65,3]]},"450":{"position":[[1190,3],[1667,3]]},"460":{"position":[[609,3],[670,3]]},"466":{"position":[[52,3],[472,3]]},"477":{"position":[[53,3]]},"485":{"position":[[1260,3]]},"487":{"position":[[548,3]]},"489":{"position":[[54,3],[64,5],[1533,3]]},"498":{"position":[[238,3],[625,3]]},"502":{"position":[[143,3],[461,3],[490,3]]},"521":{"position":[[505,3]]},"527":{"position":[[208,3],[259,3]]},"533":{"position":[[9,3]]},"567":{"position":[[159,3],[2356,3],[2637,3],[4028,3],[4131,3]]},"578":{"position":[[230,3],[438,3],[488,3]]},"640":{"position":[[593,3]]},"725":{"position":[[242,4]]},"738":{"position":[[626,3]]},"744":{"position":[[57,3]]},"812":{"position":[[215,3]]},"855":{"position":[[45,3]]},"886":{"position":[[118,3]]},"889":{"position":[[117,3]]},"990":{"position":[[262,3]]},"1030":{"position":[[20,3],[427,3]]},"1034":{"position":[[337,3]]},"1064":{"position":[[177,3]]},"1125":{"position":[[42,3]]},"1167":{"position":[[573,3],[830,3],[1057,3],[1128,3]]},"1169":{"position":[[12,3],[137,3]]},"1171":{"position":[[12,3],[216,3]]},"1173":{"position":[[12,3],[302,3]]},"1175":{"position":[[12,3],[314,3]]},"1177":{"position":[[92,3],[303,3]]},"1259":{"position":[[12,3],[233,3]]},"1271":{"position":[[211,3]]},"1275":{"position":[[101,3],[818,3]]},"1277":{"position":[[711,3]]},"1304":{"position":[[139,3]]},"1310":{"position":[[525,3]]},"1332":{"position":[[122,3],[173,3]]},"1336":{"position":[[541,3]]},"1460":{"position":[[127,3],[279,3]]},"1629":{"position":[[69,3]]},"1662":{"position":[[1149,3]]},"1686":{"position":[[851,3]]},"1718":{"position":[[64,3]]},"1723":{"position":[[1261,3],[1545,3]]},"1725":{"position":[[1327,3]]},"1737":{"position":[[1193,3]]},"1793":{"position":[[758,4]]},"1801":{"position":[[282,5]]},"1815":{"position":[[256,5]]},"1836":{"position":[[77,3]]},"1851":{"position":[[535,4]]},"1867":{"position":[[69,3]]},"1872":{"position":[[224,3],[264,3]]},"1906":{"position":[[428,3],[970,3],[996,3],[1305,3]]},"1908":{"position":[[192,3]]}}}],["onc",{"_index":147,"t":{"17":{"position":[[106,4]]},"1096":{"position":[[83,4]]},"1896":{"position":[[0,4]]}}}],["onshor",{"_index":687,"t":{"112":{"position":[[249,8]]},"598":{"position":[[82,8]]},"1713":{"position":[[444,7],[753,7]]},"1790":{"position":[[72,7]]}}}],["onshore_pow",{"_index":3434,"t":{"1713":{"position":[[708,13]]},"1735":{"position":[[706,13]]}}}],["onto",{"_index":3746,"t":{"1945":{"position":[[889,4]]}}}],["open",{"_index":581,"t":{"91":{"position":[[2436,4]]},"93":{"position":[[2312,4]]},"1892":{"position":[[26,4]]},"1894":{"position":[[177,4]]},"1898":{"position":[[26,4]]},"1943":{"position":[[51,4]]}}}],["oper",{"_index":470,"t":{"73":{"position":[[45,11],[148,11],[261,11]]},"91":{"position":[[2255,8]]},"131":{"position":[[103,9]]},"133":{"position":[[746,7]]},"135":{"position":[[481,9],[503,11]]},"231":{"position":[[615,11],[2051,11],[2089,11]]},"242":{"position":[[483,9]]},"287":{"position":[[275,11]]},"304":{"position":[[139,11],[1667,11]]},"363":{"position":[[321,12]]},"381":{"position":[[152,11]]},"383":{"position":[[307,12],[467,11],[497,11],[636,11]]},"396":{"position":[[212,11]]},"424":{"position":[[413,11],[793,11]]},"481":{"position":[[783,11]]},"496":{"position":[[612,9],[748,9],[820,9],[1004,9],[1366,9],[1647,9]]},"498":{"position":[[613,8],[819,8]]},"506":{"position":[[80,9],[120,9],[200,9],[268,9],[293,8]]},"563":{"position":[[758,11],[920,9],[941,11]]},"567":{"position":[[774,11]]},"578":{"position":[[379,7]]},"580":{"position":[[446,9],[602,9],[858,11]]},"582":{"position":[[103,11]]},"666":{"position":[[235,12]]},"717":{"position":[[711,9]]},"931":{"position":[[408,9]]},"1167":{"position":[[19,11],[980,11]]},"1169":{"position":[[141,11]]},"1171":{"position":[[220,11]]},"1173":{"position":[[162,11]]},"1175":{"position":[[168,11]]},"1177":{"position":[[357,11],[407,11],[497,11]]},"1259":{"position":[[237,11],[337,11]]},"1291":{"position":[[121,10],[856,9]]},"1452":{"position":[[217,9]]},"1664":{"position":[[236,11],[400,11]]},"1667":{"position":[[208,11]]},"1675":{"position":[[717,11]]},"1682":{"position":[[50,11],[843,11]]},"1686":{"position":[[476,11]]},"1737":{"position":[[1268,11]]},"1821":{"position":[[395,11]]},"1844":{"position":[[67,11]]}}}],["operational_set",{"_index":1105,"t":{"211":{"position":[[1323,21],[2356,21]]},"213":{"position":[[2943,21],[3446,21]]},"231":{"position":[[1561,21],[2436,21]]},"233":{"position":[[1601,21],[1985,21]]},"278":{"position":[[1345,21],[2370,21],[4865,21]]},"280":{"position":[[3939,21],[4434,21],[6148,21]]},"363":{"position":[[299,21]]},"365":{"position":[[332,21]]},"383":{"position":[[285,21],[350,20]]},"385":{"position":[[205,21]]},"666":{"position":[[213,21],[262,20]]},"670":{"position":[[291,21]]},"742":{"position":[[45,20],[117,20]]},"746":{"position":[[332,21]]},"792":{"position":[[130,20]]},"794":{"position":[[79,20]]},"882":{"position":[[223,20]]},"1165":{"position":[[45,20]]},"1186":{"position":[[332,21],[934,21]]},"1248":{"position":[[364,21]]},"1261":{"position":[[199,21]]},"1263":{"position":[[203,21]]},"1324":{"position":[[77,20]]}}}],["opportun",{"_index":138,"t":{"15":{"position":[[213,13]]}}}],["opposit",{"_index":757,"t":{"135":{"position":[[330,8]]},"1293":{"position":[[290,8]]}}}],["optim",{"_index":2990,"t":{"1653":{"position":[[148,9]]},"1664":{"position":[[500,12]]}}}],["option",{"_index":11,"t":{"2":{"position":[[110,7]]},"5":{"position":[[21,6]]},"7":{"position":[[26,6]]},"19":{"position":[[352,7]]},"21":{"position":[[449,7]]},"23":{"position":[[114,6],[171,9],[199,8]]},"25":{"position":[[19,9],[188,8],[283,7],[1460,6],[1488,7]]},"27":{"position":[[72,9],[82,8]]},"29":{"position":[[73,9],[101,8]]},"31":{"position":[[96,9],[106,8],[527,6],[555,7],[780,7]]},"33":{"position":[[93,9],[252,8]]},"49":{"position":[[279,7]]},"58":{"position":[[1059,8]]},"93":{"position":[[1768,9],[1917,9],[2741,6]]},"112":{"position":[[116,8],[472,9],[589,9],[642,9]]},"129":{"position":[[231,10]]},"240":{"position":[[1048,9]]},"289":{"position":[[78,10]]},"291":{"position":[[20,9]]},"296":{"position":[[93,10]]},"298":{"position":[[49,9]]},"323":{"position":[[283,8]]},"325":{"position":[[493,8]]},"332":{"position":[[571,9]]},"347":{"position":[[392,10]]},"353":{"position":[[20,7],[156,7]]},"369":{"position":[[585,9]]},"389":{"position":[[331,6]]},"391":{"position":[[29,9],[372,11]]},"393":{"position":[[70,9]]},"418":{"position":[[27,8]]},"424":{"position":[[598,7]]},"462":{"position":[[222,9],[290,9],[380,10]]},"464":{"position":[[689,9],[757,9]]},"466":{"position":[[1097,9]]},"477":{"position":[[875,8]]},"479":{"position":[[999,9],[1067,9],[1157,9]]},"481":{"position":[[2641,9],[2709,9],[2799,9]]},"485":{"position":[[1212,10],[1288,9],[1367,9],[2035,9]]},"487":{"position":[[1088,9]]},"489":{"position":[[203,8]]},"498":{"position":[[496,7]]},"500":{"position":[[682,7]]},"502":{"position":[[362,7],[675,7]]},"521":{"position":[[344,8]]},"539":{"position":[[280,9]]},"545":{"position":[[397,9]]},"549":{"position":[[30,8]]},"567":{"position":[[3748,7]]},"606":{"position":[[34,8]]},"608":{"position":[[420,10]]},"614":{"position":[[161,8],[181,8]]},"627":{"position":[[114,6],[171,9],[199,8]]},"629":{"position":[[53,9],[222,8],[317,7],[1494,6],[1522,7]]},"631":{"position":[[72,9],[82,8]]},"633":{"position":[[73,9],[101,8]]},"635":{"position":[[96,9],[106,8],[527,6],[555,7],[780,7]]},"637":{"position":[[93,9],[252,8]]},"640":{"position":[[432,8]]},"666":{"position":[[174,9]]},"738":{"position":[[578,10],[654,9],[733,9]]},"884":{"position":[[610,8]]},"990":{"position":[[322,10]]},"1009":{"position":[[178,8]]},"1030":{"position":[[220,8],[342,9]]},"1119":{"position":[[11,8]]},"1133":{"position":[[20,8]]},"1135":{"position":[[9,8]]},"1137":{"position":[[192,9],[260,9],[350,10]]},"1151":{"position":[[11,8]]},"1153":{"position":[[441,9]]},"1197":{"position":[[0,8]]},"1220":{"position":[[115,8]]},"1234":{"position":[[70,9]]},"1277":{"position":[[663,10],[739,9],[818,9]]},"1291":{"position":[[1021,6]]},"1310":{"position":[[477,10],[553,9],[632,9]]},"1336":{"position":[[196,9],[404,9],[428,9]]},"1381":{"position":[[280,9]]},"1450":{"position":[[1036,8]]},"1592":{"position":[[697,8]]},"1653":{"position":[[4,6]]},"1718":{"position":[[47,7],[68,6],[170,7],[227,7]]},"1723":{"position":[[1213,10],[1289,9],[1368,9]]},"1908":{"position":[[139,9],[155,9],[352,8]]}}}],["order",{"_index":452,"t":{"64":{"position":[[279,5]]},"77":{"position":[[174,5],[234,5]]},"81":{"position":[[237,5]]},"84":{"position":[[493,5]]},"91":{"position":[[457,5]]},"112":{"position":[[64,5]]},"161":{"position":[[3344,5]]},"185":{"position":[[3344,5]]},"229":{"position":[[163,5]]},"308":{"position":[[383,5]]},"1483":{"position":[[141,5]]},"1542":{"position":[[90,5]]},"1671":{"position":[[216,5]]},"1695":{"position":[[216,5]]},"1705":{"position":[[568,5]]},"1713":{"position":[[1375,5]]},"1730":{"position":[[404,5],[482,5]]},"1762":{"position":[[49,5]]},"1805":{"position":[[74,6]]},"1821":{"position":[[132,5]]},"1860":{"position":[[154,5]]},"1884":{"position":[[208,6]]},"1904":{"position":[[31,5]]},"1914":{"position":[[836,9]]},"1926":{"position":[[3,5]]},"1940":{"position":[[3,5]]}}}],["orient",{"_index":3617,"t":{"1904":{"position":[[269,8]]}}}],["origin",{"_index":414,"t":{"58":{"position":[[1411,6]]},"1930":{"position":[[118,6]]},"1943":{"position":[[819,6]]},"1945":{"position":[[236,8],[1051,6]]}}}],["origin/main",{"_index":3742,"t":{"1943":{"position":[[760,11]]}}}],["other",{"_index":1569,"t":{"336":{"position":[[261,6]]}}}],["otherwis",{"_index":762,"t":{"135":{"position":[[676,9]]},"679":{"position":[[246,9]]},"1914":{"position":[[1271,9]]}}}],["out",{"_index":419,"t":{"58":{"position":[[1528,3]]},"330":{"position":[[83,3]]},"424":{"position":[[2199,3],[2412,3]]},"450":{"position":[[1798,4]]},"481":{"position":[[971,3],[1063,3],[1116,3],[1178,3]]},"487":{"position":[[33,3]]},"489":{"position":[[1739,3]]},"1275":{"position":[[504,3]]},"1316":{"position":[[148,3]]},"1561":{"position":[[28,3]]},"1735":{"position":[[231,3]]},"1752":{"position":[[369,3]]},"1762":{"position":[[207,3]]},"1783":{"position":[[28,3]]},"1803":{"position":[[227,3]]},"1882":{"position":[[222,3]]},"1906":{"position":[[243,4],[1368,3]]},"1920":{"position":[[144,3]]}}}],["outgo",{"_index":1811,"t":{"483":{"position":[[116,8]]},"485":{"position":[[595,8],[634,8],[1271,8],[1350,8]]},"487":{"position":[[160,8],[716,9],[937,8],[1039,8]]},"489":{"position":[[1895,8]]},"493":{"position":[[266,8]]},"738":{"position":[[367,8],[406,8],[637,8],[716,8]]},"740":{"position":[[271,8]]},"1275":{"position":[[986,9],[1207,8],[1309,8]]},"1277":{"position":[[722,8],[801,8]]},"1310":{"position":[[536,8],[615,8]]},"1316":{"position":[[275,8]]},"1318":{"position":[[362,8]]},"1320":{"position":[[266,8]]},"1723":{"position":[[1272,8],[1351,8]]}}}],["outlet",{"_index":1422,"t":{"287":{"position":[[667,6]]},"304":{"position":[[223,6]]},"355":{"position":[[543,6]]},"424":{"position":[[877,6]]},"481":{"position":[[227,6]]},"485":{"position":[[211,6]]},"487":{"position":[[794,6]]},"491":{"position":[[291,6]]},"496":{"position":[[1264,6],[1464,6]]},"567":{"position":[[2376,6],[2865,6],[4135,6]]},"744":{"position":[[667,6]]},"1119":{"position":[[581,6]]},"1179":{"position":[[660,6]]},"1275":{"position":[[1064,6]]},"1450":{"position":[[723,6],[767,6]]},"1452":{"position":[[66,6],[369,6]]},"1667":{"position":[[26,6]]},"1682":{"position":[[195,6]]},"1841":{"position":[[209,6]]},"1858":{"position":[[25,6],[164,6]]}}}],["outlin",{"_index":1680,"t":{"426":{"position":[[13,8]]},"565":{"position":[[18,7]]},"570":{"position":[[205,7]]},"1886":{"position":[[143,8]]}}}],["output",{"_index":165,"t":{"21":{"position":[[78,6],[134,6],[148,6],[165,6],[184,6],[266,6],[334,6],[416,6],[480,6],[517,6],[607,6],[724,8]]},"25":{"position":[[203,6],[275,7],[575,6],[626,6],[641,7],[655,6],[717,7],[810,6],[893,7],[1065,7],[1216,6],[1316,7],[1342,6],[1358,7]]},"31":{"position":[[195,6],[332,6],[352,6],[416,7],[424,6],[440,7],[719,6],[772,7]]},"47":{"position":[[85,6]]},"75":{"position":[[265,6],[340,6],[825,6],[1148,6],[1233,6]]},"77":{"position":[[37,6]]},"93":{"position":[[2566,6],[2734,6]]},"112":{"position":[[86,7]]},"131":{"position":[[26,9]]},"133":{"position":[[0,6],[240,6],[440,7],[452,6],[548,7],[955,7]]},"135":{"position":[[216,6],[1316,6]]},"240":{"position":[[786,8]]},"383":{"position":[[585,6]]},"410":{"position":[[237,6],[298,6]]},"502":{"position":[[2660,7]]},"606":{"position":[[311,6]]},"629":{"position":[[237,6],[309,7],[609,6],[660,6],[675,7],[689,6],[751,7],[844,6],[927,7],[1099,7],[1250,6],[1350,7],[1376,6],[1392,7]]},"635":{"position":[[195,6],[332,6],[352,6],[416,7],[424,6],[440,7],[719,6],[772,7]]},"721":{"position":[[264,6]]},"905":{"position":[[274,7],[816,6],[1086,6]]},"1017":{"position":[[116,6]]},"1283":{"position":[[317,7],[1140,6],[1283,7]]},"1647":{"position":[[78,6]]},"1667":{"position":[[116,6]]},"1669":{"position":[[895,6]]},"1671":{"position":[[184,6]]},"1680":{"position":[[0,6]]},"1695":{"position":[[176,6]]},"1715":{"position":[[26,6]]},"1723":{"position":[[50,7],[237,7]]},"1725":{"position":[[132,6]]},"1732":{"position":[[205,6],[232,6]]},"1735":{"position":[[535,7],[1472,6],[1524,6],[1602,7],[1770,6],[1986,6]]},"1737":{"position":[[18,7]]},"1744":{"position":[[71,6]]},"1790":{"position":[[110,6]]},"1793":{"position":[[890,6]]},"1803":{"position":[[642,6],[704,6]]},"1821":{"position":[[92,6],[245,9],[335,6]]},"1853":{"position":[[214,6]]},"1858":{"position":[[325,6]]},"1869":{"position":[[171,6]]}}}],["outputfold",{"_index":248,"t":{"25":{"position":[[672,12],[691,13]]},"629":{"position":[[706,12],[725,13]]}}}],["outputfrequ",{"_index":227,"t":{"25":{"position":[[223,15]]},"629":{"position":[[257,15]]}}}],["outsid",{"_index":758,"t":{"135":{"position":[[491,7],[534,7]]},"287":{"position":[[1235,8],[1388,7]]},"304":{"position":[[1253,7]]},"317":{"position":[[330,7]]},"383":{"position":[[439,7]]},"410":{"position":[[209,7]]},"450":{"position":[[896,7]]},"481":{"position":[[814,7]]},"580":{"position":[[762,7]]},"1034":{"position":[[236,7]]},"1653":{"position":[[617,7]]},"1723":{"position":[[189,7]]},"1730":{"position":[[725,7]]},"1737":{"position":[[1292,7]]},"1846":{"position":[[674,7]]},"1853":{"position":[[355,7]]}}}],["over",{"_index":579,"t":{"91":{"position":[[2395,4]]},"95":{"position":[[59,4]]},"381":{"position":[[67,5]]},"502":{"position":[[525,4],[2016,4]]},"578":{"position":[[745,4]]},"717":{"position":[[677,4]]},"744":{"position":[[47,4],[216,4],[328,4],[432,4],[1021,4],[1060,4]]},"886":{"position":[[60,4],[151,4]]},"1167":{"position":[[944,5]]},"1177":{"position":[[185,4]]},"1179":{"position":[[47,4],[209,4],[321,4],[425,4],[1014,4],[1053,4]]},"1181":{"position":[[37,4],[201,4]]},"1295":{"position":[[464,4]]},"1324":{"position":[[238,4]]},"1678":{"position":[[40,4]]},"1686":{"position":[[759,4]]},"1836":{"position":[[59,4]]},"1904":{"position":[[224,4],[257,4]]}}}],["overal",{"_index":529,"t":{"84":{"position":[[436,7]]},"325":{"position":[[4,7]]}}}],["overdefin",{"_index":1797,"t":{"477":{"position":[[324,11]]}}}],["overrid",{"_index":1640,"t":{"391":{"position":[[404,8],[725,8]]},"1009":{"position":[[206,8]]}}}],["overshoot",{"_index":2146,"t":{"744":{"position":[[501,12]]},"1179":{"position":[[494,12]]}}}],["overview",{"_index":1560,"t":{"330":{"position":[[48,8]]},"332":{"position":[[529,8]]},"584":{"position":[[109,8],[159,8]]},"1080":{"position":[[368,8]]}}}],["ownership",{"_index":3358,"t":{"1692":{"position":[[284,9]]}}}],["p1p_1p1",{"_index":1997,"t":{"563":{"position":[[530,8]]}}}],["p1p_{1}p1",{"_index":1908,"t":{"511":{"position":[[117,10]]}}}],["p1v1n=p2v2np_\\mathrm{1",{"_index":2007,"t":{"567":{"position":[[1152,23]]}}}],["p2p_2p2",{"_index":1998,"t":{"563":{"position":[[543,8]]}}}],["p2p_{2}p2",{"_index":1909,"t":{"511":{"position":[[132,11]]}}}],["p>just",{"_index":3674,"t":{"1914":{"position":[[328,7]]}}}],["p_1)}{liquid\\_dens",{"_index":1995,"t":{"563":{"position":[[466,21]]}}}],["p_\\mathrm{2",{"_index":2009,"t":{"567":{"position":[[1193,12]]}}}],["p_{1",{"_index":1914,"t":{"511":{"position":[[211,5]]}}}],["p_{2",{"_index":1913,"t":{"511":{"position":[[203,5]]}}}],["packag",{"_index":2507,"t":{"1524":{"position":[[15,9]]},"1662":{"position":[[1242,8]]},"1669":{"position":[[151,7]]},"1675":{"position":[[770,7]]}}}],["page",{"_index":301,"t":{"35":{"position":[[117,4]]},"584":{"position":[[95,4]]},"1145":{"position":[[306,5]]},"1882":{"position":[[93,4],[355,6],[440,6]]}}}],["panda",{"_index":2612,"t":{"1544":{"position":[[55,6]]}}}],["paragraph",{"_index":3673,"t":{"1914":{"position":[[300,9]]}}}],["parallel",{"_index":1405,"t":{"285":{"position":[[142,9]]},"424":{"position":[[312,8]]},"648":{"position":[[301,9]]},"1697":{"position":[[41,11],[122,11]]}}}],["paramet",{"_index":1544,"t":{"325":{"position":[[296,10]]},"481":{"position":[[153,10]]},"656":{"position":[[130,9]]},"1072":{"position":[[130,9]]},"1220":{"position":[[130,10]]},"1578":{"position":[[89,9]]},"1787":{"position":[[340,9]]},"1790":{"position":[[201,10]]}}}],["parenthes",{"_index":1899,"t":{"506":{"position":[[462,11]]},"1686":{"position":[[632,11]]}}}],["pars",{"_index":326,"t":{"39":{"position":[[254,7]]},"1592":{"position":[[614,7],[840,7]]},"1682":{"position":[[581,5],[645,5]]},"1920":{"position":[[678,7]]}}}],["parsed/convert",{"_index":2760,"t":{"1592":{"position":[[777,16]]}}}],["part",{"_index":32,"t":{"7":{"position":[[171,6]]},"19":{"position":[[240,4]]},"117":{"position":[[71,5]]},"133":{"position":[[839,5]]},"242":{"position":[[80,4],[260,4]]},"248":{"position":[[107,4]]},"347":{"position":[[75,4],[273,4]]},"351":{"position":[[279,4]]},"418":{"position":[[131,4],[284,4]]},"424":{"position":[[2378,4]]},"489":{"position":[[291,5],[691,4],[866,5],[1368,4]]},"491":{"position":[[478,4]]},"513":{"position":[[419,4]]},"521":{"position":[[410,4]]},"527":{"position":[[76,4]]},"531":{"position":[[333,4]]},"640":{"position":[[498,4]]},"874":{"position":[[191,4]]},"931":{"position":[[5,4],[185,4]]},"990":{"position":[[5,4],[203,4]]},"1141":{"position":[[108,4],[158,4]]},"1536":{"position":[[71,5]]},"1799":{"position":[[71,5]]},"1908":{"position":[[361,6]]},"1938":{"position":[[301,4]]}}}],["particular",{"_index":1821,"t":{"487":{"position":[[1155,10]]},"1283":{"position":[[181,10]]},"1793":{"position":[[495,10]]}}}],["pass",{"_index":2129,"t":{"717":{"position":[[600,6]]},"1291":{"position":[[81,7]]},"1508":{"position":[[56,4]]},"1732":{"position":[[77,7]]},"1906":{"position":[[853,4]]},"1945":{"position":[[633,7]]}}}],["past",{"_index":766,"t":{"135":{"position":[[1054,4]]}}}],["patch",{"_index":3456,"t":{"1725":{"position":[[1000,7],[1150,7],[1269,7],[1454,7]]}}}],["path",{"_index":200,"t":{"23":{"position":[[75,4],[311,5]]},"25":{"position":[[685,5]]},"31":{"position":[[274,5],[346,5]]},"33":{"position":[[268,5]]},"58":{"position":[[267,5],[541,5]]},"93":{"position":[[1069,6],[1126,4]]},"246":{"position":[[184,5]]},"252":{"position":[[54,4]]},"527":{"position":[[678,4],[923,5]]},"627":{"position":[[75,4],[289,5]]},"629":{"position":[[719,5]]},"635":{"position":[[274,5],[346,5]]},"637":{"position":[[268,5]]},"901":{"position":[[89,5]]},"933":{"position":[[184,5]]},"952":{"position":[[14,4],[65,4]]},"1332":{"position":[[592,4]]},"1334":{"position":[[111,4]]},"1943":{"position":[[396,5]]},"1945":{"position":[[679,5]]}}}],["path/fold",{"_index":647,"t":{"93":{"position":[[1415,11]]}}}],["path/to/file.csv",{"_index":2207,"t":{"954":{"position":[[6,19]]}}}],["path_to_chart_file>.csv",{"_index":2230,"t":{"1038":{"position":[[109,24]]}}}],["path_to_fil",{"_index":1953,"t":{"531":{"position":[[113,14]]}}}],["path_to_file.csv",{"_index":1439,"t":{"293":{"position":[[53,18]]},"300":{"position":[[53,18]]},"806":{"position":[[53,18]]}}}],["path_to_model1/model_data.csv",{"_index":1955,"t":{"535":{"position":[[46,30]]},"1338":{"position":[[46,30]]}}}],["path_to_tiein/tie_in_field.csv",{"_index":1956,"t":{"535":{"position":[[110,31]]}}}],["pattern",{"_index":1540,"t":{"323":{"position":[[70,7]]}}}],["pdoc",{"_index":2491,"t":{"1510":{"position":[[163,4]]},"1603":{"position":[[10,4]]}}}],["pe",{"_index":1384,"t":{"272":{"position":[[720,4]]},"574":{"position":[[74,2]]},"1291":{"position":[[400,4]]}}}],["pea",{"_index":1372,"t":{"270":{"position":[[798,4]]},"280":{"position":[[2875,4]]}}}],["peak",{"_index":689,"t":{"112":{"position":[[284,4]]},"1125":{"position":[[4,4]]}}}],["peak/load",{"_index":2253,"t":{"1129":{"position":[[6,9]]}}}],["peb",{"_index":1375,"t":{"270":{"position":[[822,4]]},"280":{"position":[[2899,4]]}}}],["peng",{"_index":1227,"t":{"225":{"position":[[106,4]]},"513":{"position":[[1238,5]]}}}],["pentan",{"_index":1921,"t":{"513":{"position":[[275,8]]}}}],["pep",{"_index":3625,"t":{"1906":{"position":[[464,3],[504,3]]}}}],["per",{"_index":692,"t":{"112":{"position":[[332,3]]},"151":{"position":[[132,3]]},"175":{"position":[[132,3]]},"225":{"position":[[950,3]]},"304":{"position":[[826,3]]},"323":{"position":[[224,3]]},"466":{"position":[[95,3],[347,3],[879,3]]},"502":{"position":[[195,3]]},"948":{"position":[[31,3]]},"1125":{"position":[[52,3]]},"1153":{"position":[[223,3]]},"1167":{"position":[[605,3],[864,3],[1086,3],[1143,3]]},"1169":{"position":[[27,3]]},"1171":{"position":[[27,3]]},"1173":{"position":[[27,3],[334,3]]},"1175":{"position":[[27,3],[348,3]]},"1177":{"position":[[107,3]]},"1259":{"position":[[27,3]]},"1605":{"position":[[23,3]]}}}],["percent",{"_index":2084,"t":{"602":{"position":[[3,7]]}}}],["percentag",{"_index":590,"t":{"91":{"position":[[2726,10],[2872,10]]},"149":{"position":[[980,10]]},"163":{"position":[[510,10]]},"173":{"position":[[980,10]]},"187":{"position":[[510,10]]},"197":{"position":[[624,10]]},"213":{"position":[[330,10]]},"223":{"position":[[592,10]]},"233":{"position":[[273,10]]},"264":{"position":[[624,10]]},"280":{"position":[[546,10]]},"293":{"position":[[259,12]]},"300":{"position":[[261,12]]},"302":{"position":[[161,10],[322,10],[502,10]]},"432":{"position":[[280,12]]},"438":{"position":[[282,12]]},"444":{"position":[[438,12]]},"452":{"position":[[242,12]]},"456":{"position":[[131,10],[232,10]]},"458":{"position":[[415,11],[438,11]]},"481":{"position":[[2119,11],[2142,11],[2532,11],[2555,11]]},"485":{"position":[[1025,11],[1048,11],[1447,11],[1470,11],[1899,11],[1922,11]]},"594":{"position":[[49,11]]},"725":{"position":[[474,10]]},"728":{"position":[[416,11],[439,11]]},"733":{"position":[[418,11],[441,11]]},"738":{"position":[[813,11],[836,11]]},"740":{"position":[[408,10],[515,10]]},"750":{"position":[[135,10]]},"752":{"position":[[418,11],[441,11]]},"766":{"position":[[423,12]]},"780":{"position":[[423,12]]},"801":{"position":[[122,11]]},"804":{"position":[[135,11]]},"806":{"position":[[159,12]]},"946":{"position":[[41,11]]},"1038":{"position":[[92,10]]},"1191":{"position":[[258,12]]},"1277":{"position":[[476,11],[499,11],[898,11],[921,11]]},"1389":{"position":[[224,12]]},"1391":{"position":[[236,12]]},"1394":{"position":[[123,10]]},"1846":{"position":[[490,10]]}}}],["perform",{"_index":84,"t":{"13":{"position":[[292,8]]},"75":{"position":[[21,9],[422,10]]},"143":{"position":[[228,9]]},"167":{"position":[[228,9]]},"191":{"position":[[388,9]]},"217":{"position":[[131,9]]},"242":{"position":[[624,11],[676,11],[732,11]]},"258":{"position":[[388,9]]},"496":{"position":[[148,10]]},"567":{"position":[[630,7]]},"580":{"position":[[788,11]]},"1589":{"position":[[51,9]]}}}],["period",{"_index":493,"t":{"75":{"position":[[583,6],[958,7],[997,7]]},"336":{"position":[[223,7],[304,7]]},"717":{"position":[[684,6]]},"905":{"position":[[223,6]]},"1283":{"position":[[928,8]]},"1291":{"position":[[1097,7]]},"1295":{"position":[[478,6]]}}}],["period,period",{"_index":3231,"t":{"1675":{"position":[[910,14]]}}}],["permiss",{"_index":648,"t":{"93":{"position":[[1475,12]]}}}],["person",{"_index":3570,"t":{"1882":{"position":[[303,9]]}}}],["pf",{"_index":2086,"t":{"602":{"position":[[92,6]]},"1510":{"position":[[90,3]]},"1524":{"position":[[107,3]]},"1554":{"position":[[4,3]]},"1815":{"position":[[341,3]]}}}],["pfs;cable_loss",{"_index":2087,"t":{"602":{"position":[[111,14]]}}}],["phase",{"_index":1728,"t":{"442":{"position":[[306,6]]},"513":{"position":[[444,5]]}}}],["physic",{"_index":110,"t":{"13":{"position":[[709,8]]}}}],["pick",{"_index":487,"t":{"75":{"position":[[468,7]]}}}],["pin",{"_index":3320,"t":{"1686":{"position":[[1210,3]]}}}],["place",{"_index":849,"t":{"153":{"position":[[101,7]]},"177":{"position":[[101,7]]},"203":{"position":[[101,7]]},"270":{"position":[[101,7]]},"334":{"position":[[81,6]]},"353":{"position":[[244,6]]},"905":{"position":[[880,6]]},"937":{"position":[[94,6]]},"1498":{"position":[[293,6]]},"1841":{"position":[[73,6]]}}}],["placehold",{"_index":818,"t":{"145":{"position":[[283,13],[314,13],[340,13],[365,13],[394,13],[432,12]]},"155":{"position":[[495,13],[524,13]]},"157":{"position":[[519,13],[607,13],[696,13],[778,13]]},"159":{"position":[[139,13],[224,13]]},"161":{"position":[[30,12]]},"169":{"position":[[283,13],[314,13],[340,13],[365,13],[394,13],[432,12]]},"179":{"position":[[495,13],[524,13]]},"181":{"position":[[519,13],[607,13],[696,13],[778,13]]},"183":{"position":[[139,13],[224,13]]},"185":{"position":[[30,12]]},"193":{"position":[[313,13],[344,13],[370,13],[395,13],[424,13],[462,12]]},"205":{"position":[[713,13],[742,13],[875,13],[904,13]]},"207":{"position":[[670,13],[765,13],[852,13],[923,13],[1004,13]]},"209":{"position":[[610,13],[691,13],[779,13]]},"211":{"position":[[30,12]]},"219":{"position":[[209,13],[240,13],[262,13],[288,13],[317,13]]},"260":{"position":[[313,13],[344,13],[370,13],[395,13],[424,13],[462,12]]},"272":{"position":[[947,13],[976,13],[1109,13],[1138,13]]},"274":{"position":[[663,13],[758,13],[845,13],[916,13],[997,13]]},"276":{"position":[[610,13],[691,13],[805,13]]},"278":{"position":[[30,12]]}}}],["placement",{"_index":1849,"t":{"496":{"position":[[582,9]]}}}],["plan",{"_index":89,"t":{"13":{"position":[[376,5]]},"537":{"position":[[134,8]]}}}],["platform",{"_index":1546,"t":{"325":{"position":[[1314,8]]},"332":{"position":[[195,9]]},"576":{"position":[[1376,9]]},"586":{"position":[[341,10]]},"1080":{"position":[[122,9]]}}}],["platform_a",{"_index":1577,"t":{"341":{"position":[[22,10]]}}}],["platform_b",{"_index":1578,"t":{"341":{"position":[[102,10]]}}}],["platforms/rig",{"_index":1330,"t":{"240":{"position":[[880,15]]}}}],["pleas",{"_index":376,"t":{"51":{"position":[[103,6],[281,6]]},"614":{"position":[[332,6]]},"1692":{"position":[[15,6]]},"1880":{"position":[[43,6]]},"1884":{"position":[[65,6]]},"1892":{"position":[[19,6]]},"1898":{"position":[[19,6],[282,6]]},"1900":{"position":[[0,6]]},"1902":{"position":[[57,6]]},"1906":{"position":[[1355,6]]},"1908":{"position":[[368,6]]},"1945":{"position":[[1279,6]]}}}],["plot",{"_index":2062,"t":{"580":{"position":[[909,7]]},"1084":{"position":[[1333,4]]},"1801":{"position":[[81,5]]}}}],["plu",{"_index":1903,"t":{"509":{"position":[[87,4]]},"511":{"position":[[51,4]]},"1458":{"position":[[304,4]]},"1910":{"position":[[41,4]]}}}],["poetri",{"_index":2402,"t":{"1483":{"position":[[241,6]]},"1485":{"position":[[314,6]]},"1662":{"position":[[587,6]]}}}],["point",{"_index":508,"t":{"75":{"position":[[1258,5]]},"201":{"position":[[169,6]]},"231":{"position":[[2063,6]]},"268":{"position":[[169,6]]},"287":{"position":[[326,5],[1381,6]]},"304":{"position":[[91,5],[366,5],[1039,5]]},"410":{"position":[[202,6]]},"416":{"position":[[113,5]]},"424":{"position":[[745,5]]},"428":{"position":[[242,5]]},"436":{"position":[[250,6],[534,6]]},"442":{"position":[[679,5],[730,6],[947,5],[1038,5],[1162,7]]},"450":{"position":[[376,5],[508,5],[679,5],[792,6],[831,6],[889,6],[921,5],[1288,6],[1307,6],[1450,6],[1688,6]]},"481":{"position":[[795,6],[861,6],[896,6],[988,6],[1080,6],[1133,6],[1195,6],[1367,6]]},"496":{"position":[[622,7],[720,5],[758,6],[830,5],[1014,6],[1376,6],[1657,6]]},"578":{"position":[[929,7]]},"580":{"position":[[456,6],[612,7],[753,5],[870,6]]},"679":{"position":[[112,6]]},"725":{"position":[[338,6]]},"764":{"position":[[226,5]]},"778":{"position":[[226,5]]},"905":{"position":[[745,6]]},"1578":{"position":[[55,5]]},"1651":{"position":[[298,6]]},"1723":{"position":[[377,6]]},"1737":{"position":[[826,5]]},"1793":{"position":[[1131,8]]},"1803":{"position":[[52,8]]},"1815":{"position":[[379,5]]},"1839":{"position":[[539,5]]},"1844":{"position":[[79,5]]}}}],["polytrop",{"_index":1234,"t":{"225":{"position":[[461,10]]},"293":{"position":[[172,11]]},"300":{"position":[[174,11]]},"424":{"position":[[1206,10],[1558,10]]},"432":{"position":[[165,11],[238,11],[412,10],[478,10]]},"438":{"position":[[167,11],[240,11],[415,10],[481,10],[644,10],[710,10]]},"442":{"position":[[1429,11],[1861,10]]},"444":{"position":[[131,11],[236,10],[323,11],[396,11]]},"450":{"position":[[1039,11]]},"452":{"position":[[124,11],[200,11]]},"477":{"position":[[643,10]]},"567":{"position":[[721,10],[989,10],[1110,10],[1254,10],[1545,10],[1803,10],[1954,10],[2264,10],[2430,10],[2508,10]]},"578":{"position":[[829,10]]},"759":{"position":[[218,10],[284,10]]},"766":{"position":[[127,11],[308,11],[381,11]]},"773":{"position":[[221,10],[287,10],[450,10],[516,10]]},"780":{"position":[[127,11],[308,11],[381,11]]},"1044":{"position":[[64,11]]},"1046":{"position":[[60,11]]},"1189":{"position":[[199,10]]},"1191":{"position":[[140,11],[216,11]]},"1389":{"position":[[117,11]]},"1391":{"position":[[121,11],[194,11]]}}}],["polytropic\\_efficiency}{\\kappa",{"_index":2033,"t":{"567":{"position":[[2034,30]]}}}],["polytropic_effici",{"_index":1036,"t":{"201":{"position":[[411,22]]},"213":{"position":[[702,22]]},"225":{"position":[[1455,22]]},"233":{"position":[[748,22]]},"268":{"position":[[411,22]]},"280":{"position":[[918,22]]},"442":{"position":[[1407,21]]},"444":{"position":[[108,22]]},"446":{"position":[[120,22]]},"450":{"position":[[1017,21]]},"452":{"position":[[101,22]]},"454":{"position":[[106,22]]},"471":{"position":[[120,22]]},"475":{"position":[[106,22]]},"766":{"position":[[104,22]]},"768":{"position":[[120,22]]},"780":{"position":[[104,22]]},"782":{"position":[[120,22]]},"1189":{"position":[[0,21]]},"1191":{"position":[[117,22]]},"1193":{"position":[[108,22]]}}}],["polytropic_efficiencyκ−1\\frac{\\kappa",{"_index":2032,"t":{"567":{"position":[[1993,38]]}}}],["polytropic_head=nn−1zrt1mw((p1p2)n−1n−1)polytropic\\_head",{"_index":2017,"t":{"567":{"position":[[1583,56]]}}}],["poorli",{"_index":2342,"t":{"1460":{"position":[[144,6]]}}}],["portfolio",{"_index":123,"t":{"13":{"position":[[971,9]]}}}],["posit",{"_index":731,"t":{"133":{"position":[[123,8]]},"203":{"position":[[1183,9]]},"211":{"position":[[183,9],[1833,9]]},"270":{"position":[[1550,9]]},"278":{"position":[[184,9],[1855,9]]},"511":{"position":[[306,9]]},"683":{"position":[[94,9]]},"744":{"position":[[894,8],[933,8]]},"1179":{"position":[[887,8],[926,8]]}}}],["possibl",{"_index":388,"t":{"56":{"position":[[119,9]]},"58":{"position":[[944,13]]},"75":{"position":[[1208,8]]},"89":{"position":[[117,9]]},"91":{"position":[[259,8],[1446,8],[1917,8],[4941,8],[5164,8]]},"93":{"position":[[544,8],[930,9]]},"122":{"position":[[123,9]]},"153":{"position":[[1179,8]]},"177":{"position":[[1179,8]]},"304":{"position":[[718,8]]},"308":{"position":[[338,8]]},"424":{"position":[[2153,8]]},"434":{"position":[[299,8]]},"440":{"position":[[602,8]]},"442":{"position":[[571,8]]},"456":{"position":[[44,8]]},"496":{"position":[[189,8]]},"502":{"position":[[268,8]]},"529":{"position":[[109,8]]},"614":{"position":[[296,8]]},"648":{"position":[[161,8]]},"744":{"position":[[623,8],[727,8],[1065,9]]},"750":{"position":[[399,8]]},"886":{"position":[[6,8]]},"905":{"position":[[1048,8]]},"1084":{"position":[[571,8]]},"1117":{"position":[[44,8]]},"1179":{"position":[[616,8],[720,8],[1058,9]]},"1269":{"position":[[108,8]]},"1271":{"position":[[48,8]]},"1417":{"position":[[592,8]]},"1450":{"position":[[1165,8]]},"1651":{"position":[[491,11]]},"1723":{"position":[[616,8]]},"1732":{"position":[[39,8]]},"1750":{"position":[[259,8]]},"1787":{"position":[[484,9]]},"1790":{"position":[[4,11]]},"1844":{"position":[[42,8]]},"1858":{"position":[[229,8]]},"1878":{"position":[[95,8]]}}}],["potenti",{"_index":759,"t":{"135":{"position":[[521,12]]},"343":{"position":[[285,9]]},"450":{"position":[[1200,9],[1615,9]]},"567":{"position":[[4088,11]]},"1295":{"position":[[239,9]]},"1771":{"position":[[58,9]]},"1803":{"position":[[855,11]]},"1904":{"position":[[81,9]]}}}],["power",{"_index":272,"t":{"25":{"position":[[1426,6]]},"64":{"position":[[507,5]]},"91":{"position":[[1696,5],[1783,5],[1880,5],[2070,5],[2091,5]]},"112":{"position":[[188,5],[236,5]]},"143":{"position":[[424,5],[486,5],[604,5],[797,5]]},"157":{"position":[[56,5],[159,5]]},"161":{"position":[[413,5]]},"167":{"position":[[424,5],[486,5],[604,5],[797,5]]},"181":{"position":[[56,5],[159,5]]},"185":{"position":[[413,5]]},"191":{"position":[[586,5],[686,5],[784,5],[979,5],[1250,5]]},"207":{"position":[[56,5],[159,5]]},"209":{"position":[[56,5],[158,5]]},"215":{"position":[[399,6]]},"217":{"position":[[327,5],[385,5],[471,5],[532,5],[615,5]]},"223":{"position":[[337,5]]},"231":{"position":[[106,5]]},"236":{"position":[[11,6]]},"240":{"position":[[337,5],[935,5]]},"248":{"position":[[71,5],[259,5]]},"254":{"position":[[42,6]]},"256":{"position":[[22,5]]},"258":{"position":[[586,5],[686,5],[784,5],[979,5],[1250,5]]},"274":{"position":[[56,5],[159,5]]},"276":{"position":[[56,5],[158,5]]},"282":{"position":[[399,6]]},"287":{"position":[[1318,5]]},"304":{"position":[[909,5],[940,5]]},"308":{"position":[[0,5],[244,5],[281,5],[358,5],[408,5],[456,5],[620,5]]},"310":{"position":[[15,5]]},"313":{"position":[[5,5]]},"315":{"position":[[41,5]]},"317":{"position":[[206,5]]},"319":{"position":[[20,5],[33,5]]},"321":{"position":[[799,5]]},"336":{"position":[[848,5]]},"389":{"position":[[662,6]]},"391":{"position":[[800,5]]},"396":{"position":[[123,6],[144,5],[343,5]]},"401":{"position":[[5,5],[135,5]]},"403":{"position":[[58,6],[235,5],[422,5],[525,5],[696,5]]},"462":{"position":[[320,5]]},"464":{"position":[[787,5]]},"479":{"position":[[1097,5]]},"481":{"position":[[2739,5]]},"485":{"position":[[2065,5]]},"506":{"position":[[438,5]]},"539":{"position":[[125,5]]},"543":{"position":[[133,5]]},"563":{"position":[[209,5]]},"567":{"position":[[104,5],[1337,5]]},"576":{"position":[[9,5],[1163,5]]},"578":{"position":[[127,5],[469,5]]},"580":{"position":[[1006,5]]},"582":{"position":[[413,5]]},"594":{"position":[[296,6]]},"598":{"position":[[21,5],[69,5],[135,5]]},"602":{"position":[[11,5]]},"614":{"position":[[1330,5],[1486,6],[1742,5]]},"629":{"position":[[1460,6]]},"705":{"position":[[265,6]]},"709":{"position":[[29,5]]},"812":{"position":[[64,5],[234,5],[451,5]]},"946":{"position":[[260,6]]},"1030":{"position":[[308,5]]},"1034":{"position":[[318,5],[499,5]]},"1102":{"position":[[61,5]]},"1104":{"position":[[155,6]]},"1125":{"position":[[111,5]]},"1133":{"position":[[57,5]]},"1137":{"position":[[290,5]]},"1197":{"position":[[79,5]]},"1205":{"position":[[42,5],[107,5],[175,5],[237,5],[261,5],[496,5],[546,5]]},"1295":{"position":[[50,5]]},"1351":{"position":[[76,5]]},"1381":{"position":[[125,5]]},"1450":{"position":[[1066,5],[1194,5]]},"1528":{"position":[[25,5]]},"1538":{"position":[[30,5]]},"1540":{"position":[[364,5],[513,5]]},"1567":{"position":[[19,5]]},"1587":{"position":[[210,5]]},"1686":{"position":[[220,5],[1451,5]]},"1699":{"position":[[47,5]]},"1705":{"position":[[1089,5]]},"1713":{"position":[[51,5],[366,5],[393,5],[673,5],[761,5],[789,5],[874,5],[1282,5],[1412,5]]},"1720":{"position":[[0,5]]},"1723":{"position":[[249,5],[1536,5],[1690,5]]},"1725":{"position":[[783,5],[874,5],[952,5]]},"1730":{"position":[[12,5],[137,5],[190,5],[275,6],[302,5]]},"1735":{"position":[[671,5]]},"1744":{"position":[[162,5]]},"1746":{"position":[[12,5]]},"1767":{"position":[[25,5],[64,5],[130,5],[151,6],[194,5],[221,5]]},"1771":{"position":[[76,5],[399,5]]},"1790":{"position":[[36,5],[59,5],[171,5]]},"1793":{"position":[[998,5]]},"1801":{"position":[[123,5]]},"1803":{"position":[[617,5],[919,5]]},"1810":{"position":[[80,5]]},"1882":{"position":[[164,5]]},"1920":{"position":[[9,8]]}}}],["power,fuel",{"_index":934,"t":{"165":{"position":[[379,10]]},"189":{"position":[[379,10]]}}}],["power/energi",{"_index":2335,"t":{"1458":{"position":[[463,12]]}}}],["power=head∗mass_rateefficiency.pow",{"_index":1990,"t":{"563":{"position":[[249,36]]}}}],["power=polytropic_head∗mass_rateefficiencypow",{"_index":2014,"t":{"567":{"position":[[1376,46]]}}}],["power_adjustment_const",{"_index":1621,"t":{"369":{"position":[[558,26]]},"462":{"position":[[195,26]]},"464":{"position":[[662,26]]},"466":{"position":[[1070,26]]},"477":{"position":[[948,25]]},"479":{"position":[[972,26]]},"481":{"position":[[2614,26]]},"539":{"position":[[253,26]]},"541":{"position":[[284,26]]},"545":{"position":[[370,26]]},"547":{"position":[[185,26],[513,26]]},"1113":{"position":[[284,26]]},"1137":{"position":[[165,26]]},"1153":{"position":[[414,26]]},"1195":{"position":[[9,25]]},"1199":{"position":[[52,26]]},"1201":{"position":[[87,26]]},"1353":{"position":[[284,26]]},"1360":{"position":[[284,26]]},"1381":{"position":[[253,26]]},"1383":{"position":[[284,26]]},"1450":{"position":[[1098,25]]},"1458":{"position":[[401,25]]}}}],["power_adjustment_factor",{"_index":2328,"t":{"1450":{"position":[[1000,23]]}}}],["power_from_shor",{"_index":682,"t":{"112":{"position":[[34,16],[449,16]]},"1713":{"position":[[646,16]]},"1735":{"position":[[644,16]]},"1810":{"position":[[176,18]]}}}],["power_loss_factor",{"_index":3228,"t":{"1675":{"position":[[809,17]]}}}],["power_r",{"_index":3494,"t":{"1737":{"position":[[997,10]]},"1744":{"position":[[148,10]]}}}],["power_unit",{"_index":3503,"t":{"1771":{"position":[[259,10]]}}}],["powerlossfactor",{"_index":1638,"t":{"389":{"position":[[645,16]]},"582":{"position":[[593,16]]},"882":{"position":[[244,15]]},"884":{"position":[[590,15]]},"1104":{"position":[[138,16]]},"1203":{"position":[[45,15]]},"1205":{"position":[[198,15]]},"1207":{"position":[[0,16]]},"1209":{"position":[[0,16],[22,16]]},"1671":{"position":[[89,15]]}}}],["powerlossfactor}powerrequired​=1−powerlossfactorpowersubsea",{"_index":2275,"t":{"1205":{"position":[[383,61]]}}}],["powerrequired=powersubsea1−powerlossfactorpower_{requir",{"_index":2273,"t":{"1205":{"position":[[298,58]]}}}],["powersubseapower_{subsea}powersubsea",{"_index":2276,"t":{"1205":{"position":[[451,37]]}}}],["pr",{"_index":1229,"t":{"225":{"position":[[120,4],[1073,2]]},"233":{"position":[[366,2]]},"513":{"position":[[1184,3],[1235,2]]},"519":{"position":[[242,2]]},"889":{"position":[[143,2]]},"1544":{"position":[[335,2]]},"1618":{"position":[[176,2]]},"1692":{"position":[[22,2]]},"1900":{"position":[[215,3]]}}}],["practic",{"_index":745,"t":{"133":{"position":[[530,9]]},"137":{"position":[[56,8]]},"496":{"position":[[669,8]]},"679":{"position":[[227,9]]},"1084":{"position":[[1408,9]]},"1906":{"position":[[806,12]]}}}],["pre",{"_index":539,"t":{"91":{"position":[[298,3],[4980,3],[5078,3],[5254,3]]},"287":{"position":[[39,3]]},"460":{"position":[[651,4]]},"614":{"position":[[205,3]]},"1485":{"position":[[338,3]]},"1489":{"position":[[6,3]]},"1626":{"position":[[15,3]]},"1662":{"position":[[945,3]]},"1692":{"position":[[356,3]]},"1750":{"position":[[298,3]]},"1904":{"position":[[11,3]]},"1906":{"position":[[15,3]]}}}],["pre>stat",{"_index":3686,"t":{"1914":{"position":[[605,26]]}}}],["preced",{"_index":1556,"t":{"325":{"position":[[2431,9]]}}}],["precis",{"_index":2731,"t":{"1589":{"position":[[34,9]]}}}],["precompressor",{"_index":784,"t":{"137":{"position":[[468,13]]}}}],["predefin",{"_index":1045,"t":{"201":{"position":[[796,10]]},"213":{"position":[[1087,10]]},"268":{"position":[[796,10]]},"280":{"position":[[1303,10]]},"428":{"position":[[131,10],[161,10]]},"450":{"position":[[1270,10]]},"471":{"position":[[296,10]]},"473":{"position":[[593,10]]},"475":{"position":[[210,10]]},"513":{"position":[[547,10]]},"515":{"position":[[27,10]]},"517":{"position":[[83,10],[138,10]]},"519":{"position":[[14,10],[104,10],[220,10],[409,10]]},"648":{"position":[[23,10]]},"764":{"position":[[208,10]]},"778":{"position":[[208,10]]},"893":{"position":[[73,10]]},"967":{"position":[[147,10]]},"969":{"position":[[66,11]]},"971":{"position":[[73,10]]},"978":{"position":[[58,10]]},"993":{"position":[[122,11]]},"997":{"position":[[73,10]]},"1821":{"position":[[22,10]]}}}],["predefined_single_speed_compressor_chart",{"_index":1682,"t":{"434":{"position":[[16,40]]},"761":{"position":[[16,40]]}}}],["predefined_variable_speed_compressor_chart",{"_index":1042,"t":{"201":{"position":[[545,42],[1453,42]]},"213":{"position":[[836,42],[1744,42]]},"268":{"position":[[545,42],[1453,42],[1643,42],[1728,42]]},"280":{"position":[[1052,42],[1960,42],[2150,42],[2235,42]]},"440":{"position":[[16,42]]},"469":{"position":[[16,42],[900,42]]},"473":{"position":[[114,42],[893,42]]},"610":{"position":[[188,42]]},"775":{"position":[[16,42]]},"808":{"position":[[16,42]]},"1049":{"position":[[16,42]]},"1396":{"position":[[16,42]]}}}],["predict",{"_index":2074,"t":{"590":{"position":[[69,9]]},"1695":{"position":[[206,9]]},"1821":{"position":[[122,9]]}}}],["prefer",{"_index":3643,"t":{"1906":{"position":[[980,10]]}}}],["prefix",{"_index":189,"t":{"21":{"position":[[714,6]]},"25":{"position":[[767,7],[799,6]]},"629":{"position":[[801,7],[833,6]]},"1675":{"position":[[1003,6]]},"1943":{"position":[[270,8]]},"1945":{"position":[[429,8]]}}}],["prepar",{"_index":651,"t":{"93":{"position":[[2300,7]]},"1748":{"position":[[79,7]]},"1758":{"position":[[79,7]]},"1834":{"position":[[79,7]]}}}],["prereleas",{"_index":2554,"t":{"1533":{"position":[[31,11],[209,10],[261,10]]}}}],["prerequisit",{"_index":3548,"t":{"1878":{"position":[[283,14]]}}}],["presampl",{"_index":1972,"t":{"547":{"position":[[237,10]]}}}],["present",{"_index":517,"t":{"81":{"position":[[266,9]]},"291":{"position":[[251,7],[363,7]]},"683":{"position":[[55,7]]},"1295":{"position":[[151,7]]},"1622":{"position":[[22,12]]},"1653":{"position":[[330,12]]}}}],["preserv",{"_index":3467,"t":{"1728":{"position":[[530,9]]}}}],["pressur",{"_index":114,"t":{"13":{"position":[[771,9]]},"60":{"position":[[520,9]]},"137":{"position":[[449,8]]},"143":{"position":[[718,8],[751,8]]},"161":{"position":[[1268,8],[1291,8],[3310,8]]},"167":{"position":[[718,8],[751,8]]},"185":{"position":[[1268,8],[1291,8],[3310,8]]},"191":{"position":[[898,8],[931,8]]},"211":{"position":[[1866,8],[1889,8]]},"225":{"position":[[876,8],[935,8]]},"231":{"position":[[594,10],[1328,8],[2197,8]]},"258":{"position":[[898,8],[931,8]]},"278":{"position":[[1888,8],[1911,8]]},"287":{"position":[[71,9],[635,8],[716,8],[849,8]]},"304":{"position":[[114,9],[212,10],[230,9],[387,9],[407,9],[1490,8],[1554,8]]},"336":{"position":[[318,8]]},"355":{"position":[[451,8],[522,8],[550,8]]},"357":{"position":[[257,8],[309,8]]},"367":{"position":[[127,10]]},"369":{"position":[[264,9],[415,8],[467,8],[537,8],[901,8],[953,8]]},"373":{"position":[[66,9]]},"375":{"position":[[192,8],[244,8]]},"416":{"position":[[446,8],[498,8]]},"424":{"position":[[768,9],[866,10],[884,9],[1311,8],[1353,8],[1409,9],[1794,9],[1836,8],[2100,10],[2268,8],[2447,8],[2529,9]]},"426":{"position":[[296,9]]},"442":{"position":[[1737,8]]},"456":{"position":[[829,10]]},"460":{"position":[[108,9],[162,8]]},"466":{"position":[[80,8],[123,8],[290,8],[332,8],[864,8]]},"477":{"position":[[360,8],[383,9],[422,8],[523,9],[547,10]]},"479":{"position":[[135,8],[306,8],[339,8],[614,9],[875,9]]},"481":{"position":[[211,8],[270,9],[307,8],[366,8],[471,8],[2035,9],[2448,9],[2987,8]]},"483":{"position":[[146,8]]},"485":{"position":[[941,9],[1512,9],[1618,9],[1666,9],[1964,9]]},"487":{"position":[[1138,8]]},"489":{"position":[[366,9],[569,8],[788,9],[1014,8],[1109,8],[1291,8],[1481,8],[1939,8],[2067,9]]},"491":{"position":[[14,8],[147,8],[298,9],[351,8],[387,8],[418,8],[445,9],[530,8]]},"496":{"position":[[963,8],[1084,9],[1166,8],[1271,8],[1471,10]]},"498":{"position":[[545,8],[699,8],[735,9],[874,8],[1012,9],[1131,8],[1150,8],[1226,8],[1248,9],[1312,8],[1352,9]]},"500":{"position":[[151,8],[202,8],[293,8],[324,8],[428,8],[451,9],[486,8],[706,8],[754,8],[806,8],[893,9],[916,8],[999,8],[1044,8],[1183,8],[1243,9]]},"502":{"position":[[929,8],[1125,9],[1348,9],[1568,9],[1963,8],[2006,9],[2120,8],[2180,8]]},"504":{"position":[[279,8],[334,8],[401,8]]},"511":{"position":[[107,9]]},"513":{"position":[[858,8]]},"535":{"position":[[232,9]]},"563":{"position":[[398,9],[587,10]]},"567":{"position":[[303,9],[446,8],[1569,9],[2383,8],[2598,9],[2970,8],[3015,8],[3251,8],[3333,9],[3650,8],[3711,9],[3731,8],[4074,9],[4171,8],[4297,10]]},"576":{"position":[[698,9],[739,9]]},"606":{"position":[[193,10]]},"675":{"position":[[362,9],[623,9]]},"725":{"position":[[872,10]]},"738":{"position":[[878,9],[984,9],[1032,9]]},"744":{"position":[[464,8],[565,8],[641,8],[674,8],[709,9],[739,9]]},"750":{"position":[[367,10]]},"794":{"position":[[29,8]]},"796":{"position":[[31,8]]},"831":{"position":[[162,8],[220,8],[348,10]]},"1084":{"position":[[419,8]]},"1094":{"position":[[197,8],[268,8]]},"1096":{"position":[[984,8],[1122,9],[1273,9]]},"1098":{"position":[[164,8],[419,8]]},"1117":{"position":[[63,8],[145,8],[187,9]]},"1119":{"position":[[218,9],[330,9],[362,8],[430,8],[498,8],[683,8],[719,8]]},"1121":{"position":[[189,8]]},"1149":{"position":[[270,8]]},"1153":{"position":[[208,8]]},"1167":{"position":[[382,8],[475,8],[585,8],[633,8],[730,8],[844,8]]},"1173":{"position":[[63,8],[228,8],[314,8]]},"1175":{"position":[[65,8],[238,8],[328,8]]},"1179":{"position":[[457,8],[558,8],[634,8],[667,8],[702,9],[732,9]]},"1212":{"position":[[125,8],[466,9],[508,8],[566,8]]},"1214":{"position":[[93,8]]},"1220":{"position":[[163,8]]},"1222":{"position":[[91,9]]},"1271":{"position":[[302,8]]},"1273":{"position":[[293,9]]},"1275":{"position":[[192,8]]},"1277":{"position":[[392,9],[963,9],[1069,9],[1117,9]]},"1324":{"position":[[27,8],[208,8],[280,8]]},"1326":{"position":[[27,8]]},"1338":{"position":[[167,9]]},"1407":{"position":[[162,8],[219,8],[347,10]]},"1450":{"position":[[178,10],[290,9],[578,8],[922,8]]},"1452":{"position":[[73,9],[376,10]]},"1458":{"position":[[153,10]]},"1487":{"position":[[160,8],[232,8]]},"1492":{"position":[[13,8]]},"1498":{"position":[[152,8],[235,8]]},"1501":{"position":[[15,9]]},"1565":{"position":[[138,8]]},"1578":{"position":[[151,9]]},"1592":{"position":[[485,9],[706,8]]},"1605":{"position":[[8,8]]},"1662":{"position":[[668,9],[751,9],[918,9],[1409,9]]},"1667":{"position":[[33,9],[103,9]]},"1669":{"position":[[929,9]]},"1671":{"position":[[171,9]]},"1673":{"position":[[4,8],[42,8]]},"1682":{"position":[[21,8],[490,8],[534,8]]},"1686":{"position":[[289,8],[372,9],[512,8],[539,8],[597,8],[1519,8]]},"1703":{"position":[[69,8]]},"1713":{"position":[[1160,8]]},"1718":{"position":[[30,8],[239,8]]},"1723":{"position":[[714,8]]},"1725":{"position":[[503,8],[527,8],[1184,8]]},"1730":{"position":[[75,8]]},"1737":{"position":[[1068,9],[1152,9]]},"1785":{"position":[[68,8]]},"1823":{"position":[[195,8]]},"1826":{"position":[[15,9],[105,9]]},"1839":{"position":[[13,8]]},"1841":{"position":[[15,8],[216,8]]},"1844":{"position":[[395,9]]},"1851":{"position":[[68,8]]},"1858":{"position":[[43,9],[103,8],[171,9],[208,10],[280,10]]},"1860":{"position":[[308,9]]}}}],["pressure/suct",{"_index":1881,"t":{"502":{"position":[[1989,16]]}}}],["pressure_control",{"_index":1747,"t":{"448":{"position":[[130,17]]},"477":{"position":[[830,17]]},"479":{"position":[[105,17]]},"481":{"position":[[2957,17]]},"1119":{"position":[[96,16]]},"1121":{"position":[[105,17]]},"1212":{"position":[[4,16],[255,16]]},"1214":{"position":[[63,17]]},"1216":{"position":[[78,17]]},"1483":{"position":[[29,16]]},"1728":{"position":[[23,16],[103,17]]}}}],["pressure_drop_ahead_of_stag",{"_index":1803,"t":{"479":{"position":[[584,29],[845,29]]},"481":{"position":[[2005,29],[2418,29]]},"485":{"position":[[911,29],[1482,29],[1934,29]]},"487":{"position":[[1056,28]]},"675":{"position":[[332,29],[593,29]]},"738":{"position":[[848,29]]},"1218":{"position":[[26,28]]},"1222":{"position":[[61,29]]},"1224":{"position":[[65,29]]},"1269":{"position":[[129,28]]},"1273":{"position":[[263,29]]},"1277":{"position":[[362,29],[933,29]]},"1839":{"position":[[89,28]]}}}],["prevent",{"_index":531,"t":{"84":{"position":[[502,7]]},"1908":{"position":[[563,7]]}}}],["preview",{"_index":3560,"t":{"1878":{"position":[[564,7],[661,7]]}}}],["previou",{"_index":405,"t":{"58":{"position":[[698,8]]},"487":{"position":[[815,8]]},"1084":{"position":[[961,8]]},"1275":{"position":[[1085,8]]},"1851":{"position":[[526,8]]}}}],["previous",{"_index":395,"t":{"58":{"position":[[146,11],[1007,10]]},"60":{"position":[[0,10]]},"75":{"position":[[433,10],[1069,10]]},"81":{"position":[[70,10]]},"84":{"position":[[214,10]]},"91":{"position":[[2202,10]]},"93":{"position":[[672,10],[853,10]]},"107":{"position":[[622,11]]},"117":{"position":[[139,10]]},"129":{"position":[[256,11]]},"229":{"position":[[34,10]]},"231":{"position":[[479,10]]},"502":{"position":[[3,10]]},"1082":{"position":[[46,10]]},"1308":{"position":[[187,10]]},"1450":{"position":[[1078,10]]},"1458":{"position":[[653,10]]},"1725":{"position":[[1404,10]]},"1730":{"position":[[593,10]]},"1767":{"position":[[231,10]]},"1938":{"position":[[256,10]]}}}],["price",{"_index":669,"t":{"100":{"position":[[101,5]]},"1454":{"position":[[147,5]]},"1618":{"position":[[73,5]]},"1855":{"position":[[84,5]]}}}],["priorit",{"_index":3493,"t":{"1737":{"position":[[581,14],[1256,11]]}}}],["prioriti",{"_index":2989,"t":{"1653":{"position":[[139,8]]}}}],["priorityoptim",{"_index":3007,"t":{"1653":{"position":[[599,17]]}}}],["problem",{"_index":1582,"t":{"343":{"position":[[331,7]]},"477":{"position":[[313,7]]},"502":{"position":[[216,7]]},"1540":{"position":[[473,7]]},"1735":{"position":[[235,8]]},"1793":{"position":[[692,7],[820,7],[929,7]]},"1803":{"position":[[829,8]]},"1846":{"position":[[608,7]]},"1867":{"position":[[192,7]]}}}],["problemat",{"_index":3518,"t":{"1815":{"position":[[392,11]]}}}],["process",{"_index":72,"t":{"13":{"position":[[120,11],[797,10],[1064,10]]},"33":{"position":[[47,10]]},"149":{"position":[[30,10]]},"173":{"position":[[30,10]]},"197":{"position":[[30,10]]},"264":{"position":[[30,10]]},"325":{"position":[[1783,10],[1997,9],[2050,9],[2081,9]]},"353":{"position":[[482,7]]},"436":{"position":[[804,7]]},"442":{"position":[[276,7]]},"513":{"position":[[787,8]]},"567":{"position":[[129,8],[377,8],[927,7],[1000,8],[1121,7],[2247,8],[2275,7],[3937,7]]},"570":{"position":[[41,7]]},"576":{"position":[[824,9]]},"637":{"position":[[47,10]]},"717":{"position":[[1021,7]]},"721":{"position":[[441,7]]},"1054":{"position":[[111,10]]},"1149":{"position":[[48,7]]},"1181":{"position":[[133,9]]},"1291":{"position":[[838,7]]},"1295":{"position":[[262,7],[376,7]]},"1886":{"position":[[156,7],[554,8]]},"1896":{"position":[[254,7]]},"1938":{"position":[[224,8]]}}}],["produc",{"_index":644,"t":{"93":{"position":[[1260,8]]},"143":{"position":[[572,8]]},"157":{"position":[[240,8],[629,8]]},"161":{"position":[[854,8],[1336,8],[2011,8],[2075,8],[2213,8]]},"163":{"position":[[1910,8]]},"167":{"position":[[572,8]]},"181":{"position":[[240,8],[629,8]]},"185":{"position":[[854,8],[1336,8],[2011,8],[2075,8],[2213,8]]},"187":{"position":[[1910,8]]},"191":{"position":[[750,8]]},"207":{"position":[[240,8]]},"217":{"position":[[434,8]]},"248":{"position":[[50,9],[132,7]]},"258":{"position":[[750,8]]},"274":{"position":[[237,8]]},"511":{"position":[[37,8]]},"1017":{"position":[[558,8]]},"1914":{"position":[[52,8]]}}}],["produced_water_reinjection_condit",{"_index":867,"t":{"153":{"position":[[772,37]]},"161":{"position":[[1013,36],[1107,36]]},"163":{"position":[[1083,37]]},"177":{"position":[[772,37]]},"185":{"position":[[1013,36],[1107,36]]},"187":{"position":[[1083,37]]}}}],["produced_water_reinjection_total_system_rate_m3_per_day",{"_index":868,"t":{"153":{"position":[[839,56]]},"163":{"position":[[1150,56]]},"177":{"position":[[839,56]]},"187":{"position":[[1150,56]]}}}],["product",{"_index":71,"t":{"13":{"position":[[105,10],[424,10],[750,10]]},"64":{"position":[[113,10]]},"143":{"position":[[408,10],[659,10],[902,10]]},"153":{"position":[[1115,10]]},"157":{"position":[[197,10],[463,10]]},"161":{"position":[[83,10],[155,10],[956,10],[1211,10],[1863,10]]},"163":{"position":[[1518,10]]},"167":{"position":[[408,10],[659,10],[902,10]]},"177":{"position":[[1115,10]]},"181":{"position":[[197,10],[463,10]]},"185":{"position":[[83,10],[155,10],[956,10],[1211,10],[1863,10]]},"187":{"position":[[1518,10]]},"191":{"position":[[568,10],[601,10],[839,10],[1084,10],[1232,10],[1265,10]]},"207":{"position":[[197,10],[599,10],[634,10]]},"209":{"position":[[195,10],[539,10],[574,10]]},"211":{"position":[[83,10],[218,10],[253,10],[3531,10],[3584,10],[3619,10],[4137,10]]},"213":{"position":[[2516,10],[2551,10],[4401,10],[4436,10]]},"217":{"position":[[311,10]]},"240":{"position":[[211,10]]},"258":{"position":[[568,10],[601,10],[839,10],[1084,10],[1232,10],[1265,10]]},"272":{"position":[[698,10]]},"274":{"position":[[197,10],[592,10],[627,10]]},"276":{"position":[[195,10],[539,10],[574,10]]},"278":{"position":[[84,10],[219,10],[254,10],[3612,10],[3665,10],[3700,10],[4326,10]]},"280":{"position":[[3474,10],[3509,10],[5456,10],[5491,10]]},"317":{"position":[[162,11]]},"332":{"position":[[209,10]]},"576":{"position":[[579,10]]},"614":{"position":[[600,10],[763,10],[816,10],[934,10]]},"618":{"position":[[52,10]]},"679":{"position":[[319,10],[388,11]]},"683":{"position":[[80,10],[144,10]]},"1024":{"position":[[49,10]]},"1080":{"position":[[136,10]]},"1291":{"position":[[378,10]]},"1812":{"position":[[211,10]]},"1882":{"position":[[322,8]]}}}],["production/inject",{"_index":2045,"t":{"576":{"position":[[388,21]]}}}],["production_data.csv",{"_index":820,"t":{"147":{"position":[[81,20],[300,19]]},"163":{"position":[[42,19]]},"165":{"position":[[709,19]]},"171":{"position":[[81,20],[300,19]]},"187":{"position":[[42,19]]},"189":{"position":[[709,19]]},"195":{"position":[[81,20]]},"262":{"position":[[81,20]]}}}],["production_load",{"_index":2116,"t":{"683":{"position":[[112,15]]}}}],["profil",{"_index":93,"t":{"13":{"position":[[449,8]]},"240":{"position":[[222,8]]},"325":{"position":[[323,10]]},"527":{"position":[[590,8]]},"574":{"position":[[15,8]]},"1332":{"position":[[504,8]]},"1578":{"position":[[115,7]]},"1616":{"position":[[255,7]]}}}],["prognosi",{"_index":82,"t":{"13":{"position":[[253,9]]},"25":{"position":[[922,9],[1095,9]]},"629":{"position":[[956,9],[1129,9]]}}}],["program",{"_index":19,"t":{"5":{"position":[[58,11]]}}}],["programmat",{"_index":30,"t":{"7":{"position":[[122,16]]},"49":{"position":[[140,16]]}}}],["project",{"_index":1415,"t":{"287":{"position":[[486,9]]},"1886":{"position":[[56,8],[73,7]]},"1894":{"position":[[21,8]]},"1922":{"position":[[163,7]]},"1938":{"position":[[174,7]]},"1943":{"position":[[137,7]]},"1945":{"position":[[52,7],[148,7]]}}}],["prone",{"_index":3499,"t":{"1760":{"position":[[323,6]]}}}],["propan",{"_index":710,"t":{"124":{"position":[[359,8]]},"225":{"position":[[1201,8]]},"233":{"position":[[494,8]]},"469":{"position":[[606,8]]},"513":{"position":[[258,8]]},"521":{"position":[[213,7]]},"523":{"position":[[260,8]]},"525":{"position":[[201,8]]},"640":{"position":[[301,7]]},"642":{"position":[[260,8]]},"644":{"position":[[201,8]]}}}],["proper",{"_index":3475,"t":{"1730":{"position":[[766,6]]}}}],["properli",{"_index":3449,"t":{"1723":{"position":[[1635,9]]}}}],["properti",{"_index":1936,"t":{"513":{"position":[[1128,10]]},"567":{"position":[[3147,8]]},"1474":{"position":[[436,10]]},"1675":{"position":[[692,10]]},"1771":{"position":[[357,8]]},"1860":{"position":[[140,10]]}}}],["properties/st",{"_index":1805,"t":{"481":{"position":[[119,16]]}}}],["propos",{"_index":305,"t":{"35":{"position":[[170,8]]}}}],["protocol",{"_index":2436,"t":{"1487":{"position":[[129,8]]},"1512":{"position":[[115,9]]}}}],["proven",{"_index":525,"t":{"84":{"position":[[367,6]]}}}],["provid",{"_index":260,"t":{"25":{"position":[[951,8],[1124,8]]},"56":{"position":[[133,7]]},"64":{"position":[[169,8],[319,8]]},"89":{"position":[[131,7]]},"122":{"position":[[137,7]]},"304":{"position":[[899,7]]},"308":{"position":[[317,9],[465,9],[537,9]]},"580":{"position":[[1151,7]]},"629":{"position":[[985,8],[1158,8]]},"905":{"position":[[442,7],[594,7],[647,8]]},"1119":{"position":[[478,7]]},"1283":{"position":[[467,7],[620,8]]},"1592":{"position":[[1154,7]]},"1715":{"position":[[152,9]]},"1730":{"position":[[265,9]]},"1872":{"position":[[154,7]]},"1882":{"position":[[213,8]]},"1945":{"position":[[1286,7]]}}}],["publish",{"_index":3426,"t":{"1710":{"position":[[7,7]]}}}],["pull",{"_index":3589,"t":{"1886":{"position":[[114,4]]},"1894":{"position":[[76,4],[184,4]]},"1896":{"position":[[7,4],[111,4]]},"1900":{"position":[[24,4],[72,4],[247,4]]},"1930":{"position":[[4,4]]},"1943":{"position":[[58,4],[890,4]]},"1945":{"position":[[614,4],[857,4],[1090,5],[1177,4],[1227,4],[1252,4],[1479,4]]}}}],["pump",{"_index":103,"t":{"13":{"position":[[577,5]]},"91":{"position":[[117,4],[2143,4],[2186,4],[3230,4]]},"135":{"position":[[459,6]]},"143":{"position":[[599,4],[705,4],[792,4]]},"149":{"position":[[135,4],[298,5],[323,4]]},"157":{"position":[[268,4],[297,5],[656,4],[671,4],[738,4],[753,4]]},"161":{"position":[[881,4],[1073,4],[1363,4],[1378,4],[1409,4],[1660,4],[2555,4],[2570,4]]},"163":{"position":[[1937,4],[1952,4],[1983,4],[2242,4],[2257,4]]},"167":{"position":[[599,4],[705,4],[792,4]]},"173":{"position":[[135,4],[298,5],[323,4]]},"181":{"position":[[268,4],[297,5],[656,4],[671,4],[738,4],[753,4]]},"185":{"position":[[881,4],[1073,4],[1363,4],[1378,4],[1409,4],[1660,4],[2555,4],[2570,4]]},"187":{"position":[[1937,4],[1952,4],[1983,4],[2242,4],[2257,4]]},"191":{"position":[[777,4],[885,4],[972,4]]},"197":{"position":[[135,4],[265,4]]},"207":{"position":[[267,4],[296,5],[803,4],[827,4],[881,4],[898,4]]},"211":{"position":[[1509,4],[1691,4],[2047,4],[2071,4],[2114,6],[2764,4],[2931,4],[2974,4],[2991,4],[3022,4]]},"213":{"position":[[3137,4],[3161,4],[3204,6],[3862,4],[3879,4],[3910,4]]},"217":{"position":[[527,4],[610,4]]},"223":{"position":[[104,4],[205,4],[249,4]]},"231":{"position":[[251,5],[468,6],[513,4],[655,5],[706,4],[776,5],[824,5],[857,4],[920,4],[989,4],[1014,4],[1046,4],[1094,4],[1204,4],[1226,4],[1393,4],[1436,6],[2622,5]]},"233":{"position":[[1433,4],[1476,6]]},"242":{"position":[[691,5],[697,5],[1099,4]]},"244":{"position":[[115,4]]},"258":{"position":[[777,4],[885,4],[972,4]]},"264":{"position":[[135,4],[265,4]]},"274":{"position":[[264,4],[289,5],[796,4],[820,4],[874,4],[891,4]]},"278":{"position":[[1531,4],[1713,4],[2069,4],[2093,4],[2136,6],[2778,4],[2945,4],[2988,4],[3005,4],[3036,4]]},"280":{"position":[[4133,4],[4157,4],[4200,6],[4850,4],[4867,4],[4898,4]]},"285":{"position":[[0,5],[62,7],[133,5],[166,4],[285,5],[431,5]]},"287":{"position":[[17,5],[124,4],[148,6],[178,4],[216,5],[235,5],[245,4],[372,4],[798,4],[896,5],[919,6],[1024,4],[1244,4]]},"289":{"position":[[0,4],[33,5]]},"291":{"position":[[187,5],[399,4],[470,4]]},"293":{"position":[[225,5]]},"296":{"position":[[0,4],[41,5]]},"300":{"position":[[227,5]]},"371":{"position":[[0,4]]},"373":{"position":[[22,5],[32,4],[149,4]]},"375":{"position":[[26,4],[130,4]]},"377":{"position":[[26,4]]},"381":{"position":[[18,5]]},"383":{"position":[[72,6],[129,4]]},"385":{"position":[[38,6]]},"561":{"position":[[32,4]]},"563":{"position":[[41,4],[112,6],[227,4],[560,4],[666,4],[728,5],[787,5],[810,6],[915,4]]},"576":{"position":[[1026,6],[1062,6]]},"580":{"position":[[548,4],[649,6]]},"582":{"position":[[313,4]]},"590":{"position":[[51,6],[527,4]]},"614":{"position":[[1189,4],[1207,6],[1229,6]]},"801":{"position":[[46,4],[436,6]]},"806":{"position":[[125,5]]},"882":{"position":[[260,5]]},"884":{"position":[[427,4]]},"897":{"position":[[175,4]]},"960":{"position":[[37,4]]},"1034":{"position":[[17,4],[244,4]]},"1041":{"position":[[40,4],[422,6]]},"1046":{"position":[[25,5]]},"1167":{"position":[[1033,4],[1090,5]]},"1186":{"position":[[676,6]]},"1228":{"position":[[139,4]]},"1230":{"position":[[51,5]]},"1232":{"position":[[28,4]]},"1240":{"position":[[45,5]]},"1242":{"position":[[25,5],[73,4],[159,4]]},"1244":{"position":[[38,6],[95,4]]},"1246":{"position":[[38,6]]},"1248":{"position":[[33,4],[88,6]]},"1259":{"position":[[376,4],[396,6],[413,4]]},"1261":{"position":[[38,6],[53,5],[98,5]]},"1263":{"position":[[38,6]]},"1293":{"position":[[537,4]]},"1370":{"position":[[18,4]]},"1386":{"position":[[45,4],[122,5]]},"1389":{"position":[[25,5],[190,5]]},"1458":{"position":[[291,4]]},"1526":{"position":[[207,4]]},"1594":{"position":[[315,4]]},"1656":{"position":[[4,4]]},"1662":{"position":[[288,4]]},"1669":{"position":[[255,4],[1070,4]]},"1680":{"position":[[7,4]]},"1682":{"position":[[709,4]]},"1705":{"position":[[862,4]]},"1740":{"position":[[64,4]]},"1744":{"position":[[44,4]]},"1750":{"position":[[117,4]]},"1812":{"position":[[259,4]]},"1830":{"position":[[46,4],[92,4]]}}}],["pump'",{"_index":1412,"t":{"287":{"position":[[268,6]]}}}],["pump/compressor",{"_index":760,"t":{"135":{"position":[[546,15]]}}}],["pump1",{"_index":1110,"t":{"211":{"position":[[2129,5]]},"213":{"position":[[3219,5]]},"278":{"position":[[2151,5]]},"280":{"position":[[4215,5]]},"385":{"position":[[53,5]]},"1186":{"position":[[691,5]]},"1246":{"position":[[53,5]]},"1263":{"position":[[53,5]]}}}],["pump2",{"_index":1111,"t":{"211":{"position":[[2161,5]]},"213":{"position":[[3251,5]]},"278":{"position":[[2183,5]]},"280":{"position":[[4247,5]]},"385":{"position":[[105,5]]},"1186":{"position":[[743,5]]},"1246":{"position":[[105,5]]},"1263":{"position":[[105,5]]}}}],["pump3",{"_index":1112,"t":{"211":{"position":[[2193,5]]},"213":{"position":[[3283,5]]},"278":{"position":[[2215,5]]},"280":{"position":[[4279,5]]}}}],["pump4",{"_index":1113,"t":{"211":{"position":[[2225,5]]},"213":{"position":[[3315,5]]},"278":{"position":[[2247,5]]},"280":{"position":[[4311,5]]}}}],["pump_",{"_index":2295,"t":{"1248":{"position":[[275,6]]}}}],["pump_a",{"_index":2287,"t":{"1248":{"position":[[103,6]]}}}],["pump_a_lp",{"_index":1274,"t":{"231":{"position":[[1451,9]]},"233":{"position":[[1491,9]]}}}],["pump_b",{"_index":2289,"t":{"1248":{"position":[[146,6]]}}}],["pump_b_lp",{"_index":1275,"t":{"231":{"position":[[1483,9]]},"233":{"position":[[1523,9]]}}}],["pump_c",{"_index":2291,"t":{"1248":{"position":[[189,6]]}}}],["pump_chart",{"_index":839,"t":{"149":{"position":[[872,10]]},"161":{"position":[[1483,10]]},"163":{"position":[[402,10],[2057,10]]},"173":{"position":[[872,10]]},"185":{"position":[[1483,10]]},"187":{"position":[[402,10],[2057,10]]},"197":{"position":[[516,10]]},"211":{"position":[[2142,10],[2174,10],[2206,10],[2238,10],[2882,10],[3085,10]]},"213":{"position":[[222,10],[3232,10],[3264,10],[3296,10],[3328,10],[3973,10]]},"264":{"position":[[516,10]]},"278":{"position":[[2164,10],[2196,10],[2228,10],[2260,10],[2896,10],[3099,10]]},"280":{"position":[[438,10],[4228,10],[4260,10],[4292,10],[4324,10],[4961,10]]},"1740":{"position":[[27,10]]}}}],["pump_chart.csv",{"_index":840,"t":{"149":{"position":[[889,14]]},"163":{"position":[[419,14]]},"165":{"position":[[474,14]]},"173":{"position":[[889,14]]},"187":{"position":[[419,14]]},"189":{"position":[[474,14]]},"197":{"position":[[533,14]]},"213":{"position":[[239,14]]},"215":{"position":[[488,14]]},"264":{"position":[[533,14]]},"280":{"position":[[455,14]]},"282":{"position":[[488,14]]}}}],["pump_chart_single_spe",{"_index":586,"t":{"91":{"position":[[2656,23]]},"149":{"position":[[910,23]]},"163":{"position":[[440,23]]},"173":{"position":[[910,23]]},"187":{"position":[[440,23]]},"197":{"position":[[554,23]]},"213":{"position":[[260,23]]},"223":{"position":[[267,24],[522,23]]},"233":{"position":[[203,23]]},"246":{"position":[[332,23]]},"264":{"position":[[554,23]]},"280":{"position":[[476,23]]},"293":{"position":[[78,23]]},"302":{"position":[[91,23],[432,23]]},"806":{"position":[[78,23]]},"933":{"position":[[332,23]]},"1038":{"position":[[22,23]]},"1366":{"position":[[44,23]]},"1394":{"position":[[49,23]]},"1723":{"position":[[397,23]]}}}],["pump_chart_variable_spe",{"_index":592,"t":{"91":{"position":[[2800,25]]},"246":{"position":[[356,25]]},"300":{"position":[[78,25]]},"302":{"position":[[250,25]]},"933":{"position":[[356,25]]},"1232":{"position":[[39,25]]},"1366":{"position":[[68,25]]},"1723":{"position":[[425,25]]}}}],["pump_d",{"_index":2293,"t":{"1248":{"position":[[232,6]]}}}],["pump_nam",{"_index":2229,"t":{"1038":{"position":[[6,9]]}}}],["pump_sampl",{"_index":837,"t":{"149":{"position":[[814,12]]},"161":{"position":[[2627,12]]},"163":{"position":[[344,12],[2314,12]]},"173":{"position":[[814,12]]},"185":{"position":[[2627,12]]},"187":{"position":[[344,12],[2314,12]]}}}],["pump_sampled.csv",{"_index":838,"t":{"149":{"position":[[833,16]]},"163":{"position":[[363,16]]},"165":{"position":[[618,16]]},"173":{"position":[[833,16]]},"187":{"position":[[363,16]]},"189":{"position":[[618,16]]}}}],["pump_system",{"_index":1108,"t":{"211":{"position":[[1920,11],[1990,11],[2102,11]]},"213":{"position":[[3192,11]]},"231":{"position":[[1424,11]]},"233":{"position":[[1464,11]]},"278":{"position":[[1942,11],[2012,11],[2124,11]]},"280":{"position":[[4188,11]]},"383":{"position":[[26,11]]},"385":{"position":[[26,11]]},"884":{"position":[[432,11]]},"1167":{"position":[[73,11]]},"1177":{"position":[[67,12],[217,12]]},"1186":{"position":[[664,11]]},"1242":{"position":[[36,11]]},"1244":{"position":[[26,11]]},"1246":{"position":[[26,11]]},"1248":{"position":[[76,11]]},"1261":{"position":[[26,11]]},"1263":{"position":[[26,11]]},"1293":{"position":[[586,11]]},"1342":{"position":[[100,12]]},"1344":{"position":[[26,11]]},"1346":{"position":[[26,11]]},"1370":{"position":[[41,11]]}}}],["pure",{"_index":1518,"t":{"317":{"position":[[281,4]]},"410":{"position":[[15,4]]}}}],["puriti",{"_index":3636,"t":{"1906":{"position":[[825,7]]}}}],["purpos",{"_index":2039,"t":{"567":{"position":[[3232,9]]}}}],["push",{"_index":3732,"t":{"1930":{"position":[[98,4]]},"1932":{"position":[[4,4]]},"1943":{"position":[[772,4],[799,4]]},"1945":{"position":[[1023,4],[1046,4]]}}}],["put",{"_index":1124,"t":{"211":{"position":[[4237,3]]},"231":{"position":[[542,3]]},"278":{"position":[[4410,3]]},"287":{"position":[[1099,3]]},"341":{"position":[[84,3],[165,3]]},"521":{"position":[[443,3]]},"640":{"position":[[531,3]]},"1026":{"position":[[219,3],[278,3],[426,3],[485,3]]},"1034":{"position":[[91,3]]}}}],["pvt",{"_index":1699,"t":{"436":{"position":[[1000,3]]}}}],["pycharm",{"_index":3558,"t":{"1878":{"position":[[522,8]]}}}],["pydant",{"_index":2581,"t":{"1540":{"position":[[421,8]]},"1592":{"position":[[58,8],[658,8],[743,8],[901,8]]},"1616":{"position":[[76,8]]},"1620":{"position":[[256,8],[366,8]]},"1692":{"position":[[168,8]]},"1803":{"position":[[777,8]]}}}],["pydantic.v1",{"_index":2831,"t":{"1596":{"position":[[580,11]]}}}],["pypi",{"_index":3427,"t":{"1710":{"position":[[18,4]]}}}],["python",{"_index":13,"t":{"2":{"position":[[155,6]]},"7":{"position":[[11,6],[143,7],[260,6]]},"19":{"position":[[63,6],[127,6],[258,6]]},"49":{"position":[[51,6],[125,6]]},"51":{"position":[[206,6]]},"139":{"position":[[168,6]]},"141":{"position":[[113,6]]},"1472":{"position":[[7,6]]},"1544":{"position":[[429,6]]},"1592":{"position":[[107,6]]},"1596":{"position":[[87,6]]},"1662":{"position":[[1085,6]]},"1906":{"position":[[446,7],[488,6],[524,7]]}}}],["q",{"_index":1907,"t":{"511":{"position":[[88,1]]}}}],["q=25000⋅p1⋅(p2−p1)q",{"_index":1910,"t":{"511":{"position":[[144,19]]}}}],["qa",{"_index":657,"t":{"93":{"position":[[2613,2]]}}}],["qualiti",{"_index":79,"t":{"13":{"position":[[205,7],[946,7]]},"135":{"position":[[13,7]]}}}],["quantiti",{"_index":1464,"t":{"310":{"position":[[0,8]]},"379":{"position":[[0,8]]},"387":{"position":[[0,8]]},"1109":{"position":[[177,8]]}}}],["quarter",{"_index":2044,"t":{"576":{"position":[[326,8]]}}}],["quarterli",{"_index":506,"t":{"75":{"position":[[1138,9]]}}}],["queri",{"_index":2653,"t":{"1549":{"position":[[11,5]]},"1793":{"position":[[11,5],[63,5]]},"1846":{"position":[[97,5]]}}}],["question",{"_index":3650,"t":{"1906":{"position":[[1394,10]]}}}],["queue",{"_index":3316,"t":{"1686":{"position":[[1157,5]]}}}],["quick",{"_index":3579,"t":{"1882":{"position":[[590,5]]},"1912":{"position":[[10,5]]},"1943":{"position":[[114,5]]},"1945":{"position":[[86,5]]}}}],["quickli",{"_index":1559,"t":{"330":{"position":[[33,7]]}}}],["quot",{"_index":3682,"t":{"1914":{"position":[[448,6]]}}}],["quota",{"_index":668,"t":{"100":{"position":[[91,5]]},"1454":{"position":[[157,5]]},"1855":{"position":[[74,5]]}}}],["r",{"_index":2020,"t":{"567":{"position":[[1664,1]]}}}],["race",{"_index":3657,"t":{"1908":{"position":[[571,6],[755,6]]}}}],["rais",{"_index":2251,"t":{"1119":{"position":[[284,7]]},"1540":{"position":[[39,5]]},"1701":{"position":[[103,5]]},"1713":{"position":[[1193,5],[1691,5]]},"1793":{"position":[[1119,5]]},"1803":{"position":[[39,5]]}}}],["ran",{"_index":636,"t":{"93":{"position":[[683,3]]}}}],["rang",{"_index":497,"t":{"75":{"position":[[802,5]]},"137":{"position":[[458,5]]},"403":{"position":[[568,5]]}}}],["rate",{"_index":113,"t":{"13":{"position":[[761,5]]},"25":{"position":[[488,5]]},"31":{"position":[[985,5]]},"60":{"position":[[48,5],[62,5],[92,4],[261,5],[426,5],[479,4],[534,6]]},"75":{"position":[[496,4],[545,5],[655,5],[742,4],[855,4],[1228,4],[1245,5]]},"91":{"position":[[2687,5],[2833,5],[2992,5],[3149,5]]},"107":{"position":[[261,4],[403,5],[757,5],[780,5],[802,4],[843,4],[1086,5],[1109,4],[1133,4],[1174,4],[1231,5],[1254,4],[1278,4],[1319,4],[1523,5],[1564,5],[1584,4],[1615,5],[2010,5],[2065,5]]},"117":{"position":[[179,5],[241,5]]},"129":{"position":[[35,4],[205,5],[432,4],[610,5],[633,5],[655,4],[696,4],[882,5]]},"143":{"position":[[549,4],[567,4],[670,4],[695,5],[887,4],[913,4],[976,4],[1025,4],[1132,4]]},"149":{"position":[[949,5]]},"153":{"position":[[407,4],[1126,5],[1162,6]]},"161":{"position":[[376,4],[440,4],[681,5],[967,4],[1494,5],[1732,5],[1743,4],[1887,4],[1951,4],[2090,4],[2228,4],[2659,4],[3156,4],[3554,5]]},"163":{"position":[[479,5],[718,4],[1729,5],[2068,5],[2346,4],[2668,5]]},"167":{"position":[[549,4],[567,4],[670,4],[695,5],[887,4],[913,4],[976,4],[1025,4],[1132,4]]},"173":{"position":[[949,5]]},"177":{"position":[[407,4],[1126,5],[1162,6]]},"185":{"position":[[376,4],[440,4],[681,5],[967,4],[1494,5],[1732,5],[1743,4],[1887,4],[1951,4],[2090,4],[2228,4],[2659,4],[3156,4],[3554,5]]},"187":{"position":[[479,5],[718,4],[1729,5],[2068,5],[2346,4],[2668,5]]},"191":{"position":[[745,4],[850,4],[875,5],[1069,4],[1095,4],[1390,4]]},"197":{"position":[[585,5]]},"201":{"position":[[481,5],[645,5]]},"203":{"position":[[1175,4],[1203,4]]},"211":{"position":[[175,4],[538,4],[617,4],[766,5],[1603,4],[1825,4],[2838,5],[3096,5],[4148,4],[4474,5]]},"213":{"position":[[291,5],[772,5],[936,5],[3984,5],[4767,5]]},"215":{"position":[[21,5],[345,5],[503,5]]},"217":{"position":[[447,4],[597,4]]},"223":{"position":[[561,5]]},"225":{"position":[[370,4]]},"231":{"position":[[605,5],[758,5],[905,5],[959,4],[1117,4]]},"233":{"position":[[242,5]]},"258":{"position":[[745,4],[850,4],[875,5],[1069,4],[1095,4],[1390,4]]},"264":{"position":[[585,5]]},"268":{"position":[[481,5],[645,5]]},"270":{"position":[[1542,4],[1570,4]]},"272":{"position":[[810,6]]},"278":{"position":[[176,4],[577,4],[656,4],[805,5],[1625,4],[1847,4],[2852,5],[3110,5],[4337,4]]},"280":{"position":[[74,4],[507,5],[988,5],[1152,5],[4972,5]]},"282":{"position":[[21,5],[345,5],[503,5]]},"287":{"position":[[64,6],[298,5],[348,4],[410,4],[478,4],[991,4]]},"289":{"position":[[63,4]]},"291":{"position":[[10,4]]},"293":{"position":[[109,5],[115,5]]},"296":{"position":[[78,4]]},"298":{"position":[[0,5]]},"300":{"position":[[111,5],[117,5]]},"302":{"position":[[122,5],[283,5],[463,5]]},"304":{"position":[[104,5],[198,7],[372,6],[1343,5],[1372,6]]},"308":{"position":[[78,4]]},"310":{"position":[[24,4]]},"313":{"position":[[0,4]]},"315":{"position":[[0,4]]},"317":{"position":[[147,5]]},"321":{"position":[[78,5],[504,4],[570,4],[638,4],[755,5],[1752,4]]},"336":{"position":[[277,4],[875,4]]},"355":{"position":[[282,5],[404,4]]},"357":{"position":[[206,5],[212,5]]},"359":{"position":[[82,5]]},"363":{"position":[[279,4]]},"365":{"position":[[356,6],[475,6]]},"373":{"position":[[37,5]]},"375":{"position":[[141,5],[147,5]]},"377":{"position":[[77,5]]},"379":{"position":[[23,4]]},"381":{"position":[[104,4]]},"383":{"position":[[210,4]]},"387":{"position":[[23,4]]},"389":{"position":[[423,4],[581,4],[766,4]]},"396":{"position":[[105,4]]},"414":{"position":[[107,4]]},"416":{"position":[[385,5],[391,5]]},"424":{"position":[[758,5],[852,7]]},"432":{"position":[[102,5],[108,5],[348,5],[363,4]]},"434":{"position":[[112,5],[181,5]]},"436":{"position":[[245,4]]},"438":{"position":[[104,5],[110,5],[351,5],[366,4],[580,5],[595,4]]},"440":{"position":[[116,5],[186,5],[303,5],[444,5]]},"442":{"position":[[742,5],[838,5],[1148,4],[1531,5],[1598,4],[1705,4],[1810,5]]},"444":{"position":[[209,5],[260,5],[266,5]]},"446":{"position":[[189,5]]},"450":{"position":[[146,5],[305,4],[884,4],[1409,4],[1596,5]]},"456":{"position":[[262,4],[482,4]]},"462":{"position":[[421,4]]},"469":{"position":[[116,5],[186,5],[304,5]]},"471":{"position":[[189,5]]},"473":{"position":[[214,5],[284,5],[402,5]]},"477":{"position":[[346,5],[508,6]]},"479":{"position":[[1197,4]]},"481":{"position":[[1329,4],[1499,4],[2839,4]]},"487":{"position":[[908,4],[969,4],[1027,4]]},"489":{"position":[[356,5],[812,6]]},"496":{"position":[[942,6],[1154,4],[1204,6],[1329,4],[1486,4],[1705,4]]},"498":{"position":[[682,4]]},"500":{"position":[[173,4],[270,4],[414,5],[952,4]]},"502":{"position":[[855,4],[1019,4],[1217,4],[1316,4],[1403,4],[1649,4],[1742,4],[1798,4],[2235,4]]},"504":{"position":[[167,5],[224,4]]},"509":{"position":[[4,4],[68,4],[118,4]]},"511":{"position":[[4,4],[46,4],[298,4],[327,5]]},"559":{"position":[[242,5]]},"567":{"position":[[277,5],[836,5]]},"574":{"position":[[48,4]]},"576":{"position":[[590,4],[838,4],[1155,4]]},"580":{"position":[[700,4]]},"606":{"position":[[108,4],[361,4]]},"608":{"position":[[461,4]]},"629":{"position":[[522,5]]},"635":{"position":[[985,5]]},"666":{"position":[[197,4]]},"717":{"position":[[50,5],[79,5],[112,5],[208,4],[473,5],[548,6],[672,4],[868,4],[958,4],[1091,4],[1175,5]]},"721":{"position":[[23,4],[189,4],[256,4],[316,4],[517,4]]},"725":{"position":[[526,4]]},"744":{"position":[[25,5],[84,4],[273,4],[296,4],[414,5],[514,4]]},"750":{"position":[[165,4]]},"757":{"position":[[374,5]]},"759":{"position":[[154,5],[169,4]]},"761":{"position":[[130,5]]},"766":{"position":[[205,5],[245,5],[251,5]]},"768":{"position":[[189,5]]},"771":{"position":[[442,5]]},"773":{"position":[[157,5],[172,4],[386,5],[401,4]]},"775":{"position":[[135,5],[252,5]]},"780":{"position":[[205,5],[245,5],[251,5]]},"782":{"position":[[189,5]]},"801":{"position":[[419,4]]},"808":{"position":[[116,5],[186,5]]},"839":{"position":[[28,4]]},"841":{"position":[[25,4]]},"847":{"position":[[240,4]]},"849":{"position":[[42,4]]},"855":{"position":[[241,5]]},"862":{"position":[[71,4]]},"864":{"position":[[26,5],[42,5]]},"866":{"position":[[23,5],[84,5]]},"874":{"position":[[122,4]]},"876":{"position":[[227,4]]},"878":{"position":[[34,5],[57,5],[79,4],[120,4]]},"880":{"position":[[22,5]]},"882":{"position":[[266,4]]},"886":{"position":[[381,4],[515,4]]},"921":{"position":[[179,5]]},"1003":{"position":[[49,4],[111,4]]},"1005":{"position":[[14,5],[86,4]]},"1038":{"position":[[61,5]]},"1041":{"position":[[405,4]]},"1049":{"position":[[116,5],[186,5]]},"1084":{"position":[[352,5],[651,5],[796,5],[859,4],[911,4],[1067,4],[1119,4],[1270,4]]},"1104":{"position":[[93,4]]},"1119":{"position":[[312,5]]},"1137":{"position":[[391,4]]},"1167":{"position":[[111,4],[224,6],[250,4],[1157,6]]},"1169":{"position":[[55,4],[100,5]]},"1171":{"position":[[55,4],[179,5]]},"1179":{"position":[[23,5],[75,4],[266,4],[289,4],[407,5],[507,4]]},"1181":{"position":[[59,4],[120,4]]},"1183":{"position":[[55,4]]},"1186":{"position":[[356,6],[475,6]]},"1226":{"position":[[45,4]]},"1228":{"position":[[51,4],[203,4]]},"1230":{"position":[[0,5],[6,5],[88,5]]},"1232":{"position":[[0,5],[76,5]]},"1236":{"position":[[119,5],[142,5],[164,4],[211,4]]},"1238":{"position":[[122,5]]},"1252":{"position":[[19,4]]},"1254":{"position":[[19,5],[39,5]]},"1259":{"position":[[55,4],[187,5],[278,4],[447,4],[544,4]]},"1261":{"position":[[162,5]]},"1275":{"position":[[1178,4],[1239,4],[1297,4]]},"1291":{"position":[[76,4],[144,4],[183,6],[244,6],[300,6],[431,5],[514,4],[598,5],[668,4],[705,4],[797,4],[813,4],[919,5],[1169,5],[1350,5],[1414,6]]},"1293":{"position":[[82,6],[260,4],[279,4],[354,4],[376,5],[474,4]]},"1295":{"position":[[9,5],[67,5],[108,6],[136,5],[216,4]]},"1304":{"position":[[58,5],[106,4],[200,5],[271,4],[310,4],[402,5]]},"1336":{"position":[[103,5],[241,5]]},"1342":{"position":[[32,4]]},"1344":{"position":[[88,4],[212,4]]},"1389":{"position":[[54,5],[60,5]]},"1391":{"position":[[58,5],[64,5]]},"1394":{"position":[[84,5]]},"1396":{"position":[[116,5]]},"1399":{"position":[[76,4],[112,4]]},"1401":{"position":[[41,5],[64,5],[86,4],[169,4],[236,5],[259,5],[281,4],[344,4]]},"1403":{"position":[[22,5]]},"1417":{"position":[[638,5]]},"1431":{"position":[[275,5]]},"1435":{"position":[[122,5],[183,5]]},"1439":{"position":[[102,5]]},"1443":{"position":[[123,4]]},"1445":{"position":[[8,5]]},"1447":{"position":[[8,5]]},"1526":{"position":[[186,4]]},"1540":{"position":[[111,4],[134,4]]},"1572":{"position":[[61,4]]},"1614":{"position":[[12,4]]},"1624":{"position":[[26,4]]},"1635":{"position":[[16,4]]},"1645":{"position":[[40,4]]},"1651":{"position":[[431,4]]},"1658":{"position":[[100,4]]},"1662":{"position":[[275,4]]},"1669":{"position":[[247,4],[308,4],[622,4],[776,4],[1062,4]]},"1673":{"position":[[87,4]]},"1682":{"position":[[871,4],[943,4]]},"1701":{"position":[[194,4]]},"1705":{"position":[[1108,4]]},"1713":{"position":[[1182,5],[1748,4]]},"1720":{"position":[[6,4]]},"1723":{"position":[[315,4]]},"1725":{"position":[[630,6]]},"1730":{"position":[[143,4],[196,4],[308,4]]},"1737":{"position":[[250,4],[680,5]]},"1771":{"position":[[32,4]]},"1777":{"position":[[8,4]]},"1787":{"position":[[288,5],[374,5]]},"1803":{"position":[[148,4],[171,4]]},"1812":{"position":[[222,4],[247,4]]},"1821":{"position":[[269,5],[318,5]]},"1832":{"position":[[164,5]]},"1844":{"position":[[453,4]]},"1846":{"position":[[237,4],[520,4],[665,4]]},"1851":{"position":[[60,4],[243,4]]},"1853":{"position":[[80,4]]},"1858":{"position":[[299,4],[332,4]]},"1860":{"position":[[7,4],[68,4],[179,4],[326,4]]},"1865":{"position":[[16,4],[70,4]]},"1872":{"position":[[170,4],[245,4]]}}}],["rate,fuel",{"_index":928,"t":{"165":{"position":[[279,9]]},"189":{"position":[[279,9]]}}}],["rate,head,efficiency,spe",{"_index":1302,"t":{"236":{"position":[[308,26]]}}}],["rate,pow",{"_index":911,"t":{"165":{"position":[[23,10],[635,10]]},"189":{"position":[[23,10],[635,10]]}}}],["rate/head",{"_index":1278,"t":{"231":{"position":[[1974,9]]},"450":{"position":[[816,9]]},"481":{"position":[[802,11]]},"1189":{"position":[[252,9]]}}}],["rate.csv",{"_index":1462,"t":{"306":{"position":[[118,18]]}}}],["satisfi",{"_index":2055,"t":{"578":{"position":[[457,7]]}}}],["save",{"_index":3522,"t":{"1830":{"position":[[3,4]]},"1938":{"position":[[151,4]]}}}],["say",{"_index":663,"t":{"97":{"position":[[186,6]]},"1862":{"position":[[182,6]]}}}],["scale",{"_index":1737,"t":{"442":{"position":[[1239,7]]},"1815":{"position":[[71,6]]}}}],["scan",{"_index":319,"t":{"39":{"position":[[133,8]]},"45":{"position":[[239,8]]}}}],["scenario",{"_index":1264,"t":{"231":{"position":[[237,9]]},"498":{"position":[[518,9]]},"1920":{"position":[[238,9]]}}}],["schema",{"_index":2748,"t":{"1592":{"position":[[261,6],[311,6],[1239,6]]},"1669":{"position":[[560,6]]},"1675":{"position":[[86,6],[134,6],[181,6],[228,6],[272,6],[319,6],[365,6],[410,6]]},"1682":{"position":[[231,6],[317,6]]}}}],["scienc",{"_index":2241,"t":{"1084":{"position":[[997,7],[1201,7]]}}}],["scientif",{"_index":3256,"t":{"1682":{"position":[[587,10]]}}}],["scm.com",{"_index":3710,"t":{"1918":{"position":[[10,7]]}}}],["scope",{"_index":3653,"t":{"1908":{"position":[[117,7]]}}}],["script",{"_index":2639,"t":{"1544":{"position":[[623,6],[663,6]]}}}],["scroll",{"_index":639,"t":{"93":{"position":[[1179,9]]}}}],["sd",{"_index":1385,"t":{"272":{"position":[[782,4]]},"1291":{"position":[[178,4]]}}}],["sea",{"_index":808,"t":{"143":{"position":[[772,3]]},"157":{"position":[[277,3],[718,3]]},"161":{"position":[[1640,3],[2140,4],[2321,4],[2535,3]]},"163":{"position":[[2222,3]]},"167":{"position":[[772,3]]},"181":{"position":[[277,3],[718,3]]},"185":{"position":[[1640,3],[2140,4],[2321,4],[2535,3]]},"187":{"position":[[2222,3]]},"191":{"position":[[952,3]]},"207":{"position":[[276,3]]},"217":{"position":[[507,3]]},"258":{"position":[[952,3]]}}}],["sea_wat",{"_index":2782,"t":{"1594":{"position":[[123,9]]}}}],["sea_water_injection_rate_m3_per_day",{"_index":857,"t":{"153":{"position":[[442,36]]},"161":{"position":[[2431,35]]},"163":{"position":[[753,36]]},"177":{"position":[[442,36]]},"185":{"position":[[2431,35]]},"187":{"position":[[753,36]]}}}],["search",{"_index":2510,"t":{"1524":{"position":[[68,6]]}}}],["seawat",{"_index":897,"t":{"161":{"position":[[1713,8],[1932,8]]},"185":{"position":[[1713,8],[1932,8]]},"211":{"position":[[2819,8]]},"278":{"position":[[2833,8]]}}}],["seawater_inj",{"_index":902,"t":{"161":{"position":[[1956,15],[2027,12],[2155,12],[2331,12]]},"185":{"position":[[1956,15],[2027,12],[2155,12],[2331,12]]}}}],["secant",{"_index":3491,"t":{"1737":{"position":[[441,6],[558,6]]}}}],["second",{"_index":1018,"t":{"191":{"position":[[160,6]]},"211":{"position":[[671,6]]},"231":{"position":[[913,6]]},"258":{"position":[[160,6]]},"278":{"position":[[710,6]]},"464":{"position":[[555,6]]},"479":{"position":[[785,6]]},"481":{"position":[[2275,6]]},"489":{"position":[[684,6],[859,6],[1454,6]]},"502":{"position":[[2454,6],[2575,6]]},"675":{"position":[[533,6]]},"744":{"position":[[926,6],[949,6]]},"905":{"position":[[305,7]]},"1179":{"position":[[919,6],[942,6]]},"1181":{"position":[[150,6],[171,6]]},"1183":{"position":[[14,6]]},"1283":{"position":[[348,7]]}}}],["seconds\\_per\\_day}{lower\\_heating\\_valu",{"_index":1962,"t":{"537":{"position":[[432,40]]}}}],["seconds_per_hour",{"_index":3620,"t":{"1906":{"position":[[140,16]]}}}],["section",{"_index":146,"t":{"17":{"position":[[97,8],[277,8]]},"137":{"position":[[5,7]]},"201":{"position":[[86,8]]},"223":{"position":[[56,7],[192,8]]},"225":{"position":[[10,7]]},"229":{"position":[[21,8]]},"231":{"position":[[2589,8]]},"240":{"position":[[5,7],[88,8],[795,7]]},"268":{"position":[[86,8]]},"336":{"position":[[51,7]]},"353":{"position":[[114,7],[258,9],[302,7],[521,8]]},"371":{"position":[[47,8]]},"373":{"position":[[191,7]]},"424":{"position":[[1023,8],[1062,7],[2027,8]]},"426":{"position":[[5,7]]},"489":{"position":[[625,7],[1037,7],[1214,7],[1461,8]]},"498":{"position":[[82,8],[504,8]]},"551":{"position":[[35,7]]},"559":{"position":[[36,8]]},"561":{"position":[[5,7]]},"565":{"position":[[5,7]]},"801":{"position":[[203,8],[300,8],[483,8]]},"974":{"position":[[110,8]]},"1041":{"position":[[195,8],[280,8],[469,8]]},"1094":{"position":[[140,9]]},"1098":{"position":[[30,7]]},"1379":{"position":[[103,8]]},"1483":{"position":[[107,7]]},"1485":{"position":[[35,7]]},"1882":{"position":[[632,8]]},"1920":{"position":[[293,8]]}}}],["see",{"_index":159,"t":{"19":{"position":[[331,3]]},"49":{"position":[[258,3]]},"51":{"position":[[110,3],[288,3]]},"58":{"position":[[924,3],[1068,3]]},"64":{"position":[[590,3]]},"91":{"position":[[1562,3],[2087,3],[3205,3],[5273,3]]},"93":{"position":[[1585,3],[1811,3],[2476,3],[2770,3]]},"147":{"position":[[221,3]]},"149":{"position":[[148,3],[470,3]]},"171":{"position":[[221,3]]},"173":{"position":[[148,3],[470,3]]},"195":{"position":[[221,3]]},"197":{"position":[[148,3]]},"201":{"position":[[95,3],[1496,3]]},"205":{"position":[[557,3]]},"211":{"position":[[933,3],[1986,3]]},"225":{"position":[[381,3]]},"231":{"position":[[1222,3]]},"262":{"position":[[221,3]]},"264":{"position":[[148,3]]},"268":{"position":[[95,3],[1871,3]]},"272":{"position":[[557,3]]},"278":{"position":[[972,3],[2008,3]]},"334":{"position":[[375,3]]},"336":{"position":[[589,3]]},"343":{"position":[[98,3]]},"416":{"position":[[176,3]]},"424":{"position":[[2001,3]]},"436":{"position":[[637,3]]},"460":{"position":[[486,3]]},"487":{"position":[[1318,3]]},"489":{"position":[[140,3],[1126,4]]},"491":{"position":[[520,3]]},"504":{"position":[[770,3]]},"531":{"position":[[478,3]]},"567":{"position":[[599,3],[3059,3],[3456,3],[3830,3],[4229,3]]},"614":{"position":[[1031,3]]},"666":{"position":[[258,3]]},"683":{"position":[[254,3]]},"695":{"position":[[0,3]]},"725":{"position":[[883,3]]},"750":{"position":[[473,3]]},"764":{"position":[[174,3]]},"778":{"position":[[174,3]]},"831":{"position":[[280,3]]},"927":{"position":[[0,3]]},"933":{"position":[[382,3]]},"956":{"position":[[0,3]]},"990":{"position":[[353,3]]},"1017":{"position":[[586,3]]},"1030":{"position":[[467,3]]},"1054":{"position":[[79,3]]},"1068":{"position":[[0,3]]},"1080":{"position":[[398,3]]},"1090":{"position":[[0,3]]},"1096":{"position":[[1205,3]]},"1159":{"position":[[75,3]]},"1293":{"position":[[382,3]]},"1338":{"position":[[281,3]]},"1407":{"position":[[279,3]]},"1458":{"position":[[85,3]]},"1713":{"position":[[196,3],[518,3],[967,3],[1424,3],[1546,3],[2120,3]]},"1735":{"position":[[2171,3]]},"1740":{"position":[[60,3]]},"1787":{"position":[[53,4]]},"1819":{"position":[[77,3]]},"1828":{"position":[[77,3]]},"1830":{"position":[[79,6]]},"1882":{"position":[[615,3]]},"1888":{"position":[[0,3]]},"1898":{"position":[[206,3]]},"1902":{"position":[[64,3]]},"1916":{"position":[[317,3]]},"1918":{"position":[[164,3]]}}}],["seemingli",{"_index":298,"t":{"35":{"position":[[69,9]]}}}],["seen",{"_index":725,"t":{"131":{"position":[[151,4]]},"135":{"position":[[190,4],[596,4],[1160,5]]},"244":{"position":[[40,4]]},"496":{"position":[[682,4]]},"502":{"position":[[758,4],[800,4]]},"1291":{"position":[[951,4]]},"1415":{"position":[[226,4]]}}}],["select",{"_index":770,"t":{"135":{"position":[[1326,9]]},"225":{"position":[[137,8]]},"513":{"position":[[524,8]]},"1417":{"position":[[346,8]]}}}],["self",{"_index":3616,"t":{"1904":{"position":[[154,4],[181,4]]},"1906":{"position":[[322,4]]}}}],["selftest",{"_index":216,"t":{"23":{"position":[[599,9]]},"27":{"position":[[63,8]]},"627":{"position":[[612,9]]},"631":{"position":[[63,8]]},"1470":{"position":[[10,8]]}}}],["send",{"_index":1094,"t":{"211":{"position":[[608,4]]},"278":{"position":[[647,4]]},"744":{"position":[[581,9],[1010,4]]},"1179":{"position":[[574,9],[1003,4]]},"1183":{"position":[[40,4]]},"1940":{"position":[[12,4]]},"1945":{"position":[[848,4]]}}}],["sens",{"_index":2063,"t":{"580":{"position":[[1195,6]]}}}],["sensit",{"_index":628,"t":{"91":{"position":[[5212,9]]},"614":{"position":[[367,10]]}}}],["separ",{"_index":263,"t":{"25":{"position":[[1008,9],[1181,9]]},"60":{"position":[[600,8]]},"64":{"position":[[402,10]]},"91":{"position":[[354,9],[5036,9]]},"147":{"position":[[65,9]]},"171":{"position":[[65,9]]},"195":{"position":[[65,9]]},"240":{"position":[[79,8]]},"242":{"position":[[353,9]]},"246":{"position":[[156,9]]},"248":{"position":[[288,8]]},"262":{"position":[[65,9]]},"498":{"position":[[140,8]]},"576":{"position":[[688,9],[729,9]]},"629":{"position":[[1042,9],[1215,9]]},"801":{"position":[[169,8]]},"931":{"position":[[278,9]]},"933":{"position":[[156,9]]},"1041":{"position":[[161,8]]},"1052":{"position":[[24,8]]},"1094":{"position":[[131,8]]},"1450":{"position":[[90,10]]},"1530":{"position":[[171,8]]},"1653":{"position":[[92,10]]},"1664":{"position":[[491,8]]},"1682":{"position":[[670,10]]},"1713":{"position":[[411,10]]},"1750":{"position":[[354,9]]},"1793":{"position":[[749,8]]},"1801":{"position":[[273,8]]},"1815":{"position":[[247,8]]},"1898":{"position":[[132,8]]}}}],["seri",{"_index":222,"t":{"25":{"position":[[99,6]]},"33":{"position":[[163,6]]},"58":{"position":[[66,6],[206,6],[428,6],[482,6],[1106,6],[1337,6]]},"60":{"position":[[77,7]]},"62":{"position":[[22,6]]},"145":{"position":[[54,6]]},"147":{"position":[[119,6]]},"169":{"position":[[54,6]]},"171":{"position":[[119,6]]},"193":{"position":[[54,6]]},"195":{"position":[[119,6]]},"219":{"position":[[58,6]]},"260":{"position":[[54,6]]},"262":{"position":[[119,6]]},"325":{"position":[[707,6]]},"334":{"position":[[288,6],[384,6]]},"487":{"position":[[1248,6]]},"527":{"position":[[328,6]]},"529":{"position":[[19,6]]},"531":{"position":[[71,6]]},"574":{"position":[[128,6]]},"586":{"position":[[469,6]]},"602":{"position":[[77,6]]},"629":{"position":[[133,6]]},"637":{"position":[[163,6]]},"679":{"position":[[131,6]]},"841":{"position":[[58,7]]},"847":{"position":[[170,6]]},"876":{"position":[[165,6]]},"884":{"position":[[166,6]]},"917":{"position":[[10,6]]},"1017":{"position":[[193,6],[265,6]]},"1072":{"position":[[295,6]]},"1220":{"position":[[316,6]]},"1324":{"position":[[169,6]]},"1332":{"position":[[242,6]]},"1334":{"position":[[51,6],[68,6]]},"1338":{"position":[[290,6]]},"1474":{"position":[[490,6]]},"1528":{"position":[[202,6]]},"1594":{"position":[[455,6]]},"1622":{"position":[[61,6]]},"1651":{"position":[[188,6],[372,6]]},"1673":{"position":[[145,6]]},"1675":{"position":[[403,6]]},"1808":{"position":[[85,6],[116,6]]}}}],["serial",{"_index":2762,"t":{"1592":{"position":[[822,13]]}}}],["servic",{"_index":3708,"t":{"1916":{"position":[[293,7]]}}}],["set",{"_index":206,"t":{"23":{"position":[[264,3]]},"25":{"position":[[420,3]]},"31":{"position":[[917,3]]},"51":{"position":[[241,7]]},"58":{"position":[[919,4]]},"60":{"position":[[110,3],[186,3],[310,3],[436,3]]},"64":{"position":[[345,4],[727,3]]},"73":{"position":[[57,7],[101,7],[160,8],[273,7]]},"75":{"position":[[165,3]]},"84":{"position":[[113,3]]},"91":{"position":[[91,7],[558,5],[1860,3],[1868,7],[5090,3]]},"93":{"position":[[1309,3],[1728,3]]},"112":{"position":[[429,3]]},"143":{"position":[[326,3],[342,3]]},"157":{"position":[[23,4],[38,3],[184,3],[327,3],[380,3]]},"161":{"position":[[993,3]]},"163":{"position":[[1435,3]]},"167":{"position":[[326,3],[342,3]]},"181":{"position":[[23,4],[38,3],[184,3],[327,3],[380,3]]},"185":{"position":[[993,3]]},"187":{"position":[[1435,3]]},"191":{"position":[[486,3],[502,3],[1147,3],[1163,3]]},"207":{"position":[[23,4],[38,3],[184,3],[515,3]]},"209":{"position":[[23,4],[38,3],[183,3],[455,3]]},"211":{"position":[[876,7],[1628,3]]},"213":{"position":[[2432,3],[4317,3]]},"217":{"position":[[48,4],[229,3],[245,3]]},"223":{"position":[[129,3],[306,3]]},"231":{"position":[[23,3],[60,3],[627,9]]},"240":{"position":[[286,5],[731,3]]},"242":{"position":[[651,3]]},"248":{"position":[[345,3]]},"250":{"position":[[128,4]]},"258":{"position":[[486,3],[502,3],[1147,3],[1163,3]]},"274":{"position":[[23,4],[38,3],[184,3],[508,3]]},"276":{"position":[[23,4],[38,3],[183,3],[455,3]]},"278":{"position":[[915,7],[1650,3]]},"280":{"position":[[3390,3],[5372,3]]},"289":{"position":[[185,3]]},"291":{"position":[[49,3],[101,3]]},"296":{"position":[[200,3]]},"304":{"position":[[24,3],[97,3]]},"325":{"position":[[582,3],[933,4],[1421,3],[1761,6],[1949,4]]},"332":{"position":[[158,8]]},"334":{"position":[[21,3]]},"338":{"position":[[74,3],[515,3]]},"363":{"position":[[334,8]]},"383":{"position":[[320,8],[479,8],[509,7],[600,3],[648,8]]},"391":{"position":[[197,4],[205,5],[294,3],[605,4],[689,3]]},"396":{"position":[[28,3],[250,4]]},"416":{"position":[[281,3]]},"424":{"position":[[425,9],[751,3]]},"428":{"position":[[32,3],[105,3]]},"442":{"position":[[660,4],[688,3]]},"450":{"position":[[245,3],[536,7],[637,4],[666,3],[1649,3]]},"456":{"position":[[697,7]]},"462":{"position":[[449,3]]},"466":{"position":[[141,4]]},"479":{"position":[[1225,3]]},"481":{"position":[[715,3],[2867,3]]},"489":{"position":[[1427,3],[1630,3]]},"513":{"position":[[540,3]]},"521":{"position":[[104,7],[268,7],[365,3]]},"527":{"position":[[633,3]]},"531":{"position":[[441,3]]},"533":{"position":[[53,3]]},"537":{"position":[[898,3]]},"565":{"position":[[64,7]]},"578":{"position":[[10,4]]},"580":{"position":[[164,3],[952,4]]},"606":{"position":[[74,3]]},"608":{"position":[[489,3]]},"614":{"position":[[217,3]]},"621":{"position":[[139,3]]},"627":{"position":[[242,3]]},"629":{"position":[[454,3]]},"635":{"position":[[917,3]]},"640":{"position":[[137,3],[192,7],[356,7],[453,3]]},"666":{"position":[[248,9]]},"709":{"position":[[54,4]]},"717":{"position":[[286,7],[432,3],[624,3]]},"725":{"position":[[703,7]]},"750":{"position":[[235,7]]},"801":{"position":[[258,3],[339,3]]},"804":{"position":[[171,4]]},"812":{"position":[[117,4],[171,3]]},"847":{"position":[[112,3],[158,3]]},"876":{"position":[[107,3],[153,3]]},"884":{"position":[[108,3],[154,3]]},"905":{"position":[[339,3],[520,3]]},"921":{"position":[[209,3]]},"925":{"position":[[5,3]]},"967":{"position":[[140,3]]},"982":{"position":[[117,3],[182,3]]},"1026":{"position":[[208,4],[415,4]]},"1030":{"position":[[45,4],[53,5],[142,3],[481,4]]},"1034":{"position":[[459,3]]},"1041":{"position":[[244,3],[319,3]]},"1080":{"position":[[85,8]]},"1088":{"position":[[50,3],[123,3]]},"1098":{"position":[[57,3],[176,3]]},"1117":{"position":[[27,4],[115,7]]},"1119":{"position":[[20,7]]},"1135":{"position":[[18,7]]},"1137":{"position":[[419,3]]},"1149":{"position":[[209,3]]},"1151":{"position":[[20,7]]},"1167":{"position":[[31,8],[992,8]]},"1169":{"position":[[153,8]]},"1171":{"position":[[232,8]]},"1173":{"position":[[174,8],[207,3]]},"1175":{"position":[[180,8],[215,3]]},"1177":{"position":[[299,3],[369,9],[509,9]]},"1205":{"position":[[217,3],[285,4]]},"1259":{"position":[[249,8]]},"1283":{"position":[[382,3],[546,3]]},"1332":{"position":[[547,3]]},"1336":{"position":[[271,3]]},"1546":{"position":[[38,3]]},"1578":{"position":[[140,3]]},"1592":{"position":[[343,3]]},"1664":{"position":[[412,8]]},"1667":{"position":[[220,8]]},"1669":{"position":[[84,3]]},"1675":{"position":[[315,3],[729,8]]},"1692":{"position":[[272,3],[367,8]]},"1705":{"position":[[1085,3]]},"1713":{"position":[[482,4],[1637,7]]},"1723":{"position":[[285,3],[761,3]]},"1725":{"position":[[800,3],[853,3]]},"1735":{"position":[[319,5],[413,4],[442,3],[464,4],[1297,3]]},"1737":{"position":[[1097,4],[1280,7]]},"1750":{"position":[[91,7]]},"1790":{"position":[[155,3],[252,4]]},"1803":{"position":[[278,3],[724,3]]},"1821":{"position":[[407,8]]},"1878":{"position":[[371,3]]},"1884":{"position":[[191,3]]},"1916":{"position":[[179,3]]},"1918":{"position":[[182,3]]},"1930":{"position":[[105,3]]},"1943":{"position":[[806,3]]}}}],["set_regular",{"_index":3024,"t":{"1658":{"position":[[150,14]]}}}],["setting.yml",{"_index":358,"t":{"47":{"position":[[62,15],[179,15]]}}}],["seven",{"_index":1925,"t":{"513":{"position":[[356,5]]}}}],["sever",{"_index":1350,"t":{"250":{"position":[[161,7]]},"285":{"position":[[125,7]]},"323":{"position":[[96,7]]},"325":{"position":[[1374,7]]},"391":{"position":[[179,7]]},"481":{"position":[[775,7]]},"527":{"position":[[274,7]]},"1030":{"position":[[27,7]]},"1052":{"position":[[49,7]]},"1332":{"position":[[188,7]]},"1725":{"position":[[7,7]]}}}],["shaft",{"_index":1453,"t":{"304":{"position":[[954,5]]},"308":{"position":[[275,5],[402,5]]},"424":{"position":[[132,5],[247,6],[1903,5]]},"432":{"position":[[309,6]]},"438":{"position":[[312,6],[541,6]]},"460":{"position":[[363,5]]},"477":{"position":[[110,6],[160,5],[242,5],[283,5]]},"496":{"position":[[94,6]]},"500":{"position":[[49,5]]},"543":{"position":[[127,5]]},"567":{"position":[[2735,6],[3529,5]]},"759":{"position":[[115,6]]},"773":{"position":[[118,6],[347,6]]}}}],["share",{"_index":1623,"t":{"381":{"position":[[29,5]]}}}],["shell",{"_index":210,"t":{"23":{"position":[[442,6],[500,6]]},"627":{"position":[[420,6],[478,6]]}}}],["shift",{"_index":1233,"t":{"225":{"position":[[334,7]]},"231":{"position":[[1881,7],[2031,7]]},"442":{"position":[[1084,5]]},"496":{"position":[[774,7]]},"582":{"position":[[540,8]]}}}],["shit",{"_index":3714,"t":{"1920":{"position":[[166,5]]}}}],["shore",{"_index":566,"t":{"91":{"position":[[1707,6],[1794,5],[1891,5],[2081,5],[2102,5]]},"112":{"position":[[204,6]]},"391":{"position":[[811,6]]},"401":{"position":[[16,5],[146,5]]},"403":{"position":[[246,5],[433,5],[536,5],[707,5]]},"598":{"position":[[37,6],[146,6]]},"602":{"position":[[27,6]]},"614":{"position":[[1341,5]]},"1030":{"position":[[319,6]]},"1125":{"position":[[122,6]]},"1528":{"position":[[36,5]]},"1540":{"position":[[375,5],[524,5]]},"1542":{"position":[[320,5]]},"1713":{"position":[[377,5],[684,5]]},"1735":{"position":[[682,5]]},"1790":{"position":[[47,6],[99,6],[182,6]]},"1793":{"position":[[883,6],[1009,6],[1044,6]]},"1803":{"position":[[628,5],[930,6],[965,5]]},"1810":{"position":[[91,5]]}}}],["short",{"_index":265,"t":{"25":{"position":[[1084,5]]},"584":{"position":[[210,5]]},"629":{"position":[[1118,5]]},"1898":{"position":[[391,5]]},"1920":{"position":[[626,5]]}}}],["show",{"_index":160,"t":{"21":{"position":[[4,4],[191,4],[235,4],[303,4],[465,4],[792,4]]},"23":{"position":[[124,4],[356,4],[451,4],[468,4],[557,4],[650,5],[667,4]]},"25":{"position":[[1654,4]]},"27":{"position":[[99,4]]},"29":{"position":[[11,4],[68,4],[118,4],[165,4],[185,4]]},"31":{"position":[[0,4],[83,4],[159,4],[221,4],[1062,4]]},"33":{"position":[[0,4],[27,4],[83,4],[332,4]]},"62":{"position":[[91,4]]},"75":{"position":[[1022,5]]},"93":{"position":[[566,4]]},"325":{"position":[[1676,6]]},"481":{"position":[[769,5]]},"567":{"position":[[4005,5]]},"627":{"position":[[124,4],[334,4],[429,4],[446,4],[535,4],[663,5],[680,4]]},"629":{"position":[[1688,4]]},"631":{"position":[[99,4]]},"633":{"position":[[11,4],[68,4],[118,4],[165,4],[185,4]]},"635":{"position":[[0,4],[83,4],[159,4],[221,4],[1062,4]]},"637":{"position":[[0,4],[27,4],[83,4],[332,4]]},"744":{"position":[[795,4]]},"1026":{"position":[[8,7]]},"1054":{"position":[[53,4]]},"1084":{"position":[[1344,5]]},"1179":{"position":[[788,4]]},"1587":{"position":[[91,4]]},"1662":{"position":[[966,4]]},"1673":{"position":[[476,7]]},"1732":{"position":[[282,7]]},"1735":{"position":[[16,4],[136,4],[742,4],[981,4],[1105,4],[1366,4],[1694,4],[1733,4],[1755,4],[1789,4],[1838,4],[1910,4],[1958,4],[2327,4]]},"1924":{"position":[[107,4]]}}}],["shown",{"_index":163,"t":{"21":{"position":[[59,5]]},"93":{"position":[[2653,5]]},"135":{"position":[[268,5],[352,5]]},"203":{"position":[[915,5],[983,5]]},"250":{"position":[[279,5]]},"270":{"position":[[1282,5],[1350,5]]},"410":{"position":[[284,6]]},"683":{"position":[[20,5]]},"1735":{"position":[[1897,5]]}}}],["side",{"_index":1822,"t":{"489":{"position":[[428,4]]},"567":{"position":[[153,5]]},"1096":{"position":[[1164,6]]},"1882":{"position":[[127,4]]}}}],["sign",{"_index":749,"t":{"133":{"position":[[649,4],[796,5]]}}}],["signifi",{"_index":2147,"t":{"744":{"position":[[1041,9]]},"1179":{"position":[[1034,9]]}}}],["signific",{"_index":727,"t":{"133":{"position":[[57,11],[189,11],[859,12],[933,11]]},"513":{"position":[[458,11]]}}}],["significantli",{"_index":1771,"t":{"462":{"position":[[522,14]]},"479":{"position":[[1298,14]]},"481":{"position":[[2940,14]]},"606":{"position":[[647,13]]},"608":{"position":[[562,14]]},"1137":{"position":[[492,14]]}}}],["silenc",{"_index":3639,"t":{"1906":{"position":[[886,9]]}}}],["silent",{"_index":3637,"t":{"1906":{"position":[[858,9]]}}}],["sim",{"_index":825,"t":{"147":{"position":[[290,3]]},"153":{"position":[[1021,3]]},"163":{"position":[[32,3]]},"171":{"position":[[290,3]]},"177":{"position":[[1021,3]]},"187":{"position":[[32,3]]},"195":{"position":[[290,3]]},"203":{"position":[[827,3]]},"213":{"position":[[32,3]]},"262":{"position":[[290,3]]},"270":{"position":[[1194,3]]},"280":{"position":[[248,3]]},"343":{"position":[[13,3]]}}}],["sim1",{"_index":787,"t":{"137":{"position":[[548,4]]},"221":{"position":[[96,4]]},"233":{"position":[[32,4]]},"343":{"position":[[229,4]]},"535":{"position":[[21,4]]},"1338":{"position":[[21,4]]}}}],["sim1:col1",{"_index":1977,"t":{"555":{"position":[[40,9],[124,9],[159,9]]},"559":{"position":[[372,9]]},"1713":{"position":[[1975,9]]}}}],["sim1:gas_prod",{"_index":2280,"t":{"1232":{"position":[[6,13]]},"1256":{"position":[[19,13]]}}}],["sim1:gas_sal",{"_index":2301,"t":{"1256":{"position":[[35,14]]}}}],["sim1;discharge_pressur",{"_index":1607,"t":{"359":{"position":[[162,23]]}}}],["sim1;gas_inj",{"_index":1533,"t":{"321":{"position":[[521,12]]},"365":{"position":[[386,12],[530,12]]},"509":{"position":[[240,12]]},"1186":{"position":[[386,12],[530,12]]}}}],["sim1;gas_lift",{"_index":1613,"t":{"365":{"position":[[318,13]]},"746":{"position":[[318,13]]},"1186":{"position":[[318,13]]},"1346":{"position":[[153,13]]}}}],["sim1;gas_prod",{"_index":1261,"t":{"229":{"position":[[386,13]]},"231":{"position":[[2422,13]]},"233":{"position":[[1260,13],[1971,13]]},"359":{"position":[[88,13]]},"365":{"position":[[300,13]]},"414":{"position":[[124,13]]},"746":{"position":[[300,13]]},"886":{"position":[[398,13],[532,13]]},"1186":{"position":[[300,13]]},"1346":{"position":[[135,13]]}}}],["sim1;gas_prod_b",{"_index":2317,"t":{"1304":{"position":[[315,17],[428,15]]}}}],["sim1;gas_sal",{"_index":1537,"t":{"321":{"position":[[1769,14]]},"365":{"position":[[365,14],[484,14],[507,14]]},"1024":{"position":[[136,14]]},"1186":{"position":[[365,14],[484,14],[507,14]]}}}],["sim1;gor",{"_index":1661,"t":{"414":{"position":[[172,8]]}}}],["sim1;inj_pressur",{"_index":1615,"t":{"365":{"position":[[455,17],[599,17]]},"1186":{"position":[[455,17],[599,17]]}}}],["sim1;oil",{"_index":1900,"t":{"506":{"position":[[522,9],[585,9],[642,9],[708,9]]}}}],["sim1;oil_prod",{"_index":1260,"t":{"229":{"position":[[368,13]]},"233":{"position":[[1242,13]]},"345":{"position":[[176,13]]},"1024":{"position":[[92,13]]}}}],["sim1;oil_prod:pla",{"_index":2117,"t":{"683":{"position":[[199,17]]}}}],["sim1;powerloss",{"_index":2277,"t":{"1209":{"position":[[39,14]]}}}],["sim1;regular",{"_index":2315,"t":{"1302":{"position":[[12,15]]}}}],["sim1;suction_pressur",{"_index":1538,"t":{"321":{"position":[[1833,21]]},"359":{"position":[[120,21]]}}}],["sim1;temp",{"_index":1663,"t":{"414":{"position":[[217,9]]}}}],["sim1;water_inj",{"_index":1276,"t":{"231":{"position":[[1526,14]]},"233":{"position":[[1566,14]]},"377":{"position":[[83,14]]},"385":{"position":[[168,14]]},"1186":{"position":[[806,14]]},"1263":{"position":[[168,14]]},"1346":{"position":[[57,14]]}}}],["sim1;water_prod",{"_index":2266,"t":{"1186":{"position":[[846,15],[896,16]]}}}],["sim1;water_prod:field_a",{"_index":1579,"t":{"343":{"position":[[177,23]]}}}],["sim2",{"_index":1581,"t":{"343":{"position":[[238,4]]},"509":{"position":[[184,6]]},"535":{"position":[[85,4]]}}}],["sim2:gas_prod_a",{"_index":2318,"t":{"1304":{"position":[[408,15]]}}}],["sim2:oil_prod",{"_index":1585,"t":{"345":{"position":[[202,13]]},"1024":{"position":[[118,13]]}}}],["sim2;gas_inj",{"_index":1906,"t":{"509":{"position":[[257,12]]}}}],["sim2;gas_prod_a",{"_index":2316,"t":{"1304":{"position":[[276,17]]}}}],["sim2;gas_sal",{"_index":1586,"t":{"345":{"position":[[220,14]]}}}],["sim2;water_prod",{"_index":2268,"t":{"1186":{"position":[[875,16],[917,16]]}}}],["sim2;water_prod:field_b",{"_index":1580,"t":{"343":{"position":[[205,23]]}}}],["sim8;gas_prod",{"_index":2112,"t":{"670":{"position":[[265,13]]}}}],["sim8;water_inj",{"_index":2297,"t":{"1248":{"position":[[329,14]]}}}],["sim:gas_prod",{"_index":874,"t":{"153":{"position":[[1132,12]]},"177":{"position":[[1132,12]]}}}],["sim:oil_prod",{"_index":872,"t":{"153":{"position":[[1091,12]]},"177":{"position":[[1091,12]]}}}],["sim;col1",{"_index":1980,"t":{"559":{"position":[[74,8]]}}}],["sim;col2",{"_index":1982,"t":{"559":{"position":[[101,8]]}}}],["sim;flag",{"_index":1901,"t":{"506":{"position":[[759,9],[812,9]]}}}],["sim;ga",{"_index":1897,"t":{"506":{"position":[[359,7],[393,7],[420,7],[444,7],[476,7],[510,7],[573,7],[630,7],[696,7],[747,7],[800,7]]}}}],["sim;gas_inj",{"_index":865,"t":{"153":{"position":[[743,11]]},"161":{"position":[[514,11]]},"163":{"position":[[1054,11]]},"177":{"position":[[743,11]]},"185":{"position":[[514,11]]},"187":{"position":[[1054,11]]}}}],["sim;gas_lift",{"_index":866,"t":{"153":{"position":[[759,12]]},"161":{"position":[[530,13]]},"163":{"position":[[1070,12]]},"177":{"position":[[759,12]]},"185":{"position":[[530,13]]},"187":{"position":[[1070,12]]},"203":{"position":[[576,13]]},"213":{"position":[[2062,13]]},"270":{"position":[[576,13]]},"280":{"position":[[2653,13]]}}}],["sim;gas_prod",{"_index":853,"t":{"153":{"position":[[368,12],[691,12]]},"161":{"position":[[3227,13]]},"163":{"position":[[679,12],[1002,12]]},"177":{"position":[[368,12],[691,12]]},"185":{"position":[[3227,13]]},"187":{"position":[[679,12],[1002,12]]},"203":{"position":[[368,12],[426,12],[511,12]]},"211":{"position":[[4219,13],[4282,12]]},"213":{"position":[[1854,12],[1912,12],[1997,12]]},"270":{"position":[[368,12],[426,12],[511,12]]},"278":{"position":[[4392,13],[4455,12]]},"280":{"position":[[2445,12],[2503,12],[2588,12]]},"511":{"position":[[340,12],[359,12]]}}}],["sim;gas_sal",{"_index":2223,"t":{"1022":{"position":[[27,13]]}}}],["sim;gas_sales:field_a",{"_index":2225,"t":{"1026":{"position":[[138,21]]}}}],["sim;gas_sales:field_b",{"_index":2227,"t":{"1026":{"position":[[346,24]]}}}],["sim;oil_prod",{"_index":852,"t":{"153":{"position":[[351,12]]},"163":{"position":[[662,12]]},"177":{"position":[[351,12]]},"187":{"position":[[662,12]]},"203":{"position":[[351,12]]},"213":{"position":[[1837,12]]},"270":{"position":[[351,12]]},"280":{"position":[[2428,12]]},"343":{"position":[[0,12]]},"345":{"position":[[101,12]]},"618":{"position":[[107,12]]},"1022":{"position":[[10,12]]}}}],["sim;oil_prod:field_a",{"_index":2224,"t":{"1026":{"position":[[113,20]]}}}],["sim;oil_prod:field_b",{"_index":2226,"t":{"1026":{"position":[[321,20]]}}}],["sim;p1",{"_index":1916,"t":{"511":{"position":[[394,6],[418,6]]}}}],["sim;p2",{"_index":1917,"t":{"511":{"position":[[407,6]]}}}],["sim;water_inj",{"_index":858,"t":{"153":{"position":[[486,13]]},"163":{"position":[[797,13]]},"177":{"position":[[486,13]]},"187":{"position":[[797,13]]},"203":{"position":[[468,13]]},"211":{"position":[[1672,14]]},"213":{"position":[[1954,13]]},"270":{"position":[[468,13]]},"278":{"position":[[1694,14]]},"280":{"position":[[2545,13]]}}}],["sim;water_prod",{"_index":859,"t":{"153":{"position":[[504,14],[523,14],[542,15],[570,15],[601,15],[630,15],[817,14],[903,14]]},"161":{"position":[[1053,15],[1165,14]]},"163":{"position":[[815,14],[834,14],[853,15],[881,15],[912,15],[941,15],[1128,14],[1214,14]]},"177":{"position":[[504,14],[523,14],[542,15],[570,15],[601,15],[630,15],[817,14],[903,14]]},"185":{"position":[[1053,15],[1165,14]]},"187":{"position":[[815,14],[834,14],[853,15],[881,15],[912,15],[941,15],[1128,14],[1214,14]]},"203":{"position":[[629,14]]},"211":{"position":[[1772,14]]},"213":{"position":[[2115,14]]},"270":{"position":[[629,14]]},"278":{"position":[[1794,14]]},"280":{"position":[[2706,14]]}}}],["similar",{"_index":463,"t":{"64":{"position":[[773,8]]},"191":{"position":[[21,7]]},"258":{"position":[[21,7]]},"905":{"position":[[971,7]]},"1283":{"position":[[967,7]]},"1379":{"position":[[233,7]]},"1760":{"position":[[198,7]]},"1878":{"position":[[348,7],[552,8]]}}}],["similarli",{"_index":1865,"t":{"500":{"position":[[243,10]]}}}],["simpl",{"_index":20,"t":{"5":{"position":[[75,6]]},"25":{"position":[[964,6],[1137,6]]},"39":{"position":[[144,6]]},"45":{"position":[[250,6]]},"51":{"position":[[74,6]]},"93":{"position":[[417,6],[2516,6]]},"139":{"position":[[41,6]]},"141":{"position":[[29,6]]},"191":{"position":[[32,6]]},"242":{"position":[[958,6]]},"258":{"position":[[32,6]]},"336":{"position":[[201,6]]},"629":{"position":[[998,6],[1171,6]]},"683":{"position":[[2,6]]},"1594":{"position":[[46,6]]},"1622":{"position":[[5,6]]},"1732":{"position":[[198,6],[225,6]]},"1752":{"position":[[323,6]]},"1812":{"position":[[148,6]]},"1890":{"position":[[26,6]]},"1906":{"position":[[597,6]]},"1908":{"position":[[429,6]]}}}],["simple_compressor",{"_index":2270,"t":{"1201":{"position":[[16,17]]}}}],["simpler",{"_index":1088,"t":{"203":{"position":[[1057,7]]},"270":{"position":[[1424,7]]},"563":{"position":[[63,7]]}}}],["simpli",{"_index":486,"t":{"75":{"position":[[461,6]]},"496":{"position":[[1550,6]]},"521":{"position":[[436,6]]},"582":{"position":[[575,6]]},"614":{"position":[[859,6]]},"640":{"position":[[524,6]]}}}],["simplifi",{"_index":654,"t":{"93":{"position":[[2434,8]]},"201":{"position":[[246,10]]},"211":{"position":[[411,10]]},"268":{"position":[[246,10]]},"278":{"position":[[466,10]]},"361":{"position":[[190,10]]},"424":{"position":[[1613,10]]},"426":{"position":[[183,10]]},"446":{"position":[[295,10]]},"460":{"position":[[4,10]]},"567":{"position":[[3460,10]]},"570":{"position":[[30,10]]},"576":{"position":[[25,8],[881,8]]},"1487":{"position":[[338,10]]},"1492":{"position":[[46,10],[103,10]]},"1498":{"position":[[90,10],[185,10]]},"1572":{"position":[[70,10]]},"1647":{"position":[[137,10]]},"1686":{"position":[[1305,8]]},"1713":{"position":[[1769,10]]},"1732":{"position":[[257,10]]},"1744":{"position":[[108,10]]},"1777":{"position":[[17,10]]},"1808":{"position":[[212,8]]},"1839":{"position":[[46,10],[124,10],[277,10],[341,10]]},"1853":{"position":[[91,10]]}}}],["simplified_compressor_model",{"_index":1791,"t":{"469":{"position":[[728,27]]},"471":{"position":[[347,27],[962,27]]},"610":{"position":[[16,27]]}}}],["simplified_compressor_model_with_turbin",{"_index":1793,"t":{"471":{"position":[[873,40]]}}}],["simplified_compressor_train_model",{"_index":1073,"t":{"201":{"position":[[1106,33]]},"211":{"position":[[1168,33],[1237,33]]},"213":{"position":[[1397,33],[2788,33],[2857,33]]},"225":{"position":[[1518,33]]},"231":{"position":[[2369,33]]},"233":{"position":[[811,33],[1918,33]]},"268":{"position":[[1106,33]]},"278":{"position":[[1206,33],[1275,33]]},"280":{"position":[[1613,33],[3800,33],[3869,33]]},"473":{"position":[[641,33]]},"475":{"position":[[258,33]]},"547":{"position":[[111,33]]},"1155":{"position":[[16,33]]}}}],["simplified_compressor_train_model_with_turbin",{"_index":1971,"t":{"547":{"position":[[16,46]]}}}],["simplified_variable_speed_compressor_train",{"_index":1074,"t":{"201":{"position":[[1146,42]]},"213":{"position":[[1437,42]]},"225":{"position":[[593,42],[1558,42]]},"233":{"position":[[851,42]]},"268":{"position":[[1146,42]]},"280":{"position":[[1653,42]]},"422":{"position":[[163,42]]},"448":{"position":[[61,42]]},"462":{"position":[[35,42]]},"464":{"position":[[145,42]]},"466":{"position":[[720,42]]},"469":{"position":[[762,42]]},"471":{"position":[[381,42]]},"473":{"position":[[681,42]]},"475":{"position":[[298,42]]},"606":{"position":[[446,42]]},"608":{"position":[[35,42]]},"610":{"position":[[50,42]]},"1135":{"position":[[99,43]]},"1137":{"position":[[35,42]]},"1145":{"position":[[78,42]]},"1149":{"position":[[116,42]]},"1151":{"position":[[54,42]]},"1153":{"position":[[35,42]]},"1155":{"position":[[56,42]]},"1201":{"position":[[40,42]]},"1372":{"position":[[163,42]]}}}],["simul",{"_index":1695,"t":{"436":{"position":[[812,10]]},"489":{"position":[[1198,11]]},"504":{"position":[[483,10]]},"506":{"position":[[13,10]]},"527":{"position":[[222,10],[388,10],[870,10]]},"576":{"position":[[147,10]]},"1291":{"position":[[1190,11]]},"1332":{"position":[[136,10],[302,10],[784,10]]}}}],["singl",{"_index":171,"t":{"21":{"position":[[210,6]]},"149":{"position":[[310,6]]},"173":{"position":[[310,6]]},"197":{"position":[[252,6]]},"207":{"position":[[874,6]]},"211":{"position":[[2757,6],[2967,6]]},"213":{"position":[[3855,6]]},"223":{"position":[[218,6]]},"231":{"position":[[699,6]]},"248":{"position":[[422,6]]},"264":{"position":[[252,6]]},"274":{"position":[[867,6]]},"278":{"position":[[2771,6],[2981,6]]},"280":{"position":[[4843,6]]},"285":{"position":[[18,6]]},"287":{"position":[[222,6],[359,6],[906,6]]},"289":{"position":[[20,6]]},"291":{"position":[[174,6],[432,6]]},"355":{"position":[[133,6]]},"373":{"position":[[15,6]]},"416":{"position":[[223,6]]},"424":{"position":[[19,6],[446,6],[515,6],[1070,6]]},"426":{"position":[[109,6]]},"428":{"position":[[142,6]]},"430":{"position":[[4,6],[37,6]]},"434":{"position":[[317,6],[396,6]]},"450":{"position":[[320,6],[362,6]]},"477":{"position":[[4,6],[65,6],[123,6],[576,6],[727,6],[781,6],[890,6]]},"487":{"position":[[1208,6]]},"491":{"position":[[205,6]]},"496":{"position":[[198,7]]},"498":{"position":[[365,6]]},"502":{"position":[[632,6],[944,6]]},"563":{"position":[[797,6]]},"567":{"position":[[3577,6],[3834,6]]},"590":{"position":[[538,7]]},"614":{"position":[[1194,6]]},"717":{"position":[[812,6]]},"725":{"position":[[52,6],[213,6],[730,6]]},"757":{"position":[[22,6],[84,6]]},"941":{"position":[[2,6]]},"1017":{"position":[[181,6]]},"1056":{"position":[[49,6]]},"1072":{"position":[[276,6]]},"1098":{"position":[[209,6]]},"1109":{"position":[[147,6]]},"1119":{"position":[[54,6]]},"1212":{"position":[[328,6]]},"1220":{"position":[[297,6]]},"1297":{"position":[[33,6]]},"1458":{"position":[[611,6],[834,6]]},"1570":{"position":[[22,6]]},"1572":{"position":[[142,6]]},"1578":{"position":[[25,6]]},"1592":{"position":[[380,6]]},"1594":{"position":[[302,6]]},"1651":{"position":[[87,6]]},"1675":{"position":[[490,6]]},"1682":{"position":[[277,6]]},"1713":{"position":[[1094,6]]},"1718":{"position":[[261,6]]},"1725":{"position":[[309,6]]},"1728":{"position":[[44,6],[391,6]]},"1737":{"position":[[123,6]]},"1771":{"position":[[110,6]]},"1775":{"position":[[27,6]]},"1882":{"position":[[86,6]]}}}],["single_spe",{"_index":596,"t":{"91":{"position":[[2964,12]]},"432":{"position":[[82,12]]},"434":{"position":[[92,12]]},"621":{"position":[[147,12]]},"623":{"position":[[67,14]]},"625":{"position":[[89,12]]},"759":{"position":[[82,12],[409,12]]},"761":{"position":[[92,12]]}}}],["single_speed_compressor",{"_index":2210,"t":{"978":{"position":[[109,23]]}}}],["single_speed_compressor_chart",{"_index":593,"t":{"91":{"position":[[2899,29]]}}}],["single_speed_compressor_train",{"_index":1668,"t":{"422":{"position":[[133,29]]},"479":{"position":[[35,29]]},"498":{"position":[[635,32]]},"606":{"position":[[416,29]]},"728":{"position":[[35,29]]},"730":{"position":[[39,29]]},"978":{"position":[[139,29]]},"1121":{"position":[[35,29]]},"1135":{"position":[[68,30]]},"1145":{"position":[[48,29]]},"1372":{"position":[[101,29]]}}}],["single_speed_pump",{"_index":2323,"t":{"1394":{"position":[[25,17]]}}}],["single_speed_pump_chart",{"_index":585,"t":{"91":{"position":[[2603,23]]}}}],["singular",{"_index":1853,"t":{"496":{"position":[[739,8]]}}}],["site",{"_index":3543,"t":{"1876":{"position":[[5,4]]},"1882":{"position":[[58,4],[192,4],[298,4]]}}}],["situat",{"_index":1848,"t":{"496":{"position":[[568,9]]},"500":{"position":[[5,9]]},"1450":{"position":[[476,9],[820,9]]},"1669":{"position":[[595,10]]},"1737":{"position":[[255,9]]}}}],["six",{"_index":1325,"t":{"240":{"position":[[75,3]]}}}],["skeleton",{"_index":1219,"t":{"219":{"position":[[144,8]]},"244":{"position":[[28,8]]}}}],["skew",{"_index":1759,"t":{"450":{"position":[[1628,4]]}}}],["skip",{"_index":1654,"t":{"403":{"position":[[582,4]]},"1596":{"position":[[654,4]]},"1637":{"position":[[0,4]]},"1653":{"position":[[14,4]]},"1732":{"position":[[6,4],[51,4]]}}}],["slight",{"_index":3537,"t":{"1851":{"position":[[595,6]]}}}],["slightli",{"_index":2200,"t":{"937":{"position":[[236,8]]}}}],["slot",{"_index":3453,"t":{"1725":{"position":[[367,5]]}}}],["sm3",{"_index":844,"t":{"151":{"position":[[136,3]]},"175":{"position":[[136,3]]},"948":{"position":[[35,3]]},"1017":{"position":[[78,4]]},"1793":{"position":[[355,3]]}}}],["sm3/cd",{"_index":3533,"t":{"1851":{"position":[[325,6]]}}}],["sm3/d",{"_index":961,"t":{"165":{"position":[[800,6],[807,6],[826,6],[833,5]]},"189":{"position":[[800,6],[807,6],[826,6],[833,5]]},"215":{"position":[[419,7]]},"236":{"position":[[31,7]]},"282":{"position":[[419,7]]},"321":{"position":[[807,8]]},"1793":{"position":[[302,6]]}}}],["sm3/day",{"_index":813,"t":{"143":{"position":[[987,8],[1035,7]]},"155":{"position":[[261,7]]},"161":{"position":[[381,9],[1236,8],[2109,8],[2260,8],[2292,7]]},"167":{"position":[[987,8],[1035,7]]},"179":{"position":[[261,7]]},"185":{"position":[[381,9],[1236,8],[2109,8],[2260,8],[2292,7]]},"205":{"position":[[261,7]]},"254":{"position":[[61,9]]},"256":{"position":[[40,7]]},"272":{"position":[[261,7]]},"304":{"position":[[834,9]]},"310":{"position":[[29,7],[86,7]]},"319":{"position":[[61,7]]},"321":{"position":[[536,9],[1786,9]]},"379":{"position":[[28,7]]},"387":{"position":[[28,7]]},"403":{"position":[[78,9]]},"416":{"position":[[408,10]]},"462":{"position":[[426,9]]},"479":{"position":[[1202,9]]},"481":{"position":[[2844,9]]},"574":{"position":[[53,7]]},"608":{"position":[[466,9]]},"666":{"position":[[202,10]]},"670":{"position":[[281,9]]},"1019":{"position":[[25,9],[71,9],[104,9]]},"1137":{"position":[[396,9]]},"1167":{"position":[[116,9]]},"1169":{"position":[[60,9]]},"1342":{"position":[[37,9]]},"1344":{"position":[[107,10]]}}}],["sm3/day],[mw",{"_index":912,"t":{"165":{"position":[[34,15],[646,15]]},"189":{"position":[[34,15],[646,15]]}}}],["sm3/day],[sm3/day",{"_index":929,"t":{"165":{"position":[[289,20]]},"189":{"position":[[289,20]]}}}],["sm3/hr",{"_index":1740,"t":{"442":{"position":[[1655,7]]}}}],["sm3/sd",{"_index":3532,"t":{"1851":{"position":[[296,6]]}}}],["sm3_per_day",{"_index":2283,"t":{"1234":{"position":[[347,11]]},"1401":{"position":[[292,11]]},"1439":{"position":[[124,11]]},"1447":{"position":[[30,11]]},"1808":{"position":[[296,11]]}}}],["small",{"_index":1966,"t":{"537":{"position":[[828,5]]},"576":{"position":[[771,5]]},"590":{"position":[[420,5]]},"1853":{"position":[[17,5]]},"1872":{"position":[[50,5]]},"1886":{"position":[[646,6]]},"1900":{"position":[[66,5]]}}}],["smaller",{"_index":750,"t":{"133":{"position":[[662,7]]},"287":{"position":[[691,7]]},"436":{"position":[[942,8]]},"576":{"position":[[442,7]]},"1754":{"position":[[17,7]]},"1819":{"position":[[17,7]]},"1828":{"position":[[17,7]]},"1892":{"position":[[92,7]]},"1900":{"position":[[91,8]]},"1906":{"position":[[199,7]]}}}],["snake_cas",{"_index":3153,"t":{"1669":{"position":[[876,10]]}}}],["snapshot",{"_index":2692,"t":{"1576":{"position":[[79,9],[106,9]]},"1587":{"position":[[310,9]]},"1596":{"position":[[820,8],[870,9]]},"1620":{"position":[[399,8]]},"1686":{"position":[[1435,9]]},"1705":{"position":[[1343,9]]},"1938":{"position":[[158,8],[313,8]]}}}],["snok/instal",{"_index":3064,"t":{"1662":{"position":[[574,12]]}}}],["soav",{"_index":1930,"t":{"513":{"position":[[1013,6],[1213,6]]}}}],["softwar",{"_index":62,"t":{"13":{"position":[[12,8]]}}}],["sole",{"_index":1602,"t":{"353":{"position":[[637,6]]},"450":{"position":[[1653,6]]}}}],["solut",{"_index":1648,"t":{"401":{"position":[[186,8]]},"406":{"position":[[138,8]]},"481":{"position":[[432,8]]},"498":{"position":[[329,8]]},"502":{"position":[[277,10],[569,8]]},"580":{"position":[[251,10]]},"1723":{"position":[[632,8]]}}}],["solv",{"_index":664,"t":{"97":{"position":[[239,5]]},"424":{"position":[[1859,6]]},"442":{"position":[[856,7],[1121,5]]},"450":{"position":[[804,6]]},"489":{"position":[[465,6]]},"1793":{"position":[[681,6]]},"1846":{"position":[[597,6]]},"1862":{"position":[[235,5]]},"1920":{"position":[[544,8]]},"1943":{"position":[[642,5]]}}}],["some_compressor_chart",{"_index":2256,"t":{"1155":{"position":[[203,21]]}}}],["some_facility_input",{"_index":2076,"t":{"594":{"position":[[108,19]]},"705":{"position":[[88,19]]},"946":{"position":[[84,19]]}}}],["some_fluid_model",{"_index":2255,"t":{"1155":{"position":[[112,16]]}}}],["some_yaml_file.yaml",{"_index":2231,"t":{"1054":{"position":[[9,21]]}}}],["somebodi",{"_index":418,"t":{"58":{"position":[[1501,8]]}}}],["somedirectemitt",{"_index":2154,"t":{"790":{"position":[[25,17]]}}}],["somedirectory/foo/bar",{"_index":188,"t":{"21":{"position":[[637,23]]}}}],["someelectricalconsum",{"_index":2122,"t":{"713":{"position":[[19,22]]}}}],["somelocation/myfield.yaml",{"_index":168,"t":{"21":{"position":[[105,26]]}}}],["somelocation/myfield.yml",{"_index":185,"t":{"21":{"position":[[563,25],[661,25],[766,25],[848,25]]}}}],["someotherdirectemitt",{"_index":2155,"t":{"790":{"position":[[142,22]]}}}],["someotherelectricalconsum",{"_index":2123,"t":{"713":{"position":[[117,27]]}}}],["someotherfuelconsum",{"_index":2217,"t":{"1013":{"position":[[224,21]]}}}],["someotherventingemitt",{"_index":2325,"t":{"1423":{"position":[[144,23]]},"1429":{"position":[[115,23]]}}}],["someth",{"_index":2312,"t":{"1295":{"position":[[439,9]]},"1713":{"position":[[2222,9]]},"1920":{"position":[[591,9]]}}}],["someventingemitt",{"_index":681,"t":{"107":{"position":[[1914,18]]},"129":{"position":[[811,18]]},"1238":{"position":[[26,18]]},"1423":{"position":[[26,18]]},"1429":{"position":[[26,18]]},"1435":{"position":[[26,18]]},"1439":{"position":[[26,18]]}}}],["somewher",{"_index":311,"t":{"37":{"position":[[133,10]]}}}],["soon",{"_index":46,"t":{"7":{"position":[[372,4]]},"1900":{"position":[[159,5]]}}}],["sort",{"_index":1639,"t":{"391":{"position":[[232,4]]},"1030":{"position":[[80,4]]}}}],["sourc",{"_index":116,"t":{"13":{"position":[[880,7]]},"93":{"position":[[2317,6]]},"161":{"position":[[1797,7]]},"185":{"position":[[1797,7]]},"325":{"position":[[667,8]]},"334":{"position":[[301,6]]},"343":{"position":[[272,7]]},"527":{"position":[[282,7],[640,7]]},"533":{"position":[[19,6],[79,7]]},"586":{"position":[[433,7]]},"921":{"position":[[192,6]]},"1064":{"position":[[43,6]]},"1084":{"position":[[35,6],[701,6]]},"1205":{"position":[[267,6]]},"1304":{"position":[[130,8]]},"1332":{"position":[[196,7],[554,7]]},"1336":{"position":[[254,6]]},"1692":{"position":[[298,6]]},"1916":{"position":[[246,6]]},"1945":{"position":[[907,7]]}}}],["space",{"_index":610,"t":{"91":{"position":[[3480,5]]},"323":{"position":[[217,6]]},"410":{"position":[[173,5]]},"1460":{"position":[[190,6]]},"1682":{"position":[[651,6]]},"1920":{"position":[[706,6]]}}}],["span",{"_index":1447,"t":{"304":{"position":[[130,4]]},"424":{"position":[[784,4]]}}}],["spars",{"_index":3631,"t":{"1906":{"position":[[692,6]]}}}],["special",{"_index":3473,"t":{"1730":{"position":[[615,7]]},"1884":{"position":[[20,7]]},"1906":{"position":[[741,7],[762,7]]},"1914":{"position":[[1194,7]]}}}],["specif",{"_index":257,"t":{"25":{"position":[[903,8],[1075,8]]},"91":{"position":[[2344,14],[4801,13]]},"193":{"position":[[162,14]]},"240":{"position":[[871,8]]},"260":{"position":[[162,14]]},"325":{"position":[[1428,14],[1489,14]]},"338":{"position":[[78,14],[143,14],[190,13],[254,13],[312,13],[382,13],[519,14],[584,14],[631,13],[695,13],[753,13],[823,13]]},"351":{"position":[[244,13]]},"391":{"position":[[435,13]]},"462":{"position":[[180,14]]},"567":{"position":[[231,13]]},"580":{"position":[[320,8],[515,8]]},"629":{"position":[[937,8],[1109,8]]},"1011":{"position":[[113,14]]},"1524":{"position":[[156,8]]},"1735":{"position":[[922,8],[1124,8]]},"1878":{"position":[[680,8]]}}}],["specifi",{"_index":186,"t":{"21":{"position":[[589,7],[687,7]]},"25":{"position":[[83,10],[320,10]]},"31":{"position":[[314,9],[817,10]]},"33":{"position":[[147,10],[308,9]]},"37":{"position":[[47,9]]},"91":{"position":[[2267,7],[2508,8]]},"93":{"position":[[186,9],[627,7],[806,9],[874,7],[963,10]]},"107":{"position":[[152,10],[225,10],[314,10],[432,9]]},"129":{"position":[[173,10]]},"133":{"position":[[915,7]]},"149":{"position":[[3,7]]},"153":{"position":[[38,7],[257,7],[1191,7]]},"155":{"position":[[192,8],[298,9],[350,9]]},"161":{"position":[[2405,9],[2505,10],[2941,10],[3331,9],[3385,10]]},"173":{"position":[[3,7]]},"177":{"position":[[38,7],[257,7],[1191,7]]},"179":{"position":[[192,8],[298,9],[350,9]]},"185":{"position":[[2405,9],[2505,10],[2941,10],[3331,9],[3385,10]]},"197":{"position":[[3,7]]},"201":{"position":[[127,8]]},"203":{"position":[[38,7],[257,7]]},"205":{"position":[[192,8],[334,9],[386,9]]},"211":{"position":[[4312,10]]},"223":{"position":[[38,9],[170,9]]},"225":{"position":[[495,10],[738,10]]},"229":{"position":[[136,10]]},"231":{"position":[[326,9],[2157,9],[2571,9]]},"240":{"position":[[623,9],[846,9]]},"242":{"position":[[188,9],[379,9]]},"250":{"position":[[31,10],[349,9]]},"264":{"position":[[3,7]]},"268":{"position":[[127,8]]},"270":{"position":[[38,7],[257,7]]},"272":{"position":[[192,8],[334,9],[386,9],[628,9]]},"278":{"position":[[4485,10]]},"304":{"position":[[283,9]]},"308":{"position":[[350,7]]},"317":{"position":[[71,9]]},"323":{"position":[[111,9]]},"325":{"position":[[1924,10],[1986,10]]},"347":{"position":[[93,9],[188,9],[360,9],[403,7]]},"355":{"position":[[19,9],[347,9],[394,9]]},"361":{"position":[[26,9],[411,10]]},"389":{"position":[[341,7]]},"391":{"position":[[258,9],[478,10],[557,10]]},"403":{"position":[[99,7],[286,9]]},"408":{"position":[[0,7],[235,9]]},"424":{"position":[[937,9],[1190,9],[1542,9],[2296,9],[2437,9]]},"428":{"position":[[225,9]]},"450":{"position":[[521,9]]},"460":{"position":[[565,10]]},"466":{"position":[[60,7]]},"481":{"position":[[637,10]]},"487":{"position":[[192,10],[469,9]]},"489":{"position":[[40,9],[109,9],[241,9],[1514,9]]},"509":{"position":[[151,9]]},"513":{"position":[[646,9],[1345,10]]},"515":{"position":[[243,10]]},"521":{"position":[[91,9],[381,10]]},"527":{"position":[[655,9],[894,9]]},"529":{"position":[[121,8]]},"537":{"position":[[124,9]]},"567":{"position":[[267,9],[755,9]]},"576":{"position":[[1464,9]]},"580":{"position":[[714,10]]},"614":{"position":[[32,7]]},"621":{"position":[[31,9]]},"629":{"position":[[117,10],[354,10]]},"635":{"position":[[314,9],[817,10]]},"637":{"position":[[147,10],[308,9]]},"640":{"position":[[30,9],[179,9],[469,10]]},"679":{"position":[[59,9],[429,10]]},"717":{"position":[[124,7],[225,9]]},"721":{"position":[[0,10]]},"744":{"position":[[10,9],[982,9]]},"757":{"position":[[72,7],[330,9]]},"764":{"position":[[30,9]]},"771":{"position":[[74,7],[398,9]]},"778":{"position":[[30,9]]},"812":{"position":[[17,9]]},"831":{"position":[[232,9]]},"847":{"position":[[18,9]]},"855":{"position":[[97,9],[224,7],[297,7]]},"876":{"position":[[13,9]]},"884":{"position":[[23,9]]},"889":{"position":[[28,9],[187,10]]},"905":{"position":[[178,7],[908,7],[1004,10]]},"931":{"position":[[113,9],[304,9]]},"952":{"position":[[0,9]]},"967":{"position":[[37,9]]},"990":{"position":[[23,9],[118,9],[290,9],[333,7]]},"993":{"position":[[27,9],[214,10]]},"1030":{"position":[[106,9]]},"1036":{"position":[[23,9]]},"1064":{"position":[[100,10]]},"1084":{"position":[[522,9]]},"1088":{"position":[[29,9],[102,9]]},"1096":{"position":[[28,9],[243,10],[1020,9]]},"1109":{"position":[[40,9],[96,9]]},"1141":{"position":[[16,9],[176,9]]},"1151":{"position":[[141,10]]},"1167":{"position":[[169,9],[405,9],[565,7],[656,9],[822,7],[903,7],[1049,7]]},"1169":{"position":[[40,10]]},"1171":{"position":[[40,10]]},"1173":{"position":[[40,10],[294,7]]},"1175":{"position":[[40,10],[306,7]]},"1177":{"position":[[120,10]]},"1179":{"position":[[10,9],[975,9]]},"1189":{"position":[[40,9]]},"1259":{"position":[[40,10],[263,10],[533,10]]},"1275":{"position":[[739,9]]},"1283":{"position":[[255,7],[661,10],[1082,10]]},"1291":{"position":[[1269,10]]},"1293":{"position":[[123,9],[221,10]]},"1297":{"position":[[18,9]]},"1316":{"position":[[307,10]]},"1332":{"position":[[569,9],[808,9]]},"1349":{"position":[[34,9],[90,9]]},"1356":{"position":[[41,9],[97,9]]},"1379":{"position":[[62,10],[218,9]]},"1386":{"position":[[31,9],[107,10],[141,9]]},"1399":{"position":[[30,9]]},"1407":{"position":[[231,9]]},"1417":{"position":[[451,10]]},"1431":{"position":[[258,7]]},"1435":{"position":[[268,7]]},"1540":{"position":[[313,9]]},"1684":{"position":[[171,7]]},"1713":{"position":[[1885,9]]},"1723":{"position":[[811,10],[1520,7]]},"1725":{"position":[[887,9],[961,9]]},"1730":{"position":[[455,9]]},"1735":{"position":[[910,7],[1439,9],[1511,10]]},"1752":{"position":[[92,9]]},"1787":{"position":[[241,9]]},"1803":{"position":[[415,9]]},"1839":{"position":[[210,10],[427,10]]},"1858":{"position":[[291,7]]},"1872":{"position":[[293,10]]}}}],["specifications/data",{"_index":1777,"t":{"466":{"position":[[629,19]]}}}],["speed",{"_index":828,"t":{"149":{"position":[[317,5]]},"173":{"position":[[317,5]]},"197":{"position":[[259,5]]},"215":{"position":[[45,5],[527,5]]},"223":{"position":[[225,6]]},"231":{"position":[[507,5]]},"264":{"position":[[259,5]]},"282":{"position":[[45,5],[527,5]]},"285":{"position":[[25,5],[44,6]]},"287":{"position":[[210,5],[229,5],[366,5],[433,5],[452,6],[603,6],[835,5],[913,5],[1084,5]]},"289":{"position":[[27,5]]},"291":{"position":[[91,6],[141,5],[181,5],[232,5],[334,6],[354,5],[439,5],[464,5]]},"296":{"position":[[29,5],[71,6]]},"298":{"position":[[15,5]]},"361":{"position":[[210,5],[249,5]]},"367":{"position":[[72,5]]},"369":{"position":[[209,5]]},"424":{"position":[[26,5],[44,6],[1077,5],[1284,5],[1428,5],[1633,5],[1909,5],[2045,5]]},"426":{"position":[[116,5],[154,5],[203,5],[241,5]]},"428":{"position":[[149,5],[181,5]]},"430":{"position":[[11,5],[69,6]]},"432":{"position":[[302,6],[316,5]]},"434":{"position":[[169,6],[324,5],[403,5]]},"436":{"position":[[13,5],[96,7],[150,5],[190,5],[288,5],[675,5],[738,5]]},"438":{"position":[[305,6],[319,5],[534,6],[548,5]]},"440":{"position":[[174,6],[291,6],[431,6],[629,5],[711,5]]},"446":{"position":[[315,5]]},"456":{"position":[[15,5],[327,6],[399,5],[523,5],[733,5],[774,5]]},"460":{"position":[[24,5],[392,6]]},"469":{"position":[[174,6],[291,6]]},"473":{"position":[[272,6],[389,6]]},"477":{"position":[[11,5],[72,5],[130,5],[226,6],[248,5],[289,5],[583,5],[734,5],[788,5],[897,5]]},"481":{"position":[[57,6],[142,5],[173,5],[391,5],[465,5],[497,5],[524,6],[578,5],[680,5],[833,5],[951,5],[1043,5],[1158,5],[1258,5],[1299,5]]},"487":{"position":[[1356,5]]},"489":{"position":[[520,5],[597,5],[735,5],[831,5],[917,5],[954,5],[1071,5],[1414,5]]},"491":{"position":[[212,5],[231,5],[495,5]]},"496":{"position":[[64,5],[206,5],[414,5]]},"498":{"position":[[629,5],[843,6],[1088,5],[1182,5],[1280,5]]},"500":{"position":[[36,5],[480,5],[853,5]]},"502":{"position":[[951,5]]},"563":{"position":[[804,5]]},"567":{"position":[[2697,5],[2814,6],[2914,6],[3072,5],[3141,5],[3420,5],[3480,5],[3590,6],[3841,5],[4242,5]]},"590":{"position":[[546,6],[562,5]]},"614":{"position":[[1201,5],[1223,5]]},"725":{"position":[[59,5],[96,5],[220,5],[258,5],[591,6],[671,5],[737,5],[776,5],[817,5],[921,5]]},"750":{"position":[[73,5],[271,5],[312,5],[454,5],[511,5]]},"757":{"position":[[29,5],[91,5],[367,6]]},"759":{"position":[[108,6],[122,5]]},"761":{"position":[[118,6]]},"771":{"position":[[31,5],[95,5],[296,6],[435,6],[493,6]]},"773":{"position":[[111,6],[125,5],[340,6],[354,5]]},"775":{"position":[[123,6],[240,6]]},"808":{"position":[[174,6]]},"831":{"position":[[293,5]]},"1034":{"position":[[76,5]]},"1049":{"position":[[174,6]]},"1096":{"position":[[1218,5]]},"1119":{"position":[[61,5]]},"1212":{"position":[[92,6],[335,5],[373,5],[411,5],[560,5]]},"1271":{"position":[[13,5]]},"1407":{"position":[[292,5]]},"1458":{"position":[[98,5]]},"1492":{"position":[[123,5]]},"1498":{"position":[[110,5]]},"1570":{"position":[[29,5]]},"1572":{"position":[[149,5]]},"1578":{"position":[[32,5]]},"1592":{"position":[[387,5],[435,5]]},"1594":{"position":[[309,5],[392,5]]},"1651":{"position":[[94,5],[263,5]]},"1675":{"position":[[497,5],[597,5]]},"1682":{"position":[[284,5]]},"1713":{"position":[[1101,5],[1120,5],[1521,5],[1584,5]]},"1718":{"position":[[24,5],[268,5]]},"1723":{"position":[[666,5],[734,5]]},"1725":{"position":[[273,5],[316,5],[1245,5]]},"1728":{"position":[[64,5],[139,5],[398,5]]},"1730":{"position":[[60,5]]},"1737":{"position":[[143,5]]},"1771":{"position":[[117,5],[154,5]]},"1775":{"position":[[34,5]]},"1823":{"position":[[189,5]]},"1839":{"position":[[66,5],[144,5],[297,5],[361,5]]},"1844":{"position":[[99,5],[315,5]]},"1846":{"position":[[250,5],[342,5],[422,6],[585,6],[715,6]]},"1851":{"position":[[378,5]]},"1860":{"position":[[259,5]]}}}],["speed,rate,head,effici",{"_index":946,"t":{"165":{"position":[[489,26]]},"189":{"position":[[489,26]]}}}],["speed/minimum",{"_index":1427,"t":{"287":{"position":[[938,13]]}}}],["spell",{"_index":2413,"t":{"1485":{"position":[[138,8]]},"1673":{"position":[[548,8]]}}}],["spellcheck",{"_index":2945,"t":{"1637":{"position":[[5,13]]}}}],["spelling/dash",{"_index":2089,"t":{"614":{"position":[[420,13]]}}}],["split",{"_index":659,"t":{"95":{"position":[[142,5]]},"231":{"position":[[972,5],[1138,5]]},"381":{"position":[[116,5]]},"489":{"position":[[276,5]]},"886":{"position":[[218,5]]},"1096":{"position":[[1075,5]]},"1587":{"position":[[178,5]]},"1737":{"position":[[670,9]]},"1767":{"position":[[8,5]]},"1801":{"position":[[87,5],[238,9]]},"1815":{"position":[[212,9]]},"1836":{"position":[[142,5]]},"1906":{"position":[[164,5]]}}}],["splitting/halv",{"_index":1751,"t":{"450":{"position":[[124,17]]}}}],["splitting/report",{"_index":3506,"t":{"1793":{"position":[[703,19]]}}}],["spread",{"_index":1733,"t":{"442":{"position":[[641,6],[722,7]]},"450":{"position":[[763,6]]}}}],["sqrt{p_{1",{"_index":1912,"t":{"511":{"position":[[178,11]]}}}],["src=\"path/image.jpg",{"_index":3698,"t":{"1914":{"position":[[1016,20]]}}}],["sre",{"_index":2354,"t":{"1472":{"position":[[53,3]]}}}],["srk",{"_index":1046,"t":{"201":{"position":[[818,3]]},"213":{"position":[[1109,3]]},"268":{"position":[[818,3]]},"280":{"position":[[1325,3]]},"469":{"position":[[522,3]]},"471":{"position":[[318,3]]},"473":{"position":[[615,3]]},"475":{"position":[[232,3]]},"513":{"position":[[1009,3],[1177,3],[1209,3],[1380,4]]},"519":{"position":[[126,3],[299,3]]},"525":{"position":[[106,3]]},"644":{"position":[[106,3]]},"889":{"position":[[139,3],[222,4]]},"893":{"position":[[95,3]]},"971":{"position":[[95,3]]},"978":{"position":[[80,3]]},"997":{"position":[[95,3]]}}}],["srk/pr/gerg_srk/gerg_pr",{"_index":2174,"t":{"891":{"position":[[59,25]]},"995":{"position":[[59,25]]}}}],["stack",{"_index":192,"t":{"21":{"position":[[797,5]]}}}],["stage",{"_index":768,"t":{"135":{"position":[[1193,5],[1258,5]]},"201":{"position":[[1233,7]]},"213":{"position":[[1524,7]]},"225":{"position":[[775,7],[966,5]]},"268":{"position":[[1233,7],[1593,7]]},"280":{"position":[[1740,7],[2100,7]]},"304":{"position":[[271,7]]},"355":{"position":[[494,6],[571,6]]},"424":{"position":[[563,6],[925,7],[1254,6],[1606,6],[1819,6],[1875,5],[2216,6],[2318,7],[2426,5]]},"448":{"position":[[181,7]]},"456":{"position":[[599,7],[712,6]]},"458":{"position":[[153,7],[216,6],[288,6]]},"460":{"position":[[102,5],[190,6],[634,6],[695,6]]},"464":{"position":[[20,6],[43,5],[246,7],[309,6],[381,6],[489,6],[562,6],[643,5]]},"466":{"position":[[30,6],[99,6],[351,6],[883,6],[958,7],[1062,7]]},"469":{"position":[[850,7]]},"471":{"position":[[468,7]]},"473":{"position":[[765,7]]},"477":{"position":[[692,5]]},"479":{"position":[[396,7],[459,6],[531,6],[648,5],[719,6],[792,6],[909,5],[953,5]]},"481":{"position":[[1734,7],[1797,6],[1869,6],[1979,6],[2069,5],[2209,6],[2282,6],[2392,6],[2482,5],[2595,5]]},"485":{"position":[[195,5],[236,5],[652,7],[715,6],[975,5],[1121,6],[1546,5],[1746,6],[1998,5]]},"487":{"position":[[203,6],[231,6],[272,6],[416,6],[488,6],[509,6],[645,6],[652,6],[824,6],[997,6],[1166,5]]},"489":{"position":[[77,6],[133,6],[1708,5],[1773,5]]},"493":{"position":[[275,7],[605,5],[673,5]]},"498":{"position":[[242,6],[296,5],[372,5]]},"502":{"position":[[158,6],[199,6],[476,5],[639,5],[2037,5],[2264,5],[2340,6],[2376,5],[2407,5],[2508,5],[2582,5],[2772,5]]},"567":{"position":[[3286,7],[3370,5]]},"608":{"position":[[165,7],[228,6],[300,6],[381,5]]},"610":{"position":[[138,7]]},"654":{"position":[[17,6]]},"656":{"position":[[76,6]]},"658":{"position":[[51,7]]},"660":{"position":[[55,7]]},"673":{"position":[[94,6]]},"675":{"position":[[144,7],[207,6],[279,6],[396,5],[467,6],[540,6],[657,5],[701,5]]},"723":{"position":[[17,6]]},"725":{"position":[[718,6]]},"728":{"position":[[154,7],[217,6],[289,6]]},"730":{"position":[[116,7]]},"733":{"position":[[156,7],[219,6],[291,6]]},"735":{"position":[[118,7]]},"738":{"position":[[424,7],[487,6],[912,5]]},"740":{"position":[[280,7],[712,5],[780,5]]},"748":{"position":[[17,6]]},"750":{"position":[[250,6]]},"752":{"position":[[156,7],[219,6],[291,6]]},"754":{"position":[[118,7]]},"833":{"position":[[113,7]]},"835":{"position":[[106,7]]},"1070":{"position":[[17,6]]},"1072":{"position":[[76,6],[194,6]]},"1074":{"position":[[51,7],[114,6]]},"1076":{"position":[[55,7]]},"1096":{"position":[[52,6],[375,7],[438,6],[657,6]]},"1121":{"position":[[224,7],[287,6]]},"1149":{"position":[[172,7]]},"1151":{"position":[[110,7],[126,6]]},"1153":{"position":[[227,6],[302,7],[406,7]]},"1218":{"position":[[17,6]]},"1220":{"position":[[76,6],[179,5]]},"1222":{"position":[[51,7],[125,5]]},"1224":{"position":[[55,7]]},"1265":{"position":[[17,6]]},"1267":{"position":[[36,5]]},"1269":{"position":[[89,7],[178,6]]},"1271":{"position":[[30,6],[123,5]]},"1273":{"position":[[75,7],[138,6],[210,6],[327,5]]},"1275":{"position":[[13,5],[389,6],[417,6],[542,6],[686,6],[758,6],[779,6],[915,6],[922,6],[1094,6],[1267,6]]},"1277":{"position":[[103,7],[166,6],[426,5],[572,6],[997,5]]},"1279":{"position":[[107,7],[437,5],[505,5]]},"1306":{"position":[[17,6]]},"1308":{"position":[[136,6],[176,5]]},"1310":{"position":[[102,7],[165,6],[386,6]]},"1312":{"position":[[106,7]]},"1409":{"position":[[113,7]]},"1411":{"position":[[106,7]]},"1450":{"position":[[171,6],[448,6],[651,6],[753,5],[993,6]]},"1452":{"position":[[103,6],[206,6]]},"1485":{"position":[[209,6]]},"1487":{"position":[[181,6],[291,5],[314,5]]},"1492":{"position":[[36,5]]},"1498":{"position":[[175,5]]},"1572":{"position":[[166,5]]},"1578":{"position":[[196,5]]},"1583":{"position":[[33,5]]},"1605":{"position":[[27,5]]},"1662":{"position":[[130,5],[1377,5]]},"1669":{"position":[[652,5]]},"1673":{"position":[[27,5]]},"1682":{"position":[[330,6]]},"1723":{"position":[[824,5],[1052,6],[1059,7],[1122,6]]},"1725":{"position":[[69,5]]},"1775":{"position":[[51,5]]},"1803":{"position":[[218,5]]},"1839":{"position":[[36,5]]},"1841":{"position":[[241,7]]},"1860":{"position":[[356,5]]},"1938":{"position":[[267,6]]}}}],["stage1_compressor_chart",{"_index":2105,"t":{"660":{"position":[[83,23]]}}}],["stand",{"_index":1669,"t":{"424":{"position":[[63,5]]}}}],["standalon",{"_index":1765,"t":{"460":{"position":[[295,10]]}}}],["standard",{"_index":256,"t":{"25":{"position":[[884,8],[1056,8]]},"304":{"position":[[804,8]]},"442":{"position":[[1801,8]]},"462":{"position":[[412,8]]},"479":{"position":[[1188,8]]},"481":{"position":[[2830,8]]},"606":{"position":[[99,8],[352,8]]},"608":{"position":[[452,8]]},"629":{"position":[[918,8],[1090,8]]},"1109":{"position":[[230,8]]},"1137":{"position":[[382,8]]},"1651":{"position":[[422,8]]},"1673":{"position":[[342,8]]},"1701":{"position":[[185,8]]},"1771":{"position":[[23,8]]},"1832":{"position":[[101,8],[155,8]]},"1853":{"position":[[71,8]]},"1910":{"position":[[16,8]]},"1912":{"position":[[27,8]]},"1945":{"position":[[1397,8]]}}}],["standard_conditions_dens",{"_index":3268,"t":{"1682":{"position":[[1019,27]]}}}],["standard_cubic_meters_per_day",{"_index":3514,"t":{"1808":{"position":[[319,30]]}}}],["start",{"_index":151,"t":{"17":{"position":[[269,7]]},"39":{"position":[[363,7]]},"51":{"position":[[233,7]]},"250":{"position":[[248,8]]},"325":{"position":[[2291,5]]},"496":{"position":[[842,6]]},"537":{"position":[[758,5]]},"586":{"position":[[352,5],[368,5]]},"812":{"position":[[353,8]]},"905":{"position":[[952,5]]},"1024":{"position":[[31,6],[60,5]]},"1220":{"position":[[247,7]]},"1281":{"position":[[0,5]]},"1283":{"position":[[11,5],[417,6],[560,5],[1159,6]]},"1285":{"position":[[0,6]]},"1287":{"position":[[117,6]]},"1594":{"position":[[96,7]]},"1647":{"position":[[12,5]]},"1651":{"position":[[514,5]]},"1730":{"position":[[240,6],[820,7]]},"1853":{"position":[[131,5],[334,5],[406,8]]},"1886":{"position":[[292,5]]},"1888":{"position":[[39,7]]},"1914":{"position":[[315,5],[336,5]]},"1916":{"position":[[382,8]]}}}],["stash",{"_index":2139,"t":{"730":{"position":[[235,7]]}}}],["state",{"_index":1231,"t":{"225":{"position":[[158,5]]},"487":{"position":[[98,5]]},"513":{"position":[[837,5],[948,5]]},"567":{"position":[[427,5],[580,5]]},"1316":{"position":[[213,5]]},"1705":{"position":[[248,6]]}}}],["statement",{"_index":730,"t":{"133":{"position":[[100,9]]},"1914":{"position":[[522,9],[569,9],[581,9],[593,9]]}}}],["static",{"_index":23,"t":{"5":{"position":[[123,10]]},"567":{"position":[[222,8]]},"1882":{"position":[[51,6]]}}}],["statu",{"_index":2438,"t":{"1487":{"position":[[169,6]]},"1578":{"position":[[221,6]]},"1934":{"position":[[79,6]]}}}],["status",{"_index":3527,"t":{"1844":{"position":[[51,8]]}}}],["stay",{"_index":2171,"t":{"886":{"position":[[105,5]]},"1283":{"position":[[1230,4]]}}}],["steam",{"_index":446,"t":{"64":{"position":[[32,5],[191,5],[366,5],[473,5],[528,5],[644,5],[749,5]]},"614":{"position":[[1667,5],[1758,5],[1814,5]]},"1760":{"position":[[141,5]]}}}],["steamgen",{"_index":459,"t":{"64":{"position":[[625,8]]}}}],["steamturbinegeneratorconsumpt",{"_index":3500,"t":{"1762":{"position":[[135,32]]}}}],["step",{"_index":231,"t":{"25":{"position":[[349,5]]},"31":{"position":[[846,5]]},"56":{"position":[[143,4],[151,4]]},"62":{"position":[[68,6]]},"89":{"position":[[141,4],[149,4]]},"122":{"position":[[147,4],[155,4]]},"343":{"position":[[310,6]]},"383":{"position":[[423,5]]},"489":{"position":[[1357,6],[1572,5]]},"502":{"position":[[2084,4]]},"570":{"position":[[250,5]]},"629":{"position":[[383,5]]},"635":{"position":[[846,5]]},"921":{"position":[[238,4],[283,4]]},"1064":{"position":[[23,5]]},"1084":{"position":[[683,5],[842,6],[890,4],[975,5],[1098,4],[1179,5],[1322,6]]},"1283":{"position":[[687,4]]},"1336":{"position":[[149,5],[300,4],[345,4],[470,5]]},"1651":{"position":[[445,5]]},"1682":{"position":[[931,5]]},"1713":{"position":[[1226,5]]},"1730":{"position":[[176,4]]},"1732":{"position":[[71,5],[106,5]]},"1890":{"position":[[33,6]]}}}],["still",{"_index":1331,"t":{"240":{"position":[[1062,5]]},"291":{"position":[[311,5]]},"383":{"position":[[407,5]]},"498":{"position":[[854,5]]},"576":{"position":[[1344,5]]},"1034":{"position":[[612,5]]},"1732":{"position":[[122,5]]},"1735":{"position":[[2337,5]]},"1771":{"position":[[306,5]]},"1934":{"position":[[46,5]]}}}],["stone",{"_index":1808,"t":{"481":{"position":[[1097,5]]}}}],["stop",{"_index":2176,"t":{"905":{"position":[[29,4],[859,5]]},"1730":{"position":[[117,5]]}}}],["storag",{"_index":617,"t":{"91":{"position":[[3768,8],[4182,7],[4247,7]]},"614":{"position":[[1586,7]]},"1744":{"position":[[254,7]]}}}],["store",{"_index":208,"t":{"23":{"position":[[317,5]]},"93":{"position":[[1101,5]]},"614":{"position":[[1647,7]]},"627":{"position":[[295,5]]},"1715":{"position":[[174,6]]},"1735":{"position":[[850,5]]},"1922":{"position":[[43,5],[218,6]]}}}],["stp",{"_index":264,"t":{"25":{"position":[[1029,3],[1105,5],[1154,3]]},"629":{"position":[[1063,3],[1139,5],[1188,3]]},"1684":{"position":[[273,3],[487,3]]},"1821":{"position":[[0,3],[73,3],[376,3]]}}}],["str",{"_index":2850,"t":{"1598":{"position":[[6,3]]}}}],["strategi",{"_index":1625,"t":{"381":{"position":[[164,11]]}}}],["stream",{"_index":473,"t":{"73":{"position":[[192,7]]},"272":{"position":[[771,6]]},"367":{"position":[[115,7]]},"369":{"position":[[252,7],[316,6],[344,6],[378,6],[713,7]]},"389":{"position":[[383,6]]},"424":{"position":[[2088,7],[2178,7],[2396,6]]},"426":{"position":[[284,7]]},"456":{"position":[[817,7]]},"483":{"position":[[125,7]]},"485":{"position":[[170,7],[218,6],[264,8],[285,7],[357,6],[465,6],[579,6],[643,8],[798,7],[817,6],[829,8],[866,8],[1204,7],[1236,6],[1248,7],[1280,7],[1311,6],[1323,7],[1359,7]]},"487":{"position":[[0,7],[43,7],[140,6],[552,6],[680,6],[740,6],[764,6],[801,6],[946,6],[1048,7]]},"489":{"position":[[1659,7],[1749,6],[1805,7],[1872,7],[1904,6]]},"493":{"position":[[102,8],[339,7],[475,7]]},"567":{"position":[[2872,6],[2895,6],[4051,7],[4142,6],[4285,7]]},"614":{"position":[[827,6]]},"691":{"position":[[111,8]]},"717":{"position":[[68,6],[584,6],[833,6],[1035,6]]},"725":{"position":[[860,7]]},"738":{"position":[[103,8],[129,6],[237,6],[351,6],[415,8],[570,7],[602,6],[614,7],[646,7],[677,6],[689,7],[725,7]]},"740":{"position":[[107,8],[344,7],[582,7]]},"750":{"position":[[355,7]]},"831":{"position":[[336,7]]},"1096":{"position":[[521,7],[540,6],[552,8],[589,8],[1261,7]]},"1119":{"position":[[588,6]]},"1212":{"position":[[454,7]]},"1252":{"position":[[33,6]]},"1271":{"position":[[229,7],[262,6]]},"1275":{"position":[[119,7],[152,6],[449,7],[484,7],[822,6],[950,6],[1010,6],[1034,6],[1071,6],[1216,6],[1318,7]]},"1277":{"position":[[249,7],[268,6],[280,8],[317,8],[655,7],[687,6],[699,7],[731,7],[762,6],[774,7],[810,7]]},"1279":{"position":[[171,7],[307,7]]},"1291":{"position":[[167,6],[233,6],[420,6],[458,6],[908,6],[1214,6]]},"1293":{"position":[[71,6],[343,6],[526,6],[544,6],[575,6],[600,6],[623,6]]},"1295":{"position":[[97,6]]},"1304":{"position":[[30,6],[95,6],[299,6]]},"1306":{"position":[[24,7],[77,7]]},"1308":{"position":[[206,8]]},"1310":{"position":[[248,7],[267,6],[279,8],[316,8],[469,7],[501,6],[513,7],[545,7],[576,6],[588,7],[624,7]]},"1312":{"position":[[170,7]]},"1314":{"position":[[17,7]]},"1316":{"position":[[115,7],[158,7],[255,6]]},"1318":{"position":[[98,8],[124,6],[232,6],[346,6]]},"1320":{"position":[[102,8]]},"1407":{"position":[[335,7]]},"1450":{"position":[[26,7],[116,7],[519,6],[614,6],[865,6],[958,6]]},"1458":{"position":[[141,7]]},"1487":{"position":[[17,6]]},"1592":{"position":[[473,7]]},"1598":{"position":[[22,6]]},"1629":{"position":[[52,7]]},"1653":{"position":[[416,6],[499,6]]},"1656":{"position":[[44,6],[105,7],[167,7]]},"1658":{"position":[[119,7]]},"1662":{"position":[[1397,7]]},"1664":{"position":[[19,7],[69,6],[474,6]]},"1669":{"position":[[672,7]]},"1673":{"position":[[288,7],[385,7]]},"1682":{"position":[[202,7]]},"1686":{"position":[[360,7]]},"1690":{"position":[[19,6]]},"1723":{"position":[[907,6],[991,7],[1205,7],[1237,6],[1249,7],[1281,7],[1312,6],[1324,7],[1360,7]]},"1725":{"position":[[32,7]]},"1832":{"position":[[29,7]]},"1844":{"position":[[383,7]]},"1851":{"position":[[307,9]]},"1858":{"position":[[355,6]]},"1860":{"position":[[296,7]]},"1867":{"position":[[52,7]]},"1872":{"position":[[228,7]]}}}],["stream/calendar",{"_index":2311,"t":{"1293":{"position":[[493,15]]}}}],["stream_day",{"_index":680,"t":{"107":{"position":[[862,11],[1193,11],[1338,11],[1635,11],[2042,10],[2097,10]]},"117":{"position":[[211,10],[279,10]]},"129":{"position":[[715,11],[914,10]]},"278":{"position":[[361,10],[3576,10],[3782,10],[4191,10]]},"280":{"position":[[3616,10],[5204,10],[5573,10],[5748,10]]},"717":{"position":[[342,11],[414,10],[845,11]]},"719":{"position":[[107,11]]},"721":{"position":[[149,10],[215,10],[354,10]]},"866":{"position":[[61,10],[122,10]]},"878":{"position":[[139,11]]},"880":{"position":[[54,10]]},"1234":{"position":[[208,10]]},"1236":{"position":[[230,11]]},"1238":{"position":[[160,10]]},"1293":{"position":[[203,10],[268,10]]},"1401":{"position":[[188,11],[363,11]]},"1403":{"position":[[60,10]]},"1435":{"position":[[160,10],[221,10]]},"1439":{"position":[[142,10]]},"1445":{"position":[[105,11]]},"1447":{"position":[[48,10]]},"1872":{"position":[[314,11]]}}}],["streamcondit",{"_index":3000,"t":{"1653":{"position":[[426,16]]},"1664":{"position":[[455,15]]}}}],["strict",{"_index":1539,"t":{"323":{"position":[[63,6]]},"1477":{"position":[[19,6]]}}}],["strike",{"_index":3680,"t":{"1914":{"position":[[416,6]]}}}],["string",{"_index":2321,"t":{"1364":{"position":[[21,7],[41,8]]},"1508":{"position":[[83,6]]},"1686":{"position":[[695,7]]},"1723":{"position":[[951,6]]},"1920":{"position":[[731,7]]}}}],["strive",{"_index":3614,"t":{"1904":{"position":[[107,6]]},"1906":{"position":[[58,6]]}}}],["strong>text/[opt",{"_index":3652,"t":{"1908":{"position":[[101,15]]}}}],["typer",{"_index":2645,"t":{"1544":{"position":[[773,5]]},"1686":{"position":[[1285,5]]}}}],["typic",{"_index":1232,"t":{"225":{"position":[[310,9]]},"325":{"position":[[823,10]]},"332":{"position":[[171,9]]},"442":{"position":[[594,9]]},"496":{"position":[[16,9]]},"513":{"position":[[186,7]]},"567":{"position":[[1091,9]]},"576":{"position":[[233,9]]},"578":{"position":[[181,9]]},"1017":{"position":[[283,9]]},"1080":{"position":[[98,9]]},"1084":{"position":[[362,9]]},"1295":{"position":[[362,9]]},"1853":{"position":[[264,10]]}}}],["typing
  • list",{"_index":3692,"t":{"1914":{"position":[[761,12],[891,12]]}}}],["ultra_dri",{"_index":1940,"t":{"515":{"position":[[113,9]]},"519":{"position":[[255,9]]},"993":{"position":[[159,9]]}}}],["ultra_rich",{"_index":1947,"t":{"515":{"position":[[199,10]]},"993":{"position":[[185,10]]}}}],["unabl",{"_index":1267,"t":{"231":{"position":[[865,6]]}}}],["unbias",{"_index":1431,"t":{"287":{"position":[[1130,9]]},"1034":{"position":[[122,9]]}}}],["under",{"_index":684,"t":{"112":{"position":[[134,5]]},"139":{"position":[[183,5]]},"141":{"position":[[128,5]]},"149":{"position":[[444,5]]},"155":{"position":[[308,5]]},"173":{"position":[[444,5]]},"179":{"position":[[308,5]]},"197":{"position":[[330,5]]},"201":{"position":[[70,5]]},"205":{"position":[[344,5]]},"231":{"position":[[151,5],[336,5]]},"250":{"position":[[292,5]]},"264":{"position":[[330,5]]},"268":{"position":[[70,5]]},"272":{"position":[[344,5],[638,5]]},"306":{"position":[[40,5]]},"321":{"position":[[331,5],[593,6],[643,5],[1574,5]]},"325":{"position":[[1862,5],[2175,5]]},"332":{"position":[[458,5]]},"353":{"position":[[282,5],[310,5],[497,5]]},"355":{"position":[[29,5]]},"361":{"position":[[36,5],[153,5]]},"391":{"position":[[152,5]]},"403":{"position":[[124,5],[296,5]]},"408":{"position":[[67,5],[245,5]]},"477":{"position":[[1028,5]]},"481":{"position":[[1565,5]]},"485":{"position":[[21,5]]},"498":{"position":[[341,5]]},"502":{"position":[[227,5]]},"527":{"position":[[773,5]]},"531":{"position":[[10,5]]},"621":{"position":[[41,5]]},"640":{"position":[[52,5]]},"757":{"position":[[283,5]]},"764":{"position":[[40,5]]},"771":{"position":[[350,5]]},"778":{"position":[[40,5]]},"801":{"position":[[183,5],[287,5],[457,5]]},"889":{"position":[[38,5]]},"967":{"position":[[47,5]]},"993":{"position":[[37,5]]},"1030":{"position":[[0,5]]},"1041":{"position":[[175,5],[267,5],[443,5]]},"1080":{"position":[[297,5]]},"1096":{"position":[[118,5]]},"1109":{"position":[[50,5]]},"1189":{"position":[[50,5]]},"1308":{"position":[[126,5]]},"1332":{"position":[[687,5]]},"1349":{"position":[[44,5]]},"1356":{"position":[[51,5]]},"1379":{"position":[[86,5]]},"1485":{"position":[[25,5]]},"1737":{"position":[[973,5]]},"1787":{"position":[[251,5]]}}}],["underscor",{"_index":608,"t":{"91":{"position":[[3449,10],[3585,10]]}}}],["understand",{"_index":527,"t":{"84":{"position":[[403,10]]},"149":{"position":[[505,10]]},"153":{"position":[[155,10]]},"173":{"position":[[505,10]]},"177":{"position":[[155,10]]},"203":{"position":[[155,10]]},"270":{"position":[[155,10]]},"580":{"position":[[417,10]]},"1283":{"position":[[1057,14]]},"1485":{"position":[[75,10]]}}}],["understood",{"_index":404,"t":{"58":{"position":[[678,10]]}}}],["undocu",{"_index":3387,"t":{"1703":{"position":[[18,12]]}}}],["unexpect",{"_index":2388,"t":{"1481":{"position":[[59,10]]}}}],["unicod",{"_index":356,"t":{"45":{"position":[[209,9]]}}}],["unifi",{"_index":1736,"t":{"442":{"position":[[1170,7],[1251,7]]},"450":{"position":[[441,7]]}}}],["uniform",{"_index":3612,"t":{"1904":{"position":[[47,7]]}}}],["union",{"_index":233,"t":{"25":{"position":[[368,5]]},"31":{"position":[[865,5]]},"75":{"position":[[69,5]]},"629":{"position":[[402,5]]},"635":{"position":[[865,5]]},"1592":{"position":[[1119,5]]}}}],["uniqu",{"_index":535,"t":{"91":{"position":[[28,6],[411,7],[447,6]]},"502":{"position":[[562,6]]},"1658":{"position":[[57,6]]},"1686":{"position":[[794,6],[822,6]]},"1750":{"position":[[28,6]]}}}],["unisim",{"_index":1697,"t":{"436":{"position":[[916,6]]}}}],["unit",{"_index":99,"t":{"13":{"position":[[533,5]]},"91":{"position":[[67,5],[2133,5],[2226,6],[2280,5],[2478,6],[2680,6],[2826,6],[2977,6],[3134,6]]},"107":{"position":[[786,5],[807,5],[1117,5],[1138,5],[1262,5],[1283,5],[1570,5],[1589,5],[2025,5],[2080,5]]},"117":{"position":[[4,4],[194,5],[256,5]]},"129":{"position":[[49,4],[242,4],[639,5],[660,5],[897,5]]},"149":{"position":[[934,6]]},"163":{"position":[[464,6]]},"173":{"position":[[934,6]]},"187":{"position":[[464,6]]},"197":{"position":[[578,6]]},"201":{"position":[[474,6],[638,6]]},"213":{"position":[[284,6],[765,6],[929,6]]},"223":{"position":[[546,6]]},"225":{"position":[[1482,6]]},"233":{"position":[[227,6],[775,6]]},"256":{"position":[[7,4]]},"264":{"position":[[578,6]]},"268":{"position":[[474,6],[638,6]]},"280":{"position":[[500,6],[981,6],[1145,6]]},"289":{"position":[[122,5]]},"293":{"position":[[102,6],[121,5],[189,5],[242,4]]},"296":{"position":[[137,5]]},"298":{"position":[[43,5]]},"300":{"position":[[104,6],[123,5],[191,5],[244,4]]},"302":{"position":[[115,6],[276,6],[456,6]]},"310":{"position":[[9,5]]},"319":{"position":[[7,4]]},"325":{"position":[[1333,6]]},"332":{"position":[[220,5],[272,5]]},"353":{"position":[[490,6]]},"379":{"position":[[17,5]]},"387":{"position":[[17,5]]},"432":{"position":[[95,6],[114,5],[182,5],[261,5]]},"434":{"position":[[105,6]]},"438":{"position":[[97,6],[116,5],[184,5],[263,5]]},"440":{"position":[[109,6]]},"442":{"position":[[1517,5],[1603,4],[1667,5]]},"444":{"position":[[253,6],[272,5],[340,5],[419,5]]},"446":{"position":[[182,6]]},"450":{"position":[[1127,5]]},"452":{"position":[[181,6],[223,5]]},"454":{"position":[[134,6]]},"469":{"position":[[109,6]]},"471":{"position":[[182,6]]},"473":{"position":[[207,6]]},"475":{"position":[[134,6]]},"487":{"position":[[1407,4]]},"531":{"position":[[275,6]]},"537":{"position":[[591,5],[940,5]]},"570":{"position":[[112,4]]},"705":{"position":[[49,7]]},"717":{"position":[[1029,5]]},"721":{"position":[[449,4]]},"750":{"position":[[25,4]]},"766":{"position":[[238,6],[257,5],[325,5],[404,5]]},"768":{"position":[[182,6]]},"780":{"position":[[238,6],[257,5],[325,5],[404,5]]},"782":{"position":[[182,6]]},"801":{"position":[[225,5]]},"804":{"position":[[99,6]]},"806":{"position":[[102,6],[142,4]]},"808":{"position":[[109,6]]},"866":{"position":[[38,5],[99,5]]},"878":{"position":[[63,5],[84,5]]},"880":{"position":[[37,5]]},"941":{"position":[[20,4]]},"1017":{"position":[[340,5]]},"1038":{"position":[[46,6]]},"1041":{"position":[[217,5]]},"1044":{"position":[[51,6],[81,5]]},"1046":{"position":[[47,6],[77,5]]},"1049":{"position":[[109,6]]},"1080":{"position":[[147,5],[199,5]]},"1191":{"position":[[197,6],[239,5]]},"1193":{"position":[[136,6]]},"1228":{"position":[[128,5]]},"1230":{"position":[[81,6]]},"1232":{"position":[[69,6]]},"1234":{"position":[[52,4],[164,4],[339,4]]},"1236":{"position":[[148,5],[169,5]]},"1238":{"position":[[137,5]]},"1259":{"position":[[349,4]]},"1295":{"position":[[270,6],[287,5],[384,5]]},"1324":{"position":[[224,4]]},"1386":{"position":[[0,5]]},"1389":{"position":[[47,6],[66,5],[134,5],[207,4]]},"1391":{"position":[[51,6],[70,5],[138,5],[217,5]]},"1394":{"position":[[77,6]]},"1396":{"position":[[109,6]]},"1399":{"position":[[0,4]]},"1401":{"position":[[70,5],[91,5],[146,6],[265,5],[286,5],[322,5]]},"1403":{"position":[[37,5]]},"1417":{"position":[[611,4]]},"1435":{"position":[[137,5],[198,5]]},"1439":{"position":[[118,5]]},"1445":{"position":[[39,5],[62,5]]},"1447":{"position":[[24,5]]},"1458":{"position":[[248,6],[326,4]]},"1517":{"position":[[6,5]]},"1528":{"position":[[277,4]]},"1536":{"position":[[4,4]]},"1540":{"position":[[504,4]]},"1544":{"position":[[117,5],[154,4]]},"1701":{"position":[[59,5]]},"1723":{"position":[[388,5]]},"1737":{"position":[[910,5]]},"1740":{"position":[[0,5]]},"1744":{"position":[[134,5]]},"1750":{"position":[[67,5]]},"1771":{"position":[[298,4],[352,4]]},"1793":{"position":[[204,4],[294,4],[322,4],[1020,4],[1051,4]]},"1799":{"position":[[4,4],[109,4]]},"1803":{"position":[[910,4],[941,4]]},"1808":{"position":[[221,4]]},"1812":{"position":[[485,5]]},"1898":{"position":[[297,4]]}}}],["univers",{"_index":1404,"t":{"280":{"position":[[199,10]]}}}],["unix",{"_index":296,"t":{"35":{"position":[[25,4]]}}}],["unknown",{"_index":2049,"t":{"576":{"position":[[863,8]]},"1149":{"position":[[164,7]]},"1151":{"position":[[102,7]]},"1596":{"position":[[386,7]]}}}],["unless",{"_index":3638,"t":{"1906":{"position":[[868,6],[1070,6]]},"1918":{"position":[[57,6]]}}}],["unnecessari",{"_index":2374,"t":{"1474":{"position":[[389,11]]},"1530":{"position":[[135,11]]},"1589":{"position":[[170,11]]},"1673":{"position":[[594,11]]},"1684":{"position":[[116,11]]}}}],["unord",{"_index":3690,"t":{"1914":{"position":[[707,11]]}}}],["unrealist",{"_index":1735,"t":{"442":{"position":[[826,11]]},"450":{"position":[[1389,11],[1671,11],[1769,11]]},"580":{"position":[[239,11]]}}}],["unrecogn",{"_index":351,"t":{"45":{"position":[[170,12]]}}}],["unrel",{"_index":3608,"t":{"1900":{"position":[[184,9]]}}}],["until",{"_index":1806,"t":{"481":{"position":[[191,5]]},"567":{"position":[[2317,5],[2950,5]]},"1119":{"position":[[455,5]]}}}],["unus",{"_index":2376,"t":{"1474":{"position":[[429,6]]},"1596":{"position":[[623,6]]},"1701":{"position":[[216,6]]},"1906":{"position":[[248,6]]}}}],["unwant",{"_index":1750,"t":{"450":{"position":[[101,8]]}}}],["up",{"_index":119,"t":{"13":{"position":[[921,2]]},"25":{"position":[[517,2]]},"31":{"position":[[1014,2]]},"51":{"position":[[249,2]]},"91":{"position":[[99,2],[2441,2]]},"240":{"position":[[108,2],[735,2]]},"287":{"position":[[496,2],[761,2]]},"304":{"position":[[28,2],[1405,2],[1579,2]]},"325":{"position":[[586,2]]},"334":{"position":[[25,3],[118,2]]},"416":{"position":[[285,2]]},"428":{"position":[[36,2],[109,2]]},"450":{"position":[[249,2],[544,2]]},"456":{"position":[[705,2]]},"565":{"position":[[72,2]]},"576":{"position":[[713,2]]},"629":{"position":[[551,2]]},"635":{"position":[[1014,2]]},"725":{"position":[[711,2]]},"744":{"position":[[749,3]]},"750":{"position":[[243,2]]},"847":{"position":[[116,2]]},"876":{"position":[[111,2]]},"884":{"position":[[112,2]]},"1024":{"position":[[66,3]]},"1179":{"position":[[742,3]]},"1526":{"position":[[60,2]]},"1651":{"position":[[133,2]]},"1750":{"position":[[99,2]]},"1812":{"position":[[44,2]]},"1878":{"position":[[375,2]]},"1900":{"position":[[240,2]]},"1918":{"position":[[186,2]]}}}],["upcom",{"_index":42,"t":{"7":{"position":[[341,8]]},"19":{"position":[[94,8]]},"49":{"position":[[73,8]]},"1660":{"position":[[80,8]]}}}],["updat",{"_index":716,"t":{"129":{"position":[[0,6]]},"137":{"position":[[511,7]]},"874":{"position":[[202,7]]},"886":{"position":[[18,6]]},"1417":{"position":[[228,7],[481,7]]},"1472":{"position":[[32,6]]},"1483":{"position":[[184,6],[219,6]]},"1485":{"position":[[157,6],[233,6],[270,6],[307,6],[331,6]]},"1496":{"position":[[0,6],[54,6]]},"1498":{"position":[[425,6],[471,6]]},"1503":{"position":[[0,6]]},"1510":{"position":[[119,6],[156,6]]},"1526":{"position":[[244,6],[283,6],[337,6],[423,6]]},"1528":{"position":[[316,6]]},"1533":{"position":[[66,6]]},"1542":{"position":[[275,6],[343,6],[403,6]]},"1544":{"position":[[284,6],[536,6],[563,6],[600,6],[640,6],[680,6],[721,6],[766,6],[802,6]]},"1556":{"position":[[0,6]]},"1563":{"position":[[103,6]]},"1565":{"position":[[70,6]]},"1574":{"position":[[0,6]]},"1576":{"position":[[0,6],[31,6],[72,6],[99,6]]},"1587":{"position":[[268,6],[303,6]]},"1592":{"position":[[670,6],[894,6]]},"1594":{"position":[[266,6],[337,6],[432,6],[479,6]]},"1596":{"position":[[166,6],[206,6],[698,6],[735,6],[772,6],[813,6],[863,6]]},"1605":{"position":[[118,6]]},"1618":{"position":[[123,6],[169,6]]},"1620":{"position":[[208,6],[285,6],[322,6],[359,6],[392,6]]},"1624":{"position":[[0,6]]},"1631":{"position":[[0,6]]},"1649":{"position":[[0,6]]},"1651":{"position":[[557,6],[608,6]]},"1658":{"position":[[190,6]]},"1660":{"position":[[59,6]]},"1662":{"position":[[1004,6],[1041,6],[1078,6],[1114,6],[1180,6],[1284,7]]},"1671":{"position":[[361,6],[397,6]]},"1673":{"position":[[728,6],[760,6]]},"1684":{"position":[[226,6],[293,6],[328,6],[389,6],[450,6]]},"1686":{"position":[[1357,6],[1428,6]]},"1692":{"position":[[195,6],[349,6]]},"1703":{"position":[[51,6]]},"1705":{"position":[[1190,6],[1241,6],[1284,6],[1331,6]]},"1708":{"position":[[49,6]]},"1785":{"position":[[0,6],[130,6]]},"1805":{"position":[[81,6]]},"1812":{"position":[[126,6],[197,7],[271,6],[310,7],[378,6],[448,6]]},"1832":{"position":[[131,8]]},"1846":{"position":[[365,7]]},"1865":{"position":[[103,6]]},"1872":{"position":[[0,7]]},"1930":{"position":[[19,6]]},"1932":{"position":[[19,6]]}}}],["upgrad",{"_index":2428,"t":{"1485":{"position":[[365,7],[403,7]]},"1528":{"position":[[346,7]]},"1587":{"position":[[330,7],[368,7]]},"1607":{"position":[[0,7]]},"1662":{"position":[[1234,7]]},"1754":{"position":[[25,7]]},"1819":{"position":[[25,7]]},"1828":{"position":[[25,7]]}}}],["upload",{"_index":3463,"t":{"1728":{"position":[[303,9],[458,9]]}}}],["upon",{"_index":1860,"t":{"498":{"position":[[470,4]]}}}],["upper",{"_index":604,"t":{"91":{"position":[[3411,5],[3544,5]]},"436":{"position":[[134,5],[272,5]]},"614":{"position":[[401,5]]},"1801":{"position":[[312,5]]},"1815":{"position":[[286,5]]}}}],["uppercas",{"_index":540,"t":{"91":{"position":[[329,9],[5011,9]]},"1159":{"position":[[55,9]]},"1750":{"position":[[329,9]]}}}],["upstream",{"_index":1825,"t":{"489":{"position":[[1268,8]]},"496":{"position":[[441,8],[1040,8],[1799,8]]},"498":{"position":[[11,8]]},"500":{"position":[[554,8]]},"1094":{"position":[[173,8]]},"1096":{"position":[[960,8]]},"1119":{"position":[[544,8]]},"1407":{"position":[[186,8]]},"1450":{"position":[[332,8],[491,8]]},"1930":{"position":[[109,8]]},"1943":{"position":[[810,8]]},"1945":{"position":[[281,8],[305,8],[898,8],[989,8]]}}}],["upstream/downstream",{"_index":1758,"t":{"450":{"position":[[1529,19]]}}}],["upstream/main",{"_index":3747,"t":{"1945":{"position":[[1009,13]]}}}],["upstream_chok",{"_index":1748,"t":{"448":{"position":[[148,14]]},"479":{"position":[[181,15]]},"481":{"position":[[3033,15]]},"491":{"position":[[53,14]]},"500":{"position":[[726,15]]},"833":{"position":[[203,14]]},"835":{"position":[[174,14]]},"1096":{"position":[[816,14],[903,14]]},"1212":{"position":[[185,14]]},"1214":{"position":[[139,15]]},"1409":{"position":[[201,14]]},"1411":{"position":[[174,14]]},"1718":{"position":[[300,14]]}}}],["upstream_pressure_control",{"_index":1814,"t":{"485":{"position":[[1591,26]]},"493":{"position":[[545,26]]},"738":{"position":[[957,26]]},"740":{"position":[[652,26]]},"835":{"position":[[147,26]]},"1096":{"position":[[169,25],[769,26]]},"1277":{"position":[[1042,26]]},"1279":{"position":[[377,26]]},"1405":{"position":[[47,25]]},"1409":{"position":[[154,26]]},"1411":{"position":[[147,26]]}}}],["upstream_pressure_control/downstream_pressure_control",{"_index":1824,"t":{"489":{"position":[[1131,55]]}}}],["upward",{"_index":1632,"t":{"383":{"position":[[713,7]]}}}],["url",{"_index":3031,"t":{"1658":{"position":[[282,4]]},"1708":{"position":[[70,3]]}}}],["us",{"_index":7,"t":{"2":{"position":[[69,5]]},"7":{"position":[[139,3],[167,3],[330,3]]},"13":{"position":[[703,5],[907,4]]},"15":{"position":[[3,5]]},"17":{"position":[[3,3]]},"19":{"position":[[36,3],[173,3]]},"21":{"position":[[0,3]]},"45":{"position":[[6,4]]},"47":{"position":[[153,5],[341,5]]},"49":{"position":[[43,3],[117,3]]},"51":{"position":[[196,5],[382,3]]},"58":{"position":[[1018,4],[1450,4]]},"60":{"position":[[117,3]]},"64":{"position":[[816,5]]},"73":{"position":[[113,6]]},"75":{"position":[[1220,3]]},"91":{"position":[[210,4],[234,3],[271,3],[1690,5],[1818,4],[2305,5],[3619,4],[3643,3],[3797,4],[3997,4],[4056,4],[4215,4],[4274,4],[4431,4],[4488,4],[4668,4],[4741,4],[4849,4],[4953,3],[5176,3]]},"93":{"position":[[143,3],[308,4],[509,3],[751,3],[2109,5],[2180,3],[2604,4],[2715,3]]},"100":{"position":[[62,4]]},"107":{"position":[[397,5],[442,5],[548,4]]},"112":{"position":[[211,4]]},"117":{"position":[[57,4]]},"124":{"position":[[65,4]]},"137":{"position":[[30,3]]},"149":{"position":[[51,5],[82,4],[349,4]]},"153":{"position":[[1025,5],[1075,3]]},"161":{"position":[[749,4],[816,4],[2789,3],[2878,5],[3263,4],[3619,4],[3686,4]]},"163":{"position":[[1797,4],[1864,4],[2733,4],[2800,4]]},"173":{"position":[[51,5],[82,4],[349,4]]},"177":{"position":[[1025,5],[1075,3]]},"185":{"position":[[749,4],[816,4],[2789,3],[2878,5],[3263,4],[3619,4],[3686,4]]},"187":{"position":[[1797,4],[1864,4],[2733,4],[2800,4]]},"191":{"position":[[75,3]]},"197":{"position":[[51,5],[82,4]]},"199":{"position":[[80,4]]},"203":{"position":[[831,5],[885,3]]},"205":{"position":[[442,4],[516,4]]},"211":{"position":[[2873,4],[3266,3],[3355,5],[3773,3],[3862,5]]},"225":{"position":[[199,3],[453,5],[549,4],[585,5],[645,4],[712,5]]},"229":{"position":[[155,4]]},"231":{"position":[[27,4],[664,5],[717,4],[838,5],[946,4],[1065,4],[1293,5],[1796,5],[1821,3]]},"240":{"position":[[467,3],[611,4]]},"242":{"position":[[225,4],[460,5],[592,4],[991,5],[1076,4]]},"246":{"position":[[35,5]]},"250":{"position":[[359,5]]},"258":{"position":[[75,3]]},"264":{"position":[[51,5],[82,4]]},"266":{"position":[[80,4]]},"270":{"position":[[1198,5],[1252,3]]},"272":{"position":[[442,4],[516,4],[747,4]]},"278":{"position":[[2887,4],[3293,3],[3382,5],[3908,3],[3997,5]]},"287":{"position":[[1368,4]]},"291":{"position":[[154,4],[422,5]]},"304":{"position":[[848,3]]},"308":{"position":[[156,4]]},"317":{"position":[[81,5]]},"323":{"position":[[193,3]]},"325":{"position":[[382,4],[513,4],[980,4],[1039,4],[1153,4],[1187,4],[2265,5],[2371,4],[2448,4]]},"332":{"position":[[608,3]]},"334":{"position":[[91,5]]},"336":{"position":[[653,5]]},"343":{"position":[[158,5]]},"345":{"position":[[13,4]]},"347":{"position":[[151,4],[308,3]]},"351":{"position":[[118,4],[196,3]]},"361":{"position":[[115,5]]},"391":{"position":[[396,4]]},"403":{"position":[[227,3],[545,4]]},"408":{"position":[[186,3]]},"418":{"position":[[249,4]]},"424":{"position":[[1373,4],[1922,4],[1968,5]]},"428":{"position":[[24,4]]},"430":{"position":[[76,5]]},"436":{"position":[[104,5],[721,5],[832,4]]},"442":{"position":[[29,4],[71,4]]},"450":{"position":[[20,5],[354,5],[658,4]]},"456":{"position":[[174,4],[570,4]]},"462":{"position":[[477,3]]},"466":{"position":[[426,3],[945,4]]},"479":{"position":[[332,3],[1253,3]]},"481":{"position":[[441,5],[1334,5],[1504,5],[2895,3]]},"487":{"position":[[118,4],[627,4],[1265,4]]},"489":{"position":[[1553,4]]},"491":{"position":[[167,5]]},"496":{"position":[[315,5],[546,4]]},"502":{"position":[[1170,5]]},"513":{"position":[[969,5],[1068,4]]},"529":{"position":[[139,4]]},"537":{"position":[[185,5]]},"557":{"position":[[17,4],[81,4]]},"559":{"position":[[0,5],[286,5]]},"561":{"position":[[67,4]]},"563":{"position":[[657,4]]},"567":{"position":[[559,5],[2645,3],[2797,5],[2827,4],[3043,3],[3440,3],[3786,5],[3814,3],[4192,3]]},"570":{"position":[[167,3]]},"574":{"position":[[163,4]]},"578":{"position":[[97,5],[247,5],[517,5],[605,4],[736,3],[798,3]]},"582":{"position":[[442,6],[585,5]]},"584":{"position":[[25,5]]},"586":{"position":[[199,4]]},"590":{"position":[[409,4]]},"598":{"position":[[44,4]]},"606":{"position":[[696,3]]},"608":{"position":[[517,3]]},"614":{"position":[[24,4],[1025,5]]},"648":{"position":[[116,4],[149,5],[173,3]]},"656":{"position":[[18,4]]},"664":{"position":[[0,4]]},"679":{"position":[[103,5],[296,3]]},"687":{"position":[[75,4]]},"701":{"position":[[28,4]]},"717":{"position":[[981,4]]},"725":{"position":[[604,4]]},"744":{"position":[[1088,3]]},"757":{"position":[[5,5],[247,5],[277,5],[321,5]]},"771":{"position":[[5,5],[252,5],[344,5],[389,5]]},"784":{"position":[[299,3]]},"794":{"position":[[0,4],[100,5]]},"801":{"position":[[32,4],[157,4]]},"821":{"position":[[347,3]]},"831":{"position":[[16,4],[105,4]]},"839":{"position":[[0,4],[62,5]]},"845":{"position":[[371,3]]},"847":{"position":[[104,4]]},"855":{"position":[[12,4],[82,3]]},"874":{"position":[[300,5]]},"876":{"position":[[99,4]]},"884":{"position":[[100,4]]},"897":{"position":[[87,4]]},"913":{"position":[[37,5]]},"931":{"position":[[150,4],[385,5]]},"933":{"position":[[35,5]]},"937":{"position":[[26,4],[78,4],[300,5]]},"941":{"position":[[72,4]]},"960":{"position":[[0,4]]},"982":{"position":[[51,4],[134,4]]},"990":{"position":[[81,4],[238,3]]},"1001":{"position":[[0,4]]},"1009":{"position":[[198,4]]},"1041":{"position":[[26,4],[149,4]]},"1052":{"position":[[8,3],[80,4]]},"1054":{"position":[[43,3]]},"1056":{"position":[[16,4]]},"1058":{"position":[[16,4]]},"1060":{"position":[[16,4]]},"1072":{"position":[[18,4]]},"1084":{"position":[[255,5]]},"1094":{"position":[[119,4]]},"1096":{"position":[[78,4]]},"1102":{"position":[[0,4]]},"1119":{"position":[[692,5]]},"1133":{"position":[[98,4]]},"1137":{"position":[[447,3]]},"1141":{"position":[[53,4],[267,3]]},"1149":{"position":[[36,4]]},"1153":{"position":[[289,4]]},"1167":{"position":[[0,4],[218,5],[557,4],[814,4],[895,4],[1024,4]]},"1169":{"position":[[89,3]]},"1171":{"position":[[99,5],[168,3]]},"1173":{"position":[[91,3],[183,3]]},"1175":{"position":[[93,3],[189,3]]},"1177":{"position":[[171,5],[230,3],[379,3]]},"1179":{"position":[[1081,3]]},"1212":{"position":[[278,3]]},"1220":{"position":[[18,4]]},"1228":{"position":[[12,4],[32,4],[90,5],[110,4],[184,4]]},"1242":{"position":[[0,4]]},"1252":{"position":[[0,4],[136,5]]},"1259":{"position":[[99,5],[176,3]]},"1267":{"position":[[16,4]]},"1271":{"position":[[252,5],[337,5]]},"1275":{"position":[[142,5],[227,5],[316,4],[897,4]]},"1283":{"position":[[197,5]]},"1291":{"position":[[1146,5],[1256,4],[1356,4]]},"1293":{"position":[[437,3]]},"1304":{"position":[[89,3]]},"1308":{"position":[[121,4],[160,4]]},"1316":{"position":[[233,4]]},"1324":{"position":[[0,4],[98,5],[156,5],[183,4]]},"1342":{"position":[[0,4]]},"1364":{"position":[[117,5]]},"1379":{"position":[[5,5]]},"1407":{"position":[[16,4],[105,4]]},"1415":{"position":[[16,4],[54,4],[92,3],[203,5]]},"1417":{"position":[[761,3]]},"1431":{"position":[[211,5]]},"1443":{"position":[[17,4]]},"1450":{"position":[[236,4],[1240,4]]},"1452":{"position":[[135,4]]},"1454":{"position":[[308,3]]},"1458":{"position":[[696,3],[893,5]]},"1462":{"position":[[232,5]]},"1466":{"position":[[46,3]]},"1474":{"position":[[6,3],[537,3]]},"1487":{"position":[[81,5]]},"1526":{"position":[[440,3]]},"1536":{"position":[[57,4]]},"1540":{"position":[[405,3]]},"1572":{"position":[[182,3]]},"1592":{"position":[[1101,3],[1135,3],[1191,5]]},"1596":{"position":[[240,3],[890,3]]},"1622":{"position":[[52,3]]},"1653":{"position":[[541,3],[595,3]]},"1658":{"position":[[252,3]]},"1662":{"position":[[1145,3]]},"1664":{"position":[[542,3]]},"1669":{"position":[[1011,3]]},"1675":{"position":[[899,3],[943,3],[994,3]]},"1686":{"position":[[1050,5],[1331,3]]},"1688":{"position":[[251,4],[407,3]]},"1697":{"position":[[109,3]]},"1713":{"position":[[1991,3],[2236,5],[2273,3]]},"1715":{"position":[[186,5]]},"1725":{"position":[[547,5],[637,3],[1198,5],[1311,5]]},"1732":{"position":[[221,3]]},"1735":{"position":[[1029,4],[1073,3],[1868,5],[2081,3]]},"1737":{"position":[[44,4],[386,3],[411,3],[469,4],[783,5]]},"1744":{"position":[[343,4]]},"1750":{"position":[[210,4],[234,3],[271,3]]},"1752":{"position":[[49,3],[214,4]]},"1787":{"position":[[554,4]]},"1799":{"position":[[57,4]]},"1801":{"position":[[305,3]]},"1803":{"position":[[761,3]]},"1815":{"position":[[279,3]]},"1817":{"position":[[151,5]]},"1821":{"position":[[58,3],[255,5]]},"1823":{"position":[[124,5]]},"1846":{"position":[[429,5]]},"1855":{"position":[[189,4]]},"1869":{"position":[[73,5],[245,5]]},"1876":{"position":[[71,5]]},"1878":{"position":[[123,5],[416,3],[503,3],[720,4]]},"1880":{"position":[[34,3]]},"1882":{"position":[[271,4],[409,3]]},"1884":{"position":[[49,5],[115,5],[160,5]]},"1898":{"position":[[126,3],[181,3]]},"1904":{"position":[[3,3]]},"1906":{"position":[[101,3],[260,3]]},"1908":{"position":[[734,4]]},"1910":{"position":[[11,4]]},"1914":{"position":[[14,3],[1218,5]]},"1916":{"position":[[280,3]]},"1920":{"position":[[35,4],[220,4],[305,3]]},"1926":{"position":[[155,3]]},"1932":{"position":[[176,5]]},"1940":{"position":[[50,3]]},"1943":{"position":[[442,5]]},"1945":{"position":[[725,5],[1406,3]]}}}],["usabl",{"_index":3496,"t":{"1742":{"position":[[89,10]]}}}],["usag",{"_index":204,"t":{"23":{"position":[[156,6]]},"25":{"position":[[0,6],[1419,6]]},"27":{"position":[[48,6]]},"29":{"position":[[53,6]]},"31":{"position":[[68,6],[485,5]]},"33":{"position":[[68,6]]},"161":{"position":[[312,5]]},"185":{"position":[[312,5]]},"191":{"position":[[103,5]]},"201":{"position":[[43,5]]},"258":{"position":[[103,5]]},"268":{"position":[[43,5]]},"285":{"position":[[261,5]]},"287":{"position":[[7,5],[92,6]]},"291":{"position":[[380,5]]},"304":{"position":[[257,5],[438,6],[505,5],[627,5],[781,5],[795,5],[974,6]]},"308":{"position":[[414,5]]},"325":{"position":[[541,5]]},"336":{"position":[[792,5]]},"351":{"position":[[587,5]]},"355":{"position":[[371,5]]},"367":{"position":[[12,5]]},"389":{"position":[[18,5],[56,5],[205,5],[417,5]]},"401":{"position":[[111,6]]},"403":{"position":[[51,6]]},"410":{"position":[[269,5]]},"424":{"position":[[911,5]]},"450":{"position":[[75,5]]},"477":{"position":[[492,5]]},"489":{"position":[[181,5]]},"500":{"position":[[396,5]]},"513":{"position":[[24,5]]},"537":{"position":[[286,5],[884,5]]},"543":{"position":[[236,6]]},"567":{"position":[[2766,5]]},"590":{"position":[[86,5],[151,6],[270,5],[498,5]]},"627":{"position":[[156,6]]},"629":{"position":[[34,6],[1453,6]]},"631":{"position":[[48,6]]},"633":{"position":[[53,6]]},"635":{"position":[[68,6],[485,5]]},"637":{"position":[[68,6]]},"648":{"position":[[76,5]]},"679":{"position":[[11,5]]},"711":{"position":[[84,5]]},"713":{"position":[[91,5],[193,5],[295,5]]},"717":{"position":[[253,5]]},"827":{"position":[[0,5]]},"860":{"position":[[64,5]]},"884":{"position":[[11,5],[66,5],[226,6],[252,5],[391,5],[678,5],[712,5]]},"897":{"position":[[103,5],[187,5],[216,5]]},"899":{"position":[[34,5]]},"933":{"position":[[464,6]]},"960":{"position":[[54,5]]},"990":{"position":[[391,6]]},"1011":{"position":[[88,5]]},"1013":{"position":[[106,5],[194,5],[313,5]]},"1030":{"position":[[509,6]]},"1080":{"position":[[439,6]]},"1163":{"position":[[0,5],[43,5]]},"1177":{"position":[[26,5],[263,5]]},"1242":{"position":[[55,5]]},"1291":{"position":[[34,5]]},"1293":{"position":[[39,5],[103,5]]},"1338":{"position":[[320,6]]},"1458":{"position":[[476,5]]},"1524":{"position":[[6,5]]},"1542":{"position":[[309,5]]},"1592":{"position":[[279,5]]},"1596":{"position":[[537,5]]},"1662":{"position":[[343,5]]},"1686":{"position":[[342,5]]},"1705":{"position":[[975,5]]},"1713":{"position":[[57,5],[809,5]]},"1723":{"position":[[93,5]]},"1725":{"position":[[1338,5]]},"1737":{"position":[[889,5]]},"1767":{"position":[[200,6]]},"1790":{"position":[[88,5]]},"1793":{"position":[[872,5],[1033,5]]},"1803":{"position":[[954,5]]}}}],["usage/emiss",{"_index":2093,"t":{"614":{"position":[[1079,15]]}}}],["used,th",{"_index":2126,"t":{"717":{"position":[[187,8]]}}}],["user",{"_index":26,"t":{"7":{"position":[[69,5]]},"17":{"position":[[176,4]]},"60":{"position":[[217,5],[339,4]]},"62":{"position":[[257,5]]},"73":{"position":[[229,5]]},"84":{"position":[[394,5],[510,4]]},"93":{"position":[[1386,4],[2629,6],[2697,4]]},"133":{"position":[[907,4]]},"135":{"position":[[109,4]]},"325":{"position":[[40,4]]},"336":{"position":[[180,4]]},"343":{"position":[[56,4]]},"410":{"position":[[50,4],[127,4]]},"460":{"position":[[424,4]]},"477":{"position":[[768,4]]},"481":{"position":[[556,4]]},"504":{"position":[[446,5]]},"513":{"position":[[641,4]]},"537":{"position":[[776,4]]},"580":{"position":[[175,4]]},"1291":{"position":[[1331,4]]},"1662":{"position":[[1321,4]]},"1723":{"position":[[1510,4]]},"1735":{"position":[[422,5]]},"1793":{"position":[[810,5]]},"1839":{"position":[[529,5]]}}}],["user.email",{"_index":3727,"t":{"1924":{"position":[[60,10]]}}}],["user.nam",{"_index":3726,"t":{"1924":{"position":[[20,9]]}}}],["usual",{"_index":1348,"t":{"248":{"position":[[200,7]]},"812":{"position":[[249,7]]}}}],["utf",{"_index":354,"t":{"45":{"position":[[202,4]]},"47":{"position":[[206,4],[225,3]]}}}],["util",{"_index":3390,"t":{"1705":{"position":[[22,5]]}}}],["utilis",{"_index":1222,"t":{"223":{"position":[[382,9]]},"225":{"position":[[288,9]]},"231":{"position":[[191,7]]},"353":{"position":[[38,7]]},"450":{"position":[[1726,8]]},"580":{"position":[[1061,8]]},"897":{"position":[[148,9]]},"1094":{"position":[[25,8]]},"1259":{"position":[[520,8]]},"1306":{"position":[[101,8]]},"1308":{"position":[[25,8]]},"1316":{"position":[[25,8]]}}}],["v1",{"_index":2878,"t":{"1616":{"position":[[85,2]]},"1699":{"position":[[24,2]]}}}],["v2",{"_index":1399,"t":{"280":{"position":[[39,3]]},"1544":{"position":[[62,2]]},"1592":{"position":[[667,2]]},"1594":{"position":[[225,2]]},"1620":{"position":[[265,2]]},"1645":{"position":[[134,2]]},"1653":{"position":[[225,2],[496,2]]},"1656":{"position":[[27,2],[76,2]]},"1658":{"position":[[80,2]]},"1662":{"position":[[1128,2]]},"1664":{"position":[[152,2],[428,2]]},"1667":{"position":[[163,2],[232,2]]},"1669":{"position":[[11,2],[68,2],[267,2],[421,2],[510,2],[557,2],[803,2],[987,2],[1082,2]]},"1675":{"position":[[714,2],[839,2],[886,2]]},"1688":{"position":[[16,2]]},"1695":{"position":[[53,2]]},"1699":{"position":[[30,2]]},"1705":{"position":[[58,2],[536,2]]},"1715":{"position":[[80,2]]}}}],["v3",{"_index":2811,"t":{"1596":{"position":[[187,2]]},"1715":{"position":[[23,2]]}}}],["v5.3.1",{"_index":777,"t":{"137":{"position":[[275,6]]}}}],["v7",{"_index":534,"t":{"89":{"position":[[76,2]]}}}],["v7.1",{"_index":2096,"t":{"614":{"position":[[1282,4],[1325,4],[1407,4],[1500,4]]}}}],["v7.2",{"_index":2095,"t":{"614":{"position":[[1183,5]]},"1054":{"position":[[129,5]]}}}],["v7.4.1",{"_index":3457,"t":{"1725":{"position":[[1011,6]]}}}],["v7.4.2",{"_index":3459,"t":{"1725":{"position":[[1161,6],[1280,6]]}}}],["v7.4.3",{"_index":3461,"t":{"1725":{"position":[[1465,7]]}}}],["v8",{"_index":384,"t":{"56":{"position":[[76,2]]},"89":{"position":[[82,3]]},"93":{"position":[[606,2]]},"1742":{"position":[[7,2]]}}}],["v8.0",{"_index":2097,"t":{"614":{"position":[[1581,4],[1662,4]]},"1754":{"position":[[38,5]]}}}],["v8.1",{"_index":385,"t":{"56":{"position":[[82,5]]},"529":{"position":[[151,4]]},"614":{"position":[[1780,4]]},"1082":{"position":[[40,5]]},"1754":{"position":[[7,4]]},"1819":{"position":[[38,5]]}}}],["v8.12",{"_index":3508,"t":{"1793":{"position":[[846,6]]}}}],["v8.13",{"_index":2281,"t":{"1234":{"position":[[137,7],[308,7]]},"1417":{"position":[[46,6]]},"1441":{"position":[[23,6]]}}}],["v8.14",{"_index":3509,"t":{"1793":{"position":[[955,5]]}}}],["v8.16",{"_index":3513,"t":{"1808":{"position":[[282,7]]}}}],["v8.2",{"_index":2098,"t":{"614":{"position":[[1838,4],[1901,4]]},"1819":{"position":[[7,4]]},"1828":{"position":[[38,5]]}}}],["v8.22",{"_index":697,"t":{"122":{"position":[[76,5]]}}}],["v8.23",{"_index":698,"t":{"122":{"position":[[85,6]]}}}],["v8.3",{"_index":3170,"t":{"1671":{"position":[[382,4]]},"1828":{"position":[[7,4]]}}}],["v8.4",{"_index":2671,"t":{"1563":{"position":[[144,4]]},"1660":{"position":[[97,4]]},"1671":{"position":[[145,4]]},"1785":{"position":[[171,4]]}}}],["v8.6",{"_index":2980,"t":{"1651":{"position":[[578,4],[636,4]]}}}],["v8.7",{"_index":2150,"t":{"784":{"position":[[22,4]]},"1585":{"position":[[120,4]]}}}],["v8.8",{"_index":2162,"t":{"821":{"position":[[22,4]]},"837":{"position":[[22,4]]},"845":{"position":[[22,4]]},"874":{"position":[[23,5]]},"1228":{"position":[[178,5]]},"1618":{"position":[[139,4]]},"1771":{"position":[[231,5]]}}}],["v_\\mathrm{1}^n",{"_index":2008,"t":{"567":{"position":[[1176,14]]}}}],["v_\\mathrm{2}^np1​v1n​=p2​v2n",{"_index":2010,"t":{"567":{"position":[[1206,30]]}}}],["valid",{"_index":401,"t":{"58":{"position":[[403,5]]},"91":{"position":[[961,6],[1042,5],[5111,5]]},"107":{"position":[[882,5],[1358,5]]},"129":{"position":[[459,5]]},"133":{"position":[[113,5]]},"135":{"position":[[65,8],[85,8],[159,6],[312,6],[575,8],[1116,8],[1229,8]]},"211":{"position":[[899,5]]},"278":{"position":[[938,5]]},"580":{"position":[[69,5],[122,6],[262,8],[432,10]]},"614":{"position":[[238,5]]},"744":{"position":[[204,5],[443,6]]},"905":{"position":[[769,5]]},"921":{"position":[[13,5]]},"1084":{"position":[[13,5],[727,5]]},"1179":{"position":[[197,5],[436,6]]},"1234":{"position":[[240,5]]},"1283":{"position":[[734,5]]},"1452":{"position":[[279,5]]},"1454":{"position":[[44,11]]},"1474":{"position":[[401,10]]},"1477":{"position":[[0,10]]},"1479":{"position":[[0,8]]},"1515":{"position":[[0,8]]},"1528":{"position":[[10,10]]},"1540":{"position":[[462,10]]},"1565":{"position":[[121,5]]},"1572":{"position":[[251,10]]},"1581":{"position":[[26,10],[87,10],[128,8]]},"1583":{"position":[[39,10]]},"1592":{"position":[[971,9],[1180,10]]},"1600":{"position":[[18,10]]},"1651":{"position":[[456,5]]},"1653":{"position":[[26,10]]},"1658":{"position":[[203,10]]},"1664":{"position":[[227,8],[292,8]]},"1673":{"position":[[173,10]]},"1682":{"position":[[36,10],[798,5],[829,10],[901,5],[917,8]]},"1686":{"position":[[462,10]]},"1705":{"position":[[235,5]]},"1723":{"position":[[1625,9]]},"1725":{"position":[[233,5],[577,5]]},"1728":{"position":[[256,5]]},"1730":{"position":[[395,8],[488,10]]},"1732":{"position":[[11,10],[60,10],[138,10]]},"1785":{"position":[[51,5]]},"1803":{"position":[[818,10],[892,11]]},"1810":{"position":[[157,5]]},"1865":{"position":[[294,5]]}}}],["valu",{"_index":244,"t":{"25":{"position":[[534,6],[1018,8],[1191,8]]},"31":{"position":[[1031,6]]},"39":{"position":[[99,6]]},"43":{"position":[[73,6]]},"93":{"position":[[2019,7]]},"107":{"position":[[763,6],[1092,6],[1237,6],[1529,6],[2016,6],[2071,6]]},"112":{"position":[[613,6],[666,6]]},"117":{"position":[[185,6],[247,6]]},"129":{"position":[[221,5],[616,6],[888,6]]},"153":{"position":[[80,6],[344,6],[479,6],[684,6],[736,6],[810,6],[896,6],[955,6],[980,6],[1246,7]]},"161":{"position":[[2831,5]]},"163":{"position":[[655,6],[790,6],[995,6],[1047,6],[1121,6],[1207,6],[1266,6],[1291,6]]},"177":{"position":[[80,6],[344,6],[479,6],[684,6],[736,6],[810,6],[896,6],[955,6],[980,6],[1246,7]]},"185":{"position":[[2831,5]]},"187":{"position":[[655,6],[790,6],[995,6],[1047,6],[1121,6],[1207,6],[1266,6],[1291,6]]},"203":{"position":[[80,6],[344,6],[419,6],[461,6],[504,6],[553,6],[622,6],[686,6],[710,6],[761,6],[786,6]]},"211":{"position":[[3308,5],[3815,5]]},"213":{"position":[[1830,6],[1905,6],[1947,6],[1990,6],[2039,6],[2108,6],[2172,6],[2196,6],[2247,6],[2272,6]]},"225":{"position":[[511,5],[569,5]]},"229":{"position":[[202,6]]},"231":{"position":[[1984,6]]},"270":{"position":[[80,6],[344,6],[419,6],[461,6],[504,6],[553,6],[622,6],[686,6],[710,6],[761,6],[786,6],[803,6],[827,6],[852,6],[918,6],[985,6],[1042,6],[1109,6]]},"278":{"position":[[3335,5],[3950,5]]},"280":{"position":[[2421,6],[2496,6],[2538,6],[2581,6],[2630,6],[2699,6],[2763,6],[2787,6],[2838,6],[2863,6],[2880,6],[2904,6],[2929,6],[2995,6],[3062,6],[3119,6],[3186,6]]},"287":{"position":[[1065,6],[1175,6]]},"291":{"position":[[109,6]]},"317":{"position":[[383,6]]},"328":{"position":[[149,6]]},"336":{"position":[[663,6]]},"432":{"position":[[368,6],[428,6],[500,6]]},"438":{"position":[[371,6],[431,6],[503,6],[600,6],[660,6],[732,6]]},"450":{"position":[[1414,6]]},"456":{"position":[[450,6]]},"458":{"position":[[366,5]]},"481":{"position":[[1994,5],[2407,5]]},"485":{"position":[[900,5],[1402,5],[1854,5]]},"487":{"position":[[1183,6],[1215,5]]},"509":{"position":[[233,6]]},"511":{"position":[[333,6]]},"531":{"position":[[434,6]]},"537":{"position":[[27,6],[106,5],[200,6],[241,6],[701,6],[839,7],[856,6],[922,5]]},"539":{"position":[[84,5],[131,6],[194,7]]},"553":{"position":[[28,6],[117,6]]},"555":{"position":[[33,6],[117,6],[152,6]]},"559":{"position":[[67,6],[94,6],[365,6],[411,6]]},"567":{"position":[[2211,6]]},"580":{"position":[[705,5],[1048,5]]},"592":{"position":[[28,7],[52,7]]},"600":{"position":[[27,6]]},"606":{"position":[[56,5]]},"629":{"position":[[568,6],[1052,8],[1225,8]]},"635":{"position":[[1031,6]]},"703":{"position":[[10,7]]},"728":{"position":[[367,5]]},"733":{"position":[[369,5]]},"738":{"position":[[768,5]]},"744":{"position":[[873,6]]},"752":{"position":[[369,5]]},"759":{"position":[[174,6],[234,6],[306,6]]},"773":{"position":[[177,6],[237,6],[309,6],[406,6],[466,6],[538,6]]},"801":{"position":[[265,6],[346,6],[424,7]]},"804":{"position":[[179,7]]},"866":{"position":[[29,6],[90,6]]},"878":{"position":[[40,6]]},"880":{"position":[[28,6]]},"921":{"position":[[264,5]]},"941":{"position":[[9,5]]},"943":{"position":[[8,7]]},"962":{"position":[[30,5]]},"1034":{"position":[[58,6],[167,6],[403,6],[429,6],[485,6],[571,6]]},"1041":{"position":[[251,6],[326,6],[410,7]]},"1052":{"position":[[88,5],[104,5],[127,5]]},"1058":{"position":[[49,5],[65,5]]},"1060":{"position":[[43,5],[59,5]]},"1072":{"position":[[283,6]]},"1084":{"position":[[1048,7],[1250,7]]},"1098":{"position":[[139,5],[216,5]]},"1109":{"position":[[154,5]]},"1111":{"position":[[88,5]]},"1119":{"position":[[248,6],[525,5]]},"1127":{"position":[[37,6]]},"1179":{"position":[[866,6]]},"1189":{"position":[[262,6]]},"1199":{"position":[[79,6]]},"1220":{"position":[[211,5],[304,6]]},"1234":{"position":[[13,5],[153,6],[329,5]]},"1236":{"position":[[125,6]]},"1238":{"position":[[128,6]]},"1277":{"position":[[351,5],[853,5]]},"1324":{"position":[[112,5],[289,6]]},"1336":{"position":[[326,5]]},"1349":{"position":[[186,7]]},"1351":{"position":[[82,6]]},"1356":{"position":[[182,7]]},"1358":{"position":[[94,7]]},"1381":{"position":[[84,5],[131,6],[194,7]]},"1401":{"position":[[47,6],[242,6]]},"1403":{"position":[[28,6]]},"1435":{"position":[[128,6],[189,6]]},"1439":{"position":[[108,6]]},"1445":{"position":[[14,6]]},"1447":{"position":[[14,6]]},"1508":{"position":[[66,5]]},"1540":{"position":[[381,6]]},"1647":{"position":[[200,6]]},"1651":{"position":[[379,6]]},"1705":{"position":[[170,6]]},"1713":{"position":[[1968,6]]},"1728":{"position":[[262,5]]},"1793":{"position":[[857,6]]},"1803":{"position":[[634,7],[649,6]]},"1920":{"position":[[368,7]]}}}],["value/express",{"_index":2242,"t":{"1098":{"position":[[428,17]]},"1326":{"position":[[36,17]]}}}],["valueerror",{"_index":2250,"t":{"1119":{"position":[[257,10]]}}}],["valv",{"_index":1420,"t":{"287":{"position":[[558,7]]},"304":{"position":[[1471,6]]},"442":{"position":[[525,6]]},"500":{"position":[[548,5]]},"502":{"position":[[1191,6]]},"567":{"position":[[3803,7]]}}}],["valve)/recircul",{"_index":1461,"t":{"304":{"position":[[1450,20]]}}}],["var",{"_index":2564,"t":{"1533":{"position":[[302,4]]}}}],["var.base_production_load_mw",{"_index":1092,"t":{"211":{"position":[[308,28]]},"213":{"position":[[2606,28]]},"278":{"position":[[309,28]]},"280":{"position":[[3564,28]]}}}],["var.flare_a_fuel_rate_sm3_day",{"_index":1122,"t":{"211":{"position":[[3495,30]]},"213":{"position":[[4149,30]]},"278":{"position":[[3522,30]]},"280":{"position":[[5150,30]]}}}],["var.flare_b_fuel_rate_sm3_day",{"_index":1123,"t":{"211":{"position":[[4002,30]]},"213":{"position":[[4585,30]]},"278":{"position":[[4137,30]]},"280":{"position":[[5694,30]]}}}],["var.flare_fuel_rate_sm3_day",{"_index":907,"t":{"161":{"position":[[3036,28]]},"163":{"position":[[2492,28]]},"185":{"position":[[3036,28]]},"187":{"position":[[2492,28]]}}}],["var.gas_export_condit",{"_index":1125,"t":{"211":{"position":[[4448,25]]},"213":{"position":[[4741,25]]}}}],["var.gas_export_rate_sm3_per_day",{"_index":910,"t":{"161":{"position":[[3560,32]]},"163":{"position":[[2674,32]]},"185":{"position":[[3560,32]]},"187":{"position":[[2674,32]]},"211":{"position":[[1290,32],[4480,32]]},"213":{"position":[[2910,32],[4773,32]]},"270":{"position":[[859,32],[925,32]]},"280":{"position":[[2936,32],[3002,32]]}}}],["var.gas_injection_rate_sm3_per_day",{"_index":885,"t":{"161":{"position":[[687,35]]},"163":{"position":[[1735,35]]},"185":{"position":[[687,35]]},"187":{"position":[[1735,35]]}}}],["var.gas_ratea",{"_index":1985,"t":{"559":{"position":[[248,14]]}}}],["var.gas_rateb",{"_index":1986,"t":{"559":{"position":[[267,14]]}}}],["var.gasratea_cd",{"_index":1390,"t":{"278":{"position":[[1328,16]]},"280":{"position":[[3922,16]]}}}],["var.gasrateb_cd",{"_index":1396,"t":{"278":{"position":[[4848,16]]},"280":{"position":[[6131,16]]}}}],["var.hcexpa_cd",{"_index":1387,"t":{"272":{"position":[[865,14]]},"274":{"position":[[408,14]]},"280":{"position":[[3290,14]]}}}],["var.hcexpb_cd",{"_index":1388,"t":{"272":{"position":[[1023,14]]},"276":{"position":[[351,14]]},"280":{"position":[[5268,14]]}}}],["var.hydrocarbon_export_sm3_per_day",{"_index":881,"t":{"155":{"position":[[429,35]]},"163":{"position":[[1351,35]]},"179":{"position":[[429,35]]},"187":{"position":[[1351,35]]},"205":{"position":[[298,35],[631,35],[789,35]]},"207":{"position":[[415,35]]},"209":{"position":[[351,35]]},"213":{"position":[[2332,35],[4213,35]]},"270":{"position":[[1049,35],[1116,35]]},"272":{"position":[[298,35]]},"280":{"position":[[3126,35],[3193,35]]}}}],["var.pea",{"_index":1377,"t":{"270":{"position":[[896,8],[1022,8],[1089,8]]},"272":{"position":[[619,8],[923,8]]},"274":{"position":[[466,8]]},"278":{"position":[[3125,8]]},"280":{"position":[[2973,8],[3099,8],[3166,8],[3348,8],[4987,8]]}}}],["var.peb",{"_index":1379,"t":{"270":{"position":[[962,8],[1156,8]]},"272":{"position":[[1085,8]]},"276":{"position":[[413,8]]},"280":{"position":[[3039,8],[3233,8],[5330,8]]}}}],["var.produced_water_reinjection_condit",{"_index":892,"t":{"161":{"position":[[1425,41]]},"163":{"position":[[1999,41]]},"185":{"position":[[1425,41]]},"187":{"position":[[1999,41]]}}}],["var.produced_water_reinjection_total_system_rate_m3_per_day",{"_index":893,"t":{"161":{"position":[[1500,60]]},"163":{"position":[[2074,60]]},"185":{"position":[[1500,60]]},"187":{"position":[[2074,60]]}}}],["var.salt_water_inject",{"_index":1988,"t":{"559":{"position":[[418,25]]},"1713":{"position":[[2030,25],[2086,26]]}}}],["var.sea_water_injection_rate_m3_per_day",{"_index":877,"t":{"153":{"position":[[1280,40]]},"161":{"position":[[2676,40]]},"163":{"position":[[2363,40]]},"177":{"position":[[1280,40]]},"185":{"position":[[2676,40]]},"187":{"position":[[2363,40]]}}}],["var.variable_name1",{"_index":2196,"t":{"917":{"position":[[185,19]]}}}],["var.variable_name2",{"_index":2197,"t":{"917":{"position":[[209,19]]}}}],["var.water_injection_condit",{"_index":1116,"t":{"211":{"position":[[2325,30],[3038,30]]},"213":{"position":[[3415,30],[3926,30]]},"278":{"position":[[2339,30],[3052,30]]},"280":{"position":[[4403,30],[4914,30]]}}}],["var.water_injection_r",{"_index":1115,"t":{"211":{"position":[[2288,25]]},"213":{"position":[[3378,25]]},"270":{"position":[[992,25]]},"280":{"position":[[3069,25]]}}}],["var.winjratea_cd",{"_index":1391,"t":{"278":{"position":[[2310,17]]},"280":{"position":[[4374,17]]}}}],["vari",{"_index":1020,"t":{"191":{"position":[[622,7]]},"203":{"position":[[957,7]]},"258":{"position":[[622,7]]},"270":{"position":[[1324,7]]},"336":{"position":[[63,4]]},"345":{"position":[[134,6]]},"477":{"position":[[265,7],[303,5]]},"500":{"position":[[66,6]]},"527":{"position":[[829,7]]},"614":{"position":[[590,4]]},"986":{"position":[[40,7]]},"1005":{"position":[[91,7]]},"1177":{"position":[[452,4]]},"1324":{"position":[[233,4]]},"1332":{"position":[[743,7]]}}}],["variabl",{"_index":801,"t":{"143":{"position":[[346,8],[501,8],[619,8],[812,8],[1086,8]]},"145":{"position":[[162,9],[174,9],[354,10]]},"147":{"position":[[14,10],[164,9]]},"153":{"position":[[46,10],[200,8],[279,10],[301,10],[1321,8]]},"155":{"position":[[289,8],[314,9]]},"161":{"position":[[471,8],[889,8],[1004,8],[1097,9],[2422,8],[2640,10],[2888,8],[3080,8],[3187,8]]},"163":{"position":[[612,10],[2327,10]]},"167":{"position":[[346,8],[501,8],[619,8],[812,8],[1086,8]]},"169":{"position":[[162,9],[174,9],[354,10]]},"171":{"position":[[14,10],[164,9]]},"177":{"position":[[46,10],[200,8],[279,10],[301,10],[1321,8]]},"179":{"position":[[289,8],[314,9]]},"185":{"position":[[471,8],[889,8],[1004,8],[1097,9],[2422,8],[2640,10],[2888,8],[3080,8],[3187,8]]},"187":{"position":[[612,10],[2327,10]]},"191":{"position":[[506,8],[701,8],[799,8],[994,8],[1167,8],[1341,8]]},"193":{"position":[[192,9],[204,9],[384,10]]},"195":{"position":[[14,10],[164,9]]},"203":{"position":[[46,10],[200,8],[279,10],[301,10],[965,9]]},"205":{"position":[[289,8],[350,9]]},"211":{"position":[[474,8],[1526,8],[1639,8],[1715,9],[3365,8],[3872,8],[4067,8],[4179,8]]},"213":{"position":[[1787,10]]},"217":{"position":[[249,8],[400,8],[547,8]]},"221":{"position":[[14,10]]},"231":{"position":[[498,8]]},"240":{"position":[[187,10],[649,9],[668,9],[1089,10]]},"242":{"position":[[839,8],[908,9]]},"258":{"position":[[506,8],[701,8],[799,8],[994,8],[1167,8],[1341,8]]},"260":{"position":[[192,9],[204,9],[384,10]]},"262":{"position":[[14,10],[164,9]]},"270":{"position":[[46,10],[200,8],[279,10],[301,10],[1332,9]]},"272":{"position":[[289,8],[350,9],[610,8],[644,9]]},"278":{"position":[[529,8],[1548,8],[1661,8],[1737,9],[3392,8],[4007,8],[4256,8],[4368,8]]},"280":{"position":[[93,9],[2378,10]]},"285":{"position":[[35,8]]},"287":{"position":[[201,8],[443,8]]},"291":{"position":[[455,8]]},"296":{"position":[[20,8]]},"304":{"position":[[1170,10]]},"317":{"position":[[426,9],[453,8]]},"319":{"position":[[105,8],[186,9]]},"321":{"position":[[485,10],[624,8],[649,9],[1733,10]]},"325":{"position":[[743,10],[1142,10],[1171,9]]},"328":{"position":[[122,10]]},"334":{"position":[[46,9],[171,9],[365,9]]},"343":{"position":[[87,10]]},"361":{"position":[[201,8],[240,8]]},"367":{"position":[[63,8]]},"369":{"position":[[200,8]]},"410":{"position":[[81,10],[164,8]]},"412":{"position":[[152,10],[180,9],[227,9]]},"414":{"position":[[88,10]]},"416":{"position":[[165,10]]},"424":{"position":[[35,8],[1419,8],[1624,8],[2036,8]]},"426":{"position":[[145,8],[194,8],[232,8]]},"428":{"position":[[172,8]]},"436":{"position":[[4,8],[666,8],[729,8]]},"440":{"position":[[620,8],[702,8]]},"446":{"position":[[306,8]]},"456":{"position":[[6,8],[724,8],[765,8]]},"460":{"position":[[15,8]]},"481":{"position":[[569,8],[671,8],[824,8]]},"487":{"position":[[1347,8]]},"504":{"position":[[4,9],[53,8],[466,9],[624,9],[695,9]]},"509":{"position":[[191,10]]},"511":{"position":[[316,10]]},"527":{"position":[[137,10],[162,11],[335,10],[609,10],[804,9]]},"533":{"position":[[106,9]]},"535":{"position":[[183,8]]},"549":{"position":[[9,9]]},"551":{"position":[[0,9]]},"553":{"position":[[0,10],[11,9],[64,10],[75,9]]},"555":{"position":[[0,10],[72,10]]},"557":{"position":[[0,9],[108,10]]},"559":{"position":[[6,9],[45,10],[292,9],[322,9],[332,10]]},"567":{"position":[[3063,8],[3471,8],[4233,8]]},"590":{"position":[[553,8]]},"614":{"position":[[1214,8]]},"725":{"position":[[87,8],[249,8],[767,8],[808,8],[912,8]]},"750":{"position":[[64,8],[262,8],[303,8],[445,8],[502,8]]},"771":{"position":[[22,8],[86,8]]},"801":{"position":[[377,10]]},"831":{"position":[[284,8]]},"882":{"position":[[311,9]]},"886":{"position":[[362,10],[496,10]]},"911":{"position":[[0,9],[61,9]]},"917":{"position":[[154,8]]},"1017":{"position":[[200,8],[272,10]]},"1041":{"position":[[357,10]]},"1096":{"position":[[1209,8]]},"1212":{"position":[[364,8],[402,8]]},"1271":{"position":[[4,8]]},"1332":{"position":[[51,10],[76,11],[249,10],[523,10],[718,9]]},"1338":{"position":[[118,8]]},"1407":{"position":[[283,8]]},"1413":{"position":[[0,9]]},"1415":{"position":[[31,9],[118,9],[209,9]]},"1458":{"position":[[89,8]]},"1492":{"position":[[114,8]]},"1498":{"position":[[101,8]]},"1528":{"position":[[150,9]]},"1572":{"position":[[241,9]]},"1592":{"position":[[426,8]]},"1594":{"position":[[82,8],[383,8]]},"1645":{"position":[[12,9]]},"1651":{"position":[[254,8]]},"1675":{"position":[[588,8]]},"1701":{"position":[[254,9]]},"1713":{"position":[[1111,8],[1512,8],[1575,8],[1868,9],[1935,10],[2000,8],[2124,9]]},"1725":{"position":[[1236,8]]},"1728":{"position":[[55,8],[130,8]]},"1730":{"position":[[51,8],[502,8],[536,8]]},"1737":{"position":[[134,8]]},"1771":{"position":[[145,8]]},"1808":{"position":[[49,9]]},"1839":{"position":[[57,8],[135,8],[288,8],[352,8]]},"1844":{"position":[[90,8],[306,8]]},"1846":{"position":[[333,8]]},"1851":{"position":[[369,8]]},"1860":{"position":[[250,8]]},"1904":{"position":[[197,8]]}}}],["variable + + + + +Search the documentation + + + + +

    Search the documentation

    + + \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000000..65734ec88d --- /dev/null +++ b/sitemap.xml @@ -0,0 +1 @@ +https://equinor.github.io/ecalc/searchweekly0.5https://equinor.github.io/ecalc/versionsweekly0.5https://equinor.github.io/ecalc/docs/tagsweekly0.5https://equinor.github.io/ecalc/docs/tags/e-calcweekly0.5https://equinor.github.io/ecalc/docs/tags/releaseweekly0.5https://equinor.github.io/ecalc/docs/about/weekly0.5https://equinor.github.io/ecalc/docs/about/getting_started/weekly0.5https://equinor.github.io/ecalc/docs/about/getting_started/api/weekly0.5https://equinor.github.io/ecalc/docs/about/getting_started/cli/weekly0.5https://equinor.github.io/ecalc/docs/about/getting_started/cli/cli_referenceweekly0.5https://equinor.github.io/ecalc/docs/about/getting_started/cli/faqweekly0.5https://equinor.github.io/ecalc/docs/about/getting_started/library/weekly0.5https://equinor.github.io/ecalc/docs/about/getting_started/yaml/weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v7_to_v8weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8_to_v81weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8-1_to_v8-2weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8-2_to_v8-3weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8-3_to_v8-4weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8-5_to_v8-6weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8-6_to_v8-7weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8.12_to_v8.13weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8.13_to_v8.14weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8.15_to_v8.16weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8.22_to_v8.23weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8.7_to_v8.8weekly0.5https://equinor.github.io/ecalc/docs/about/miscellaneous/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/course_material/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/course_material/advanced_invalid_timestepsweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/course_material/simple_invalid_timestepsweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/examples/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/examples/advancedweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/examples/drogonweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/examples/simpleweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/facility_inputs/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/facility_inputs/generator_modellingweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_chartsweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_modelweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/facility_inputs/tabularweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/file_format_and_syntax/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressionsweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/fuel_typesweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressorweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_systemweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressuresweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/direct_consumersweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculationsweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculationsweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculationsweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_modelweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_modelweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_modelweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressuresweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/fluid_modelweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/turbine_modelingweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/time_seriesweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/variablesweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/theory/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/theory/compressor_modellingweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/theory/pump_modellingweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/workflow/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/workflow/generic_workflowweekly0.5https://equinor.github.io/ecalc/docs/about/references/weekly0.5https://equinor.github.io/ecalc/docs/about/references/ADJUSTMENTweekly0.5https://equinor.github.io/ecalc/docs/about/references/CABLE_LOSSweekly0.5https://equinor.github.io/ecalc/docs/about/references/CALCULATE_MAX_RATEweekly0.5https://equinor.github.io/ecalc/docs/about/references/CATEGORYweekly0.5https://equinor.github.io/ecalc/docs/about/references/CHART_TYPEweekly0.5https://equinor.github.io/ecalc/docs/about/references/cli_referenceweekly0.5https://equinor.github.io/ecalc/docs/about/references/COMPOSITIONweekly0.5https://equinor.github.io/ecalc/docs/about/references/COMPRESSOR_CHARTweekly0.5https://equinor.github.io/ecalc/docs/about/references/COMPRESSOR_MODELweekly0.5https://equinor.github.io/ecalc/docs/about/references/COMPRESSOR_SYSTEMweekly0.5https://equinor.github.io/ecalc/docs/about/references/COMPRESSOR_TRAINweekly0.5https://equinor.github.io/ecalc/docs/about/references/COMPRESSOR_TRAIN_MODELweekly0.5https://equinor.github.io/ecalc/docs/about/references/CONDITIONweekly0.5https://equinor.github.io/ecalc/docs/about/references/CONDITIONSweekly0.5https://equinor.github.io/ecalc/docs/about/references/CONSTANTweekly0.5https://equinor.github.io/ecalc/docs/about/references/CONSUMERSweekly0.5https://equinor.github.io/ecalc/docs/about/references/CONSUMPTION_RATE_TYPEweekly0.5https://equinor.github.io/ecalc/docs/about/references/CONTROL_MARGINweekly0.5https://equinor.github.io/ecalc/docs/about/references/CONTROL_MARGIN_UNITweekly0.5https://equinor.github.io/ecalc/docs/about/references/CROSSOVERweekly0.5https://equinor.github.io/ecalc/docs/about/references/CURVEweekly0.5https://equinor.github.io/ecalc/docs/about/references/CURVESweekly0.5https://equinor.github.io/ecalc/docs/about/references/DESIGN_HEADweekly0.5https://equinor.github.io/ecalc/docs/about/references/DESIGN_RATEweekly0.5https://equinor.github.io/ecalc/docs/about/references/DIRECT_EMITTERSweekly0.5https://equinor.github.io/ecalc/docs/about/references/DISCHARGE_PRESSUREweekly0.5https://equinor.github.io/ecalc/docs/about/references/DOWNSTREAM_PRESSURE_CONTROLweekly0.5https://equinor.github.io/ecalc/docs/about/references/EFFICIENCYweekly0.5https://equinor.github.io/ecalc/docs/about/references/ELECTRICITY2FUELweekly0.5https://equinor.github.io/ecalc/docs/about/references/EMISSIONweekly0.5https://equinor.github.io/ecalc/docs/about/references/EMISSION_NAMEweekly0.5https://equinor.github.io/ecalc/docs/about/references/EMISSION_RATEweekly0.5https://equinor.github.io/ecalc/docs/about/references/EMISSIONSweekly0.5https://equinor.github.io/ecalc/docs/about/references/EMITTER_MODELweekly0.5https://equinor.github.io/ecalc/docs/about/references/ENDweekly0.5https://equinor.github.io/ecalc/docs/about/references/ENERGY_USAGE_MODELweekly0.5https://equinor.github.io/ecalc/docs/about/references/ENERGYFUNCTIONweekly0.5https://equinor.github.io/ecalc/docs/about/references/EOS_MODELweekly0.5https://equinor.github.io/ecalc/docs/about/references/EXPRESSIONweekly0.5https://equinor.github.io/ecalc/docs/about/references/EXTRAPOLATIONweekly0.5https://equinor.github.io/ecalc/docs/about/references/FACILITY_INPUTSweekly0.5https://equinor.github.io/ecalc/docs/about/references/FACTORweekly0.5https://equinor.github.io/ecalc/docs/about/references/FILEweekly0.5https://equinor.github.io/ecalc/docs/about/references/FLUID_DENSITYweekly0.5https://equinor.github.io/ecalc/docs/about/references/FLUID_MODELweekly0.5https://equinor.github.io/ecalc/docs/about/references/FLUID_MODEL_TYPEweekly0.5https://equinor.github.io/ecalc/docs/about/references/FUELweekly0.5https://equinor.github.io/ecalc/docs/about/references/FUEL_TYPESweekly0.5https://equinor.github.io/ecalc/docs/about/references/FUELCONSUMERSweekly0.5https://equinor.github.io/ecalc/docs/about/references/FUELRATEweekly0.5https://equinor.github.io/ecalc/docs/about/references/GAS_TYPEweekly0.5https://equinor.github.io/ecalc/docs/about/references/GENERATORSETSweekly0.5https://equinor.github.io/ecalc/docs/about/references/HCEXPORTweekly0.5https://equinor.github.io/ecalc/docs/about/references/HEADweekly0.5https://equinor.github.io/ecalc/docs/about/references/HEAD_MARGINweekly0.5https://equinor.github.io/ecalc/docs/about/references/includeweekly0.5https://equinor.github.io/ecalc/docs/about/references/INFLUENCE_TIME_VECTORweekly0.5https://equinor.github.io/ecalc/docs/about/references/INLET_TEMPERATUREweekly0.5https://equinor.github.io/ecalc/docs/about/references/INSTALLATIONSweekly0.5https://equinor.github.io/ecalc/docs/about/references/INTERPOLATION_TYPEweekly0.5https://equinor.github.io/ecalc/docs/about/references/INTERSTAGE_CONTROL_PRESSUREweekly0.5https://equinor.github.io/ecalc/docs/about/references/LOADweekly0.5https://equinor.github.io/ecalc/docs/about/references/LOWER_HEATING_VALUEweekly0.5https://equinor.github.io/ecalc/docs/about/references/MAX_USAGE_FROM_SHOREweekly0.5https://equinor.github.io/ecalc/docs/about/references/MAXIMUM_DISCHARGE_PRESSUREweekly0.5https://equinor.github.io/ecalc/docs/about/references/MAXIMUM_POWERweekly0.5https://equinor.github.io/ecalc/docs/about/references/MAXIMUM_PRESSURE_RATIO_PER_STAGEweekly0.5https://equinor.github.io/ecalc/docs/about/references/MODELSweekly0.5https://equinor.github.io/ecalc/docs/about/references/NAMEweekly0.5https://equinor.github.io/ecalc/docs/about/references/OPERATIONAL_SETTINGSweekly0.5https://equinor.github.io/ecalc/docs/about/references/POLYTROPIC_EFFICIENCYweekly0.5https://equinor.github.io/ecalc/docs/about/references/POWER_ADJUSTMENT_CONSTANTweekly0.5https://equinor.github.io/ecalc/docs/about/references/POWERLOSSFACTORweekly0.5https://equinor.github.io/ecalc/docs/about/references/PRESSURE_CONTROLweekly0.5https://equinor.github.io/ecalc/docs/about/references/PRESSURE_DROP_AHEAD_OF_STAGEweekly0.5https://equinor.github.io/ecalc/docs/about/references/PUMPSweekly0.5https://equinor.github.io/ecalc/docs/about/references/RATEweekly0.5https://equinor.github.io/ecalc/docs/about/references/RATE_FRACTIONSweekly0.5https://equinor.github.io/ecalc/docs/about/references/RATE_PER_STREAMweekly0.5https://equinor.github.io/ecalc/docs/about/references/REGULARITYweekly0.5https://equinor.github.io/ecalc/docs/about/references/STAGESweekly0.5https://equinor.github.io/ecalc/docs/about/references/STARTweekly0.5https://equinor.github.io/ecalc/docs/about/references/STREAMweekly0.5https://equinor.github.io/ecalc/docs/about/references/STREAMSweekly0.5https://equinor.github.io/ecalc/docs/about/references/SUCTION_PRESSUREweekly0.5https://equinor.github.io/ecalc/docs/about/references/TIME_SERIESweekly0.5https://equinor.github.io/ecalc/docs/about/references/TOTAL_SYSTEM_RATEweekly0.5https://equinor.github.io/ecalc/docs/about/references/TURBINE_EFFICIENCIESweekly0.5https://equinor.github.io/ecalc/docs/about/references/TURBINE_LOADSweekly0.5https://equinor.github.io/ecalc/docs/about/references/TURBINE_MODELweekly0.5https://equinor.github.io/ecalc/docs/about/references/TYPEweekly0.5https://equinor.github.io/ecalc/docs/about/references/UNITweekly0.5https://equinor.github.io/ecalc/docs/about/references/UNITSweekly0.5https://equinor.github.io/ecalc/docs/about/references/UPSTREAM_PRESSURE_CONTROLweekly0.5https://equinor.github.io/ecalc/docs/about/references/VARIABLESweekly0.5https://equinor.github.io/ecalc/docs/about/references/VENTING_EMITTERSweekly0.5https://equinor.github.io/ecalc/docs/about/references/VOLUMEweekly0.5https://equinor.github.io/ecalc/docs/category/documentationweekly0.5https://equinor.github.io/ecalc/docs/category/guidesweekly0.5https://equinor.github.io/ecalc/docs/changelog/weekly0.5https://equinor.github.io/ecalc/docs/changelog/latestweekly0.5https://equinor.github.io/ecalc/docs/changelog/separatorweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-0-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-1-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-2-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-3-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-4-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-5-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-6-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.0-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.1-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.10-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.11-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.12-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.13-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.14-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.15-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.16-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.17-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.18-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.19-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.2-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.20-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.21-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.3-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.4-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.5-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.6-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.7-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.8-releaseweekly0.5https://equinor.github.io/ecalc/docs/contribute/documentation-guide/documentationweekly0.5https://equinor.github.io/ecalc/docs/contribute/documentation-guide/markdownweekly0.5https://equinor.github.io/ecalc/docs/contribute/get_startedweekly0.5https://equinor.github.io/ecalc/docs/contribute/guides/conventional_commitsweekly0.5https://equinor.github.io/ecalc/docs/contribute/guides/gitweekly0.5https://equinor.github.io/ecalc/weekly0.5 \ No newline at end of file diff --git a/versions/index.html b/versions/index.html new file mode 100644 index 0000000000..1d8eb0f16a --- /dev/null +++ b/versions/index.html @@ -0,0 +1,13 @@ + + + + + +Versions | eCalc™ Docs + + + + +

    eCalc documentation versions

    Current version (Stable)

    Here you can find the documentation for current released version.

    NextDocumentationRelease Notes
    + + \ No newline at end of file
  • yt|;v>+BVefT1O_slmt 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�-q?%ckZO8uMasO zJ_|NB6;c$KLZkq4o!E>tEGM^{WHSRmALZw-tqVEO^1(`r@Lk|nV6p6dZZopI~_pznxKmkY%H8HNQGdaQ{-2E+S48O1gd zMBz)wH@MD+CId}k0UzQ*5Mdw&y$$0ED{K8*p|G@)wdrDl*d_J_Jih{GxDnzWac6iB zmG;lFP6^y|gsVXU>kp)2eD4uxl1Mn&}TiT7hYfd)e67cGA(+0rY4Q zZk!-PJU!*W7H@}FK`m!wY)s+B<&@X2cj8N`;o(V0gv~w^4s#RtL*QQg{EVHQAiv67 z00tz$6H**KapF91vZK^NSfJg;Unk^irkKZ|UFs@IlANEv@6^Wod+?70AcGh6bDC^F z&HK~@tH~^6vi-(M7J?ilB29CmEb&~Ju>eOUbZ`EK^^cExvGoZ&b@@%2jvpmQ+OgXw zOKCa6ya8U2i1Q(*TwPns#hlVygj1@XvXvofG0WD&L?9G{s>R*S^?QSzw&fd95B>df z!K372ZbjDmy1Q`?GQF+`JE%KBoNI&R>%nLt;aF9m7Lm2_69`V9@W$$apL8(!C0^D| ztj$6sSf~!3qZ5fmSB#KpCw!(hstm>U!{ny#Hzg%7&V!nc&WzBqKt3dMoR@d^rwt^) zU3r#m#Mg8ZV=FJev5t0|8prFZM^yUqcWJ5#Fi-~@yc5ga36s>u42Yn>Kx5)MruCsW z!Ae!hegr(xD|44TfMK5pB<~zvTS(gae9Ov;#WeVure+S-R0#Zx7;45#_(tknh!S%z zEthX4gs{oR(H@kFiG2VhbWjW^z7kE;qq=Mq{mQ+=iJqy#Yf z{pMAo$(^ESrGHvg2mm5f*NI|d7l`sMOq%J!Q}}kBV=?`Wnz}hML~96l@L}*MP}tV) zL`EQ`C_bGk0LVJ5UKbW?!o!B_i=1+Ut)5E%aNb3Zd+%dZxvyTkMr2Y~UR^{SRA3T8 z_JI}v1bC`k&A2eGcknQ%j3844#xToHfBBLeL=u6LuD!jzeEW`w?+>Z!j>2>$d>2FhTr-WS z>dKGPY_zE@;8dvw<*?>JQWDbA)QAR0hlYl>At@m#FEO;bbqg+yuP<|b=1*MQ{`h9f zEt*()t(x8GSCsyKw03qOAB?ycjYPcwy2#Zujs zFASaxDVw9nf1s51W}?~hcUZ1v@j^_v=sRFoAVk_49UJT`pNKm zXyXk9xG0Qh?GX!j+XqV8ex!i`t|w0?mc9*~xGyFp7GA4Ql(651vVM%P`NjB*>U!pC z;*T&gj7W3?LPP6N5xt$=jM}^}3WWn;9VC#?I!ay7{j~JwPYviL`^k2GAkKW9&%TdC zdAPX9goK1Z^qo~zr9nC7;cdhNWab}htMi?-zFnLSv&$(JwWXf1lz#K$aZ)M%xX137D3EEA_AMQ@AlulMT~G; zBqZSXknOv;x>h0X15cww2c!b*nDIc3L#lpf+)ZIyX)+Sw!^7s-TKZ; z;E~L-zr1oAf3B<#vv2LnXom2Xf3%@z*O-$@Fy-3!_I4AbgG6SDS$1S7_7El77zuk$ zWo2c;Z(#Afh5XRU!GN9^)TQcS8?$ga#vpgJi|!mD*rVe9jf+ZWk%~S7<{Sb@t-9Bo zAnlLgQdOXk5H5(d1}g!0h^ns(I#5y(7*In|Kzjr_lY+oH4upvJ?b_|4AjSJZHw4`o zFigoMXm5ikL?Kw^+;yBbsNE5e5{)-?Knfh;N_KE4L?s`OSdSU+-b8N|((U^SDW{N9 zBdGRyZF#``!08guk0AF3W@f@rZdjiS^EwOIg;~2lMmB=sy+O_4iUc2uE+5z@Imkw& zcLG4?#55~{ih~JM6C@Zu@C>nFZf=g4Ck)n?4h!l91C#Jvm$2zAypJ)VgPt4f3(W-B zL{b62;tQY+w_yU`Tj;vTOXQgZ!3l8g+hS3J2LKl&ru3p!Y-&uoq565-L~@Hog}uI; z|Gf5P-lr(A4oF;7+DTf`+?;tZl~XMx4bpL}F`z)unLzL>aAXSaz7OFYA%Yizz9MEu zJI?eSB>7h4V9t@UJE(Tw_2UOls(;0<$F}iDzLS!dw+AWP8FYQ5UNAm&iiCKS7ndnf zIstw~K9YPsj1ADZ9tI!MLeU!czg_@r0)@l7jp2@n8RGR@j0`<_8~W(A8AxL{u~z|`s)T@ z21Kj@ZVUs9O7#;Lsrs-!SI>S)L&F;cVHk-wAe1|%G7>&3UX|*)zP`rg%MS?f|Eeto zi3CCi8n*~Uca^s`?Lq`WbQ)Lt5qvo_HV;S!LF20JNb>Z{J+Bw`R7zvny%o?w3Um$zZxKJJ6C;K~h zwvljfAWaMITW--5)NPnYLQlTcW3etx@2yuZKyu3|t)UGf!ESOVq*9(t-wTptM&nB6MG z6y%ZxkK%>MLGTR5k(_dOm#Hxk0^r_;^&t2R81>$ar>mVG2~G?^z6#7XZ5=Z*M0}}r z;=2?yf$RsjS_7s$%Vo~wnVg62c>W|}D+(hBzA2u-!U`Mbz~U@YB2_H39~N|5vi|%` zlF`s}^$5!B_Xu9DzMcXp9lq>gP*6~wdvH`GOE&*kF&N>GyopJ8I>;Be;LxrbR>Fi#D{JGdJVkQiZ_;ylv_ z<55dgK_e3Kb`)`mN++9)i#Pnupg!$n9doX$8sENDB*{cQN$D^Fb?~S>k;EWrlqpDI z!g<$pmOdRGu|G@6VK4FzfyU`RwY4##m!$@rCsCG1It4(C-eD@d6K!OPDEZlKuHOTe zL)SGu>b@9SSc&4z?0nM+uA@hHBBo==9oywASHh#CDUiMZQz9WFcwAMH zMQ4@?%t-=8^KZNJQJv(tG>T1?Qc}`8v|l|@h6T}r4KlOaaPxSXSOJm>)F_C83!hHT zc0#NY#PS@xJeQ;-3mFBSZ{v+^_4Y0kFQNw~Cc4HqSiyH;h-ntu1@S?OevjpYfUqFQ zD1bAt^C_KvM!1)i!My-T!Yn{39uTuWh1w4>7nA_Rr%#_IxD=4pDc^4q5jlR8BugS} zRg}A&7A-<>i|Ae>qIGyeLI}$Judni^G>w8~X4t=-|z5Xl$4ZJ&1hh` zfB$|}vtGV+c0lei;6y~DTD&zd!{{j*n4F|W4I53x#W&SJkCXePv@Fc6#i;wXeS5U` zxCVj*inwO7@4}>sgsV7848 z55G?UJ|gu2Z(w4=xrb^8awlT=CNNSZ%pDxpN?Xz<0o|X&{HpzEtD#FAjI#&3NghW= z9u79Pf{PtQ?`0+Ri4t$fybdlR-897q(RG4VBg1q^U#KXPkZ`NUc$ays5$OZ~2LYjR z=Oi#WRNVk{tFbO5*!AQ@wc*r8VL4J!ZHt3MIYVx9#gr(J!+xll1bo5mm2GXh5mob< zenW|NeawT!3*rCxBSZHC72#M32lr6nK44^u^f)LMSSe+Qq7PafiEk$yHZs@{{JR2v z2hH|(i{E0D?@s>v_;2lUPg#^GD(zYK3FrsFw-C_c;>C+d0upu!*V`jQPo2$$Ye9-} zD7tA7RU0Tr4**mV1zS|ug7CD-NL#CN_MqOJuM>*$rLJzAT?jhv1zl#1-gPDdg)z_@$&1GFcNjE;7xQqdojI{fEuV^dRZ>>hNg4jMF#&TD=j%&y+aaqxlr z?|+u)?n}Hz5~_)F0;=2*v*KZ1U)m?3yaD#Ai@)B0Wu4tK{$3HSC|{F7@7S6+U*=%Z z7em`ZLsR+qj%owdrC+9*o9jaP8ArC_N+%b<@h-JJX`0)yhZSS(YM#?Z}%34hwK-9MEp-JM)3aa z{<0q?Ymk3FVjUJ5YL==PVlq>{C5NJFR8})M<%b^o|DV>bJetbA-#^hn5mAb^sS}M9 zu?@+vWs1^(v}KzzWXM585y^05EXkB)>~uHbWJpL+C~cK8mZY>RLnYBB>3$wM@4ai? zb>H=_d*9ai& zjkQjLz9{97MxUt#^5YOZUxowj;G-x_n^0P?R8C7@*U)2G!v$L94r7dW}JSGj-}-a(&bCPOCHOnCPU&j&}hMfo?<(0_?1z(s7GG7 zw4M7cX$LBEJUoigBP@QSyuEPoaFLeZFyAjQH9uCTVn;1}`Af}vGK|s3T@C2}aR3Tjm{rbY5s8WWa*P7^!H|llp(~(tz!p(vcc_2Q8`Z^R zLZp%vSWs9a&^9#)*YGNZz05Y+UJ{k4sOQVUHU+IWwm}rGt09D<_=wJ1K~)Jy^$iSE zj#qCRA8=%RgRGH00+_tWdY^~PYL9y_Cvn!+S}`{ZA(yM5^17dF|*m#)9p(69;? z$OA@Kwy_HL*GK*NaKwghQwt) ztkk)B@G@J=PDJfUbB$URe+e<`$DHMh`A6hJK`@s1XP9z0-&q^ht|bV-Qp^%Gn2qq6 zSIriF|11|7*cBK0i`i|J)_`i5b$%sKM~rX3^E(;wX7GvhAou!q6U{zushB7;W?S9E z%Bf`Dsbm4Rwc*5tdiF_$5i6Zv?C}Rd&V8+JI%L$xu7_YQK0Y=O=`GQE9Ns?nu@c}% ziy~zc4re5sZA=+)yY?mOGLTgRMV)S}_>W5il{)8hb7xV0%CYa)BW;dK5F#5b2>>8i z8wwom=hVjw^jG;)7u0^beTuuVe1uo>rz7#x1g1US?|5>#j(oE2m8Uv|7K!Y^2<5~R?cWkwBND(|yK-{BmEV6R-cDK(_OSH;cFBw#t+|3cf zI+QMTc5jyJpWfGv#un0WTAbj)w0iW4&FD>T8YkHE=O>Zyt)nxgC0t}U)?kchXr z*;f%^BWn*bBeuOau<$;Zv*@xFtdTbhCkB@Z3E3-0@%OU6LWTiKqvG0Nq@E$?KWu)O zoIvu^=FAjEkpXOlFn6yMKWzz(5sU~_p=MAQq^FYsPKlxWLMM*`S`c3kCF#DvI> z>9p=06!AHK?_Pbvj=UxqS!r1z$V+&8D?$Z=c|RJ?O8_)!aI4;x2Q6K*rE3_QHd<(b z#sd{$m2ui;N<&Vr@QKA$0}rs>fS;gM$T$YFHst>f1aDrNgM>*p?9&M#$>W8QS*A6%;muG^B0Q+(lG!xbxmkJy*i=sDLmGeRGUF!6QyJb7sBroKGMoNDN z6?r*5PZKW?kbUDCeSAc$Dh{^^m~;JEWD4^ke5qi#NxwNh7UmV3WzIey9elctW znfvYCE2KHmFAO-p&^ibPd~^l8k$_~nFj%NC_2NAPJluciYA)$l-L<0QgUj|9h4z;^ zf;6J{N^oTMQv;Y~NohuE^JYQRVGocR(gH@%*=7dC|3$VT@0dThbAH{cpsH5<+B{O# zm|;Z7d-(sP2>sKKzW97AG4sh^@J6#%<6&_w>3->vuV3AtOwY(kP@Ym?_u_+-1is%e zjn%*YHbH;vW6w%3I!DOM6Q3JPk~aU(uPCg5^uz)k`X_P@V5O@(-^$lI|LeC6Qp2xb zzO)nklHLXioP5Q|u=spjRBPYvy_}Rqe0+C%r^hQ`xfZ0US0^)$^Zvc)VF`;PMT&m% zW7IV}5ve^ZnFW|UAyEmrD1S?4|8#-={cFE?J(Mh*2}{J)iq<1+O&$;&PxqWAo)0Mq z_9{RnKi*ENeP7abjj~RoOK77DGvmzHC!xl~e$43@v@-Ye(Rlb5?_uzS0_qvp$j!kO z9rnTgKzzAw-iQ;+d@_t&AIhmEGjZ1mGRQz4S)d~iy8O%nNXPwgj@J4g?RD%@A(5p^ zr_zdtZU#;$mUYf9 z_pe|$zyTwaYReKlW%w2?I$cpw(epz>pT|x#HDHdP53!2$g+PZvp~I+6lC{~{*&83Y-iXJzh@NC+b|pfr!M=zO z(JHqNc@!fQ;HJ0UC``!f95~-LLm_OmxmDeEU%@6H^udjfNT<{ztyDPf>Cb9&RYo@C z4CYUsNAN&z!lGfaeKvFh(H~%*c^EHY3n5&*)I9dU1KfalEliQ)oRv3rcsKyd6dD>@ zaB1Sd(FLsU_AM{3A1>mnVZ=k@wTE#I#F7q57;YqlbKpdez~563WJ2@;XpxeUxySzA zHl_B&wG5O3EeP*{Pixz9irjDk1RLg}Ns_U-BS+-@KECLBzd(7^qAs7#1uNUiAnTkb zWL^hE12E~ra4v{>SYP}@B0K0L9==m5y@BL#muliP0&~7DTq>$@!kRC>+&^Q%T=t*_ zf+yfN5QwX^NI1=|9R|dEPmqPFN&Je=!MOrg;t}$WJzcT?YFsA zRRs8suSF6tVq)C|DgJCnZ;G?|H+b>MtI9q&>UJq3L+&n1(uTp1r(}X+M1zdJTaLCC zkAN~y;*ybXSMAi0V-qn7v`U`ytf(s$nZ>Ds-D`>4*)b&h!La^5)&uu4IdgVkbD$1| zJ6{U^iHU8G|HoaIG`fb2l7_aW^EYF_fbt_e{!Vo<&=Rp34i^MlMWO8?F7m{A!`7`< z{-4MkkZV=p-~e*oCcBd`;G&74Nm7|7$UfO= zCd?&5u4vh#+@vW0Zzo#y%;RNs0JRy90uVaa5n*I)b$*UE$DX7e5MQuxFrSzU&AYNq zSXMcvtvvwuGknW<5mbC+yYeK|r%t3l5~Loy^~U?D90s0Uts7l~(cm9*ymH#oOBw+} zgdhObvMs^ZYH{^o!-p9AH5Kyik^t_ojZ%IB!O1HVEY>P7mMIKl*=>-XOFk|E`XIMU zkGE)G40IV0$?ZAW*Y{`i zH6R9CsvV9gF(CX3%7yaxi|`{0(q&gNB(=1(NSO|%DnF~}i3?d!l9{WG*C(yg)MUID zfh{C@Xvm$Z$oW`@-vvK{UvpoPE=i#TxkM}C2!@AkmXVnU<;&v!PBXLfyCumrO;ZYw zFDn^^)=d(s0%OKJNjv6Y4>3vQ=H}YMrH(X0#qmv}HXOLWx`U?Ma9D*j9Um->_Q1F( zBvgkPv8uxtN^G4^>pABX^7MMdpQEixf$^Jo9%X4&A;fhX9;YE$Nz9%!m0PGdr8kBm zB+UYFox;=N6pH(Gb6E|IgD%U|;RBC;)N^pWMG`FN#omsN4z}{S9eH3<=Mx93{Y$#u z1wt0zkn`hSYo77SVS9?8UFf8AmOf+8EE_!1$bp) zQD$c5@74k^I8L1*uP>Jc+soY8GLdrM4brx$m%Cnn`Xq4qtr7Z+UsX+Nu%XA$6o@w> z1O-MUqe>>tXS!j$PwU3$n>%#xU0|DHVq%;m8{eq5usJ0W**Q6Lp2ZiElhYtJo7inr z%Z>@>Tey(Rc7m@|PZS;zlt;)?n2=rnifL$AP0i0M(KJCAgmv;0P_HoYJ4`R>&jlnk z`3MUe!Bm?LG*^`XiRtdqH+*DwYt?iykuI@ybMLEnky$|WF=twoy}!t^UX%3qEnDEeHOcjdB^s0yB2n=Ux8*MU1I-|o|2ksR2WvP zL*9z7_hbCQ-DrzWh0cL-;(FD`gKkL7SpGNx=kv~MRUKvlwfQliS<44*TzKseL`kd% zYmF4Dl#0rJOW~)1p{WoR>EiVrDypiStX*lkfO84udJYStmW`H#BhkyHjbG=8Uq|ZA zizPJHzBqPLG%}(kQ>(W?aqM`_XGbor@g*Eb%IeySI&P(oqElj#tS4y~irV9%hk0OZ z3A=v@NuW7Xiu&IDO=qdWk{T2Ji3HuxdS+v%QMRcgTh4M_wxDeZRDAL*atdCbZD)S( zrqnVnBIj7S)X*pS_ABSf^Y;%?*L>S^)vS>2np^l_CdB8@0@m{mwla28Y6NDPQ>xj{ z*7Ou`Gg@#`q!;*uo4_=)fS_9O&S_5dN%xukoeH2q+!a0LaxLm?J~wNBmW=b*gPS+| zh4@ZCKPpBf=VM#7_N~QXSngI)#?Gun4;X?ILi>le0Q+IGm=T#A6mR;K9Aq^U1IZ>t z2zsaG!-Vbxw6F^YT-Kr5kyB3z)lb5Tle!PV3$bnOFT1mAEs##e;DiqB+SyuDp66X+N)865HTHl5iCO!p-l5PJm>*Mlx~BC^$PyMX}+D}W``085$G zvzo>5QtPL9Fa)yy6q8KNo&oMEjJp_5iSIq!j*6n7{V}5z(yzck51Kq7Awg=$VMBmr zm0zKrS~s-;9COu}W2S1>gzfHEQzvrj{1{g9j-@=gxEK=a8cX zXnjvMCOoU6&}kn(KmRhJS5OU@{YI!_RBCyf@JA(s`fL4|^xcmBM9#mjIT2naa@?*l zedel6x`9MR*O|ELkykmcE6fsX<-%-YAngiRQ#@&9cDAQL zgQST9vjOYsG8hb|^D}5#zagS^#OqSTBmUjBL*W?k44WV|Mek<>%md$uB}DZ@LB)7a zYwkhiACBYxQO4nQCOR{0^QEmilH#9N-=Z|)*#vx0qJr0!2$NMh0B1vhztO8MvX))_ zGGU@1i4{;&DW}F#tF7@N#(I{6_A7RNBta@jz>j3y4>*`Kji7vzmKlNJDY>pjiy;V{ z+i_>hGpb2q5DgMzM>tLTZf|FI5NVEw;}*_s0(_`fHLUcI?Gk%p^Y*TTb$KCxJPxD| zR1szy(kVQ^s*s>|Ud!kdK{=HRz++=*L1)gKfmOa>AQ5`&Wjq0CeNwkZJU|k@&MeY) zFE7}UH4b6BA>zd1nj|>Kdk|k07?7 z(|kyn2=nNR-ENN?BnYc$)?{{(BJn8E-6 literal 0 HcmV?d00001 diff --git a/assets/images/process_compressor_train_multiple_streams-415751902a6078520845f70740eaa1af.png b/assets/images/process_compressor_train_multiple_streams-415751902a6078520845f70740eaa1af.png new file mode 100644 index 0000000000000000000000000000000000000000..25dbfc51024d0cc8896201680eb4d3fe345e655e GIT binary patch literal 59154 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 Ybd`DA$CodSqCShf+zHv_gZgg&2e{-c7XSbN literal 0 HcmV?d00001 diff --git a/assets/images/pumpchart_eff-136e9a9dd1af0700084ddf17be0d4453.PNG b/assets/images/pumpchart_eff-136e9a9dd1af0700084ddf17be0d4453.PNG new file mode 100644 index 0000000000000000000000000000000000000000..efd6e51377eca031930cc6fd5a54007f71914d7f GIT binary patch literal 12910 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 literal 0 HcmV?d00001 diff --git a/assets/images/pumpchart_head-ec0fc7f624752c8c95bd7c3f828090a3.PNG b/assets/images/pumpchart_head-ec0fc7f624752c8c95bd7c3f828090a3.PNG new file mode 100644 index 0000000000000000000000000000000000000000..302a6588ea0110e02cd6875449793c60a10872ab GIT binary patch literal 14284 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 iPYGCJA?fDs+5Zm>nHLYJNs5dB0000AL zR_>K*+=X0b6mrQLF&49C&Hvl)dH&~|=WP3&=l7hwpWoi?>GfK>Hfw#?`hM1DeJ=0M zP4r&W3C-KF&3qd)Wy+MP2c{l?AWs!cN&SRavC;<<43rE7O*scn8*EVriyRo6RuCSbOtyuuoSa=wdY$z?=R-Sx;qsNhpx}_uuHL|+rFki)BXp^{%vFb+rDJMzNSu}K5e?hw|z~S>I05xveRe$xN7G7 zP1X`eJQplkeQDOh&DZWeEuO8Ww+EFwdZtEFUR|G~!TYwgf9&i(x3Pf#($4O%|d+1fg{=3=$t=8i;v7%maUA9?%KKZg=@ogQ(I)Khn1sK8?4@!2CL4 zd0P9BWp4CO&+2vQ%kFgaH_7kb^?At_gAe;lX zL{Kw=gMT-8bJs&6h|CP3qCO;CeoJ}6s-{s9G>g6y+k$46u8&DN?{$wRQwmQbNZ92a zXm`ABeQmSLQ&<1>wR9`4+a3!e+n`1V;g)?q`OYRaA04tH7I8%ocexCv%Mvd3C>24t z8GH%+x6Ia11kKFG3`r^$5TO$j94iQoq`#@4(Tc4zL@ zFKHUjYrVrAs%C%8ejcV1?iAA&H@nOHp3V{-nbE@{C}@{3hSJ+YaRQ6$QRgD#x9-Rc zmy4i~CzQ?{WW*DZ5kWi^LP7+6l{Ldn!86Rr7D0&-7!1xCLMbBXmoO1z!@`aaH6J4) z68Yfgr3Prf2)g;2!ihp0853(5%_2aaIZdT3!bxiy{uG{UW7Z-__9wX54essoCxN{i z;o#2QOOX10LeYqS0Nm4A$P_{7Tl#wN^D~UeZV2wOoQj1{BcxnKkeM?2?Y6QVo#2sH zEriPskWdHe#M+Kv5rjpGplKp#JcKn0R{J##5+}XqMM{+dvE&7ydy5FFslX{BsLTfg z5BtWH#FLl6<(r5|Lyia{)DUnIaa2dR3z>`rlig8F_3>L`s*8DDEMdeF=2wbDEZ4=_ zRIE+KHjLPEoWxcYTaIGOQS2p&eN(Y-Itc_Jwj9Nlqu6p3TaLer<@khdBhVtMJh5YC zXUqf!_!RR6n;P0wOy<&!Y|RdtaH6AQOD{!7U(|jPFl+kaY6+exz-mPhTwK|K?)GRk zBqTM^RKA`t&43b2k}HtowQj@i$5FyYn8EEN%oiZOQ?PIjyM(DoKaiE58(aLd%X<0j zyC-v0r`M0@2=#2LAJp&vYFjsIwBcl<^qL;4`W-kBaF-9lp8$&agf0BQCZ6^T&M<{w zR>MN;jWfiDm;1@L?1u?YH{*PSQXgWHLqC9F_nfZ7O;w0UhLeFRa> zna@PfYi|*BgeiE=6dq%@NQO~5n@HokkO4gr)o*F&x=V2lt?J0t8 z^b@6&F)zwQB{NHI;S>Vd`!{g^{thm#c#q#dj3IuGCMN37{ zQ`k-f)p@^#;A=olcL9&DNf-ow>4rxc6lZNMaa88-;qd;Ik#+I2i+S|F$^+u4%14IYVTCSp5xqNd&!$5^?4%yB%vN(+%YfP z=HWrZFx{lOQv(HRo^C6%Z@Xtpt**H~MKEsazX_x@fRwP#Gy+rx1r!tS+Sg#8Ijn$o zHB2Fez7G4jV~(*yXPZ~~gcD==uDl{SbSzxDCz!tP$UW?^pM$x86p}W0rG*(-KsnEk zKaW(???ra7Zv4wqBE$+&EY!Ydp(fs&n7{v79*`Sv0F6o&g~&(;rkQ++SU}&wlPJv} z3Tc<;HI*+!B|=YSxt;7VQI>n{;w&yJp-u%XXjUbs17$K>M<=yXOquk`r4*2%!^A6uGiALZBe3hCEU;3n$Y}`ER2VGe zu{fF`>L{~pD2S3tE+10BWXe}Izwh`!^C-8sx}0r3;&!2yZIe?_=T1Hw-l0vr-mv-I z@XI!b68E$fKgmpIUa59wJ0B<&B|bda z1R6H5THRRQMy-XLd1)f(q(=mQ&7ilhajc>AjELY!-N&amt6z8PI2gJ5TAXc_E|A?E zs#Gh2f^Wga=E&zCNx3qF2BVTic%=5RFvA|g22{;Xp8!?IJu<|-!&)r9+Z`FSchU<6 znb^`weBl;C(x=M<)6yJp;HYTwYlJx_>V}~d7bIZ9gw^RPf*4Gtq9rc=8ff$wLw~!m zN3yH`oQ4AHbe9Vq!L7yY^eXPGY?T$=6?LYdL+|dqHK_fDHtB!urr;ldYJ0;RK1rHF8Q|Ol{p#Ji z;)s%Y1@{qx!3yH*2NcK4aJI#ufnryYAS)(^1F86%huG1pDTh`V=GGyH|sj*=gBC%RTCvF!z6rBo0Nm zl9;HxB2BaM8N-Fzk1xBJWP4f9crQz*XYu?;oRtS)7oC)&G}i^!_VJ@N!^&&lJR&<% zM&U_&qBIRF2mszuTuRL{EFKzQN%+^tk#K#hi*9&472BzMJfqrwwR5A(m9Nx2%@V=% z^L(1^r(B+N(Y5rBcW>9+?XsmTBd+!c3jhrntwwxfVUjoHq6k_z;s!fh=AXqXeIDZ` z4ex2bT(e*WLXI7>wbB-Kzt8LQaPiPNFP-*TZ6Esa>(m_kx9^oxCs&t-a>1lCjyv*KH>Ys*BkQvmSw>%C#Pt zKIp`6<0@DOH&cZ7D5GXrJJQ&Pyiy>fDWDLrg?LBhTZtfNhR~WYWR2#rs;xdk_rkRP zkb_kH1yVikH z5`XxU9tE{x309m2#i1Hpz_U<;Ql`QF){j$%%w z>l;Qh`fT~3ejDz&9YR_d6BvB5(+7EW-12=CF0=YG+j+s$={eJUz z8%Z$O!6eowwL)T2>vd!b9s#cKKstLVGT$yrS zRoP;J8KQN&dCV)zaVkf+rq#TbyxiEDM=qP^d|@oeJ8f5OFh)q~u&~SKm?v+HU(5@BZxGbCtx& z%QUk}FHo+s3dkz=b6fnGE?sFpWvfquStC!Wt_pdLxyi6g^2AIWaKdE|0An(lS->`5 zsKfQa7b^3wQA3%Fve}^?ow_@QI!*GqM!KZVLS`s^21iB$)2^~D$VDq+6ESw#1;6&F zPQRrNOv!$Koo8rUTjO2eFT_i`nj=qYvlt&pK};zVMfxK2TsZobBU9QjgHA>jf|t8x zy`5Ifl)=gOuq~xZCQK(uhn5zX7S&6RM;^3nnyz)N;^)>ol8Gs=?#S@!fwRrR){;Au zgNKY^9+~R|hNEya1G5e|KC3r&>tZPqttQh@B5G#MoVs>e6tzApZGDMK=B%XauJ5Bx z-BoyN&Uvxlgj%rL1ltTzF_N;wi$tgfte1o z-R|cV5LwRC@KL~8y-ZBU3SVf;2VZ+Y1m@Jq7(fIzwEoWAl3wJ*P|)FZ9+EVQC3^Ps z2aHAKQOi;{IM^1|XOpC<{f2BGm&DKKD&7rQ$LXTet zHj1x+Av|T9C&D}6ZugLEkAeONSp173rKT*wA;ZmaUuwDiTN{cD=|^+WD~DBb>u`mn z_ALwL{Z*@Xg{I@Xc*Y9$s)1gKpZO+wJSLDBw-C%YoY>RF84~D|FHZLEF&{ z_O+!BJdOS~hu%2pdo9j@*YdE$^4YWUGV0DooSoKf6$zvEFs7Y5D8XA`hedT!TiN`0 zl%JAnu`IY0nO#Jtb#yje)Ys9>d-nYD&T3-`wA3EW4bm65nm!Y(KD6ex$$|;zkU?otWnK_9(iG7#^s>3lX2Czi9(qL|wi3S_ZePN=A z{=lmY8Jsb8Eu9uan)5l&ttjim)9!zv=KD+L>d4g-M>YE>`4vi_QZ%;h$cs5e2 z=Kgi_Me3dv7c=wo=RFL$lc_iF(G>NII@lS&g_Uq|YYuZt(GRqIK9Gq4uDz-fSS(ir z%|3j{S=CUOOh3*7c$_^YWO?^?Zxs^9FmU+_H#cKX&j&kl*Z3SZXv$uS#!-va*INY_ z*c^S8O73;SRlrlvQ0CbVfPS6R1y8U|Xn6So%%;m{@FsVI4d=wo^v_CVN={+MI;ii) zy0lTNtAs|i?BgN#-?3rthw!@-Cpi-mw4MEABb{W_vYs1t!asPTNI`GU~`Mz;Wst*cBRtG;LbZt z^mHt~plW}16QO~BBQpb^!z{BgbxpSSZ)`CvFZ3z3Py6V(q2)mo$Et-{TBL#A9~*Yq zIBdC;nHXOcZ$v+6oRia+LX;FKqLo1f3LK$w$>F&uKbS+2#C)uBYKHp*4t$1z=$$q&TbxGeBdFE&xd zY`Kh5lCn#ti-{I$do?TG@7R`x#}D=(1v$_5G>)Ac*velYaVusbGXC7P!!Bd{n@*Rn zhG1ZO@H!@R`er6 zCS4dM|e)90)g&fw#~EprZUy3h(f}w0^X8? z@2ONQxp;jf;^Oikso}9K{MZ(sug8CrFGP^eTS!Lkpmm!0DMFtICTeBZ7A^G)d+oQL zO~@ygwjJAx`S6zdDofq`aw4nFo1{o{IM8tRm$<$jrG3IE-LlukFC}_~|14_$pFLj; zvHb;MfPYzhT1>0I9&Bb?f}l2(P?L4o7J-C+9Z9xG35&8u;Yhk(=M+kCf#rRD&%QW= z20n7{vrW58UDe`yEu*JcU-qk#T{owDBG;YY={_WN9R>`vK{WSqZX?cU_I*;>2i@7R6A{>JerOMU;s z5x*CmnG{ugUX|B!RfUyRnKB9m1~0nMMFSg_@0U^uDCZ?u1egEBquHY=TNVVCRj2HU zRFkn^kYse_`n*pqY|gN<7D01gV#y-N9Hfr~1i_qobVvlPj-D_> z!wGXrsf<7~K@#lF!;-ayWhh-tH!|KZyGknjOtjLTsPpfTTtj3d|pT!=U z7jbD7jGcc6<|cAUJbhIIxW?>fn45!Eg1Zfo`v(5$M@arCsJTF1$c+7z(<_;6->{rZ5Hk&xvt#n4?!YKcds=;ESiis-b zRPpC8mZ@TyDppit?JqW|#3q&4PW>nR6tVFy_Ne|>KUM5eiQQDO?=J>a#3+>*r4mDb zVmwt0QvY>8YGNJS`5evwX@5?v=C2%5Xn~o4>JL&EvnH2bM}MNZ!0?afWBa4(#gA8_8F$+;2N*Y2R?D{ngutg9~GV zg=_uasIFvVJ-ydT3bvHJf4oL-4Xga1M{p{2_Ki=9x{7;BdK!AG!(JSx&B-NSNwn0^ zzJWeX*(VrvT$lU9y;~u}>noM?UJg7A3A1Z^AGmMdZVSCtQ}#|Z|6xj;@Rsl@NLdP| zUHFJ;<~9tGIl43WGu-yE9L)K3`@f^3G% z!YtxPx&e$i@S=GCfUEM$TwAL@Q~c&ZURA$d0^`70dIlA(wpg+(Ti}N1ULJ7xf*^LONcqF z&U4HjzWCOYD>`T zxtck9Z|dyLkI!6v@c47xm3#H~p4wgCowiIjY0ezy;a%E$d6{OI>qx9HXwDwg?)?CwbE`r-lm$Ebd_^e zck3W=umg47mFvVMV=I_1EKih{=1~IO$OY1Zt#9Q6?}XPRy-&eNT}Lw7JiZKRSibLA zQmMZG-sTR+tgOq91#rLK|7l)}?TAovWob>)=Ihs!w%uB0W0SJyas9IL&D#4;zV<$8 zZmRR{e$ToMj!RpeFq@m*Yae&4s_cH&v-!XWwqj@{_ft@D=P+*kbZuT8>+s%{>-^@d zkdQEMNYS*CzFfMy)H-}`uXXaSRRLP}!snFtx_%m#H~Aw!r}lQ2%9qC>cOR2vdOKak!V@^{z6?j9h6xsyB)bsuZ2;xs1m z>MCA!R#_?ctyd@1GSH8#q>~qtTfgWVxmj#y?zy@mu3DI&yX$SH7Hl|cAM%8RU25Xy z3f0XxLxfs#C}sSM?bo{?2@(g-asuvTQuzltARcQ`E=Ro0ngYt&c+*(r9uwOcr5(7L z)qMEt2UZOO(~!ZH;<*$|({``{_2Iwbu?C~=;dVLLDvz$#!UZo9 zZi#+TXfSAVs5H@v)K%M6M?duF~ zaOf~mwWD^V--YEZZDE}kP*G9>S{lS~zYGs|Z%-R^yAx_}o}92XOsnB`+ujA#P#}~& z@Wo(C&h)dwn+C0HNm?bp5@kdd*dCp@pc^NEN<_E_WoV@JhRe5nSqQ zs|)_yzumTW&B_r}4Lma&sBg5C#TK|0xN zOpP6EOiAu-sfZR>&;)xj1=JS01Ggh`D!WW6w}tHP&LOIEP|YjGa-0K1@pPU`472&L zVx3{LU8}ht|E)R8K#KLTl9+oIe5TgKOA=~9RrP;qFEJ3s8B%su@~NQA!jCi>yC>-J z-lcZAxO>nQALEpa>Xwp2*88$B?&UK3U!FxS4iBQ;91nD!HlYUgs{s-jN+_-}0;6Vl zbSJ)wH9#O&Ww6y$Vy7A(WW;3_#)_c5>{3uE)H@A-f^-g($1NDa$Ut?GG~DOHJAEV`wvFvL7HC+AY)sE_3;A=H@ z?a8kzAamMeHf6+o{fEQ~=&Y6^^S)tEj7G`6IpnQY42AA9s-7N5|?l6YoZeG~2cIIA1l z?amY#e8!ypoC6ihRlW3tkGFWd0Qndo3lKeRHjoNFr*L7ki7s6ht3=6NtTKiwZZ5nt z$_xwTQiEja#%_|NS#QxU4ss=H!`xAPA9rYOU-JH^jdVS3>UfNi%gAVE!+>Q0NZ9s$ zUz?1py4^Q_0M zb31Io*%=+EDHGGw#204r)v+p`2R{?D<1$t7eJFX*ipvbPcTc*D+hUhGeI2ZVtLf^P zA=hnY#UbSqRgK!m-Os49Sa5|`PO`TnKR%=^Q z2@E8Mu-7xNh(!J@5tL{pWWhsC#Z2OS!x$(=*z5s&-DmN zjL7QMZ(WtF5wPJ#TtLT3LlLwYF4OElw;~gU)DSB6Gq@i-p3Q2dHe2y`VN(S2=`tu| zphvKpzTqk6gffb$E%SSel(Xu+Z=d8^ZaGjGyQeYxHuVrsJ~7p`r9CsXZ^2t1IOSws zbVFHW)f_ju`|^$GML&fSv}@wl|VPqV@At$Ct&KmT{$l^f3onQ^|Lp79jX$mH)D zKt@-hZ~d=Lntl28)-e&J&H$-{&FgN1a>C4o{xu_@kl;oLsz9*K0+ERi$IV)SJVri7 z;VVJMiu0W;;kJ>Mk@a8MSE$40#3H!a7_}u5FSuP$@ugXf9W)ePt^vcaJSk)@X`Ix< zg?=S^z5^SLEv2k3r51ht zk@iKGOtuM8k{aIT?RxTIC!?;Zt6)>-7pwAH$HKUD zpc_NdE~jjnu`SXnut;$)&3<0ex}&_XU75+&DfTf+YcGUqkRSJTBDG`*VCyJ^h#<3} zM1S*6k1GXwQJ-#^1-_**SHCefW#968^vm|1<|MkiDnsUU!w&u7_s3SA{bX6SlC9m1 z?TCurL46-{Wz_=woe)^yQIw}m0|(Juj4T3G_$3N^Rq2?W!mVfMhm$AI`WIusA{bcUbx~zV?Ar@^Y?H?TM+CFSLIUL#@(8zV}a_)@2F>Q!EnFCaY`?{sHW6BjV_F6yp z8~QKcsia?DGX1r;QH1KS&Xh%xA7Am4!+)CfF=ypt8l{qrD^ecxt$|Uip_YJ&A*;gd zj0VKjw<uu!gaRrthSm9LnMI+*9VNm--3-|STH{jfVX?H!Zcp|h0&isb4 zOoy*bj9n?vH5=NKcutQX(n+n`GH?lGjSQaze&XbRSNQ>HRp|XuzXI1D& z-IiNe*H}Bz*YfV;hgt6KKL)m&ilFl>Nzfo7VHH{#Y<#Fw=wR7|YjAH%nDIz~*=*`^(A}pc{nMz;xw9)tokJQNqzi?FwO73D|ch9~x8M3SQ zm+M>q_C4s=l}4lYrEnHDcv~)TsKqyM5E&Qy^rUf9!A$V(%9yAP==jAdRVD?%vj}aP zEmxv=aOQh^8ky5nNs(ZLD4CTCyu7@7Vxwe|}cDv`=`pH9ls1h#QQ{GYP3uAe*C{DUR?J2DeHeqo5menad2KK4q3l zA1k4t*X&$d(jsmbR+h0;9H>}u8KH<$nTk10EN`YN&4$zBoY|MwMbV*EkhBHV z7t#=7_7T7xMc5&MIo*%9n#SU%VobqqjPioeMv;r|>E0f|W1C?jPsI(e{KpS2`J|`a znpS>zWmAF0J=zYdd9=G-ndldWp9<>=T~o-CI)o*bb&_g(CM~ZY#gD?pQL;NIKT%q8 zjx7#Qq?}UzCGke$tb_ypQuy-o$INH7)Naizsr^CY+KG@SQ?~*~97uu^@HM_fKCLiO z{YQ%~0}+&xT>hFs;Lf_C@y$*H{h$$r6h9dBF=_4EL2UWv`}-MM0|cs^qr1n?gs-A! zExc~Bz~S@6)tt=AW3Xp3jm^DT|3hXzt+Bn&Ro3@}$C3auUuz$?o=4|-9^V$Oe`{!6 z3l;+4Sms^ZKsxpxB7q8k9#8eJ^w;8z4TvBCnP^p=pBXo1A!Hica9LLnc}~t#^MuM0 zs-nBGo@b|(e0xXyOZ!Um>H;rLXo1>tDMxzK1X9*E=W)vgyEkNDsKK2z9+(Od_W*2Hr9o4Yd(=&E6boWVUC zBy}BZ8r|GUHweOB9e}?}-ac~o)ym+x#0=X0{zF;v!)gZ$ znfUVOMQYA9RVfu|Gd^TE4;L1kDTp(#TM?ria*@)ITwb&aWn45idW0dB{>#vwfCA0C ztsB1NavAdd7eJM-QDSo?kukKdaWp=4gP~Q9Rae57?nSZrVa*vune_u{1}f{nH0`b% zm2&WHl@cuD=4BLS8AJmn>w=6FQtF@+^$|@e4clvt6Wt^_)CGBi1P$%PdT~0rwvhSk^vSYk2?M%oP=o6L9jNpM!TuTS5rUFxR8vi5! zTCJ!}XMgDl-qD!N3ZzOE=yqD#?yp<&98^SwTh)7HDGn`9d?uW5uvDrNyr`ctlJ=i1 zCjDp66BnO~3o8G51(o7=_Md-elcE+Arqp-@wME9au?GPNef&$62(pox)AY`hfnPTU z)se@$fe-!YjkUn61|jySy`TysDwf@v0{P8C9-xt?p-=$ilBQ zF<=fI|5{9)i1?h{>pjS!w4LtY%K(SkvJ6K;;E!+u{Jsld-SsU1#<1Pg75L9etH1O4 z01FV)!ErX zy@FHjV_v&lZr^UVIhNRB*Q#ju@mk9k`EI9k>M=(z=%hM0yjN}Hw@Br?oEwiB+g<57 zJznLwC2t2ydElB{)0x}pk4op<3GKZzOV`cq)Ex^49cNwLdu^XuTS`?5WQWdOjLXy|RAdu?t zk7Jk=f@BW8poa6~BAGnb&fpSK*czqspu0&Y8>zDXN|;_nW88z-)Gd5BTg!Sk;NJ9| zZhwDrf2TvAyw5V-!jF`^XOUaSU4Ow`1!}}=%FN}<&$2FeWGW1dqKOuD>d)dWL5~$& z9`opQkT!A6M+T*ypE`w;IcY1}Yb`)HaHKUjU~P*lGICSO@@rFd)*m}TRvh9H&tCgO zMWHwh^M4P+{E;*ghj@O+NtOS~(2;niwRonrxEIs!I1o_mTL0%=>%S7M#4y0WZivS3 z30wU2VSqo8h_<==SlY9b|PpAD-;=^Ho_xqUSN_9NW7f+ z3}nH3i=ZP+!E>hY7`sI>jMCXe8sCKs05Ho39FNZnHd${Z^^g85O(F5U|5#8!Oy9pA zeJ4k`Kg;>M19TKrjD1q3WG4%w^2x%T#(LCs6_nxaJS$<;%?=`UmDwN(fN0~}8B^ea z5t@StN~_rFhfLC-&=>=m9qLR@urP`}1MV|?&~&#c_lgMeE`{H3APEf@3==OmY*_Ej!TSZfDEo0jt7yeC=1HyO333Nd3FwEAc3YMf~*VI z6wWR9%2B|t!$Bmzm9ZR{{@5OWIQVe;0%4Q12>NLR9{FHZg#{C4<2}MiJ&MpW9q6&M zs%!sD!tl@jEWee=+$%W_0>PjMbkqT1k_Z~;AXbC&gFK!J1jmqZB`~{ZS+?*NGQcEi zNE3;;2ese(|5Q5t*R$>ZEB3fJuqO`ei35AzF%O6Xd*Z;}f5>Qpum6TJ{JzY+-!k9D z`MrO3`%e6P-)F$>zw5n<1AE_xBo_zvelLt$9N7DNIP?D%06=`r_rV+Dz}|P_#ES!a zzhm;AII#D9*n+?1&5M67e!t?t-tQ2x zND~U5`4@7_kPwqum`_rlA+veHKdFl;*K0DrZYW!3sRi>%bGz%gVqU-BfQ26JT@%Ujyd+#yrO}ALo#&f=f<*{Wc|22 z_XW3(N7*O4?XRqH{P1J>%?kOo1Id9{xPI|2n=7kso-@CB>~!Ysb!+!t^;~qyzuuQ-w27J#EL=P^@D+^CP3Gi^ApI=3^pO8+(ufz5$tF~pK^=H) zBekX3Ryb!E6l5!GzknCK0rXw8feV&i~bO zfTn}Lz6C#Lp9tDw4Epj)t?a;`P`Ii*5hR@V0aW^jyaPGWZ_NIQoz@7`qTy;b=)+U; z#t`(mk->rsK%T-@!$mMx?>78ZcEmvLD|_-?O-f5wN9u?kXkCD2f^?IrX=1`n!VY4> zi8)UEss6jH70bB)Rn>@b6&&!dGR$4WKL=;A zUP$FvJ?Ca;Wo2Wp&_3Vz)SDj<+{w)iAj=kHTIr{Q_BbbN&DFG*#QZ>l)58`OtkAj1 zdAgRqIq*iCWPSe`FKTRj^Xr4Tnc0KBMyJ@y1~2sng7&H<9KTs)xqL^;a(%CZxr(tC zvP!!oQ|~-I>zwx}K4pe=UH5LUfavGZueI*w$^7vDciIvE{Xe@7{T{T?`RYSRj)@?x zW?>p-;C3_IcZ3rsT*7+Wf$4PMiB9}1&;iTG5p+cj4sz{TTS=I!E(1UD0=BYmm%XVHB7_qz1<7z!CjI_f*^*bUX)MqK05%i8B>VM>t?SQJ{-3O$5yzx-^Q+^h+h?4`G{em@hNH9AplX)d<<} zj$FU^0e^4iZT>?ftpkhnBAx;_IX)9i`C)7%b$pV;r--03FXm`C3vXkBy1@$+?mG5F zc@yCdN&~NNfMEEBEh+&f#JqzWS0G={!T2>W4KJjJ(yu@r&!-UEN2Uk~Yw8OUZnjPY z9moSde=}(FW|l~(-2#=!hv06|DtBD1T4HS66oz2l;vV7Aei38{I-I>yWr!b0Od&B3 ziN7+j91;sgvFi9UDA(x!y$uNxK>3ea+HN8jC#eWizz9z#+-TZMqNZ->6hQDXH>%+) z!J(`e!Xp-xWk!>3ej1PGpASWpebRj(nPL)VP)XRZ1am}C+Z)ikSJl6I?;g zwgMSgvr%13_`qV`Y)J}-0XxgR8d1J!t9kY3_18=xnDthiYw)MbH6UH1pw^V>m>$<~ z5SVk*pQE;AaCXGh(_$(B_DXcLMo7UVTbH(d#~$ZH*Vdq$<=dj zIz=ROrLXBSQ9_e@YXUg$bh-Yd;zks?>bdX9&82>EpAMXSc9S;B6)rofUH#%{@1B&y zdmq+3=zF~)F?q+W#m|o{EZPaiFi8jl;od6BaW-y7zTAOVS_3YZ5lDjASd9NGCKgGR zK*l3kk9%2nh~k$bsMj(Y=Hvs@`87TEgFl#LA$zQxGO^D82bk+vM#YDRsh-15_)5wE zC|=%XCs+z|*U`aHjBYS_@hAAbEpauI5AIra1_O5f8*e`+Q_}l&B;o7~7H;?xFsZGs z3oa8&D#PHBGx$buUR4M({^?^;*GKkbmy=L{u0CN26`clv%NOzq^%X(C^i8}AqdYl7 znONXR#oUX5+0N7$lfX^CjSuVngk1vT9b;wTuT`)7Dqk@tU4X&?Cmo?qtY$asfelu5 z0@rp`!|3gW@J}D%k)^K@wCyr*a!f3~$Y9~$JlUEm-ZT-kU(^u@@#Md?2TzRUN)SsAg1#qgvc?!`>8~$;ILZ67Z9Ho&ynIarRmW=s);lKy z#-xptpHaBWX~`grNiLJYcRmXjK?#Q~zL@+o43H?00N&i)H6T_QG(Z9l`!Mx1Ty}tG zMMP3VNZ3tJ1rcOi5c`1+Ud69DD3Mr1;sZY~ak(&x!dqM<1AkSa+SQox=YmgQ^Qlw- z62GSqHXn;R!Hay#WeOJ~^C-O4TrzR~Jo(wU-XxcsO~z(LnfDk2iy6d~W?Mq}35+Md z@&ha&W>PVeikVa_NyU;>EJ=T5FHEYe#p+(H?!`9g|1|ag+iX&bB+{8q%^(llMZxU9 zab8s=MVfMg)ZD}AiOAYO?S%Q{t8{79mXmv>z$OvQVn$Z*F*Xo;TFBZ}n4iIXlk+@IQ`o?&lEHMTc%lVA2)GR(kRf!TUe2Ci9$spDrKIy& zWr)j9=rg*;veQko>Z6SfB+o8;?V;c0{QTLTt4q4OW|_W9eO95(56kUae7+2X1?CHt z=_-|;s^@PxVSR_!`Ym~K61_z4-SCxBgw$&{huj^{qNTxS}(tudz?j z?TcIb67#_?x;@*%oHc{?Id=y+Hz&p{le@n4gxQ|^VR2y)K{E#K=}Z;?;1=L^+(W)) zUx}*rAFF$KGg%K^^?C_8tb-R-TBKCxRPTN~KaRZ#C2n_Z9~qR{9$;suFI3wVByD7w zBisDmp|xep9NA8|OcTT`x3VS-$-u|GMp{f6&t>&afIFRrxeEY1xWrbd91DEv?Tkng z-U?FR=7D%)@qDEBLlJ;Pw$e`n?4un??9-Yy4*bv%5FG6crH;5$fpfdWWG(#F!wlaH z1DI(CaE;IW1DufMm4aC21%mPLj!cgP@goH=tp;54oc;|D3BfoZ7FkH*%?6pwvN}XW z6~GA8%_?OGxBdx}dlxCUNEqmfO3aD|@XM!fsKk7=u3!7T;!~R{|vp;&D_!HqX%11uZc?0Gj^j{BhdapLPj+!9LDef}k8(5eINf=9tL?#jq z?1fgW*q6vhuL>sL1aQab4Nlz{EC+vV_EV$`)O*4NGPDSQEv$!>S-=gy_-8vP%PF1N z0IndnC=(?j2!cnG{O30H`S~A!i%)_`vl2DSP#8!+Airb>uEMIH7^iFEF(A$=ypI1U zf>PZLDKsu=d>eTdJb?SD!J{31@|*v$U5P*2R==C)nG{Sywx>>(3P1jC6-YZa3xfx4 zy#w577e;ZOFa$W%R+^Lua!M@e5W25c8x%oTsKe&OBDmQYwIvcSxLr^=-!n-&_`(8B zLAo+g3^JBKKV!!7WN^k;wqWrIcq0BF_$GUeLFT&_BtFD65c9xah6kn%m-0dCOH>Q6 zZL9(G?1}Y*QSy5GfUy4!Jy=8q=|>-fCr+{rlV@A}J(eWc9Xhtf?TypWR?%*q60LM(z zLC=8{xlbr_*xm^YWw1bliL_@Qgk2%%V{pWU6E)O@{t$g*Z+RC(Mjpz@)zcLhJlhiZl?#X}Hj_(86FFU8W064H-8c&LAG@*^xDkiOYL5TgcEyJOALRH< zUdcQXhD?%YaI1?nu1-rPUcDI-LHmA5D%ZJI_qUe7c^qUwl|jUZj>Gdr5JN^Mf%p^KYkvd{CR1wSb@TvToiRutCepvDmA=6Q?lPICe z;I>GWrA-+!wMd5+&iRJ@zR9(R1B~Ij^qm6#0k_DCF7Djhx#zm;sV6FhB+z1~3B&}I znVGi21Q0VqMz_%YSYHim^evsr^4?wJu;;ocF++^EaHV&ZZmmA6GQVVKU!!-S)4sg0 zQj1#sh!qvfhO%|7_7o*Z8A(a4U7A;r7pLP(yC1i8^AzGC1tdOqq6|zOE|+!n;H`mM zl=*JRvBf@__zuh*t(Hat)X3kbw z5?^&K+6udawQ|N7MM|z-m=l*0U<_R0`SvjiCL~^NP&P}l|J)}B*V!Yt&%G`o=BEum zx!!jAgR1M#cVx!C2GHE^1a-GKr|YIKiS+diQ8)i7VfJqGh1FGx&Y!{#G#_3kdsAi6 z>g%%%bm1$N#pG5JKSvms6kyfd&%cd~lV6pL6`N|7c@o&6@XmzhBSG>-nPk55yO}dr#ieQTFA1U+nlhKz!r= z+*fv1W;7`Vok9R}vhXxuzuaiwSXHs=C>FNI*zk~PfUlmtLeFxGUDfrn8c%G*9%{sRy2q8A zZ`gc>wmRxfLfk4#F(r}Y-zi*VzQN!MipkrMNr58eUCmD3#c(h>~7JKcrZ&1M(&x;HC85`xYqeRwv?w8iGGX0wa7L0}w-4^np_R5Q9#QgrLM(5pM8s%poZ|K%m0I*fTvjA4Huu)2s@?}j zyDq;@H`4!v6@|s;x=(NZIeo+4FNYb%dLIk+K|Rno4^9cMxdD2yb(G(Hi_49KDQnIu zK4l*?Id;D4Iq8k7+bxbKD1TuU${9k*Bkbu1ns{P8w_>gNgCMCf>AhnMwJxtOhaqlD z^o6E)#d>IkiJH%>KBwHLTGJV(MF+ZU8!6B^QC;d2D>-p6*s;0vV|DdFMe_PB?`x&t ziDZpHAi0EphdZ!Xn+7VneQ*odO&Tug%YP5*ITv%#N-_F~_tx|L=}UJ{_Q&{VOqjhs zsCDW?-vD)h7D4iD4;N?jDrX(c`MKnCRj$a$-U83|aHs3J)0F+4c~ZL;ciug6Ysmc8 zslHsXY7b0tm}xVsO;CV%LnPp8Pmvb_pL=a3RgAKkG&;t`Pe8B-lepa2j1#}X1>KBT zWFgcBY+YALfvHQzP9K^oQmZGlI-ERsF7usbE@E#{z5KY-tAISDOlE-PwfGfUKwga; z9>OJ1UG*t$*Oic)Tr3>GtE-$?66)g(s~g zIZgUu*}1Xlg(KY#I_^!nXri!SQ2#6|Tvf^)TXwe0`3C#hP@~ap&rkAC954Qquv3#K z*jQkGseA3wtUbpVN4cAWy0$}7A8u{EzA>lMl z00Mp_pwS3KKpf5!h=E|tZy4~T@GlaIbFo4h@k8Q*-6T-xU#VI5`Q|?r`fG!@KWWg>N>eR zU$QAr$0s;?n{~Sby0#l#m3jQl$`q|fUiRHzcdRF^d(|@5ykY?wj-CN1$_P5aQq=y) zdO`2gEe&2n{$YbUog(5*RxayGpeR@Q1dkU|_^Kd}C30Bx zmG$(tr!k=JUz->Y@%BK77WKu6075Ku5*KT-v7_Kk+;eJeDQ||k-%oq!m7%2@FVY## zDEE~(bi6Pp$Kk#Cl{@TMaa?kZ0TMDa8Ik%PTZJUD6M;XbJ~=16B@*@J6!_FVAE>bF zs|(R|dHRHYEsvb9QGVP|JatYaKcY5M)n%aAj`$KLNtHqR8BT^V zC019OO0UfxtaOJ?Y;phYVCmQEDzjn%wyJ9?@lT_r**vljsJwyWu~yy0IPDJVELeuF z=aprh)o|~`q-jx}Te!d)|Bh3Q${36uR8sJ&@+&_bg{tYQax4e15Fofj}h zjgE5@{VG&qGqIdUw5{;)+>F{~NFWT3igD7#b%jZN1O`jqa>=Phii10=?!1^2am~KD z8`sSIQ)o??g2;pAU4z;_!CIaQA3!JYk(d_i7#IHqxET-uGL}HNZt*`S7QI=nc9Vo!>MA$w)kRjyT1+)v^{hol z_AJVw@qR_t3EZ%5R`Jm%mV#ZB4mu87tX=hqqfL<~yTUV9^+ry4d|T&Sjb~iur$1or zIom66DVQi|DDBf_21pfEJ`&#g0fogut8T3awnW*-*M=X^di+t#2cXECq@}v9OzFw9Fm6PyZyQE?8^e- zk;B9c>JN4xpT#>c*>^a)CfhX~%L`LpuwLLoYwS$kWpLDL+3u;>hAP*Uh!iPjqlKMa5VH zs|=rjs@(UAcjx7DB?9FQb{lvxV?n1m` z<8_O=E@cZSS5NqJowck;AD-9r7^`P{mDN&MI+HJ}JlT`ev@lqn*IE6*_j>Swjs>r2 zM+#Q%fjoa1s-&=_WqcN!?KoP`dD7}!IVX}yEY=-S2d&?5}8(Tnsb{E${wxE>~v!?$|Qk%KT%O8WUtRT6FUdd>N@@y;!%xJ{$dW(6x4j zXIH&lPUQWAfj&Ktmgsre#@-t3%3HVO0!KbScgHL9txjd_7Q!>191}z}n~J{I_{1_k zes{GGZ8*InnV@K=x8>RDMT^1@9MoMEU0`tELMDRI{>Z7+u~g{-XXC5vJ3_z<)IP%% zQTY$(L-cb5os6=c^(#V$96QzRpZ8Q*LMz;} zTx{!Sh26Pa75gR=$Iif=H&;6FAM&5iiR>p6I6og>RabG^QeHeJoKSE&@Wko7Po&$c zxWjL1wjc4{?zF9~%0xAO8syo+& zdUiZCvM7BJw>;s&n8%%TvG;CwPxr=#eYkZ5@bLoO?|1(v(DMK2&p2-yofoTrhx7d_ z+7{-o>91|B_^)mn6-BteqvLf6L!l4f=R{7G%-x`lOh4A8NLMmP3sf{ueEn-3NMwXf^*zG*wZVgXnr8!;fyItLDWB{ck^M{&g>4@fxy*_9!XNvMbh